Stock_Agent_optimized / utils /crew_course_agents.py
cryogenic22's picture
Create crew_course_agents.py
08ad87f verified
# utils/crew_course_agents.py
from crewai import Agent, Task, Crew, Process
from langchain.llms import Anthropic
from langchain.tools import DuckDuckGoSearchRun
from pathlib import Path
import json
import streamlit as st
class CourseCrewOrchestrator:
def __init__(self, anthropic_api_key):
self.llm = Anthropic(anthropic_api_key=anthropic_api_key)
self.search_tool = DuckDuckGoSearchRun()
self.data_dir = Path("data/courses")
self.data_dir.mkdir(parents=True, exist_ok=True)
def create_agents(self):
"""Create specialized agents for course creation"""
curriculum_designer = Agent(
role='Curriculum Designer',
goal='Design comprehensive and structured trading course outlines',
backstory='Expert in educational design with years of experience in financial education',
tools=[self.search_tool],
llm=self.llm,
verbose=True
)
content_creator = Agent(
role='Content Creator',
goal='Create engaging and informative trading content',
backstory='Experienced financial writer and educator with expertise in explaining complex concepts',
tools=[self.search_tool],
llm=self.llm,
verbose=True
)
technical_expert = Agent(
role='Trading Technical Expert',
goal='Provide deep technical insights and practical trading knowledge',
backstory='Professional trader with 15+ years of market experience',
tools=[self.search_tool],
llm=self.llm,
verbose=True
)
exercise_creator = Agent(
role='Exercise Designer',
goal='Create practical exercises and assessments',
backstory='Expert in creating hands-on learning experiences in trading',
tools=[self.search_tool],
llm=self.llm,
verbose=True
)
return {
'curriculum': curriculum_designer,
'content': content_creator,
'technical': technical_expert,
'exercise': exercise_creator
}
def create_course_tasks(self, agents, topic):
"""Create sequential tasks for course creation"""
tasks = [
Task(
description=f"Design a comprehensive curriculum outline for {topic}. Include learning objectives, prerequisites, and module structure.",
agent=agents['curriculum']
),
Task(
description=f"Create detailed content for each module in the {topic} curriculum. Focus on clear explanations and examples.",
agent=agents['content']
),
Task(
description=f"Add technical insights and practical trading strategies for {topic}. Include real market examples.",
agent=agents['technical']
),
Task(
description=f"Design exercises, quizzes, and practical assignments for {topic}. Include answer keys and explanations.",
agent=agents['exercise']
)
]
return tasks
async def generate_course(self, course_id, topic):
"""Generate course content using CrewAI"""
try:
# Create status file
self._update_status(course_id, 'starting', 0)
# Initialize agents and tasks
agents = self.create_agents()
tasks = self.create_course_tasks(agents, topic)
# Create and run the crew
course_crew = Crew(
agents=list(agents.values()),
tasks=tasks,
process=Process.sequential
)
# Execute tasks and save results
result = await course_crew.run()
course_content = self._parse_crew_result(result)
# Save course content
self._save_course_content(course_id, course_content)
self._update_status(course_id, 'complete', 100)
return course_content
except Exception as e:
self._update_status(course_id, 'error', 0, str(e))
raise e
def _update_status(self, course_id, status, progress, error=None):
"""Update course generation status"""
status_data = {
'status': status,
'progress': progress,
'error': error
}
status_file = self.data_dir / f"{course_id}_status.json"
with open(status_file, 'w') as f:
json.dump(status_data, f)
def _save_course_content(self, course_id, content):
"""Save generated course content"""
content_file = self.data_dir / f"{course_id}_content.json"
with open(content_file, 'w') as f:
json.dump(content, f)
def _parse_crew_result(self, result):
"""Parse and structure the crew's output"""
# Implement parsing logic based on the crew's output format
return {
'curriculum': result.get('curriculum', {}),
'content': result.get('content', {}),
'technical': result.get('technical', {}),
'exercises': result.get('exercises', {})
}