Spaces:
Runtime error
Runtime error
phil71x
feat: Introduce new sentiment analysis scripts and rename other scripts . Enhance documentation
23d394c
#!/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" | |
) | |