Spaces:
Sleeping
Sleeping
A newer version of the Gradio SDK is available: 6.13.0
EcoMCP Architecture Guide
Project Structure
ecomcp/
βββ src/
β βββ __init__.py
β βββ config.py # Centralized configuration
β βββ constants.py # Constants and enums
β βββ errors.py # Custom exceptions
β βββ logger.py # Logging configuration
β β
β βββ server/ # MCP Server
β β βββ __init__.py
β β βββ mcp_server.py # JSON-RPC MCP server
β β
β βββ ui/ # Gradio UI Layer
β β βββ __init__.py
β β βββ app.py # Main Gradio application
β β βββ components.py # UI handlers & callbacks
β β βββ formatters.py # HTML/Markdown formatters
β β
β βββ clients/ # MCP Client
β β βββ __init__.py
β β βββ mcp_client.py # JSON-RPC client
β β
β βββ core/ # Business Logic
β βββ __init__.py
β βββ knowledge_base.py # LlamaIndex KB
β βββ llama_integration.py # KB integration
β βββ document_loader.py # Document handling
β βββ vector_search.py # Semantic search
β βββ response_models.py # Response schemas
β βββ validators.py # Input validation
β βββ examples.py # Usage examples
β βββ async_knowledge_base.py # Async KB
β
βββ app/ # Optional app deployment
βββ tests/ # Test suite
βββ docs/ # Documentation
βββ scripts/ # Utility scripts
βββ config.yaml # YAML configuration
βββ requirements.txt # Python dependencies
βββ .env.example # Environment template
βββ Dockerfile # Container image
βββ Makefile # Build commands
βββ README.md # Project readme
Module Responsibilities
Core Application
src/config.py - Configuration Management
- Centralized config with environment variable support
- Pydantic validation for all settings
- Singleton pattern for global access
- Easy override for testing
src/constants.py - Application Constants
- Enums for categories, styles, search types
- Tool names and MCP constants
- Validation constraints
- Error codes
src/errors.py - Error Handling
- Custom exception hierarchy
- Structured error responses
- Error formatting utilities
- Detailed error tracking
src/logger.py - Logging
- Colored console output
- File logging support
- Module-level loggers
- Centralized configuration
Server Layer
src/server/mcp_server.py - MCP Server Implementation
- JSON-RPC 2.0 protocol handler
- Tool registration and dispatching
- Input validation integration
- OpenAI API integration
- Knowledge base integration
src/clients/mcp_client.py - MCP Client
- Subprocess-based server communication
- JSON-RPC message handling
- Async request/response handling
- Automatic server startup
UI Layer
src/ui/app.py - Gradio Application
- Tab-based interface layout
- Responsive design with CSS
- Example inputs and outputs
- Knowledge search integration
- About page with feature showcase
src/ui/components.py - UI Handlers
- Tool call handlers
- Sync/async bridge for Gradio
- Input validation and feedback
- Response formatting
- Error handling and display
src/ui/formatters.py - Output Formatting
- HTML sentiment charts
- Pricing tier visualizations
- Markdown formatting helpers
- Responsive design utilities
Core Business Logic
src/core/knowledge_base.py - Knowledge Base Core
- LlamaIndex integration
- Document indexing pipeline
- Vector store management
- Retrieval and query engines
- Persistence layer
src/core/llama_integration.py - High-Level KB API
- Simplified knowledge base interface
- Document loading orchestration
- Search and query wrappers
- Global instance management
src/core/document_loader.py - Document Processing
- Multi-format support (MD, TXT, JSON, PDF)
- Product document creation
- URL document loading
- Metadata extraction
src/core/vector_search.py - Search Engine
- Semantic similarity search
- Hierarchical search across types
- Weighted result combination
- Contextual filtering
- Recommendation engine
src/core/response_models.py - API Schemas
- Pydantic response models
- Consistent API contracts
- Type safety and validation
- Helper functions
src/core/validators.py - Input Validation
- Tool-specific validators
- Pydantic-based validation
- Constraint enforcement
- Detailed error messages
Data Flow
User Request β Response
UI (Gradio)
β
components.py (Handler)
β
mcp_client.py (JSON-RPC)
β
mcp_server.py (Server)
ββ validators.py (Validation)
ββ OpenAI API / Knowledge Base (Processing)
ββ response_models.py (Format)
β
mcp_client.py (Response)
β
formatters.py (HTML/Markdown)
β
UI (Gradio Display)
Tool Execution Flow
Tool Request
β
Input Validation (validators.py)
β (if valid)
Tool Dispatch (mcp_server.call_tool)
β
Tool Handler (_analyze_product, etc.)
ββ Prepare prompt/args
ββ Call OpenAI API or KB
ββ Format response
ββ Return result
β
Success Response
Key Design Patterns
1. Centralized Configuration
- All settings in
config.py - Environment variable driven
- Easy for deployment and testing
- Singleton access pattern
2. Input Validation
- Pydantic-based validators
- Tool-specific validation rules
- Early rejection of invalid input
- Detailed error feedback
3. Error Handling
- Custom exception hierarchy
- Structured error responses
- Consistent error format
- Detailed logging
4. Async/Sync Bridge
- Async server and client
- Sync Gradio UI
- Helper for bridging contexts
- Non-blocking I/O throughout
5. Modular Organization
- Clear separation of concerns
- Single responsibility principle
- Easy to test and maintain
- Reusable components
Integration Points
OpenAI API
- Configured via environment variable
- Used by all analysis tools
- JSON streaming for responses
- Error handling with retries
LlamaIndex Knowledge Base
- Optional integration (graceful degradation)
- Supports multiple vector stores (in-memory, Pinecone)
- Document ingestion pipeline
- Semantic search and Q&A
Gradio UI
- Web-based interface
- Real-time updates
- Example inputs
- Responsive design
Environment Setup
Required Variables
OPENAI_API_KEY # OpenAI API key
Optional Variables
PINECONE_API_KEY # For Pinecone vector store
USE_PINECONE # Enable Pinecone backend
OPENAI_MODEL # Model name (default: gpt-5)
LOG_LEVEL # Logging level (default: INFO)
Configuration Override
Via .env file
OPENAI_API_KEY=sk-...
OPENAI_MODEL=gpt-5
Via Environment
export OPENAI_API_KEY=sk-...
python run_ui.py
Via Code
from src.config import AppConfig, initialize_config
config = AppConfig(
openai_api_key="sk-...",
openai_model="gpt-5"
)
initialize_config(config)
Testing Strategy
Unit Tests
- Validators: test constraint enforcement
- Formatters: test HTML/Markdown output
- Components: test handler logic
Integration Tests
- Server: test tool execution
- Client: test request/response
- UI: test callbacks and formatting
End-to-End Tests
- Full request flow
- Knowledge base integration
- Error handling
Deployment Considerations
Docker
- See
Dockerfilefor containerization - Environment variables passed at runtime
- Port mapping for Gradio (7860)
Scaling
- Stateless design allows horizontal scaling
- Knowledge base can use Pinecone for scale
- OpenAI API for distributed inference
Monitoring
- Structured logging for all operations
- Error tracking and logging
- Performance metrics via logging timestamps
Future Enhancements
- Database Integration - Store results and history
- Authentication - User and API key management
- Rate Limiting - Handle API quotas
- Caching - Cache responses for repeated queries
- Webhooks - Async processing callbacks
- Batch Processing - Handle multiple requests
- Advanced Analytics - Track usage and metrics