Initial upload for secondary development
This commit is contained in:
31
chatlog_fastAPI/services/ai_client.py
Normal file
31
chatlog_fastAPI/services/ai_client.py
Normal file
@@ -0,0 +1,31 @@
|
||||
import httpx
|
||||
from openai import AsyncOpenAI
|
||||
|
||||
from services.runtime_settings import get_ai_settings
|
||||
|
||||
_client_cache: dict[tuple[str, str], AsyncOpenAI] = {}
|
||||
_http_client_cache: dict[tuple[str, str], httpx.AsyncClient] = {}
|
||||
|
||||
|
||||
async def get_openai_client() -> tuple[AsyncOpenAI, dict]:
|
||||
settings = await get_ai_settings()
|
||||
cache_key = (
|
||||
settings.get("ai_base_url") or "",
|
||||
settings.get("ai_api_key") or "",
|
||||
)
|
||||
|
||||
if cache_key not in _client_cache:
|
||||
for http_client in _http_client_cache.values():
|
||||
await http_client.aclose()
|
||||
_client_cache.clear()
|
||||
_http_client_cache.clear()
|
||||
|
||||
http_client = httpx.AsyncClient(timeout=httpx.Timeout(600.0, connect=30.0))
|
||||
_http_client_cache[cache_key] = http_client
|
||||
_client_cache[cache_key] = AsyncOpenAI(
|
||||
api_key=settings.get("ai_api_key") or "missing",
|
||||
base_url=settings.get("ai_base_url"),
|
||||
http_client=http_client,
|
||||
)
|
||||
|
||||
return _client_cache[cache_key], settings
|
||||
Reference in New Issue
Block a user