Daniel00611 commited on
Commit
c9bd98a
verified
1 Parent(s): c244259

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +49 -26
app.py CHANGED
@@ -83,6 +83,48 @@ def enviar_ubicacion(access_token: str, phone_number_id: str, recipient_number:
83
  response = requests.post(url, headers=headers, json=data)
84
  return response.json()
85
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
  # Modelo de datos para la solicitud
87
  class ChatRequest(BaseModel):
88
  message: str
@@ -166,31 +208,12 @@ async def chat(request: ChatRequest):
166
 
167
  if name == "obtener_extractos":
168
  contexto = obtener_extractos(args["query"])
169
-
170
- # A帽adir la respuesta de la tool al historial de mensajes
171
- tool_call_id = tool_call.id
172
- messages.append({
173
- "role": "assistant",
174
- "content": None,
175
- "tool_calls": [
176
- {
177
- "id": tool_call_id,
178
- "type": "function",
179
- "function": {
180
- "name": name,
181
- "arguments": tool_call.function.arguments # debe ser string (JSON serializado)
182
- }
183
- }
184
- ]
185
- })
186
- messages.append({
187
- "role": "tool",
188
- "tool_call_id": tool_call_id,
189
- "name": name,
190
- "content": contexto
191
- })
192
-
193
- # Segunda llamada a OpenAI ahora con contexto
194
  response = client.chat.completions.create(
195
  model="gpt-4o-mini",
196
  messages=messages,
@@ -198,7 +221,7 @@ async def chat(request: ChatRequest):
198
  temperature=request.temperature,
199
  top_p=request.top_p
200
  )
201
-
202
  return {"response": response.choices[0].message.content, "context": contexto}
203
 
204
  elif name == "enviar_contacto":
 
83
  response = requests.post(url, headers=headers, json=data)
84
  return response.json()
85
 
86
+ def handle_tool_call(tool_call, contexto):
87
+ """
88
+ Genera los mensajes necesarios tras una llamada a una tool:
89
+ - assistant con tool_call
90
+ - tool con respuesta de la funci贸n
91
+
92
+ Retorna una lista con ambos mensajes para agregarlos al historial.
93
+ """
94
+ tool_call_id = tool_call.id
95
+ function_name = tool_call.function.name
96
+
97
+ # Asegurar que los argumentos son string JSON, no dict
98
+ arguments = (
99
+ json.dumps(tool_call.function.arguments)
100
+ if isinstance(tool_call.function.arguments, dict)
101
+ else tool_call.function.arguments
102
+ )
103
+
104
+ return [
105
+ {
106
+ "role": "assistant",
107
+ "content": None,
108
+ "tool_calls": [
109
+ {
110
+ "id": tool_call_id,
111
+ "type": "function",
112
+ "function": {
113
+ "name": function_name,
114
+ "arguments": arguments
115
+ }
116
+ }
117
+ ]
118
+ },
119
+ {
120
+ "role": "tool",
121
+ "tool_call_id": tool_call_id,
122
+ "name": function_name,
123
+ "content": contexto
124
+ }
125
+ ]
126
+
127
+
128
  # Modelo de datos para la solicitud
129
  class ChatRequest(BaseModel):
130
  message: str
 
208
 
209
  if name == "obtener_extractos":
210
  contexto = obtener_extractos(args["query"])
211
+
212
+ # Generar los mensajes necesarios
213
+ tool_messages = handle_tool_call(tool_call, contexto)
214
+ messages.extend(tool_messages)
215
+
216
+ # Segunda llamada con nuevo contexto
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
217
  response = client.chat.completions.create(
218
  model="gpt-4o-mini",
219
  messages=messages,
 
221
  temperature=request.temperature,
222
  top_p=request.top_p
223
  )
224
+
225
  return {"response": response.choices[0].message.content, "context": contexto}
226
 
227
  elif name == "enviar_contacto":