Segizu commited on
Commit
e3a7212
1 Parent(s): 0552d31
Files changed (1) hide show
  1. app.py +28 -22
app.py CHANGED
@@ -48,28 +48,33 @@ llm = ChatOpenAI(
48
  api_key=os.getenv("HUGGINGFACEHUB_API_TOKEN")
49
  )
50
  developer_structure_llm = llm.with_structured_output(GenerateRecommendation, method="json_mode")
51
- reviewer_structure_llm = llm.with_structured_output(RecommendationQualityScore, method="json_mode")
52
 
53
  def travel_recommender(state):
54
- # Se asume que el 煤ltimo mensaje contiene las preferencias del usuario
55
  user_requirements = state["messages"][-1].content
56
  system_prompt = f"""
57
  Eres un experto en recomendaciones de viajes.
58
  Con base en las siguientes preferencias del usuario: {user_requirements},
59
- selecciona el mejor destino de la siguiente base de datos: {travel_database}.
60
- Responde en JSON con la clave `destination` para el destino recomendado y `explanation` con una breve raz贸n de la recomendaci贸n.
61
  """
62
- human_messages = [msg for msg in state["messages"] if isinstance(msg, HumanMessage)]
63
- ai_messages = [msg for msg in state["messages"] if isinstance(msg, AIMessage)]
64
- system_messages = [SystemMessage(content=system_prompt)]
 
65
 
66
- messages = system_messages + human_messages + ai_messages
67
- message = developer_structure_llm.invoke(messages)
 
 
 
 
 
 
68
 
69
- recommendation_output = f"Destination: {message.destination}\nExplanation: {message.explanation}"
70
- # Se agrega la recomendaci贸n a los mensajes para los siguientes nodos
71
- state["messages"].append(AIMessage(content=recommendation_output))
72
- state["iterations"] += 1
73
  return state
74
 
75
  def recommendation_review(state):
@@ -132,15 +137,16 @@ graph = builder.compile()
132
  def run_graph(user_input: str) -> str:
133
  initial_state = {"messages": [HumanMessage(content=user_input)], "quality": 0, "iterations": 0}
134
  final_state = graph.invoke(initial_state)
135
- return final_state.get("final_recommendation", "No se gener贸 una recomendaci贸n final.")
136
-
137
- # Interfaz de Gradio
138
- iface = gr.Interface(
139
- fn=run_graph,
140
- inputs=gr.Textbox(label="Ingrese sus preferencias de viaje"),
141
- outputs=gr.Textbox(label="Recomendaci贸n Final"),
142
- title="Sistema de Recomendaci贸n de Viajes"
143
- )
 
144
 
145
  if __name__ == "__main__":
146
  iface.launch()
 
48
  api_key=os.getenv("HUGGINGFACEHUB_API_TOKEN")
49
  )
50
  developer_structure_llm = llm.with_structured_output(GenerateRecommendation, method="json_mode")
 
51
 
52
  def travel_recommender(state):
 
53
  user_requirements = state["messages"][-1].content
54
  system_prompt = f"""
55
  Eres un experto en recomendaciones de viajes.
56
  Con base en las siguientes preferencias del usuario: {user_requirements},
57
+ selecciona el mejor destino de la siguiente base de datos.
58
+ Responde en JSON con la clave `destination` y `explanation`.
59
  """
60
+ messages = [
61
+ SystemMessage(content=system_prompt),
62
+ # ... m谩s mensajes (human/AI) si lo requieres ...
63
+ ]
64
 
65
+ # 1. Llamas a tu LLM con structured_output
66
+ recommendation_obj = developer_structure_llm.invoke(messages)
67
+
68
+ # 2. Conviertes el objeto resultante en texto
69
+ text_output = (
70
+ f"Destino recomendado: {recommendation_obj.destination}\n"
71
+ f"Raz贸n: {recommendation_obj.explanation}"
72
+ )
73
 
74
+ # 3. Guardas ese texto en el estado (para que otros nodos puedan revisarlo)
75
+ state["messages"].append(AIMessage(content=text_output))
76
+
77
+ # 4. Retornas el state modificado
78
  return state
79
 
80
  def recommendation_review(state):
 
137
  def run_graph(user_input: str) -> str:
138
  initial_state = {"messages": [HumanMessage(content=user_input)], "quality": 0, "iterations": 0}
139
  final_state = graph.invoke(initial_state)
140
+
141
+ # Supongamos que guardaste la recomendaci贸n final en state["final_recommendation"]
142
+ # o en el 煤ltimo mensaje AIMessage. Por ejemplo:
143
+ final_messages = [msg for msg in final_state["messages"] if isinstance(msg, AIMessage)]
144
+ if not final_messages:
145
+ return "No se gener贸 una recomendaci贸n final."
146
+
147
+ # Extraes el 煤ltimo mensaje del flujo
148
+ return final_messages[-1].content
149
+
150
 
151
  if __name__ == "__main__":
152
  iface.launch()