()
| 15735 | |
| 15736 | |
| 15737 | def create_app() -> FastAPI: |
| 15738 | app = FastAPI() |
| 15739 | app.state.service = None |
| 15740 | app.add_middleware( |
| 15741 | CORSMiddleware, |
| 15742 | allow_origins=["*"], |
| 15743 | allow_credentials=True, |
| 15744 | allow_methods=["*"], |
| 15745 | allow_headers=["*"], |
| 15746 | ) |
| 15747 | |
| 15748 | async def watch_http_disconnect( |
| 15749 | http_request: Request, |
| 15750 | cancel: Callable[[], None], |
| 15751 | ) -> None: |
| 15752 | while True: |
| 15753 | message = await http_request.receive() |
| 15754 | if message["type"] == "http.disconnect": |
| 15755 | cancel() |
| 15756 | return |
| 15757 | |
| 15758 | async def disconnected_cancelled_response_or_raise( |
| 15759 | http_request: Request, |
| 15760 | exc: BaseException, |
| 15761 | ) -> Response: |
| 15762 | if isinstance(exc, CompletionRequestCancelledError): |
| 15763 | if await http_request.is_disconnected(): |
| 15764 | return Response(status_code=204) |
| 15765 | raise exc |
| 15766 | |
| 15767 | def bad_request(exc: CompletionRequestValidationError) -> HTTPException: |
| 15768 | return HTTPException(status_code=400, detail=str(exc)) |
| 15769 | |
| 15770 | async def collect_completion_result( |
| 15771 | formatter: OpenAIFormatter, |
| 15772 | http_request: Request, |
| 15773 | stream: CompletionStream, |
| 15774 | cancel: Callable[[], None], |
| 15775 | ) -> OpenAICompletion | Response: |
| 15776 | disconnect_task = asyncio.create_task( |
| 15777 | watch_http_disconnect(http_request, cancel) |
| 15778 | ) |
| 15779 | try: |
| 15780 | return await asyncio.to_thread(formatter.collect_completion, stream) |
| 15781 | except asyncio.CancelledError: |
| 15782 | cancel() |
| 15783 | raise |
| 15784 | except BaseException as exc: |
| 15785 | return await disconnected_cancelled_response_or_raise(http_request, exc) |
| 15786 | finally: |
| 15787 | disconnect_task.cancel() |
| 15788 | stream.close() |
| 15789 | |
| 15790 | async def collect_completion_results( |
| 15791 | formatter: OpenAIFormatter, |
| 15792 | http_request: Request, |
| 15793 | submissions: Sequence[ |
| 15794 | Tuple[ |
no outgoing calls
no test coverage detected
searching dependent graphs…