Spaces:
Running
Running
| import os | |
| import gradio as gr | |
| import requests | |
| import inspect | |
| import pandas as pd | |
| from dataclasses import asdict | |
| from smolagents import CodeAgent, LiteLLMModel, stream_to_gradio, OpenAIServerModel, DuckDuckGoSearchTool, WikipediaSearchTool, GoogleSearchTool | |
| from tools import SafeDuckDuckGoSearchTool, ImageUnderstanding, WikipediaSearch, ExcelReader, CsvReader,ChessSolver, download_files, get_images, FileReader, AudioTransciber, YouTubeTranscipt, YouTubeVideoUnderstanding, WeatherTool, OCR | |
| from dotenv import find_dotenv, load_dotenv | |
| from pathlib import Path | |
| from PIL import Image | |
| import time | |
| from agent import PowerAgent | |
| from utils import format_history, css | |
| import logging | |
| logging.basicConfig(level=logging.ERROR) | |
| def interact_with_agent(message, history): | |
| try: | |
| load_dotenv(find_dotenv()) | |
| # os.environ["SERPER_API_KEY"] = os.getenv('SERPER_API_KEY') | |
| gemini_model = LiteLLMModel(model_id= "gemini/gemini-2.0-flash", | |
| api_key=os.getenv("GEMINI_API_KEY")) | |
| #image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True) | |
| agent = PowerAgent(model=gemini_model) | |
| messages = [] | |
| prompt = message['text'] | |
| if len(message.get('files')) > 0: | |
| file_prompt = "The following files are uploaded: " + str(message.get('files')) | |
| else: | |
| file_prompt = "" | |
| formatted_history = format_history(history) | |
| # Add current message | |
| prompt = formatted_history + f"User: {message['text']}{file_prompt}\nAgent:" | |
| #yield messages | |
| for msg in stream_to_gradio(agent, prompt): | |
| messages.append(asdict(msg)) | |
| yield messages | |
| history.append([{'user':prompt, 'agent':msg.content}]) | |
| yield messages | |
| except Exception as e: | |
| logging.error("An error occurred", exc_info=True) | |
| yield [{"role": "system", "content": f"β An error occurred: {str(e)}"}] | |
| demo = gr.ChatInterface( | |
| interact_with_agent, | |
| autofocus=False, | |
| css=css, | |
| title='Power Agent π', | |
| multimodal=True, | |
| textbox=gr.MultimodalTextbox(placeholder="Ask me a question or upload a file.", | |
| file_count="multiple", | |
| file_types=['image', '.json', '.mp4', '.pdf', '.txt', '.csv', '.xlsx', '.xls', 'audio'], | |
| sources=["upload", "microphone"], | |
| container=False, scale=30), | |
| type="messages", | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch(debug=False, share=True, mcp_server=False) | |