MCPcopy Create free account
hub / github.com/CJackHwang/AIstudioProxyAPI / chat_completions

Function chat_completions

api_utils/routers/chat.py:24–92  ·  view source on GitHub ↗
(
    request: ChatCompletionRequest,
    http_request: Request,
    logger: logging.Logger = Depends(get_logger),
    request_queue: Queue = Depends(get_request_queue),
    server_state: dict = Depends(get_server_state),
    worker_task=Depends(get_worker_task),
    _lock: None = Depends(ensure_request_lock),
)

Source from the content-addressed store, hash-verified

22
23
24async def chat_completions(
25 request: ChatCompletionRequest,
26 http_request: Request,
27 logger: logging.Logger = Depends(get_logger),
28 request_queue: Queue = Depends(get_request_queue),
29 server_state: dict = Depends(get_server_state),
30 worker_task=Depends(get_worker_task),
31 _lock: None = Depends(ensure_request_lock),
32) -> JSONResponse:
33 req_id = "".join(random.choices("abcdefghijklmnopqrstuvwxyz0123456789", k=7))
34
35 # Set log context (Grid Logger)
36 set_request_id(req_id)
37 set_source("API")
38
39 logger.info(f"Received /v1/chat/completions request (Stream={request.stream})")
40
41 launch_mode = get_environment_variable("LAUNCH_MODE", "unknown")
42 browser_page_critical = launch_mode != "direct_debug_no_browser"
43
44 is_service_unavailable = (
45 server_state["is_initializing"]
46 or not server_state["is_playwright_ready"]
47 or (
48 browser_page_critical
49 and (
50 not server_state["is_page_ready"]
51 or not server_state["is_browser_connected"]
52 )
53 )
54 or not worker_task
55 or worker_task.done()
56 )
57
58 if is_service_unavailable:
59 raise service_unavailable(req_id)
60
61 result_future = Future()
62 queue_item = {
63 "req_id": req_id,
64 "request_data": request,
65 "http_request": http_request,
66 "result_future": result_future,
67 "enqueue_time": time.time(),
68 "cancelled": False,
69 }
70 await request_queue.put(queue_item)
71
72 try:
73 timeout_seconds = RESPONSE_COMPLETION_TIMEOUT / 1000 + 120
74 return await asyncio.wait_for(result_future, timeout=timeout_seconds)
75 except asyncio.TimeoutError:
76 raise HTTPException(
77 status_code=504, detail=f"[{req_id}] Request processing timed out."
78 )
79 except asyncio.CancelledError:
80 logger.info(f"Request cancelled by client: {req_id}")
81 raise

Calls 6

set_request_idFunction · 0.90
set_sourceFunction · 0.90
get_environment_variableFunction · 0.90
service_unavailableFunction · 0.85
infoMethod · 0.80
warningMethod · 0.80