| from fastapi import FastAPI, Body |
| from fastapi.middleware.cors import CORSMiddleware |
| from pydantic import BaseModel |
| from typing import Optional |
| import asyncio |
|
|
| app = FastAPI() |
|
|
| |
| app.add_middleware( |
| CORSMiddleware, |
| allow_origins=["*"], |
| allow_methods=["*"], |
| allow_headers=["*"] |
| ) |
|
|
| |
| task_queue = asyncio.Queue() |
| latest_response: Optional[str] = None |
|
|
|
|
| class TaskRequest(BaseModel): |
| text: str |
|
|
|
|
| class ResponsePayload(BaseModel): |
| text: str |
|
|
|
|
| @app.post("/task") |
| async def add_task(task: TaskRequest): |
| """Receive new task text.""" |
| await task_queue.put(task.text) |
| return {"status": "queued", "text": task.text} |
|
|
|
|
| @app.get("/task/latest") |
| async def get_latest_task(): |
| """Provide next text for Tampermonkey when available.""" |
| if task_queue.empty(): |
| return {"textToInput": None} |
| text = await task_queue.get() |
| return {"textToInput": text} |
|
|
|
|
| @app.post("/task/response") |
| async def receive_response(data: ResponsePayload): |
| """Receive AI output text from Tampermonkey.""" |
| global latest_response |
| latest_response = data.text |
| return {"status": "received", "length": len(data.text)} |
|
|
|
|
| @app.get("/task/response/latest") |
| async def get_latest_response(): |
| """Retrieve last AI response for monitoring.""" |
| return {"latest_response": latest_response} |
|
|
|
|
| |
|
|