Spaces:
Build error
A newer version of the Gradio SDK is available: 6.20.0
title: BeatDebate
emoji: π
colorFrom: yellow
colorTo: gray
sdk: gradio
sdk_version: 5.32.1
app_file: app.py
pinned: false
license: mit
python_version: 3.11.4
short_description: Multi-Agent System for Music Recommendation
π΅ BeatDebate
Multi-Agent Music Recommendation System for AgentX Competition
π Try BeatDebate Live on HuggingFace Spaces | π AgentX Competition | π GitHub Repository
BeatDebate is a sophisticated music recommendation system that uses 4 specialized AI agents to discover under-the-radar tracks through intelligent debate and strategic planning. Built for the AgentX competition, it demonstrates advanced agentic planning behavior in a real-world application.
π― Key Features
- Strategic Planning:
PlannerAgentanalyzes queries and orchestrates a multi-step recommendation strategy using Gemini. - Multi-Agent System: Four specialized agents (
Planner,GenreMood,Discovery,Judge) collaborate within a LangGraph workflow. - Intent-Aware Recommendations: The system adapts its scoring and diversity logic based on the user's detected intent (e.g., artist similarity, pure discovery, contextual needs).
- Underground Discovery:
DiscoveryAgentfocuses on indie, lesser-known tracks, and serendipitous finds. - Explainable AI:
JudgeAgentprovides transparent reasoning for each recommendation, linking back to the planning strategy. - Conversational Interface: A Gradio-based UI allows for natural language interaction and displays rich track information.
- Contextual Conversations:
SmartContextManagerandContextAwareIntentAnalyzerenable multi-turn dialogues. - Agent Reasoning Display: See the complete multi-agent planning and decision-making process in real-time.
π Live Demo
π Try It Now: BeatDebate on HuggingFace Spaces
Experience the power of multi-agent AI planning for music discovery! The live demo includes:
- Agent Reasoning Viewer: Watch how the 4 agents collaborate and make decisions
- Example Queries: Try different types of music discovery intents
- Real-time Planning: See strategic planning in action for the AgentX competition
ποΈ Architecture
The core workflow follows this sequence, orchestrated by LangGraph:
User Query β PlannerAgent (Strategy & Intent Analysis) β [GenreMoodAgent || DiscoveryAgent] (Candidate Generation) β JudgeAgent (Ranking & Explanation) β Formatted Response
Agent Roles:
- π§ PlannerAgent:
- Analyzes user queries using its
QueryUnderstandingEngine(powered by Gemini and pattern matching). - Extracts entities, detects intent (including hybrid intents and context overrides).
- Generates a comprehensive
planning_strategydict detailing task analysis, advocate agent coordination parameters, and theevaluation_frameworkfor the Judge.
- Analyzes user queries using its
- πΈ GenreMoodAgent:
- Executes the planner's strategy for genre and mood-based discovery.
- Uses
UnifiedCandidateGeneratorandComprehensiveQualityScorer(fromsrc/agents/components/) to fetch and score tracks. - Employs
MoodLogicandTagGeneratorfor nuanced style matching.
- π DiscoveryAgent:
- Focuses on similarity, novelty, and underground tracks as per the planner's strategy.
- Also uses
UnifiedCandidateGeneratorandComprehensiveQualityScorer. - Internal components like
SimilarityExplorerandUndergroundDetectoraid in finding unique recommendations.
- βοΈ JudgeAgent:
- Evaluates candidates from both advocate agents against the planner's
evaluation_framework. - Applies intent-aware
RankingLogicto score and select the final tracks. - Uses
ConversationalExplainer(potentially with LLM) to generate explanations.
- Evaluates candidates from both advocate agents against the planner's
π Quick Start
Prerequisites
- Python 3.11+
- API keys for Gemini, Last.fm, and Spotify (see
.env.example)
Installation
Clone and setup environment
git clone https://github.com/SulmanK/BeatDebate.git cd BeatDebateInstall
uvdependency managercurl -LsSf https://astral.sh/uv/install.sh | shSetup project and install dependencies
uv venv source .venv/bin/activate # On Windows: .venv\Scripts\activate uv sync --devConfigure environment variables
cp env.example .env # Edit .env with your API keys: # GEMINI_API_KEY=your_gemini_api_key # LASTFM_API_KEY=your_lastfm_api_key # SPOTIFY_CLIENT_ID=your_spotify_client_id # SPOTIFY_CLIENT_SECRET=your_spotify_client_secret # Optional: LASTFM_SHARED_SECRETRun the application
uv run python -m src.mainThe Gradio interface will typically be available at
http://localhost:7860and the FastAPI backend athttp://localhost:8000.
π§ͺ Development
Data Validation
(Scripts to test API responses and data quality)
uv run python scripts/validate_lastfm.py
# uv run python scripts/validate_spotify.py # (If you create this)
Testing
# Run all tests
uv run pytest
# Run with coverage report
uv run pytest --cov=src --cov-report=html
# Run a specific test file
uv run pytest tests/agents/test_planner_agent.py
Code Quality
# Format code
uv run black src/ tests/
uv run isort src/ tests/
# Lint code
uv run ruff check src/ tests/
# Type check
uv run mypy src/
Project Structure
The project is organized into distinct layers and components:
beatDebate/
βββ Design/ # Design documents and refactoring notes
βββ scripts/ # Utility and validation scripts (e.g., validate_lastfm.py)
βββ src/ # Main source code
β βββ agents/ # Core AI agent implementations
β β βββ base_agent.py # Abstract base class for all agents
β β βββ components/ # Shared utilities for agents
β β β βββ __init__.py
β β β βββ candidate_processor.py
β β β βββ entity_extraction_utils.py
β β β βββ llm_utils.py
β β β βββ query_analysis_utils.py
β β β βββ unified_candidate_generator.py
β β β βββ scoring/
β β β βββ generation_strategies/
β β βββ discovery/ # DiscoveryAgent and its specific components
β β β βββ agent.py
β β β βββ discovery_config.py
β β β βββ discovery_diversity.py
β β β βββ discovery_filter.py
β β β βββ discovery_scorer.py
β β β βββ similarity_explorer.py
β β β βββ underground_detector.py
β β βββ genre_mood/ # GenreMoodAgent and its specific components
β β β βββ agent.py
β β β βββ mood_logic.py
β β β βββ tag_generator.py
β β β βββ components/
β β βββ judge/ # JudgeAgent and its specific components
β β β βββ agent.py
β β β βββ explainer.py
β β β βββ ranking_logic.py
β β β βββ components/
β β βββ planner/ # PlannerAgent and its specific components
β β βββ agent.py
β β βββ context_analyzer.py
β β βββ entity_processor.py
β β βββ entity_recognizer.py
β β βββ query_analyzer.py
β β βββ query_understanding_engine.py
β β βββ strategy_planner.py
β βββ api/ # FastAPI backend and external API clients
β β βββ backend.py
β β βββ base_client.py
β β βββ client_factory.py
β β βββ lastfm_client.py
β β βββ logging_middleware.py
β β βββ rate_limiter.py
β β βββ spotify_client.py
β βββ models/ # Pydantic data models and schemas
β β βββ agent_models.py
β β βββ metadata_models.py
β β βββ recommendation_models.py
β βββ services/ # Business logic and service orchestration
β β βββ api_service.py
β β βββ cache_manager.py
β β βββ intent_orchestration_service.py
β β βββ llm_fallback_service.py
β β βββ metadata_service.py
β β βββ recommendation_service.py
β β βββ session_manager_service.py
β β βββ components/ # Modular service components
β βββ ui/ # Gradio user interface components
β β βββ chat_interface.py
β β βββ planning_display.py
β β βββ response_formatter.py
β βββ utils/ # Shared utility functions (e.g., logging)
β β βββ logging_config.py
β βββ main.py # Application entry point
βββ tests/ # Unit and integration tests
βββ .env.example
βββ README.md
...
## π΅ Usage Examples
### Basic Music Discovery
You: "I need focus music for coding"
π§ PlannerAgent: "Analyzing coding music requirements, setting intent to 'contextual' with activity 'coding'..." πΈ GenreMoodAgent: "Fetching instrumental, ambient, post-rock based on plan..." π DiscoveryAgent: "Searching for lesser-known artists suitable for study/focus..." βοΈ JudgeAgent: "Evaluating candidates. Prioritizing 'concentration_friendliness_score' and quality. Selecting optimal tracks..."
π΅ Results: 3 tracks like "Ambient Focus" by Concentration Master, with explanations referencing coding and focus.
### Artist Similarity with Contextual Refinement
You: "Music like Mk.gee" π€ BeatDebate: (Recommends some Mk.gee-like tracks) You: "More Mk.gee tracks, but make them more electronic"
π§ PlannerAgent: "Context override detected: 'artist_style_refinement' for Mk.gee with 'electronic' style. Updating coordination strategy." πΈ GenreMoodAgent: "Focusing on Mk.gee's discography, filtering for electronic elements and related tags..." π DiscoveryAgent: "Looking for Mk.gee tracks or very close collaborators with strong electronic tags..." βοΈ JudgeAgent: "Prioritizing Mk.gee tracks matching 'electronic'. Evaluating based on similarity to Mk.gee's core style AND electronic fit..."
π΅ Results: Mk.gee tracks that lean electronic, or similar artists known for that specific fusion.
## π Deployment
### HuggingFace Spaces (Live Demo)
**π [Access the live demo here](https://huggingface.co/spaces/SulmanK/BeatDebate)**
BeatDebate is deployed as a public HuggingFace Space, showcasing advanced agentic planning behavior for the AgentX competition. The deployment features:
- **Public Access**: Try the system without any setup or API keys
- **Agent Reasoning Display**: See how the 4 agents collaborate through strategic planning
- **Competition Integration**: Direct links to AgentX competition and project documentation
- **Real-time Interaction**: Experience multi-agent music discovery in your browser
## π HuggingFace Spaces Deployment Checklist
Ready to deploy BeatDebate to HuggingFace Spaces? Follow this step-by-step guide:
### Step 1: Create HuggingFace Space
1. **Go to [HuggingFace Spaces](https://huggingface.co/new-space)**
2. **Configure Space Settings**:
- **Space Name**: `beatdebate` (or your preferred name)
- **License**: `mit`
- **SDK**: `gradio`
- **Python Version**: `3.11`
- **Visibility**: `public`
3. **Set Space Title**:
BeatDebate: A Multi-Agent System with Strategic Planning for Explainable Music Recommendation
4. **Add Description**:
Multi-agent AI system showcasing strategic planning for music discovery. Features 4 specialized agents collaborating through LangGraph workflow. Built for AgentX competition demonstrating advanced agentic behavior.
### Step 2: Upload Core Files
Upload these files to your HuggingFace Space:
**Required Files**:
- β
`app.py` - HuggingFace Spaces entry point
- β
`requirements.txt` - Generated dependencies
- β
`README.md` - Updated with Spaces info
- β
`pyproject.toml` - Project configuration
**Required Directories**:
- β
`src/` - Complete source code directory
- β
`Design/` - Design documents (optional but helpful)
- β
`.env.example` - Environment template
**Optional Files** (recommended):
- β
`logging.conf` - Logging configuration
- β
`.gitignore` - Git ignore patterns
### Step 3: Configure API Key Secrets
In your Space settings, add these secrets:
**Required Secrets**:
- π `GEMINI_API_KEY` - Your Google Gemini API key
- π `LASTFM_API_KEY` - Your Last.fm API key
- π `SPOTIFY_CLIENT_ID` - Your Spotify Client ID
- π `SPOTIFY_CLIENT_SECRET` - Your Spotify Client Secret
**Optional Secrets**:
- π `LASTFM_SHARED_SECRET` - Last.fm shared secret (for advanced features)
**How to Add Secrets**:
1. Go to your Space settings
2. Click "Repository secrets"
3. Add each secret with the exact name listed above
4. Paste your API key values (never commit these to code!)
### Step 4: Update Space URL in README
Replace `YOUR_USERNAME/beatdebate` with your actual HuggingFace Space URL:
```bash
# Find and replace in README.md:
YOUR_USERNAME/beatdebate β your-hf-username/your-space-name
Step 5: Verify Deployment
Once uploaded, your Space should automatically build and deploy:
Check These Items:
- β Space builds without errors (check logs)
- β All 4 agents initialize properly
- β API connections work (Gemini, Last.fm, Spotify)
- β Chat interface loads correctly
- β Agent reasoning display shows planning process
- β Example queries work as expected
Step 6: Competition Integration
Ensure your Space showcases AgentX competition requirements:
Agentic Planning Features:
- β Strategic Planning: PlannerAgent creates comprehensive strategies
- β Multi-Agent Coordination: 4 agents collaborate based on plans
- β Reasoning Transparency: Complete reasoning logs visible
- β Real-World Application: Functional music discovery system
Competition Links:
- β AgentX Competition link in header
- β GitHub Repository link in header
- β Agent reasoning viewer showcases planning behavior
π― Quick API Key Setup Guide
Get Gemini API Key (Free):
- Go to Google AI Studio
- Click "Get API Key" β "Create API Key"
- Copy the key and add as
GEMINI_API_KEYsecret
Get Last.fm API Key (Free):
- Go to Last.fm API
- Create an account and get your API key
- Add as
LASTFM_API_KEYsecret
Get Spotify API Keys (Free):
- Go to Spotify Developer Dashboard
- Create a new app
- Copy Client ID and Client Secret
- Add as
SPOTIFY_CLIENT_IDandSPOTIFY_CLIENT_SECRETsecrets
π¨ Troubleshooting Common Issues
Build Fails:
- Check requirements.txt for dependency conflicts
- Verify Python 3.11 is selected
- Check logs for specific error messages
Import Errors:
- Ensure all source files are uploaded
- Check that
src/directory structure is maintained - Verify
app.pyimports work correctly
API Connection Fails:
- Double-check all API key secrets are set correctly
- Verify secret names match exactly (case-sensitive)
- Test API keys work outside of Spaces
Agents Don't Initialize:
- Check Gemini API key is valid and has quota
- Verify environment variables are accessible
- Review startup logs for specific agent errors
Local Development
For local development and testing:
# Start the backend and frontend (FastAPI runs on port 8000, Gradio on 7860 by default)
uv run python -m src.main
Alternatively, for hot-reloading of the FastAPI backend during development:
# Terminal 1: Start FastAPI backend
uv run uvicorn src.api.backend:app --host 127.0.0.1 --port 8000 --reload
# Terminal 2: Start Gradio UI (pointing to the backend)
# (Ensure your chat_interface.py is configured to use http://127.0.0.1:8000 if run separately)
# Or simply run the main `uv run python -m src.main` which handles both.
π AgentX Competition
BeatDebate demonstrates sophisticated agentic planning behavior for the AgentX competition:
- Strategic Planning:
PlannerAgentcreates comprehensive, LLM-driven recommendation strategies. - Agent Coordination: Structured communication via
MusicRecommenderStateand targeted strategies. - Reasoning Transparency:
reasoning_loginMusicRecommenderStateand explanations fromJudgeAgent. - Technical Innovation: Novel application of multi-agent planning to music recommendation, including intent-aware logic and context management.
- Live Demonstration: Public HuggingFace Space showcasing real-time agent collaboration.
Competition Features
- Agent Reasoning Viewer: Watch the planning process unfold in real-time
- Multi-Agent Coordination: See how agents collaborate based on strategic plans
- Explainable AI: Transparent decision-making with full reasoning logs
- Real-World Application: Functional music discovery with immediate practical value
π Technical Details
Core Technologies
- Backend: FastAPI, Python 3.11
- Agent Orchestration: LangGraph
- LLM: Google Gemini (via
langchain-google-genai) - Data Models: Pydantic
- Frontend: Gradio
- Dependency Management:
uv - Logging:
structlog
Rate Limiting Strategy
- Implemented via
UnifiedRateLimiter(src/api/rate_limiter.py) and configured per service (Gemini, Last.fm, Spotify) inAPIClientFactory. - Gemini: Default 15 calls/minute (configurable, e.g., 8-12 for safety).
- Last.fm: Default 3 calls/second.
- Spotify: Default 50 calls/hour.
Caching & Performance
CacheManager(src/services/cache_manager.py): Usesdiskcachefor file-based caching of API responses and track metadata with configurable TTLs.- Async Processing: FastAPI and
aiohttp(inBaseAPIClient) ensure non-blocking I/O for external API calls. LangGraph orchestrates agents asynchronously. - Request optimization and careful LLM use aim to keep costs low and performance acceptable.
Data Sources
- Last.fm API: Primary source for track/artist metadata, tags, and similarity information. Accessed via
LastFmClient. - Spotify Web API: Secondary source for audio previews and potentially audio features (though full audio feature integration for scoring is a future enhancement). Accessed via
SpotifyClient. - Text Embeddings (Future Enhancement): Design allows for future integration of sentence transformers for semantic search (e.g., with ChromaDB), but current MVP focuses on API-driven metadata and LLM reasoning.
π€ Contributing
- Fork the repository.
- Create feature branch:
git checkout -b feature/your-new-feature - Install dependencies:
uv sync --dev - Make your changes.
- Follow code standards: Run
uv run black .,uv run isort .,uv run ruff check . - Add tests: Ensure new functionality is covered by tests.
- Run tests:
uv run pytest - Update docs: If applicable, update README and relevant design documents.
- Create Pull Request: Submit for review.
π License
MIT License - see LICENSE file for details.
π Links
- Primary Design Document:
Design/Plans/beatdebate-design-doc.md - AgentX Course: LLM Agents Learning @ Stanford
- HuggingFace Space: BeatDebate Live Demo