KaThaNg commited on
Commit
e60212a
·
verified ·
1 Parent(s): 9e412e2

Update proxy_server.py

Browse files
Files changed (1) hide show
  1. proxy_server.py +5 -18
proxy_server.py CHANGED
@@ -270,29 +270,17 @@ async def stream_openai_response_to_claude_events(openai_response: httpx.Respons
270
  'stop_reason': claude_stop_reason,
271
  'stop_sequence': None
272
  }
273
- # Removed usage from here
274
  }
275
  yield f"event: message_delta\ndata: {json.dumps(final_delta)}\n\n"
276
 
277
  # 7. Send message_stop (including final usage)
278
- # --- FIX: Add usage info to the message_stop event ---
279
  final_stop_event_data = {
280
  'type': 'message_stop',
281
- # Claude API v1 examples sometimes show a nested 'message' object here,
282
- # but let's try putting usage directly under the event first for simplicity,
283
- # similar to how message_start includes a 'message' object.
284
- # If this doesn't work, we might need the nested 'message' structure.
285
- 'amazon-bedrock-invocationMetrics': { # Mimic Bedrock's potential structure for usage
286
- 'inputTokenCount': input_tokens,
287
- 'outputTokenCount': output_tokens if output_tokens > 0 else (accumulated_content_len // 4), # Use estimate if needed
288
- 'invocationLatency': 0, # Placeholder
289
- 'firstByteLatency': 0 # Placeholder
290
- }
291
- # Alternative simpler structure (if the above fails):
292
- # 'usage': {
293
- # 'input_tokens': input_tokens,
294
- # 'output_tokens': output_tokens if output_tokens > 0 else (accumulated_content_len // 4)
295
- # }
296
  }
297
  yield f"event: message_stop\ndata: {json.dumps(final_stop_event_data)}\n\n"
298
  # --- End Fix ---
@@ -436,4 +424,3 @@ if __name__ == "__main__":
436
  log_config_level = log_level.lower() if log_level in ["CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG", "TRACE"] else "info"
437
  logger.info(f"Starting Uvicorn server on {host}:{port}")
438
  uvicorn.run("proxy_server:app", host=host, port=port, reload=True, log_level=log_config_level)
439
-
 
270
  'stop_reason': claude_stop_reason,
271
  'stop_sequence': None
272
  }
 
273
  }
274
  yield f"event: message_delta\ndata: {json.dumps(final_delta)}\n\n"
275
 
276
  # 7. Send message_stop (including final usage)
277
+ # --- FIX: Use simpler 'usage' structure in message_stop ---
278
  final_stop_event_data = {
279
  'type': 'message_stop',
280
+ 'usage': {
281
+ 'input_tokens': input_tokens,
282
+ 'output_tokens': output_tokens if output_tokens > 0 else (accumulated_content_len // 4) # Use estimate if needed
283
+ }
 
 
 
 
 
 
 
 
 
 
 
284
  }
285
  yield f"event: message_stop\ndata: {json.dumps(final_stop_event_data)}\n\n"
286
  # --- End Fix ---
 
424
  log_config_level = log_level.lower() if log_level in ["CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG", "TRACE"] else "info"
425
  logger.info(f"Starting Uvicorn server on {host}:{port}")
426
  uvicorn.run("proxy_server:app", host=host, port=port, reload=True, log_level=log_config_level)