Spaces:
Sleeping
Sleeping
| import os | |
| import groq | |
| from dotenv import load_dotenv | |
| import gradio as gr | |
| # 1. Environment and Groq Client Setup | |
| load_dotenv() # Load environment variables from .env | |
| # Retrieve the API key and model identifier from environment variables | |
| GROQ_API_KEY = os.getenv("GROQ_API_KEY") | |
| GROQ_MODEL_ID = os.getenv("GROQ_MODEL_ID", "llama-3.3-70b-versatile") | |
| # Initialize the Groq client (adjust this based on your actual Groq API) | |
| groq_client = groq.Client(api_key=GROQ_API_KEY) | |
| # 2. Define a Simple Agent Class Using Groq | |
| class Agent: | |
| def __init__(self, name, role, instructions): | |
| self.name = name | |
| self.role = role | |
| self.instructions = instructions | |
| def build_prompt(self, query): | |
| # Construct a prompt that provides context for the agent | |
| prompt = ( | |
| f"Agent Name: {self.name}\n" | |
| f"Role: {self.role}\n" | |
| f"Instructions: {self.instructions}\n" | |
| f"User Query: {query}\n" | |
| "Response:" | |
| ) | |
| return prompt | |
| def respond(self, query): | |
| prompt = self.build_prompt(query) | |
| # Call Groq Cloud API to generate a response (adjust parameters as needed) | |
| response = groq_client.generate( | |
| model_id=GROQ_MODEL_ID, | |
| prompt=prompt, | |
| max_tokens=200 | |
| ) | |
| # Assume the API returns a dict with a 'text' field for the generated response | |
| return response.get("text", "") | |
| # 3. Define Specific Agents | |
| websearch_agent = Agent( | |
| name="WebSearch Agent", | |
| role="Searches the web for financial information and the latest news.", | |
| instructions="Return results with sources in APA format." | |
| ) | |
| youtube_agent = Agent( | |
| name="YouTube Agent", | |
| role="Analyzes YouTube videos that are less than 22 minutes in duration.", | |
| instructions="Provide concise and engaging answers based on the video content." | |
| ) | |
| finance_agent = Agent( | |
| name="Finance Agent", | |
| role="Analyzes stock prices, analyst recommendations, and fundamentals.", | |
| instructions="Format your response using markdown tables where applicable." | |
| ) | |
| # 4. Build a Multi-Agent Coordinator | |
| class MultiAgent: | |
| def __init__(self, agents): | |
| self.agents = agents | |
| def handle_query(self, query): | |
| # For the given query, ask each agent and collect their responses | |
| responses = {} | |
| for agent in self.agents: | |
| responses[agent.name] = agent.respond(query) | |
| return responses | |
| # Create a multi-agent system with the defined agents | |
| multi_agent = MultiAgent([websearch_agent, youtube_agent, finance_agent]) | |
| # 5. Gradio Chatbot Front End Function | |
| def chat_response(user_query): | |
| responses = multi_agent.handle_query(user_query) | |
| # Format the responses into a single markdown string for display | |
| result = "" | |
| for agent_name, response in responses.items(): | |
| result += f"**{agent_name}**:\n{response}\n\n" | |
| return result | |
| # 6. Create the Gradio Interface | |
| demo = gr.Interface( | |
| fn=chat_response, | |
| inputs=gr.Textbox(placeholder="Enter your message here...", lines=2), | |
| outputs="markdown", | |
| title="Groq Agent Chatbot", | |
| description="A chatbot powered by Groq Cloud for GPT inference with multiple agents." | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() | |