diff --git a/src/contract_check/core/config.py b/src/contract_check/core/config.py index 7577f7b..1f789cb 100644 --- a/src/contract_check/core/config.py +++ b/src/contract_check/core/config.py @@ -76,6 +76,18 @@ class Settings(BaseSettings): ollama_timeout: float = 120.0 ollama_max_concurrency: int = 3 + # --- YandexGPT provider --- + yandexgpt_api_key: str = "" + yandexgpt_folder_id: str = "" + yandexgpt_model: str = "yandexgpt-lite" + yandexgpt_fallback_model: str = "" + yandexgpt_base_url: str = "https://llm.api.cloud.yandex.net" + yandexgpt_completion_path: str = "/foundationModels/v1/completion" + yandexgpt_temperature: float = 0.2 + yandexgpt_max_tokens: int = 3072 + yandexgpt_timeout: float = 120.0 + yandexgpt_max_concurrency: int = 3 + # --- API --- api_host: str = "0.0.0.0" api_port: int = 8000 diff --git a/src/contract_check/core/llm/factory.py b/src/contract_check/core/llm/factory.py index 3638fe5..76852de 100644 --- a/src/contract_check/core/llm/factory.py +++ b/src/contract_check/core/llm/factory.py @@ -9,6 +9,7 @@ from __future__ import annotations from ..config import Settings from .ollama_cloud import OllamaCloudProvider from .port import LLMProvider +from .yandex_gpt import YandexGPTProvider def build_llm_provider(settings: Settings) -> LLMProvider: @@ -26,7 +27,21 @@ def build_llm_provider(settings: Settings) -> LLMProvider: max_concurrency=settings.ollama_max_concurrency, chunk_size=settings.chunk_size_chars, ) + case "yandex_gpt": + return YandexGPTProvider( + api_key=settings.yandexgpt_api_key, + folder_id=settings.yandexgpt_folder_id, + model=settings.yandexgpt_model, + fallback_model=settings.yandexgpt_fallback_model or None, + base_url=settings.yandexgpt_base_url, + completion_path=settings.yandexgpt_completion_path, + temperature=settings.yandexgpt_temperature, + max_tokens=settings.yandexgpt_max_tokens, + timeout=settings.yandexgpt_timeout, + max_concurrency=settings.yandexgpt_max_concurrency, + chunk_size=settings.chunk_size_chars, + ) case _: raise ValueError( - f"unknown LLM_PROVIDER={settings.llm_provider!r} (expected: 'ollama_cloud')" + f"unknown LLM_PROVIDER={settings.llm_provider!r} (expected: 'ollama_cloud', 'yandex_gpt')" ) diff --git a/src/contract_check/worker_analyze/handler.py b/src/contract_check/worker_analyze/handler.py index cf532b5..cfa2aab 100644 --- a/src/contract_check/worker_analyze/handler.py +++ b/src/contract_check/worker_analyze/handler.py @@ -205,6 +205,13 @@ class AnalyzeHandler: error: str, ) -> None: mq_failed.labels(queue="analyze", failure_class=failure_class).inc() + log.warning( + "analyze_failure_retrying", + document_id=str(payload.document_id), + attempt=attempt, + failure_class=failure_class, + error=error, + ) async with self._session_factory() as session: await session.execute( text( @@ -254,4 +261,5 @@ class AnalyzeHandler: "analyze_terminal_failure", document_id=str(payload.document_id), failure_class=failure_class, + error=error, )