dial-docker-compose/ci/addon/azure_deployment_mock/app.py (30 lines of code) (raw):
import json
import os
from fastapi import FastAPI, Request, HTTPException
from fastapi.responses import StreamingResponse
from responses import responses, create_response
app = FastAPI()
API_KEY = os.environ.get("API_KEY")
if API_KEY is None:
raise ValueError("API_KEY environment variable not set")
response_idx = 0
@app.post("/openai/deployments/{model}/chat/completions")
async def process_completion(model: str, request: Request):
api_key = request.headers.get("api-key")
if api_key is None:
raise HTTPException(status_code=401, detail="API key not provided")
if api_key != API_KEY:
raise HTTPException(status_code=403, detail="Invalid API key")
body = await request.json()
stream = body.get("stream", False)
if not stream:
raise HTTPException(
status_code=400, detail="Non-streaming mode isn't supported"
)
global response_idx
response_payload = create_response(responses[response_idx], model)
response_idx = (response_idx + 1) % len(responses)
def generate_stream():
yield f"data: {json.dumps(response_payload)}\n\n"
yield "data: [DONE]\n\n"
return StreamingResponse(generate_stream(), media_type="text/event-stream")