Spaces:
Sleeping
Sleeping
| from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModel, load_tool, tool, Tool | |
| import datetime | |
| import requests | |
| import pytz | |
| import yaml | |
| import gradio as gr | |
| # ========== FINAL ANSWER TOOL ========== | |
| class FinalAnswerTool(Tool): | |
| name = "final_answer" | |
| description = "Call this with the final answer to the user's question" | |
| inputs = { | |
| "answer": { | |
| "type": "string", | |
| "description": "The final answer to send back to the user" | |
| } | |
| } | |
| output_type = "string" | |
| def forward(self, answer: str): | |
| return answer | |
| # ======================================= | |
| # Wikipedia Tool | |
| def search_wikipedia(query: str, sentences: int = 3) -> str: | |
| """ | |
| Search Wikipedia for information. | |
| Args: | |
| query (str): The topic to search for | |
| sentences (int, optional): Number of summary sentences to return. Defaults to 3. | |
| Returns: | |
| str: A summary from Wikipedia | |
| """ | |
| try: | |
| url = "https://en.wikipedia.org/w/api.php" | |
| params = { | |
| "action": "query", "format": "json", "titles": query, | |
| "prop": "extracts", "exintro": True, "explaintext": True, | |
| "exsentences": sentences | |
| } | |
| response = requests.get(url, params=params, timeout=10) | |
| data = response.json() | |
| pages = data.get("query", {}).get("pages", {}) | |
| for page_id, page_data in pages.items(): | |
| if page_id != "-1": | |
| extract = page_data.get("extract", "No information found.") | |
| return f"**Wikipedia: {query}**\n\n{extract}" | |
| return f"No Wikipedia page found for '{query}'." | |
| except Exception as e: | |
| return f"Error: {str(e)}" | |
| # Time Tool | |
| def get_current_time_in_timezone(timezone: str) -> str: | |
| """ | |
| Get current local time in a specified timezone. | |
| Args: | |
| timezone (str): A valid timezone (e.g., 'America/New_York') | |
| Returns: | |
| str: The current local time | |
| """ | |
| try: | |
| tz = pytz.timezone(timezone) | |
| time_str = datetime.datetime.now(tz).strftime("%Y-%m-%d %I:%M:%S %p") | |
| return f"⏰ Time in {timezone}: {time_str}" | |
| except: | |
| return f"Unknown timezone. Try: 'America/New_York', 'Europe/London', 'Asia/Tokyo'" | |
| # Initialize | |
| final_answer = FinalAnswerTool() | |
| # Use smaller model to avoid overload | |
| model = HfApiModel( | |
| model_id='Qwen/Qwen2.5-Coder-7B-Instruct', | |
| max_tokens=1024, | |
| temperature=0.3 | |
| ) | |
| # Simple tools list | |
| tools_list = [ | |
| final_answer, | |
| DuckDuckGoSearchTool(), | |
| search_wikipedia, | |
| get_current_time_in_timezone | |
| ] | |
| # Load prompts if exists | |
| try: | |
| with open("prompts.yaml", 'r') as f: | |
| prompt_templates = yaml.safe_load(f) | |
| except: | |
| prompt_templates = None | |
| # Create agent | |
| agent = CodeAgent( | |
| model=model, | |
| tools=tools_list, | |
| max_steps=6, | |
| name="Alfred", | |
| description="AI Assistant with Wikipedia search, web search, and time zone lookup" | |
| ) | |
| # Gradio Interface | |
| def chat_with_agent(message, history): | |
| """Process user message""" | |
| try: | |
| response = agent.run(message) | |
| return response | |
| except Exception as e: | |
| return f"Sorry, I encountered an error: {str(e)}" | |
| # Create interface - REMOVED theme="soft" | |
| demo = gr.ChatInterface( | |
| fn=chat_with_agent, | |
| title="🤖 Alfred AI Assistant", | |
| description="Ask me anything! I can search Wikipedia, search the web, and tell time in any timezone.", | |
| examples=[ | |
| "Tell me about Albert Einstein", | |
| "What time is it in Tokyo, Japan?", | |
| "Search for latest AI news", | |
| "What is quantum computing?" | |
| ] | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch(share=False) |