DeepCritical / docs /pending /03_modal_integration.md
VibecoderMcSwaggins's picture
docs: address CodeRabbit feedback for Phase 12 PR
f9cb2b7
|
raw
history blame
3.72 kB
# Modal Integration
## Priority: P1 - HIGH VALUE ($2,500 Modal Innovation Award)
---
## What Modal Is For
Modal provides serverless GPU/CPU compute. For DeepCritical:
### Current Use Case (Mario's Code)
- `src/tools/code_execution.py` - Run LLM-generated analysis code in sandboxes
- Scientific computing (pandas, scipy, numpy) in isolated containers
### Potential Additional Use Cases
| Use Case | Benefit | Complexity |
|----------|---------|------------|
| Code Execution Sandbox | Run statistical analysis safely | ✅ Already built |
| LLM Inference | Run local models (no API costs) | Medium |
| Batch Processing | Process many papers in parallel | Medium |
| Embedding Generation | GPU-accelerated embeddings | Low |
---
## Current State
Mario implemented `src/tools/code_execution.py`:
```python
# Already exists - ModalCodeExecutor
executor = get_code_executor()
result = executor.execute("""
import pandas as pd
import numpy as np
# LLM-generated statistical analysis
""")
```
### What's Missing
1. **Not wired into the main pipeline** - The executor exists but isn't used
2. **No Modal tokens configured** - Needs MODAL_TOKEN_ID/MODAL_TOKEN_SECRET
3. **No demo showing it works** - Judges need to see it
---
## Integration Plan
### Step 1: Wire Into Agent Pipeline
Add a `StatisticalAnalyzer` service that uses Modal:
```python
# src/services/statistical_analyzer.py
import asyncio
from src.tools.code_execution import get_code_executor
class StatisticalAnalyzer:
"""Run statistical analysis on evidence using Modal sandbox."""
async def analyze(self, evidence: list[Evidence], query: str) -> str:
# 1. LLM generates analysis code
code = await self._generate_analysis_code(evidence, query)
# 2. Execute in Modal sandbox (run sync executor in thread pool)
executor = get_code_executor()
loop = asyncio.get_event_loop()
result = await loop.run_in_executor(None, executor.execute, code)
# 3. Return results
return result["stdout"]
```
### Step 2: Add to Orchestrator
```python
# In orchestrator, after gathering evidence:
if settings.enable_modal_analysis:
analysis_agent = AnalysisAgent()
stats_results = await analysis_agent.analyze(evidence, query)
```
### Step 3: Create Demo
```python
# examples/modal_demo/run_analysis.py
"""Demo: Modal-powered statistical analysis of drug evidence."""
# Show:
# 1. Gather evidence from PubMed
# 2. Generate analysis code with LLM
# 3. Execute in Modal sandbox
# 4. Return statistical insights
```
---
## Modal Setup
### 1. Install Modal CLI
```bash
pip install modal
modal setup # Authenticates with Modal
```
### 2. Set Environment Variables
```bash
# In .env
MODAL_TOKEN_ID=your-token-id
MODAL_TOKEN_SECRET=your-token-secret
```
### 3. Deploy (Optional)
```bash
modal deploy src/tools/code_execution.py
```
---
## What to Show Judges
For the Modal Innovation Award ($2,500):
1. **Sandbox Isolation** - Code runs in container, not local
2. **Scientific Computing** - Real pandas/scipy analysis
3. **Safety** - Can't access local filesystem
4. **Speed** - Modal's fast cold starts
### Demo Script
```bash
# Run the Modal verification script
uv run python examples/modal_demo/verify_sandbox.py
```
This proves code runs in Modal, not locally.
---
## Files to Update
- [ ] Wire `code_execution.py` into pipeline
- [ ] Create `src/agents/analysis_agent.py`
- [ ] Update `examples/modal_demo/` with working demo
- [ ] Add Modal setup to README
- [ ] Test with real Modal account
---
## Cost Estimate
Modal pricing for our use case:
- CPU sandbox: ~$0.0001 per execution
- For demo/judging: < $1 total
- Free tier: 30 hours/month
Not a cost concern.