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")))