mirror of
https://github.com/smkrv/ha-text-ai.git
synced 2026-07-26 17:14:01 +08:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d6144be7ed | ||
|
|
9afbb904b3 | ||
|
|
93558b2444 | ||
|
|
9f93f1ee18 | ||
|
|
30a9b53ba1 | ||
|
|
5175970d55 |
@@ -9,6 +9,8 @@ from homeassistant.exceptions import ConfigEntryNotReady
|
|||||||
from homeassistant.helpers import aiohttp_client
|
from homeassistant.helpers import aiohttp_client
|
||||||
from homeassistant.helpers import config_validation as cv
|
from homeassistant.helpers import config_validation as cv
|
||||||
|
|
||||||
|
from .coordinator import HATextAICoordinator
|
||||||
|
|
||||||
from .const import (
|
from .const import (
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
PLATFORMS,
|
PLATFORMS,
|
||||||
|
|||||||
@@ -62,24 +62,6 @@ STEP_USER_DATA_SCHEMA = vol.Schema({
|
|||||||
),
|
),
|
||||||
})
|
})
|
||||||
|
|
||||||
async def validate_endpoint(endpoint: str) -> Tuple[bool, str]:
|
|
||||||
"""Validate API endpoint accessibility."""
|
|
||||||
try:
|
|
||||||
parsed_url = urlparse(endpoint)
|
|
||||||
if parsed_url.scheme not in ('http', 'https'):
|
|
||||||
return False, "invalid_endpoint_scheme"
|
|
||||||
|
|
||||||
connector = aiohttp.TCPConnector(ssl=SSL_CONTEXT)
|
|
||||||
async with timeout(5):
|
|
||||||
async with aiohttp.ClientSession(connector=connector) as session:
|
|
||||||
async with session.get(endpoint) as response:
|
|
||||||
if response.status != 200:
|
|
||||||
return False, "endpoint_not_available"
|
|
||||||
return True, ""
|
|
||||||
except Exception as e:
|
|
||||||
_LOGGER.error("Error validating endpoint: %s", str(e))
|
|
||||||
return False, "endpoint_error"
|
|
||||||
|
|
||||||
async def validate_api_connection(
|
async def validate_api_connection(
|
||||||
api_key: str,
|
api_key: str,
|
||||||
endpoint: str,
|
endpoint: str,
|
||||||
@@ -87,21 +69,13 @@ async def validate_api_connection(
|
|||||||
retry_count: int = 3,
|
retry_count: int = 3,
|
||||||
retry_delay: float = 1.0
|
retry_delay: float = 1.0
|
||||||
) -> Tuple[bool, str, list]:
|
) -> Tuple[bool, str, list]:
|
||||||
"""Validate API connection with improved retry logic."""
|
"""Validate API connection with retry logic."""
|
||||||
# Validate endpoint first
|
|
||||||
endpoint_valid, endpoint_error = await validate_endpoint(endpoint)
|
|
||||||
if not endpoint_valid:
|
|
||||||
return False, endpoint_error, []
|
|
||||||
|
|
||||||
connector = aiohttp.TCPConnector(ssl=SSL_CONTEXT)
|
|
||||||
async with aiohttp.ClientSession(connector=connector) as session:
|
|
||||||
for attempt in range(retry_count):
|
for attempt in range(retry_count):
|
||||||
try:
|
try:
|
||||||
async with timeout(10):
|
async with timeout(10):
|
||||||
client = AsyncOpenAI(
|
client = AsyncOpenAI(
|
||||||
api_key=api_key,
|
api_key=api_key,
|
||||||
base_url=endpoint,
|
base_url=endpoint,
|
||||||
http_client=session
|
|
||||||
)
|
)
|
||||||
|
|
||||||
models = await client.models.list()
|
models = await client.models.list()
|
||||||
|
|||||||
@@ -9,6 +9,6 @@
|
|||||||
"issue_tracker": "https://github.com/smkrv/ha-text-ai/issues",
|
"issue_tracker": "https://github.com/smkrv/ha-text-ai/issues",
|
||||||
"requirements": ["openai>=1.0.0"],
|
"requirements": ["openai>=1.0.0"],
|
||||||
"ssdp": [],
|
"ssdp": [],
|
||||||
"version": "1.0.8",
|
"version": "1.0.10",
|
||||||
"zeroconf": []
|
"zeroconf": []
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
@@ -4,6 +4,6 @@
|
|||||||
"domains": ["sensor"],
|
"domains": ["sensor"],
|
||||||
"homeassistant": "2024.11.0",
|
"homeassistant": "2024.11.0",
|
||||||
"icon": "mdi:brain",
|
"icon": "mdi:brain",
|
||||||
"version": "1.0.8",
|
"version": "1.0.10",
|
||||||
"documentation": "https://github.com/smkrv/ha-text-ai"
|
"documentation": "https://github.com/smkrv/ha-text-ai"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
```
|
||||||
|
ha-text-ai/
|
||||||
|
│
|
||||||
|
├── custom_components/
|
||||||
|
│ └── ha_text_ai/
|
||||||
|
│ ├── __init__.py
|
||||||
|
│ ├── config_flow.py
|
||||||
|
│ ├── coordinator.py
|
||||||
|
│ ├── manifest.json
|
||||||
|
│ ├── sensor.py
|
||||||
|
│ ├── services.yaml
|
||||||
|
│ └── const.py
|
||||||
|
│
|
||||||
|
└── strings/
|
||||||
|
├── en.json
|
||||||
|
└── ru.json
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user