integrate-playground
Integrate Playground with VRP-Toolkit
Token-efficient workflow for connecting Streamlit playground UI to vrp-toolkit backend APIs.
Core Problem
Developing playground features requires knowing exact API signatures of vrp-toolkit modules. Without reference documentation, this requires repeatedly reading source code (consuming thousands of tokens per integration) and leads to API mismatch errors.
Solution
This skill provides:
- Interface Mapping Table - Playground needs → vrp-toolkit APIs
- API Quick Reference - Exact signatures with usage examples
- Contract Test Integration - Automated verification of interfaces
- Common Error Patterns - Troubleshooting guide
Workflow
Step 1: Check Interface Mapping
Before writing any integration code:
- Open interface_mapping.md
- Find the workflow you're implementing (e.g., "Generate synthetic map")
- Note the exact API signature
- Check for common mistakes marked with ⚠️
Example:
Need: Generate synthetic map
API: RealMap(n_r: int, n_c: int, dist_function: Callable, dist_params: Dict)
Common mistake: ❌ Don't use num_customers, use n_c
Step 2: Verify with Contract Test (Optional)
If uncertain about API behavior:
- Check if contract test exists in
contracts/directory - Run the test:
pytest contracts/test_<feature>.py -v - Read test code to see usage examples
- Test validates: parameters accepted, attributes available, reproducibility
Example:
pytest contracts/test_realmap_api.py -v
# See test_realmap_initialization() for usage example
Step 3: Write Integration Code
Follow the mapping table exactly:
# ✅ Correct: Use exact signature from mapping table
np.random.seed(seed) # For reproducibility
real_map = RealMap(
n_r=num_restaurants,
n_c=num_customers,
dist_function=np.random.uniform,
dist_params={'low': 0, 'high': 100}
)
# ❌ Wrong: Assumed API
real_map = RealMap(
num_customers=num_customers,
num_restaurants=num_restaurants,
area_size=100,
seed=seed
)
Data access pattern:
- Most generators create data in
__init__, not via.generate()method - Access via attributes:
.demand_table,.order_table,.time_matrix - See interface_mapping.md for each API's pattern
Step 4: Add Error Handling
Common error patterns:
try:
instance = PDPTWInstance(
order_table=order_table,
distance_matrix=real_map.distance_matrix,
time_matrix=order_gen.time_matrix,
robot_speed=1.0
)
except TypeError as e:
st.error(f"API mismatch: {e}")
st.info("Check interface_mapping.md for correct parameters")
Step 5: Add Contract Test (For New Integrations)
When adding new playground feature:
-
Create test in
contracts/test_<feature>.py -
Test should verify:
- API signature matches mapping table
- Reproducibility (same seed → same result)
- Feasibility (results meet constraints)
- Objective values are consistent
-
Add test reference to interface_mapping.md
Template:
# contracts/test_new_feature.py
def test_api_signature():
"""Verifies API matches interface_mapping.md"""
# Test exact parameters...
def test_reproducibility():
"""Same seed produces same result"""
np.random.seed(42)
result1 = generate_feature()
np.random.seed(42)
result2 = generate_feature()
assert result1 == result2
Quick Reference Files
For Complete API Details
See api_signatures.md for:
- Full parameter lists with types
- Return types and attributes
- Usage examples
- Import statements
For Contract Testing
See contract_tests.md for:
- How to write contract tests
- Test organization patterns
- Running and maintaining tests
- Linking tests to mapping table
For Troubleshooting
See troubleshooting.md for:
- Common error messages and fixes
- Module caching issues (need to restart Streamlit)
- Attribute vs method access patterns
- Missing parameter errors
Anti-Patterns to Avoid
❌ Don't assume API signatures
- Always check mapping table first
- Don't guess parameter names
❌ Don't repeatedly read source code
- Use this skill's mapping table (< 1000 tokens)
- Avoid re-reading vrp-toolkit source (several thousand tokens each time)
❌ Don't call non-existent methods
- Check if it's an attribute or method
- Most generators use attributes:
.demand_table, not.generate()
❌ Don't skip contract tests for complex integrations
- Tests catch issues early
- Tests document expected behavior
- Tests prevent regressions
Maintenance
When vrp-toolkit API changes:
- Update interface_mapping.md
- Update affected contract tests in
contracts/ - Run tests to verify:
pytest contracts/ -v - Update playground code
- Update troubleshooting.md if new error patterns emerge
When adding new playground features:
- Add API to interface_mapping.md
- Add detailed signature to api_signatures.md
- Create contract test in
contracts/ - Reference test in mapping table
Token Efficiency
Without this skill:
- Read RealMap source: ~1500 tokens
- Read DemandGenerator source: ~1200 tokens
- Read OrderGenerator source: ~1800 tokens
- Read PDPTWInstance source: ~2000 tokens
- Total: ~6500 tokens per integration
With this skill:
- Read interface_mapping.md: ~800 tokens
- Total: ~800 tokens per integration
Savings: ~5700 tokens (87% reduction)