Spaces:
Running
Running
| 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 = "" | |
| def health(): | |
| return {"ok": True} | |
| 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"))) | |