feat(llm): añade factory que selecciona proveedor según settings
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,28 @@
|
|||||||
|
"""Factory que selecciona el LLMProvider según settings."""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from agentforge_core.config import Settings
|
||||||
|
from agentforge_core.llm.azure import AzureOpenAIProvider
|
||||||
|
from agentforge_core.llm.base import LLMProvider
|
||||||
|
from agentforge_core.llm.mock import MockProvider
|
||||||
|
from agentforge_core.llm.openai import OpenAIProvider
|
||||||
|
|
||||||
|
|
||||||
|
def build_llm_provider(settings: Settings) -> LLMProvider:
|
||||||
|
"""Materializa el proveedor activo. Falla en arranque si la config es inconsistente."""
|
||||||
|
match settings.llm_provider:
|
||||||
|
case "mock":
|
||||||
|
return MockProvider()
|
||||||
|
case "azure":
|
||||||
|
return AzureOpenAIProvider(
|
||||||
|
endpoint=settings.azure_openai_endpoint,
|
||||||
|
api_key=settings.azure_openai_api_key,
|
||||||
|
deployment=settings.azure_openai_deployment,
|
||||||
|
api_version=settings.azure_openai_api_version,
|
||||||
|
)
|
||||||
|
case "openai":
|
||||||
|
return OpenAIProvider(
|
||||||
|
api_key=settings.openai_api_key,
|
||||||
|
model=settings.openai_model,
|
||||||
|
)
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
"""Tests del factory LLM."""
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from agentforge_core.config import Settings
|
||||||
|
from agentforge_core.llm.factory import build_llm_provider
|
||||||
|
from agentforge_core.llm.mock import MockProvider
|
||||||
|
|
||||||
|
|
||||||
|
def test_factory_devuelve_mock_por_defecto() -> None:
|
||||||
|
s = Settings(llm_provider="mock", _env_file=None) # type: ignore[call-arg]
|
||||||
|
p = build_llm_provider(s)
|
||||||
|
assert isinstance(p, MockProvider)
|
||||||
|
assert p.name == "mock"
|
||||||
|
|
||||||
|
|
||||||
|
def test_factory_azure_requiere_credenciales() -> None:
|
||||||
|
s = Settings(llm_provider="azure", _env_file=None) # type: ignore[call-arg]
|
||||||
|
with pytest.raises(ValueError):
|
||||||
|
build_llm_provider(s)
|
||||||
Reference in New Issue
Block a user