Handle response using Playwright - Enhanced version with integrity verification
(
req_id: str,
request: ChatCompletionRequest,
page: AsyncPage,
context: dict,
result_future: Future,
submit_button_locator: Locator,
check_client_disconnected: Callable,
prompt_length: int,
timeout: float,
)
| 480 | |
| 481 | |
| 482 | async def _handle_playwright_response( |
| 483 | req_id: str, |
| 484 | request: ChatCompletionRequest, |
| 485 | page: AsyncPage, |
| 486 | context: dict, |
| 487 | result_future: Future, |
| 488 | submit_button_locator: Locator, |
| 489 | check_client_disconnected: Callable, |
| 490 | prompt_length: int, |
| 491 | timeout: float, |
| 492 | ) -> Optional[Tuple[Event, Locator, Callable]]: |
| 493 | """Handle response using Playwright - Enhanced version with integrity verification""" |
| 494 | from api_utils.server_state import state |
| 495 | |
| 496 | logger = state.logger |
| 497 | |
| 498 | is_streaming = request.stream |
| 499 | current_ai_studio_model_id = context.get("current_ai_studio_model_id") |
| 500 | |
| 501 | await locate_response_elements(page, req_id, logger, check_client_disconnected) |
| 502 | check_client_disconnected("After Response Element Located: ") |
| 503 | |
| 504 | if is_streaming: |
| 505 | completion_event = Event() |
| 506 | |
| 507 | def playwright_stream_factory(event_to_signal: Event): |
| 508 | return gen_sse_from_playwright( |
| 509 | page, |
| 510 | logger, |
| 511 | req_id, |
| 512 | current_ai_studio_model_id or MODEL_NAME, |
| 513 | request, |
| 514 | check_client_disconnected, |
| 515 | event_to_signal, |
| 516 | prompt_length=prompt_length, |
| 517 | timeout=timeout, |
| 518 | ) |
| 519 | |
| 520 | resilient_gen = resilient_stream_generator( |
| 521 | req_id, |
| 522 | current_ai_studio_model_id or MODEL_NAME, |
| 523 | playwright_stream_factory, |
| 524 | completion_event, |
| 525 | ) |
| 526 | |
| 527 | if not result_future.done(): |
| 528 | result_future.set_result( |
| 529 | StreamingResponse(resilient_gen, media_type="text/event-stream") |
| 530 | ) |
| 531 | |
| 532 | return completion_event, submit_button_locator, check_client_disconnected |
| 533 | else: |
| 534 | page_controller = PageController(page, logger, req_id) |
| 535 | response_data = await page_controller.get_response_with_integrity_check( |
| 536 | check_client_disconnected, prompt_length, timeout=timeout |
| 537 | ) |
| 538 | |
| 539 | final_content = response_data.get("content", "") |