smgc commited on
Commit
4d93f43
1 Parent(s): af3d711

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +35 -59
app.py CHANGED
@@ -162,7 +162,16 @@ def messages():
162
  def generate():
163
  nonlocal total_output_tokens
164
 
165
- start_event = create_event("message_start", {
 
 
 
 
 
 
 
 
 
166
  "type": "message_start",
167
  "message": {
168
  "id": msg_id,
@@ -175,25 +184,8 @@ def messages():
175
  "usage": {"input_tokens": input_tokens, "output_tokens": total_output_tokens},
176
  },
177
  })
178
- logger.info("Sending message_start event", extra={
179
- 'event_type': 'message_start',
180
- 'data': {'content': start_event}
181
- })
182
- yield start_event
183
-
184
- block_start_event = create_event("content_block_start", {"type": "content_block_start", "index": 0, "content_block": {"type": "text", "text": ""}})
185
- logger.info("Sending content_block_start event", extra={
186
- 'event_type': 'content_block_start',
187
- 'data': {'content': block_start_event}
188
- })
189
- yield block_start_event
190
-
191
- ping_event = create_event("ping", {"type": "ping"})
192
- logger.info("Sending ping event", extra={
193
- 'event_type': 'ping',
194
- 'data': {'content': ping_event}
195
- })
196
- yield ping_event
197
 
198
  def on_query_progress(data):
199
  nonlocal total_output_tokens, response_text
@@ -204,23 +196,22 @@ def messages():
204
  response_text.append(chunk)
205
  chunk_tokens = calculate_tokens(chunk)
206
  total_output_tokens += chunk_tokens
207
- delta_event = create_event("content_block_delta", {
208
- "type": "content_block_delta",
209
- "index": 0,
210
- "delta": {"type": "text_delta", "text": chunk},
211
- })
212
- logger.info("Sending content_block_delta event", extra={
213
- 'event_type': 'content_block_delta',
214
  'data': {
215
  'chunk': chunk,
216
  'tokens': chunk_tokens,
217
- 'total_tokens': total_output_tokens,
218
- 'content': delta_event
219
  }
220
  })
221
- yield delta_event
222
 
223
  if data.get('final', False):
 
 
 
 
 
 
224
  response_event.set()
225
 
226
  def on_connect():
@@ -255,13 +246,17 @@ def messages():
255
 
256
  while not response_event.is_set():
257
  sio.sleep(0.1)
 
 
 
 
 
 
 
258
 
259
  except Exception as e:
260
- logger.error(f"Error during socket connection: {str(e)}", extra={
261
- 'event_type': 'connection_error',
262
- 'data': {'error': str(e)}
263
- })
264
- yield create_event("content_block_delta", {
265
  "type": "content_block_delta",
266
  "index": 0,
267
  "delta": {"type": "text_delta", "text": f"Error during socket connection: {str(e)}"},
@@ -270,38 +265,19 @@ def messages():
270
  if sio.connected:
271
  sio.disconnect()
272
 
273
- stop_event = create_event("content_block_stop", {"type": "content_block_stop", "index": 0})
274
- logger.info("Sending content_block_stop event", extra={
275
- 'event_type': 'content_block_stop',
276
- 'data': {'content': stop_event}
277
- })
278
- yield stop_event
279
-
280
- message_delta_event = create_event("message_delta", {
281
  "type": "message_delta",
282
  "delta": {"stop_reason": "end_turn", "stop_sequence": None},
283
  "usage": {"output_tokens": total_output_tokens},
284
  })
285
- logger.info("Sending message_delta event", extra={
286
- 'event_type': 'message_delta',
287
- 'data': {'content': message_delta_event}
288
- })
289
- yield message_delta_event
290
-
291
- message_stop_event = create_event("message_stop", {"type": "message_stop"})
292
- logger.info("Sending message_stop event", extra={
293
- 'event_type': 'message_stop',
294
- 'data': {'content': message_stop_event}
295
- })
296
- yield message_stop_event
297
 
298
  return Response(generate(), content_type='text/event-stream')
299
 
300
  except Exception as e:
301
- logger.error(f"Request error: {str(e)}", extra={
302
- 'event_type': 'request_error',
303
- 'data': {'error': str(e)}
304
- })
305
  log_request(request.remote_addr, request.path, 400)
306
  return jsonify({"error": str(e)}), 400
307
 
 
162
  def generate():
163
  nonlocal total_output_tokens
164
 
165
+ def send_event(event_type, data):
166
+ event = create_event(event_type, data)
167
+ logger.info(f"Sending {event_type} event", extra={
168
+ 'event_type': event_type,
169
+ 'data': {'content': event}
170
+ })
171
+ yield event
172
+
173
+ # Send initial events
174
+ yield from send_event("message_start", {
175
  "type": "message_start",
176
  "message": {
177
  "id": msg_id,
 
184
  "usage": {"input_tokens": input_tokens, "output_tokens": total_output_tokens},
185
  },
186
  })
187
+ yield from send_event("content_block_start", {"type": "content_block_start", "index": 0, "content_block": {"type": "text", "text": ""}})
188
+ yield from send_event("ping", {"type": "ping"})
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
189
 
190
  def on_query_progress(data):
191
  nonlocal total_output_tokens, response_text
 
196
  response_text.append(chunk)
197
  chunk_tokens = calculate_tokens(chunk)
198
  total_output_tokens += chunk_tokens
199
+ logger.info("Received chunk", extra={
200
+ 'event_type': 'chunk_received',
 
 
 
 
 
201
  'data': {
202
  'chunk': chunk,
203
  'tokens': chunk_tokens,
204
+ 'total_tokens': total_output_tokens
 
205
  }
206
  })
 
207
 
208
  if data.get('final', False):
209
+ logger.info("Final response received", extra={
210
+ 'event_type': 'response_complete',
211
+ 'data': {
212
+ 'total_tokens': total_output_tokens
213
+ }
214
+ })
215
  response_event.set()
216
 
217
  def on_connect():
 
246
 
247
  while not response_event.is_set():
248
  sio.sleep(0.1)
249
+ while response_text:
250
+ chunk = response_text.pop(0)
251
+ yield from send_event("content_block_delta", {
252
+ "type": "content_block_delta",
253
+ "index": 0,
254
+ "delta": {"type": "text_delta", "text": chunk},
255
+ })
256
 
257
  except Exception as e:
258
+ logger.error(f"Error during socket connection: {str(e)}", exc_info=True)
259
+ yield from send_event("content_block_delta", {
 
 
 
260
  "type": "content_block_delta",
261
  "index": 0,
262
  "delta": {"type": "text_delta", "text": f"Error during socket connection: {str(e)}"},
 
265
  if sio.connected:
266
  sio.disconnect()
267
 
268
+ # Send final events
269
+ yield from send_event("content_block_stop", {"type": "content_block_stop", "index": 0})
270
+ yield from send_event("message_delta", {
 
 
 
 
 
271
  "type": "message_delta",
272
  "delta": {"stop_reason": "end_turn", "stop_sequence": None},
273
  "usage": {"output_tokens": total_output_tokens},
274
  })
275
+ yield from send_event("message_stop", {"type": "message_stop"})
 
 
 
 
 
 
 
 
 
 
 
276
 
277
  return Response(generate(), content_type='text/event-stream')
278
 
279
  except Exception as e:
280
+ logger.error(f"Request error: {str(e)}", exc_info=True)
 
 
 
281
  log_request(request.remote_addr, request.path, 400)
282
  return jsonify({"error": str(e)}), 400
283