Primera fase: se construyen las funciones para las primeras 12 preguntas

This commit is contained in:
Mongar28
2025-10-30 11:05:14 -05:00
parent e2b027026d
commit 878ff1e9f3
16 changed files with 1953 additions and 0 deletions

131
llm/strategies.py Normal file
View File

@@ -0,0 +1,131 @@
"""
Módulo que define la interfaz de estrategia y las implementaciones concretas
para diferentes modelos de lenguaje (LLM).
"""
from abc import ABC, abstractmethod
from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic
from typing import Any, Dict, Optional
from dotenv import load_dotenv
load_dotenv()
# 1.Interfaz de la estrategia
class LLMStrategy(ABC):
"""Interfaz para todas las estrategias de modelos de lenguaje.
Esta clase define la interfaz commún que todas las estrategias
concretas deben implementar.
"""
@abstractmethod
def create_llm(self, config: Optional[Dict[str, Any]] = None) -> Any:
"""Crea una instancia de modelo de lenguaje según la configuración.
Args:
config: Diccionario con la configuración del modelo.
Returns:
Instancia del modelo de lenguaje.
"""
pass
class OpenAIO4MiniStrategy(LLMStrategy):
"""Estrategia para el modelo OpenAI o4-mini"""
def create_llm(self, config: Optional[Dict[str, Any]] = None) -> ChatOpenAI:
"""
Implementación concreta para crear un modelo OpenAI o4-mini
Args:
config: Configuración opcional para el modelo (no utilizada)
Returns:
ChatOpenAI: Instancia del modelo o4-mini
"""
# Para o4-mini solo pasamos el nombre del modelo sin parámetros adicionales
return ChatOpenAI(model="o4-mini")
class OpenAIGPT41MiniStrategy(LLMStrategy):
"""Estrategia para el modelo OpenAI GPT-4.1-mini."""
def create_llm(self, config: Optional[Dict[str, Any]] = None) -> ChatOpenAI:
"""
Implementación concreta para crear un modelo OpenAI GPT-4.1-mini.
Args:
config: Configuración opcional para el modelo
Returns:
ChatOpenAI: Una instancia del modelo gpt-4.1-mini
"""
config = config or {}
temperature = config.get("temperature", 0.0)
return ChatOpenAI(
model="gpt-4.1-mini",
temperature=temperature,
**{k: v for k, v in config.items() if k != "temperature"},
)
class AnthropicHaikuStrategy(LLMStrategy):
"""Estrategia para el modelo Anthropic Claude 3.5 Haiku."""
def create_llm(self, config: Optional[Dict[str, Any]] = None) -> ChatAnthropic:
"""
Implementación concreta para crear un modelo Anthropic Claude 3.5 Haiku.
Args:
config: Configuración opcional para el modelo
Returns:
ChatAnthropic: Una instancia del modelo claude-3-5-haiku
"""
config = config or {}
temperature = config.get("temperature", 0.0)
return ChatAnthropic(
model="claude-3-5-haiku-20241022",
temperature=temperature,
**{k: v for k, v in config.items() if k != "temperature"},
)
class AnthropicSonnet37Strategy(LLMStrategy):
"""Estrategia para el modelo Anthropic Claude 4.5 Sonnet."""
def create_llm(self, config: Optional[Dict[str, Any]] = None) -> ChatAnthropic:
"""
Implementación concreta para crear un modelo Anthropic Claude 4.5 Sonnet.
Args:
config: Configuración opcional para el modelo (no utilizada)
Returns:
ChatAnthropic: Una instancia del modelo claude-sonnet-4-5
"""
return ChatAnthropic(model="claude-sonnet-4-5")
class AnthropicHaiku45Strategy(LLMStrategy):
"""Estrategia para el modelo Anthropic Claude Haiku 4-5."""
def create_llm(self, config: Optional[Dict[str, Any]] = None) -> ChatAnthropic:
"""
Implementación concreta para crear un modelo Anthropic Claude Haiku 4-5.
Args:
config: Configuración opcional para el modelo
Returns:
ChatAnthropic: Una instancia del modelo claude-haiku-4-5
"""
config = config or {}
temperature = config.get("temperature", 0.0)
return ChatAnthropic(
model="claude-haiku-4-5", # <-- Nombre exacto del modelo
temperature=temperature,
**{k: v for k, v in config.items() if k != "temperature"},
)