613cd90662
- Implemented OpenAICredencial class for managing OpenAI API keys. - Created OpenAICredencialModel and OpenAICredencialMapper for SQLAlchemy integration. - Developed OpenAICredencialRepo for CRUD operations on OpenAI credentials. - Established OpenAICliente class for interacting with OpenAI API. - Introduced PostgresCredencial class for managing PostgreSQL connection details. - Created PostgresCredencialModel and PostgresCredencialMapper for SQLAlchemy integration. - Developed PostgresCredencialRepo for CRUD operations on PostgreSQL credentials. - Added base connection class and PostgreSQL connection implementation. - Included environment variable loading for sensitive data management.
64 lines
2.2 KiB
Python
64 lines
2.2 KiB
Python
from llms.Modelos.Base_model import ModeloABC
|
|
from src.ConexionApis.OpenAi_conexion import OpenAICliente
|
|
|
|
class ModeloOpenAI(ModeloABC):
|
|
def __init__(
|
|
self,
|
|
cliente: OpenAICliente,
|
|
model: str = "gpt-4o",
|
|
temperature: float = 0.7,
|
|
top_p: float = 1.0,
|
|
top_k: int = None,
|
|
frecuencia_penalizacion: float = 0.0,
|
|
num_tokens_maximos: int = 512,
|
|
use_legacy: bool = False
|
|
):
|
|
super().__init__(
|
|
model=model,
|
|
temperature=temperature,
|
|
top_p=top_p,
|
|
top_k=top_k,
|
|
frecuencia_penalizacion=frecuencia_penalizacion,
|
|
num_tokens_maximos=num_tokens_maximos
|
|
)
|
|
self.cliente = cliente
|
|
self.use_legacy = use_legacy
|
|
|
|
async def responder(self, prompt: str, system_prompt: str = "", **kwargs) -> str:
|
|
import asyncio
|
|
|
|
if self.use_legacy:
|
|
loop = asyncio.get_event_loop()
|
|
respuesta = await loop.run_in_executor(
|
|
None,
|
|
lambda: self.cliente.completion(
|
|
model=self.model,
|
|
prompt=prompt,
|
|
temperature=self.temperature,
|
|
top_p=self.top_p,
|
|
max_tokens=self.num_tokens_maximos,
|
|
frequency_penalty=self.frecuencia_penalizacion,
|
|
**kwargs
|
|
)
|
|
)
|
|
return respuesta.choices[0].text.strip()
|
|
else:
|
|
messages = []
|
|
if system_prompt:
|
|
messages.append({"role": "system", "content": system_prompt})
|
|
messages.append({"role": "user", "content": prompt})
|
|
|
|
loop = asyncio.get_event_loop()
|
|
respuesta = await loop.run_in_executor(
|
|
None,
|
|
lambda: self.cliente.chat_completion(
|
|
model=self.model,
|
|
messages=messages,
|
|
temperature=self.temperature,
|
|
top_p=self.top_p,
|
|
max_tokens=self.num_tokens_maximos,
|
|
frequency_penalty=self.frecuencia_penalizacion,
|
|
**kwargs
|
|
)
|
|
)
|
|
return respuesta.choices[0].message.content |