ContiAI / routers /content_generation_route.py
ziadsameh32's picture
Update routers/content_generation_route.py
f0865b7 verified
Raw
History Blame Contribute Delete
3.87 kB
import os
from crewai import Crew, Process
import json
from typing import Dict, Any
from fastapi import APIRouter, HTTPException, Depends
from fastapi.responses import HTMLResponse
from agents.content_phase import (
query_agent,
query_task,
course_writer_agent,
course_writer_task,
)
import app
from core import generate_course_content
from core.content_converter_service import convert_dict_to_html
from modules import (
llm,
inputs,
)
from tools import scrape_course, SerperExhaustedError,CURRENT_SERPER_INDEX
from schemas import (
CourseWithQueries,
CourseContent,
)
router = APIRouter(prefix="/content", tags=["Content Generation"])
# ------------------------------------
# === Agent 7:Training Generator ===
# ------------------------------------
@router.post("/keyword_generation")
def run_keywords(outlines: CourseContent):
agent = query_agent()
task = query_task(agent)
keywords_crew = Crew(
agents=[agent],
tasks=[task],
process=Process.sequential,
)
result = keywords_crew.kickoff(inputs={"course": outlines.dict()})
print(result.json_dict)
return {"message": "Keywords Generated Well ๐Ÿš€", "result": result}
# @router.post("/scrape")
# def scrape_endpoint(course:CourseWithQueries):
# try:
# # ู†ุญูˆู„ Pydantic model ู„ู€ dict ุจู†ูุณ ุงู„ุดูƒู„ ุงู„ู„ูŠ ุงู„ูุงู†ูƒุดู† ู…ุณุชู†ูŠุงู‡ุง
# course_dict = course.dict()
# summary, raw = scrape_course(course_dict)
# return {
# "message": "Queries Searched and Scraped Well ๐Ÿš€",
# "summary": summary,
# "raw": raw,
# }
# return {"message": "Queries Searched and Scraped Well ๐Ÿš€", "summary": summary, "raw": raw}
# except Exception as e:
# # ููŠ ุงู„ุจุฑูˆุฏุงูƒุดู† ุฎู„ูŠู‡ logging ูˆ ู…ุชุทู„ุนุด ุงู„ุฑุณุงู„ุฉ ุงู„ุฎุงู… ู„ู„ุนู…ูŠู„
# raise HTTPException(status_code=500, detail=str(e))
@router.post("/scrape")
def scrape_endpoint(course: CourseWithQueries):
try:
course_dict = course.dict()
summary, raw = scrape_course(course_dict)
return {
"message": "Queries Searched and Scraped Well ๐Ÿš€",
"serper_api_used_index": CURRENT_SERPER_INDEX,
"summary": summary,
"raw": raw,
}
except SerperExhaustedError as e:
raise HTTPException(status_code=500, detail=f"{str(e)}")
except Exception as e:
raise HTTPException(status_code=500, detail=f"Unexpected error: {str(e)}")
@router.post("/content_generation")
def run_content_generation(course_data: Dict):
# ู†ุญูˆู„ ู„ู€ dict ูˆู†ุจุนุชู‡ุง ู„ู„ู€ service
course_dict = course_data
result = generate_course_content(course_dict)
return {"message": "Content Generated Well ๐Ÿš€", "result": result}
@router.post("/convert_course", response_class=HTMLResponse)
def convert_to_html(course_data: Dict[str, Any]):
"""
ุชุญูˆูŠู„ ุจูŠุงู†ุงุช ุงู„ู…ู‚ุฑุฑ ุงู„ุฏุฑุงุณูŠ ู…ู† Dictionary ุฅู„ู‰ HTML
Args:
course_data: Dictionary ูŠุญุชูˆูŠ ุนู„ู‰ ุจูŠุงู†ุงุช ุงู„ู…ู‚ุฑุฑ ุงู„ุฏุฑุงุณูŠ
- course_name: ุงุณู… ุงู„ู…ู‚ุฑุฑ
- course_audience: ุงู„ุฌู…ู‡ูˆุฑ ุงู„ู…ุณุชู‡ุฏู
- results: ู‚ุงุฆู…ุฉ ุงู„ูˆุญุฏุงุช
Returns:
HTML string ูƒุงู…ู„ ุฌุงู‡ุฒ ู„ู„ุนุฑุถ
"""
try:
# ุงู„ุชุญู‚ู‚ ู…ู† ูˆุฌูˆุฏ ุงู„ุจูŠุงู†ุงุช ุงู„ุฃุณุงุณูŠุฉ
if not course_data:
raise HTTPException(status_code=400, detail="ู„ุง ุชูˆุฌุฏ ุจูŠุงู†ุงุช ู…ุฑุณู„ุฉ")
# ุชุญูˆูŠู„ Dictionary ุฅู„ู‰ HTML
html_content = convert_dict_to_html(course_data)
return HTMLResponse(content=html_content)
except Exception as e:
raise HTTPException(status_code=500, detail=f"ุฎุทุฃ ููŠ ุงู„ุชุญูˆูŠู„: {str(e)}")