from smolagents import CodeAgent,DuckDuckGoSearchTool, HfApiModel,load_tool,tool from PIL import Image import datetime import os import io import qrcode import base64 import requests import pytz import yaml from tools.final_answer import FinalAnswerTool from Gradio_UI import GradioUI def image_path_to_markdown(path: str) -> str: try: with open(path, "rb") as f: img_bytes = f.read() img_base64 = base64.b64encode(img_bytes).decode("utf-8") return f"![Generated Image](data:image/png;base64,{img_base64})" except Exception as e: return f"Image saved at: {path} (Failed to embed image: {str(e)})" @tool def greeting_tool(greeting: str) -> str: """A tool to respond to user greetings and start a conversation. Args: greeting: The greeting message from the user (e.g., 'Hello', 'Hi') """ responses = [ "Hello! I'm your Tech Troubleshooting Assistant. How can I help you today?", "Hi there! What tech issue are you experiencing?", "Greetings! I'm here to help with your technical problems. What's troubling you?", "Hello! Ready to solve some tech problems? What's the issue?" ] import random return random.choice(responses) @tool def basic_troubleshooting(problem: str) -> str: """Provides basic troubleshooting steps for common tech issues. Args: problem: Description of the technical problem """ common_solutions = { "internet": "1. Restart your router\n2. Check cable connections\n3. Restart your device\n4. Contact your ISP if problem persists", "printer": "1. Check power and connections\n2. Restart printer\n3. Reinstall drivers\n4. Check for paper jams", "slow computer": "1. Close unused programs\n2. Run disk cleanup\n3. Check for malware\n4. Add more RAM if needed", "email": "1. Check internet connection\n2. Verify login credentials\n3. Check server status\n4. Try webmail version" } problem_lower = problem.lower() for key in common_solutions: if key in problem_lower: return f"For {problem}:\n\n{common_solutions[key]}" return f"For {problem}, try these general steps:\n1. Restart the device\n2. Check for updates\n3. Verify connections\n4. Search online for specific solutions" @tool def check_service_status(service: str) -> str: """Checks the status of popular online services. Args: service: Name of the service to check (e.g., 'Gmail', 'AWS') """ status_pages = { "gmail": "https://www.google.com/appsstatus", "aws": "https://health.aws.amazon.com/", "microsoft": "https://portal.office.com/servicestatus", "slack": "https://status.slack.com/", "zoom": "https://status.zoom.us/" } service_lower = service.lower() if service_lower in status_pages: return f"You can check {service}'s status here: {status_pages[service_lower]}" return f"I don't have a direct link for {service}'s status page. Try searching 'Is {service} down?' on a search engine." @tool def software_update_check(os_type: str) -> str: """Provides instructions for checking software updates on different operating systems. Args: os_type: The operating system (Windows, Mac, Linux, Android, iOS) """ instructions = { "windows": "1. Open Settings\n2. Go to Update & Security\n3. Click Check for updates", "mac": "1. Click Apple menu\n2. Select System Preferences\n3. Click Software Update", "linux": "For Ubuntu: Run 'sudo apt update && sudo apt upgrade' in terminal", "android": "1. Open Settings\n2. Tap System\n3. Tap Advanced\n4. Tap System update", "ios": "1. Open Settings\n2. Tap General\n3. Tap Software Update" } os_lower = os_type.lower() if os_lower in instructions: return f"To check for updates on {os_type}:\n\n{instructions[os_lower]}" return f"I don't have specific instructions for {os_type}. Try searching online for 'how to check updates on {os_type}'." final_answer = FinalAnswerTool() model = HfApiModel( max_tokens=2096, temperature=0.5, model_id='Qwen/Qwen2.5-Coder-32B-Instruct', custom_role_conversions=None, ) search_tool = DuckDuckGoSearchTool() with open("prompts.yaml", 'r') as stream: prompt_templates = yaml.safe_load(stream) agent = CodeAgent( model=model, tools=[final_answer, greeting_tool, basic_troubleshooting, check_service_status, software_update_check, search_tool], max_steps=6, verbosity_level=1, grammar=None, planning_interval=None, name=None, description=None, prompt_templates=prompt_templates ) GradioUI(agent).launch()