Release v2.1.1: Token Handling Improvement and DeepSeek Support

- Completely reworked token handling mechanism
- Removed custom token calculation logic
- Direct max_tokens passing to LLM APIs
- Added support for DeepSeek provider
- Integrated deepseek-chat and deepseek-reasoner models

Thanks to @estiens for reporting token handling issues and providing valuable feedback (https://github.com/smkrv/ha-text-ai/issues/1).
This commit is contained in:
SMKRV
2025-01-28 15:54:48 +03:00
parent 82e1f0c4f9
commit bfd64d1122
16 changed files with 125 additions and 148 deletions
@@ -19,7 +19,7 @@
"model": "Zu verwendendes AI-Modell",
"api_endpoint": "Benutzerdefinierte API-Endpunkt-URL (optional)",
"temperature": "Kreativität der Antwort (0-2, niedriger = fokussierter)",
"max_tokens": "Maximale Länge der Antwort (1-4096 Token)",
"max_tokens": "Maximale Länge der Antwort (1-100000 Token)",
"request_interval": "Minimale Zeit zwischen Anfragen (0,1-60 Sekunden)",
"context_messages": "Anzahl der zu behaltenden Kontextnachrichten (1-20)",
"max_history_size": "Maximale Größe des Gesprächsverlaufs (1-100)"
@@ -33,7 +33,7 @@
"api_key": "API-Schlüssel zur Authentifizierung",
"model": "Zu verwendendes AI-Modell",
"temperature": "Kreativität der Antwort (0-2, niedriger = fokussierter)",
"max_tokens": "Maximale Länge der Antwort (1-4096 Token)",
"max_tokens": "Maximale Länge der Antwort (1-100000 Token)",
"api_endpoint": "Benutzerdefinierte API-Endpunkt-URL (optional)",
"api_provider": "API-Anbieter",
"request_interval": "Minimale Zeit zwischen Anfragen (0,1-60 Sekunden)",
@@ -77,7 +77,7 @@
"data": {
"model": "AI-Modell",
"temperature": "Kreativität der Antwort (0-2)",
"max_tokens": "Maximale Länge der Antwort (1-4096)",
"max_tokens": "Maximale Länge der Antwort (1-100000)",
"request_interval": "Minimale Anfrageintervall (0,1-60 Sekunden)",
"context_messages": "Anzahl der vorherigen Nachrichten, die im Kontext enthalten sein sollen (1-20)",
"max_history_size": "Maximale Größe des Gesprächsverlaufs (1-100)"
@@ -89,7 +89,8 @@
"api_provider": {
"options": {
"openai": "OpenAI (kompatibel)",
"anthropic": "Anthropic (kompatibel)"
"anthropic": "Anthropic (kompatibel)",
"deepseek": "DeepSeek"
}
}
},
@@ -124,7 +125,7 @@
},
"max_tokens": {
"name": "Max Tokens",
"description": "Maximale Länge der Antwort (1-4096 Token)"
"description": "Maximale Länge der Antwort (1-100000 Token)"
}
}
},
@@ -19,7 +19,7 @@
"model": "AI model to use",
"api_endpoint": "Custom API endpoint URL (optional)",
"temperature": "Response creativity (0-2, lower = more focused)",
"max_tokens": "Maximum response length (1-4096 tokens)",
"max_tokens": "Maximum response length (1-100000 tokens)",
"request_interval": "Minimum time between requests (0.1-60 seconds)",
"context_messages": "Number of context messages to retain (1-20)",
"max_history_size": "Maximum conversation history size (1-100)"
@@ -33,7 +33,7 @@
"api_key": "API key for authentication",
"model": "AI model to use",
"temperature": "Response creativity (0-2, lower = more focused)",
"max_tokens": "Maximum response length (1-4096 tokens)",
"max_tokens": "Maximum response length (1-100000 tokens)",
"api_endpoint": "Custom API endpoint URL (optional)",
"api_provider": "API Provider",
"request_interval": "Minimum time between requests (0.1-60 seconds)",
@@ -77,7 +77,7 @@
"data": {
"model": "AI model",
"temperature": "Response creativity (0-2)",
"max_tokens": "Maximum response length (1-4096)",
"max_tokens": "Maximum response length (1-100000)",
"request_interval": "Minimum request interval (0.1-60 seconds)",
"context_messages": "Number of previous messages to include in context (1-20)",
"max_history_size": "Maximum conversation history size (1-100)"
@@ -89,7 +89,8 @@
"api_provider": {
"options": {
"openai": "OpenAI (compatible)",
"anthropic": "Anthropic (compatible)"
"anthropic": "Anthropic (compatible)",
"deepseek": "DeepSeek"
}
}
},
@@ -124,7 +125,7 @@
},
"max_tokens": {
"name": "Max Tokens",
"description": "Maximum length of the response (1-4096 tokens)"
"description": "Maximum length of the response (1-100000 tokens)"
}
}
},
@@ -19,7 +19,7 @@
"model": "Modelo de IA a utilizar",
"api_endpoint": "URL del endpoint de API personalizado (opcional)",
"temperature": "Creatividad de la respuesta (0-2, menor = más enfocado)",
"max_tokens": "Longitud máxima de la respuesta (1-4096 tokens)",
"max_tokens": "Longitud máxima de la respuesta (1-100000 tokens)",
"request_interval": "Tiempo mínimo entre solicitudes (0.1-60 segundos)",
"context_messages": "Número de mensajes de contexto a retener (1-20)",
"max_history_size": "Tamaño máximo del historial de conversación (1-100)"
@@ -33,7 +33,7 @@
"api_key": "Clave API para autenticación",
"model": "Modelo de IA a utilizar",
"temperature": "Creatividad de la respuesta (0-2, menor = más enfocado)",
"max_tokens": "Longitud máxima de la respuesta (1-4096 tokens)",
"max_tokens": "Longitud máxima de la respuesta (1-100000 tokens)",
"api_endpoint": "URL del endpoint de API personalizado (opcional)",
"api_provider": "Proveedor de API",
"request_interval": "Tiempo mínimo entre solicitudes (0.1-60 segundos)",
@@ -77,7 +77,7 @@
"data": {
"model": "Modelo de IA",
"temperature": "Creatividad de la respuesta (0-2)",
"max_tokens": "Longitud máxima de la respuesta (1-4096)",
"max_tokens": "Longitud máxima de la respuesta (1-100000)",
"request_interval": "Intervalo mínimo de solicitud (0.1-60 segundos)",
"context_messages": "Número de mensajes anteriores a incluir en el contexto (1-20)",
"max_history_size": "Tamaño máximo del historial de conversación (1-100)"
@@ -89,7 +89,8 @@
"api_provider": {
"options": {
"openai": "OpenAI (compatible)",
"anthropic": "Anthropic (compatible)"
"anthropic": "Anthropic (compatible)",
"deepseek": "DeepSeek"
}
}
},
@@ -124,7 +125,7 @@
},
"max_tokens": {
"name": "Máx. Tokens",
"description": "Longitud máxima de la respuesta (1-4096 tokens)"
"description": "Longitud máxima de la respuesta (1-100000 tokens)"
}
}
},
@@ -19,7 +19,7 @@
"model": "उपयोग करने के लिए एआई मॉडल",
"api_endpoint": "कस्टम एपीआई एंडपॉइंट यूआरएल (वैकल्पिक)",
"temperature": "प्रतिक्रिया की रचनात्मकता (0-2, कम = अधिक केंद्रित)",
"max_tokens": "प्रतिक्रिया की अधिकतम लंबाई (1-4096 टोकन)",
"max_tokens": "प्रतिक्रिया की अधिकतम लंबाई (1-100000 टोकन)",
"request_interval": "अनुरोधों के बीच न्यूनतम समय (0.1-60 सेकंड)",
"context_messages": "रखने के लिए संदर्भ संदेशों की संख्या (1-20)",
"max_history_size": "अधिकतम बातचीत इतिहास आकार (1-100)"
@@ -33,7 +33,7 @@
"api_key": "प्रमाणीकरण के लिए एपीआई कुंजी",
"model": "उपयोग करने के लिए एआई मॉडल",
"temperature": "प्रतिक्रिया की रचनात्मकता (0-2, कम = अधिक केंद्रित)",
"max_tokens": "प्रतिक्रिया की अधिकतम लंबाई (1-4096 टोकन)",
"max_tokens": "प्रतिक्रिया की अधिकतम लंबाई (1-100000 टोकन)",
"api_endpoint": "कस्टम एपीआई एंडपॉइंट यूआरएल (वैकल्पिक)",
"api_provider": "एपीआई प्रदाता",
"request_interval": "अनुरोधों के बीच न्यूनतम समय (0.1-60 सेकंड)",
@@ -77,7 +77,7 @@
"data": {
"model": "एआई मॉडल",
"temperature": "प्रतिक्रिया की रचनात्मकता (0-2)",
"max_tokens": "प्रतिक्रिया की अधिकतम लंबाई (1-4096)",
"max_tokens": "प्रतिक्रिया की अधिकतम लंबाई (1-100000)",
"request_interval": "न्यूनतम अनुरोध अंतराल (0.1-60 सेकंड)",
"context_messages": "संदर्भ में शामिल करने के लिए पिछले संदेशों की संख्या (1-20)",
"max_history_size": "अधिकतम बातचीत इतिहास आकार (1-100)"
@@ -89,7 +89,8 @@
"api_provider": {
"options": {
"openai": "OpenAI (अनुकूलित)",
"anthropic": "Anthropic (अनुकूलित)"
"anthropic": "Anthropic (अनुकूलित)",
"deepseek": "DeepSeek"
}
}
},
@@ -124,7 +125,7 @@
},
"max_tokens": {
"name": "अधिकतम टोकन",
"description": "प्रतिक्रिया की अधिकतम लंबाई (1-4096 टोकन)"
"description": "प्रतिक्रिया की अधिकतम लंबाई (1-100000 टोकन)"
}
}
},
@@ -19,7 +19,7 @@
"model": "Modello AI da utilizzare",
"api_endpoint": "URL dell'endpoint API personalizzato (opzionale)",
"temperature": "Creatività della risposta (0-2, più basso = più focalizzato)",
"max_tokens": "Lunghezza massima della risposta (1-4096 token)",
"max_tokens": "Lunghezza massima della risposta (1-100000 token)",
"request_interval": "Tempo minimo tra le richieste (0.1-60 secondi)",
"context_messages": "Numero di messaggi di contesto da mantenere (1-20)",
"max_history_size": "Dimensione massima della cronologia delle conversazioni (1-100)"
@@ -33,7 +33,7 @@
"api_key": "Chiave API per l'autenticazione",
"model": "Modello AI da utilizzare",
"temperature": "Creatività della risposta (0-2, più basso = più focalizzato)",
"max_tokens": "Lunghezza massima della risposta (1-4096 token)",
"max_tokens": "Lunghezza massima della risposta (1-100000 token)",
"api_endpoint": "URL dell'endpoint API personalizzato (opzionale)",
"api_provider": "Fornitore API",
"request_interval": "Tempo minimo tra le richieste (0.1-60 secondi)",
@@ -77,7 +77,7 @@
"data": {
"model": "Modello AI",
"temperature": "Creatività della risposta (0-2)",
"max_tokens": "Lunghezza massima della risposta (1-4096)",
"max_tokens": "Lunghezza massima della risposta (1-100000)",
"request_interval": "Intervallo minimo di richiesta (0.1-60 secondi)",
"context_messages": "Numero di messaggi precedenti da includere nel contesto (1-20)",
"max_history_size": "Dimensione massima della cronologia delle conversazioni (1-100)"
@@ -89,7 +89,8 @@
"api_provider": {
"options": {
"openai": "OpenAI (compatibile)",
"anthropic": "Anthropic (compatibile)"
"anthropic": "Anthropic (compatibile)",
"deepseek": "DeepSeek"
}
}
},
@@ -124,7 +125,7 @@
},
"max_tokens": {
"name": "Token massimi",
"description": "Lunghezza massima della risposta (1-4096 token)"
"description": "Lunghezza massima della risposta (1-100000 token)"
}
}
},
@@ -19,7 +19,7 @@
"model": "Модель ИИ для использования",
"api_endpoint": "Пользовательский URL-адрес конечной точки API (необязательно)",
"temperature": "Креативность ответа (0-2, меньше = более сфокусированно)",
"max_tokens": "Максимальная длина ответа (1-4096 токенов)",
"max_tokens": "Максимальная длина ответа (1-100000 токенов)",
"request_interval": "Минимальный интервал между запросами (0.1-60 секунд)",
"context_messages": "Количество сохраняемых контекстных сообщений (1-20)",
"max_history_size": "Максимальный размер истории разговора (1-100)"
@@ -33,7 +33,7 @@
"api_key": "API-ключ для аутентификации",
"model": "Модель ИИ для использования",
"temperature": "Креативность ответа (0-2, меньше = более сфокусированно)",
"max_tokens": "Максимальная длина ответа (1-4096 токенов)",
"max_tokens": "Максимальная длина ответа (1-100000 токенов)",
"api_endpoint": "Пользовательский URL-адрес конечной точки API (необязательно)",
"api_provider": "Провайдер API",
"request_interval": "Минимальный интервал между запросами (0.1-60 секунд)",
@@ -77,7 +77,7 @@
"data": {
"model": "Модель ИИ",
"temperature": "Креативность ответа (0-2)",
"max_tokens": "Максимальная длина ответа (1-4096)",
"max_tokens": "Максимальная длина ответа (1-100000)",
"request_interval": "Минимальный интервал между запросами (0.1-60 секунд)",
"context_messages": "Количество предыдущих сообщений для включения в контекст (1-20)",
"max_history_size": "Максимальный размер истории разговора (1-100)"
@@ -89,7 +89,8 @@
"api_provider": {
"options": {
"openai": "OpenAI (совместимый)",
"anthropic": "Anthropic (совместимый)"
"anthropic": "Anthropic (совместимый)",
"deepseek": "DeepSeek"
}
}
},
@@ -124,7 +125,7 @@
},
"max_tokens": {
"name": "Максимум токенов",
"description": "Максимальная длина ответа (1-4096 токенов)"
"description": "Максимальная длина ответа (1-100000 токенов)"
}
}
},
@@ -19,7 +19,7 @@
"model": "AI модел који ће се користити",
"api_endpoint": "Прилагођени URL API крајње тачке (опционо)",
"temperature": "Креативност одговора (0-2, нижа = фокусираније)",
"max_tokens": "Максимална дужина одговора (1-4096 токена)",
"max_tokens": "Максимална дужина одговора (1-100000 токена)",
"request_interval": "Минимално време између захтева (0.1-60 секунди)",
"context_messages": "Број контекстуалних порука које треба задржати (1-20)",
"max_history_size": "Максимална величина историје разговора (1-100)"
@@ -33,7 +33,7 @@
"api_key": "API кључ за аутентификацију",
"model": "AI модел који ће се користити",
"temperature": "Креативност одговора (0-2, нижа = фокусираније)",
"max_tokens": "Максимална дужина одговора (1-4096 токена)",
"max_tokens": "Максимална дужина одговора (1-100000 токена)",
"api_endpoint": "Прилагођени URL API крајње тачке (опционо)",
"api_provider": "API провајдер",
"request_interval": "Минимално време између захтева (0.1-60 секунди)",
@@ -77,7 +77,7 @@
"data": {
"model": "AI модел",
"temperature": "Креативност одговора (0-2)",
"max_tokens": "Максимална дужина одговора (1-4096)",
"max_tokens": "Максимална дужина одговора (1-100000)",
"request_interval": "Минимално време између захтева (0.1-60 секунди)",
"context_messages": "Број претходних порука које треба укључити у контекст (1-20)",
"max_history_size": "Максимална величина историје разговора (1-100)"
@@ -89,7 +89,8 @@
"api_provider": {
"options": {
"openai": "OpenAI (компатибилан)",
"anthropic": "Anthropic (компатибилан)"
"anthropic": "Anthropic (компатибилан)",
"deepseek": "DeepSeek"
}
}
},
@@ -124,7 +125,7 @@
},
"max_tokens": {
"name": "Максимални токени",
"description": "Максимална дужина одговора (1-4096 токена)"
"description": "Максимална дужина одговора (1-100000 токена)"
}
}
},
@@ -19,7 +19,7 @@
"model": "要使用的AI模型",
"api_endpoint": "自定义API端点URL(可选)",
"temperature": "响应创造力(0-2,越低越专注)",
"max_tokens": "最大响应长度(1-4096个标记)",
"max_tokens": "最大响应长度(1-100000个标记)",
"request_interval": "请求之间的最小时间(0.1-60秒)",
"context_messages": "保留的上下文消息数量(1-20",
"max_history_size": "最大对话历史大小(1-100"
@@ -33,7 +33,7 @@
"api_key": "用于身份验证的API密钥",
"model": "要使用的AI模型",
"temperature": "响应创造力(0-2,越低越专注)",
"max_tokens": "最大响应长度(1-4096个标记)",
"max_tokens": "最大响应长度(1-100000个标记)",
"api_endpoint": "自定义API端点URL(可选)",
"api_provider": "API提供者",
"request_interval": "请求之间的最小时间(0.1-60秒)",
@@ -77,7 +77,7 @@
"data": {
"model": "AI模型",
"temperature": "响应创造力(0-2",
"max_tokens": "最大响应长度(1-4096",
"max_tokens": "最大响应长度(1-100000",
"request_interval": "最小请求间隔(0.1-60秒)",
"context_messages": "要包含在上下文中的先前消息数量(1-20)",
"max_history_size": "最大对话历史大小(1-100"
@@ -89,7 +89,8 @@
"api_provider": {
"options": {
"openai": "OpenAI(兼容)",
"anthropic": "Anthropic(兼容)"
"anthropic": "Anthropic(兼容)",
"deepseek": "DeepSeek "
}
}
},
@@ -124,7 +125,7 @@
},
"max_tokens": {
"name": "最大标记数",
"description": "响应的最大长度(1-4096个标记)"
"description": "响应的最大长度(1-100000个标记)"
}
}
},