From fafd92761053805a07e5b7fe83702f7d3e7de6b0 Mon Sep 17 00:00:00 2001 From: SMKRV Date: Mon, 25 Nov 2024 14:59:44 +0300 Subject: [PATCH] Release v2.0.0 --- custom_components/ha_text_ai/__init__.py | 8 + custom_components/ha_text_ai/config_flow.py | 26 +- custom_components/ha_text_ai/const.py | 13 +- custom_components/ha_text_ai/coordinator.py | 34 ++- .../ha_text_ai/translations/de.json | 257 ++++++++++++++++++ .../ha_text_ai/translations/en.json | 6 +- .../ha_text_ai/translations/ru.json | 94 ++++--- 7 files changed, 383 insertions(+), 55 deletions(-) create mode 100644 custom_components/ha_text_ai/translations/de.json diff --git a/custom_components/ha_text_ai/__init__.py b/custom_components/ha_text_ai/__init__.py index e61708b..47386cd 100644 --- a/custom_components/ha_text_ai/__init__.py +++ b/custom_components/ha_text_ai/__init__.py @@ -28,6 +28,7 @@ from .const import ( CONF_API_ENDPOINT, CONF_REQUEST_INTERVAL, CONF_API_PROVIDER, + CONF_CONTEXT_MESSAGES, API_PROVIDER_OPENAI, API_PROVIDER_ANTHROPIC, DEFAULT_MODEL, @@ -36,6 +37,7 @@ from .const import ( DEFAULT_OPENAI_ENDPOINT, DEFAULT_ANTHROPIC_ENDPOINT, DEFAULT_REQUEST_INTERVAL, + DEFAULT_CONTEXT_MESSAGES, API_TIMEOUT, SERVICE_ASK_QUESTION, SERVICE_CLEAR_HISTORY, @@ -54,6 +56,7 @@ SERVICE_SCHEMA_ASK_QUESTION = vol.Schema({ vol.Optional("model"): cv.string, vol.Optional("temperature"): cv.positive_float, vol.Optional("max_tokens"): cv.positive_int, + vol.Optional("context_messages"): cv.positive_int, }) SERVICE_SCHEMA_SET_SYSTEM_PROMPT = vol.Schema({ @@ -102,6 +105,7 @@ async def async_setup(hass: HomeAssistant, config: Dict[str, Any]) -> bool: temperature=call.data.get("temperature"), max_tokens=call.data.get("max_tokens"), system_prompt=call.data.get("system_prompt"), + context_messages=call.data.get("context_messages"), ) except Exception as err: _LOGGER.error("Error asking question: %s", str(err)) @@ -243,6 +247,10 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: max_tokens=entry.data.get(CONF_MAX_TOKENS, DEFAULT_MAX_TOKENS), temperature=entry.data.get(CONF_TEMPERATURE, DEFAULT_TEMPERATURE), is_anthropic=is_anthropic, + context_messages=entry.data.get( + CONF_CONTEXT_MESSAGES, + DEFAULT_CONTEXT_MESSAGES + ), ) coordinator.data = coordinator._initial_state.copy() diff --git a/custom_components/ha_text_ai/config_flow.py b/custom_components/ha_text_ai/config_flow.py index f5a45c4..740bb8b 100644 --- a/custom_components/ha_text_ai/config_flow.py +++ b/custom_components/ha_text_ai/config_flow.py @@ -18,6 +18,7 @@ from .const import ( CONF_API_ENDPOINT, CONF_REQUEST_INTERVAL, CONF_API_PROVIDER, + CONF_CONTEXT_MESSAGES, API_PROVIDER_OPENAI, API_PROVIDER_ANTHROPIC, API_PROVIDERS, @@ -27,6 +28,7 @@ from .const import ( DEFAULT_REQUEST_INTERVAL, DEFAULT_OPENAI_ENDPOINT, DEFAULT_ANTHROPIC_ENDPOINT, + DEFAULT_CONTEXT_MESSAGES, MIN_TEMPERATURE, MAX_TEMPERATURE, MIN_MAX_TOKENS, @@ -94,6 +96,13 @@ class HATextAIConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): vol.Coerce(float), vol.Range(min=MIN_REQUEST_INTERVAL) ), + vol.Optional( + CONF_CONTEXT_MESSAGES, + default=DEFAULT_CONTEXT_MESSAGES + ): vol.All( + vol.Coerce(int), + vol.Range(min=1, max=20) + ), }), errors=self._errors ) @@ -171,8 +180,11 @@ class HATextAIConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): CONF_API_PROVIDER: self._provider, CONF_NAME: instance_name, **user_input, - "unique_id": unique_id - } + "unique_id": unique_id, + CONF_CONTEXT_MESSAGES: user_input.get( + CONF_CONTEXT_MESSAGES, + DEFAULT_CONTEXT_MESSAGES) + } ) @staticmethod @@ -224,5 +236,15 @@ class OptionsFlowHandler(config_entries.OptionsFlow): vol.Coerce(float), vol.Range(min=MIN_REQUEST_INTERVAL) ), + vol.Optional( + CONF_CONTEXT_MESSAGES, + default=current_data.get( + CONF_CONTEXT_MESSAGES, + DEFAULT_CONTEXT_MESSAGES + ) + ): vol.All( + vol.Coerce(int), + vol.Range(min=1, max=20) + ), }) ) diff --git a/custom_components/ha_text_ai/const.py b/custom_components/ha_text_ai/const.py index 1b3991c..da00c6e 100644 --- a/custom_components/ha_text_ai/const.py +++ b/custom_components/ha_text_ai/const.py @@ -31,6 +31,7 @@ CONF_REQUEST_INTERVAL: Final = "request_interval" CONF_INSTANCE: Final = "instance" CONF_MAX_HISTORY_SIZE: Final = "max_history_size" CONF_IS_ANTHROPIC: Final = "is_anthropic" +CONF_CONTEXT_MESSAGES: Final = "context_messages" # Default values DEFAULT_MODEL: Final = "gpt-4" @@ -40,6 +41,7 @@ DEFAULT_REQUEST_INTERVAL: Final = 1.0 DEFAULT_TIMEOUT: Final = 30 DEFAULT_MAX_HISTORY: Final = 50 DEFAULT_NAME: Final = "HA Text AI" +DEFAULT_CONTEXT_MESSAGES: Final = 5 # Parameter constraints MIN_TEMPERATURE: Final = 0.0 @@ -146,6 +148,11 @@ SERVICE_SCHEMA_ASK_QUESTION = vol.Schema({ vol.Optional("max_tokens"): vol.All( vol.Coerce(int), vol.Range(min=MIN_MAX_TOKENS, max=MAX_MAX_TOKENS) + ), + # Добавить опциональный параметр контекста + vol.Optional("context_messages"): vol.All( + vol.Coerce(int), + vol.Range(min=1, max=20) ) }) @@ -185,7 +192,11 @@ CONFIG_SCHEMA = vol.Schema({ ), vol.Optional(CONF_MAX_HISTORY_SIZE, default=DEFAULT_MAX_HISTORY): vol.All( vol.Coerce(int), - vol.Range(min=1, max=100) + vol.Range(min=1, max=100), + ), + vol.Optional(CONF_CONTEXT_MESSAGES, default=DEFAULT_CONTEXT_MESSAGES): vol.All( + vol.Coerce(int), + vol.Range(min=1, max=20) ) }) }, extra=vol.ALLOW_EXTRA) diff --git a/custom_components/ha_text_ai/coordinator.py b/custom_components/ha_text_ai/coordinator.py index 141135d..59facba 100644 --- a/custom_components/ha_text_ai/coordinator.py +++ b/custom_components/ha_text_ai/coordinator.py @@ -17,6 +17,10 @@ from .const import ( STATE_ERROR, STATE_RATE_LIMITED, STATE_MAINTENANCE, + DEFAULT_MAX_TOKENS, + DEFAULT_TEMPERATURE, + DEFAULT_MAX_HISTORY, + DEFAULT_CONTEXT_MESSAGES, ) _LOGGER = logging.getLogger(__name__) @@ -29,9 +33,10 @@ class HATextAICoordinator(DataUpdateCoordinator): model: str, update_interval: int, instance_name: str, - max_tokens: int = 1000, - temperature: float = 0.7, - max_history_size: int = 50, + max_tokens: int = DEFAULT_MAX_TOKENS, + temperature: float = DEFAULT_TEMPERATURE, + max_history_size: int = DEFAULT_MAX_HISTORY, + context_messages: int = DEFAULT_CONTEXT_MESSAGES, is_anthropic: bool = False, ) -> None: """Initialize coordinator.""" @@ -89,6 +94,7 @@ class HATextAICoordinator(DataUpdateCoordinator): # Register instance self.hass.data.setdefault(DOMAIN, {}) self.hass.data[DOMAIN][instance_name] = self + self.context_messages = context_messages self._system_prompt = None self._conversation_history = [] @@ -159,6 +165,18 @@ class HATextAICoordinator(DataUpdateCoordinator): return STATE_ERROR return STATE_READY + def _calculate_context_tokens(self, messages: List[Dict[str, str]]) -> int: + """Приблизительный подсчет токенов в контексте.""" + try: + if self.is_anthropic and hasattr(self.client, 'count_tokens'): + return sum(self.client.count_tokens(msg['content']) for msg in messages) + + # Простая эвристика: 1 токен примерно на 4 символа + return sum(len(msg['content']) // 4 for msg in messages) + except Exception as e: + _LOGGER.warning(f"Error calculating context tokens: {e}") + return 0 + async def async_ask_question( self, question: str, @@ -166,10 +184,11 @@ class HATextAICoordinator(DataUpdateCoordinator): temperature: Optional[float] = None, max_tokens: Optional[int] = None, system_prompt: Optional[str] = None, + context_messages: Optional[int] = None, ) -> dict: """Process a question with optional parameters.""" return await self.async_process_question( - question, model, temperature, max_tokens, system_prompt + question, model, temperature, max_tokens, system_prompt, context_messages ) async def async_process_question( @@ -179,8 +198,10 @@ class HATextAICoordinator(DataUpdateCoordinator): temperature: Optional[float] = None, max_tokens: Optional[int] = None, system_prompt: Optional[str] = None, + context_messages: Optional[int] = None, ) -> dict: - """Process a question with optional parameters.""" + temp_context_messages = context_messages or self.context_messages + if not question: raise ValueError("Question cannot be empty") @@ -206,7 +227,8 @@ class HATextAICoordinator(DataUpdateCoordinator): messages.append({"role": "system", "content": temp_system_prompt}) # Add conversation history - for entry in self._conversation_history[-5:]: # Last 5 messages for context + context_history = self._conversation_history[-temp_context_messages:] + for entry in context_history: messages.append({"role": "user", "content": entry["question"]}) messages.append({"role": "assistant", "content": entry["response"]}) diff --git a/custom_components/ha_text_ai/translations/de.json b/custom_components/ha_text_ai/translations/de.json new file mode 100644 index 0000000..141ac3c --- /dev/null +++ b/custom_components/ha_text_ai/translations/de.json @@ -0,0 +1,257 @@ +{ + "config": { + "step": { + "provider": { + "title": "KI-Anbieter auswählen", + "description": "Wählen Sie den KI-Dienst-Anbieter für diese Instanz", + "data": { + "api_provider": "API-Anbieter" + } + }, + "user": { + "title": "HA Text AI Instanz konfigurieren", + "description": "Richten Sie eine neue KI-Assistenten-Instanz mit Ihrem ausgewählten Anbieter ein", + "data": { + "name": "Instanzname (z.B. 'GPT Assistent', 'Claude Helfer')", + "api_key": "API-Schlüssel für Authentifizierung", + "model": "Zu verwendendes KI-Modell", + "temperature": "Antwort-Kreativität (0-2, niedriger = fokussierter)", + "max_tokens": "Maximale Antwortlänge (1-4096 Token)", + "api_endpoint": "Benutzerdefinierte API-Endpunkt-URL (optional)", + "request_interval": "Minimale Zeit zwischen Anfragen (0,1-60 Sekunden)" + } + } + }, + "error": { + "name_exists": "Eine Instanz mit diesem Namen existiert bereits", + "invalid_name": "Ungültiger Instanzname", + "invalid_auth": "Authentifizierung fehlgeschlagen - überprüfen Sie Ihren API-Schlüssel", + "invalid_api_key": "Ungültiger API-Schlüssel - bitte überprüfen Sie Ihre Anmeldedaten", + "cannot_connect": "Verbindung zum API-Dienst fehlgeschlagen", + "invalid_model": "Ausgewähltes Modell ist nicht verfügbar", + "rate_limit": "Anfragelimit überschritten", + "context_length": "Kontextlänge überschritten", + "rate_limit_exceeded": "API-Anfragelimit überschritten", + "maintenance": "Dienst ist in Wartung", + "invalid_response": "Ungültige API-Antwort erhalten", + "api_error": "API-Dienst-Fehler aufgetreten", + "timeout": "Anfrage-Zeitüberschreitung", + "invalid_instance": "Ungültige Instanz angegeben", + "unknown": "Unerwarteter Fehler aufgetreten" + } + }, + "options": { + "step": { + "init": { + "title": "Instanzeinstellungen aktualisieren", + "description": "Einstellungen für diese KI-Assistenten-Instanz ändern", + "data": { + "model": "KI-Modell", + "temperature": "Antwort-Kreativität (0-2)", + "max_tokens": "Maximale Antwortlänge (1-4096)", + "request_interval": "Minimales Anfragen-Intervall (0,1-60 Sekunden)" + } + } + } + }, + "services": { + "ask_question": { + "name": "Frage stellen (HA Text AI)", + "description": "Senden Sie eine Frage an das KI-Modell und erhalten Sie eine detaillierte Antwort. Die Antwort wird in der Gesprächshistorie gespeichert und kann später abgerufen werden.", + "fields": { + "instance": { + "name": "Instanz", + "description": "Name der zu verwendenden HA Text AI Instanz" + }, + "question": { + "name": "Frage", + "description": "Ihre Frage oder Eingabeaufforderung für den KI-Assistenten" + }, + "context_messages": { + "name": "Kontextnachrichten", + "description": "Anzahl der vorherigen Nachrichten, die in den Kontext einbezogen werden sollen (1-20)" + }, + "system_prompt": { + "name": "Systemaufforderung", + "description": "Optionale Systemaufforderung zur Kontexteinstellung für diese spezifische Frage" + }, + "model": { + "name": "Modell", + "description": "Wählen Sie das zu verwendende KI-Modell (optional, überschreibt Standardeinstellung)" + }, + "temperature": { + "name": "Temperatur", + "description": "Steuert die Antwort-Kreativität (0,0-2,0)" + }, + "max_tokens": { + "name": "Max. Token", + "description": "Maximale Länge der Antwort (1-4096 Token)" + } + } + }, + "clear_history": { + "name": "Verlauf löschen", + "description": "Alle gespeicherten Fragen und Antworten aus dem Gesprächsverlauf löschen", + "fields": { + "instance": { + "name": "Instanz", + "description": "Name der HA Text AI Instanz, für die der Verlauf gelöscht werden soll" + } + } + }, + "get_history": { + "name": "Verlauf abrufen", + "description": "Gesprächsverlauf mit optionaler Filterung und Sortierung abrufen", + "fields": { + "instance": { + "name": "Instanz", + "description": "Name der HA Text AI Instanz, aus der der Verlauf abgerufen werden soll" + }, + "limit": { + "name": "Limit", + "description": "Anzahl der zurückzugebenden Gespräche (1-100)" + }, + "filter_model": { + "name": "Modell filtern", + "description": "Gespräche nach bestimmtem KI-Modell filtern" + }, + "start_date": { + "name": "Startdatum", + "description": "Gespräche ab diesem Datum/Zeitpunkt filtern" + }, + "include_metadata": { + "name": "Metadaten einbeziehen", + "description": "Zusätzliche Informationen wie verwendete Token, Antwortzeit usw. einbeziehen" + }, + "sort_order": { + "name": "Sortierreihenfolge", + "description": "Sortierreihenfolge der Ergebnisse (neueste oder älteste zuerst)" + } + } + }, + "set_system_prompt": { + "name": "Systemaufforderung festlegen", + "description": "Standardmäßige Systemverhaltensinstruktionen für alle zukünftigen Gespräche festlegen", + "fields": { + "instance": { + "name": "Instanz", + "description": "Name der HA Text AI Instanz, für die die Systemaufforderung festgelegt werden soll" + }, + "prompt": { + "name": "Systemaufforderung", + "description": "Anweisungen, die definieren, wie sich die KI verhalten und antworten soll" + } + } + } + }, + "entity": { + "sensor": { + "ha_text_ai": { + "name": "{name}", + "state": { + "ready": "Bereit", + "processing": "Verarbeitung", + "error": "Fehler", + "disconnected": "Getrennt", + "rate_limited": "Anfragelimit", + "maintenance": "Wartung", + "initializing": "Initialisierung", + "retrying": "Wiederholung", + "queued": "In Warteschlange" + }, + "state_attributes": { + "question": { + "name": "Letzte Frage" + }, + "response": { + "name": "Letzte Antwort" + }, + "model": { + "name": "Aktuelles Modell" + }, + "temperature": { + "name": "Temperatur" + }, + "max_tokens": { + "name": "Max. Token" + }, + "system_prompt": { + "name": "Systemaufforderung" + }, + "response_time": { + "name": "Letzte Antwortzeit" + }, + "total_responses": { + "name": "Gesamte Antworten" + }, + "error_count": { + "name": "Fehleranzahl" + }, + "last_error": { + "name": "Letzter Fehler" + }, + "api_status": { + "name": "API-Status" + }, + "tokens_used": { + "name": "Insgesamt verwendete Token" + }, + "average_response_time": { + "name": "Durchschnittliche Antwortzeit" + }, + "last_request_time": { + "name": "Letzte Anforderungszeit" + }, + "is_processing": { + "name": "Verarbeitungsstatus" + }, + "is_rate_limited": { + "name": "Status Anfragelimit" + }, + "is_maintenance": { + "name": "Wartungsstatus" + }, + "api_version": { + "name": "API-Version" + }, + "endpoint_status": { + "name": "Endpunktstatus" + }, + "performance_metrics": { + "name": "Leistungsmetriken" + }, + "history_size": { + "name": "Verlaufsgröße" + }, + "uptime": { + "name": "Betriebszeit" + }, + "total_tokens": { + "name": "Gesamte Token" + }, + "prompt_tokens": { + "name": "Prompt-Token" + }, + "completion_tokens": { + "name": "Abschluss-Token" + }, + "successful_requests": { + "name": "Erfolgreiche Anfragen" + }, + "failed_requests": { + "name": "Fehlgeschlagene Anfragen" + }, + "average_latency": { + "name": "Durchschnittliche Latenz" + }, + "max_latency": { + "name": "Maximale Latenz" + }, + "min_latency": { + "name": "Minimale Latenz" + } + } + } + } + } +} diff --git a/custom_components/ha_text_ai/translations/en.json b/custom_components/ha_text_ai/translations/en.json index 83b800e..8e0c680 100644 --- a/custom_components/ha_text_ai/translations/en.json +++ b/custom_components/ha_text_ai/translations/en.json @@ -56,7 +56,7 @@ }, "services": { "ask_question": { - "name": "Ask Question", + "name": "Ask Question (HA Text AI)", "description": "Send a question to the AI model and receive a detailed response. The response will be stored in the conversation history and can be retrieved later.", "fields": { "instance": { @@ -67,6 +67,10 @@ "name": "Question", "description": "Your question or prompt for the AI assistant" }, + "context_messages": { + "name": "Context Messages", + "description": "Number of previous messages to include in context (1-20)" + }, "system_prompt": { "name": "System Prompt", "description": "Optional system prompt to set context for this specific question" diff --git a/custom_components/ha_text_ai/translations/ru.json b/custom_components/ha_text_ai/translations/ru.json index 77710c5..ef6cb36 100644 --- a/custom_components/ha_text_ai/translations/ru.json +++ b/custom_components/ha_text_ai/translations/ru.json @@ -2,41 +2,41 @@ "config": { "step": { "provider": { - "title": "Выбор AI провайдера", - "description": "Выберите провайдера AI сервиса для этого экземпляра", + "title": "Выбор провайдера ИИ", + "description": "Выберите сервис ИИ для этого экземпляра", "data": { - "api_provider": "API провайдер" + "api_provider": "Провайдер API" } }, "user": { "title": "Настройка экземпляра HA Text AI", - "description": "Настройте новый экземпляр AI ассистента с выбранным провайдером", + "description": "Настройте нового помощника ИИ с выбранным провайдером", "data": { - "name": "Название экземпляра (например, 'GPT Ассистент', 'Claude Помощник')", - "api_key": "API ключ для аутентификации", - "model": "Используемая AI модель", - "temperature": "Креативность ответов (0-2, чем ниже, тем точнее)", + "name": "Название экземпляра (например, 'GPT Помощник', 'Claude Ассистент')", + "api_key": "API-ключ для аутентификации", + "model": "Модель ИИ для использования", + "temperature": "Креативность ответов (0-2, меньше = более сфокусированно)", "max_tokens": "Максимальная длина ответа (1-4096 токенов)", - "api_endpoint": "Пользовательский URL API (необязательно)", + "api_endpoint": "Пользовательский URL-адрес API (необязательно)", "request_interval": "Минимальный интервал между запросами (0.1-60 секунд)" } } }, "error": { "name_exists": "Экземпляр с таким именем уже существует", - "invalid_name": "Недопустимое имя экземпляра", - "invalid_auth": "Ошибка аутентификации - проверьте API ключ", - "invalid_api_key": "Недействительный API ключ - проверьте учетные данные", - "cannot_connect": "Не удалось подключиться к API сервису", + "invalid_name": "Некорректное имя экземпляра", + "invalid_auth": "Ошибка аутентификации - проверьте API-ключ", + "invalid_api_key": "Неверный API-ключ - проверьте учетные данные", + "cannot_connect": "Не удалось подключиться к сервису API", "invalid_model": "Выбранная модель недоступна", "rate_limit": "Превышен лимит запросов", "context_length": "Превышена длина контекста", - "rate_limit_exceeded": "Превышен лимит API запросов", - "maintenance": "Сервис находится на техническом обслуживании", + "rate_limit_exceeded": "Превышен лимит API", + "maintenance": "Сервис на техническом обслуживании", "invalid_response": "Получен некорректный ответ API", - "api_error": "Произошла ошибка API сервиса", - "timeout": "Превышено время ожидания запроса", - "invalid_instance": "Указан недействительный экземпляр", + "api_error": "Произошла ошибка сервиса API", + "timeout": "Время ожидания истекло", + "invalid_instance": "Указан неверный экземпляр", "unknown": "Произошла непредвиденная ошибка" } }, @@ -44,9 +44,9 @@ "step": { "init": { "title": "Обновление настроек экземпляра", - "description": "Измените настройки для этого экземпляра AI ассистента", + "description": "Измените настройки для этого помощника ИИ", "data": { - "model": "AI модель", + "model": "Модель ИИ", "temperature": "Креативность ответов (0-2)", "max_tokens": "Максимальная длина ответа (1-4096)", "request_interval": "Минимальный интервал запросов (0.1-60 секунд)" @@ -56,8 +56,8 @@ }, "services": { "ask_question": { - "name": "Задать вопрос", - "description": "Отправьте вопрос AI модели и получите подробный ответ. Ответ будет сохранен в истории разговора и может быть получен позже.", + "name": "Задать вопрос (HA Text AI)", + "description": "Отправьте вопрос модели ИИ и получите подробный ответ. Ответ будет сохранен в истории беседы и может быть извлечен позже.", "fields": { "instance": { "name": "Экземпляр", @@ -65,29 +65,33 @@ }, "question": { "name": "Вопрос", - "description": "Ваш вопрос или запрос для AI ассистента" + "description": "Ваш вопрос или запрос помощнику ИИ" + }, + "context_messages": { + "name": "Контекстные сообщения", + "description": "Количество предыдущих сообщений для включения в контекст (1-20)" }, "system_prompt": { "name": "Системный промпт", - "description": "Необязательный системный промпт для установки контекста этого вопроса" + "description": "Необязательный системный промпт для установки контекста для этого конкретного вопроса" }, "model": { "name": "Модель", - "description": "Выберите AI модель (необязательно, переопределяет настройки по умолчанию)" + "description": "Выберите модель ИИ (необязательно, переопределяет настройки по умолчанию)" }, "temperature": { - "name": "Temperature", - "description": "Управляет креативностью ответов (0.0-2.0)" + "name": "Температура", + "description": "Управляет креативностью ответа (0.0-2.0)" }, "max_tokens": { - "name": "Max Tokens", + "name": "Максимальное количество токенов", "description": "Максимальная длина ответа (1-4096 токенов)" } } }, "clear_history": { "name": "Очистить историю", - "description": "Удалить все сохраненные вопросы и ответы из истории разговора", + "description": "Удалить все сохраненные вопросы и ответы из истории беседы", "fields": { "instance": { "name": "Экземпляр", @@ -97,7 +101,7 @@ }, "get_history": { "name": "Получить историю", - "description": "Получить историю разговора с дополнительной фильтрацией и сортировкой", + "description": "Получить историю беседы с дополнительной фильтрацией и сортировкой", "fields": { "instance": { "name": "Экземпляр", @@ -105,37 +109,37 @@ }, "limit": { "name": "Лимит", - "description": "Количество разговоров для возврата (1-100)" + "description": "Количество возвращаемых бесед (1-100)" }, "filter_model": { "name": "Фильтр модели", - "description": "Фильтровать разговоры по конкретной AI модели" + "description": "Фильтрация бесед по конкретной модели ИИ" }, "start_date": { "name": "Начальная дата", - "description": "Фильтровать разговоры начиная с этой даты/времени" + "description": "Фильтрация бесед, начиная с указанной даты/времени" }, "include_metadata": { "name": "Включить метаданные", - "description": "Включить дополнительную информацию, такую как использованные токены, время ответа и т.д." + "description": "Включить дополнительную информацию, например, использованные токены, время ответа и т.д." }, "sort_order": { "name": "Порядок сортировки", - "description": "Порядок сортировки результатов (сначала новые или старые)" + "description": "Порядок результатов (сначала новые или старые)" } } }, "set_system_prompt": { "name": "Установить системный промпт", - "description": "Установить инструкции поведения по умолчанию для всех будущих разговоров", + "description": "Установить инструкции по умолчанию для поведения ИИ во всех будущих разговорах", "fields": { "instance": { "name": "Экземпляр", - "description": "Название экземпляра HA Text AI для настройки" + "description": "Название экземпляра HA Text AI для установки системного промпта" }, "prompt": { "name": "Системный промпт", - "description": "Инструкции, определяющие поведение и ответы AI" + "description": "Инструкции, определяющие, как ИИ должен вести себя и отвечать" } } } @@ -149,8 +153,8 @@ "processing": "Обработка", "error": "Ошибка", "disconnected": "Отключен", - "rate_limited": "Превышен лимит", - "maintenance": "Обслуживание", + "rate_limited": "Лимит запросов", + "maintenance": "Техническое обслуживание", "initializing": "Инициализация", "retrying": "Повторная попытка", "queued": "В очереди" @@ -166,10 +170,10 @@ "name": "Текущая модель" }, "temperature": { - "name": "Temperature" + "name": "Температура" }, "max_tokens": { - "name": "Max Tokens" + "name": "Максимальное количество токенов" }, "system_prompt": { "name": "Системный промпт" @@ -202,7 +206,7 @@ "name": "Статус обработки" }, "is_rate_limited": { - "name": "Статус ограничения запросов" + "name": "Статус лимита запросов" }, "is_maintenance": { "name": "Статус обслуживания" @@ -211,10 +215,10 @@ "name": "Версия API" }, "endpoint_status": { - "name": "Статус конечной точки" + "name": "Статус эндпоинта" }, "performance_metrics": { - "name": "Метрики производительности" + "name": "Показатели производительности" }, "history_size": { "name": "Размер истории"