File size: 2,707 Bytes
140fcff
356ab4e
 
69e7e0f
e0823ce
69e7e0f
e0823ce
 
 
 
f379bec
69e7e0f
ab7850a
69e7e0f
 
 
e0823ce
69e7e0f
 
 
 
 
 
 
 
 
 
356ab4e
 
69e7e0f
 
 
 
 
356ab4e
69e7e0f
 
356ab4e
69e7e0f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f379bec
69e7e0f
 
e0823ce
69e7e0f
 
 
 
 
 
e0823ce
69e7e0f
 
8c537bd
69e7e0f
 
 
 
8c537bd
 
69aae5c
69e7e0f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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()