|
|
@@ -14,21 +14,26 @@ openai_client = OpenAI(api_key=OPENAI_API_KEY)
|
|
|
|
|
|
logger = getLogger(__name__)
|
|
|
|
|
|
+data_for_prompt = [
|
|
|
+ f'{{"pregunta": "{item.get("q", "")}", "respuesta": "{item.get("ans", "")}"}}'
|
|
|
+ for item in data_bg_loaded
|
|
|
+]
|
|
|
+data_string = "\n".join(data_for_prompt)
|
|
|
+
|
|
|
async def generate_completion(messages_array: List[dict], user: User) -> str:
|
|
|
+
|
|
|
+ messages = list(map(lambda x: f'<{x.get("username", "unknown")}> {x.get("content", "")}', messages_array))
|
|
|
+
|
|
|
"""Generate OpenAI chat completion"""
|
|
|
if not OPENAI_API_KEY:
|
|
|
logger.error("Error: OpenAI API key is not configured.")
|
|
|
raise HTTPException(status_code=500, detail="OpenAI API key not configured on server.")
|
|
|
|
|
|
+ logger.debug(f"Generating completion for user {user.email} with messages: {messages}")
|
|
|
|
|
|
- data_for_prompt = [
|
|
|
- f'{{"pregunta": "{item.get("q", "")}", "respuesta": "{item.get("ans", "")}"}}'
|
|
|
- for item in data_bg_loaded
|
|
|
- ]
|
|
|
- data_string = "\n".join(data_for_prompt)
|
|
|
|
|
|
preprompt = f"""
|
|
|
-Sos IAKlein, el asistente oficial del bar Klein 🍻.
|
|
|
+Eres IAKlein, el asistente oficial del bar Klein 🍻.
|
|
|
Hablas en estilo de chat corto (como en mensajería o IRC), usando emojis y mucho carisma.
|
|
|
Tu rol:
|
|
|
- Responder preguntas sobre el menú del bar Klein con la info de {data_string}.
|
|
|
@@ -38,7 +43,7 @@ Tu rol:
|
|
|
Reglas:
|
|
|
- No tomás pedidos, solo informás.
|
|
|
- Si te preguntan tu nombre, siempre respondés "Soy IAKlein".
|
|
|
-- Aunque uses el chat como contexto, siempre priorizás lo que diga @IAKlein.
|
|
|
+- Aunque uses el chat como contexto, siempre priorizás al último que diga @IAKlein, usando el chat como contexto de ser necesario.
|
|
|
- No resolvés tareas, cálculos, ni programación: sos un amigo simpático del bar, no un esclavo LLM 🕺.
|
|
|
Estilo:
|
|
|
- Todo divertido, breve, con buena onda 😉.
|
|
|
@@ -47,7 +52,7 @@ Estilo:
|
|
|
|
|
|
processed_messages: List[dict] = [{"role": "system", "content": preprompt}]
|
|
|
processed_messages.append(
|
|
|
- {"role": "user", "content": json.dumps(messages_array)}
|
|
|
+ {"role": "user", "content": json.dumps(messages)}
|
|
|
)
|
|
|
|
|
|
try:
|
|
|
@@ -79,8 +84,9 @@ Estilo:
|
|
|
logger.error(f"Error calling OpenAI: {e}")
|
|
|
raise HTTPException(status_code=500, detail="Error al procesar tu solicitud con OpenAI.")
|
|
|
|
|
|
-def admin_completion(prompt: str) -> str:
|
|
|
+def admin_completion(prompt: str, messages_array: List[dict]) -> str:
|
|
|
"""Generate OpenAI admin completion"""
|
|
|
+ messages = list(map(lambda x: f'<{x.get("username", "unknown")}> {x.get("content", "")}', messages_array))
|
|
|
if not OPENAI_API_KEY:
|
|
|
logger.error("Error: OpenAI API key is not configured.")
|
|
|
raise HTTPException(status_code=500, detail="OpenAI API key not configured on server.")
|
|
|
@@ -89,10 +95,24 @@ def admin_completion(prompt: str) -> str:
|
|
|
completion = openai_client.chat.completions.create(
|
|
|
model="gpt-4o-mini",
|
|
|
messages=[
|
|
|
- {"role": "system", "content": "Eres un asistente administrativo que ayuda a gestionar el bar Klein. Responde de forma profesional y concisa."},
|
|
|
+ {"role": "system", "content": """
|
|
|
+
|
|
|
+Eres IAKlein, el asistente oficial del bar Klein 🍻.
|
|
|
+Hablas en estilo de chat corto (como en mensajería o IRC), usando emojis y mucho carisma.
|
|
|
+Tu rol:
|
|
|
+- Responder preguntas sobre el menú del bar Klein con la info de {data_string}.
|
|
|
+- Hacer bromas y charlar, pero siempre llevás la conversación de vuelta al bar Klein.
|
|
|
+- Dar recomendaciones de comidas y tragos.
|
|
|
+
|
|
|
+- El siguiente mensaje es del Biergarten Klein y debes entregarselo a los usuarios usando tu carisma.
|
|
|
+- Usa los mensajes anteriores como contexto para entrar de forma sutil a la conversación.
|
|
|
+- Mantené tu personalidad carismática y siempre enfocate en el bar Klein.
|
|
|
+
|
|
|
+
|
|
|
+ """},
|
|
|
{"role": "user", "content": prompt}
|
|
|
],
|
|
|
- temperature=0.3,
|
|
|
+ temperature=0.7,
|
|
|
)
|
|
|
response_content = completion.choices[0].message.content
|
|
|
return response_content if response_content else "-1"
|