Spaces:
Running
Running
File size: 2,017 Bytes
9b7c591 7f62453 9b7c591 7f62453 9b7c591 7f62453 9b7c591 7f62453 9b7c591 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | from __future__ import annotations
import logging
import os
from pathlib import Path
from dotenv import load_dotenv
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from crew import ContentCrew
# Load agents/.env if present (kept separate from backend/.env).
# Also load backend/.env to support local dev where keys are stored there.
_agents_env = Path(__file__).resolve().parent / ".env"
_backend_env = Path(__file__).resolve().parents[1] / "backend" / ".env"
load_dotenv(_agents_env, override=False)
load_dotenv(_backend_env, override=False)
logger = logging.getLogger(__name__)
app = FastAPI()
class GenerateRequest(BaseModel):
topic: str
feedback: str | None = None
memory_context: str = ""
tone_instruction: str = ""
@app.get("/health")
def health():
return {"ok": True}
@app.post("/generate")
def generate(req: GenerateRequest):
topic = (req.topic or "").strip()
if not topic:
raise HTTPException(400, "topic is required")
prompt = topic[:4000]
if req.memory_context:
prompt = f"{req.memory_context.strip()}\n\nTopic to write about: {prompt}"
if req.tone_instruction:
prompt = f"{prompt}\n\nTone requirements: {req.tone_instruction.strip()[:1200]}"
if req.feedback:
prompt += f"\n\nPrevious post rejected. Feedback: {req.feedback.strip()[:1000]}"
try:
crew_instance = ContentCrew().crew()
result = crew_instance.kickoff(inputs={"topic": prompt})
return {"post": str(result)}
except Exception as exc:
# Don't leak internal stack traces in the HTTP response by default.
msg = str(exc) or "Agent generation failed"
logger.warning("POST /generate failed: %s", msg, exc_info=True)
if os.getenv("AGENTS_DEBUG", "").strip() in ("1", "true", "yes"):
raise
raise HTTPException(500, msg[:500])
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=int(os.getenv("PORT", "9000")))
|