Segizu commited on
Commit
7fcb17d
·
1 Parent(s): 83c68ab
Files changed (1) hide show
  1. app.py +66 -4
app.py CHANGED
@@ -1,7 +1,69 @@
1
  import gradio as gr
 
 
 
 
2
 
3
- def greet(name):
4
- return "Hello " + name + "!!"
5
 
6
- demo = gr.Interface(fn=greet, inputs="text", outputs="text")
7
- demo.launch()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import gradio as gr
2
+ from langgraph.graph import StateGraph, END
3
+ from langchain_core.runnables import RunnableLambda
4
+ from transformers import AutoTokenizer, AutoModelForCausalLM
5
+ import torch
6
 
7
+ # 1. Preparar el modelo Qwen/Qwen1.5-32B-Chat
8
+ model_id = "Qwen/Qwen1.5-32B-Chat"
9
 
10
+ tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
11
+ model = AutoModelForCausalLM.from_pretrained(
12
+ model_id,
13
+ device_map="auto",
14
+ torch_dtype=torch.float16,
15
+ trust_remote_code=True
16
+ )
17
+ model.eval()
18
+
19
+ # 2. Crear un wrapper manual (sin langchain)
20
+ class QwenWrapper:
21
+ def invoke(self, prompt: str) -> str:
22
+ messages = [{"role": "user", "content": prompt}]
23
+ inputs = tokenizer.apply_chat_template(messages, return_tensors="pt").to(model.device)
24
+ output = model.generate(inputs, max_new_tokens=256, do_sample=True, temperature=0.7)
25
+ decoded = tokenizer.decode(output[0], skip_special_tokens=True)
26
+ return decoded.split("assistant")[-1].strip()
27
+
28
+ qwen = QwenWrapper()
29
+
30
+ # 3. Definir el estado del agente
31
+ class AgentState(dict):
32
+ pass
33
+
34
+ # 4. Paso del agente con rol de agente de viajes
35
+ def agent_step(state: AgentState) -> AgentState:
36
+ user_input = state["input"]
37
+ # Se añade un prompt de contexto para que el agente actúe como experto en viajes
38
+ travel_prompt = (
39
+ "Eres un agente de viajes profesional y experimentado. "
40
+ "Asesora, recomienda y planifica itinerarios, destinos y actividades de viaje según las preferencias del usuario. "
41
+ f"Usuario: {user_input}"
42
+ )
43
+ response = qwen.invoke(travel_prompt)
44
+ return {"input": user_input, "output": response}
45
+
46
+ # 5. Crear nodo LangGraph
47
+ agent_node = RunnableLambda(agent_step)
48
+
49
+ graph_builder = StateGraph(AgentState)
50
+ graph_builder.add_node("agent", agent_node)
51
+ graph_builder.set_entry_point("agent")
52
+ graph_builder.add_edge("agent", END)
53
+ graph = graph_builder.compile()
54
+
55
+ # 6. Función para Gradio
56
+ def chat_with_agent(message):
57
+ result = graph.invoke({"input": message})
58
+ return result["output"]
59
+
60
+ # 7. Interfaz Gradio adaptada para un agente de viajes
61
+ iface = gr.Interface(
62
+ fn=chat_with_agent,
63
+ inputs=gr.Textbox(lines=2, placeholder="Haz una consulta sobre viajes..."),
64
+ outputs="text",
65
+ title="Agente de Viajes con LangGraph y Qwen",
66
+ description="Agente de viajes que utiliza LangGraph y Qwen/Qwen1.5-32B-Chat para recomendar destinos, itinerarios y consejos de viaje."
67
+ )
68
+
69
+ iface.launch()