| # 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 | |