diff --git a/docs/swarms/structs/agent.md b/docs/swarms/structs/agent.md index 6413dd2c..8d670ace 100644 --- a/docs/swarms/structs/agent.md +++ b/docs/swarms/structs/agent.md @@ -141,6 +141,9 @@ graph TD | `all_cores` | Boolean indicating whether to use all CPU cores | | `device_id` | ID of the GPU device to use if running on GPU | | `scheduled_run_date` | Optional datetime for scheduling future agent runs | +| `expertise_areas` | List of areas the agent specializes in | +| `importance_threshold` | Minimum importance threshold for notifications | +| `notification_profile` | Profile containing notification preferences | ## `Agent` Methods @@ -212,6 +215,8 @@ graph TD | `check_if_no_prompt_then_autogenerate(task)` | Checks if a system prompt is not set and auto-generates one if needed. | `task` (str): The task to use for generating a prompt. | `agent.check_if_no_prompt_then_autogenerate("Analyze data")` | | `check_if_no_prompt_then_autogenerate(task)` | Checks if auto_generate_prompt is enabled and generates a prompt by combining agent name, description and system prompt | `task` (str, optional): Task to use as fallback | `agent.check_if_no_prompt_then_autogenerate("Analyze data")` | | `handle_artifacts(response, output_path, extension)` | Handles saving artifacts from agent execution | `response` (str): Agent response
`output_path` (str): Output path
`extension` (str): File extension | `agent.handle_artifacts(response, "outputs/", ".txt")` | +| `update_notification_preferences` | Update agent's notification preferences | `expertise_areas`: List[str]
`importance_threshold`: float | `agent.update_notification_preferences(expertise_areas=["finance"])` | +| `handle_vector_db_update` | Handle notification of vector DB update | `update_metadata`: UpdateMetadata | `agent.handle_vector_db_update(update)` | @@ -567,4 +572,32 @@ print(agent.system_prompt) 13. Enable `rag_every_loop` when continuous context from long-term memory is needed 14. Use `scheduled_run_date` for automated task scheduling -By following these guidelines and leveraging the Swarm Agent's extensive features, you can create powerful, flexible, and efficient autonomous agents for a wide range of applications. \ No newline at end of file +By following these guidelines and leveraging the Swarm Agent's extensive features, you can create powerful, flexible, and efficient autonomous agents for a wide range of applications. + +## Notification Example + ```python + from swarms import Agent + from swarms.structs.notification_manager import UpdateMetadata + from datetime import datetime + + # Create agent with notification preferences + agent = Agent( + agent_name="FinancialAgent", + expertise_areas=["finance", "stocks", "trading"], + importance_threshold=0.6 + ) + + # Update notification preferences + agent.update_notification_preferences( + expertise_areas=["finance", "cryptocurrency"], + importance_threshold=0.7 + ) + + # Handle vector DB update + update = UpdateMetadata( + topic="crypto_market", + importance=0.8, + timestamp=datetime.now(), + affected_areas=["cryptocurrency", "trading"] + ) + agent.handle_vector_db_update(update) ``` \ No newline at end of file diff --git a/docs/swarms/structs/notification_manager.md b/docs/swarms/structs/notification_manager.md new file mode 100644 index 00000000..c794a286 --- /dev/null +++ b/docs/swarms/structs/notification_manager.md @@ -0,0 +1,117 @@ +# Notification Manager + +The `NotificationManager` is responsible for managing selective notifications for vector DB updates between agents. It determines which agents should be notified of specific updates based on their expertise areas and notification preferences. + +## Overview + +The notification system uses relevance scoring and importance thresholds to determine which agents should receive updates. This prevents overwhelming agents with irrelevant notifications and ensures efficient information flow. + +## Classes + +### UpdateMetadata + +Metadata for vector DB updates. + +```python +class UpdateMetadata(BaseModel): + topic: str # Topic of the update + importance: float # Importance score (0-1) + timestamp: datetime # When update occurred + embedding: Optional[List[float]] = None # Vector embedding + affected_areas: List[str] = [] # Areas affected by update +``` + +### AgentProfile + +Profile containing agent notification preferences. + +```python +class AgentProfile(BaseModel): + agent_id: str # Unique agent identifier + expertise_areas: List[str] # Areas of expertise + importance_threshold: float = 0.5 # Min importance threshold + current_task_context: Optional[str] # Current task being worked on + embedding: Optional[List[float]] # Vector embedding of expertise +``` + +### NotificationManager + +Main class for managing notifications. + +```python +class NotificationManager: + def __init__(self): + self.agent_profiles: Dict[str, AgentProfile] = {} +``` + +## Key Methods + +| Method | Description | +|--------|-------------| +| `register_agent(profile: AgentProfile)` | Register an agent's notification preferences | +| `unregister_agent(agent_id: str)` | Remove an agent's notification preferences | +| `calculate_relevance(update_metadata: UpdateMetadata, agent_profile: AgentProfile) -> float` | Calculate relevance score between update and agent | +| `should_notify_agent(update_metadata: UpdateMetadata, agent_profile: AgentProfile) -> bool` | Determine if agent should be notified | +| `get_agents_to_notify(update_metadata: UpdateMetadata) -> List[str]` | Get list of agents to notify | + +## Usage Example + +```python +from swarms.structs.notification_manager import NotificationManager, UpdateMetadata, AgentProfile +from datetime import datetime + +# Create notification manager +manager = NotificationManager() + +# Register an agent +profile = AgentProfile( + agent_id="financial_agent", + expertise_areas=["finance", "stocks", "trading"], + importance_threshold=0.6 +) +manager.register_agent(profile) + +# Create an update +update = UpdateMetadata( + topic="stock_market", + importance=0.8, + timestamp=datetime.now(), + affected_areas=["finance", "trading"] +) + +# Get agents to notify +agents_to_notify = manager.get_agents_to_notify(update) +print(f"Agents to notify: {agents_to_notify}") +``` + +## Relevance Calculation + +The relevance score between an update and an agent is calculated using: + +1. Topic/expertise overlap score (70% weight) + - Measures overlap between agent's expertise areas and update's affected areas + +2. Embedding similarity score (30% weight) + - Cosine similarity between update and agent embeddings if available + +The final relevance score determines if an agent should be notified based on: +- Relevance score > 0.5 +- Update importance > agent's importance threshold + +## Best Practices + +1. Set appropriate importance thresholds + - Higher thresholds (e.g. 0.8) for critical updates only + - Lower thresholds (e.g. 0.3) for broader awareness + +2. Define focused expertise areas + - Use specific areas rather than broad categories + - Include related areas for better matching + +3. Update task context + - Keep current_task_context updated for better relevance + - Clear context when task complete + +4. Monitor notification patterns + - Adjust thresholds if agents receive too many/few updates + - Refine expertise areas based on relevance scores \ No newline at end of file diff --git a/docs/swarms/structs/orchestrator.md b/docs/swarms/structs/orchestrator.md new file mode 100644 index 00000000..8dededa2 --- /dev/null +++ b/docs/swarms/structs/orchestrator.md @@ -0,0 +1,128 @@ +# Orchestrator + +The `Orchestrator` manages communication and coordination between multiple agents, particularly for selective vector DB update notifications. It acts as a central hub for registering agents and routing notifications. + +## Overview + +The orchestrator maintains a list of agents and their notification preferences, using the `NotificationManager` to determine which agents should receive specific updates. + +```mermaid +graph TD + A[Orchestrator] --> B[NotificationManager] + A --> C[Agent List] + B --> D[Calculate Relevance] + B --> E[Determine Recipients] + C --> F[Handle Updates] + F --> G[Notify Agents] +``` + +## Class Definition + +```python +class Orchestrator: + def __init__(self): + self.notification_manager = NotificationManager() + self.agents: List[Agent] = [] +``` + +## Key Methods + +| Method | Description | +|--------|-------------| +| `register_agent(agent: Agent)` | Register an agent with the orchestrator | +| `handle_vector_db_update(update_metadata: UpdateMetadata)` | Process a vector DB update and notify relevant agents | +| `update_agent_task_context(agent_name: str, task_context: str)` | Update an agent's current task context | + +## Usage Example + +```python +from swarms import Agent, Orchestrator +from swarms.structs.notification_manager import UpdateMetadata +from datetime import datetime + +# Create orchestrator +orchestrator = Orchestrator() + +# Create and register agents +agent1 = Agent( + agent_name="FinancialAgent", + expertise_areas=["finance", "stocks", "trading"], + importance_threshold=0.6 +) + +agent2 = Agent( + agent_name="TechAgent", + expertise_areas=["technology", "software", "AI"], + importance_threshold=0.4 +) + +orchestrator.register_agent(agent1) +orchestrator.register_agent(agent2) + +# Example vector DB update +update = UpdateMetadata( + topic="stock_market", + importance=0.8, + timestamp=datetime.now(), + affected_areas=["finance", "trading"] +) + +# Handle update - only FinancialAgent will be notified +orchestrator.handle_vector_db_update(update) +``` + +## Best Practices + +1. Agent Registration + - Register all agents at initialization + - Update agent profiles when expertise changes + - Remove inactive agents + +2. Update Handling + - Include relevant metadata in updates + - Set appropriate importance levels + - Consider update timing + +3. Task Context + - Keep task contexts current + - Clear contexts when tasks complete + - Use contexts to improve notification relevance + +4. Monitoring + - Track notification patterns + - Adjust thresholds as needed + - Monitor agent responses to notifications + +## Integration with Vector Databases + +The orchestrator can be integrated with various vector databases: + +```python +from swarms_memory import ChromaDB +from swarms import Agent, Orchestrator + +# Initialize vector DB +vector_db = ChromaDB( + metric="cosine", + output_dir="agent_knowledge" +) + +# Create agents with vector DB +agent = Agent( + agent_name="ResearchAgent", + expertise_areas=["research", "analysis"], + long_term_memory=vector_db +) + +# Register with orchestrator +orchestrator = Orchestrator() +orchestrator.register_agent(agent) +``` + +## Error Handling + +The orchestrator includes error handling for: +- Invalid agent registrations +- Malformed updates +- Failed notifications +- Missing agent profiles \ No newline at end of file