File size: 5,680 Bytes
48a7f49
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6f77f6e
 
 
 
 
 
 
 
48a7f49
 
 
 
 
 
 
 
 
6f77f6e
 
48a7f49
 
 
6f77f6e
 
48a7f49
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38a6bb3
48a7f49
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6f77f6e
48a7f49
 
 
 
 
 
 
 
6f77f6e
48a7f49
 
 
 
 
 
 
 
 
 
 
 
 
6f77f6e
48a7f49
 
 
 
 
6f77f6e
48a7f49
 
6f77f6e
 
 
48a7f49
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#!/usr/bin/env python3
"""
MCP Sentiment Analysis using smolagents MCPClient.

This script provides sentiment analysis using the proper MCP protocol implementation
through the smolagents library. It's the fastest and most reliable solution.

Performance: ~0.11 seconds per request
Protocol: Native MCP via smolagents

To run this script:
    pdm run python usage/sentiment_mcp.py

Dependencies:
    - smolagents[mcp] (install with: pdm add "smolagents[mcp]")

Based on Hugging Face MCP Course:
https://huggingface.co/learn/mcp-course/unit2/gradio-client
"""

import time

try:
    from smolagents.mcp_client import MCPClient

    SMOLAGENTS_AVAILABLE = True
except ImportError:
    MCPClient = None
    SMOLAGENTS_AVAILABLE = False


def test_mcp_sentiment_analysis():
    """Test MCP connection using smolagents MCPClient."""
    print("πŸ§ͺ MCP Sentiment Analysis (smolagents)")
    print("=" * 45)
    print("Using smolagents.mcp_client.MCPClient for proper MCP connection.")
    print("Based on: https://huggingface.co/learn/mcp-course/unit2/gradio-client")
    print()

    if not SMOLAGENTS_AVAILABLE:
        print("❌ smolagents not available")
        print("Install with: pdm add 'smolagents[mcp]'")
        return False

    print("βœ… smolagents imported successfully")

    # Test texts
    test_texts = [
        "I love this product! It's amazing!",
        "This is terrible. I hate it.",
        "It's okay, nothing special.",
        "The weather is beautiful today!",
        "I'm feeling quite neutral about this.",
    ]

    mcp_client = None
    try:
        print("⏳ Connecting to MCP server via smolagents...")

        # Use MCPClient with the SSE endpoint - this handles the protocol properly
        mcp_client = MCPClient(
            {"url": "https://freemansel-mcp-sentiment.hf.space/gradio_api/mcp/sse"}
        )

        print("βœ… MCP client created successfully!")

        print("⏳ Getting available tools...")
        tools = mcp_client.get_tools()
        print(f"βœ… Found {len(tools)} tools:")
        print("\n".join(f"  β€’ {tool.name}: {tool.description}" for tool in tools))
        print()

        # Test sentiment analysis with each text
        for i, text in enumerate(test_texts, 1):
            print(f"Test {i}: '{text}'")

            start_time = time.time()
            try:
                # Find the sentiment analysis tool
                sentiment_tool = None
                for tool in tools:
                    if "sentiment" in tool.name.lower():
                        sentiment_tool = tool
                        break

                if sentiment_tool:
                    print(f"  ⏳ Using tool: {sentiment_tool.name}")
                    # Call the tool with the text
                    result = sentiment_tool(text=text)
                    elapsed = time.time() - start_time

                    print(f"  βœ… Result: {result}")
                    print(f"  ⏱️  Time: {elapsed:.2f}s")
                else:
                    print("  ❌ No sentiment analysis tool found")
                    # Let's try the first tool available
                    if tools:
                        print(f"  πŸ”„ Trying first available tool: {tools[0].name}")
                        result = tools[0](text=text)
                        elapsed = time.time() - start_time
                        print(f"  βœ… Result: {result}")
                        print(f"  ⏱️  Time: {elapsed:.2f}s")

            except Exception as e:  # pylint: disable=broad-except
                elapsed = time.time() - start_time
                print(f"  ❌ Error after {elapsed:.2f}s: {e}")

            print()

        print("πŸŽ‰ MCP sentiment analysis completed!")
        return True

    except Exception as e:  # pylint: disable=broad-except
        print(f"❌ Failed to connect with smolagents: {e}")
        print(f"Error type: {type(e).__name__}")
        print("\nTroubleshooting:")
        print("1. Make sure smolagents is installed: pdm add 'smolagents[mcp]'")
        print("2. Check that the MCP server endpoint is accessible")
        print("3. The server might be having protocol issues")
        return False

    finally:
        if mcp_client:
            try:
                mcp_client.disconnect()
                print("βœ… MCP client disconnected properly")
            except Exception as e:  # pylint: disable=broad-except
                print(f"⚠️  Disconnect warning: {e}")


def check_smolagents():
    """Check if smolagents is available."""
    if SMOLAGENTS_AVAILABLE:
        print("βœ… smolagents is available")
        return True
    print("❌ smolagents not found")
    print("Install with: pdm add 'smolagents[mcp]'")
    return False


if __name__ == "__main__":
    print("πŸš€ MCP Sentiment Analysis with smolagents")
    print("Using the approach from Hugging Face MCP Course")
    print("=" * 60)

    # First check if smolagents is available
    if not check_smolagents():
        print("\nPlease install smolagents:")
        print("pdm add 'smolagents[mcp]'")
        exit(1)

    # Now try the MCP connection
    success = test_mcp_sentiment_analysis()

    if success:
        print("\nπŸŽ‰ Success! smolagents MCPClient works!")
        print("This confirms the MCP server is working with the proper client.")
        print("The issue was using the low-level MCP client instead of smolagents.")
    else:
        print("\n⚠️  smolagents approach had issues.")
        print("This suggests the MCP server itself might have protocol problems.")
        print(
            "Try the Gradio client solution: pdm run python usage/sentiment_gradio.py"
        )