You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
swarms/examples/guides/x402_examples/memecoin_agent_x402.py

282 lines
8.1 KiB

import os
from typing import Any, Dict
from dotenv import load_dotenv
from fastapi import FastAPI
from pydantic import BaseModel, Field
from swarms import Agent
from x402.fastapi.middleware import require_payment
# Load environment variables
load_dotenv()
# Custom system prompt for memecoin analysis
MEMECOIN_ANALYSIS_PROMPT = """You are an expert cryptocurrency analyst specializing in memecoin evaluation and risk assessment.
Your role is to provide comprehensive, data-driven analysis of memecoins to help investors make informed decisions.
For each memecoin analysis, you should evaluate:
1. **Market Overview**:
- Current market cap and trading volume
- Price trends and volatility
- Liquidity assessment
2. **Community & Social Sentiment**:
- Social media presence and engagement
- Community size and activity
- Influencer endorsements or warnings
- Trending status on platforms
3. **Technical Analysis**:
- Price patterns and trends
- Support and resistance levels
- Trading volume analysis
- Key technical indicators (RSI, MACD, etc.)
4. **Risk Assessment**:
- Rug pull indicators
- Liquidity risks
- Smart contract security
- Team transparency
- Concentration of holdings
5. **Investment Recommendation**:
- Risk level (Low/Medium/High/Extreme)
- Potential upside and downside
- Time horizon considerations
- Position sizing recommendations
Always provide balanced, objective analysis. Emphasize risks clearly and never guarantee returns.
Be honest about the speculative nature of memecoin investments.
Format your analysis in a clear, structured manner with actionable insights.
"""
# Initialize FastAPI app
app = FastAPI(
title="Memecoin Analysis Agent",
description="AI-powered memecoin analysis service monetized with x402",
version="1.0.0",
)
def create_memecoin_agent(
agent_name: str = "Memecoin-Analyzer",
model_name: str = "gpt-4o",
max_loops: int = 1,
temperature: float = 0.5,
) -> Agent:
"""
Create a specialized agent for memecoin analysis.
Args:
agent_name: Name identifier for the agent
model_name: The LLM model to use for analysis
max_loops: Maximum number of reasoning loops
temperature: Temperature for response generation (0.0-1.0)
Returns:
Configured Agent instance for memecoin analysis
"""
agent = Agent(
agent_name=agent_name,
system_prompt=MEMECOIN_ANALYSIS_PROMPT,
model_name=model_name,
max_loops=max_loops,
autosave=True,
dashboard=False,
verbose=True,
dynamic_temperature_enabled=True,
temperature=temperature,
)
return agent
# Initialize the memecoin analysis agent
memecoin_agent = create_memecoin_agent()
# Request model
class MemecoinRequest(BaseModel):
"""
Request model for memecoin analysis.
Attributes:
symbol: The memecoin ticker symbol (e.g., 'DOGE', 'PEPE', 'SHIB')
include_social: Whether to include social media sentiment analysis
include_technicals: Whether to include technical analysis
"""
symbol: str = Field(..., description="Memecoin ticker symbol")
include_social: bool = Field(
default=True, description="Include social media sentiment"
)
include_technicals: bool = Field(
default=True, description="Include technical analysis"
)
# Apply x402 payment middleware to the analysis endpoint
# For testnet (Base Sepolia), use the free facilitator
# For mainnet, see configuration in README.md
app.middleware("http")(
require_payment(
path="/analyze-memecoin",
price="$0.10", # 10 cents per analysis
pay_to_address=os.getenv(
"WALLET_ADDRESS", "0xYourWalletAddress"
),
network_id="base-sepolia", # Use "base" for mainnet
description="Get comprehensive AI-powered memecoin analysis including market sentiment, risk assessment, and investment recommendations",
input_schema={
"type": "object",
"properties": {
"symbol": {
"type": "string",
"description": "Memecoin ticker symbol (e.g., DOGE, PEPE, SHIB)",
},
"include_social": {
"type": "boolean",
"description": "Include social media sentiment analysis",
"default": True,
},
"include_technicals": {
"type": "boolean",
"description": "Include technical analysis indicators",
"default": True,
},
},
"required": ["symbol"],
},
output_schema={
"type": "object",
"properties": {
"symbol": {"type": "string"},
"analysis": {"type": "string"},
"risk_level": {"type": "string"},
"recommendation": {"type": "string"},
"timestamp": {"type": "string"},
},
},
)
)
@app.get("/")
async def root() -> Dict[str, str]:
"""
Root endpoint providing API information.
Returns:
Dictionary with API details and usage instructions
"""
return {
"service": "Memecoin Analysis Agent",
"version": "1.0.0",
"description": "AI-powered memecoin analysis monetized with x402",
"endpoints": {
"/analyze-memecoin": "POST - Analyze a memecoin (requires payment)",
"/health": "GET - Health check endpoint (free)",
},
"pricing": "$0.10 per analysis",
"network": "base-sepolia (testnet)",
}
@app.get("/health")
async def health_check() -> Dict[str, str]:
"""
Health check endpoint (free, no payment required).
Returns:
Dictionary with service status
"""
return {"status": "healthy", "agent": "ready"}
@app.post("/analyze-memecoin")
async def analyze_memecoin(
request: MemecoinRequest,
) -> Dict[str, Any]:
"""
Analyze a memecoin using the AI agent (requires x402 payment).
This endpoint is protected by x402 payment middleware. Users must
pay $0.10 in USDC to access the analysis.
Args:
request: MemecoinRequest with symbol and analysis options
Returns:
Dictionary containing comprehensive memecoin analysis
"""
# Build the analysis query
query_parts = [f"Analyze the memecoin {request.symbol.upper()}."]
if request.include_social:
query_parts.append(
"Include detailed social media sentiment analysis."
)
if request.include_technicals:
query_parts.append(
"Include comprehensive technical analysis with key indicators."
)
query_parts.append(
"Provide a clear risk assessment and investment recommendation."
)
query = " ".join(query_parts)
# Run the agent analysis
analysis_result = memecoin_agent.run(query)
# Return structured response
return {
"symbol": request.symbol.upper(),
"analysis": analysis_result,
"risk_level": "See analysis for details",
"recommendation": "See analysis for details",
"timestamp": "2025-10-29",
"disclaimer": "This analysis is for informational purposes only. Not financial advice.",
}
@app.post("/batch-analyze")
async def batch_analyze(symbols: list[str]) -> Dict[str, Any]:
"""
Analyze multiple memecoins in a batch (free endpoint for demo).
Args:
symbols: List of memecoin ticker symbols
Returns:
Dictionary with analysis for multiple coins
"""
results = {}
for symbol in symbols[:3]: # Limit to 3 for demo
query = (
f"Provide a brief overview of {symbol.upper()} memecoin."
)
analysis = memecoin_agent.run(query)
results[symbol.upper()] = {
"brief_analysis": analysis[:200] + "...",
"full_analysis_endpoint": "/analyze-memecoin",
}
return {
"batch_results": results,
"note": "For full detailed analysis, use /analyze-memecoin (requires payment)",
}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)