File size: 1,638 Bytes
325b94c | 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 | # app/core/crew_config.py
import litellm
from crewai import Crew, Process
# ====== LITELLM GLOBAL CONFIG ======
litellm.num_retries = 4
litellm.retry_policy = {
"TimeoutError": 4,
"APIError": 3,
"OpenRouterException": 3,
"Exception": 2,
}
litellm.request_timeout = 120
litellm.drop_params = True
# # ====== IMPORT AGENT + TASK ======
# from agents.content_phase import (
# course_writer_agent,
# course_writer_task,
# ) # انت عندك دول جاهزين
# # ====== CACHED CREW (يُستخدم في أي مكان) ======
# agent = course_writer_agent()
# task = course_writer_task(agent)
# cached_crew = Crew(
# agents=[agent],
# tasks=[task],
# process=Process.sequential,
# memory=False,
# verbose=False,
# )
# ====== SAFE RUN WRAPPER ======
import json
import time
def safe_run_cached(inputs, cached_crew, retries: int = 4):
"""
يلف حوالين cached_crew.kickoff ويحاول يعمل JSON parsing كذا مرة
ويرجع (generated_content, sources)
"""
for attempt in range(1, retries + 1):
result = cached_crew.kickoff(inputs=inputs)
try:
# لو result.raw موجود بنفس الشكل اللي كنت بتستخدمه
raw = json.loads(result.raw)
return raw.get("generated_content", ""), raw.get("sources", [])
except Exception:
print(f"❌ JSON Error attempt {attempt}")
# تطبع أول جزء من الرد عشان الديبج
print(str(result)[:300])
time.sleep(0.7)
return "", []
|