Update backend/main.py
Browse files- backend/main.py +25 -18
backend/main.py
CHANGED
|
@@ -33,10 +33,15 @@ class ResearchRequest(BaseModel):
|
|
| 33 |
method: Literal["gpt", "claude"]
|
| 34 |
|
| 35 |
|
| 36 |
-
class
|
|
|
|
| 37 |
output: list[ImageAdEssentials]
|
| 38 |
|
| 39 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 40 |
# --- Endpoints ---
|
| 41 |
|
| 42 |
@app.get("/api/target-audiences")
|
|
@@ -48,25 +53,27 @@ def get_target_audiences():
|
|
| 48 |
@app.post("/api/research", response_model=ResearchResponse)
|
| 49 |
def run_research(req: ResearchRequest):
|
| 50 |
"""
|
| 51 |
-
Run the researcher
|
| 52 |
-
Returns
|
| 53 |
"""
|
| 54 |
try:
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
|
|
|
|
|
|
| 70 |
|
| 71 |
except ValueError as e:
|
| 72 |
raise HTTPException(status_code=500, detail=str(e))
|
|
|
|
| 33 |
method: Literal["gpt", "claude"]
|
| 34 |
|
| 35 |
|
| 36 |
+
class AudienceResult(BaseModel):
|
| 37 |
+
target_audience: str
|
| 38 |
output: list[ImageAdEssentials]
|
| 39 |
|
| 40 |
|
| 41 |
+
class ResearchResponse(BaseModel):
|
| 42 |
+
results: list[AudienceResult]
|
| 43 |
+
|
| 44 |
+
|
| 45 |
# --- Endpoints ---
|
| 46 |
|
| 47 |
@app.get("/api/target-audiences")
|
|
|
|
| 53 |
@app.post("/api/research", response_model=ResearchResponse)
|
| 54 |
def run_research(req: ResearchRequest):
|
| 55 |
"""
|
| 56 |
+
Run the researcher for each target audience separately.
|
| 57 |
+
Returns grouped results — one set of triggers per audience.
|
| 58 |
"""
|
| 59 |
try:
|
| 60 |
+
all_results = []
|
| 61 |
+
|
| 62 |
+
for audience in req.target_audience:
|
| 63 |
+
if req.method == "gpt":
|
| 64 |
+
result = researcher_gpt(
|
| 65 |
+
audience, req.product_category, req.product_description
|
| 66 |
+
)
|
| 67 |
+
elif req.method == "claude":
|
| 68 |
+
result = researcher_claude(
|
| 69 |
+
audience, req.product_category, req.product_description
|
| 70 |
+
)
|
| 71 |
+
else:
|
| 72 |
+
raise HTTPException(status_code=400, detail="Invalid method. Use 'gpt' or 'claude'.")
|
| 73 |
+
|
| 74 |
+
all_results.append(AudienceResult(target_audience=audience, output=result))
|
| 75 |
+
|
| 76 |
+
return ResearchResponse(results=all_results)
|
| 77 |
|
| 78 |
except ValueError as e:
|
| 79 |
raise HTTPException(status_code=500, detail=str(e))
|