Files
ha-text-ai/custom_components/ha_text_ai/const.py
T

146 lines
4.6 KiB
Python
Raw Normal View History

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-24 02:20:29 +03:00
from homeassistant.const import Platform, CONF_API_KEY, CONF_NAME
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-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"
2024-11-24 02:20:29 +03:00
DEFAULT_ANTHROPIC_ENDPOINT: Final = "https://api.anthropic.com"
2024-11-22 01:34:47 +03:00
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-24 02:20:29 +03:00
CONF_INSTANCE: Final = "instance"
2024-11-15 00:59:39 +03:00
2024-11-19 12:45:26 +03:00
# Default values
2024-11-24 02:20:29 +03:00
DEFAULT_MODEL: Final = "gpt-3.5-turbo" # Обновлено на актуальную модель
DEFAULT_TEMPERATURE: Final = 0.7
2024-11-19 12:45:26 +03:00
DEFAULT_MAX_TOKENS: Final = 1000
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_TIMEOUT: Final = 30
API_RETRY_COUNT: Final = 3
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"
# Attribute keys
ATTR_QUESTION: Final = "question"
ATTR_RESPONSE: Final = "response"
2024-11-24 02:20:29 +03:00
ATTR_INSTANCE: Final = "instance"
2024-11-19 14:00:33 +03:00
ATTR_MODEL: Final = "model"
ATTR_TEMPERATURE: Final = "temperature"
ATTR_MAX_TOKENS: Final = "max_tokens"
ATTR_SYSTEM_PROMPT: Final = "system_prompt"
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"
2024-11-24 02:20:29 +03:00
ERROR_INVALID_INSTANCE: Final = "invalid_instance"
ERROR_NAME_EXISTS: Final = "name_exists"
2024-11-20 01:39:19 +03:00
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-24 02:20:29 +03:00
vol.Required(CONF_INSTANCE): cv.string,
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-24 02:20:29 +03:00
vol.Required(CONF_INSTANCE): cv.string,
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-24 02:20:29 +03:00
vol.Required(CONF_INSTANCE): cv.string,
2024-11-21 15:15:50 +03:00
vol.Optional("limit", default=10): vol.All(
vol.Coerce(int),
2024-11-24 02:20:29 +03:00
vol.Range(min=1, max=100)
2024-11-21 15:15:50 +03:00
),
2024-11-24 02:20:29 +03:00
vol.Optional("filter_model"): cv.string
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({
2024-11-24 02:20:29 +03:00
vol.Required(CONF_NAME): cv.string,
2024-11-23 18:50:48 +03:00
vol.Required(CONF_API_KEY): cv.string,
2024-11-24 02:20:29 +03:00
vol.Required(CONF_API_PROVIDER): vol.In(API_PROVIDERS),
2024-11-23 18:50:48 +03:00
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)
2024-11-24 02:20:29 +03:00
)
2024-11-23 18:50:48 +03:00
})
}, extra=vol.ALLOW_EXTRA)
2024-11-24 02:20:29 +03:00
# Entity attributes
ENTITY_ICON: Final = "mdi:robot"
ENTITY_ICON_ERROR: Final = "mdi:robot-dead"
ENTITY_ICON_PROCESSING: Final = "mdi:robot-excited"
# State attributes
STATE_READY: Final = "ready"
STATE_PROCESSING: Final = "processing"
STATE_ERROR: Final = "error"
2024-11-23 18:50:48 +03:00
# 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"