import os import warnings from crewai import Agent, Task, Crew from crewai_tools import ScrapeWebsiteTool, SerperDevTool from crewai import Crew, Process from langchain_groq import ChatGroq from dotenv import load_dotenv load_dotenv() warnings.filterwarnings('ignore') SERPER_API_KEY = os.getenv('SERPER_API_KEY') # Model Selection # def initialize_llm(model_option, groq_api_key): # if model_option == 'Llama 3 8B': # return ChatGroq(groq_api_key=groq_api_key, model='llama3-8b-8192', temperature=0.1) # elif model_option == 'Llama 3.1 70B': # return ChatGroq(groq_api_key=groq_api_key, model='llama-3.1-70b-versatile', temperature=0.1) # elif model_option == 'Llama 3.1 8B': # return ChatGroq(groq_api_key=groq_api_key, model='llama-3.1-8b-instant', temperature=0.1) # else: # raise ValueError("Invalid model option selected") llm = ChatGroq(groq_api_key=os.getenv('GROQ_API_KEY'), model='llama-3.1-70b-versatile', temperature=0.1) search_tool = SerperDevTool() scrape_tool = ScrapeWebsiteTool() def crew_creator(stock_selection, # model_option, groq_api_key ): # llm = initialize_llm(model_option, groq_api_key) data_analyst_agent = Agent( role="Data Analyst", goal="Monitor and analyze market data in real-time " "to identify trends and predict market movements.", backstory="Specializing in financial markets, this agent " "uses statistical modeling and machine learning " "to provide crucial insights. With a knack for data, " "the Data Analyst Agent is the cornerstone for " "informing trading decisions.", verbose=True, allow_delegation=True, tools = [scrape_tool, search_tool], llm=llm, ) trading_strategy_agent = Agent( role="Trading Strategy Developer", goal="Develop and test various trading strategies based " "on insights from the Data Analyst Agent.", backstory="Equipped with a deep understanding of financial " "markets and quantitative analysis, this agent " "devises and refines trading strategies. It evaluates " "the performance of different approaches to determine " "the most profitable and risk-averse options.", verbose=True, allow_delegation=True, tools = [scrape_tool, search_tool], llm=llm, ) # execution_agent = Agent( # role="Trade Advisor", # goal="Suggest optimal trade execution strategies " # "based on approved trading strategies.", # backstory="This agent specializes in analyzing the timing, price, " # "and logistical details of potential trades. By evaluating " # "these factors, it provides well-founded suggestions for " # "when and how trades should be executed to maximize " # "efficiency and adherence to strategy.", # verbose=True, # allow_delegation=True, # tools = [scrape_tool, search_tool], # llm=llm, # ) # risk_management_agent = Agent( # role="Risk Advisor", # goal="Evaluate and provide insights on the risks " # "associated with potential trading activities.", # backstory="Armed with a deep understanding of risk assessment models " # "and market dynamics, this agent scrutinizes the potential " # "risks of proposed trades. It offers a detailed analysis of " # "risk exposure and suggests safeguards to ensure that " # "trading activities align with the firm’s risk tolerance.", # verbose=True, # allow_delegation=True, # tools = [scrape_tool, search_tool], # llm=llm, # ) # Task for Data Analyst Agent: Analyze Market Data data_analysis_task = Task( description=( "Continuously monitor and analyze market data for " "the selected stock ({stock_selection}). " "Use statistical modeling and machine learning to " "identify trends and predict market movements." ), expected_output=( "Insights and alerts about significant market " "opportunities or threats for {stock_selection}." ), agent=data_analyst_agent, ) # Task for Trading Strategy Agent: Develop Trading Strategies strategy_development_task = Task( description=( "Develop and refine trading strategies based on " "the insights from the Data Analyst and " # "user-defined risk tolerance ({risk_tolerance}). " # "Consider trading preferences ({trading_strategy_preference})." ), expected_output=( "A set of potential trading strategies for {stock_selection} " "that align with the user's risk tolerance." ), agent=trading_strategy_agent, ) # Task for Trade Advisor Agent: Plan Trade Execution # execution_planning_task = Task( # description=( # "Analyze approved trading strategies to determine the " # "best execution methods for {stock_selection}, " # "considering current market conditions and optimal pricing." # ), # expected_output=( # "Detailed execution plans suggesting how and when to " # "execute trades for {stock_selection}." # ), # agent=execution_agent, # ) # Task for Risk Advisor Agent: Assess Trading Risks # risk_assessment_task = Task( # description=( # "Evaluate the risks associated with the proposed trading " # "strategies and execution plans for {stock_selection}. " # "Provide a detailed analysis of potential risks " # "and suggest mitigation strategies." # ), # expected_output=( # "A comprehensive risk analysis report detailing potential " # "risks and mitigation recommendations for {stock_selection}." # ), # agent=risk_management_agent, # ) # Define the crew with agents and tasks financial_trading_crew = Crew( agents=[ data_analyst_agent, trading_strategy_agent, # execution_agent, # risk_management_agent ], tasks=[ data_analysis_task, strategy_development_task, # execution_planning_task, # risk_assessment_task ], manager_llm = llm, process=Process.sequential, verbose=True, ) result = financial_trading_crew.kickoff(inputs={ 'stock_selection': stock_selection, # 'initial_capital': initial_capital, # 'risk_tolerance': risk_tolerance, # 'trading_strategy_preference': trading_strategy_preference, # 'news_impact_consideration': news_impact_consideration }) return str(result) # print(result)