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.

74 lines
1.7 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"
}