What This Document Covers:
- RESTful API endpoints for memecoin management
- Database query patterns and optimization
- Performance best practices and caching strategies
- Troubleshooting guide for common issues
- Implementation status and code references
Sections in This Document:
- API Integration Patterns
- Web UI Memecoin API
- Database Query API
- Data Models
- Performance Optimizations
- Best Practices
- Troubleshooting
- Implementation Status
Related Documentation:
- → VECTOR_DATABASE.md - 5-collection architecture, weighted search
- → DATABASE_STORAGE.md - File management, degradation system
- → ../DATABASE.md - Complete database reference
Context Tags: #api #web-ui #performance #best-practices #troubleshooting
LaunchAgencyBot exposes RESTful APIs for memecoin management and database operations through FastAPI. The API layer provides complete CRUD operations across the 3-tier storage workflow (Pending → Approved → Vector DB).
Key Implementation Files:
src/web_ui/api/memecoin_routes.py- Memecoin CRUD and curation APIssrc/web_ui/api/database_routes.py- Vector DB query and admin APIssrc/web_ui/api_models/memecoin.py- Pydantic response modelssrc/web_ui/main.py- FastAPI application entry point
Implementation: src/web_ui/api/memecoin_routes.py
Purpose: Get aggregated statistics across all storage tiers
| Aspect | Details |
|---|---|
| Endpoint | GET /api/memecoins/stats |
| Response | {pending: count, approved: count, database: count} |
| Use Case | Dashboard statistics, progress tracking |
| Performance | Cached globally, invalidated on mutations |
Purpose: Retrieve paginated pending memecoins for manual curation
| Parameter | Type | Default | Description |
|---|---|---|---|
page |
int | 1 | Page number |
limit |
int | 20 | Items per page |
Endpoint: GET /api/memecoins/pending?page=1&limit=20
Response: Returns {memecoins: [...], page, limit, total}. Each memecoin includes: token_name, ticker, token_address, description, tags (array), tags_categories (array), image_data (Base64 data URI), image_caption (null for pending), creation_date (ISO 8601), has_image (boolean).
Features:
- Includes Base64 image data for inline display
- No captions (pending memecoins haven't been processed)
- Sorted by creation date (newest first)
Purpose: Retrieve paginated approved memecoins ready for processing
Endpoint: GET /api/memecoins/approved?page=1&limit=20 (same pagination parameters as pending collection)
Response: Identical to pending collection structure - Returns {memecoins: [...], page, limit, total} with same memecoin fields.
Key Difference: Memecoins have passed manual curation and are ready for AI caption generation and vector DB insertion (no captions yet, added during processing).
Purpose: Atomically move memecoin from pending → approved
POST /api/memecoins/approve/{token_address}
Path Parameters:
token_address(string, required): Solana token mint address
Response:
{
"success": true,
"message": "Memecoin moved to APPROVED collection"
}Operation:
- Validates token exists in pending
- Moves JSON + JPG files atomically
- Invalidates stats cache
- Returns success confirmation
Error Cases:
- 404: Token not found in pending
- 500: File system operation failed
Purpose: Remove memecoins from any storage tier
DELETE /api/memecoins/pending/{token_address}
DELETE /api/memecoins/approved/{token_address}
DELETE /api/memecoins/database/{token_address}
Path Parameters:
token_address(string, required): Solana token mint address
Response:
{
"success": true,
"message": "Memecoin deleted from PENDING collection"
}Operations:
- Deletes JSON metadata file
- Deletes JPG image file
- Invalidates stats cache
- Removes from all 5 ChromaDB collections
- Deletes metadata file
- Deletes image file
- Invalidates stats cache
- Invalidates caption cache for token
Error Cases:
- 404: Token not found in specified collection
- 500: Partial deletion (rollback attempted)
Purpose: Move memecoin from vector DB → approved, stripping AI-generated captions
POST /api/memecoins/degrade/{token_address}
Path Parameters:
token_address(string, required): Solana token mint address
Response:
{
"success": true,
"message": "Memecoin deleted from database and moved to APPROVED collection"
}Operation:
- Loads metadata from vector DB
- Strips caption field (intentional data loss)
- Saves stripped metadata to approved directory
- Copies image file to approved directory
- Deletes from all 5 vector DB collections
- Invalidates stats cache
- Invalidates caption cache for token
Use Case: Fix incorrect tags/captions and reprocess through pipeline
Critical Warning:
⚠️ CAPTION DATA LOSS: Degradation intentionally removes AI-generated captions. They must be regenerated by reprocessing through the 7-stage insertion pipeline.
UI Requirement: Always display confirmation dialog with warning message: "This will remove AI-generated captions. Captions will need to be regenerated when re-inserting into the database." Include use case explanation and provide Cancel/Degrade action buttons.
Implementation: src/web_ui/api/database_routes.py
Purpose: Find memecoins matching specific tags
| Parameter | Type | Required | Description |
|---|---|---|---|
tags |
string | Yes | Comma-separated tags (AND logic) |
page |
int | No | Page number (default: 1) |
limit |
int | No | Items per page (default: 20) |
Endpoint: GET /api/database/search?tags=dog,space&page=1&limit=20
Response: Returns {memecoins: [...], page, limit, total}. Each memecoin includes standard fields plus image_caption object with 4 keys: entity (subject description), context (cultural/reference meaning), visual (style/aesthetics), emotions (tone/sentiment).
Behavior:
- Returns memecoins matching ALL specified tags (AND logic)
- Includes complete 4-part caption structure
- Caption loaded from metadata files (not ChromaDB)
- Cached per token address
Purpose: Browse vector database with optional text search
GET /api/database/memecoins?page=1&limit=20&search=doge
Query Parameters:
page(int, optional): Page number (default: 1)limit(int, optional): Items per page (default: 20)search(string, optional): Text search query
Response: Same structure as tag search
Features:
- Efficient pagination via ChromaDB offset/limit
- Optional text search across name, ticker, description
- No memory overhead for unused results
Purpose: Clear entire vector database (admin only)
POST /api/database/admin/clear
Request Body:
{
"confirm": "CLEAR_ALL_DATA"
}Response:
{
"success": true,
"message": "Vector database cleared successfully",
"deleted_count": 1203
}Operation:
- Validates confirmation token
- Deletes all entries from 5 ChromaDB collections
- Deletes all image files
- Deletes all metadata files
- Clears caption cache
- Clears stats cache
Security:
- Requires admin authentication (implementation-specific)
- Requires explicit confirmation string
- Irreversible operation
Location: src/web_ui/api_models/memecoin.py
Purpose: Unified Pydantic model for API responses (defined in src/web_ui/api_models/memecoin.py)
Field Details:
| Field | Type | Source | Notes |
|---|---|---|---|
token_name |
str | ChromaDB metadata | Token name |
ticker |
str | ChromaDB metadata | Token symbol |
token_address |
str | ChromaDB metadata | Solana mint address (UUID) |
description |
str | Metadata file | NOT in ChromaDB |
tags |
List[str] | ChromaDB metadata | Split from comma-separated string |
tags_categories |
List[str] | ChromaDB metadata | Split from comma-separated string |
image_data |
str | Image file | Base64 data URI from FileImageManager |
image_caption |
Optional[Dict] | Metadata file | NOT in ChromaDB, 4 keys: entity/context/visual/emotions |
creation_date |
str | ChromaDB metadata | ISO 8601 timestamp |
has_image |
bool | Computed | Always True in current implementation |
Health Check: Call vector_store.connection_health_check() to verify database status (returns: healthy flag, total_memecoins count, collections list).
Monitoring Schedule:
- Development: Every startup
- Production: Daily automated check
- Critical: After bulk operations
Cleanup: Use image_manager.cleanup_orphaned_files(valid_tokens) and metadata_manager.cleanup_orphaned_files(valid_tokens) to remove orphaned files. Valid tokens retrieved via vector_store.get_all_token_addresses().
Regular Backups: Full backup with tar -czf backup_$(date +%Y%m%d).tar.gz res/memecoins/rag_db/ or lightweight metadata-only with tar -czf metadata_backup_$(date +%Y%m%d).tar.gz res/memecoins/rag_db/metadata/
Restoration: Extract archive with tar -xzf backup_YYYYMMDD.tar.gz -C res/memecoins/. ChromaDB automatically rebuilds from persistent storage (no manual intervention needed).
- Problem: Slows down all queries, increases memory usage
- Solution: Store only small metadata, use file storage for large data
- Problem: Incomplete data corrupts vector DB, causes errors in RAG
- Solution: Validate at every stage, fail fast on invalid data
- Problem: Legacy docs show semicolons, but code uses commas
- Solution: Always use comma-separated tags:
"dog,cat,frog"
- Problem: UI shows stale data after deletions/degradations
- Solution: Invalidate caption cache and stats cache on all mutations
Key Metrics to Track:
- Database Size: Call
vector_store.get_stats()→ returns total_examples, unique_tags, unique_categories - Storage Usage: Call
image_manager.get_stats()→ returns total_images, total_size_mb - Query Performance: Time
vector_store.query_similar_weighted(embedding, n_results=10)for latency benchmarking
Performance Targets:
| Metric | Target | Notes |
|---|---|---|
| Query latency | < 500ms | Weighted search, 10 results |
| Insertion throughput | > 5 memecoins/sec | Full 7-stage pipeline |
| Storage efficiency | < 200KB per memecoin | Image + metadata combined |
| Memory usage | < 500MB | For 10,000 memecoins |
Symptoms:
- API returns 404 for valid token addresses
- UI shows broken images
- Integrity validation reports missing files
Solution:
- Run integrity validation script
- Check file permissions on storage directories
- Look for failed atomic operations (leftover .tmp files)
- Check application logs for error messages
- Verify disk space availability
Symptoms:
- API responses take > 1 second
- UI feels sluggish
- High CPU usage
Solution:
- Check database size (too many memecoins?)
- Verify ChromaDB not storing large metadata
- Use pagination for large result sets
- Consider adding metadata filtering to reduce search space
- Profile query execution
Symptoms:
- Degraded memecoin missing captions
- User expects captions to persist
Solution:
- This is intentional! Captions are stripped during degradation
- Check approved collection files (no caption field in metadata)
- Reprocess through 7-stage pipeline to regenerate captions
Symptoms:
- Storage growing faster than memecoin count
- Integrity validation reports many orphaned files
- Disk space issues
Solution:
- Run cleanup operations regularly
- Check for failed rollbacks (partial deletions)
- Implement scheduled cleanup job
- Monitor storage growth
Symptoms:
- UI shows old stats after operations
- Deleted memecoins still appear
- Caption changes not reflected
Solution:
- Verify cache invalidation logic in API routes
- Clear caches manually if needed
- Check for multiple cache instances (if using multi-process)
- Consider using Redis for distributed caching
✅ Architecture
- 5-Collection Multi-Embedding Architecture
- Weighted Multi-Embedding Search (4/3/2/1)
- Split Caption System (4-part captions)
- 3-Tier Storage Workflow
- Degradation System
✅ Storage
- Unified Metadata Storage
- Atomic File Operations
- FileImageManager and TokenMetadataFileManager
✅ Processing
- 7-Stage Processing Pipeline
- Tag Classification System (356 tags)
- Deduplication checking
- Early validation
✅ API
- RESTful endpoints for all CRUD operations
- Degradation endpoint
- Tag-based search
- Paginated browsing
- Admin operations
✅ Optimization
- Caption caching (in-memory)
- Stats caching (global)
- Native ChromaDB pagination
- Database integrity tools
| Component | File Path | Status |
|---|---|---|
| Vector Store | src/vector_store/memecoin_store.py |
✅ 5 collections, weighted search |
| Image Manager | src/vector_store/file_managers/image_manager.py |
✅ Atomic operations |
| Metadata Manager | src/vector_store/file_managers/metadata_manager.py |
✅ Validation, atomic writes |
| Storage Orchestrator | src/orchestrators/meme_storage/meme_storage.py |
✅ Degradation system |
| Insertion Processor | src/domain/processor/rag_memecoin_insertion_processor.py |
✅ 7-stage pipeline |
| Web UI | src/web_ui/main.py |
✅ FastAPI application |
| Memecoin API | src/web_ui/api/memecoin_routes.py |
✅ CRUD + degradation |
| Database API | src/web_ui/api/database_routes.py |
✅ Query + admin |
| API Models | src/web_ui/api_models/memecoin.py |
✅ Pydantic schemas |
src/vector_store/memecoin_store.py- MemecoinVectorStore (5 collections, weighted search)src/vector_store/file_managers/image_manager.py- FileImageManager (atomic JPG operations)src/vector_store/file_managers/metadata_manager.py- TokenMetadataFileManager (JSON metadata)src/orchestrators/meme_storage/meme_storage.py- MemeStorageOrchestrator (degradation system)src/constants.py- Storage paths and configuration constants
src/workflows/rag_memecoin_insertion_workflow.py- 7-stage processing pipelinesrc/workflows/rag_memecoin_generation_workflow.py- RAG-enhanced generation
src/web_ui/main.py- FastAPI application entry pointsrc/web_ui/api/memecoin_routes.py- Memecoin CRUD and degradation APIssrc/web_ui/api/database_routes.py- Vector DB query and admin APIssrc/web_ui/api_models/memecoin.py- MemecoinResponse data model
Document Status: Complete Last Updated: October 15, 2025 Architecture Version: 5-Collection Multi-Embedding with Degradation System