adcp 2.19.0__py3-none-any.whl → 3.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- adcp/ADCP_VERSION +1 -1
- adcp/__init__.py +6 -14
- adcp/__main__.py +94 -51
- adcp/adagents.py +91 -19
- adcp/client.py +865 -0
- adcp/protocols/a2a.py +84 -0
- adcp/protocols/base.py +101 -0
- adcp/protocols/mcp.py +84 -0
- adcp/server/__init__.py +49 -0
- adcp/server/base.py +368 -0
- adcp/server/content_standards.py +561 -0
- adcp/server/governance.py +491 -0
- adcp/server/mcp_tools.py +471 -0
- adcp/server/proposal.py +334 -0
- adcp/server/sponsored_intelligence.py +444 -0
- adcp/types/__init__.py +111 -23
- adcp/types/_ergonomic.py +35 -14
- adcp/types/_generated.py +346 -52
- adcp/types/aliases.py +13 -20
- adcp/types/base.py +1 -1
- adcp/types/generated_poc/adagents.py +196 -189
- adcp/types/generated_poc/content_standards/__init__.py +3 -0
- adcp/types/generated_poc/content_standards/artifact.py +208 -0
- adcp/types/generated_poc/content_standards/artifact_webhook_payload.py +64 -0
- adcp/types/generated_poc/content_standards/calibrate_content_request.py +17 -0
- adcp/types/generated_poc/content_standards/calibrate_content_response.py +74 -0
- adcp/types/generated_poc/content_standards/content_standards.py +66 -0
- adcp/types/generated_poc/content_standards/create_content_standards_request.py +97 -0
- adcp/types/generated_poc/content_standards/create_content_standards_response.py +52 -0
- adcp/types/generated_poc/content_standards/get_content_standards_request.py +21 -0
- adcp/types/generated_poc/content_standards/get_content_standards_response.py +43 -0
- adcp/types/generated_poc/content_standards/get_media_buy_artifacts_request.py +64 -0
- adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py +117 -0
- adcp/types/generated_poc/content_standards/list_content_standards_request.py +31 -0
- adcp/types/generated_poc/content_standards/list_content_standards_response.py +48 -0
- adcp/types/generated_poc/content_standards/update_content_standards_request.py +101 -0
- adcp/types/generated_poc/content_standards/update_content_standards_response.py +34 -0
- adcp/types/generated_poc/content_standards/validate_content_delivery_request.py +59 -0
- adcp/types/generated_poc/content_standards/validate_content_delivery_response.py +85 -0
- adcp/types/generated_poc/core/activation_key.py +9 -9
- adcp/types/generated_poc/core/assets/audio_asset.py +6 -6
- adcp/types/generated_poc/core/assets/css_asset.py +3 -3
- adcp/types/generated_poc/core/assets/daast_asset.py +19 -19
- adcp/types/generated_poc/core/assets/html_asset.py +3 -3
- adcp/types/generated_poc/core/assets/image_asset.py +7 -7
- adcp/types/generated_poc/core/assets/javascript_asset.py +4 -4
- adcp/types/generated_poc/core/assets/text_asset.py +3 -3
- adcp/types/generated_poc/core/assets/url_asset.py +4 -4
- adcp/types/generated_poc/core/assets/vast_asset.py +19 -19
- adcp/types/generated_poc/core/assets/video_asset.py +8 -8
- adcp/types/generated_poc/core/assets/webhook_asset.py +10 -10
- adcp/types/generated_poc/core/async_response_data.py +3 -3
- adcp/types/generated_poc/core/brand_manifest.py +122 -59
- adcp/types/generated_poc/core/brand_manifest_ref.py +10 -10
- adcp/types/generated_poc/core/context.py +2 -2
- adcp/types/generated_poc/core/creative_asset.py +20 -19
- adcp/types/generated_poc/core/creative_assignment.py +4 -4
- adcp/types/generated_poc/core/creative_filters.py +18 -28
- adcp/types/generated_poc/core/creative_manifest.py +3 -3
- adcp/types/generated_poc/core/creative_policy.py +5 -5
- adcp/types/generated_poc/core/delivery_metrics.py +33 -33
- adcp/types/generated_poc/core/deployment.py +21 -21
- adcp/types/generated_poc/core/destination.py +12 -12
- adcp/types/generated_poc/core/error.py +7 -7
- adcp/types/generated_poc/core/ext.py +2 -2
- adcp/types/generated_poc/core/format.py +66 -66
- adcp/types/generated_poc/core/format_id.py +6 -6
- adcp/types/generated_poc/core/frequency_cap.py +3 -3
- adcp/types/generated_poc/core/identifier.py +3 -3
- adcp/types/generated_poc/core/mcp_webhook_payload.py +11 -11
- adcp/types/generated_poc/core/measurement.py +9 -9
- adcp/types/generated_poc/core/media_buy.py +8 -8
- adcp/types/generated_poc/core/media_buy_features.py +29 -0
- adcp/types/generated_poc/core/offering.py +80 -0
- adcp/types/generated_poc/core/package.py +9 -9
- adcp/types/generated_poc/core/performance_feedback.py +19 -19
- adcp/types/generated_poc/core/placement.py +5 -5
- adcp/types/generated_poc/core/pricing_option.py +9 -15
- adcp/types/generated_poc/core/product.py +21 -21
- adcp/types/generated_poc/core/product_allocation.py +48 -0
- adcp/types/generated_poc/core/product_filters.py +89 -24
- adcp/types/generated_poc/core/promoted_offerings.py +29 -38
- adcp/types/generated_poc/core/promoted_products.py +3 -3
- adcp/types/generated_poc/core/property.py +10 -10
- adcp/types/generated_poc/core/property_id.py +5 -5
- adcp/types/generated_poc/core/property_list_ref.py +5 -5
- adcp/types/generated_poc/core/property_tag.py +5 -5
- adcp/types/generated_poc/core/proposal.py +64 -0
- adcp/types/generated_poc/core/protocol_envelope.py +9 -9
- adcp/types/generated_poc/core/publisher_property_selector.py +14 -14
- adcp/types/generated_poc/core/push_notification_config.py +6 -6
- adcp/types/generated_poc/core/reporting_capabilities.py +9 -9
- adcp/types/generated_poc/core/reporting_webhook.py +70 -0
- adcp/types/generated_poc/core/response.py +5 -5
- adcp/types/generated_poc/core/signal_filters.py +6 -6
- adcp/types/generated_poc/core/start_timing.py +4 -4
- adcp/types/generated_poc/core/sub_asset.py +15 -15
- adcp/types/generated_poc/core/targeting.py +59 -18
- adcp/types/generated_poc/creative/list_creative_formats_request.py +21 -21
- adcp/types/generated_poc/creative/list_creative_formats_response.py +6 -6
- adcp/types/generated_poc/creative/preview_creative_request.py +25 -25
- adcp/types/generated_poc/creative/preview_creative_response.py +29 -29
- adcp/types/generated_poc/creative/preview_render.py +26 -26
- adcp/types/generated_poc/enums/adcp_domain.py +5 -5
- adcp/types/generated_poc/enums/asset_content_type.py +14 -14
- adcp/types/generated_poc/enums/auth_scheme.py +3 -3
- adcp/types/generated_poc/enums/available_metric.py +10 -10
- adcp/types/generated_poc/enums/channels.py +21 -11
- adcp/types/generated_poc/enums/co_branding_requirement.py +4 -4
- adcp/types/generated_poc/enums/creative_action.py +6 -6
- adcp/types/generated_poc/enums/creative_agent_capability.py +5 -5
- adcp/types/generated_poc/enums/creative_sort_field.py +7 -7
- adcp/types/generated_poc/enums/creative_status.py +6 -5
- adcp/types/generated_poc/enums/daast_tracking_event.py +12 -12
- adcp/types/generated_poc/enums/daast_version.py +3 -3
- adcp/types/generated_poc/enums/delivery_type.py +3 -3
- adcp/types/generated_poc/enums/dimension_unit.py +5 -5
- adcp/types/generated_poc/enums/feed_format.py +4 -4
- adcp/types/generated_poc/enums/feedback_source.py +5 -5
- adcp/types/generated_poc/enums/format_category.py +8 -8
- adcp/types/generated_poc/enums/format_id_parameter.py +3 -3
- adcp/types/generated_poc/enums/frequency_cap_scope.py +4 -4
- adcp/types/generated_poc/enums/geo_level.py +14 -0
- adcp/types/generated_poc/enums/history_entry_type.py +3 -3
- adcp/types/generated_poc/enums/http_method.py +3 -3
- adcp/types/generated_poc/enums/identifier_types.py +20 -20
- adcp/types/generated_poc/enums/javascript_module_type.py +4 -4
- adcp/types/generated_poc/enums/landing_page_requirement.py +4 -4
- adcp/types/generated_poc/enums/markdown_flavor.py +3 -3
- adcp/types/generated_poc/enums/media_buy_status.py +5 -5
- adcp/types/generated_poc/enums/metric_type.py +9 -9
- adcp/types/generated_poc/enums/metro_system.py +15 -0
- adcp/types/generated_poc/enums/notification_type.py +5 -5
- adcp/types/generated_poc/enums/pacing.py +4 -4
- adcp/types/generated_poc/enums/postal_system.py +19 -0
- adcp/types/generated_poc/enums/preview_output_format.py +3 -3
- adcp/types/generated_poc/enums/pricing_model.py +8 -8
- adcp/types/generated_poc/enums/property_type.py +9 -8
- adcp/types/generated_poc/enums/publisher_identifier_types.py +6 -6
- adcp/types/generated_poc/enums/reporting_frequency.py +4 -4
- adcp/types/generated_poc/enums/signal_catalog_type.py +4 -4
- adcp/types/generated_poc/enums/sort_direction.py +3 -3
- adcp/types/generated_poc/enums/task_status.py +10 -10
- adcp/types/generated_poc/enums/task_type.py +12 -12
- adcp/types/generated_poc/enums/update_frequency.py +5 -5
- adcp/types/generated_poc/enums/url_asset_type.py +4 -4
- adcp/types/generated_poc/enums/validation_mode.py +3 -3
- adcp/types/generated_poc/enums/vast_tracking_event.py +17 -17
- adcp/types/generated_poc/enums/vast_version.py +6 -6
- adcp/types/generated_poc/enums/webhook_response_type.py +5 -5
- adcp/types/generated_poc/enums/webhook_security_method.py +4 -4
- adcp/types/generated_poc/extensions/extension_meta.py +20 -12
- adcp/types/generated_poc/media_buy/build_creative_request.py +5 -5
- adcp/types/generated_poc/media_buy/build_creative_response.py +7 -7
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +6 -6
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +2 -2
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +6 -6
- adcp/types/generated_poc/media_buy/create_media_buy_request.py +65 -37
- adcp/types/generated_poc/media_buy/create_media_buy_response.py +8 -8
- adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +9 -9
- adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +52 -52
- adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +7 -7
- adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +3 -3
- adcp/types/generated_poc/media_buy/get_products_async_response_working.py +5 -5
- adcp/types/generated_poc/media_buy/get_products_request.py +14 -5
- adcp/types/generated_poc/media_buy/get_products_response.py +12 -6
- adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +4 -4
- adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +9 -9
- adcp/types/generated_poc/media_buy/list_creative_formats_request.py +10 -10
- adcp/types/generated_poc/media_buy/list_creative_formats_response.py +6 -6
- adcp/types/generated_poc/media_buy/list_creatives_request.py +24 -24
- adcp/types/generated_poc/media_buy/list_creatives_response.py +54 -57
- adcp/types/generated_poc/media_buy/package_request.py +12 -12
- adcp/types/generated_poc/media_buy/package_update.py +119 -0
- adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +20 -20
- adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +7 -7
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +6 -6
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +2 -2
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +8 -8
- adcp/types/generated_poc/media_buy/sync_creatives_request.py +8 -8
- adcp/types/generated_poc/media_buy/sync_creatives_response.py +16 -16
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +5 -5
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +2 -2
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +6 -6
- adcp/types/generated_poc/media_buy/update_media_buy_request.py +28 -124
- adcp/types/generated_poc/media_buy/update_media_buy_response.py +8 -8
- adcp/types/generated_poc/pricing_options/cpc_option.py +40 -15
- adcp/types/generated_poc/pricing_options/cpcv_option.py +41 -16
- adcp/types/generated_poc/pricing_options/cpm_option.py +62 -0
- adcp/types/generated_poc/pricing_options/cpp_option.py +46 -23
- adcp/types/generated_poc/pricing_options/cpv_option.py +45 -26
- adcp/types/generated_poc/pricing_options/flat_rate_option.py +53 -47
- adcp/types/generated_poc/pricing_options/vcpm_option.py +70 -0
- adcp/types/generated_poc/property/base_property_source.py +16 -16
- adcp/types/generated_poc/property/create_property_list_request.py +5 -5
- adcp/types/generated_poc/property/create_property_list_response.py +4 -4
- adcp/types/generated_poc/property/delete_property_list_request.py +3 -3
- adcp/types/generated_poc/property/delete_property_list_response.py +4 -4
- adcp/types/generated_poc/property/feature_requirement.py +8 -8
- adcp/types/generated_poc/property/get_property_list_request.py +6 -6
- adcp/types/generated_poc/property/get_property_list_response.py +12 -12
- adcp/types/generated_poc/property/list_property_lists_request.py +6 -6
- adcp/types/generated_poc/property/list_property_lists_response.py +9 -9
- adcp/types/generated_poc/property/property_error.py +11 -11
- adcp/types/generated_poc/property/property_feature.py +5 -5
- adcp/types/generated_poc/property/property_feature_definition.py +19 -19
- adcp/types/generated_poc/property/property_list.py +12 -12
- adcp/types/generated_poc/property/property_list_changed_webhook.py +12 -12
- adcp/types/generated_poc/property/property_list_filters.py +9 -9
- adcp/types/generated_poc/property/update_property_list_request.py +9 -9
- adcp/types/generated_poc/property/update_property_list_response.py +3 -3
- adcp/types/generated_poc/protocol/__init__.py +3 -0
- adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py +34 -0
- adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py +353 -0
- adcp/types/generated_poc/protocols/adcp_extension.py +14 -17
- adcp/types/generated_poc/signals/activate_signal_request.py +4 -4
- adcp/types/generated_poc/signals/activate_signal_response.py +7 -7
- adcp/types/generated_poc/signals/get_signals_request.py +9 -9
- adcp/types/generated_poc/signals/get_signals_response.py +16 -16
- adcp/types/generated_poc/sponsored_intelligence/__init__.py +3 -0
- adcp/types/generated_poc/sponsored_intelligence/si_capabilities.py +102 -0
- adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py +34 -0
- adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py +100 -0
- adcp/types/generated_poc/sponsored_intelligence/si_identity.py +78 -0
- adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py +46 -0
- adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py +44 -0
- adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py +58 -0
- adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py +101 -0
- adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py +60 -0
- adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py +54 -0
- adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py +30 -0
- adcp/utils/format_assets.py +5 -5
- adcp/utils/preview_cache.py +2 -2
- {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/METADATA +1 -1
- adcp-3.0.0.dist-info/RECORD +264 -0
- {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/WHEEL +1 -1
- adcp/types/generated_poc/enums/standard_format_ids.py +0 -45
- adcp/types/generated_poc/pricing_options/cpm_auction_option.py +0 -58
- adcp/types/generated_poc/pricing_options/cpm_fixed_option.py +0 -43
- adcp/types/generated_poc/pricing_options/vcpm_auction_option.py +0 -61
- adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +0 -47
- adcp/types/generated_poc/property/list_property_features_request.py +0 -25
- adcp/types/generated_poc/property/list_property_features_response.py +0 -24
- adcp-2.19.0.dist-info/RECORD +0 -220
- {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/entry_points.txt +0 -0
- {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/licenses/LICENSE +0 -0
- {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
"""Sponsored Intelligence protocol handler.
|
|
2
|
+
|
|
3
|
+
Provides a base class for implementing Sponsored Intelligence agents.
|
|
4
|
+
Non-SI operations return 'not supported' by default.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from abc import abstractmethod
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
from pydantic import ValidationError
|
|
13
|
+
|
|
14
|
+
from adcp.server.base import ADCPHandler, NotImplementedResponse, ToolContext, not_supported
|
|
15
|
+
from adcp.types import (
|
|
16
|
+
Error,
|
|
17
|
+
SiGetOfferingRequest,
|
|
18
|
+
SiGetOfferingResponse,
|
|
19
|
+
SiInitiateSessionRequest,
|
|
20
|
+
SiInitiateSessionResponse,
|
|
21
|
+
SiSendMessageRequest,
|
|
22
|
+
SiSendMessageResponse,
|
|
23
|
+
SiTerminateSessionRequest,
|
|
24
|
+
SiTerminateSessionResponse,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class SponsoredIntelligenceHandler(ADCPHandler):
|
|
29
|
+
"""Handler for Sponsored Intelligence protocol.
|
|
30
|
+
|
|
31
|
+
Subclass this to implement a Sponsored Intelligence agent. All SI
|
|
32
|
+
operations must be implemented via the handle_* methods.
|
|
33
|
+
The public methods (si_get_offering, etc.) handle validation and
|
|
34
|
+
error handling automatically.
|
|
35
|
+
|
|
36
|
+
Non-SI operations (get_products, create_media_buy, content standards, etc.)
|
|
37
|
+
return 'not supported'.
|
|
38
|
+
|
|
39
|
+
Example:
|
|
40
|
+
class MySIHandler(SponsoredIntelligenceHandler):
|
|
41
|
+
async def handle_si_get_offering(
|
|
42
|
+
self,
|
|
43
|
+
request: SiGetOfferingRequest,
|
|
44
|
+
context: ToolContext | None = None
|
|
45
|
+
) -> SiGetOfferingResponse:
|
|
46
|
+
# Your implementation
|
|
47
|
+
return SiGetOfferingResponse(...)
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
# ========================================================================
|
|
51
|
+
# Sponsored Intelligence Operations - Override base class with validation
|
|
52
|
+
# ========================================================================
|
|
53
|
+
|
|
54
|
+
async def si_get_offering(
|
|
55
|
+
self,
|
|
56
|
+
params: dict[str, Any],
|
|
57
|
+
context: ToolContext | None = None,
|
|
58
|
+
) -> SiGetOfferingResponse | NotImplementedResponse:
|
|
59
|
+
"""Get sponsored intelligence offering.
|
|
60
|
+
|
|
61
|
+
Validates params and delegates to handle_si_get_offering.
|
|
62
|
+
|
|
63
|
+
Args:
|
|
64
|
+
params: Request parameters as dict
|
|
65
|
+
context: Optional tool context
|
|
66
|
+
|
|
67
|
+
Returns:
|
|
68
|
+
SI offering response with capabilities and pricing, or error response
|
|
69
|
+
"""
|
|
70
|
+
try:
|
|
71
|
+
request = SiGetOfferingRequest.model_validate(params)
|
|
72
|
+
except ValidationError as e:
|
|
73
|
+
return NotImplementedResponse(
|
|
74
|
+
supported=False,
|
|
75
|
+
reason=f"Invalid request: {e}",
|
|
76
|
+
error=Error(code="VALIDATION_ERROR", message=str(e)),
|
|
77
|
+
)
|
|
78
|
+
return await self.handle_si_get_offering(request, context)
|
|
79
|
+
|
|
80
|
+
async def si_initiate_session(
|
|
81
|
+
self,
|
|
82
|
+
params: dict[str, Any],
|
|
83
|
+
context: ToolContext | None = None,
|
|
84
|
+
) -> SiInitiateSessionResponse | NotImplementedResponse:
|
|
85
|
+
"""Initiate sponsored intelligence session.
|
|
86
|
+
|
|
87
|
+
Validates params and delegates to handle_si_initiate_session.
|
|
88
|
+
|
|
89
|
+
Args:
|
|
90
|
+
params: Request parameters as dict
|
|
91
|
+
context: Optional tool context
|
|
92
|
+
|
|
93
|
+
Returns:
|
|
94
|
+
Session initiation response with session ID, or error response
|
|
95
|
+
"""
|
|
96
|
+
try:
|
|
97
|
+
request = SiInitiateSessionRequest.model_validate(params)
|
|
98
|
+
except ValidationError as e:
|
|
99
|
+
return NotImplementedResponse(
|
|
100
|
+
supported=False,
|
|
101
|
+
reason=f"Invalid request: {e}",
|
|
102
|
+
error=Error(code="VALIDATION_ERROR", message=str(e)),
|
|
103
|
+
)
|
|
104
|
+
return await self.handle_si_initiate_session(request, context)
|
|
105
|
+
|
|
106
|
+
async def si_send_message(
|
|
107
|
+
self,
|
|
108
|
+
params: dict[str, Any],
|
|
109
|
+
context: ToolContext | None = None,
|
|
110
|
+
) -> SiSendMessageResponse | NotImplementedResponse:
|
|
111
|
+
"""Send message in sponsored intelligence session.
|
|
112
|
+
|
|
113
|
+
Validates params and delegates to handle_si_send_message.
|
|
114
|
+
|
|
115
|
+
Args:
|
|
116
|
+
params: Request parameters as dict
|
|
117
|
+
context: Optional tool context
|
|
118
|
+
|
|
119
|
+
Returns:
|
|
120
|
+
Message response with AI-generated content, or error response
|
|
121
|
+
"""
|
|
122
|
+
try:
|
|
123
|
+
request = SiSendMessageRequest.model_validate(params)
|
|
124
|
+
except ValidationError as e:
|
|
125
|
+
return NotImplementedResponse(
|
|
126
|
+
supported=False,
|
|
127
|
+
reason=f"Invalid request: {e}",
|
|
128
|
+
error=Error(code="VALIDATION_ERROR", message=str(e)),
|
|
129
|
+
)
|
|
130
|
+
return await self.handle_si_send_message(request, context)
|
|
131
|
+
|
|
132
|
+
async def si_terminate_session(
|
|
133
|
+
self,
|
|
134
|
+
params: dict[str, Any],
|
|
135
|
+
context: ToolContext | None = None,
|
|
136
|
+
) -> SiTerminateSessionResponse | NotImplementedResponse:
|
|
137
|
+
"""Terminate sponsored intelligence session.
|
|
138
|
+
|
|
139
|
+
Validates params and delegates to handle_si_terminate_session.
|
|
140
|
+
|
|
141
|
+
Args:
|
|
142
|
+
params: Request parameters as dict
|
|
143
|
+
context: Optional tool context
|
|
144
|
+
|
|
145
|
+
Returns:
|
|
146
|
+
Termination response with session summary, or error response
|
|
147
|
+
"""
|
|
148
|
+
try:
|
|
149
|
+
request = SiTerminateSessionRequest.model_validate(params)
|
|
150
|
+
except ValidationError as e:
|
|
151
|
+
return NotImplementedResponse(
|
|
152
|
+
supported=False,
|
|
153
|
+
reason=f"Invalid request: {e}",
|
|
154
|
+
error=Error(code="VALIDATION_ERROR", message=str(e)),
|
|
155
|
+
)
|
|
156
|
+
return await self.handle_si_terminate_session(request, context)
|
|
157
|
+
|
|
158
|
+
# ========================================================================
|
|
159
|
+
# Abstract handlers - Implement these in subclasses
|
|
160
|
+
# ========================================================================
|
|
161
|
+
|
|
162
|
+
@abstractmethod
|
|
163
|
+
async def handle_si_get_offering(
|
|
164
|
+
self,
|
|
165
|
+
request: SiGetOfferingRequest,
|
|
166
|
+
context: ToolContext | None = None,
|
|
167
|
+
) -> SiGetOfferingResponse:
|
|
168
|
+
"""Handle get offering request.
|
|
169
|
+
|
|
170
|
+
Must be implemented by Sponsored Intelligence agents.
|
|
171
|
+
|
|
172
|
+
Args:
|
|
173
|
+
request: Validated SI offering request
|
|
174
|
+
context: Optional tool context
|
|
175
|
+
|
|
176
|
+
Returns:
|
|
177
|
+
SI offering response with capabilities and pricing
|
|
178
|
+
"""
|
|
179
|
+
...
|
|
180
|
+
|
|
181
|
+
@abstractmethod
|
|
182
|
+
async def handle_si_initiate_session(
|
|
183
|
+
self,
|
|
184
|
+
request: SiInitiateSessionRequest,
|
|
185
|
+
context: ToolContext | None = None,
|
|
186
|
+
) -> SiInitiateSessionResponse:
|
|
187
|
+
"""Handle initiate session request.
|
|
188
|
+
|
|
189
|
+
Must be implemented by Sponsored Intelligence agents.
|
|
190
|
+
|
|
191
|
+
Args:
|
|
192
|
+
request: Validated session initiation request
|
|
193
|
+
context: Optional tool context
|
|
194
|
+
|
|
195
|
+
Returns:
|
|
196
|
+
Session initiation response with session ID
|
|
197
|
+
"""
|
|
198
|
+
...
|
|
199
|
+
|
|
200
|
+
@abstractmethod
|
|
201
|
+
async def handle_si_send_message(
|
|
202
|
+
self,
|
|
203
|
+
request: SiSendMessageRequest,
|
|
204
|
+
context: ToolContext | None = None,
|
|
205
|
+
) -> SiSendMessageResponse:
|
|
206
|
+
"""Handle send message request.
|
|
207
|
+
|
|
208
|
+
Must be implemented by Sponsored Intelligence agents.
|
|
209
|
+
|
|
210
|
+
Args:
|
|
211
|
+
request: Validated message request with session ID and content
|
|
212
|
+
context: Optional tool context
|
|
213
|
+
|
|
214
|
+
Returns:
|
|
215
|
+
Message response with AI-generated content
|
|
216
|
+
"""
|
|
217
|
+
...
|
|
218
|
+
|
|
219
|
+
@abstractmethod
|
|
220
|
+
async def handle_si_terminate_session(
|
|
221
|
+
self,
|
|
222
|
+
request: SiTerminateSessionRequest,
|
|
223
|
+
context: ToolContext | None = None,
|
|
224
|
+
) -> SiTerminateSessionResponse:
|
|
225
|
+
"""Handle terminate session request.
|
|
226
|
+
|
|
227
|
+
Must be implemented by Sponsored Intelligence agents.
|
|
228
|
+
|
|
229
|
+
Args:
|
|
230
|
+
request: Validated session termination request
|
|
231
|
+
context: Optional tool context
|
|
232
|
+
|
|
233
|
+
Returns:
|
|
234
|
+
Termination response with session summary
|
|
235
|
+
"""
|
|
236
|
+
...
|
|
237
|
+
|
|
238
|
+
# ========================================================================
|
|
239
|
+
# Non-SI Operations - Return 'not supported'
|
|
240
|
+
# ========================================================================
|
|
241
|
+
|
|
242
|
+
async def get_products(
|
|
243
|
+
self, params: dict[str, Any], context: ToolContext | None = None
|
|
244
|
+
) -> NotImplementedResponse:
|
|
245
|
+
"""Not supported by Sponsored Intelligence agents."""
|
|
246
|
+
return not_supported(
|
|
247
|
+
"get_products is not supported by Sponsored Intelligence agents. "
|
|
248
|
+
"This agent handles conversational AI sponsorship, not product catalog operations."
|
|
249
|
+
)
|
|
250
|
+
|
|
251
|
+
async def list_creative_formats(
|
|
252
|
+
self, params: dict[str, Any], context: ToolContext | None = None
|
|
253
|
+
) -> NotImplementedResponse:
|
|
254
|
+
"""Not supported by Sponsored Intelligence agents."""
|
|
255
|
+
return not_supported(
|
|
256
|
+
"list_creative_formats is not supported by Sponsored Intelligence agents."
|
|
257
|
+
)
|
|
258
|
+
|
|
259
|
+
async def list_authorized_properties(
|
|
260
|
+
self, params: dict[str, Any], context: ToolContext | None = None
|
|
261
|
+
) -> NotImplementedResponse:
|
|
262
|
+
"""Not supported by Sponsored Intelligence agents."""
|
|
263
|
+
return not_supported(
|
|
264
|
+
"list_authorized_properties is not supported by Sponsored Intelligence agents."
|
|
265
|
+
)
|
|
266
|
+
|
|
267
|
+
async def sync_creatives(
|
|
268
|
+
self, params: dict[str, Any], context: ToolContext | None = None
|
|
269
|
+
) -> NotImplementedResponse:
|
|
270
|
+
"""Not supported by Sponsored Intelligence agents."""
|
|
271
|
+
return not_supported(
|
|
272
|
+
"sync_creatives is not supported by Sponsored Intelligence agents."
|
|
273
|
+
)
|
|
274
|
+
|
|
275
|
+
async def list_creatives(
|
|
276
|
+
self, params: dict[str, Any], context: ToolContext | None = None
|
|
277
|
+
) -> NotImplementedResponse:
|
|
278
|
+
"""Not supported by Sponsored Intelligence agents."""
|
|
279
|
+
return not_supported(
|
|
280
|
+
"list_creatives is not supported by Sponsored Intelligence agents."
|
|
281
|
+
)
|
|
282
|
+
|
|
283
|
+
async def build_creative(
|
|
284
|
+
self, params: dict[str, Any], context: ToolContext | None = None
|
|
285
|
+
) -> NotImplementedResponse:
|
|
286
|
+
"""Not supported by Sponsored Intelligence agents."""
|
|
287
|
+
return not_supported(
|
|
288
|
+
"build_creative is not supported by Sponsored Intelligence agents."
|
|
289
|
+
)
|
|
290
|
+
|
|
291
|
+
async def create_media_buy(
|
|
292
|
+
self, params: dict[str, Any], context: ToolContext | None = None
|
|
293
|
+
) -> NotImplementedResponse:
|
|
294
|
+
"""Not supported by Sponsored Intelligence agents."""
|
|
295
|
+
return not_supported(
|
|
296
|
+
"create_media_buy is not supported by Sponsored Intelligence agents. "
|
|
297
|
+
"SI sessions are initiated via si_initiate_session, not media buys."
|
|
298
|
+
)
|
|
299
|
+
|
|
300
|
+
async def update_media_buy(
|
|
301
|
+
self, params: dict[str, Any], context: ToolContext | None = None
|
|
302
|
+
) -> NotImplementedResponse:
|
|
303
|
+
"""Not supported by Sponsored Intelligence agents."""
|
|
304
|
+
return not_supported(
|
|
305
|
+
"update_media_buy is not supported by Sponsored Intelligence agents."
|
|
306
|
+
)
|
|
307
|
+
|
|
308
|
+
async def get_media_buy_delivery(
|
|
309
|
+
self, params: dict[str, Any], context: ToolContext | None = None
|
|
310
|
+
) -> NotImplementedResponse:
|
|
311
|
+
"""Not supported by Sponsored Intelligence agents."""
|
|
312
|
+
return not_supported(
|
|
313
|
+
"get_media_buy_delivery is not supported by Sponsored Intelligence agents."
|
|
314
|
+
)
|
|
315
|
+
|
|
316
|
+
async def get_signals(
|
|
317
|
+
self, params: dict[str, Any], context: ToolContext | None = None
|
|
318
|
+
) -> NotImplementedResponse:
|
|
319
|
+
"""Not supported by Sponsored Intelligence agents."""
|
|
320
|
+
return not_supported(
|
|
321
|
+
"get_signals is not supported by Sponsored Intelligence agents."
|
|
322
|
+
)
|
|
323
|
+
|
|
324
|
+
async def activate_signal(
|
|
325
|
+
self, params: dict[str, Any], context: ToolContext | None = None
|
|
326
|
+
) -> NotImplementedResponse:
|
|
327
|
+
"""Not supported by Sponsored Intelligence agents."""
|
|
328
|
+
return not_supported(
|
|
329
|
+
"activate_signal is not supported by Sponsored Intelligence agents."
|
|
330
|
+
)
|
|
331
|
+
|
|
332
|
+
async def provide_performance_feedback(
|
|
333
|
+
self, params: dict[str, Any], context: ToolContext | None = None
|
|
334
|
+
) -> NotImplementedResponse:
|
|
335
|
+
"""Not supported by Sponsored Intelligence agents."""
|
|
336
|
+
return not_supported(
|
|
337
|
+
"provide_performance_feedback is not supported by Sponsored Intelligence agents."
|
|
338
|
+
)
|
|
339
|
+
|
|
340
|
+
# ========================================================================
|
|
341
|
+
# V3 Content Standards - Not supported
|
|
342
|
+
# ========================================================================
|
|
343
|
+
|
|
344
|
+
async def create_content_standards(
|
|
345
|
+
self, params: dict[str, Any], context: ToolContext | None = None
|
|
346
|
+
) -> NotImplementedResponse:
|
|
347
|
+
"""Not supported by Sponsored Intelligence agents."""
|
|
348
|
+
return not_supported(
|
|
349
|
+
"create_content_standards is not supported by Sponsored Intelligence agents. "
|
|
350
|
+
"Use a Content Standards agent for content calibration."
|
|
351
|
+
)
|
|
352
|
+
|
|
353
|
+
async def get_content_standards(
|
|
354
|
+
self, params: dict[str, Any], context: ToolContext | None = None
|
|
355
|
+
) -> NotImplementedResponse:
|
|
356
|
+
"""Not supported by Sponsored Intelligence agents."""
|
|
357
|
+
return not_supported(
|
|
358
|
+
"get_content_standards is not supported by Sponsored Intelligence agents."
|
|
359
|
+
)
|
|
360
|
+
|
|
361
|
+
async def list_content_standards(
|
|
362
|
+
self, params: dict[str, Any], context: ToolContext | None = None
|
|
363
|
+
) -> NotImplementedResponse:
|
|
364
|
+
"""Not supported by Sponsored Intelligence agents."""
|
|
365
|
+
return not_supported(
|
|
366
|
+
"list_content_standards is not supported by Sponsored Intelligence agents."
|
|
367
|
+
)
|
|
368
|
+
|
|
369
|
+
async def update_content_standards(
|
|
370
|
+
self, params: dict[str, Any], context: ToolContext | None = None
|
|
371
|
+
) -> NotImplementedResponse:
|
|
372
|
+
"""Not supported by Sponsored Intelligence agents."""
|
|
373
|
+
return not_supported(
|
|
374
|
+
"update_content_standards is not supported by Sponsored Intelligence agents."
|
|
375
|
+
)
|
|
376
|
+
|
|
377
|
+
async def calibrate_content(
|
|
378
|
+
self, params: dict[str, Any], context: ToolContext | None = None
|
|
379
|
+
) -> NotImplementedResponse:
|
|
380
|
+
"""Not supported by Sponsored Intelligence agents."""
|
|
381
|
+
return not_supported(
|
|
382
|
+
"calibrate_content is not supported by Sponsored Intelligence agents."
|
|
383
|
+
)
|
|
384
|
+
|
|
385
|
+
async def validate_content_delivery(
|
|
386
|
+
self, params: dict[str, Any], context: ToolContext | None = None
|
|
387
|
+
) -> NotImplementedResponse:
|
|
388
|
+
"""Not supported by Sponsored Intelligence agents."""
|
|
389
|
+
return not_supported(
|
|
390
|
+
"validate_content_delivery is not supported by Sponsored Intelligence agents."
|
|
391
|
+
)
|
|
392
|
+
|
|
393
|
+
async def get_media_buy_artifacts(
|
|
394
|
+
self, params: dict[str, Any], context: ToolContext | None = None
|
|
395
|
+
) -> NotImplementedResponse:
|
|
396
|
+
"""Not supported by Sponsored Intelligence agents."""
|
|
397
|
+
return not_supported(
|
|
398
|
+
"get_media_buy_artifacts is not supported by Sponsored Intelligence agents."
|
|
399
|
+
)
|
|
400
|
+
|
|
401
|
+
# ========================================================================
|
|
402
|
+
# V3 Governance (Property Lists) - Not supported
|
|
403
|
+
# ========================================================================
|
|
404
|
+
|
|
405
|
+
async def create_property_list(
|
|
406
|
+
self, params: dict[str, Any], context: ToolContext | None = None
|
|
407
|
+
) -> NotImplementedResponse:
|
|
408
|
+
"""Not supported by Sponsored Intelligence agents."""
|
|
409
|
+
return not_supported(
|
|
410
|
+
"create_property_list is not supported by Sponsored Intelligence agents. "
|
|
411
|
+
"Use a Governance agent for property list operations."
|
|
412
|
+
)
|
|
413
|
+
|
|
414
|
+
async def get_property_list(
|
|
415
|
+
self, params: dict[str, Any], context: ToolContext | None = None
|
|
416
|
+
) -> NotImplementedResponse:
|
|
417
|
+
"""Not supported by Sponsored Intelligence agents."""
|
|
418
|
+
return not_supported(
|
|
419
|
+
"get_property_list is not supported by Sponsored Intelligence agents."
|
|
420
|
+
)
|
|
421
|
+
|
|
422
|
+
async def list_property_lists(
|
|
423
|
+
self, params: dict[str, Any], context: ToolContext | None = None
|
|
424
|
+
) -> NotImplementedResponse:
|
|
425
|
+
"""Not supported by Sponsored Intelligence agents."""
|
|
426
|
+
return not_supported(
|
|
427
|
+
"list_property_lists is not supported by Sponsored Intelligence agents."
|
|
428
|
+
)
|
|
429
|
+
|
|
430
|
+
async def update_property_list(
|
|
431
|
+
self, params: dict[str, Any], context: ToolContext | None = None
|
|
432
|
+
) -> NotImplementedResponse:
|
|
433
|
+
"""Not supported by Sponsored Intelligence agents."""
|
|
434
|
+
return not_supported(
|
|
435
|
+
"update_property_list is not supported by Sponsored Intelligence agents."
|
|
436
|
+
)
|
|
437
|
+
|
|
438
|
+
async def delete_property_list(
|
|
439
|
+
self, params: dict[str, Any], context: ToolContext | None = None
|
|
440
|
+
) -> NotImplementedResponse:
|
|
441
|
+
"""Not supported by Sponsored Intelligence agents."""
|
|
442
|
+
return not_supported(
|
|
443
|
+
"delete_property_list is not supported by Sponsored Intelligence agents."
|
|
444
|
+
)
|