# Configuration Save/Load Guide ## Overview The Pub/Sub Multi-Agent System now supports saving and loading complete configurations, allowing you to: - Save your entire setup (data sources + agents) as a JSON file - Share configurations with teammates - Version control your agent pipelines - Quickly switch between different workflows ## Save Configuration ### How to Save 1. Configure your data sources and agents 2. **(Optional)** Check "☑ Save results" to include execution results 3. Click the **"Save Config"** button in the top-right header 4. A JSON file will download automatically with the name pattern: ``` pubsub-config-YYYY-MM-DD.json ``` ### Save Results Checkbox The **"☑ Save results"** checkbox allows you to include execution results in the saved configuration. **When checked**, the config includes: - All configuration data (agents, data sources) - Final Result box content - NER Result box content - Execution Log content **When unchecked** (default): - Only configuration data is saved - No results or logs **Use cases for saving results**: - Document successful executions - Share complete analysis with team - Archive results with configuration - Review past executions later ### What Gets Saved The configuration file includes: - **Version**: Configuration format version (currently 1.0) - **Timestamp**: When the config was saved - **User Question**: Current question text - **Data Sources**: All data sources with labels and content - **Agents**: All agent configurations including: - Title - Prompt template - Model selection - Subscribe/Publish topics - Show result checkbox state - **Results** (if "Save results" checked): - Final Result box content - NER Result box content - Execution Log content ### Example Configuration File **Without Results**: ```json { "version": "1.0", "timestamp": "2026-02-01T10:30:00.000Z", "userQuestion": "What are the top 10 customers?", "dataSources": [ { "label": "Schema", "content": "Tables:\n- customers (id, name, email)\n- orders (id, customer_id, total)" } ], "agents": [ { "title": "SQL Generator", "prompt": "Generate SQL for: {question}\nSchema: {schema}", "model": "phi4-mini", "subscribeTopic": "START", "publishTopic": "SQL_GENERATED", "showResult": true } ] } ``` **With Results** (when "Save results" is checked): ```json { "version": "1.0", "timestamp": "2026-02-01T10:30:00.000Z", "userQuestion": "Extract medical entities from patient note", "dataSources": [...], "agents": [...], "results": { "finalResult": "--- Entity Extractor ---\n[{\"text\": \"diabetes\", \"entity_type\": \"PROBLEM\"}]", "nerResult": "Patient has [diabetes:PROBLEM] and takes [metformin:TREATMENT]", "executionLog": "[10:30:00] ℹ️ Starting...\n[10:30:05] ✅ Complete" } } ``` ## Load Configuration ### How to Load 1. Click the **"Load Config"** button in the top-right header 2. Select a previously saved JSON configuration file 3. The system will: - Clear current configuration - Load all data sources - Load all agents - Restore the user question - Display success message in logs ### What Happens on Load - **Current config is replaced**: All existing data sources and agents are removed - **New IDs assigned**: Loaded items get new unique IDs - **Results restored** (if saved with results): - Final Result box populated - NER Result box populated - Execution Log populated - **Empty boxes** (if no results saved): - All result boxes cleared - **Validation**: File is checked for proper format before loading ### Error Handling If the configuration file is invalid, you'll see an error message: ``` Failed to load configuration: Invalid configuration file ``` Common issues: - Wrong file format (not JSON) - Missing required fields (version, dataSources, agents) - Corrupted file ## Use Cases ### Use Case 1: Template Workflows Save common workflows as templates: **sql-analysis-template.json** ```json { "version": "1.0", "dataSources": [ {"label": "Schema", "content": ""}, {"label": "SampleData", "content": ""} ], "agents": [ {"title": "Analyzer", "prompt": "...", ...}, {"title": "Generator", "prompt": "...", ...}, {"title": "Validator", "prompt": "...", ...} ] } ``` Load this template and just fill in the Schema! ### Use Case 2: Team Collaboration Share configurations with your team: 1. Developer A creates optimal pipeline 2. Saves config: `customer-analysis-pipeline.json` 3. Commits to Git repository 4. Developer B loads config 5. Everyone uses same proven workflow ### Use Case 3: A/B Testing Prompts Compare different prompt strategies: **Workflow:** 1. Create pipeline with Approach A 2. Save as `approach-a.json` 3. Modify prompts for Approach B 4. Save as `approach-b.json` 5. Load each config and compare results ### Use Case 4: Different Data Sources Same agents, different data: **Workflow:** 1. Create agent pipeline once 2. Save config with empty data sources 3. For each new dataset: - Load config - Add new data sources - Execute - Save results ### Use Case 5: Version Control Track evolution of your pipelines: ```bash git/ ├── configs/ │ ├── v1-basic-sql.json │ ├── v2-with-validation.json │ ├── v3-multi-step.json │ └── v4-production.json ``` Load previous versions to compare performance. ## Best Practices ### 1. Naming Conventions Use descriptive filenames: ``` ✅ Good: - medical-diagnosis-workflow-v2.json - sql-generator-with-validation.json - customer-analysis-pipeline.json ❌ Bad: - config.json - test.json - backup.json ``` ### 2. Documentation in Configs Add comments in data sources: ```json { "label": "Schema", "content": "# Customer Database Schema v2.0\n# Last updated: 2026-02-01\n\nTables:\n- customers ..." } ``` ### 3. Version Your Configs Include version info in data sources: ```json { "label": "ConfigInfo", "content": "Pipeline Version: 3.0\nAuthor: Jane Doe\nPurpose: SQL generation with validation\nLast Modified: 2026-02-01" } ``` ### 4. Organize by Purpose Create folder structure: ``` configs/ ├── sql-generation/ │ ├── basic.json │ ├── with-validation.json │ └── with-optimization.json ├── medical-analysis/ │ ├── symptom-analysis.json │ └── diagnosis-support.json └── data-analysis/ ├── sales-report.json └── customer-segmentation.json ``` ### 5. Template Strategy Create base templates without data: ```json { "dataSources": [ {"label": "Schema", "content": ""}, {"label": "Data", "content": ""} ], "agents": [ /* fully configured */ ] } ``` Load template, add data, execute! ### 6. Backup Before Experiments Before trying new approaches: 1. Save current config 2. Make experimental changes 3. If it works: save new version 4. If it fails: reload backup ## Configuration File Structure ### Required Fields ```json { "version": "1.0", // Required: config format version "dataSources": [], // Required: array (can be empty) "agents": [] // Required: array (can be empty) } ``` ### Optional Fields ```json { "timestamp": "...", // Optional: when saved "userQuestion": "..." // Optional: user question text } ``` ### Data Source Object ```json { "label": "string", // Required: reference name "content": "string" // Required: content (can be empty) } ``` ### Agent Object ```json { "title": "string", // Required: agent name "prompt": "string", // Required: prompt template "model": "string", // Required: model name "subscribeTopic": "string", // Required: topic to listen to "publishTopic": "string", // Optional: topic to publish to (can be null/empty) "showResult": boolean // Required: whether to show in results } ``` ## Advanced Usage ### Programmatic Config Generation Generate configs programmatically: ```python import json config = { "version": "1.0", "timestamp": "2026-02-01T10:00:00Z", "dataSources": [ {"label": "Schema", "content": load_schema_from_db()}, {"label": "Rules", "content": load_business_rules()} ], "agents": [ { "title": "SQL Generator", "prompt": "...", "model": "phi4-mini", "subscribeTopic": "START", "publishTopic": "SQL", "showResult": True } ] } with open('auto-generated-config.json', 'w') as f: json.dump(config, f, indent=2) ``` ### Config Validation Script Validate configs before loading: ```python import json def validate_config(filepath): with open(filepath) as f: config = json.load(f) # Check required fields assert "version" in config assert "dataSources" in config assert "agents" in config # Validate data sources for ds in config["dataSources"]: assert "label" in ds assert "content" in ds # Validate agents for agent in config["agents"]: assert "title" in agent assert "prompt" in agent assert "model" in agent assert "subscribeTopic" in agent assert "showResult" in agent print(f"✓ Config is valid: {len(config['dataSources'])} data sources, {len(config['agents'])} agents") validate_config("my-config.json") ``` ### Merge Configs Combine multiple configs: ```python import json def merge_configs(config1_path, config2_path, output_path): with open(config1_path) as f1, open(config2_path) as f2: c1 = json.load(f1) c2 = json.load(f2) merged = { "version": "1.0", "dataSources": c1["dataSources"] + c2["dataSources"], "agents": c1["agents"] + c2["agents"], "userQuestion": c1.get("userQuestion", "") } with open(output_path, 'w') as f: json.dump(merged, f, indent=2) merge_configs("pipeline-a.json", "pipeline-b.json", "merged-pipeline.json") ``` ## Troubleshooting ### Issue: "Invalid configuration file" **Cause**: File format is incorrect **Solution**: 1. Open file in text editor 2. Verify it's valid JSON 3. Check required fields exist ### Issue: Data sources empty after load **Cause**: Content wasn't saved **Solution**: Check original file has "content" fields populated ### Issue: Agents not working after load **Cause**: Model might not be available **Solution**: Check agent "model" field matches available models (phi4-mini, cniongolo/biomistral) ### Issue: Topics not matching after load **Cause**: Topic names might have changed **Solution**: Topics are case-insensitive now, but check for typos ## Tips 1. **Always test after loading**: Execute pipeline to verify everything works 2. **Keep configs small**: Separate large data sources into multiple configs 3. **Use version control**: Track configs in Git for history 4. **Document changes**: Add comments in data source content 5. **Share wisely**: Remove sensitive data before sharing configs