You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
1.6 KiB

import httpx
from fastapi import BackgroundTasks, FastAPI, Request
from pydantic import BaseModel
app = FastAPI()
class PassageProcessingRequest(BaseModel):
passage_topic: str
callback_url: str
@app.post("/callback")
async def callback(request: Request):
"""
Receives the processing result from the server.
In a real-world application, this endpoint would typically belong
to a different service or client application.
The server sends a POST request to this URL once the background
processing is completed.
"""
data = await request.json()
print(data)
return {"received": True}
async def send_processing_result(callback_url: str, generated_passage: str):
"""
Sends the processed passage result to the client's callback URL.
"""
async with httpx.AsyncClient() as client:
await client.post(
callback_url,
json={"processed_passage": generated_passage, "status": "completed"},
)
@app.post("/process-passage")
async def process_passage(
data: PassageProcessingRequest, background_tasks: BackgroundTasks
):
"""
Receives a passage processing request from the client.
Passage generation may take a long time to complete.
Instead of keeping the client waiting, the server immediately
returns a response and processes the task in the background.
Once processing is completed, the server sends the result
to the callback URL.
"""
background_tasks.add_task(
send_processing_result, data.callback_url, data.passage_topic
)
return {"message": "Passage processing started"}