adcp 2.18.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 +87 -1
- 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 -18
- adcp/types/_generated.py +419 -44
- adcp/types/aliases.py +13 -20
- adcp/types/base.py +1 -1
- adcp/types/generated_poc/adagents.py +103 -6
- 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 +1 -1
- adcp/types/generated_poc/core/assets/audio_asset.py +1 -1
- adcp/types/generated_poc/core/assets/css_asset.py +1 -1
- adcp/types/generated_poc/core/assets/daast_asset.py +1 -1
- adcp/types/generated_poc/core/assets/html_asset.py +1 -1
- adcp/types/generated_poc/core/assets/image_asset.py +1 -1
- adcp/types/generated_poc/core/assets/javascript_asset.py +1 -1
- adcp/types/generated_poc/core/assets/text_asset.py +1 -1
- adcp/types/generated_poc/core/assets/url_asset.py +1 -1
- adcp/types/generated_poc/core/assets/vast_asset.py +1 -1
- adcp/types/generated_poc/core/assets/video_asset.py +1 -1
- adcp/types/generated_poc/core/assets/webhook_asset.py +1 -1
- adcp/types/generated_poc/core/async_response_data.py +1 -1
- adcp/types/generated_poc/core/brand_manifest.py +68 -5
- adcp/types/generated_poc/core/brand_manifest_ref.py +1 -1
- adcp/types/generated_poc/core/context.py +1 -1
- adcp/types/generated_poc/core/creative_asset.py +8 -7
- adcp/types/generated_poc/core/creative_assignment.py +1 -1
- adcp/types/generated_poc/core/creative_filters.py +4 -14
- adcp/types/generated_poc/core/creative_manifest.py +1 -1
- adcp/types/generated_poc/core/creative_policy.py +1 -1
- adcp/types/generated_poc/core/delivery_metrics.py +1 -1
- adcp/types/generated_poc/core/deployment.py +1 -1
- adcp/types/generated_poc/core/destination.py +1 -1
- adcp/types/generated_poc/core/error.py +1 -1
- adcp/types/generated_poc/core/ext.py +1 -1
- adcp/types/generated_poc/core/format.py +6 -5
- adcp/types/generated_poc/core/format_id.py +1 -1
- adcp/types/generated_poc/core/frequency_cap.py +1 -1
- adcp/types/generated_poc/core/identifier.py +27 -0
- adcp/types/generated_poc/core/mcp_webhook_payload.py +1 -1
- adcp/types/generated_poc/core/measurement.py +1 -1
- adcp/types/generated_poc/core/media_buy.py +1 -1
- 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 +1 -1
- adcp/types/generated_poc/core/performance_feedback.py +1 -1
- adcp/types/generated_poc/core/placement.py +1 -1
- adcp/types/generated_poc/core/pricing_option.py +8 -14
- adcp/types/generated_poc/core/product.py +1 -1
- adcp/types/generated_poc/core/product_allocation.py +48 -0
- adcp/types/generated_poc/core/product_filters.py +72 -7
- adcp/types/generated_poc/core/promoted_offerings.py +12 -21
- adcp/types/generated_poc/core/promoted_products.py +1 -1
- adcp/types/generated_poc/core/property.py +1 -1
- adcp/types/generated_poc/core/property_id.py +1 -1
- adcp/types/generated_poc/core/property_list_ref.py +26 -0
- adcp/types/generated_poc/core/property_tag.py +1 -1
- adcp/types/generated_poc/core/proposal.py +64 -0
- adcp/types/generated_poc/core/protocol_envelope.py +1 -1
- adcp/types/generated_poc/core/publisher_property_selector.py +1 -1
- adcp/types/generated_poc/core/push_notification_config.py +1 -1
- adcp/types/generated_poc/core/reporting_capabilities.py +1 -1
- adcp/types/generated_poc/core/reporting_webhook.py +70 -0
- adcp/types/generated_poc/core/response.py +1 -1
- adcp/types/generated_poc/core/signal_filters.py +1 -1
- adcp/types/generated_poc/core/start_timing.py +4 -4
- adcp/types/generated_poc/core/sub_asset.py +1 -1
- adcp/types/generated_poc/core/targeting.py +55 -14
- adcp/types/generated_poc/creative/list_creative_formats_request.py +1 -1
- adcp/types/generated_poc/creative/list_creative_formats_response.py +1 -1
- adcp/types/generated_poc/creative/preview_creative_request.py +1 -1
- adcp/types/generated_poc/creative/preview_creative_response.py +3 -2
- adcp/types/generated_poc/creative/preview_render.py +1 -1
- adcp/types/generated_poc/enums/adcp_domain.py +3 -1
- adcp/types/generated_poc/enums/asset_content_type.py +1 -1
- adcp/types/generated_poc/enums/auth_scheme.py +1 -1
- adcp/types/generated_poc/enums/available_metric.py +1 -1
- adcp/types/generated_poc/enums/channels.py +18 -8
- adcp/types/generated_poc/enums/co_branding_requirement.py +1 -1
- adcp/types/generated_poc/enums/creative_action.py +1 -1
- adcp/types/generated_poc/enums/creative_agent_capability.py +1 -1
- adcp/types/generated_poc/enums/creative_sort_field.py +1 -1
- adcp/types/generated_poc/enums/creative_status.py +2 -1
- adcp/types/generated_poc/enums/daast_tracking_event.py +1 -1
- adcp/types/generated_poc/enums/daast_version.py +1 -1
- adcp/types/generated_poc/enums/delivery_type.py +1 -1
- adcp/types/generated_poc/enums/dimension_unit.py +1 -1
- adcp/types/generated_poc/enums/feed_format.py +1 -1
- adcp/types/generated_poc/enums/feedback_source.py +1 -1
- adcp/types/generated_poc/enums/format_category.py +1 -1
- adcp/types/generated_poc/enums/format_id_parameter.py +1 -1
- adcp/types/generated_poc/enums/frequency_cap_scope.py +1 -1
- adcp/types/generated_poc/enums/geo_level.py +14 -0
- adcp/types/generated_poc/enums/history_entry_type.py +1 -1
- adcp/types/generated_poc/enums/http_method.py +1 -1
- adcp/types/generated_poc/enums/identifier_types.py +1 -1
- adcp/types/generated_poc/enums/javascript_module_type.py +1 -1
- adcp/types/generated_poc/enums/landing_page_requirement.py +1 -1
- adcp/types/generated_poc/enums/markdown_flavor.py +1 -1
- adcp/types/generated_poc/enums/media_buy_status.py +1 -1
- adcp/types/generated_poc/enums/metric_type.py +1 -1
- adcp/types/generated_poc/enums/metro_system.py +15 -0
- adcp/types/generated_poc/enums/notification_type.py +1 -1
- adcp/types/generated_poc/enums/pacing.py +1 -1
- adcp/types/generated_poc/enums/postal_system.py +19 -0
- adcp/types/generated_poc/enums/preview_output_format.py +1 -1
- adcp/types/generated_poc/enums/pricing_model.py +1 -1
- adcp/types/generated_poc/enums/property_type.py +2 -1
- adcp/types/generated_poc/enums/publisher_identifier_types.py +1 -1
- adcp/types/generated_poc/enums/reporting_frequency.py +1 -1
- adcp/types/generated_poc/enums/signal_catalog_type.py +1 -1
- adcp/types/generated_poc/enums/sort_direction.py +1 -1
- adcp/types/generated_poc/enums/task_status.py +1 -1
- adcp/types/generated_poc/enums/task_type.py +7 -1
- adcp/types/generated_poc/enums/update_frequency.py +1 -1
- adcp/types/generated_poc/enums/url_asset_type.py +1 -1
- adcp/types/generated_poc/enums/validation_mode.py +1 -1
- adcp/types/generated_poc/enums/vast_tracking_event.py +1 -1
- adcp/types/generated_poc/enums/vast_version.py +1 -1
- adcp/types/generated_poc/enums/webhook_response_type.py +1 -1
- adcp/types/generated_poc/enums/webhook_security_method.py +1 -1
- adcp/types/generated_poc/extensions/__init__.py +3 -0
- adcp/types/generated_poc/extensions/extension_meta.py +58 -0
- adcp/types/generated_poc/media_buy/build_creative_request.py +1 -1
- adcp/types/generated_poc/media_buy/build_creative_response.py +1 -1
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +1 -1
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +1 -1
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +1 -1
- adcp/types/generated_poc/media_buy/create_media_buy_request.py +54 -26
- adcp/types/generated_poc/media_buy/create_media_buy_response.py +1 -1
- adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +1 -1
- adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +1 -1
- adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +1 -1
- adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +1 -1
- adcp/types/generated_poc/media_buy/get_products_async_response_working.py +1 -1
- adcp/types/generated_poc/media_buy/get_products_request.py +18 -3
- adcp/types/generated_poc/media_buy/get_products_response.py +14 -2
- adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +1 -1
- adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +2 -2
- adcp/types/generated_poc/media_buy/list_creative_formats_request.py +1 -1
- adcp/types/generated_poc/media_buy/list_creative_formats_response.py +1 -1
- adcp/types/generated_poc/media_buy/list_creatives_request.py +2 -2
- adcp/types/generated_poc/media_buy/list_creatives_response.py +7 -10
- adcp/types/generated_poc/media_buy/package_request.py +15 -6
- adcp/types/generated_poc/media_buy/package_update.py +119 -0
- adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +1 -1
- adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +1 -1
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +1 -1
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +1 -1
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +1 -1
- adcp/types/generated_poc/media_buy/sync_creatives_request.py +1 -1
- adcp/types/generated_poc/media_buy/sync_creatives_response.py +1 -1
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +1 -1
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +1 -1
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +1 -1
- adcp/types/generated_poc/media_buy/update_media_buy_request.py +20 -108
- adcp/types/generated_poc/media_buy/update_media_buy_response.py +1 -1
- adcp/types/generated_poc/pricing_options/cpc_option.py +35 -10
- adcp/types/generated_poc/pricing_options/cpcv_option.py +35 -10
- adcp/types/generated_poc/pricing_options/{cpm_auction_option.py → cpm_option.py} +23 -19
- adcp/types/generated_poc/pricing_options/cpp_option.py +39 -16
- adcp/types/generated_poc/pricing_options/cpv_option.py +37 -18
- adcp/types/generated_poc/pricing_options/flat_rate_option.py +45 -39
- adcp/types/generated_poc/pricing_options/{vcpm_auction_option.py → vcpm_option.py} +23 -14
- adcp/types/generated_poc/property/__init__.py +3 -0
- adcp/types/generated_poc/property/base_property_source.py +86 -0
- adcp/types/generated_poc/property/create_property_list_request.py +43 -0
- adcp/types/generated_poc/property/create_property_list_response.py +27 -0
- adcp/types/generated_poc/property/delete_property_list_request.py +22 -0
- adcp/types/generated_poc/property/delete_property_list_response.py +21 -0
- adcp/types/generated_poc/property/feature_requirement.py +42 -0
- adcp/types/generated_poc/property/get_property_list_request.py +34 -0
- adcp/types/generated_poc/property/get_property_list_response.py +61 -0
- adcp/types/generated_poc/property/list_property_lists_request.py +29 -0
- adcp/types/generated_poc/property/list_property_lists_response.py +39 -0
- adcp/types/generated_poc/property/property_error.py +33 -0
- adcp/types/generated_poc/property/property_feature.py +22 -0
- adcp/types/generated_poc/property/property_feature_definition.py +80 -0
- adcp/types/generated_poc/property/property_list.py +62 -0
- adcp/types/generated_poc/property/property_list_changed_webhook.py +51 -0
- adcp/types/generated_poc/property/property_list_filters.py +47 -0
- adcp/types/generated_poc/property/update_property_list_request.py +46 -0
- adcp/types/generated_poc/property/update_property_list_response.py +21 -0
- 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 +18 -5
- adcp/types/generated_poc/signals/activate_signal_request.py +1 -1
- adcp/types/generated_poc/signals/activate_signal_response.py +1 -1
- adcp/types/generated_poc/signals/get_signals_request.py +1 -1
- adcp/types/generated_poc/signals/get_signals_response.py +1 -1
- 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.18.0.dist-info → adcp-3.0.0.dist-info}/METADATA +1 -1
- adcp-3.0.0.dist-info/RECORD +264 -0
- {adcp-2.18.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_fixed_option.py +0 -43
- adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +0 -47
- adcp-2.18.0.dist-info/RECORD +0 -195
- {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/entry_points.txt +0 -0
- {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/licenses/LICENSE +0 -0
- {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/content_standards.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import Field
|
|
11
|
+
|
|
12
|
+
from ..core import ext as ext_1
|
|
13
|
+
from ..enums import channels
|
|
14
|
+
from . import artifact
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class CalibrationExemplars(AdCPBaseModel):
|
|
18
|
+
fail: Annotated[
|
|
19
|
+
list[artifact.Artifact] | None,
|
|
20
|
+
Field(description='Artifacts that fail the content standards'),
|
|
21
|
+
] = None
|
|
22
|
+
pass_: Annotated[
|
|
23
|
+
list[artifact.Artifact] | None,
|
|
24
|
+
Field(alias='pass', description='Artifacts that pass the content standards'),
|
|
25
|
+
] = None
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class ContentStandards(AdCPBaseModel):
|
|
29
|
+
calibration_exemplars: Annotated[
|
|
30
|
+
CalibrationExemplars | None,
|
|
31
|
+
Field(
|
|
32
|
+
description='Training/test set to calibrate policy interpretation. Provides concrete examples of pass/fail decisions.'
|
|
33
|
+
),
|
|
34
|
+
] = None
|
|
35
|
+
channels_any: Annotated[
|
|
36
|
+
list[channels.MediaChannel] | None,
|
|
37
|
+
Field(
|
|
38
|
+
description='Advertising channels. Standards apply to ANY of the listed channels (OR logic).'
|
|
39
|
+
),
|
|
40
|
+
] = None
|
|
41
|
+
countries_all: Annotated[
|
|
42
|
+
list[str] | None,
|
|
43
|
+
Field(
|
|
44
|
+
description='ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic).'
|
|
45
|
+
),
|
|
46
|
+
] = None
|
|
47
|
+
ext: ext_1.ExtensionObject | None = None
|
|
48
|
+
languages_any: Annotated[
|
|
49
|
+
list[str] | None,
|
|
50
|
+
Field(
|
|
51
|
+
description="BCP 47 language tags (e.g., 'en', 'de', 'fr'). Standards apply to content in ANY of these languages (OR logic). Content in unlisted languages is not covered by these standards.",
|
|
52
|
+
min_length=1,
|
|
53
|
+
),
|
|
54
|
+
] = None
|
|
55
|
+
name: Annotated[
|
|
56
|
+
str | None, Field(description='Human-readable name for this standards configuration')
|
|
57
|
+
] = None
|
|
58
|
+
policy: Annotated[
|
|
59
|
+
str | None,
|
|
60
|
+
Field(
|
|
61
|
+
description='Natural language policy describing acceptable and unacceptable content contexts. Used by LLMs and human reviewers to make judgments.'
|
|
62
|
+
),
|
|
63
|
+
] = None
|
|
64
|
+
standards_id: Annotated[
|
|
65
|
+
str, Field(description='Unique identifier for this standards configuration')
|
|
66
|
+
]
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/create_content_standards_request.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated, Literal
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import AnyUrl, ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
from ..core import context as context_1
|
|
13
|
+
from ..core import ext as ext_1
|
|
14
|
+
from ..enums import channels
|
|
15
|
+
from . import artifact
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class Fail(AdCPBaseModel):
|
|
19
|
+
language: Annotated[
|
|
20
|
+
str | None, Field(description='BCP 47 language tag for content at this URL')
|
|
21
|
+
] = None
|
|
22
|
+
type: Annotated[Literal['url'], Field(description='Indicates this is a URL reference')]
|
|
23
|
+
value: Annotated[
|
|
24
|
+
AnyUrl,
|
|
25
|
+
Field(
|
|
26
|
+
description="Full URL to a specific page (e.g., 'https://news.example.com/controversial-article')"
|
|
27
|
+
),
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class Pass(AdCPBaseModel):
|
|
32
|
+
language: Annotated[
|
|
33
|
+
str | None, Field(description='BCP 47 language tag for content at this URL')
|
|
34
|
+
] = None
|
|
35
|
+
type: Annotated[Literal['url'], Field(description='Indicates this is a URL reference')]
|
|
36
|
+
value: Annotated[
|
|
37
|
+
AnyUrl,
|
|
38
|
+
Field(
|
|
39
|
+
description="Full URL to a specific page (e.g., 'https://espn.com/nba/story/_/id/12345/lakers-win')"
|
|
40
|
+
),
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class Scope(AdCPBaseModel):
|
|
45
|
+
channels_any: Annotated[
|
|
46
|
+
list[channels.MediaChannel] | None,
|
|
47
|
+
Field(
|
|
48
|
+
description='Advertising channels. Standards apply to ANY of the listed channels (OR logic).'
|
|
49
|
+
),
|
|
50
|
+
] = None
|
|
51
|
+
countries_all: Annotated[
|
|
52
|
+
list[str] | None,
|
|
53
|
+
Field(
|
|
54
|
+
description='ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic).'
|
|
55
|
+
),
|
|
56
|
+
] = None
|
|
57
|
+
description: Annotated[
|
|
58
|
+
str | None, Field(description='Human-readable description of this scope')
|
|
59
|
+
] = None
|
|
60
|
+
languages_any: Annotated[
|
|
61
|
+
list[str],
|
|
62
|
+
Field(
|
|
63
|
+
description="BCP 47 language tags (e.g., 'en', 'de', 'fr'). Standards apply to content in ANY of these languages (OR logic). Content in unlisted languages is not covered by these standards.",
|
|
64
|
+
min_length=1,
|
|
65
|
+
),
|
|
66
|
+
]
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class CalibrationExemplars(AdCPBaseModel):
|
|
70
|
+
fail: Annotated[
|
|
71
|
+
list[Fail | artifact.Artifact] | None, Field(description='Content that fails the standards')
|
|
72
|
+
] = None
|
|
73
|
+
pass_: Annotated[
|
|
74
|
+
list[Pass | artifact.Artifact] | None,
|
|
75
|
+
Field(alias='pass', description='Content that passes the standards'),
|
|
76
|
+
] = None
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
class CreateContentStandardsRequest(AdCPBaseModel):
|
|
80
|
+
model_config = ConfigDict(
|
|
81
|
+
extra='allow',
|
|
82
|
+
)
|
|
83
|
+
calibration_exemplars: Annotated[
|
|
84
|
+
CalibrationExemplars | None,
|
|
85
|
+
Field(
|
|
86
|
+
description='Training/test set to calibrate policy interpretation. Use URL references for pages to be fetched and analyzed, or full artifacts for pre-extracted content.'
|
|
87
|
+
),
|
|
88
|
+
] = None
|
|
89
|
+
context: context_1.ContextObject | None = None
|
|
90
|
+
ext: ext_1.ExtensionObject | None = None
|
|
91
|
+
policy: Annotated[
|
|
92
|
+
str,
|
|
93
|
+
Field(
|
|
94
|
+
description='Natural language policy describing acceptable and unacceptable content contexts. Used by LLMs and human reviewers to make judgments.'
|
|
95
|
+
),
|
|
96
|
+
]
|
|
97
|
+
scope: Annotated[Scope, Field(description='Where this standards configuration applies')]
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/create_content_standards_response.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated, Any
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import Field, RootModel
|
|
11
|
+
|
|
12
|
+
from ..core import context as context_1
|
|
13
|
+
from ..core import error
|
|
14
|
+
from ..core import ext as ext_1
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class CreateContentStandardsResponse1(AdCPBaseModel):
|
|
18
|
+
context: context_1.ContextObject | None = None
|
|
19
|
+
errors: Annotated[
|
|
20
|
+
Any | None, Field(description='Field must not be present in success response')
|
|
21
|
+
] = None
|
|
22
|
+
ext: ext_1.ExtensionObject | None = None
|
|
23
|
+
standards_id: Annotated[
|
|
24
|
+
str, Field(description='Unique identifier for the created standards configuration')
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class CreateContentStandardsResponse2(AdCPBaseModel):
|
|
29
|
+
conflicting_standards_id: Annotated[
|
|
30
|
+
str | None,
|
|
31
|
+
Field(
|
|
32
|
+
description='If the error is a scope conflict, the ID of the existing standards that conflict'
|
|
33
|
+
),
|
|
34
|
+
] = None
|
|
35
|
+
context: context_1.ContextObject | None = None
|
|
36
|
+
errors: list[error.Error]
|
|
37
|
+
ext: ext_1.ExtensionObject | None = None
|
|
38
|
+
standards_id: Annotated[
|
|
39
|
+
Any | None, Field(description='Field must not be present in error response')
|
|
40
|
+
] = None
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class CreateContentStandardsResponse(
|
|
44
|
+
RootModel[CreateContentStandardsResponse1 | CreateContentStandardsResponse2]
|
|
45
|
+
):
|
|
46
|
+
root: Annotated[
|
|
47
|
+
CreateContentStandardsResponse1 | CreateContentStandardsResponse2,
|
|
48
|
+
Field(
|
|
49
|
+
description='Response payload for creating a content standards configuration',
|
|
50
|
+
title='Create Content Standards Response',
|
|
51
|
+
),
|
|
52
|
+
]
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/get_content_standards_request.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import Field
|
|
11
|
+
|
|
12
|
+
from ..core import context as context_1
|
|
13
|
+
from ..core import ext as ext_1
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class GetContentStandardsRequest(AdCPBaseModel):
|
|
17
|
+
context: context_1.ContextObject | None = None
|
|
18
|
+
ext: ext_1.ExtensionObject | None = None
|
|
19
|
+
standards_id: Annotated[
|
|
20
|
+
str, Field(description='Identifier for the standards configuration to retrieve')
|
|
21
|
+
]
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/get_content_standards_response.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated, Any
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import Field, RootModel
|
|
11
|
+
|
|
12
|
+
from ..core import context as context_1
|
|
13
|
+
from ..core import error
|
|
14
|
+
from ..core import ext as ext_1
|
|
15
|
+
from .content_standards import ContentStandards
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class GetContentStandardsResponse2(AdCPBaseModel):
|
|
19
|
+
context: context_1.ContextObject | None = None
|
|
20
|
+
errors: list[error.Error]
|
|
21
|
+
ext: ext_1.ExtensionObject | None = None
|
|
22
|
+
standards_id: Annotated[
|
|
23
|
+
Any | None, Field(description='Field must not be present in error response')
|
|
24
|
+
] = None
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class GetContentStandardsResponse1(ContentStandards):
|
|
28
|
+
context: context_1.ContextObject | None = None
|
|
29
|
+
errors: Annotated[
|
|
30
|
+
Any | None, Field(description='Field must not be present in success response')
|
|
31
|
+
] = None
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class GetContentStandardsResponse(
|
|
35
|
+
RootModel[GetContentStandardsResponse1 | GetContentStandardsResponse2]
|
|
36
|
+
):
|
|
37
|
+
root: Annotated[
|
|
38
|
+
GetContentStandardsResponse1 | GetContentStandardsResponse2,
|
|
39
|
+
Field(
|
|
40
|
+
description='Response payload with content safety policies',
|
|
41
|
+
title='Get Content Standards Response',
|
|
42
|
+
),
|
|
43
|
+
]
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/get_media_buy_artifacts_request.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
from typing import Annotated
|
|
9
|
+
|
|
10
|
+
from adcp.types.base import AdCPBaseModel
|
|
11
|
+
from pydantic import AwareDatetime, Field
|
|
12
|
+
|
|
13
|
+
from ..core import context as context_1
|
|
14
|
+
from ..core import ext as ext_1
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class Method(Enum):
|
|
18
|
+
random = 'random'
|
|
19
|
+
stratified = 'stratified'
|
|
20
|
+
recent = 'recent'
|
|
21
|
+
failures_only = 'failures_only'
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class Sampling(AdCPBaseModel):
|
|
25
|
+
method: Annotated[Method | None, Field(description='How to select the sample')] = None
|
|
26
|
+
rate: Annotated[
|
|
27
|
+
float | None,
|
|
28
|
+
Field(
|
|
29
|
+
description='Sampling rate (0-1). 1.0 = all deliveries, 0.25 = 25% sample.',
|
|
30
|
+
ge=0.0,
|
|
31
|
+
le=1.0,
|
|
32
|
+
),
|
|
33
|
+
] = None
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class TimeRange(AdCPBaseModel):
|
|
37
|
+
end: Annotated[AwareDatetime | None, Field(description='End of time range (exclusive)')] = None
|
|
38
|
+
start: Annotated[AwareDatetime | None, Field(description='Start of time range (inclusive)')] = (
|
|
39
|
+
None
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class GetMediaBuyArtifactsRequest(AdCPBaseModel):
|
|
44
|
+
context: context_1.ContextObject | None = None
|
|
45
|
+
cursor: Annotated[
|
|
46
|
+
str | None, Field(description='Pagination cursor for fetching subsequent pages')
|
|
47
|
+
] = None
|
|
48
|
+
ext: ext_1.ExtensionObject | None = None
|
|
49
|
+
limit: Annotated[
|
|
50
|
+
int | None, Field(description='Maximum artifacts to return per request', ge=1, le=10000)
|
|
51
|
+
] = 1000
|
|
52
|
+
media_buy_id: Annotated[str, Field(description='Media buy to get artifacts from')]
|
|
53
|
+
package_ids: Annotated[
|
|
54
|
+
list[str] | None, Field(description='Filter to specific packages within the media buy')
|
|
55
|
+
] = None
|
|
56
|
+
sampling: Annotated[
|
|
57
|
+
Sampling | None,
|
|
58
|
+
Field(
|
|
59
|
+
description='Sampling parameters. Defaults to the sampling rate agreed in the media buy.'
|
|
60
|
+
),
|
|
61
|
+
] = None
|
|
62
|
+
time_range: Annotated[TimeRange | None, Field(description='Filter to specific time period')] = (
|
|
63
|
+
None
|
|
64
|
+
)
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/get_media_buy_artifacts_response.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
from typing import Annotated, Any
|
|
9
|
+
|
|
10
|
+
from adcp.types.base import AdCPBaseModel
|
|
11
|
+
from pydantic import AwareDatetime, Field, RootModel
|
|
12
|
+
|
|
13
|
+
from ..core import context as context_1
|
|
14
|
+
from ..core import error
|
|
15
|
+
from ..core import ext as ext_1
|
|
16
|
+
from . import artifact as artifact_1
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class BrandContext(AdCPBaseModel):
|
|
20
|
+
brand_id: Annotated[str | None, Field(description='Brand identifier')] = None
|
|
21
|
+
sku_id: Annotated[str | None, Field(description='Product/SKU identifier if applicable')] = None
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class LocalVerdict(Enum):
|
|
25
|
+
pass_ = 'pass'
|
|
26
|
+
fail = 'fail'
|
|
27
|
+
unevaluated = 'unevaluated'
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class Pagination(AdCPBaseModel):
|
|
31
|
+
cursor: Annotated[str | None, Field(description='Cursor for fetching the next page')] = None
|
|
32
|
+
has_more: Annotated[bool | None, Field(description='Whether more results are available')] = None
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class Method(Enum):
|
|
36
|
+
random = 'random'
|
|
37
|
+
stratified = 'stratified'
|
|
38
|
+
recent = 'recent'
|
|
39
|
+
failures_only = 'failures_only'
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class SamplingInfo(AdCPBaseModel):
|
|
43
|
+
effective_rate: Annotated[float | None, Field(description='Actual sampling rate achieved')] = (
|
|
44
|
+
None
|
|
45
|
+
)
|
|
46
|
+
method: Annotated[Method | None, Field(description='Sampling method used')] = None
|
|
47
|
+
sampled_count: Annotated[
|
|
48
|
+
int | None, Field(description='Number of artifacts in this response')
|
|
49
|
+
] = None
|
|
50
|
+
total_deliveries: Annotated[
|
|
51
|
+
int | None, Field(description='Total deliveries in the time range')
|
|
52
|
+
] = None
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class GetMediaBuyArtifactsResponse2(AdCPBaseModel):
|
|
56
|
+
context: context_1.ContextObject | None = None
|
|
57
|
+
errors: list[error.Error]
|
|
58
|
+
ext: ext_1.ExtensionObject | None = None
|
|
59
|
+
media_buy_id: Annotated[
|
|
60
|
+
Any | None, Field(description='Field must not be present in error response')
|
|
61
|
+
] = None
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class Artifact(AdCPBaseModel):
|
|
65
|
+
artifact: Annotated[artifact_1.Artifact, Field(description='Full artifact with content assets')]
|
|
66
|
+
brand_context: Annotated[
|
|
67
|
+
BrandContext | None,
|
|
68
|
+
Field(
|
|
69
|
+
description='Brand information for policy evaluation. Schema TBD - placeholder for brand identifiers.'
|
|
70
|
+
),
|
|
71
|
+
] = None
|
|
72
|
+
channel: Annotated[
|
|
73
|
+
str | None, Field(description='Channel type (e.g., display, video, audio, social)')
|
|
74
|
+
] = None
|
|
75
|
+
country: Annotated[
|
|
76
|
+
str | None, Field(description='ISO 3166-1 alpha-2 country code where delivery occurred')
|
|
77
|
+
] = None
|
|
78
|
+
local_verdict: Annotated[
|
|
79
|
+
LocalVerdict | None, Field(description="Seller's local model verdict for this artifact")
|
|
80
|
+
] = None
|
|
81
|
+
package_id: Annotated[
|
|
82
|
+
str | None, Field(description='Which package this delivery belongs to')
|
|
83
|
+
] = None
|
|
84
|
+
record_id: Annotated[str, Field(description='Unique identifier for this delivery record')]
|
|
85
|
+
timestamp: Annotated[AwareDatetime | None, Field(description='When the delivery occurred')] = (
|
|
86
|
+
None
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class GetMediaBuyArtifactsResponse1(AdCPBaseModel):
|
|
91
|
+
artifacts: Annotated[
|
|
92
|
+
list[Artifact], Field(description='Delivery records with full artifact content')
|
|
93
|
+
]
|
|
94
|
+
context: context_1.ContextObject | None = None
|
|
95
|
+
errors: Annotated[
|
|
96
|
+
Any | None, Field(description='Field must not be present in success response')
|
|
97
|
+
] = None
|
|
98
|
+
ext: ext_1.ExtensionObject | None = None
|
|
99
|
+
media_buy_id: Annotated[str, Field(description='Media buy these artifacts belong to')]
|
|
100
|
+
pagination: Annotated[
|
|
101
|
+
Pagination | None, Field(description='Pagination information for large result sets')
|
|
102
|
+
] = None
|
|
103
|
+
sampling_info: Annotated[
|
|
104
|
+
SamplingInfo | None, Field(description='Information about how the sample was generated')
|
|
105
|
+
] = None
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
class GetMediaBuyArtifactsResponse(
|
|
109
|
+
RootModel[GetMediaBuyArtifactsResponse1 | GetMediaBuyArtifactsResponse2]
|
|
110
|
+
):
|
|
111
|
+
root: Annotated[
|
|
112
|
+
GetMediaBuyArtifactsResponse1 | GetMediaBuyArtifactsResponse2,
|
|
113
|
+
Field(
|
|
114
|
+
description='Response containing content artifacts from a media buy for validation',
|
|
115
|
+
title='Get Media Buy Artifacts Response',
|
|
116
|
+
),
|
|
117
|
+
]
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/list_content_standards_request.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
from ..core import context as context_1
|
|
13
|
+
from ..core import ext as ext_1
|
|
14
|
+
from ..enums import channels as channels_1
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ListContentStandardsRequest(AdCPBaseModel):
|
|
18
|
+
model_config = ConfigDict(
|
|
19
|
+
extra='allow',
|
|
20
|
+
)
|
|
21
|
+
channels: Annotated[
|
|
22
|
+
list[channels_1.MediaChannel] | None, Field(description='Filter by channel')
|
|
23
|
+
] = None
|
|
24
|
+
context: context_1.ContextObject | None = None
|
|
25
|
+
countries: Annotated[
|
|
26
|
+
list[str] | None, Field(description='Filter by ISO 3166-1 alpha-2 country codes')
|
|
27
|
+
] = None
|
|
28
|
+
ext: ext_1.ExtensionObject | None = None
|
|
29
|
+
languages: Annotated[list[str] | None, Field(description='Filter by BCP 47 language tags')] = (
|
|
30
|
+
None
|
|
31
|
+
)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/list_content_standards_response.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated, Any
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import Field, RootModel
|
|
11
|
+
|
|
12
|
+
from ..core import context as context_1
|
|
13
|
+
from ..core import error
|
|
14
|
+
from ..core import ext as ext_1
|
|
15
|
+
from . import content_standards
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class ListContentStandardsResponse2(AdCPBaseModel):
|
|
19
|
+
context: context_1.ContextObject | None = None
|
|
20
|
+
errors: list[error.Error]
|
|
21
|
+
ext: ext_1.ExtensionObject | None = None
|
|
22
|
+
standards: Annotated[
|
|
23
|
+
Any | None, Field(description='Field must not be present in error response')
|
|
24
|
+
] = None
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class ListContentStandardsResponse1(AdCPBaseModel):
|
|
28
|
+
context: context_1.ContextObject | None = None
|
|
29
|
+
errors: Annotated[
|
|
30
|
+
Any | None, Field(description='Field must not be present in success response')
|
|
31
|
+
] = None
|
|
32
|
+
ext: ext_1.ExtensionObject | None = None
|
|
33
|
+
standards: Annotated[
|
|
34
|
+
list[content_standards.ContentStandards],
|
|
35
|
+
Field(description='Array of content standards configurations matching the filter criteria'),
|
|
36
|
+
]
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class ListContentStandardsResponse(
|
|
40
|
+
RootModel[ListContentStandardsResponse1 | ListContentStandardsResponse2]
|
|
41
|
+
):
|
|
42
|
+
root: Annotated[
|
|
43
|
+
ListContentStandardsResponse1 | ListContentStandardsResponse2,
|
|
44
|
+
Field(
|
|
45
|
+
description='Response payload with list of content standards configurations',
|
|
46
|
+
title='List Content Standards Response',
|
|
47
|
+
),
|
|
48
|
+
]
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/update_content_standards_request.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated, Literal
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import AnyUrl, ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
from ..core import context as context_1
|
|
13
|
+
from ..core import ext as ext_1
|
|
14
|
+
from ..enums import channels
|
|
15
|
+
from . import artifact
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class Fail(AdCPBaseModel):
|
|
19
|
+
language: Annotated[
|
|
20
|
+
str | None, Field(description='BCP 47 language tag for content at this URL')
|
|
21
|
+
] = None
|
|
22
|
+
type: Annotated[Literal['url'], Field(description='Indicates this is a URL reference')]
|
|
23
|
+
value: Annotated[
|
|
24
|
+
AnyUrl,
|
|
25
|
+
Field(
|
|
26
|
+
description="Full URL to a specific page (e.g., 'https://news.example.com/controversial-article')"
|
|
27
|
+
),
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class Pass(AdCPBaseModel):
|
|
32
|
+
language: Annotated[
|
|
33
|
+
str | None, Field(description='BCP 47 language tag for content at this URL')
|
|
34
|
+
] = None
|
|
35
|
+
type: Annotated[Literal['url'], Field(description='Indicates this is a URL reference')]
|
|
36
|
+
value: Annotated[
|
|
37
|
+
AnyUrl,
|
|
38
|
+
Field(
|
|
39
|
+
description="Full URL to a specific page (e.g., 'https://espn.com/nba/story/_/id/12345/lakers-win')"
|
|
40
|
+
),
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class Scope(AdCPBaseModel):
|
|
45
|
+
channels_any: Annotated[
|
|
46
|
+
list[channels.MediaChannel] | None,
|
|
47
|
+
Field(
|
|
48
|
+
description='Advertising channels. Standards apply to ANY of the listed channels (OR logic).'
|
|
49
|
+
),
|
|
50
|
+
] = None
|
|
51
|
+
countries_all: Annotated[
|
|
52
|
+
list[str] | None,
|
|
53
|
+
Field(
|
|
54
|
+
description='ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic).'
|
|
55
|
+
),
|
|
56
|
+
] = None
|
|
57
|
+
description: Annotated[
|
|
58
|
+
str | None, Field(description='Human-readable description of this scope')
|
|
59
|
+
] = None
|
|
60
|
+
languages_any: Annotated[
|
|
61
|
+
list[str] | None,
|
|
62
|
+
Field(
|
|
63
|
+
description="BCP 47 language tags (e.g., 'en', 'de', 'fr'). Standards apply to content in ANY of these languages (OR logic). Content in unlisted languages is not covered by these standards.",
|
|
64
|
+
min_length=1,
|
|
65
|
+
),
|
|
66
|
+
] = None
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class CalibrationExemplars(AdCPBaseModel):
|
|
70
|
+
fail: Annotated[
|
|
71
|
+
list[Fail | artifact.Artifact] | None, Field(description='Content that fails the standards')
|
|
72
|
+
] = None
|
|
73
|
+
pass_: Annotated[
|
|
74
|
+
list[Pass | artifact.Artifact] | None,
|
|
75
|
+
Field(alias='pass', description='Content that passes the standards'),
|
|
76
|
+
] = None
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
class UpdateContentStandardsRequest(AdCPBaseModel):
|
|
80
|
+
model_config = ConfigDict(
|
|
81
|
+
extra='allow',
|
|
82
|
+
)
|
|
83
|
+
calibration_exemplars: Annotated[
|
|
84
|
+
CalibrationExemplars | None,
|
|
85
|
+
Field(
|
|
86
|
+
description='Updated training/test set to calibrate policy interpretation. Use URL references for pages to be fetched and analyzed, or full artifacts for pre-extracted content.'
|
|
87
|
+
),
|
|
88
|
+
] = None
|
|
89
|
+
context: context_1.ContextObject | None = None
|
|
90
|
+
ext: ext_1.ExtensionObject | None = None
|
|
91
|
+
policy: Annotated[
|
|
92
|
+
str | None,
|
|
93
|
+
Field(
|
|
94
|
+
description='Updated natural language policy describing acceptable and unacceptable content contexts.'
|
|
95
|
+
),
|
|
96
|
+
] = None
|
|
97
|
+
scope: Annotated[
|
|
98
|
+
Scope | None,
|
|
99
|
+
Field(description='Updated scope for where this standards configuration applies'),
|
|
100
|
+
] = None
|
|
101
|
+
standards_id: Annotated[str, Field(description='ID of the standards configuration to update')]
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/update_content_standards_response.json
|
|
3
|
+
# timestamp: 2026-01-26T11:40:01+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
from ..core import context as context_1
|
|
13
|
+
from ..core import error
|
|
14
|
+
from ..core import ext as ext_1
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class UpdateContentStandardsResponse(AdCPBaseModel):
|
|
18
|
+
model_config = ConfigDict(
|
|
19
|
+
extra='allow',
|
|
20
|
+
)
|
|
21
|
+
conflicting_standards_id: Annotated[
|
|
22
|
+
str | None,
|
|
23
|
+
Field(
|
|
24
|
+
description='If scope change conflicts with another configuration, the ID of the conflicting standards'
|
|
25
|
+
),
|
|
26
|
+
] = None
|
|
27
|
+
context: context_1.ContextObject | None = None
|
|
28
|
+
errors: Annotated[
|
|
29
|
+
list[error.Error] | None, Field(description='Errors that occurred during the update')
|
|
30
|
+
] = None
|
|
31
|
+
ext: ext_1.ExtensionObject | None = None
|
|
32
|
+
standards_id: Annotated[
|
|
33
|
+
str | None, Field(description='ID of the updated standards configuration')
|
|
34
|
+
] = None
|