Manavraj's picture
Update app.py
69e7e0f verified
import gradio as gr
import requests
import json
from smolagents import CodeAgent
import logging
from tenacity import retry, stop_after_attempt, wait_exponential
# Configure logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
HF_SPACE_URL = "https://manavraj-troubleshoot-mcp.hf.space"
@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=4, max=10))
def call_mcp_server(message: str, tool_type: str = "knowledge_base") -> str:
"""Call MCP server endpoint"""
try:
endpoint = f"{HF_SPACE_URL}/gradio_api/mcp/sse"
response = requests.post(
endpoint,
json={
"tool": tool_type,
"input": message
},
stream=True,
timeout=30
)
response.raise_for_status()
for line in response.iter_lines():
if line.startswith(b'data:'):
return json.loads(line[5:])["output"]
return "No response received from MCP server"
except Exception as e:
logger.error(f"API call failed: {str(e)}")
return f"Error: {str(e)}"
agent = CodeAgent(
tools=[],
model="microsoft/DialoGPT-medium",
system_prompt="""{{authorized_imports}}
- requests for API calls
- standard Python libraries
{{managed_agents_descriptions}}
You are a Technical Support Assistant with these capabilities:
1. Troubleshooting technical issues
2. Finding information via web search
3. Formatting instructions
Access tools through MCP server:
- knowledge_base: For technical issues
- web_search: For information lookup
- formatter: To organize steps
Response workflow:
1. Analyze user request
2. Choose appropriate tool
3. Return clear response
Example:
USER: My wifi disconnected
THOUGHT: Should use knowledge_base
ACTION: knowledge_base("wifi disconnection")
RESPONSE: Try these steps: [solution steps]
Never show internal workflow to user."""
)
def chat_interface(message: str, history: list) -> str:
"""Handle chat interaction"""
try:
response = agent.run(message)
if "ACTION:" in response:
tool_call = response.split("ACTION:")[1].split("(")[0].strip()
input_text = response.split("(")[1].split(")")[0].strip('"')
return call_mcp_server(input_text, tool_call)
return response
except Exception as e:
logger.error(f"Chat error: {str(e)}")
return f"Error: {str(e)}"
demo = gr.ChatInterface(
fn=chat_interface,
title="🔧 Technical Support",
examples=["Wifi not working", "Find Windows 11 specs", "Format: Turn off. Wait. Restart"]
)
if __name__ == "__main__":
demo.launch()