Spaces:
Runtime error
Runtime error
| # main.py | |
| import os | |
| # Set CrewAI storage directory to something writable BEFORE any imports | |
| os.environ["CREWAI_STORAGE_DIR"] = "/tmp/crewai" | |
| os.environ["CREWAI_TELEMETRY_ENABLED"] = "false" | |
| os.environ["CREWAI_DB_PATH"] = "/tmp/crewai/crewai.db" | |
| os.environ["CREWAI_MEMORY_ENABLED"] = "false" | |
| os.environ["CREWAI_TRACING_ENABLED"] = "false" | |
| os.environ["CREWAI_AUTH_ENABLED"] = "false" | |
| os.environ["CREWAI_CREDENTIALS_PATH"] = "/tmp/crewai/credentials" | |
| os.environ["CREWAI_SECURE_STORAGE_PATH"] = "/tmp/crewai/secure" | |
| from crewai import Crew, Process | |
| from agents import finance_knowledge_agent, market_news_agent, stock_analysis_agent, response_refiner_agent | |
| from tasks import get_finance_knowledge_task, get_market_news_task, get_stock_analysis_task, get_response_refiner_task | |
| from utils import determine_question_type, search_qdrant | |
| def main(): | |
| """Main function to run the finance chatbot in terminal.""" | |
| finance_crew = Crew( | |
| agents=[finance_knowledge_agent, market_news_agent, stock_analysis_agent, response_refiner_agent], | |
| tasks=[], | |
| process=Process.sequential, | |
| verbose=True | |
| ) | |
| print("📈 Welcome to the Finance Chatbot!") | |
| print("Examples: 'What is investing?', 'Analyze AAPL', 'What’s the latest market news?'") | |
| while True: | |
| query = input("Enter your query (type 'exit' to quit): ").strip() | |
| if query.lower() == "exit": | |
| print("Goodbye!") | |
| break | |
| try: | |
| question_type, processed_query = determine_question_type(query) | |
| finance_crew.tasks = [] # Reset tasks for each query | |
| rag_note = "RAG_SUFFICIENT" # Default value | |
| if question_type == "finance_knowledge": | |
| contexts = search_qdrant(query, top_k=3) | |
| context_text = "\n\n".join([f"Source: {ctx['source']}\nContent: {ctx['text']}" for ctx in contexts]) | |
| is_context_useful = len(context_text) > 50 and any(query.lower() in ctx["text"].lower() for ctx in contexts) | |
| rag_note = "RAG_NOT_USED" if not is_context_useful else "RAG_SUFFICIENT" | |
| initial_task = get_finance_knowledge_task(query) | |
| elif question_type == "market_news": | |
| rag_note = "NO_RAG_NEEDED" # Market news doesn't use RAG | |
| initial_task = get_market_news_task(query) | |
| elif question_type == "stock_analysis": | |
| rag_note = "NO_RAG_NEEDED" # Stock analysis doesn't use RAG | |
| initial_task = get_stock_analysis_task(processed_query) | |
| else: | |
| initial_task = get_finance_knowledge_task(query) # Default | |
| finance_crew.tasks.append(initial_task) | |
| initial_response = finance_crew.kickoff() | |
| refiner_task = get_response_refiner_task(query, initial_response, question_type, rag_note=rag_note) | |
| finance_crew.tasks = [refiner_task] | |
| final_report = finance_crew.kickoff() | |
| print(f"\nFinal Report:\n{final_report}\n") | |
| except Exception as e: | |
| print(f"Error processing query: {e}") | |
| print("Please try again with a different query.\n") | |
| if __name__ == "__main__": | |
| main() |