From Research Papers to Production-Ready Datasets in Minutes
An end-to-end AI-powered platform revolutionizing ML research workflows by seamlessly connecting paper analysis, dataset generation, and experimental prototyping.
DatasetSmith solves a critical problem in ML research: the weeks-long gap between reading a paper and having a working dataset to reproduce its results.
The Platform:
- Discovers and analyzes ML papers using Tavily's advanced search
- Extracts dataset requirements using LLM-powered analysis
- Generates production-ready datasets with license-clean images
- Orchestrates workflows through LastMile AI's MCP framework
- Stores and searches everything using MongoDB Atlas with vector search
Result: Researchers go from paper discovery to working prototype in under 30 minutes.
- Addresses reproducibility crisis in ML research
- Daily workflow integration via ChatGPT/Claude/Cursor
- Production-ready with Dagster orchestration
- 10x faster research-to-prototype workflow
- Vector Search for semantic discovery
- Complex aggregation pipelines
- Change Streams for real-time updates
- Flexible schema for multi-modal data
- Advanced search parameters
- Multi-modal search (papers + images)
- Domain-specific optimization
- License-clean content filtering
- End-to-end MCP architecture
- Production deployment via mcp-agent
- Daily workflow integration
- Multiple MCP tools exposed
- Python 3.11+
- Node.js 18+
- MongoDB Atlas account
- API Keys: Tavily, OpenAI, VoyageAI
git clone https://github.com/exploring-curiosity/OpenBenchPublisher.git
cd OpenBenchPublisher
# Install uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# Setup environment
uv venv
source .venv/bin/activate
uv sync
# Install frontendcd web-ui-next && npm install &&cd ..
# Install Paper Analysercd obp-paper-analyser && pip install -r requirements.txt &&cd ..
# Configure
cp .env.example .env
# Edit .env with your API keys./start.shAccess at:
- Paper Analyser: http://localhost:8001
- Backend API: http://localhost:8000
- Dagster UI: http://localhost:3000
- Frontend: http://localhost:3001
./stop.shCollections:
papers- Research papers with embeddingsclaims- Extracted claims with embeddingsassets- Images with CLIP embeddingsdatasets- Dataset manifestsruns- Pipeline execution history
Vector Indexes:
// Papers collection{"fields": [{"type": "vector","path": "embed","numDimensions": 384,"similarity": "cosine"}]}Semantic Search:
pipeline= [
{
"$vectorSearch": {
"index": "paper_vector_index",
"path": "embed",
"queryVector": query_embed,
"numCandidates": 100,
"limit": 10
}
},
{
"$project": {
"title": 1,
"score": {"$meta": "vectorSearchScore"}
}
}
]Dataset Statistics:
pipeline= [
{"$match": {"dataset_id": ObjectId(dataset_id)}},
{
"$facet": {
"class_distribution": [
{"$group": {
"_id": "$class",
"count": {"$sum": 1}
}}
],
"size_stats": [
{"$group": {
"_id": None,
"avg_width": {"$avg": "$width"},
"avg_height": {"$avg": "$height"}
}}
]
}
}
]Real-Time Progress:
pipeline= [
{
"$match": {
"operationType": {"$in": ["insert", "update"]},
"fullDocument.request_id": request_id
}
}
]
withcollection.watch(pipeline) asstream:
forchangeinstream:
notify_frontend(change)Full Parameter Usage:
response=client.search(
query="depth estimation transformers",
search_depth="advanced",
topic="general",
time_range="week",
max_results=20,
include_domains=["arxiv.org", "openaccess.thecvf.com"],
exclude_domains=["medium.com"],
include_raw_content=True,
include_images=False,
include_answer=True
)CC-BY Filtering:
response=client.search(
query=f"{class_name} high quality photo",
search_depth="advanced",
max_results=20,
include_domains=[
"commons.wikimedia.org",
"unsplash.com",
"pexels.com"
],
include_images=True,
include_image_descriptions=True
)Comprehensive Coverage:
- Primary search with exact class name
- Synonym search for diversity
- Context-specific searches
- Deduplication via MongoDB vector search
- Quality selection based on resolution
build_dataset_slice:
@app.async_tool(name="build_dataset_slice")asyncdefbuild_dataset_slice(
classes: List[str],
total: int=100,
min_size: int=256,
license_filter: str="CC-BY",
app_ctx: Optional[AppContext] =None
) ->str:
"""Build license-clean dataset using Tavily + MongoDB"""# Implementationlist_datasets:
@app.tool(name="list_datasets")asyncdeflist_datasets(app_ctx: Optional[AppContext] =None) ->str:
"""List all datasets from MongoDB Atlas"""# Implementationexport_dataset:
@app.tool(name="export_dataset")asyncdefexport_dataset_tool(
dataset_id: str,
app_ctx: Optional[AppContext] =None
) ->str:
"""Export dataset as organized ZIP"""# ImplementationTo LastMile Cloud:
uvx mcp-agent deployLocal Development:
uv run mcp_stdio_server.pyChatGPT:
{
"mcpServers": {
"datasetsmith": {
"type": "lastmile",
"appId": "app_xxx",
"apiKey": "your_key"
}
}
}Claude Desktop:
{
"mcpServers": {
"datasetsmith": {
"command": "uv",
"args": ["run", "mcp_stdio_server.py"],
"cwd": "/path/to/DatasetSmith"
}
}
}Backend:
- Python 3.11+ with async/await
- FastAPI for REST APIs
- Dagster for orchestration
- uv for package management
Frontend:
- Next.js 15 (App Router)
- React 19 + TypeScript
- TailwindCSS
- Lucide Icons
AI & Search:
- Tavily API (paper + image search)
- OpenAI GPT-4o-mini (analysis)
- VoyageAI (embeddings)
- LastMile AI (MCP deployment)
Data & Storage:
- MongoDB Atlas (database + vector search)
- Pillow + ImageHash (image processing)
- sentence-transformers (text embeddings)
Morning: Check new papers via ChatGPT
"Find yesterday's cs.CV papers on depth estimation"Analysis: Extract dataset requirements
"Analyze the top paper and tell me what dataset I need"Generation: Build dataset
"Build that dataset with 100 images"Prototyping: Download and experiment
"Export the dataset as ZIP"
Time Saved: 2-3 weeks reduced to 30 minutes
- Health check endpoints
- Comprehensive logging
- Error handling with retries
- MongoDB connection pooling
- Async/await throughout
- Type hints everywhere
- Dagster monitoring
- Real-time progress tracking
POST /tools/obp.paper.search
POST /tools/obp.paper.analyze
POST /tools/obp.claims.extract
GET /healthPOST /api/chats
POST /api/chat
GET /api/download-progress
POST /api/start-full-run
GET /download/{id}
DELETE /api/datasets/{id}
GET /healthMIT License - see LICENSE file for details
- GitHub: @exploring-curiosity
- Project: OpenBenchPublisher
DatasetSmith Platform - Making ML research reproducible, accessible, and lightning-fast.