diff --git a/lib/crewai/src/crewai/a2a/updates/__init__.py b/lib/crewai/src/crewai/a2a/updates/__init__.py new file mode 100644 index 000000000..32ab76297 --- /dev/null +++ b/lib/crewai/src/crewai/a2a/updates/__init__.py @@ -0,0 +1,15 @@ +"""A2A update mechanism configuration types.""" + +from crewai.a2a.updates.polling.config import PollingConfig +from crewai.a2a.updates.push_notifications.config import PushNotificationConfig +from crewai.a2a.updates.streaming.config import StreamingConfig + + +UpdateConfig = PollingConfig | StreamingConfig | PushNotificationConfig + +__all__ = [ + "PollingConfig", + "PushNotificationConfig", + "StreamingConfig", + "UpdateConfig", +] diff --git a/lib/crewai/src/crewai/a2a/updates/polling/__init__.py b/lib/crewai/src/crewai/a2a/updates/polling/__init__.py new file mode 100644 index 000000000..7199db700 --- /dev/null +++ b/lib/crewai/src/crewai/a2a/updates/polling/__init__.py @@ -0,0 +1 @@ +"""Polling update mechanism module.""" diff --git a/lib/crewai/src/crewai/a2a/updates/polling/config.py b/lib/crewai/src/crewai/a2a/updates/polling/config.py new file mode 100644 index 000000000..698c4b670 --- /dev/null +++ b/lib/crewai/src/crewai/a2a/updates/polling/config.py @@ -0,0 +1,23 @@ +"""Polling update mechanism configuration.""" + +from __future__ import annotations + +from pydantic import BaseModel, Field + + +class PollingConfig(BaseModel): + """Configuration for polling-based task updates. + + Attributes: + interval: Seconds between poll attempts. + timeout: Max seconds to poll before raising timeout error. + max_polls: Max number of poll attempts. + history_length: Number of messages to retrieve per poll. + """ + + interval: float = Field(default=2.0, description="Seconds between poll attempts") + timeout: float | None = Field(default=None, description="Max seconds to poll") + max_polls: int | None = Field(default=None, description="Max poll attempts") + history_length: int = Field( + default=100, description="Messages to retrieve per poll" + ) diff --git a/lib/crewai/src/crewai/a2a/updates/push_notifications/__init__.py b/lib/crewai/src/crewai/a2a/updates/push_notifications/__init__.py new file mode 100644 index 000000000..abb3c2f23 --- /dev/null +++ b/lib/crewai/src/crewai/a2a/updates/push_notifications/__init__.py @@ -0,0 +1 @@ +"""Push notification update mechanism module.""" diff --git a/lib/crewai/src/crewai/a2a/updates/push_notifications/config.py b/lib/crewai/src/crewai/a2a/updates/push_notifications/config.py new file mode 100644 index 000000000..9c683ae98 --- /dev/null +++ b/lib/crewai/src/crewai/a2a/updates/push_notifications/config.py @@ -0,0 +1,25 @@ +"""Push notification update mechanism configuration.""" + +from __future__ import annotations + +from pydantic import BaseModel, Field + +from crewai.a2a.auth.schemas import AuthScheme + + +class PushNotificationConfig(BaseModel): + """Configuration for webhook-based task updates. + + Attributes: + url: Callback URL where agent sends push notifications. + id: Unique identifier for this config. + token: Token to validate incoming notifications. + authentication: Auth scheme for the callback endpoint. + """ + + url: str = Field(description="Callback URL for push notifications") + id: str | None = Field(default=None, description="Unique config identifier") + token: str | None = Field(default=None, description="Validation token") + authentication: AuthScheme | None = Field( + default=None, description="Authentication for callback endpoint" + ) diff --git a/lib/crewai/src/crewai/a2a/updates/streaming/__init__.py b/lib/crewai/src/crewai/a2a/updates/streaming/__init__.py new file mode 100644 index 000000000..7adada8b5 --- /dev/null +++ b/lib/crewai/src/crewai/a2a/updates/streaming/__init__.py @@ -0,0 +1 @@ +"""Streaming update mechanism module.""" diff --git a/lib/crewai/src/crewai/a2a/updates/streaming/config.py b/lib/crewai/src/crewai/a2a/updates/streaming/config.py new file mode 100644 index 000000000..6098bf550 --- /dev/null +++ b/lib/crewai/src/crewai/a2a/updates/streaming/config.py @@ -0,0 +1,9 @@ +"""Streaming update mechanism configuration.""" + +from __future__ import annotations + +from pydantic import BaseModel + + +class StreamingConfig(BaseModel): + """Configuration for SSE-based task updates."""