| import subprocess |
| import os |
| from fastapi import FastAPI, HTTPException |
| from pydantic import BaseModel |
|
|
| app = FastAPI(title="OpenCode API") |
|
|
| class PromptRequest(BaseModel): |
| prompt: str |
|
|
| @app.post("/ask") |
| async def ask_openai(request: PromptRequest): |
| try: |
| result = subprocess.run( |
| ["opencode", "-p", request.prompt], |
| capture_output=True, |
| text=True, |
| timeout=60, |
| env={**os.environ, "OPENCODE_DATA_DIR": "/data"} |
| ) |
| if result.returncode != 0: |
| raise HTTPException(status_code=500, detail=result.stderr) |
| return {"response": result.stdout} |
| except subprocess.TimeoutExpired: |
| raise HTTPException(status_code=504, detail="Request timeout") |
| except Exception as e: |
| raise HTTPException(status_code=500, detail=str(e)) |
|
|
| @app.get("/") |
| def root(): |
| return {"message": "OpenCode API is running. Use POST /ask with JSON {\"prompt\": \"your question\"}"} |
|
|