Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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 |
-
#
|
| 171 |
-
|
| 172 |
-
messages.
|
| 173 |
-
|
| 174 |
-
|
| 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":
|