2024-11-18 00:43:28 +03:00
"""Constants for the HA text AI integration."""
2024-11-19 12:45:26 +03:00
from typing import Final
2024-11-21 15:15:50 +03:00
import voluptuous as vol
2024-11-23 19:42:10 +03:00
from homeassistant.const import Platform , CONF_API_KEY # Добавлен CONF_API_KEY
2024-11-23 23:42:33 +03:00
from homeassistant.helpers import config_validation as cv
2024-11-14 18:30:03 +03:00
2024-11-19 14:35:45 +03:00
# Domain and platforms
2024-11-19 12:45:26 +03:00
DOMAIN : Final = "ha_text_ai"
PLATFORMS : Final = [ Platform . SENSOR ]
2024-11-23 00:36:58 +03:00
CONF_NAME = "name"
DEFAULT_NAME = "HA Text AI"
2024-11-14 18:30:03 +03:00
2024-11-23 18:50:48 +03:00
# Provider configuration
2024-11-22 01:34:47 +03:00
CONF_API_PROVIDER : Final = "api_provider"
API_PROVIDER_OPENAI : Final = "openai"
API_PROVIDER_ANTHROPIC : Final = "anthropic"
API_PROVIDERS : Final = [
API_PROVIDER_OPENAI ,
API_PROVIDER_ANTHROPIC
]
# Default endpoints
DEFAULT_OPENAI_ENDPOINT : Final = "https://api.openai.com/v1"
DEFAULT_ANTHROPIC_ENDPOINT : Final = "https://api.anthropic.com/v1"
2024-11-19 12:45:26 +03:00
# Configuration constants
CONF_MODEL : Final = "model"
CONF_TEMPERATURE : Final = "temperature"
CONF_MAX_TOKENS : Final = "max_tokens"
CONF_API_ENDPOINT : Final = "api_endpoint"
CONF_REQUEST_INTERVAL : Final = "request_interval"
2024-11-15 00:59:39 +03:00
2024-11-19 12:45:26 +03:00
# Default values
2024-11-20 12:07:30 +03:00
DEFAULT_MODEL : Final = "gpt-4o-mini"
2024-11-19 23:30:28 +03:00
DEFAULT_TEMPERATURE : Final = 0.1
2024-11-19 12:45:26 +03:00
DEFAULT_MAX_TOKENS : Final = 1000
2024-11-22 01:34:47 +03:00
DEFAULT_API_ENDPOINT : Final = DEFAULT_OPENAI_ENDPOINT
2024-11-19 12:45:26 +03:00
DEFAULT_REQUEST_INTERVAL : Final = 1.0
2024-11-19 14:35:45 +03:00
DEFAULT_TIMEOUT : Final = 30
2024-11-18 00:43:28 +03:00
2024-11-19 12:45:26 +03:00
# Parameter constraints
MIN_TEMPERATURE : Final = 0.0
MAX_TEMPERATURE : Final = 2.0
MIN_MAX_TOKENS : Final = 1
MAX_MAX_TOKENS : Final = 4096
MIN_REQUEST_INTERVAL : Final = 0.1
2024-11-23 18:50:48 +03:00
MAX_REQUEST_INTERVAL : Final = 60.0
2024-11-20 01:02:27 +03:00
# API constants
API_CHAT_PATH : Final = "chat/completions"
API_TIMEOUT : Final = 30
API_RETRY_COUNT : Final = 3
# History constants
HISTORY_FILTER_MODEL : Final = "filter_model"
HISTORY_FILTER_DATE : Final = "start_date"
HISTORY_SORT_ORDER : Final = "sort_order"
HISTORY_INCLUDE_METADATA : Final = "include_metadata"
2024-11-23 18:50:48 +03:00
HISTORY_SORT_ASC : Final = "asc"
HISTORY_SORT_DESC : Final = "desc"
HISTORY_MAX_ENTRIES : Final = 100
2024-11-18 02:02:36 +03:00
2024-11-19 12:45:26 +03:00
# Service names
SERVICE_ASK_QUESTION : Final = "ask_question"
SERVICE_CLEAR_HISTORY : Final = "clear_history"
SERVICE_GET_HISTORY : Final = "get_history"
SERVICE_SET_SYSTEM_PROMPT : Final = "set_system_prompt"
# Service descriptions
2024-11-23 18:50:48 +03:00
SERVICE_ASK_QUESTION_DESCRIPTION : Final = "Send a question to the AI model and receive a detailed response. The response will be stored in the conversation history."
SERVICE_CLEAR_HISTORY_DESCRIPTION : Final = "Delete all stored questions and responses from the conversation history."
SERVICE_GET_HISTORY_DESCRIPTION : Final = "Retrieve recent conversation history with optional filtering and sorting."
SERVICE_SET_SYSTEM_PROMPT_DESCRIPTION : Final = "Set default system behavior instructions for all future conversations."
2024-11-19 12:45:26 +03:00
# Attribute keys
ATTR_QUESTION : Final = "question"
ATTR_RESPONSE : Final = "response"
ATTR_LAST_UPDATED : Final = "last_updated"
2024-11-19 14:00:33 +03:00
ATTR_MODEL : Final = "model"
ATTR_TEMPERATURE : Final = "temperature"
ATTR_MAX_TOKENS : Final = "max_tokens"
ATTR_TOTAL_RESPONSES : Final = "total_responses"
ATTR_SYSTEM_PROMPT : Final = "system_prompt"
ATTR_RESPONSE_TIME : Final = "response_time"
2024-11-19 14:35:45 +03:00
ATTR_QUEUE_SIZE : Final = "queue_size"
ATTR_API_STATUS : Final = "api_status"
ATTR_ERROR_COUNT : Final = "error_count"
ATTR_LAST_ERROR : Final = "last_error"
2024-11-20 01:02:27 +03:00
ATTR_API_VERSION : Final = "api_version"
ATTR_ENDPOINT_STATUS : Final = "endpoint_status"
ATTR_REQUEST_COUNT : Final = "request_count"
ATTR_TOKENS_USED : Final = "tokens_used"
ATTR_RETRY_COUNT : Final = "retry_count"
ATTR_QUEUE_POSITION : Final = "queue_position"
ATTR_ESTIMATED_WAIT : Final = "estimated_wait"
2024-11-23 18:50:48 +03:00
ATTR_SORT_ORDER : Final = "sort_order"
2024-11-19 12:45:26 +03:00
# Error messages
ERROR_INVALID_API_KEY : Final = "invalid_api_key"
ERROR_CANNOT_CONNECT : Final = "cannot_connect"
ERROR_UNKNOWN : Final = "unknown_error"
2024-11-19 14:00:33 +03:00
ERROR_INVALID_MODEL : Final = "invalid_model"
ERROR_RATE_LIMIT : Final = "rate_limit_exceeded"
ERROR_CONTEXT_LENGTH : Final = "context_length_exceeded"
ERROR_API_ERROR : Final = "api_error"
2024-11-19 14:35:45 +03:00
ERROR_TIMEOUT : Final = "timeout_error"
ERROR_QUEUE_FULL : Final = "queue_full"
ERROR_INVALID_PROMPT : Final = "invalid_prompt"
2024-11-20 01:02:27 +03:00
ERROR_INVALID_PARAMETERS : Final = "invalid_parameters"
ERROR_SERVICE_UNAVAILABLE : Final = "service_unavailable"
2024-11-23 18:50:48 +03:00
ERROR_INVALID_SORT_ORDER : Final = "invalid_sort_order"
2024-11-19 12:45:26 +03:00
# Configuration descriptions
CONF_MODEL_DESCRIPTION : Final = "AI model to use for responses"
CONF_TEMPERATURE_DESCRIPTION : Final = "Temperature for response generation (0-2)"
CONF_MAX_TOKENS_DESCRIPTION : Final = "Maximum tokens in response (1-4096)"
CONF_API_ENDPOINT_DESCRIPTION : Final = "API endpoint URL"
CONF_REQUEST_INTERVAL_DESCRIPTION : Final = "Minimum time between API requests (seconds)"
2024-11-19 14:00:33 +03:00
# Entity attributes descriptions
ATTR_QUESTION_DESCRIPTION : Final = "Last question asked"
ATTR_RESPONSE_DESCRIPTION : Final = "Last response received"
ATTR_LAST_UPDATED_DESCRIPTION : Final = "Time of last update"
ATTR_MODEL_DESCRIPTION : Final = "Current AI model in use"
ATTR_TEMPERATURE_DESCRIPTION : Final = "Current temperature setting"
ATTR_MAX_TOKENS_DESCRIPTION : Final = "Current max tokens setting"
ATTR_TOTAL_RESPONSES_DESCRIPTION : Final = "Total number of responses"
ATTR_SYSTEM_PROMPT_DESCRIPTION : Final = "Current system prompt"
ATTR_RESPONSE_TIME_DESCRIPTION : Final = "Time taken for last response"
2024-11-19 14:35:45 +03:00
ATTR_QUEUE_SIZE_DESCRIPTION : Final = "Current size of question queue"
ATTR_API_STATUS_DESCRIPTION : Final = "Current API connection status"
ATTR_ERROR_COUNT_DESCRIPTION : Final = "Total number of errors"
ATTR_LAST_ERROR_DESCRIPTION : Final = "Last error message"
2024-11-20 01:02:27 +03:00
ATTR_API_VERSION_DESCRIPTION : Final = "Current API version"
ATTR_ENDPOINT_STATUS_DESCRIPTION : Final = "Current endpoint status"
ATTR_REQUEST_COUNT_DESCRIPTION : Final = "Total number of API requests"
ATTR_TOKENS_USED_DESCRIPTION : Final = "Total tokens used"
2024-11-23 18:50:48 +03:00
ATTR_SORT_ORDER_DESCRIPTION : Final = "Sort order for history (asc/desc)"
2024-11-19 14:00:33 +03:00
2024-11-19 12:45:26 +03:00
# Entity attributes
ENTITY_NAME : Final = "HA Text AI"
ENTITY_ICON : Final = "mdi:robot"
2024-11-19 14:35:45 +03:00
ENTITY_ICON_ERROR : Final = "mdi:robot-dead"
ENTITY_ICON_PROCESSING : Final = "mdi:robot-excited"
2024-11-20 01:02:27 +03:00
ENTITY_ICON_OFFLINE : Final = "mdi:robot-off"
ENTITY_ICON_QUEUE : Final = "mdi:robot-confused"
2024-11-19 14:00:33 +03:00
# Translation keys
TRANSLATION_KEY_CONFIG : Final = "config"
TRANSLATION_KEY_OPTIONS : Final = "options"
TRANSLATION_KEY_ERROR : Final = "error"
2024-11-19 14:35:45 +03:00
TRANSLATION_KEY_STATE : Final = "state"
TRANSLATION_KEY_SERVICES : Final = "services"
2024-11-19 14:00:33 +03:00
# State attributes
STATE_READY : Final = "ready"
STATE_PROCESSING : Final = "processing"
STATE_ERROR : Final = "error"
2024-11-19 14:35:45 +03:00
STATE_DISCONNECTED : Final = "disconnected"
STATE_RATE_LIMITED : Final = "rate_limited"
STATE_INITIALIZING : Final = "initializing"
2024-11-20 01:02:27 +03:00
STATE_MAINTENANCE : Final = "maintenance"
STATE_RETRYING : Final = "retrying"
STATE_QUEUED : Final = "queued"
STATE_UPDATING : Final = "updating"
2024-11-19 14:35:45 +03:00
# Logging
LOGGER_NAME : Final = "custom_components.ha_text_ai"
LOG_LEVEL_DEFAULT : Final = "INFO"
# Queue constants
QUEUE_TIMEOUT : Final = 5
QUEUE_MAX_SIZE : Final = 100
2024-11-20 12:07:30 +03:00
# Retry constants
2024-11-20 01:39:19 +03:00
MAX_RETRIES : Final = 3
RETRY_DELAY : Final = 1.0
2024-11-21 15:15:50 +03:00
# Service schema constants
2024-11-21 16:40:55 +03:00
SERVICE_SCHEMA_ASK_QUESTION = vol . Schema ({
2024-11-21 15:15:50 +03:00
vol . Required ( "question" ): cv . string ,
vol . Optional ( "system_prompt" ): cv . string ,
2024-11-22 02:39:40 +03:00
vol . Optional ( "model" ): cv . string ,
2024-11-21 15:15:50 +03:00
vol . Optional ( "temperature" ): vol . All (
vol . Coerce ( float ),
vol . Range ( min = MIN_TEMPERATURE , max = MAX_TEMPERATURE )
),
vol . Optional ( "max_tokens" ): vol . All (
vol . Coerce ( int ),
vol . Range ( min = MIN_MAX_TOKENS , max = MAX_MAX_TOKENS )
2024-11-23 18:50:48 +03:00
)
2024-11-21 16:40:55 +03:00
})
2024-11-21 15:15:50 +03:00
2024-11-22 01:34:47 +03:00
SERVICE_SCHEMA_SET_SYSTEM_PROMPT = vol . Schema ({
2024-11-23 18:50:48 +03:00
vol . Required ( "prompt" ): cv . string
2024-11-22 01:34:47 +03:00
})
SERVICE_SCHEMA_GET_HISTORY = vol . Schema ({
2024-11-21 15:15:50 +03:00
vol . Optional ( "limit" , default = 10 ): vol . All (
vol . Coerce ( int ),
2024-11-23 18:50:48 +03:00
vol . Range ( min = 1 , max = HISTORY_MAX_ENTRIES )
2024-11-21 15:15:50 +03:00
),
vol . Optional ( "start_date" ): cv . datetime ,
vol . Optional ( "include_metadata" ): cv . boolean ,
2024-11-23 18:50:48 +03:00
vol . Optional ( "sort_order" , default = HISTORY_SORT_DESC ): vol . In ([
HISTORY_SORT_ASC ,
HISTORY_SORT_DESC
])
2024-11-22 01:34:47 +03:00
})
2024-11-23 18:50:48 +03:00
# Configuration schema
CONFIG_SCHEMA = vol . Schema ({
DOMAIN : vol . Schema ({
vol . Required ( CONF_API_KEY ): cv . string ,
vol . Optional ( CONF_MODEL , default = DEFAULT_MODEL ): cv . string ,
vol . Optional ( CONF_TEMPERATURE , default = DEFAULT_TEMPERATURE ): vol . All (
vol . Coerce ( float ),
vol . Range ( min = MIN_TEMPERATURE , max = MAX_TEMPERATURE )
),
vol . Optional ( CONF_MAX_TOKENS , default = DEFAULT_MAX_TOKENS ): vol . All (
vol . Coerce ( int ),
vol . Range ( min = MIN_MAX_TOKENS , max = MAX_MAX_TOKENS )
),
vol . Optional ( CONF_API_ENDPOINT ): cv . string ,
vol . Optional ( CONF_REQUEST_INTERVAL , default = DEFAULT_REQUEST_INTERVAL ): vol . All (
vol . Coerce ( float ),
vol . Range ( min = MIN_REQUEST_INTERVAL , max = MAX_REQUEST_INTERVAL )
),
vol . Required ( CONF_API_PROVIDER ): vol . In ( API_PROVIDERS )
})
}, extra = vol . ALLOW_EXTRA )
# Event names
EVENT_RESPONSE_RECEIVED : Final = f " { DOMAIN } _response_received"
EVENT_ERROR_OCCURRED : Final = f " { DOMAIN } _error_occurred"
EVENT_STATE_CHANGED : Final = f " { DOMAIN } _state_changed"