Изменение формата ответа дизайнерского API с добавлением расширенных полей
Browse files
app.py
CHANGED
@@ -103,12 +103,23 @@ class ProxyHTTPRequestHandler(http.server.BaseHTTPRequestHandler):
|
|
103 |
|
104 |
def _handle_designer_reload(self):
|
105 |
"""Обработка запросов дизайнера"""
|
|
|
106 |
response_data = {
|
107 |
-
"
|
108 |
"packages": [
|
109 |
{
|
110 |
"name": "default",
|
111 |
"description": "Default package",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
112 |
"graphs": []
|
113 |
}
|
114 |
]
|
@@ -120,15 +131,49 @@ class ProxyHTTPRequestHandler(http.server.BaseHTTPRequestHandler):
|
|
120 |
property_data = json.load(f)
|
121 |
|
122 |
graphs = property_data.get('graphs', [])
|
123 |
-
|
124 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
125 |
except Exception as e:
|
126 |
logger.error(f"PROXY: Ошибка при чтении графов для дизайнера: {e}")
|
127 |
-
|
128 |
-
self.send_response(HTTPStatus.OK)
|
129 |
-
self.send_header('Content-Type', 'application/json')
|
130 |
-
self.end_headers()
|
131 |
-
self.wfile.write(json.dumps(response_data).encode('utf-8'))
|
132 |
|
133 |
def _get_headers(self):
|
134 |
"""Получение заголовков для проксирования"""
|
|
|
103 |
|
104 |
def _handle_designer_reload(self):
|
105 |
"""Обработка запросов дизайнера"""
|
106 |
+
# Новый формат ответа для designer API
|
107 |
response_data = {
|
108 |
+
"status": 200,
|
109 |
"packages": [
|
110 |
{
|
111 |
"name": "default",
|
112 |
"description": "Default package",
|
113 |
+
"agents": [
|
114 |
+
{
|
115 |
+
"name": "voice_agent",
|
116 |
+
"description": "A simple voice agent"
|
117 |
+
},
|
118 |
+
{
|
119 |
+
"name": "chat_agent",
|
120 |
+
"description": "A simple chat agent"
|
121 |
+
}
|
122 |
+
],
|
123 |
"graphs": []
|
124 |
}
|
125 |
]
|
|
|
131 |
property_data = json.load(f)
|
132 |
|
133 |
graphs = property_data.get('graphs', [])
|
134 |
+
# Обеспечиваем форматирование совместимое с designer API
|
135 |
+
formatted_graphs = []
|
136 |
+
for graph in graphs:
|
137 |
+
# Копируем граф и добавляем дополнительные поля, которые могут ожидаться
|
138 |
+
graph_copy = graph.copy()
|
139 |
+
if 'id' not in graph_copy:
|
140 |
+
graph_copy['id'] = graph_copy.get('name', '').lower().replace(' ', '_')
|
141 |
+
if 'package' not in graph_copy:
|
142 |
+
graph_copy['package'] = 'default'
|
143 |
+
formatted_graphs.append(graph_copy)
|
144 |
+
|
145 |
+
response_data["packages"][0]["graphs"] = formatted_graphs
|
146 |
+
|
147 |
+
# Добавим альтернативные форматы в лог
|
148 |
+
alternative_format = {
|
149 |
+
"success": True,
|
150 |
+
"packages": [
|
151 |
+
{
|
152 |
+
"name": "default",
|
153 |
+
"description": "Default package",
|
154 |
+
"graphs": formatted_graphs
|
155 |
+
}
|
156 |
+
]
|
157 |
+
}
|
158 |
+
|
159 |
+
alternate_format2 = formatted_graphs
|
160 |
+
|
161 |
+
logger.info(f"PROXY: Ответ для designer API, формат 1: {json.dumps(response_data)}")
|
162 |
+
logger.info(f"PROXY: Ответ для designer API, формат 2: {json.dumps(alternative_format)}")
|
163 |
+
logger.info(f"PROXY: Ответ для designer API, формат 3: {json.dumps(alternate_format2)}")
|
164 |
+
|
165 |
+
# Тестируем разные варианты ответов
|
166 |
+
# 1. Отправляем третий формат (простой массив графов)
|
167 |
+
self.send_response(HTTPStatus.OK)
|
168 |
+
self.send_header('Content-Type', 'application/json')
|
169 |
+
self.end_headers()
|
170 |
+
self.wfile.write(json.dumps(alternate_format2).encode('utf-8'))
|
171 |
+
|
172 |
+
# В следующих вызовах попробуем другие форматы
|
173 |
+
|
174 |
except Exception as e:
|
175 |
logger.error(f"PROXY: Ошибка при чтении графов для дизайнера: {e}")
|
176 |
+
self.send_error(HTTPStatus.INTERNAL_SERVER_ERROR, str(e))
|
|
|
|
|
|
|
|
|
177 |
|
178 |
def _get_headers(self):
|
179 |
"""Получение заголовков для проксирования"""
|