From 538bd0b2f9d0242e86a7ad405e9b4c6316f095f1 Mon Sep 17 00:00:00 2001 From: scalarbot Date: Mon, 17 Aug 2026 21:34:31 +0000 Subject: [PATCH 1/3] feat(api): initial SDK generation Initial generated SDK release. Build: MKD2jiSRyFHlWoJ0M1stL --- .devcontainer/Dockerfile | 8 - .devcontainer/devcontainer.json | 43 - .github/workflows/ci.yml | 95 - .github/workflows/publish-pypi.yml | 29 - .github/workflows/release-doctor.yml | 19 - .github/workflows/sdk-ci.yml | 16 + .github/workflows/sdk-release.yml | 28 + .gitignore | 26 +- .python-version | 1 - .stats.yml | 4 - .vscode/settings.json | 3 - Brewfile | 2 - CONTRIBUTING.md | 121 - LICENSE | 2 +- README.md | 406 +- SECURITY.md | 26 +- VERSIONING.md | 7 + api.md | 1851 +- bin/check-release-environment | 17 - bin/publish-pypi | 11 - examples/.keep | 4 - examples/README.md | 0 examples/profound.ipynb | 978 - examples/pyproject.toml | 19 - openapi.augmented.json | 20835 ++++++++++ pyproject.toml | 249 +- release-please-config.json | 66 - requirements-dev.lock | 110 - scalar-sdk.manifest.json | 34307 ++++++++++++++++ scripts/bootstrap | 30 - scripts/format | 14 - scripts/lint | 22 - scripts/test | 38 - scripts/utils/ruffen-docs.py | 167 - scripts/utils/upload-artifact.sh | 27 - src/{profound => }/__init__.py | 31 +- src/{profound => }/_base_client.py | 152 +- src/{profound => }/_client.py | 735 +- src/{profound => }/_compat.py | 0 src/{profound => }/_constants.py | 6 +- src/_event_handler.py | 85 + src/{profound => }/_exceptions.py | 20 +- src/{profound => }/_files.py | 0 src/{profound => }/_models.py | 10 + src/{profound => }/_qs.py | 0 src/{profound => }/_resource.py | 2 +- src/{profound => }/_response.py | 19 +- src/_send_queue.py | 90 + src/{profound => }/_streaming.py | 61 +- src/{profound => }/_types.py | 3 +- src/{profound => }/_utils/__init__.py | 0 src/{profound => }/_utils/_compat.py | 0 src/{profound => }/_utils/_datetime_parse.py | 0 src/{profound => }/_utils/_json.py | 0 src/{profound => }/_utils/_logs.py | 0 src/{profound => }/_utils/_path.py | 0 src/{profound => }/_utils/_proxy.py | 0 src/{profound => }/_utils/_reflection.py | 0 src/{profound => }/_utils/_resources_proxy.py | 0 src/{profound => }/_utils/_streams.py | 0 src/{profound => }/_utils/_sync.py | 0 src/{profound => }/_utils/_transform.py | 0 src/{profound => }/_utils/_typing.py | 0 src/{profound => }/_utils/_utils.py | 2 +- src/_version.py | 4 + src/profound/_version.py | 4 - src/profound/lib/.keep | 4 - src/profound/resources/ads/__init__.py | 33 - src/profound/resources/ads/ads.py | 102 - .../resources/ads/openai_ads/__init__.py | 33 - .../resources/ads/openai_ads/ad_account.py | 244 - .../resources/ads/openai_ads/openai_ads.py | 102 - src/profound/resources/agents/agents.py | 827 - src/profound/resources/agents/node_types.py | 237 - src/profound/resources/documents.py | 1087 - src/profound/resources/integrations.py | 210 - .../resources/knowledge_bases/documents.py | 500 - .../resources/organizations/categories.py | 1214 - src/profound/resources/projects/__init__.py | 47 - .../resources/projects/generations.py | 302 - src/profound/resources/projects/projects.py | 884 - src/profound/resources/projects/tasks.py | 829 - src/profound/resources/prompts.py | 603 - src/profound/resources/reports/__init__.py | 89 - src/profound/resources/reports/accuracy.py | 1932 - .../resources/reports/factcheck/__init__.py | 33 - .../resources/reports/factcheck/claims.py | 398 - .../resources/reports/factcheck/factcheck.py | 418 - src/profound/resources/reports/reports.py | 4083 -- src/profound/resources/reports/shopping.py | 1503 - .../resources/reports/social/__init__.py | 33 - .../resources/reports/social/social.py | 102 - .../resources/reports/social/youtube.py | 510 - .../resources/reports/web_search_results.py | 510 - src/profound/types/__init__.py | 127 - src/profound/types/ads/__init__.py | 3 - src/profound/types/ads/openai_ads/__init__.py | 8 - .../ad_account_retrieve_insights_params.py | 38 - .../ad_account_retrieve_insights_response.py | 86 - src/profound/types/agent_create_params.py | 29 - src/profound/types/agent_list_params.py | 21 - .../types/agent_retrieve_graph_params.py | 16 - .../types/agent_retrieve_graph_response.py | 26 - src/profound/types/agent_retrieve_params.py | 16 - src/profound/types/agent_update_params.py | 18 - src/profound/types/agent_update_response.py | 98 - src/profound/types/agents/__init__.py | 10 - .../node_type_retrieve_schema_response.py | 61 - .../types/agents/run_create_params.py | 17 - .../types/agents/run_retrieve_params.py | 15 - .../types/agents/run_retrieve_response.py | 80 - src/profound/types/category.py | 15 - .../content/optimization_retrieve_response.py | 121 - src/profound/types/document_create_params.py | 34 - .../types/document_create_response.py | 80 - src/profound/types/document_delete_params.py | 12 - src/profound/types/document_list_params.py | 41 - src/profound/types/document_list_response.py | 79 - .../types/document_replace_content_params.py | 34 - .../document_replace_content_response.py | 90 - .../types/document_retrieve_params.py | 44 - .../types/document_retrieve_response.py | 156 - src/profound/types/document_update_params.py | 40 - .../types/document_update_response.py | 68 - src/profound/types/hostname_filter_param.py | 32 - src/profound/types/integration_list_params.py | 19 - .../types/integration_list_response.py | 42 - .../types/knowledge_base_search_response.py | 30 - src/profound/types/logs/__init__.py | 3 - .../types/organization_domains_params.py | 20 - .../types/organization_domains_response.py | 25 - .../types/organization_get_personas_params.py | 20 - .../types/organization_list_assets_params.py | 20 - .../types/organization_regions_params.py | 20 - .../category_create_prompts_params.py | 67 - ...tegory_get_citation_categories_response.py | 19 - .../organizations/category_list_params.py | 20 - .../organizations/category_list_response.py | 24 - .../category_retrieve_regions_response.py | 10 - .../organizations/category_tags_response.py | 17 - .../organizations/category_topics_response.py | 19 - .../category_update_prompts_params.py | 69 - .../types/organizations/id_or_name_param.py | 22 - src/profound/types/project_archive_params.py | 15 - .../types/project_archive_response.py | 71 - src/profound/types/project_create_params.py | 97 - src/profound/types/project_create_response.py | 20 - src/profound/types/project_delete_params.py | 12 - .../types/project_get_status_params.py | 12 - .../types/project_get_status_response.py | 37 - src/profound/types/project_list_params.py | 20 - src/profound/types/project_list_response.py | 59 - src/profound/types/project_retrieve_params.py | 12 - .../types/project_retrieve_response.py | 105 - .../types/project_unarchive_params.py | 12 - .../types/project_unarchive_response.py | 71 - src/profound/types/projects/__init__.py | 19 - .../types/projects/generation_list_params.py | 20 - .../projects/generation_list_response.py | 35 - .../projects/generation_retrieve_params.py | 12 - .../projects/generation_retrieve_response.py | 31 - .../types/projects/task_create_params.py | 31 - .../types/projects/task_create_response.py | 45 - .../types/projects/task_delete_params.py | 15 - .../types/projects/task_list_params.py | 12 - .../types/projects/task_list_response.py | 49 - .../types/projects/task_retrieve_params.py | 15 - .../types/projects/task_retrieve_response.py | 47 - .../types/projects/task_update_params.py | 32 - .../types/projects/task_update_response.py | 45 - .../projects/task_update_status_params.py | 20 - .../projects/task_update_status_response.py | 27 - src/profound/types/prompt_answers_params.py | 128 - .../types/prompt_answers_v2_params.py | 81 - .../types/prompt_answers_v2_response.py | 149 - src/profound/types/prompt_id_filter_param.py | 20 - .../types/prompt_stream_answers_v2_params.py | 81 - .../prompt_stream_answers_v2_response.py | 153 - src/profound/types/report_citations_params.py | 144 - .../types/report_citations_response.py | 21 - .../types/report_get_bots_report_params.py | 76 - .../types/report_get_bots_report_v2_params.py | 112 - .../report_get_referrals_report_params.py | 101 - .../report_get_referrals_report_v2_params.py | 134 - src/profound/types/report_info.py | 15 - .../types/report_query_citations_params.py | 71 - .../types/report_query_citations_response.py | 157 - .../types/report_query_fanouts_params.py | 66 - .../report_query_query_fanouts_params.py | 64 - .../report_query_query_fanouts_response.py | 95 - .../types/report_query_sentiment_params.py | 78 - .../types/report_query_sentiment_response.py | 245 - .../types/report_query_visibility_params.py | 91 - .../types/report_query_visibility_response.py | 160 - src/profound/types/report_sentiment_params.py | 147 - .../types/report_sentiment_v2_params.py | 211 - .../types/report_stream_citations_params.py | 144 - .../types/report_stream_citations_response.py | 19 - .../report_stream_citations_v2_params.py | 71 - .../report_stream_citations_v2_response.py | 154 - .../report_stream_query_fanouts_params.py | 64 - .../report_stream_query_fanouts_response.py | 92 - .../types/report_stream_sentiment_params.py | 147 - .../types/report_stream_sentiment_response.py | 19 - .../report_stream_sentiment_v2_params.py | 78 - .../report_stream_sentiment_v2_response.py | 242 - .../types/report_stream_visibility_params.py | 119 - .../report_stream_visibility_response.py | 19 - .../report_stream_visibility_v2_params.py | 91 - .../report_stream_visibility_v2_response.py | 157 - .../types/report_visibility_params.py | 119 - src/profound/types/reports/__init__.py | 96 - .../accuracy_create_breakdown_params.py | 75 - .../accuracy_create_breakdown_response.py | 45 - ...ccuracy_create_citation_analysis_params.py | 17 - ...uracy_create_citation_analysis_response.py | 75 - ...ccuracy_create_claim_breakdown_response.py | 59 - ...ccuracy_create_claim_citations_response.py | 35 - ...racy_create_cluster_example_runs_params.py | 50 - ...cy_create_cluster_example_runs_response.py | 29 - ...reate_cluster_verification_pairs_params.py | 13 - ...ate_cluster_verification_pairs_response.py | 29 - ...cy_create_factcheck_setup_status_params.py | 11 - ...curacy_create_inaccuracy_drivers_params.py | 46 - ...racy_create_inaccuracy_drivers_response.py | 39 - ...acy_create_inaccurate_clusters_response.py | 51 - ...uracy_create_inaccurate_themes_response.py | 39 - .../accuracy_create_overview_response.py | 82 - ...acy_create_top_inaccurate_claims_params.py | 46 - ...y_create_top_inaccurate_claims_response.py | 23 - .../accuracy_create_topic_ids_params.py | 15 - .../accuracy_create_topic_ids_response.py | 8 - .../types/reports/factcheck/__init__.py | 8 - .../factcheck/claim_query_claims_params.py | 59 - .../factcheck/claim_query_claims_response.py | 290 - .../factcheck/claim_stream_claims_params.py | 59 - .../factcheck/claim_stream_claims_response.py | 285 - .../reports/factcheck_query_scores_params.py | 56 - .../factcheck_query_scores_response.py | 176 - .../reports/factcheck_stream_scores_params.py | 56 - .../factcheck_stream_scores_response.py | 174 - .../types/reports/shopping_brands_params.py | 63 - .../types/reports/shopping_brands_response.py | 129 - .../reports/shopping_merchants_params.py | 74 - .../reports/shopping_merchants_response.py | 100 - .../types/reports/shopping_products_params.py | 79 - .../reports/shopping_products_response.py | 127 - .../reports/shopping_stream_brands_params.py | 63 - .../shopping_stream_brands_response.py | 133 - .../shopping_stream_merchants_params.py | 74 - .../shopping_stream_merchants_response.py | 96 - .../shopping_stream_products_params.py | 79 - .../shopping_stream_products_response.py | 133 - .../shopping_stream_trigger_rate_params.py | 57 - .../shopping_stream_trigger_rate_response.py | 129 - .../reports/shopping_trigger_rate_params.py | 57 - .../reports/shopping_trigger_rate_response.py | 121 - src/profound/types/reports/social/__init__.py | 10 - .../social/youtube_get_channels_params.py | 71 - .../social/youtube_get_channels_response.py | 13 - .../social/youtube_get_summary_params.py | 42 - .../social/youtube_get_summary_response.py | 54 - .../social/youtube_get_videos_params.py | 61 - .../social/youtube_get_videos_response.py | 69 - .../reports/web_search_result_query_params.py | 120 - .../web_search_result_query_response.py | 21 - .../web_search_result_stream_params.py | 120 - .../web_search_result_stream_response.py | 19 - .../types/root_domain_filter_param.py | 32 - src/profound/types/shared/__init__.py | 17 - .../types/shared/analysis_type_filter.py | 31 - src/profound/types/shared/bot_name_filter.py | 32 - .../types/shared/bot_provider_filter.py | 83 - src/profound/types/shared/model_id_filter.py | 19 - src/profound/types/shared/path_filter.py | 28 - src/profound/types/shared/prompt_filter.py | 28 - src/profound/types/shared/region_id_filter.py | 19 - .../types/shared/region_name_filter.py | 28 - src/profound/types/shared/tag_id_filter.py | 19 - src/profound/types/shared/topic_id_filter.py | 19 - src/profound/types/shared_params/__init__.py | 16 - .../shared_params/analysis_type_filter.py | 35 - .../types/shared_params/asset_id_filter.py | 18 - .../types/shared_params/bot_name_filter.py | 36 - .../shared_params/bot_provider_filter.py | 87 - .../types/shared_params/model_id_filter.py | 21 - .../types/shared_params/pagination.py | 17 - .../types/shared_params/path_filter.py | 32 - .../types/shared_params/persona_id_filter.py | 20 - .../types/shared_params/prompt_filter.py | 32 - .../types/shared_params/prompt_type_filter.py | 35 - .../types/shared_params/region_id_filter.py | 21 - .../types/shared_params/region_name_filter.py | 32 - .../types/shared_params/tag_id_filter.py | 21 - .../types/shared_params/topic_id_filter.py | 21 - src/profound/types/tag_name_filter_param.py | 32 - src/profound/types/topic_name_filter_param.py | 32 - src/profound/types/url_filter_param.py | 32 - src/{profound => }/py.typed | 0 src/{profound => }/resources/__init__.py | 136 +- .../resources/agents/__init__.py | 42 +- src/resources/agents/agents.py | 789 + src/resources/agents/node_types.py | 249 + src/{profound => }/resources/agents/runs.py | 220 +- .../resources/content/__init__.py | 14 +- .../resources/content/content.py | 41 +- .../resources/content/optimization.py | 282 +- .../resources/knowledge_bases/__init__.py | 42 +- src/resources/knowledge_bases/documents.py | 433 + .../resources/knowledge_bases/folders.py | 277 +- .../knowledge_bases/knowledge_bases.py | 291 +- src/resources/organization.py | 156 + .../resources/organizations/__init__.py | 30 +- src/resources/organizations/categories.py | 1028 + .../resources/organizations/organizations.py | 664 +- src/resources/prompts/__init__.py | 33 + src/resources/prompts/answers.py | 490 + src/resources/prompts/prompts.py | 97 + src/resources/reports/__init__.py | 145 + src/resources/reports/accuracy.py | 2459 ++ src/resources/reports/bots.py | 461 + src/resources/reports/citations.py | 719 + src/resources/reports/query_fanouts.py | 549 + src/resources/reports/referrals.py | 423 + src/resources/reports/reports.py | 534 + src/resources/reports/sentiment.py | 751 + src/resources/reports/shopping.py | 2276 + src/resources/reports/visibility.py | 728 + src/resources/reports/web_search_results.py | 396 + src/types/__init__.py | 68 + src/types/agent_create_v1_post_params.py | 28 + .../agent_create_v1_post_response.py} | 17 +- .../agent_list_graph_v1_graph_get_params.py | 13 + .../agent_list_graph_v1_graph_get_response.py | 24 + src/types/agent_list_params.py | 18 + .../types/agent_list_response.py | 23 +- ...nt_publish_v1_id_publish_post_response.py} | 17 +- src/types/agent_retrieve_params.py | 13 + .../types/agent_retrieve_response.py | 89 +- src/types/agent_update_v1_id_patch_params.py | 18 + .../agent_update_v1_id_patch_response.py | 85 + src/types/agents/__init__.py | 10 + ...st_schema_v1_agents_schema_get_response.py | 42 + .../node_type_list_v1_agents_get_response.py} | 19 +- src/types/agents/run_agent_request.py | 19 + src/types/agents/run_create_params.py | 18 + .../types/agents/run_create_response.py | 3 +- src/types/agents/run_retrieve_response.py | 41 + src/types/analysis_type_filter.py | 18 + .../types/shared => types}/asset_id_filter.py | 9 +- src/types/bot_name_filter.py | 18 + src/types/bot_provider_filter.py | 18 + src/types/category.py | 13 + src/{profound => }/types/content/__init__.py | 4 +- .../types/content/optimization_list_params.py | 3 +- .../content/optimization_list_response.py | 33 +- .../content/optimization_retrieve_response.py | 111 + src/types/create_agent_request.py | 28 + .../shared => types}/cursor_pagination.py | 4 +- src/types/hostname_filter.py | 18 + .../types/knowledge_base_list_params.py | 3 +- .../types/knowledge_base_list_response.py | 23 +- .../types/knowledge_base_search_params.py | 24 +- src/types/knowledge_base_search_response.py | 38 + .../types/knowledge_bases/__init__.py | 17 +- .../knowledge_bases/add_folder_request.py | 12 + .../delete_document_request.py | 12 + .../knowledge_bases/delete_folder_request.py | 16 + .../knowledge_bases/document_create_params.py | 9 +- .../document_create_response.py | 3 +- .../knowledge_bases/document_delete_params.py | 3 +- .../document_delete_response.py | 3 +- .../knowledge_bases/document_update_params.py | 9 +- .../document_update_response.py | 3 +- .../knowledge_bases/folder_create_params.py | 3 +- .../knowledge_bases/folder_create_response.py | 4 +- .../knowledge_bases/folder_delete_params.py | 12 +- .../knowledge_bases/folder_delete_response.py | 4 +- src/types/model_id_filter.py | 18 + src/{profound => }/types/named_resource.py | 3 +- src/{profound => }/types/organization.py | 3 +- src/types/organization_domains_params.py | 14 + src/types/organization_domains_response.py | 23 + src/types/organization_get_personas_params.py | 14 + .../organization_get_personas_response.py | 19 +- src/types/organization_list_assets_params.py | 14 + .../organization_list_assets_response.py | 23 +- ...ategories_category_regions_get_response.py | 9 + .../types/organization_list_response.py | 3 +- .../types/organization_models_response.py | 3 +- src/types/organization_regions_params.py | 14 + .../types/organization_regions_response.py | 3 +- .../types/organizations/__init__.py | 32 +- .../organizations/category_assets_response.py | 22 +- .../category_create_prompts_params.py | 51 + .../category_create_prompts_response.py | 43 +- ...category_get_category_personas_response.py | 11 +- .../organizations/category_list_params.py | 14 + .../organizations/category_list_response.py | 20 + .../organizations/category_prompts_params.py | 46 +- .../category_prompts_response.py | 35 +- .../organizations/category_tags_response.py | 17 + .../organizations/category_topics_response.py | 19 + .../category_update_prompt_status_params.py | 8 +- .../category_update_prompt_status_response.py | 3 +- .../category_update_prompts_params.py | 54 + .../category_update_prompts_response.py | 58 +- .../organizations/create_prompts_body.py | 51 + .../types/organizations/field_diff.py | 10 +- src/types/organizations/id_or_name.py | 20 + .../organizations/named_resource_diff_list.py | 2 +- .../organizations/update_prompts_body.py | 54 + .../types/shared => types}/pagination.py | 4 +- src/types/path_filter.py | 18 + .../shared => types}/persona_id_filter.py | 8 +- src/{profound => }/types/persona_profile.py | 8 +- .../types/persona_profile_behavior.py | 5 +- .../types/persona_profile_demographics.py | 3 +- .../types/persona_profile_employment.py | 5 +- src/types/prompt_filter.py | 18 + src/types/prompt_id_filter.py | 18 + .../shared => types}/prompt_type_filter.py | 21 +- src/types/prompts/__init__.py | 12 + .../answer_create_v1_prompts_post_params.py | 101 + ...answer_create_v1_prompts_post_response.py} | 110 +- .../answer_query_v2_v2_prompts_post_params.py | 50 + ...nswer_query_v2_v2_prompts_post_response.py | 13 + ...stream_v2_v2_prompts_stream_post_params.py | 50 + ...ream_v2_v2_prompts_stream_post_response.py | 7 + src/types/prompts/answers_query.py | 101 + src/types/prompts/answers_v2_query.py | 53 + src/types/region_id_filter.py | 18 + src/types/region_name_filter.py | 18 + src/types/report_info.py | 20 + ...entiment_v2_v1_sentiment_v2_post_params.py | 146 + ...iment_v2_v1_sentiment_v2_post_response.py} | 112 +- src/{profound => }/types/report_response.py | 6 +- src/{profound => }/types/report_result.py | 6 +- src/types/reports/__init__.py | 128 + src/types/reports/accuracy_breakdown_query.py | 55 + ...akdown_v1_reports_breakdown_post_params.py | 56 + ...down_v1_reports_breakdown_post_response.py | 40 + .../accuracy_citation_analysis_query.py | 17 + ...1_reports_citation_analysis_post_params.py | 18 + ...reports_citation_analysis_post_response.py | 61 + ...v1_reports_claim_breakdown_post_params.py} | 38 +- ...1_reports_claim_breakdown_post_response.py | 60 + ...v1_reports_claim_citations_post_params.py} | 46 +- ...1_reports_claim_citations_post_response.py | 38 + ...eports_cluster_example_runs_post_params.py | 22 + ...orts_cluster_example_runs_post_response.py | 32 + ..._cluster_verification_pairs_post_params.py | 14 + ...luster_verification_pairs_post_response.py | 32 + ...orts_factcheck_setup_status_post_params.py | 12 + ...s_factcheck_setup_status_post_response.py} | 7 +- ..._reports_inaccuracy_drivers_post_params.py | 46 + ...eports_inaccuracy_drivers_post_response.py | 38 + ...eports_inaccurate_clusters_post_params.py} | 46 +- ...ports_inaccurate_clusters_post_response.py | 44 + ..._reports_inaccurate_themes_post_params.py} | 46 +- ...reports_inaccurate_themes_post_response.py | 42 + src/types/reports/accuracy_overview_query.py | 47 + ...erview_v1_reports_overview_post_params.py} | 40 +- ...rview_v1_reports_overview_post_response.py | 78 + ...ports_top_inaccurate_claims_post_params.py | 46 + ...rts_top_inaccurate_claims_post_response.py | 24 + src/types/reports/accuracy_topic_ids_query.py | 15 + ...ic_ids_v1_reports_topic_ids_post_params.py | 16 + ..._ids_v1_reports_topic_ids_post_response.py | 8 + ...create_report_v1_v1_reports_post_params.py | 67 + ...create_report_v2_v2_reports_post_params.py | 75 + src/types/reports/bots_report_query.py | 67 + src/types/reports/bots_report_query_v2.py | 75 + src/types/reports/brand_name_filter.py | 17 + .../citation_query_v1_reports_post_params.py | 76 + ...citation_query_v1_reports_post_response.py | 24 + ...itation_query_v2_v2_reports_post_params.py | 55 + ...ation_query_v2_v2_reports_post_response.py | 13 + ...on_stream_v1_reports_stream_post_params.py | 75 + ..._stream_v1_reports_stream_post_response.py | 27 + ...stream_v2_v2_reports_stream_post_params.py | 55 + ...ream_v2_v2_reports_stream_post_response.py | 7 + src/types/reports/citations_query.py | 75 + src/types/reports/citations_v2_query.py | 58 + src/types/reports/claim_breakdown_query.py | 45 + src/types/reports/claim_citations_query.py | 53 + .../reports/cluster_example_runs_query.py | 22 + .../cluster_verification_pairs_query.py | 13 + .../reports/fact_check_setup_status_query.py | 11 + src/types/reports/inaccuracy_drivers_query.py | 45 + .../reports/inaccurate_clusters_query.py | 51 + src/types/reports/inaccurate_themes_query.py | 53 + src/types/reports/merchant_name_filter.py | 17 + src/types/reports/product_name_filter.py | 17 + ...stream_v2_v2_reports_stream_post_params.py | 60 + ...ream_v2_v2_reports_stream_post_response.py | 7 + .../query_fanout_v1_reports_post_params.py | 48 + .../query_fanout_v2_v2_reports_post_params.py | 60 + ...uery_fanout_v2_v2_reports_post_response.py | 13 + src/types/reports/query_fanouts_query.py | 48 + src/types/reports/query_fanouts_v2_query.py | 63 + ...create_report_v1_v1_reports_post_params.py | 73 + ...create_report_v2_v2_reports_post_params.py | 81 + src/types/reports/referrals_query.py | 73 + src/types/reports/referrals_query_v2.py | 81 + src/types/reports/sentiment_query.py | 76 + .../sentiment_query_v1_reports_post_params.py | 77 + ...ntiment_query_v2_v2_reports_post_params.py | 72 + ...iment_query_v2_v2_reports_post_response.py | 13 + ...nt_stream_v1_reports_stream_post_params.py | 76 + ..._stream_v1_reports_stream_post_response.py | 27 + ...stream_v2_v2_reports_stream_post_params.py | 72 + ...ream_v2_v2_reports_stream_post_response.py | 7 + src/types/reports/sentiment_v2_query.py | 75 + ...hopping_all_items_with_merchants_params.py | 78 + ...shopping_all_items_with_merchants_query.py | 77 + ...pping_all_items_with_merchants_response.py | 21 + .../reports/shopping_executions_params.py | 68 + .../reports/shopping_executions_query.py | 67 + .../reports/shopping_executions_response.py | 21 + .../shopping_item_visibility_params.py | 82 + .../reports/shopping_item_visibility_query.py | 81 + .../shopping_item_visibility_response.py | 21 + .../shopping_merchant_by_items_params.py | 68 + .../shopping_merchant_by_items_query.py | 67 + .../shopping_merchant_by_items_response.py | 21 + .../shopping_merchant_distribution_params.py | 70 + .../shopping_merchant_distribution_query.py | 69 + ...shopping_merchant_distribution_response.py | 21 + .../reports/shopping_merchant_share_params.py | 70 + .../reports/shopping_merchant_share_query.py | 69 + .../shopping_merchant_share_response.py | 21 + ...ing_merchant_visibility_by_brand_params.py | 74 + ...ping_merchant_visibility_by_brand_query.py | 73 + ...g_merchant_visibility_by_brand_response.py | 21 + .../shopping_product_merchant_urls_params.py | 21 + .../shopping_product_merchant_urls_query.py | 19 + ...shopping_product_merchant_urls_response.py | 21 + .../reports/shopping_trigger_rate_params.py | 66 + .../reports/shopping_trigger_rate_query.py | 65 + .../reports/shopping_trigger_rate_response.py | 21 + .../reports/shopping_visibility_params.py | 80 + .../reports/shopping_visibility_query.py | 79 + .../reports/shopping_visibility_response.py | 21 + src/types/reports/stream_citations_query.py | 74 + src/types/reports/stream_sentiment_query.py | 75 + src/types/reports/stream_visibility_query.py | 67 + .../stream_web_search_results_query.py | 69 + .../reports/top_inaccurate_claims_query.py | 45 + src/types/reports/visibility_query.py | 68 + ...visibility_query_v1_reports_post_params.py | 69 + ...ibility_query_v2_v2_reports_post_params.py | 70 + ...ility_query_v2_v2_reports_post_response.py | 13 + ...ty_stream_v1_reports_stream_post_params.py | 68 + ..._stream_v1_reports_stream_post_response.py | 27 + ...stream_v2_v2_reports_stream_post_params.py | 70 + ...ream_v2_v2_reports_stream_post_response.py | 7 + src/types/reports/visibility_v2_query.py | 72 + .../reports/web_search_result_query_params.py | 71 + .../web_search_result_query_response.py | 24 + .../web_search_result_stream_params.py | 70 + .../web_search_result_stream_response.py | 27 + src/types/reports/web_search_results_query.py | 70 + src/types/root_domain_filter.py | 18 + src/types/search_knowledge_base_request.py | 32 + src/types/sentiment_v2_report_query.py | 145 + src/types/tag_id_filter.py | 18 + src/types/tag_name_filter.py | 18 + src/types/topic_id_filter.py | 18 + src/types/topic_name_filter.py | 18 + src/types/update_agent_request.py | 18 + src/types/update_prompt_status_body.py | 20 + src/types/url_filter.py | 18 + tests/__init__.py | 1 - tests/api_resources/__init__.py | 1 - tests/api_resources/ads/__init__.py | 1 - .../api_resources/ads/openai_ads/__init__.py | 1 - .../ads/openai_ads/test_ad_account.py | 108 - tests/api_resources/agents/__init__.py | 1 - tests/api_resources/agents/test_node_types.py | 164 - tests/api_resources/agents/test_runs.py | 250 - tests/api_resources/content/__init__.py | 1 - .../content/test_optimization.py | 232 - .../api_resources/knowledge_bases/__init__.py | 1 - .../knowledge_bases/test_documents.py | 388 - .../knowledge_bases/test_folders.py | 253 - tests/api_resources/organizations/__init__.py | 1 - .../organizations/test_categories.py | 1306 - tests/api_resources/projects/__init__.py | 1 - .../projects/test_generations.py | 209 - tests/api_resources/projects/test_tasks.py | 784 - tests/api_resources/reports/__init__.py | 1 - .../reports/factcheck/__init__.py | 1 - .../reports/factcheck/test_claims.py | 272 - .../api_resources/reports/social/__init__.py | 1 - .../reports/social/test_youtube.py | 388 - tests/api_resources/reports/test_accuracy.py | 1572 - tests/api_resources/reports/test_factcheck.py | 268 - tests/api_resources/reports/test_shopping.py | 1049 - .../reports/test_web_search_results.py | 297 - tests/api_resources/test_agents.py | 583 - tests/api_resources/test_documents.py | 652 - tests/api_resources/test_integrations.py | 100 - tests/api_resources/test_knowledge_bases.py | 231 - tests/api_resources/test_organizations.py | 431 - tests/api_resources/test_projects.py | 773 - tests/api_resources/test_prompts.py | 444 - tests/api_resources/test_reports.py | 2799 -- tests/conftest.py | 84 - tests/sample_file.txt | 1 - tests/smoke-test.py | 1419 + tests/test_client.py | 2010 - tests/test_extract_files.py | 91 - tests/test_files.py | 148 - tests/test_models.py | 1017 - tests/test_qs.py | 78 - tests/test_required_args.py | 111 - tests/test_response.py | 277 - tests/test_streaming.py | 248 - tests/test_transform.py | 460 - tests/test_utils/test_datetime_parse.py | 110 - tests/test_utils/test_json.py | 126 - tests/test_utils/test_path.py | 89 - tests/test_utils/test_proxy.py | 34 - tests/test_utils/test_typing.py | 73 - tests/utils.py | 167 - uv.lock | 2336 -- 627 files changed, 81093 insertions(+), 54992 deletions(-) delete mode 100644 .devcontainer/Dockerfile delete mode 100644 .devcontainer/devcontainer.json delete mode 100644 .github/workflows/ci.yml delete mode 100644 .github/workflows/publish-pypi.yml delete mode 100644 .github/workflows/release-doctor.yml create mode 100644 .github/workflows/sdk-ci.yml create mode 100644 .github/workflows/sdk-release.yml delete mode 100644 .python-version delete mode 100644 .stats.yml delete mode 100644 .vscode/settings.json delete mode 100644 Brewfile delete mode 100644 CONTRIBUTING.md create mode 100644 VERSIONING.md delete mode 100644 bin/check-release-environment delete mode 100644 bin/publish-pypi delete mode 100644 examples/.keep delete mode 100644 examples/README.md delete mode 100644 examples/profound.ipynb delete mode 100644 examples/pyproject.toml create mode 100644 openapi.augmented.json delete mode 100644 release-please-config.json delete mode 100644 requirements-dev.lock create mode 100644 scalar-sdk.manifest.json delete mode 100755 scripts/bootstrap delete mode 100755 scripts/format delete mode 100755 scripts/lint delete mode 100755 scripts/test delete mode 100644 scripts/utils/ruffen-docs.py delete mode 100755 scripts/utils/upload-artifact.sh rename src/{profound => }/__init__.py (74%) rename src/{profound => }/_base_client.py (92%) rename src/{profound => }/_client.py (58%) rename src/{profound => }/_compat.py (100%) rename src/{profound => }/_constants.py (58%) create mode 100644 src/_event_handler.py rename src/{profound => }/_exceptions.py (83%) rename src/{profound => }/_files.py (100%) rename src/{profound => }/_models.py (99%) rename src/{profound => }/_qs.py (100%) rename src/{profound => }/_resource.py (92%) rename src/{profound => }/_response.py (98%) create mode 100644 src/_send_queue.py rename src/{profound => }/_streaming.py (78%) rename src/{profound => }/_types.py (98%) rename src/{profound => }/_utils/__init__.py (100%) rename src/{profound => }/_utils/_compat.py (100%) rename src/{profound => }/_utils/_datetime_parse.py (100%) rename src/{profound => }/_utils/_json.py (100%) rename src/{profound => }/_utils/_logs.py (100%) rename src/{profound => }/_utils/_path.py (100%) rename src/{profound => }/_utils/_proxy.py (100%) rename src/{profound => }/_utils/_reflection.py (100%) rename src/{profound => }/_utils/_resources_proxy.py (100%) rename src/{profound => }/_utils/_streams.py (100%) rename src/{profound => }/_utils/_sync.py (100%) rename src/{profound => }/_utils/_transform.py (100%) rename src/{profound => }/_utils/_typing.py (100%) rename src/{profound => }/_utils/_utils.py (99%) create mode 100644 src/_version.py delete mode 100644 src/profound/_version.py delete mode 100644 src/profound/lib/.keep delete mode 100644 src/profound/resources/ads/__init__.py delete mode 100644 src/profound/resources/ads/ads.py delete mode 100644 src/profound/resources/ads/openai_ads/__init__.py delete mode 100644 src/profound/resources/ads/openai_ads/ad_account.py delete mode 100644 src/profound/resources/ads/openai_ads/openai_ads.py delete mode 100644 src/profound/resources/agents/agents.py delete mode 100644 src/profound/resources/agents/node_types.py delete mode 100644 src/profound/resources/documents.py delete mode 100644 src/profound/resources/integrations.py delete mode 100644 src/profound/resources/knowledge_bases/documents.py delete mode 100644 src/profound/resources/organizations/categories.py delete mode 100644 src/profound/resources/projects/__init__.py delete mode 100644 src/profound/resources/projects/generations.py delete mode 100644 src/profound/resources/projects/projects.py delete mode 100644 src/profound/resources/projects/tasks.py delete mode 100644 src/profound/resources/prompts.py delete mode 100644 src/profound/resources/reports/__init__.py delete mode 100644 src/profound/resources/reports/accuracy.py delete mode 100644 src/profound/resources/reports/factcheck/__init__.py delete mode 100644 src/profound/resources/reports/factcheck/claims.py delete mode 100644 src/profound/resources/reports/factcheck/factcheck.py delete mode 100644 src/profound/resources/reports/reports.py delete mode 100644 src/profound/resources/reports/shopping.py delete mode 100644 src/profound/resources/reports/social/__init__.py delete mode 100644 src/profound/resources/reports/social/social.py delete mode 100644 src/profound/resources/reports/social/youtube.py delete mode 100644 src/profound/resources/reports/web_search_results.py delete mode 100644 src/profound/types/__init__.py delete mode 100644 src/profound/types/ads/__init__.py delete mode 100644 src/profound/types/ads/openai_ads/__init__.py delete mode 100644 src/profound/types/ads/openai_ads/ad_account_retrieve_insights_params.py delete mode 100644 src/profound/types/ads/openai_ads/ad_account_retrieve_insights_response.py delete mode 100644 src/profound/types/agent_create_params.py delete mode 100644 src/profound/types/agent_list_params.py delete mode 100644 src/profound/types/agent_retrieve_graph_params.py delete mode 100644 src/profound/types/agent_retrieve_graph_response.py delete mode 100644 src/profound/types/agent_retrieve_params.py delete mode 100644 src/profound/types/agent_update_params.py delete mode 100644 src/profound/types/agent_update_response.py delete mode 100644 src/profound/types/agents/__init__.py delete mode 100644 src/profound/types/agents/node_type_retrieve_schema_response.py delete mode 100644 src/profound/types/agents/run_create_params.py delete mode 100644 src/profound/types/agents/run_retrieve_params.py delete mode 100644 src/profound/types/agents/run_retrieve_response.py delete mode 100644 src/profound/types/category.py delete mode 100644 src/profound/types/content/optimization_retrieve_response.py delete mode 100644 src/profound/types/document_create_params.py delete mode 100644 src/profound/types/document_create_response.py delete mode 100644 src/profound/types/document_delete_params.py delete mode 100644 src/profound/types/document_list_params.py delete mode 100644 src/profound/types/document_list_response.py delete mode 100644 src/profound/types/document_replace_content_params.py delete mode 100644 src/profound/types/document_replace_content_response.py delete mode 100644 src/profound/types/document_retrieve_params.py delete mode 100644 src/profound/types/document_retrieve_response.py delete mode 100644 src/profound/types/document_update_params.py delete mode 100644 src/profound/types/document_update_response.py delete mode 100644 src/profound/types/hostname_filter_param.py delete mode 100644 src/profound/types/integration_list_params.py delete mode 100644 src/profound/types/integration_list_response.py delete mode 100644 src/profound/types/knowledge_base_search_response.py delete mode 100644 src/profound/types/logs/__init__.py delete mode 100644 src/profound/types/organization_domains_params.py delete mode 100644 src/profound/types/organization_domains_response.py delete mode 100644 src/profound/types/organization_get_personas_params.py delete mode 100644 src/profound/types/organization_list_assets_params.py delete mode 100644 src/profound/types/organization_regions_params.py delete mode 100644 src/profound/types/organizations/category_create_prompts_params.py delete mode 100644 src/profound/types/organizations/category_get_citation_categories_response.py delete mode 100644 src/profound/types/organizations/category_list_params.py delete mode 100644 src/profound/types/organizations/category_list_response.py delete mode 100644 src/profound/types/organizations/category_retrieve_regions_response.py delete mode 100644 src/profound/types/organizations/category_tags_response.py delete mode 100644 src/profound/types/organizations/category_topics_response.py delete mode 100644 src/profound/types/organizations/category_update_prompts_params.py delete mode 100644 src/profound/types/organizations/id_or_name_param.py delete mode 100644 src/profound/types/project_archive_params.py delete mode 100644 src/profound/types/project_archive_response.py delete mode 100644 src/profound/types/project_create_params.py delete mode 100644 src/profound/types/project_create_response.py delete mode 100644 src/profound/types/project_delete_params.py delete mode 100644 src/profound/types/project_get_status_params.py delete mode 100644 src/profound/types/project_get_status_response.py delete mode 100644 src/profound/types/project_list_params.py delete mode 100644 src/profound/types/project_list_response.py delete mode 100644 src/profound/types/project_retrieve_params.py delete mode 100644 src/profound/types/project_retrieve_response.py delete mode 100644 src/profound/types/project_unarchive_params.py delete mode 100644 src/profound/types/project_unarchive_response.py delete mode 100644 src/profound/types/projects/__init__.py delete mode 100644 src/profound/types/projects/generation_list_params.py delete mode 100644 src/profound/types/projects/generation_list_response.py delete mode 100644 src/profound/types/projects/generation_retrieve_params.py delete mode 100644 src/profound/types/projects/generation_retrieve_response.py delete mode 100644 src/profound/types/projects/task_create_params.py delete mode 100644 src/profound/types/projects/task_create_response.py delete mode 100644 src/profound/types/projects/task_delete_params.py delete mode 100644 src/profound/types/projects/task_list_params.py delete mode 100644 src/profound/types/projects/task_list_response.py delete mode 100644 src/profound/types/projects/task_retrieve_params.py delete mode 100644 src/profound/types/projects/task_retrieve_response.py delete mode 100644 src/profound/types/projects/task_update_params.py delete mode 100644 src/profound/types/projects/task_update_response.py delete mode 100644 src/profound/types/projects/task_update_status_params.py delete mode 100644 src/profound/types/projects/task_update_status_response.py delete mode 100644 src/profound/types/prompt_answers_params.py delete mode 100644 src/profound/types/prompt_answers_v2_params.py delete mode 100644 src/profound/types/prompt_answers_v2_response.py delete mode 100644 src/profound/types/prompt_id_filter_param.py delete mode 100644 src/profound/types/prompt_stream_answers_v2_params.py delete mode 100644 src/profound/types/prompt_stream_answers_v2_response.py delete mode 100644 src/profound/types/report_citations_params.py delete mode 100644 src/profound/types/report_citations_response.py delete mode 100644 src/profound/types/report_get_bots_report_params.py delete mode 100644 src/profound/types/report_get_bots_report_v2_params.py delete mode 100644 src/profound/types/report_get_referrals_report_params.py delete mode 100644 src/profound/types/report_get_referrals_report_v2_params.py delete mode 100644 src/profound/types/report_info.py delete mode 100644 src/profound/types/report_query_citations_params.py delete mode 100644 src/profound/types/report_query_citations_response.py delete mode 100644 src/profound/types/report_query_fanouts_params.py delete mode 100644 src/profound/types/report_query_query_fanouts_params.py delete mode 100644 src/profound/types/report_query_query_fanouts_response.py delete mode 100644 src/profound/types/report_query_sentiment_params.py delete mode 100644 src/profound/types/report_query_sentiment_response.py delete mode 100644 src/profound/types/report_query_visibility_params.py delete mode 100644 src/profound/types/report_query_visibility_response.py delete mode 100644 src/profound/types/report_sentiment_params.py delete mode 100644 src/profound/types/report_sentiment_v2_params.py delete mode 100644 src/profound/types/report_stream_citations_params.py delete mode 100644 src/profound/types/report_stream_citations_response.py delete mode 100644 src/profound/types/report_stream_citations_v2_params.py delete mode 100644 src/profound/types/report_stream_citations_v2_response.py delete mode 100644 src/profound/types/report_stream_query_fanouts_params.py delete mode 100644 src/profound/types/report_stream_query_fanouts_response.py delete mode 100644 src/profound/types/report_stream_sentiment_params.py delete mode 100644 src/profound/types/report_stream_sentiment_response.py delete mode 100644 src/profound/types/report_stream_sentiment_v2_params.py delete mode 100644 src/profound/types/report_stream_sentiment_v2_response.py delete mode 100644 src/profound/types/report_stream_visibility_params.py delete mode 100644 src/profound/types/report_stream_visibility_response.py delete mode 100644 src/profound/types/report_stream_visibility_v2_params.py delete mode 100644 src/profound/types/report_stream_visibility_v2_response.py delete mode 100644 src/profound/types/report_visibility_params.py delete mode 100644 src/profound/types/reports/__init__.py delete mode 100644 src/profound/types/reports/accuracy_create_breakdown_params.py delete mode 100644 src/profound/types/reports/accuracy_create_breakdown_response.py delete mode 100644 src/profound/types/reports/accuracy_create_citation_analysis_params.py delete mode 100644 src/profound/types/reports/accuracy_create_citation_analysis_response.py delete mode 100644 src/profound/types/reports/accuracy_create_claim_breakdown_response.py delete mode 100644 src/profound/types/reports/accuracy_create_claim_citations_response.py delete mode 100644 src/profound/types/reports/accuracy_create_cluster_example_runs_params.py delete mode 100644 src/profound/types/reports/accuracy_create_cluster_example_runs_response.py delete mode 100644 src/profound/types/reports/accuracy_create_cluster_verification_pairs_params.py delete mode 100644 src/profound/types/reports/accuracy_create_cluster_verification_pairs_response.py delete mode 100644 src/profound/types/reports/accuracy_create_factcheck_setup_status_params.py delete mode 100644 src/profound/types/reports/accuracy_create_inaccuracy_drivers_params.py delete mode 100644 src/profound/types/reports/accuracy_create_inaccuracy_drivers_response.py delete mode 100644 src/profound/types/reports/accuracy_create_inaccurate_clusters_response.py delete mode 100644 src/profound/types/reports/accuracy_create_inaccurate_themes_response.py delete mode 100644 src/profound/types/reports/accuracy_create_overview_response.py delete mode 100644 src/profound/types/reports/accuracy_create_top_inaccurate_claims_params.py delete mode 100644 src/profound/types/reports/accuracy_create_top_inaccurate_claims_response.py delete mode 100644 src/profound/types/reports/accuracy_create_topic_ids_params.py delete mode 100644 src/profound/types/reports/accuracy_create_topic_ids_response.py delete mode 100644 src/profound/types/reports/factcheck/__init__.py delete mode 100644 src/profound/types/reports/factcheck/claim_query_claims_params.py delete mode 100644 src/profound/types/reports/factcheck/claim_query_claims_response.py delete mode 100644 src/profound/types/reports/factcheck/claim_stream_claims_params.py delete mode 100644 src/profound/types/reports/factcheck/claim_stream_claims_response.py delete mode 100644 src/profound/types/reports/factcheck_query_scores_params.py delete mode 100644 src/profound/types/reports/factcheck_query_scores_response.py delete mode 100644 src/profound/types/reports/factcheck_stream_scores_params.py delete mode 100644 src/profound/types/reports/factcheck_stream_scores_response.py delete mode 100644 src/profound/types/reports/shopping_brands_params.py delete mode 100644 src/profound/types/reports/shopping_brands_response.py delete mode 100644 src/profound/types/reports/shopping_merchants_params.py delete mode 100644 src/profound/types/reports/shopping_merchants_response.py delete mode 100644 src/profound/types/reports/shopping_products_params.py delete mode 100644 src/profound/types/reports/shopping_products_response.py delete mode 100644 src/profound/types/reports/shopping_stream_brands_params.py delete mode 100644 src/profound/types/reports/shopping_stream_brands_response.py delete mode 100644 src/profound/types/reports/shopping_stream_merchants_params.py delete mode 100644 src/profound/types/reports/shopping_stream_merchants_response.py delete mode 100644 src/profound/types/reports/shopping_stream_products_params.py delete mode 100644 src/profound/types/reports/shopping_stream_products_response.py delete mode 100644 src/profound/types/reports/shopping_stream_trigger_rate_params.py delete mode 100644 src/profound/types/reports/shopping_stream_trigger_rate_response.py delete mode 100644 src/profound/types/reports/shopping_trigger_rate_params.py delete mode 100644 src/profound/types/reports/shopping_trigger_rate_response.py delete mode 100644 src/profound/types/reports/social/__init__.py delete mode 100644 src/profound/types/reports/social/youtube_get_channels_params.py delete mode 100644 src/profound/types/reports/social/youtube_get_channels_response.py delete mode 100644 src/profound/types/reports/social/youtube_get_summary_params.py delete mode 100644 src/profound/types/reports/social/youtube_get_summary_response.py delete mode 100644 src/profound/types/reports/social/youtube_get_videos_params.py delete mode 100644 src/profound/types/reports/social/youtube_get_videos_response.py delete mode 100644 src/profound/types/reports/web_search_result_query_params.py delete mode 100644 src/profound/types/reports/web_search_result_query_response.py delete mode 100644 src/profound/types/reports/web_search_result_stream_params.py delete mode 100644 src/profound/types/reports/web_search_result_stream_response.py delete mode 100644 src/profound/types/root_domain_filter_param.py delete mode 100644 src/profound/types/shared/__init__.py delete mode 100644 src/profound/types/shared/analysis_type_filter.py delete mode 100644 src/profound/types/shared/bot_name_filter.py delete mode 100644 src/profound/types/shared/bot_provider_filter.py delete mode 100644 src/profound/types/shared/model_id_filter.py delete mode 100644 src/profound/types/shared/path_filter.py delete mode 100644 src/profound/types/shared/prompt_filter.py delete mode 100644 src/profound/types/shared/region_id_filter.py delete mode 100644 src/profound/types/shared/region_name_filter.py delete mode 100644 src/profound/types/shared/tag_id_filter.py delete mode 100644 src/profound/types/shared/topic_id_filter.py delete mode 100644 src/profound/types/shared_params/__init__.py delete mode 100644 src/profound/types/shared_params/analysis_type_filter.py delete mode 100644 src/profound/types/shared_params/asset_id_filter.py delete mode 100644 src/profound/types/shared_params/bot_name_filter.py delete mode 100644 src/profound/types/shared_params/bot_provider_filter.py delete mode 100644 src/profound/types/shared_params/model_id_filter.py delete mode 100644 src/profound/types/shared_params/pagination.py delete mode 100644 src/profound/types/shared_params/path_filter.py delete mode 100644 src/profound/types/shared_params/persona_id_filter.py delete mode 100644 src/profound/types/shared_params/prompt_filter.py delete mode 100644 src/profound/types/shared_params/prompt_type_filter.py delete mode 100644 src/profound/types/shared_params/region_id_filter.py delete mode 100644 src/profound/types/shared_params/region_name_filter.py delete mode 100644 src/profound/types/shared_params/tag_id_filter.py delete mode 100644 src/profound/types/shared_params/topic_id_filter.py delete mode 100644 src/profound/types/tag_name_filter_param.py delete mode 100644 src/profound/types/topic_name_filter_param.py delete mode 100644 src/profound/types/url_filter_param.py rename src/{profound => }/py.typed (100%) rename src/{profound => }/resources/__init__.py (59%) rename src/{profound => }/resources/agents/__init__.py (94%) create mode 100644 src/resources/agents/agents.py create mode 100644 src/resources/agents/node_types.py rename src/{profound => }/resources/agents/runs.py (56%) rename src/{profound => }/resources/content/__init__.py (92%) rename src/{profound => }/resources/content/content.py (69%) rename src/{profound => }/resources/content/optimization.py (58%) rename src/{profound => }/resources/knowledge_bases/__init__.py (94%) create mode 100644 src/resources/knowledge_bases/documents.py rename src/{profound => }/resources/knowledge_bases/folders.py (52%) rename src/{profound => }/resources/knowledge_bases/knowledge_bases.py (62%) create mode 100644 src/resources/organization.py rename src/{profound => }/resources/organizations/__init__.py (92%) create mode 100644 src/resources/organizations/categories.py rename src/{profound => }/resources/organizations/organizations.py (53%) create mode 100644 src/resources/prompts/__init__.py create mode 100644 src/resources/prompts/answers.py create mode 100644 src/resources/prompts/prompts.py create mode 100644 src/resources/reports/__init__.py create mode 100644 src/resources/reports/accuracy.py create mode 100644 src/resources/reports/bots.py create mode 100644 src/resources/reports/citations.py create mode 100644 src/resources/reports/query_fanouts.py create mode 100644 src/resources/reports/referrals.py create mode 100644 src/resources/reports/reports.py create mode 100644 src/resources/reports/sentiment.py create mode 100644 src/resources/reports/shopping.py create mode 100644 src/resources/reports/visibility.py create mode 100644 src/resources/reports/web_search_results.py create mode 100644 src/types/__init__.py create mode 100644 src/types/agent_create_v1_post_params.py rename src/{profound/types/agent_create_response.py => types/agent_create_v1_post_response.py} (73%) create mode 100644 src/types/agent_list_graph_v1_graph_get_params.py create mode 100644 src/types/agent_list_graph_v1_graph_get_response.py create mode 100644 src/types/agent_list_params.py rename src/{profound => }/types/agent_list_response.py (71%) rename src/{profound/types/agent_publish_response.py => types/agent_publish_v1_id_publish_post_response.py} (73%) create mode 100644 src/types/agent_retrieve_params.py rename src/{profound => }/types/agent_retrieve_response.py (51%) create mode 100644 src/types/agent_update_v1_id_patch_params.py create mode 100644 src/types/agent_update_v1_id_patch_response.py create mode 100644 src/types/agents/__init__.py create mode 100644 src/types/agents/node_type_list_schema_v1_agents_schema_get_response.py rename src/{profound/types/agents/node_type_list_response.py => types/agents/node_type_list_v1_agents_get_response.py} (53%) create mode 100644 src/types/agents/run_agent_request.py create mode 100644 src/types/agents/run_create_params.py rename src/{profound => }/types/agents/run_create_response.py (79%) create mode 100644 src/types/agents/run_retrieve_response.py create mode 100644 src/types/analysis_type_filter.py rename src/{profound/types/shared => types}/asset_id_filter.py (52%) create mode 100644 src/types/bot_name_filter.py create mode 100644 src/types/bot_provider_filter.py create mode 100644 src/types/category.py rename src/{profound => }/types/content/__init__.py (78%) rename src/{profound => }/types/content/optimization_list_params.py (76%) rename src/{profound => }/types/content/optimization_list_response.py (50%) create mode 100644 src/types/content/optimization_retrieve_response.py create mode 100644 src/types/create_agent_request.py rename src/{profound/types/shared => types}/cursor_pagination.py (75%) create mode 100644 src/types/hostname_filter.py rename src/{profound => }/types/knowledge_base_list_params.py (78%) rename src/{profound => }/types/knowledge_base_list_response.py (68%) rename src/{profound => }/types/knowledge_base_search_params.py (76%) create mode 100644 src/types/knowledge_base_search_response.py rename src/{profound => }/types/knowledge_bases/__init__.py (73%) create mode 100644 src/types/knowledge_bases/add_folder_request.py create mode 100644 src/types/knowledge_bases/delete_document_request.py create mode 100644 src/types/knowledge_bases/delete_folder_request.py rename src/{profound => }/types/knowledge_bases/document_create_params.py (85%) rename src/{profound => }/types/knowledge_bases/document_create_response.py (79%) rename src/{profound => }/types/knowledge_bases/document_delete_params.py (81%) rename src/{profound => }/types/knowledge_bases/document_delete_response.py (79%) rename src/{profound => }/types/knowledge_bases/document_update_params.py (86%) rename src/{profound => }/types/knowledge_bases/document_update_response.py (79%) rename src/{profound => }/types/knowledge_bases/folder_create_params.py (81%) rename src/{profound => }/types/knowledge_bases/folder_create_response.py (70%) rename src/{profound => }/types/knowledge_bases/folder_delete_params.py (61%) rename src/{profound => }/types/knowledge_bases/folder_delete_response.py (70%) create mode 100644 src/types/model_id_filter.py rename src/{profound => }/types/named_resource.py (68%) rename src/{profound => }/types/organization.py (66%) create mode 100644 src/types/organization_domains_params.py create mode 100644 src/types/organization_domains_response.py create mode 100644 src/types/organization_get_personas_params.py rename src/{profound => }/types/organization_get_personas_response.py (56%) create mode 100644 src/types/organization_list_assets_params.py rename src/{profound => }/types/organization_list_assets_response.py (64%) create mode 100644 src/types/organization_list_category_regions_v1_org_categories_category_regions_get_response.py rename src/{profound => }/types/organization_list_response.py (69%) rename src/{profound => }/types/organization_models_response.py (70%) create mode 100644 src/types/organization_regions_params.py rename src/{profound => }/types/organization_regions_response.py (70%) rename src/{profound => }/types/organizations/__init__.py (65%) rename src/{profound => }/types/organizations/category_assets_response.py (53%) create mode 100644 src/types/organizations/category_create_prompts_params.py rename src/{profound => }/types/organizations/category_create_prompts_response.py (77%) rename src/{profound => }/types/organizations/category_get_category_personas_response.py (50%) create mode 100644 src/types/organizations/category_list_params.py create mode 100644 src/types/organizations/category_list_response.py rename src/{profound => }/types/organizations/category_prompts_params.py (51%) rename src/{profound => }/types/organizations/category_prompts_response.py (77%) create mode 100644 src/types/organizations/category_tags_response.py create mode 100644 src/types/organizations/category_topics_response.py rename src/{profound => }/types/organizations/category_update_prompt_status_params.py (73%) rename src/{profound => }/types/organizations/category_update_prompt_status_response.py (71%) create mode 100644 src/types/organizations/category_update_prompts_params.py rename src/{profound => }/types/organizations/category_update_prompts_response.py (54%) create mode 100644 src/types/organizations/create_prompts_body.py rename src/{profound => }/types/organizations/field_diff.py (59%) create mode 100644 src/types/organizations/id_or_name.py rename src/{profound => }/types/organizations/named_resource_diff_list.py (83%) create mode 100644 src/types/organizations/update_prompts_body.py rename src/{profound/types/shared => types}/pagination.py (74%) create mode 100644 src/types/path_filter.py rename src/{profound/types/shared => types}/persona_id_filter.py (55%) rename src/{profound => }/types/persona_profile.py (82%) rename src/{profound => }/types/persona_profile_behavior.py (77%) rename src/{profound => }/types/persona_profile_demographics.py (76%) rename src/{profound => }/types/persona_profile_employment.py (85%) create mode 100644 src/types/prompt_filter.py create mode 100644 src/types/prompt_id_filter.py rename src/{profound/types/shared => types}/prompt_type_filter.py (50%) create mode 100644 src/types/prompts/__init__.py create mode 100644 src/types/prompts/answer_create_v1_prompts_post_params.py rename src/{profound/types/prompt_answers_response.py => types/prompts/answer_create_v1_prompts_post_response.py} (56%) create mode 100644 src/types/prompts/answer_query_v2_v2_prompts_post_params.py create mode 100644 src/types/prompts/answer_query_v2_v2_prompts_post_response.py create mode 100644 src/types/prompts/answer_stream_v2_v2_prompts_stream_post_params.py create mode 100644 src/types/prompts/answer_stream_v2_v2_prompts_stream_post_response.py create mode 100644 src/types/prompts/answers_query.py create mode 100644 src/types/prompts/answers_v2_query.py create mode 100644 src/types/region_id_filter.py create mode 100644 src/types/region_name_filter.py create mode 100644 src/types/report_info.py create mode 100644 src/types/report_query_sentiment_v2_v1_sentiment_v2_post_params.py rename src/{profound/types/report_sentiment_v2_response.py => types/report_query_sentiment_v2_v1_sentiment_v2_post_response.py} (54%) rename src/{profound => }/types/report_response.py (79%) rename src/{profound => }/types/report_result.py (60%) create mode 100644 src/types/reports/__init__.py create mode 100644 src/types/reports/accuracy_breakdown_query.py create mode 100644 src/types/reports/accuracy_breakdown_v1_reports_breakdown_post_params.py create mode 100644 src/types/reports/accuracy_breakdown_v1_reports_breakdown_post_response.py create mode 100644 src/types/reports/accuracy_citation_analysis_query.py create mode 100644 src/types/reports/accuracy_citation_analysis_v1_reports_citation_analysis_post_params.py create mode 100644 src/types/reports/accuracy_citation_analysis_v1_reports_citation_analysis_post_response.py rename src/{profound/types/reports/accuracy_create_claim_breakdown_params.py => types/reports/accuracy_claim_breakdown_v1_reports_claim_breakdown_post_params.py} (51%) create mode 100644 src/types/reports/accuracy_claim_breakdown_v1_reports_claim_breakdown_post_response.py rename src/{profound/types/reports/accuracy_create_claim_citations_params.py => types/reports/accuracy_claim_citations_v1_reports_claim_citations_post_params.py} (55%) create mode 100644 src/types/reports/accuracy_claim_citations_v1_reports_claim_citations_post_response.py create mode 100644 src/types/reports/accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_params.py create mode 100644 src/types/reports/accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_response.py create mode 100644 src/types/reports/accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_params.py create mode 100644 src/types/reports/accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_response.py create mode 100644 src/types/reports/accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_params.py rename src/{profound/types/reports/accuracy_create_factcheck_setup_status_response.py => types/reports/accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_response.py} (67%) create mode 100644 src/types/reports/accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_params.py create mode 100644 src/types/reports/accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_response.py rename src/{profound/types/reports/accuracy_create_inaccurate_clusters_params.py => types/reports/accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_params.py} (50%) create mode 100644 src/types/reports/accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_response.py rename src/{profound/types/reports/accuracy_create_inaccurate_themes_params.py => types/reports/accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_params.py} (55%) create mode 100644 src/types/reports/accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_response.py create mode 100644 src/types/reports/accuracy_overview_query.py rename src/{profound/types/reports/accuracy_create_overview_params.py => types/reports/accuracy_overview_v1_reports_overview_post_params.py} (53%) create mode 100644 src/types/reports/accuracy_overview_v1_reports_overview_post_response.py create mode 100644 src/types/reports/accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_params.py create mode 100644 src/types/reports/accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_response.py create mode 100644 src/types/reports/accuracy_topic_ids_query.py create mode 100644 src/types/reports/accuracy_topic_ids_v1_reports_topic_ids_post_params.py create mode 100644 src/types/reports/accuracy_topic_ids_v1_reports_topic_ids_post_response.py create mode 100644 src/types/reports/bot_create_report_v1_v1_reports_post_params.py create mode 100644 src/types/reports/bot_create_report_v2_v2_reports_post_params.py create mode 100644 src/types/reports/bots_report_query.py create mode 100644 src/types/reports/bots_report_query_v2.py create mode 100644 src/types/reports/brand_name_filter.py create mode 100644 src/types/reports/citation_query_v1_reports_post_params.py create mode 100644 src/types/reports/citation_query_v1_reports_post_response.py create mode 100644 src/types/reports/citation_query_v2_v2_reports_post_params.py create mode 100644 src/types/reports/citation_query_v2_v2_reports_post_response.py create mode 100644 src/types/reports/citation_stream_v1_reports_stream_post_params.py create mode 100644 src/types/reports/citation_stream_v1_reports_stream_post_response.py create mode 100644 src/types/reports/citation_stream_v2_v2_reports_stream_post_params.py create mode 100644 src/types/reports/citation_stream_v2_v2_reports_stream_post_response.py create mode 100644 src/types/reports/citations_query.py create mode 100644 src/types/reports/citations_v2_query.py create mode 100644 src/types/reports/claim_breakdown_query.py create mode 100644 src/types/reports/claim_citations_query.py create mode 100644 src/types/reports/cluster_example_runs_query.py create mode 100644 src/types/reports/cluster_verification_pairs_query.py create mode 100644 src/types/reports/fact_check_setup_status_query.py create mode 100644 src/types/reports/inaccuracy_drivers_query.py create mode 100644 src/types/reports/inaccurate_clusters_query.py create mode 100644 src/types/reports/inaccurate_themes_query.py create mode 100644 src/types/reports/merchant_name_filter.py create mode 100644 src/types/reports/product_name_filter.py create mode 100644 src/types/reports/query_fanout_stream_v2_v2_reports_stream_post_params.py create mode 100644 src/types/reports/query_fanout_stream_v2_v2_reports_stream_post_response.py create mode 100644 src/types/reports/query_fanout_v1_reports_post_params.py create mode 100644 src/types/reports/query_fanout_v2_v2_reports_post_params.py create mode 100644 src/types/reports/query_fanout_v2_v2_reports_post_response.py create mode 100644 src/types/reports/query_fanouts_query.py create mode 100644 src/types/reports/query_fanouts_v2_query.py create mode 100644 src/types/reports/referral_create_report_v1_v1_reports_post_params.py create mode 100644 src/types/reports/referral_create_report_v2_v2_reports_post_params.py create mode 100644 src/types/reports/referrals_query.py create mode 100644 src/types/reports/referrals_query_v2.py create mode 100644 src/types/reports/sentiment_query.py create mode 100644 src/types/reports/sentiment_query_v1_reports_post_params.py create mode 100644 src/types/reports/sentiment_query_v2_v2_reports_post_params.py create mode 100644 src/types/reports/sentiment_query_v2_v2_reports_post_response.py create mode 100644 src/types/reports/sentiment_stream_v1_reports_stream_post_params.py create mode 100644 src/types/reports/sentiment_stream_v1_reports_stream_post_response.py create mode 100644 src/types/reports/sentiment_stream_v2_v2_reports_stream_post_params.py create mode 100644 src/types/reports/sentiment_stream_v2_v2_reports_stream_post_response.py create mode 100644 src/types/reports/sentiment_v2_query.py create mode 100644 src/types/reports/shopping_all_items_with_merchants_params.py create mode 100644 src/types/reports/shopping_all_items_with_merchants_query.py create mode 100644 src/types/reports/shopping_all_items_with_merchants_response.py create mode 100644 src/types/reports/shopping_executions_params.py create mode 100644 src/types/reports/shopping_executions_query.py create mode 100644 src/types/reports/shopping_executions_response.py create mode 100644 src/types/reports/shopping_item_visibility_params.py create mode 100644 src/types/reports/shopping_item_visibility_query.py create mode 100644 src/types/reports/shopping_item_visibility_response.py create mode 100644 src/types/reports/shopping_merchant_by_items_params.py create mode 100644 src/types/reports/shopping_merchant_by_items_query.py create mode 100644 src/types/reports/shopping_merchant_by_items_response.py create mode 100644 src/types/reports/shopping_merchant_distribution_params.py create mode 100644 src/types/reports/shopping_merchant_distribution_query.py create mode 100644 src/types/reports/shopping_merchant_distribution_response.py create mode 100644 src/types/reports/shopping_merchant_share_params.py create mode 100644 src/types/reports/shopping_merchant_share_query.py create mode 100644 src/types/reports/shopping_merchant_share_response.py create mode 100644 src/types/reports/shopping_merchant_visibility_by_brand_params.py create mode 100644 src/types/reports/shopping_merchant_visibility_by_brand_query.py create mode 100644 src/types/reports/shopping_merchant_visibility_by_brand_response.py create mode 100644 src/types/reports/shopping_product_merchant_urls_params.py create mode 100644 src/types/reports/shopping_product_merchant_urls_query.py create mode 100644 src/types/reports/shopping_product_merchant_urls_response.py create mode 100644 src/types/reports/shopping_trigger_rate_params.py create mode 100644 src/types/reports/shopping_trigger_rate_query.py create mode 100644 src/types/reports/shopping_trigger_rate_response.py create mode 100644 src/types/reports/shopping_visibility_params.py create mode 100644 src/types/reports/shopping_visibility_query.py create mode 100644 src/types/reports/shopping_visibility_response.py create mode 100644 src/types/reports/stream_citations_query.py create mode 100644 src/types/reports/stream_sentiment_query.py create mode 100644 src/types/reports/stream_visibility_query.py create mode 100644 src/types/reports/stream_web_search_results_query.py create mode 100644 src/types/reports/top_inaccurate_claims_query.py create mode 100644 src/types/reports/visibility_query.py create mode 100644 src/types/reports/visibility_query_v1_reports_post_params.py create mode 100644 src/types/reports/visibility_query_v2_v2_reports_post_params.py create mode 100644 src/types/reports/visibility_query_v2_v2_reports_post_response.py create mode 100644 src/types/reports/visibility_stream_v1_reports_stream_post_params.py create mode 100644 src/types/reports/visibility_stream_v1_reports_stream_post_response.py create mode 100644 src/types/reports/visibility_stream_v2_v2_reports_stream_post_params.py create mode 100644 src/types/reports/visibility_stream_v2_v2_reports_stream_post_response.py create mode 100644 src/types/reports/visibility_v2_query.py create mode 100644 src/types/reports/web_search_result_query_params.py create mode 100644 src/types/reports/web_search_result_query_response.py create mode 100644 src/types/reports/web_search_result_stream_params.py create mode 100644 src/types/reports/web_search_result_stream_response.py create mode 100644 src/types/reports/web_search_results_query.py create mode 100644 src/types/root_domain_filter.py create mode 100644 src/types/search_knowledge_base_request.py create mode 100644 src/types/sentiment_v2_report_query.py create mode 100644 src/types/tag_id_filter.py create mode 100644 src/types/tag_name_filter.py create mode 100644 src/types/topic_id_filter.py create mode 100644 src/types/topic_name_filter.py create mode 100644 src/types/update_agent_request.py create mode 100644 src/types/update_prompt_status_body.py create mode 100644 src/types/url_filter.py delete mode 100644 tests/__init__.py delete mode 100644 tests/api_resources/__init__.py delete mode 100644 tests/api_resources/ads/__init__.py delete mode 100644 tests/api_resources/ads/openai_ads/__init__.py delete mode 100644 tests/api_resources/ads/openai_ads/test_ad_account.py delete mode 100644 tests/api_resources/agents/__init__.py delete mode 100644 tests/api_resources/agents/test_node_types.py delete mode 100644 tests/api_resources/agents/test_runs.py delete mode 100644 tests/api_resources/content/__init__.py delete mode 100644 tests/api_resources/content/test_optimization.py delete mode 100644 tests/api_resources/knowledge_bases/__init__.py delete mode 100644 tests/api_resources/knowledge_bases/test_documents.py delete mode 100644 tests/api_resources/knowledge_bases/test_folders.py delete mode 100644 tests/api_resources/organizations/__init__.py delete mode 100644 tests/api_resources/organizations/test_categories.py delete mode 100644 tests/api_resources/projects/__init__.py delete mode 100644 tests/api_resources/projects/test_generations.py delete mode 100644 tests/api_resources/projects/test_tasks.py delete mode 100644 tests/api_resources/reports/__init__.py delete mode 100644 tests/api_resources/reports/factcheck/__init__.py delete mode 100644 tests/api_resources/reports/factcheck/test_claims.py delete mode 100644 tests/api_resources/reports/social/__init__.py delete mode 100644 tests/api_resources/reports/social/test_youtube.py delete mode 100644 tests/api_resources/reports/test_accuracy.py delete mode 100644 tests/api_resources/reports/test_factcheck.py delete mode 100644 tests/api_resources/reports/test_shopping.py delete mode 100644 tests/api_resources/reports/test_web_search_results.py delete mode 100644 tests/api_resources/test_agents.py delete mode 100644 tests/api_resources/test_documents.py delete mode 100644 tests/api_resources/test_integrations.py delete mode 100644 tests/api_resources/test_knowledge_bases.py delete mode 100644 tests/api_resources/test_organizations.py delete mode 100644 tests/api_resources/test_projects.py delete mode 100644 tests/api_resources/test_prompts.py delete mode 100644 tests/api_resources/test_reports.py delete mode 100644 tests/conftest.py delete mode 100644 tests/sample_file.txt create mode 100644 tests/smoke-test.py delete mode 100644 tests/test_client.py delete mode 100644 tests/test_extract_files.py delete mode 100644 tests/test_files.py delete mode 100644 tests/test_models.py delete mode 100644 tests/test_qs.py delete mode 100644 tests/test_required_args.py delete mode 100644 tests/test_response.py delete mode 100644 tests/test_streaming.py delete mode 100644 tests/test_transform.py delete mode 100644 tests/test_utils/test_datetime_parse.py delete mode 100644 tests/test_utils/test_json.py delete mode 100644 tests/test_utils/test_path.py delete mode 100644 tests/test_utils/test_proxy.py delete mode 100644 tests/test_utils/test_typing.py delete mode 100644 tests/utils.py delete mode 100644 uv.lock diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile deleted file mode 100644 index 62c2d13f..00000000 --- a/.devcontainer/Dockerfile +++ /dev/null @@ -1,8 +0,0 @@ -ARG VARIANT="3.9" -FROM mcr.microsoft.com/vscode/devcontainers/python:0-${VARIANT} - -USER vscode - -COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ - -RUN echo "[[ -d .venv ]] && source .venv/bin/activate || export PATH=\$PATH" >> /home/vscode/.bashrc diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json deleted file mode 100644 index e01283d8..00000000 --- a/.devcontainer/devcontainer.json +++ /dev/null @@ -1,43 +0,0 @@ -// For format details, see https://aka.ms/devcontainer.json. For config options, see the -// README at: https://github.com/devcontainers/templates/tree/main/src/debian -{ - "name": "Debian", - "build": { - "dockerfile": "Dockerfile", - "context": ".." - }, - - "postStartCommand": "uv sync --all-extras", - - "customizations": { - "vscode": { - "extensions": [ - "ms-python.python" - ], - "settings": { - "terminal.integrated.shell.linux": "/bin/bash", - "python.pythonPath": ".venv/bin/python", - "python.defaultInterpreterPath": ".venv/bin/python", - "python.typeChecking": "basic", - "terminal.integrated.env.linux": { - "PATH": "${env:PATH}" - } - } - } - }, - "features": { - "ghcr.io/devcontainers/features/node:1": {} - } - - // Features to add to the dev container. More info: https://containers.dev/features. - // "features": {}, - - // Use 'forwardPorts' to make a list of ports inside the container available locally. - // "forwardPorts": [], - - // Configure tool-specific properties. - // "customizations": {}, - - // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. - // "remoteUser": "root" -} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 22936c21..00000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,95 +0,0 @@ -name: CI -on: - push: - branches: - - '**' - - '!integrated/**' - - '!stl-preview-head/**' - - '!stl-preview-base/**' - - '!generated' - - '!codegen/**' - - 'codegen/stl/**' - pull_request: - branches-ignore: - - 'stl-preview-head/**' - - 'stl-preview-base/**' - -jobs: - lint: - timeout-minutes: 10 - name: lint - runs-on: ${{ startsWith(github.repository, 'stainless-sdks/') && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} - if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata') - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - - name: Install uv - uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5.4.2 - with: - version: '0.10.2' - - - name: Install dependencies - run: uv sync --all-extras - - - name: Run lints - run: ./scripts/lint - - build: - if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata') - timeout-minutes: 10 - name: build - permissions: - contents: read - id-token: write - runs-on: ${{ startsWith(github.repository, 'stainless-sdks/') && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - - name: Install uv - uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5.4.2 - with: - version: '0.10.2' - - - name: Install dependencies - run: uv sync --all-extras - - - name: Run build - run: uv build - - - name: Get GitHub OIDC Token - if: |- - github.repository == 'stainless-sdks/profound-python' && - !startsWith(github.ref, 'refs/heads/stl/') - id: github-oidc - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 - with: - script: core.setOutput('github_token', await core.getIDToken()); - - - name: Upload tarball - if: |- - github.repository == 'stainless-sdks/profound-python' && - !startsWith(github.ref, 'refs/heads/stl/') - env: - URL: https://pkg.stainless.com/s - AUTH: ${{ steps.github-oidc.outputs.github_token }} - SHA: ${{ github.sha }} - run: ./scripts/utils/upload-artifact.sh - - test: - timeout-minutes: 10 - name: test - runs-on: ${{ startsWith(github.repository, 'stainless-sdks/') && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} - if: github.event_name == 'push' || github.event.pull_request.head.repo.fork - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - - name: Install uv - uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5.4.2 - with: - version: '0.10.2' - - - name: Bootstrap - run: ./scripts/bootstrap - - - name: Run tests - run: ./scripts/test diff --git a/.github/workflows/publish-pypi.yml b/.github/workflows/publish-pypi.yml deleted file mode 100644 index 9718104e..00000000 --- a/.github/workflows/publish-pypi.yml +++ /dev/null @@ -1,29 +0,0 @@ -# This workflow is triggered when a GitHub release is created. -# It can also be run manually to re-publish to PyPI in case it failed for some reason. -# You can run this workflow by navigating to https://www.github.com/cooper-square-technologies/profound-python-sdk/actions/workflows/publish-pypi.yml -name: Publish PyPI -on: - workflow_dispatch: - - release: - types: [published] - -jobs: - publish: - name: publish - runs-on: ubuntu-latest - permissions: - contents: read - id-token: write - - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - - name: Install uv - uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5.4.2 - with: - version: '0.9.13' - - - name: Publish to PyPI - run: | - bash ./bin/publish-pypi diff --git a/.github/workflows/release-doctor.yml b/.github/workflows/release-doctor.yml deleted file mode 100644 index 78087bca..00000000 --- a/.github/workflows/release-doctor.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: Release Doctor -on: - pull_request: - branches: - - main - workflow_dispatch: - -jobs: - release_doctor: - name: release doctor - runs-on: ubuntu-latest - if: github.repository == 'cooper-square-technologies/profound-python-sdk' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || startsWith(github.head_ref, 'release-please') || github.head_ref == 'next') - - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - - name: Check release environment - run: | - bash ./bin/check-release-environment diff --git a/.github/workflows/sdk-ci.yml b/.github/workflows/sdk-ci.yml new file mode 100644 index 00000000..05948505 --- /dev/null +++ b/.github/workflows/sdk-ci.yml @@ -0,0 +1,16 @@ +name: Python SDK CI + +on: + push: + pull_request: + +jobs: + verify: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + with: + python-version: "3.11" + - run: python -m pip install --upgrade build + - run: python -m build diff --git a/.github/workflows/sdk-release.yml b/.github/workflows/sdk-release.yml new file mode 100644 index 00000000..69e62d9e --- /dev/null +++ b/.github/workflows/sdk-release.yml @@ -0,0 +1,28 @@ +name: Python SDK Release + +on: + release: + types: [published] + workflow_dispatch: + +permissions: + contents: read + id-token: write + packages: write + +jobs: + release: + runs-on: ubuntu-latest + env: + VERSIONING_POLICY: manual + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + with: + python-version: "3.11" + - run: python -m pip install --upgrade build + - run: python -m build + - name: Publish to PyPI + uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0 + with: + skip-existing: true diff --git a/.gitignore b/.gitignore index 3824f4c4..00549543 100644 --- a/.gitignore +++ b/.gitignore @@ -1,16 +1,10 @@ -.prism.log -.stdy.log -_dev - -__pycache__ -.mypy_cache - -dist - -.venv -.idea - -.env -.envrc -codegen.log -Brewfile.lock.json +# Generated by Scalar SDK Generator. +__pycache__/ +*.py[cod] +*.egg-info/ +.venv/ +dist/ +build/ +.mypy_cache/ +.pytest_cache/ +.ruff_cache/ diff --git a/.python-version b/.python-version deleted file mode 100644 index 43077b24..00000000 --- a/.python-version +++ /dev/null @@ -1 +0,0 @@ -3.9.18 diff --git a/.stats.yml b/.stats.yml deleted file mode 100644 index a3456178..00000000 --- a/.stats.yml +++ /dev/null @@ -1,4 +0,0 @@ -configured_endpoints: 112 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/profound/profound-149b8a08095a18bf3fb737d6be9225c2fe1f493e6c7a9c05292cd6fd7279831f.yml -openapi_spec_hash: 666ac2325673e3d2ecf32cfa3d800a3b -config_hash: 5c89b9e84ab75df8b9d40d3e90f1d9a0 diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 5b010307..00000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "python.analysis.importFormat": "relative", -} diff --git a/Brewfile b/Brewfile deleted file mode 100644 index c43041ce..00000000 --- a/Brewfile +++ /dev/null @@ -1,2 +0,0 @@ -brew "uv" - diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 1b9ccab8..00000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,121 +0,0 @@ -## Setting up the environment - -### With `uv` - -We use [uv](https://docs.astral.sh/uv/) to manage dependencies because it will automatically provision a Python environment with the expected Python version. To set it up, run: - -```sh -$ ./scripts/bootstrap -``` - -Or [install uv manually](https://docs.astral.sh/uv/getting-started/installation/) and run: - -```sh -$ uv sync --all-extras -``` - -You can then run scripts using `uv run python script.py` or by manually activating the virtual environment: - -```sh -# manually activate - https://docs.python.org/3/library/venv.html#how-venvs-work -$ source .venv/bin/activate - -# now you can omit the `uv run` prefix -$ python script.py -``` - -### Without `uv` - -Alternatively if you don't want to install `uv`, you can stick with the standard `pip` setup by ensuring you have the Python version specified in `.python-version`, create a virtual environment however you desire and then install dependencies using this command: - -```sh -$ pip install -r requirements-dev.lock -``` - -## Modifying/Adding code - -Most of the SDK is generated code. Modifications to code will be persisted between generations, but may -result in merge conflicts between manual patches and changes from the generator. The generator will never -modify the contents of the `src/profound/lib/` and `examples/` directories. - -## Adding and running examples - -All files in the `examples/` directory are not modified by the generator and can be freely edited or added to. - -```py -# add an example to examples/.py - -#!/usr/bin/env -S uv run python -… -``` - -```sh -$ chmod +x examples/.py -# run the example against your api -$ ./examples/.py -``` - -## Using the repository from source - -If you’d like to use the repository from source, you can either install from git or link to a cloned repository: - -To install via git: - -```sh -$ pip install git+ssh://git@github.com/cooper-square-technologies/profound-python-sdk.git -``` - -Alternatively, you can build from source and install the wheel file: - -Building this package will create two files in the `dist/` directory, a `.tar.gz` containing the source files and a `.whl` that can be used to install the package efficiently. - -To create a distributable version of the library, all you have to do is run this command: - -```sh -$ uv build -# or -$ python -m build -``` - -Then to install: - -```sh -$ pip install ./path-to-wheel-file.whl -``` - -## Running tests - -```sh -$ ./scripts/test -``` - -## Linting and formatting - -This repository uses [ruff](https://github.com/astral-sh/ruff) and -[black](https://github.com/psf/black) to format the code in the repository. - -To lint: - -```sh -$ ./scripts/lint -``` - -To format and fix all ruff issues automatically: - -```sh -$ ./scripts/format -``` - -## Publishing and releases - -Changes made to this repository via the automated release PR pipeline should publish to PyPI automatically. If -the changes aren't made through the automated pipeline, you may want to make releases manually. - -### Publish with a GitHub workflow - -You can release to package managers by using [the `Publish PyPI` GitHub action](https://www.github.com/cooper-square-technologies/profound-python-sdk/actions/workflows/publish-pypi.yml). This requires a setup organization or repository secret to be set up. - -### Publish manually - -If you need to manually release a package, you can run the `bin/publish-pypi` script with a `PYPI_TOKEN` set on -the environment. diff --git a/LICENSE b/LICENSE index c285b1c0..261eeb9e 100644 --- a/LICENSE +++ b/LICENSE @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2026 Profound + Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/README.md b/README.md index a537aaa8..d480134b 100644 --- a/README.md +++ b/README.md @@ -1,392 +1,184 @@ -# Profound Python API library +# profound - -[![PyPI version](https://img.shields.io/pypi/v/profound.svg?label=pypi%20(stable))](https://pypi.org/project/profound/) +Generated Python SDK for profound API. -The Profound Python library provides convenient access to the Profound REST API from any Python 3.9+ -application. The library includes type definitions for all request params and response fields, -and offers both synchronous and asynchronous clients powered by [httpx](https://github.com/encode/httpx). +
-## MCP Server +## Contents -Use the Profound MCP Server to enable AI assistants to interact with this API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application. +- [Installation](#installation) +- [Usage](#usage) +- [API Reference](./api.md) +- [Async](#async) +- [Streaming](#streaming) +- [Authentication](#authentication) +- [Errors](#errors) +- [Client Options](#client-options) +- [Retries and Timeouts](#retries-and-timeouts) +- [Helpers](#helpers) +- [Logging](#logging) +- [Requirements](#requirements) -[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=%40profoundai%2Fmcp&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBwcm9mb3VuZGFpL21jcCJdLCJlbnYiOnsiUFJPRk9VTkRfQUNDRVNTX1RPS0VOIjoiTXkgQWNjZXNzIFRva2VuIiwiUFJPRk9VTkRfQVBJX0tFWSI6Ik15IEFQSSBLZXkifX0) -[![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22%40profoundai%2Fmcp%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40profoundai%2Fmcp%22%5D%2C%22env%22%3A%7B%22PROFOUND_ACCESS_TOKEN%22%3A%22My%20Access%20Token%22%2C%22PROFOUND_API_KEY%22%3A%22My%20API%20Key%22%7D%7D) - -> Note: You may need to set environment variables in your MCP client. - -## Documentation - -The REST API documentation can be found on [docs.tryprofound.com](https://docs.tryprofound.com). The full API of this library can be found in [api.md](api.md). +
## Installation ```sh -# install from PyPI pip install profound ``` -## Usage +
-The full API of this library can be found in [api.md](api.md). +## Usage ```python import os + from profound import Profound client = Profound( - api_key=os.environ.get("PROFOUND_API_KEY"), # This is the default and can be omitted - # defaults to "production". - environment="development", + api_key_header=os.environ.get("API_KEY_HEADER"), ) -categories = client.organizations.categories.list() -``` - -While you can provide a `access_token` keyword argument, -we recommend using [python-dotenv](https://pypi.org/project/python-dotenv/) -to add `PROFOUND_ACCESS_TOKEN="My Access Token"` to your `.env` file -so that your Access Token is not stored in source control. - -## Async usage - -Simply import `AsyncProfound` instead of `Profound` and use `await` with each API call: - -```python -import os -import asyncio -from profound import AsyncProfound - -client = AsyncProfound( - api_key=os.environ.get("PROFOUND_API_KEY"), # This is the default and can be omitted - # defaults to "production". - environment="development", +organization = client.organization.list_category_regions_v1_org_categories_category_regions_get( + category_id="categoryId", ) - - -async def main() -> None: - categories = await client.organizations.categories.list() - - -asyncio.run(main()) +print(organization) ``` -Functionality between the synchronous and asynchronous clients is otherwise identical. +The examples in the following sections assume a `client` configured as shown above. -### With aiohttp +See the [API reference](./api.md) for every available operation. -By default, the async client uses `httpx` for HTTP requests. However, for improved concurrency performance you may also use `aiohttp` as the HTTP backend. +
-You can enable this by installing `aiohttp`: +## Async -```sh -# install from PyPI -pip install profound[aiohttp] -``` - -Then you can enable it by instantiating the client with `http_client=DefaultAioHttpClient()`: +Every client has an `Async` counterpart (`AsyncProfound`) exposing the same resource tree with `await`. ```python -import os import asyncio -from profound import DefaultAioHttpClient -from profound import AsyncProfound +from profound import AsyncProfound async def main() -> None: - async with AsyncProfound( - api_key=os.environ.get("PROFOUND_API_KEY"), # This is the default and can be omitted - http_client=DefaultAioHttpClient(), - ) as client: - categories = await client.organizations.categories.list() - + client = AsyncProfound() + organization = await client.organization.list_category_regions_v1_org_categories_category_regions_get( + category_id="categoryId", + ) asyncio.run(main()) ``` -## Using types - -Nested request parameters are [TypedDicts](https://docs.python.org/3/library/typing.html#typing.TypedDict). Responses are [Pydantic models](https://docs.pydantic.dev) which also provide helper methods for things like: - -- Serializing back into JSON, `model.to_json()` -- Converting to a dictionary, `model.to_dict()` - -Typed requests and responses provide autocomplete and documentation within your editor. If you would like to see type errors in VS Code to help catch bugs earlier, set `python.analysis.typeCheckingMode` to `basic`. - -from datetime import datetime - -## Nested params - -Nested parameters are dictionaries, typed using `TypedDict`, for example: - -```python -from profound import Profound - -client = Profound() - -response = client.prompts.answers( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=datetime.fromisoformat("2019-12-27T18:11:19.117"), - start_date=datetime.fromisoformat("2019-12-27T18:11:19.117"), - include={}, -) -print(response.include) -``` - -## Handling errors - -When the library is unable to connect to the API (for example, due to network connection problems or a timeout), a subclass of `profound.APIConnectionError` is raised. - -When the API returns a non-success status code (that is, 4xx or 5xx -response), a subclass of `profound.APIStatusError` is raised, containing `status_code` and `response` properties. - -All errors inherit from `profound.APIError`. - -```python -import profound -from profound import Profound - -client = Profound() - -try: - client.organizations.categories.list() -except profound.APIConnectionError as e: - print("The server could not be reached") - print(e.__cause__) # an underlying Exception, likely raised within httpx. -except profound.RateLimitError as e: - print("A 429 status code was received; we should back off a bit.") -except profound.APIStatusError as e: - print("Another non-200-range status code was received") - print(e.status_code) - print(e.response) -``` - -Error codes are as follows: - -| Status Code | Error Type | -| ----------- | -------------------------- | -| 400 | `BadRequestError` | -| 401 | `AuthenticationError` | -| 403 | `PermissionDeniedError` | -| 404 | `NotFoundError` | -| 422 | `UnprocessableEntityError` | -| 429 | `RateLimitError` | -| >=500 | `InternalServerError` | -| N/A | `APIConnectionError` | - -### Retries - -Certain errors are automatically retried 2 times by default, with a short exponential backoff. -Connection errors (for example, due to a network connectivity problem), 408 Request Timeout, 409 Conflict, -429 Rate Limit, and >=500 Internal errors are all retried by default. +
-You can use the `max_retries` option to configure or disable retry settings: +## Streaming -```python -from profound import Profound - -# Configure the default for all requests: -client = Profound( - # default is 2 - max_retries=0, -) - -# Or, configure per-request: -client.with_options(max_retries=5).organizations.categories.list() -``` - -### Timeouts - -By default requests time out after 1 minute. You can configure this with a `timeout` option, -which accepts a float or an [`httpx.Timeout`](https://www.python-httpx.org/advanced/timeouts/#fine-tuning-the-configuration) object: +Streaming endpoints return an async iterator that yields results as the server emits them. ```python -from profound import Profound - -# Configure the default for all requests: -client = Profound( - # 20 seconds (default is 1 minute) - timeout=20.0, -) - -# More granular control: -client = Profound( - timeout=httpx.Timeout(60.0, read=5.0, write=10.0, connect=2.0), +stream = client.prompts.answers.stream_v2_v2_prompts_stream_post( + category_id="", + start_date="", + end_date="", ) - -# Override per-request: -client.with_options(timeout=5.0).organizations.categories.list() -``` - -On timeout, an `APITimeoutError` is thrown. - -Note that requests that time out are [retried twice by default](#retries). - -## Advanced - -### Logging - -We use the standard library [`logging`](https://docs.python.org/3/library/logging.html) module. - -You can enable logging by setting the environment variable `PROFOUND_LOG` to `info`. - -```shell -$ export PROFOUND_LOG=info +for event in stream: + print(event) ``` -Or to `debug` for more verbose logging. +
-### How to tell whether `None` means `null` or missing +## Authentication -In an API response, a field may be explicitly `null`, or missing entirely; in either case, its value is `None` in this library. You can differentiate the two cases with `.model_fields_set`: +Pass credentials to the generated client constructor. Environment variables are read automatically when supported by the target runtime. -```py -if response.my_field is None: - if 'my_field' not in response.model_fields_set: - print('Got json like {}, without a "my_field" key present at all.') - else: - print('Got json like {"my_field": null}.') -``` +| Option | Type | Default | Description | +| --- | --- | --- | --- | +| `api_key_header` | `string \| provider` | - | Credential for the APIKeyHeader scheme. Defaults to API_KEY_HEADER. | +| `bearer_auth` | `string \| provider` | - | Credential for the BearerAuth scheme. Defaults to BEARER_AUTH. | -### Accessing raw response data (e.g. headers) +Declared schemes: -The "raw" Response object can be accessed by prefixing `.with_raw_response.` to any HTTP method call, e.g., +- `APIKeyHeader` API key in header `X-API-Key` +- `BearerAuth` bearer token -```py -from profound import Profound - -client = Profound() -response = client.organizations.categories.with_raw_response.list() -print(response.headers.get('X-My-Header')) - -category = response.parse() # get the object that `organizations.categories.list()` would have returned -print(category) -``` +
-These methods return an [`APIResponse`](https://github.com/cooper-square-technologies/profound-python-sdk/tree/main/src/profound/_response.py) object. +## Errors -The async client returns an [`AsyncAPIResponse`](https://github.com/cooper-square-technologies/profound-python-sdk/tree/main/src/profound/_response.py) with the same structure, the only difference being `await`able methods for reading the response content. - -#### `.with_streaming_response` - -The above interface eagerly reads the full response body when you make the request, which may not always be what you want. - -To stream the response body, use `.with_streaming_response` instead, which requires a context manager and only reads the response body once you call `.read()`, `.text()`, `.json()`, `.iter_bytes()`, `.iter_text()`, `.iter_lines()` or `.parse()`. In the async client, these are async methods. +Non-success responses throw generated API errors. Error objects expose status, headers, response body, and request metadata where the target runtime supports it. ```python -with client.organizations.categories.with_streaming_response.list() as response: - print(response.headers.get("X-My-Header")) - - for line in response.iter_lines(): - print(line) -``` - -The context manager is required so that the response will reliably be closed. - -### Making custom/undocumented requests - -This library is typed for convenient access to the documented API. - -If you need to access undocumented endpoints, params, or response properties, the library can still be used. - -#### Undocumented endpoints - -To make requests to undocumented endpoints, you can make requests using `client.get`, `client.post`, and other -http verbs. Options on the client will be respected (such as retries) when making this request. - -```py -import httpx - -response = client.post( - "/foo", - cast_to=httpx.Response, - body={"my_param": True}, -) +from profound import APIStatusError -print(response.headers.get("x-foo")) +try: + organization = client.organization.list_category_regions_v1_org_categories_category_regions_get( + category_id="categoryId", + ) +except APIStatusError as err: + print(err.status_code, err.message) + raise ``` -#### Undocumented request params - -If you want to explicitly send an extra param, you can do so with the `extra_query`, `extra_body`, and `extra_headers` request -options. - -#### Undocumented response properties - -To access undocumented response properties, you can access the extra fields like `response.unknown_prop`. You -can also get all the extra fields on the Pydantic model as a dict with -[`response.model_extra`](https://docs.pydantic.dev/latest/api/base_model/#pydantic.BaseModel.model_extra). +Documented error statuses: `422`. -### Configuring the HTTP client +
-You can directly override the [httpx client](https://www.python-httpx.org/api/#client) to customize it for your use case, including: +## Client Options -- Support for [proxies](https://www.python-httpx.org/advanced/proxies/) -- Custom [transports](https://www.python-httpx.org/advanced/transports/) -- Additional [advanced](https://www.python-httpx.org/advanced/clients/) functionality +Configure the generated client by setting any of these options when you create it. ```python -import httpx -from profound import Profound, DefaultHttpxClient +from profound import Profound client = Profound( - # Or use the `PROFOUND_BASE_URL` env var - base_url="http://my.test.server.example.com:8083", - http_client=DefaultHttpxClient( - proxy="http://my.test.proxy.example.com", - transport=httpx.HTTPTransport(local_address="0.0.0.0"), - ), + timeout=60.0, + max_retries=2, ) ``` -You can also customize the client on a per-request basis by using `with_options()`: - -```python -client.with_options(http_client=DefaultHttpxClient(...)) -``` - -### Managing HTTP resources +| Option | Type | Default | Description | +| --- | --- | --- | --- | +| `api_key_header` | `str \| None` | `os.environ.get("API_KEY_HEADER")` | Credential for the APIKeyHeader scheme. | +| `bearer_auth` | `str \| None` | `os.environ.get("BEARER_AUTH")` | Credential for the BearerAuth scheme. | +| `base_url` | `str \| httpx.URL \| None` | - | Override the default API base URL. | +| `timeout` | `float \| Timeout \| None` | `60.0` | Maximum time in seconds to wait for a response before aborting a request. | +| `max_retries` | `int` | `2` | Number of retries for temporary failures. | +| `default_headers` | `Mapping[str, str] \| None` | - | Headers sent with every request. | +| `default_query` | `Mapping[str, object] \| None` | - | Query parameters sent with every request. | -By default the library closes underlying HTTP connections whenever the client is [garbage collected](https://docs.python.org/3/reference/datamodel.html#object.__del__). You can manually close the client using the `.close()` method if desired, or with a context manager that closes when exiting. +
-```py -from profound import Profound +## Retries and Timeouts -with Profound() as client: - # make requests here - ... +Generated clients support request timeouts and retry temporary failures such as network errors, 408, 409, 429, and 5xx responses. Retry delays honor `Retry-After` headers when present. Tune the retry and timeout client options shown above, or override them per request. -# HTTP client is now closed -``` +
-## Versioning +## Helpers -This package generally follows [SemVer](https://semver.org/spec/v2.0.0.html) conventions, though certain backwards-incompatible changes may be released as minor versions: +- Use `client.with_raw_response..(...)` to access the raw `httpx.Response` and parse it yourself. +- Use `client.with_streaming_response..(...)` to stream a response body without buffering it. -1. Changes that only affect static types, without breaking runtime behavior. -2. Changes to library internals which are technically public but not intended or documented for external use. _(Please open a GitHub issue to let us know if you are relying on such internals.)_ -3. Changes that we do not expect to impact the vast majority of users in practice. +
-We take backwards-compatibility seriously and work hard to ensure you can rely on a smooth upgrade experience. +## Logging -We are keen for your feedback; please open an [issue](https://www.github.com/cooper-square-technologies/profound-python-sdk/issues) with questions, bugs, or suggestions. +- Set the `PROFOUND_LOG` environment variable to `info` or `debug` to enable HTTP logging. +- Logs are emitted through the standard `logging` module under the `profound` logger. -### Determining the installed version +
-If you've upgraded to the latest version but aren't seeing any new features you were expecting then your python environment is likely still using an older version. +## Requirements -You can determine the version that is being used at runtime with: +- Python 3.8 or newer -```py -import profound -print(profound.__version__) -``` +Powered by Scalar. -## Requirements -Python 3.9 or higher. +## Contributions -## Contributing +This SDK is generated programmatically. Manual edits to generated files will be +overwritten on the next build. -See [the contributing documentation](./CONTRIBUTING.md). +### SDK created by [Scalar](https://www.scalar.com/?utm_source=external-api-2-python&utm_campaign=sdk) diff --git a/SECURITY.md b/SECURITY.md index 06dc9ae2..22d4cea6 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,27 +1,3 @@ # Security Policy -## Reporting Security Issues - -This SDK is generated by [Stainless Software Inc](http://stainless.com). Stainless takes security seriously, and encourages you to report any security vulnerability promptly so that appropriate action can be taken. - -To report a security issue, please contact the Stainless team at security@stainless.com. - -## Responsible Disclosure - -We appreciate the efforts of security researchers and individuals who help us maintain the security of -SDKs we generate. If you believe you have found a security vulnerability, please adhere to responsible -disclosure practices by allowing us a reasonable amount of time to investigate and address the issue -before making any information public. - -## Reporting Non-SDK Related Security Issues - -If you encounter security issues that are not directly related to SDKs but pertain to the services -or products provided by Profound, please follow the respective company's security reporting guidelines. - -### Profound Terms and Policies - -Please contact support@tryprofound.com for any questions or concerns regarding the security of our services. - ---- - -Thank you for helping us keep the SDKs and systems they interact with secure. +Please report any vulnerabilities through the standard issue tracker. diff --git a/VERSIONING.md b/VERSIONING.md new file mode 100644 index 00000000..8f16c2c8 --- /dev/null +++ b/VERSIONING.md @@ -0,0 +1,7 @@ +# Versioning + +This SDK is configured with the `manual` versioning policy. + +- `manual`: package versions are set explicitly before release. +- `semver`: releases should follow semantic versioning based on API and SDK surface changes. +- `calendar`: releases should use a calendar-derived version chosen by the release workflow or maintainer. diff --git a/api.md b/api.md index 521dc3d4..e2b68e76 100644 --- a/api.md +++ b/api.md @@ -1,510 +1,1691 @@ -# Shared Types +# profound Python API + +Complete reference of every operation, grouped by resource. See [the README](./README.md) for usage and configuration. + +## Contents + +- [`Organization`](#organization) + - [Get Category Regions](#get-category-regions) +- [`Prompts`](#prompts) + - [`Prompts Answers`](#prompts-answers) + - [Get Answers](#get-answers) + - [Query Answers V2](#query-answers-v2) + - [Stream Answers V2](#stream-answers-v2) +- [`Reports`](#reports) + - [Query Sentiment V2](#query-sentiment-v2) + - [`Reports Citations`](#reports-citations) + - [Query Citations](#query-citations) + - [Stream Citations](#stream-citations) + - [Query Citations V2](#query-citations-v2) + - [Stream Citations V2](#stream-citations-v2) + - [`Reports Visibility`](#reports-visibility) + - [Query Visibility](#query-visibility) + - [Stream Visibility](#stream-visibility) + - [Query Visibility V2](#query-visibility-v2) + - [Stream Visibility V2](#stream-visibility-v2) + - [`Reports Sentiment`](#reports-sentiment) + - [Query Sentiment](#query-sentiment) + - [Stream Sentiment](#stream-sentiment) + - [Query Sentiment V2](#query-sentiment-v2-1) + - [Stream Sentiment V2](#stream-sentiment-v2) + - [`Reports WebSearchResults`](#reports-websearchresults) + - [Query Web Search Results](#query-web-search-results) + - [Stream Web Search Results](#stream-web-search-results) + - [`Reports Referrals`](#reports-referrals) + - [Get Referrals Report V1](#get-referrals-report-v1) + - [Get Referrals Report V2](#get-referrals-report-v2) + - [`Reports Bots`](#reports-bots) + - [Get Bots Report V1](#get-bots-report-v1) + - [Get Bots Report V2](#get-bots-report-v2) + - [`Reports QueryFanouts`](#reports-queryfanouts) + - [Query Fanouts](#query-fanouts) + - [Query Fanouts V2](#query-fanouts-v2) + - [Stream Query Fanouts V2](#stream-query-fanouts-v2) + - [`Reports Shopping`](#reports-shopping) + - [Shopping Visibility](#shopping-visibility) + - [Shopping Item Visibility](#shopping-item-visibility) + - [Shopping Merchant Distribution](#shopping-merchant-distribution) + - [Shopping Merchant Visibility By Brand](#shopping-merchant-visibility-by-brand) + - [Shopping Merchant By Items](#shopping-merchant-by-items) + - [Shopping All Items With Merchants](#shopping-all-items-with-merchants) + - [Shopping Trigger Rate](#shopping-trigger-rate) + - [Shopping Merchant Share](#shopping-merchant-share) + - [Shopping Product Merchant Urls](#shopping-product-merchant-urls) + - [Shopping Executions](#shopping-executions) + - [`Reports Accuracy`](#reports-accuracy) + - [Accuracy Overview](#accuracy-overview) + - [Accuracy Breakdown](#accuracy-breakdown) + - [Accuracy Citation Analysis](#accuracy-citation-analysis) + - [Accuracy Topic Ids](#accuracy-topic-ids) + - [Accuracy Inaccurate Themes](#accuracy-inaccurate-themes) + - [Accuracy Inaccurate Clusters](#accuracy-inaccurate-clusters) + - [Accuracy Inaccuracy Drivers](#accuracy-inaccuracy-drivers) + - [Accuracy Top Inaccurate Claims](#accuracy-top-inaccurate-claims) + - [Accuracy Claim Breakdown](#accuracy-claim-breakdown) + - [Accuracy Claim Citations](#accuracy-claim-citations) + - [Accuracy Cluster Example Runs](#accuracy-cluster-example-runs) + - [Accuracy Cluster Verification Pairs](#accuracy-cluster-verification-pairs) + - [Accuracy Factcheck Setup Status](#accuracy-factcheck-setup-status) +- [`Content`](#content) + - [`Content Optimization`](#content-optimization) + - [Optimization List](#optimization-list) + - [Optimization Analysis](#optimization-analysis) +- [`KnowledgeBases`](#knowledgebases) + - [List Knowledge Bases](#list-knowledge-bases) + - [Search Knowledge Base](#search-knowledge-base) + - [`KnowledgeBases Documents`](#knowledgebases-documents) + - [Add Document](#add-document) + - [Update Document](#update-document) + - [Delete Document](#delete-document) + - [`KnowledgeBases Folders`](#knowledgebases-folders) + - [Add Folder](#add-folder) + - [Delete Folder](#delete-folder) +- [`Agents`](#agents) + - [List agents](#list-agents) + - [Create an agent](#create-an-agent) + - [Publish an agent](#publish-an-agent) + - [Get an agent](#get-an-agent) + - [Update an agent](#update-an-agent) + - [Get an agent's graph](#get-an-agents-graph) + - [`Agents NodeTypes`](#agents-nodetypes) + - [List node types](#list-node-types) + - [Get a node type schema](#get-a-node-type-schema) + - [`Agents Runs`](#agents-runs) + - [Run an agent](#run-an-agent) + - [Get an agent run](#get-an-agent-run) +- [`Organizations`](#organizations) + - [List organizations](#list-organizations) + - [Get Regions](#get-regions) + - [Get Models](#get-models) + - [Get Domains](#get-domains) + - [Get Assets](#get-assets) + - [Get Personas](#get-personas) + - [`Organizations Categories`](#organizations-categories) + - [Get Categories](#get-categories) + - [Get Category Topics](#get-category-topics) + - [Get Category Tags](#get-category-tags) + - [List prompts](#list-prompts) + - [Create prompts](#create-prompts) + - [Update prompts](#update-prompts) + - [Update prompt status](#update-prompt-status) + - [Get Category Assets](#get-category-assets) + - [Get Category Personas](#get-category-personas) + +## Setup ```python -from profound.types import ( - AnalysisTypeFilter, - AssetIDFilter, - BotNameFilter, - BotProviderFilter, - CursorPagination, - ModelIDFilter, - Pagination, - PathFilter, - PersonaIDFilter, - PromptFilter, - PromptTypeFilter, - RegionIDFilter, - RegionNameFilter, - TagIDFilter, - TopicIDFilter, +import os + +from profound import Profound + +client = Profound( + api_key_header=os.environ.get("API_KEY_HEADER"), ) ``` -# Organizations +## `Organization` + +### Get Category Regions + +Get the regions for a specific category. -Types: +| Direction | Type | +| --- | --- | +| Response | [`OrganizationListCategoryRegionsV1OrgCategoriesCategoryRegionsGetResponse`](./src/types/organization_list_category_regions_v1_org_categories_category_regions_get_response.py) | ```python -from profound.types import ( - Category, - NamedResource, - Organization, - PersonaProfile, - PersonaProfileBehavior, - PersonaProfileDemographics, - PersonaProfileEmployment, - OrganizationListResponse, - OrganizationDomainsResponse, - OrganizationGetPersonasResponse, - OrganizationListAssetsResponse, - OrganizationModelsResponse, - OrganizationRegionsResponse, +organization = client.organization.list_category_regions_v1_org_categories_category_regions_get( + category_id="categoryId", ) ``` -Methods: +## `Prompts` + +### `Prompts Answers` + +#### Get Answers + +| Direction | Type | +| --- | --- | +| Request | [`AnswerCreateV1PromptsPostParams`](./src/types/prompts/answer_create_v1_prompts_post_params.py) | +| Response | [`AnswerCreateV1PromptsPostResponse`](./src/types/prompts/answer_create_v1_prompts_post_response.py) | -- client.organizations.list() -> OrganizationListResponse -- client.organizations.domains(\*\*params) -> OrganizationDomainsResponse -- client.organizations.get_personas(\*\*params) -> OrganizationGetPersonasResponse -- client.organizations.list_assets(\*\*params) -> OrganizationListAssetsResponse -- client.organizations.models() -> OrganizationModelsResponse -- client.organizations.regions(\*\*params) -> OrganizationRegionsResponse - -## Categories - -Types: - -```python -from profound.types.organizations import ( - FieldDiff, - IDOrName, - NamedResourceDiffList, - CategoryListResponse, - CategoryAssetsResponse, - CategoryCreatePromptsResponse, - CategoryGetCategoryPersonasResponse, - CategoryGetCitationCategoriesResponse, - CategoryPromptsResponse, - CategoryRetrieveRegionsResponse, - CategoryTagsResponse, - CategoryTopicsResponse, - CategoryUpdatePromptStatusResponse, - CategoryUpdatePromptsResponse, +```python +answer = client.prompts.answers.create_v1_prompts_post( + category_id="", + start_date="", + end_date="", ) ``` -Methods: +#### Query Answers V2 + +| Direction | Type | +| --- | --- | +| Request | [`AnswerQueryV2V2PromptsPostParams`](./src/types/prompts/answer_query_v2_v2_prompts_post_params.py) | +| Response | [`AnswerQueryV2V2PromptsPostResponse`](./src/types/prompts/answer_query_v2_v2_prompts_post_response.py) | + +```python +answer = client.prompts.answers.query_v2_v2_prompts_post( + category_id="", + start_date="", + end_date="", +) +``` -- client.organizations.categories.list(\*\*params) -> CategoryListResponse -- client.organizations.categories.assets(category_id) -> CategoryAssetsResponse -- client.organizations.categories.create_prompts(category_id, \*\*params) -> CategoryCreatePromptsResponse -- client.organizations.categories.get_category_personas(category_id) -> CategoryGetCategoryPersonasResponse -- client.organizations.categories.get_citation_categories(category_id) -> CategoryGetCitationCategoriesResponse -- client.organizations.categories.prompts(category_id, \*\*params) -> CategoryPromptsResponse -- client.organizations.categories.retrieve_regions(category_id) -> CategoryRetrieveRegionsResponse -- client.organizations.categories.tags(category_id) -> CategoryTagsResponse -- client.organizations.categories.topics(category_id) -> CategoryTopicsResponse -- client.organizations.categories.update_prompt_status(category_id, \*\*params) -> CategoryUpdatePromptStatusResponse -- client.organizations.categories.update_prompts(category_id, \*\*params) -> CategoryUpdatePromptsResponse +#### Stream Answers V2 -# Prompts - -Types: +| Direction | Type | +| --- | --- | +| Request | [`AnswerStreamV2V2PromptsStreamPostParams`](./src/types/prompts/answer_stream_v2_v2_prompts_stream_post_params.py) | +| Response | [`AnswerStreamV2V2PromptsStreamPostResponse`](./src/types/prompts/answer_stream_v2_v2_prompts_stream_post_response.py) | ```python -from profound.types import ( - PromptAnswersResponse, - PromptAnswersV2Response, - PromptStreamAnswersV2Response, +stream = client.prompts.answers.stream_v2_v2_prompts_stream_post( + category_id="", + start_date="", + end_date="", ) +for event in stream: + print(event) ``` -Methods: - -- client.prompts.answers(\*\*params) -> PromptAnswersResponse -- client.prompts.answers_v2(\*\*params) -> PromptAnswersV2Response -- client.prompts.stream_answers_v2(\*\*params) -> PromptStreamAnswersV2Response +## `Reports` -# Reports +### Query Sentiment V2 -Types: +| Direction | Type | +| --- | --- | +| Request | [`ReportQuerySentimentV2V1SentimentV2PostParams`](./src/types/report_query_sentiment_v2_v1_sentiment_v2_post_params.py) | +| Response | [`ReportQuerySentimentV2V1SentimentV2PostResponse`](./src/types/report_query_sentiment_v2_v1_sentiment_v2_post_response.py) | ```python -from profound.types import ( - HostnameFilter, - PromptIDFilter, - ReportInfo, - ReportResponse, - ReportResult, - RootDomainFilter, - TagNameFilter, - TopicNameFilter, - URLFilter, - ReportCitationsResponse, - ReportQueryCitationsResponse, - ReportQueryQueryFanoutsResponse, - ReportQuerySentimentResponse, - ReportQueryVisibilityResponse, - ReportSentimentV2Response, - ReportStreamCitationsResponse, - ReportStreamCitationsV2Response, - ReportStreamQueryFanoutsResponse, - ReportStreamSentimentResponse, - ReportStreamSentimentV2Response, - ReportStreamVisibilityResponse, - ReportStreamVisibilityV2Response, +report = client.reports.query_sentiment_v2_v1_sentiment_v2_post( + category_id="", + asset_name="", + start_date="", + end_date="", + date_interval="day", + metrics=[], ) ``` -Methods: +### `Reports Citations` -- client.reports.citations(\*\*params) -> ReportCitationsResponse -- client.reports.get_bots_report(\*\*params) -> ReportResponse -- client.reports.get_bots_report_v2(\*\*params) -> ReportResponse -- client.reports.get_referrals_report(\*\*params) -> ReportResponse -- client.reports.get_referrals_report_v2(\*\*params) -> ReportResponse -- client.reports.query_citations(\*\*params) -> ReportQueryCitationsResponse -- client.reports.query_fanouts(\*\*params) -> ReportResponse -- client.reports.query_query_fanouts(\*\*params) -> ReportQueryQueryFanoutsResponse -- client.reports.query_sentiment(\*\*params) -> ReportQuerySentimentResponse -- client.reports.query_visibility(\*\*params) -> ReportQueryVisibilityResponse -- client.reports.sentiment(\*\*params) -> ReportResponse -- client.reports.sentiment_v2(\*\*params) -> ReportSentimentV2Response -- client.reports.stream_citations(\*\*params) -> ReportStreamCitationsResponse -- client.reports.stream_citations_v2(\*\*params) -> ReportStreamCitationsV2Response -- client.reports.stream_query_fanouts(\*\*params) -> ReportStreamQueryFanoutsResponse -- client.reports.stream_sentiment(\*\*params) -> ReportStreamSentimentResponse -- client.reports.stream_sentiment_v2(\*\*params) -> ReportStreamSentimentV2Response -- client.reports.stream_visibility(\*\*params) -> ReportStreamVisibilityResponse -- client.reports.stream_visibility_v2(\*\*params) -> ReportStreamVisibilityV2Response -- client.reports.visibility(\*\*params) -> ReportResponse +#### Query Citations -## WebSearchResults +Get citations for a given category. -Types: +| Direction | Type | +| --- | --- | +| Request | [`CitationQueryV1ReportsPostParams`](./src/types/reports/citation_query_v1_reports_post_params.py) | +| Response | [`CitationQueryV1ReportsPostResponse`](./src/types/reports/citation_query_v1_reports_post_response.py) | ```python -from profound.types.reports import WebSearchResultQueryResponse, WebSearchResultStreamResponse +citation = client.reports.citations.query_v1_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", +) ``` -Methods: +#### Stream Citations -- client.reports.web_search_results.query(\*\*params) -> WebSearchResultQueryResponse -- client.reports.web_search_results.stream(\*\*params) -> WebSearchResultStreamResponse +| Direction | Type | +| --- | --- | +| Request | [`CitationStreamV1ReportsStreamPostParams`](./src/types/reports/citation_stream_v1_reports_stream_post_params.py) | +| Response | [`CitationStreamV1ReportsStreamPostResponse`](./src/types/reports/citation_stream_v1_reports_stream_post_response.py) | -## Shopping +```python +stream = client.reports.citations.stream_v1_reports_stream_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", +) +for event in stream: + print(event) +``` -Types: +#### Query Citations V2 + +| Direction | Type | +| --- | --- | +| Request | [`CitationQueryV2V2ReportsPostParams`](./src/types/reports/citation_query_v2_v2_reports_post_params.py) | +| Response | [`CitationQueryV2V2ReportsPostResponse`](./src/types/reports/citation_query_v2_v2_reports_post_response.py) | ```python -from profound.types.reports import ( - BrandNameFilter, - MerchantNameFilter, - ProductNameFilter, - ShoppingBrandsResponse, - ShoppingMerchantsResponse, - ShoppingProductsResponse, - ShoppingStreamBrandsResponse, - ShoppingStreamMerchantsResponse, - ShoppingStreamProductsResponse, - ShoppingStreamTriggerRateResponse, - ShoppingTriggerRateResponse, +citation = client.reports.citations.query_v2_v2_reports_post( + category_id="", + start_date="", + end_date="", + interval="day", + scope="all", ) ``` -Methods: +#### Stream Citations V2 -- client.reports.shopping.brands(\*\*params) -> ShoppingBrandsResponse -- client.reports.shopping.merchants(\*\*params) -> ShoppingMerchantsResponse -- client.reports.shopping.products(\*\*params) -> ShoppingProductsResponse -- client.reports.shopping.stream_brands(\*\*params) -> ShoppingStreamBrandsResponse -- client.reports.shopping.stream_merchants(\*\*params) -> ShoppingStreamMerchantsResponse -- client.reports.shopping.stream_products(\*\*params) -> ShoppingStreamProductsResponse -- client.reports.shopping.stream_trigger_rate(\*\*params) -> ShoppingStreamTriggerRateResponse -- client.reports.shopping.trigger_rate(\*\*params) -> ShoppingTriggerRateResponse +| Direction | Type | +| --- | --- | +| Request | [`CitationStreamV2V2ReportsStreamPostParams`](./src/types/reports/citation_stream_v2_v2_reports_stream_post_params.py) | +| Response | [`CitationStreamV2V2ReportsStreamPostResponse`](./src/types/reports/citation_stream_v2_v2_reports_stream_post_response.py) | -## Accuracy +```python +stream = client.reports.citations.stream_v2_v2_reports_stream_post( + category_id="", + start_date="", + end_date="", + interval="day", + scope="all", +) +for event in stream: + print(event) +``` + +### `Reports Visibility` + +#### Query Visibility -Types: +Query visibility report. + +| Direction | Type | +| --- | --- | +| Request | [`VisibilityQueryV1ReportsPostParams`](./src/types/reports/visibility_query_v1_reports_post_params.py) | +| Response | [`ReportResponse`](./src/types/report_response.py) | ```python -from profound.types.reports import ( - AccuracyCreateBreakdownResponse, - AccuracyCreateCitationAnalysisResponse, - AccuracyCreateClaimBreakdownResponse, - AccuracyCreateClaimCitationsResponse, - AccuracyCreateClusterExampleRunsResponse, - AccuracyCreateClusterVerificationPairsResponse, - AccuracyCreateFactcheckSetupStatusResponse, - AccuracyCreateInaccuracyDriversResponse, - AccuracyCreateInaccurateClustersResponse, - AccuracyCreateInaccurateThemesResponse, - AccuracyCreateOverviewResponse, - AccuracyCreateTopInaccurateClaimsResponse, - AccuracyCreateTopicIDsResponse, +visibility = client.reports.visibility.query_v1_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", ) ``` -Methods: +#### Stream Visibility -- client.reports.accuracy.create_breakdown(\*\*params) -> AccuracyCreateBreakdownResponse -- client.reports.accuracy.create_citation_analysis(\*\*params) -> AccuracyCreateCitationAnalysisResponse -- client.reports.accuracy.create_claim_breakdown(\*\*params) -> AccuracyCreateClaimBreakdownResponse -- client.reports.accuracy.create_claim_citations(\*\*params) -> AccuracyCreateClaimCitationsResponse -- client.reports.accuracy.create_cluster_example_runs(\*\*params) -> AccuracyCreateClusterExampleRunsResponse -- client.reports.accuracy.create_cluster_verification_pairs(\*\*params) -> AccuracyCreateClusterVerificationPairsResponse -- client.reports.accuracy.create_factcheck_setup_status(\*\*params) -> AccuracyCreateFactcheckSetupStatusResponse -- client.reports.accuracy.create_inaccuracy_drivers(\*\*params) -> AccuracyCreateInaccuracyDriversResponse -- client.reports.accuracy.create_inaccurate_clusters(\*\*params) -> AccuracyCreateInaccurateClustersResponse -- client.reports.accuracy.create_inaccurate_themes(\*\*params) -> AccuracyCreateInaccurateThemesResponse -- client.reports.accuracy.create_overview(\*\*params) -> AccuracyCreateOverviewResponse -- client.reports.accuracy.create_top_inaccurate_claims(\*\*params) -> AccuracyCreateTopInaccurateClaimsResponse -- client.reports.accuracy.create_topic_ids(\*\*params) -> AccuracyCreateTopicIDsResponse +| Direction | Type | +| --- | --- | +| Request | [`VisibilityStreamV1ReportsStreamPostParams`](./src/types/reports/visibility_stream_v1_reports_stream_post_params.py) | +| Response | [`VisibilityStreamV1ReportsStreamPostResponse`](./src/types/reports/visibility_stream_v1_reports_stream_post_response.py) | -## Factcheck +```python +stream = client.reports.visibility.stream_v1_reports_stream_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", +) +for event in stream: + print(event) +``` + +#### Query Visibility V2 -Types: +| Direction | Type | +| --- | --- | +| Request | [`VisibilityQueryV2V2ReportsPostParams`](./src/types/reports/visibility_query_v2_v2_reports_post_params.py) | +| Response | [`VisibilityQueryV2V2ReportsPostResponse`](./src/types/reports/visibility_query_v2_v2_reports_post_response.py) | ```python -from profound.types.reports import FactcheckQueryScoresResponse, FactcheckStreamScoresResponse +visibility = client.reports.visibility.query_v2_v2_reports_post( + category_id="", + start_date="", + end_date="", + interval="day", + scope="owned", +) ``` -Methods: +#### Stream Visibility V2 + +| Direction | Type | +| --- | --- | +| Request | [`VisibilityStreamV2V2ReportsStreamPostParams`](./src/types/reports/visibility_stream_v2_v2_reports_stream_post_params.py) | +| Response | [`VisibilityStreamV2V2ReportsStreamPostResponse`](./src/types/reports/visibility_stream_v2_v2_reports_stream_post_response.py) | -- client.reports.factcheck.query_scores(\*\*params) -> FactcheckQueryScoresResponse -- client.reports.factcheck.stream_scores(\*\*params) -> FactcheckStreamScoresResponse +```python +stream = client.reports.visibility.stream_v2_v2_reports_stream_post( + category_id="", + start_date="", + end_date="", + interval="day", + scope="owned", +) +for event in stream: + print(event) +``` -### Claims +### `Reports Sentiment` -Types: +#### Query Sentiment + +Get citations for a given category. + +| Direction | Type | +| --- | --- | +| Request | [`SentimentQueryV1ReportsPostParams`](./src/types/reports/sentiment_query_v1_reports_post_params.py) | +| Response | [`ReportResponse`](./src/types/report_response.py) | ```python -from profound.types.reports.factcheck import ClaimQueryClaimsResponse, ClaimStreamClaimsResponse +sentiment = client.reports.sentiment.query_v1_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", +) ``` -Methods: +#### Stream Sentiment -- client.reports.factcheck.claims.query_claims(\*\*params) -> ClaimQueryClaimsResponse -- client.reports.factcheck.claims.stream_claims(\*\*params) -> ClaimStreamClaimsResponse +| Direction | Type | +| --- | --- | +| Request | [`SentimentStreamV1ReportsStreamPostParams`](./src/types/reports/sentiment_stream_v1_reports_stream_post_params.py) | +| Response | [`SentimentStreamV1ReportsStreamPostResponse`](./src/types/reports/sentiment_stream_v1_reports_stream_post_response.py) | -## Social +```python +stream = client.reports.sentiment.stream_v1_reports_stream_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", +) +for event in stream: + print(event) +``` -### Youtube +#### Query Sentiment V2 -Types: +| Direction | Type | +| --- | --- | +| Request | [`SentimentQueryV2V2ReportsPostParams`](./src/types/reports/sentiment_query_v2_v2_reports_post_params.py) | +| Response | [`SentimentQueryV2V2ReportsPostResponse`](./src/types/reports/sentiment_query_v2_v2_reports_post_response.py) | ```python -from profound.types.reports.social import ( - YoutubeGetChannelsResponse, - YoutubeGetSummaryResponse, - YoutubeGetVideosResponse, +sentiment = client.reports.sentiment.query_v2_v2_reports_post( + category_id="", + asset="", + start_date="", + end_date="", + interval="day", + include_cited_websites=False, ) ``` -Methods: +#### Stream Sentiment V2 -- client.reports.social.youtube.get_channels(\*\*params) -> YoutubeGetChannelsResponse -- client.reports.social.youtube.get_summary(\*\*params) -> YoutubeGetSummaryResponse -- client.reports.social.youtube.get_videos(\*\*params) -> YoutubeGetVideosResponse +| Direction | Type | +| --- | --- | +| Request | [`SentimentStreamV2V2ReportsStreamPostParams`](./src/types/reports/sentiment_stream_v2_v2_reports_stream_post_params.py) | +| Response | [`SentimentStreamV2V2ReportsStreamPostResponse`](./src/types/reports/sentiment_stream_v2_v2_reports_stream_post_response.py) | -# Content +```python +stream = client.reports.sentiment.stream_v2_v2_reports_stream_post( + category_id="", + asset="", + start_date="", + end_date="", + interval="day", + include_cited_websites=False, +) +for event in stream: + print(event) +``` + +### `Reports WebSearchResults` + +#### Query Web Search Results + +Get web search results for a given category. -## Optimization +| Direction | Type | +| --- | --- | +| Request | [`WebSearchResultQueryParams`](./src/types/reports/web_search_result_query_params.py) | +| Response | [`WebSearchResultQueryResponse`](./src/types/reports/web_search_result_query_response.py) | -Types: +```python +web_search_result = client.reports.web_search_results.query( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", +) +``` + +#### Stream Web Search Results + +| Direction | Type | +| --- | --- | +| Request | [`WebSearchResultStreamParams`](./src/types/reports/web_search_result_stream_params.py) | +| Response | [`WebSearchResultStreamResponse`](./src/types/reports/web_search_result_stream_response.py) | ```python -from profound.types.content import OptimizationRetrieveResponse, OptimizationListResponse +stream = client.reports.web_search_results.stream( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", +) +for event in stream: + print(event) ``` -Methods: +### `Reports Referrals` -- client.content.optimization.retrieve(content_id, \*, asset_id) -> OptimizationRetrieveResponse -- client.content.optimization.list(asset_id, \*\*params) -> OptimizationListResponse +#### Get Referrals Report V1 -# Agents +Get referral traffic report from the daily aggregated materialized view. -Types: +This endpoint queries pre-aggregated daily referral data, making it efficient +for large date ranges and high-traffic sites. + +| Direction | Type | +| --- | --- | +| Request | [`ReferralCreateReportV1V1ReportsPostParams`](./src/types/reports/referral_create_report_v1_v1_reports_post_params.py) | +| Response | [`ReportResponse`](./src/types/report_response.py) | ```python -from profound.types import ( - AgentCreateResponse, - AgentRetrieveResponse, - AgentUpdateResponse, - AgentListResponse, - AgentPublishResponse, - AgentRetrieveGraphResponse, +referral = client.reports.referrals.create_report_v1_v1_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + domain="", + start_date="", ) ``` -Methods: +#### Get Referrals Report V2 -- client.agents.create(\*\*params) -> AgentCreateResponse -- client.agents.retrieve(agent_id, \*\*params) -> AgentRetrieveResponse -- client.agents.update(agent_id, \*\*params) -> AgentUpdateResponse -- client.agents.list(\*\*params) -> AgentListResponse -- client.agents.publish(agent_id) -> AgentPublishResponse -- client.agents.retrieve_graph(agent_id, \*\*params) -> AgentRetrieveGraphResponse +Get referral traffic report from the hourly aggregated materialized view (UTC-based). -## Runs +Supports date_interval="hour", calendar intervals through "year", "quarter", and "relative_week". -Types: +| Direction | Type | +| --- | --- | +| Request | [`ReferralCreateReportV2V2ReportsPostParams`](./src/types/reports/referral_create_report_v2_v2_reports_post_params.py) | +| Response | [`ReportResponse`](./src/types/report_response.py) | ```python -from profound.types.agents import RunCreateResponse, RunRetrieveResponse +referral = client.reports.referrals.create_report_v2_v2_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + domain="", + start_date="", +) ``` -Methods: +### `Reports Bots` + +#### Get Bots Report V1 + +Get bot traffic report from the daily aggregated materialized view. -- client.agents.runs.create(agent_id, \*\*params) -> RunCreateResponse -- client.agents.runs.retrieve(run_id, \*, agent_id, \*\*params) -> RunRetrieveResponse +This endpoint queries pre-aggregated daily bot data, making it efficient +for large date ranges and high-traffic sites. -## NodeTypes +Metrics: +- count: unique bot visits +- citations: unique citation events +- indexing: unique indexing events +- training: unique training events +- last_visit: most recent visit timestamp -Types: +| Direction | Type | +| --- | --- | +| Request | [`BotCreateReportV1V1ReportsPostParams`](./src/types/reports/bot_create_report_v1_v1_reports_post_params.py) | +| Response | [`ReportResponse`](./src/types/report_response.py) | ```python -from profound.types.agents import NodeTypeListResponse, NodeTypeRetrieveSchemaResponse +bot = client.reports.bots.create_report_v1_v1_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + domain="", + start_date="", +) ``` -Methods: +#### Get Bots Report V2 + +Get bot traffic report from the hourly aggregated materialized view (UTC-based). + +Supports date_interval="hour", calendar intervals through "year", "quarter", and "relative_week". -- client.agents.node_types.list() -> NodeTypeListResponse -- client.agents.node_types.retrieve_schema(node_type) -> NodeTypeRetrieveSchemaResponse +Metrics: +- count: unique bot visits +- citations: unique citation events (ai_assistant bot type) +- indexing: unique indexing events (index bot type) +- training: unique training events (ai_training bot type) +- last_visit: most recent visit timestamp -# KnowledgeBases +Dimensions: +- date, path, bot_name, bot_provider, bot_type -Types: +| Direction | Type | +| --- | --- | +| Request | [`BotCreateReportV2V2ReportsPostParams`](./src/types/reports/bot_create_report_v2_v2_reports_post_params.py) | +| Response | [`ReportResponse`](./src/types/report_response.py) | ```python -from profound.types import KnowledgeBaseListResponse, KnowledgeBaseSearchResponse +bot = client.reports.bots.create_report_v2_v2_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + domain="", + start_date="", +) ``` -Methods: +### `Reports QueryFanouts` + +#### Query Fanouts + +| Direction | Type | +| --- | --- | +| Request | [`QueryFanoutV1ReportsPostParams`](./src/types/reports/query_fanout_v1_reports_post_params.py) | +| Response | [`ReportResponse`](./src/types/report_response.py) | -- client.knowledge_bases.list(\*\*params) -> KnowledgeBaseListResponse -- client.knowledge_bases.search(knowledge_base_id, \*\*params) -> KnowledgeBaseSearchResponse +```python +query_fanout = client.reports.query_fanouts.v1_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", +) +``` -## Documents +#### Query Fanouts V2 -Types: +| Direction | Type | +| --- | --- | +| Request | [`QueryFanoutV2V2ReportsPostParams`](./src/types/reports/query_fanout_v2_v2_reports_post_params.py) | +| Response | [`QueryFanoutV2V2ReportsPostResponse`](./src/types/reports/query_fanout_v2_v2_reports_post_response.py) | ```python -from profound.types.knowledge_bases import ( - DocumentCreateResponse, - DocumentUpdateResponse, - DocumentDeleteResponse, +query_fanout = client.reports.query_fanouts.v2_v2_reports_post( + category_id="", + start_date="", + end_date="", + interval="day", ) ``` -Methods: +#### Stream Query Fanouts V2 -- client.knowledge_bases.documents.create(knowledge_base_id, \*\*params) -> DocumentCreateResponse -- client.knowledge_bases.documents.update(knowledge_base_id, \*\*params) -> DocumentUpdateResponse -- client.knowledge_bases.documents.delete(knowledge_base_id, \*\*params) -> DocumentDeleteResponse +| Direction | Type | +| --- | --- | +| Request | [`QueryFanoutStreamV2V2ReportsStreamPostParams`](./src/types/reports/query_fanout_stream_v2_v2_reports_stream_post_params.py) | +| Response | [`QueryFanoutStreamV2V2ReportsStreamPostResponse`](./src/types/reports/query_fanout_stream_v2_v2_reports_stream_post_response.py) | -## Folders +```python +stream = client.reports.query_fanouts.stream_v2_v2_reports_stream_post( + category_id="", + start_date="", + end_date="", + interval="day", +) +for event in stream: + print(event) +``` -Types: +### `Reports Shopping` + +#### Shopping Visibility + +| Direction | Type | +| --- | --- | +| Request | [`ShoppingVisibilityParams`](./src/types/reports/shopping_visibility_params.py) | +| Response | [`ShoppingVisibilityResponse`](./src/types/reports/shopping_visibility_response.py) | ```python -from profound.types.knowledge_bases import FolderCreateResponse, FolderDeleteResponse +shopping = client.reports.shopping.visibility( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + include_asset_only=False, + rank_by="visibility_score", + include_position_frequency=False, +) ``` -Methods: +#### Shopping Item Visibility -- client.knowledge_bases.folders.create(knowledge_base_id, \*\*params) -> FolderCreateResponse -- client.knowledge_bases.folders.delete(knowledge_base_id, \*\*params) -> FolderDeleteResponse +| Direction | Type | +| --- | --- | +| Request | [`ShoppingItemVisibilityParams`](./src/types/reports/shopping_item_visibility_params.py) | +| Response | [`ShoppingItemVisibilityResponse`](./src/types/reports/shopping_item_visibility_response.py) | -# Projects +```python +shopping = client.reports.shopping.item_visibility( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + merchant_filter_type="any", + include_competitors=False, + competitor_limit=5, + include_position_frequency=False, +) +``` -Types: +#### Shopping Merchant Distribution + +| Direction | Type | +| --- | --- | +| Request | [`ShoppingMerchantDistributionParams`](./src/types/reports/shopping_merchant_distribution_params.py) | +| Response | [`ShoppingMerchantDistributionResponse`](./src/types/reports/shopping_merchant_distribution_response.py) | ```python -from profound.types import ( - ProjectCreateResponse, - ProjectRetrieveResponse, - ProjectListResponse, - ProjectArchiveResponse, - ProjectGetStatusResponse, - ProjectUnarchiveResponse, +shopping = client.reports.shopping.merchant_distribution( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, ) ``` -Methods: +#### Shopping Merchant Visibility By Brand + +| Direction | Type | +| --- | --- | +| Request | [`ShoppingMerchantVisibilityByBrandParams`](./src/types/reports/shopping_merchant_visibility_by_brand_params.py) | +| Response | [`ShoppingMerchantVisibilityByBrandResponse`](./src/types/reports/shopping_merchant_visibility_by_brand_response.py) | -- client.projects.create(\*\*params) -> ProjectCreateResponse -- client.projects.retrieve(project_id, \*\*params) -> ProjectRetrieveResponse -- client.projects.list(\*\*params) -> ProjectListResponse -- client.projects.delete(project_id, \*\*params) -> None -- client.projects.archive(project_id, \*\*params) -> ProjectArchiveResponse -- client.projects.get_status(project_id, \*\*params) -> ProjectGetStatusResponse -- client.projects.unarchive(project_id, \*\*params) -> ProjectUnarchiveResponse +```python +shopping = client.reports.shopping.merchant_visibility_by_brand( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + include_brand_only=False, +) +``` -## Generations +#### Shopping Merchant By Items -Types: +| Direction | Type | +| --- | --- | +| Request | [`ShoppingMerchantByItemsParams`](./src/types/reports/shopping_merchant_by_items_params.py) | +| Response | [`ShoppingMerchantByItemsResponse`](./src/types/reports/shopping_merchant_by_items_response.py) | ```python -from profound.types.projects import GenerationRetrieveResponse, GenerationListResponse +shopping = client.reports.shopping.merchant_by_items( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, +) ``` -Methods: +#### Shopping All Items With Merchants + +| Direction | Type | +| --- | --- | +| Request | [`ShoppingAllItemsWithMerchantsParams`](./src/types/reports/shopping_all_items_with_merchants_params.py) | +| Response | [`ShoppingAllItemsWithMerchantsResponse`](./src/types/reports/shopping_all_items_with_merchants_response.py) | -- client.projects.generations.retrieve(run_id, \*\*params) -> GenerationRetrieveResponse -- client.projects.generations.list(\*\*params) -> GenerationListResponse +```python +shopping = client.reports.shopping.all_items_with_merchants( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + merchant_filter_type="any", + rank_by="visibility", + sort_order="desc", +) +``` -## Tasks +#### Shopping Trigger Rate -Types: +| Direction | Type | +| --- | --- | +| Request | [`ShoppingTriggerRateParams`](./src/types/reports/shopping_trigger_rate_params.py) | +| Response | [`ShoppingTriggerRateResponse`](./src/types/reports/shopping_trigger_rate_response.py) | ```python -from profound.types.projects import ( - TaskCreateResponse, - TaskRetrieveResponse, - TaskUpdateResponse, - TaskListResponse, - TaskUpdateStatusResponse, +shopping = client.reports.shopping.trigger_rate( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, ) ``` -Methods: +#### Shopping Merchant Share -- client.projects.tasks.create(project_id, \*\*params) -> TaskCreateResponse -- client.projects.tasks.retrieve(task_id, \*, project_id, \*\*params) -> TaskRetrieveResponse -- client.projects.tasks.update(task_id, \*, project_id, \*\*params) -> TaskUpdateResponse -- client.projects.tasks.list(project_id, \*\*params) -> TaskListResponse -- client.projects.tasks.delete(task_id, \*, project_id, \*\*params) -> None -- client.projects.tasks.update_status(task_id, \*, project_id, \*\*params) -> TaskUpdateStatusResponse +| Direction | Type | +| --- | --- | +| Request | [`ShoppingMerchantShareParams`](./src/types/reports/shopping_merchant_share_params.py) | +| Response | [`ShoppingMerchantShareResponse`](./src/types/reports/shopping_merchant_share_response.py) | -# Integrations +```python +shopping = client.reports.shopping.merchant_share( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, +) +``` -Types: +#### Shopping Product Merchant Urls + +| Direction | Type | +| --- | --- | +| Request | [`ShoppingProductMerchantUrlsParams`](./src/types/reports/shopping_product_merchant_urls_params.py) | +| Response | [`ShoppingProductMerchantUrlsResponse`](./src/types/reports/shopping_product_merchant_urls_response.py) | ```python -from profound.types import IntegrationListResponse +shopping = client.reports.shopping.product_merchant_urls( + category_id="", + product_names=[], + start_date="", + end_date="", +) ``` -Methods: +#### Shopping Executions -- client.integrations.list(\*\*params) -> IntegrationListResponse +| Direction | Type | +| --- | --- | +| Request | [`ShoppingExecutionsParams`](./src/types/reports/shopping_executions_params.py) | +| Response | [`ShoppingExecutionsResponse`](./src/types/reports/shopping_executions_response.py) | -# Documents +```python +shopping = client.reports.shopping.executions( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + analysis_filter_type="any", +) +``` + +### `Reports Accuracy` -Types: +#### Accuracy Overview + +| Direction | Type | +| --- | --- | +| Request | [`AccuracyOverviewV1ReportsOverviewPostParams`](./src/types/reports/accuracy_overview_v1_reports_overview_post_params.py) | +| Response | [`AccuracyOverviewV1ReportsOverviewPostResponse`](./src/types/reports/accuracy_overview_v1_reports_overview_post_response.py) | ```python -from profound.types import ( - DocumentCreateResponse, - DocumentRetrieveResponse, - DocumentUpdateResponse, - DocumentListResponse, - DocumentReplaceContentResponse, +accuracy = client.reports.accuracy.overview_v1_reports_overview_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + group_by="period", ) ``` -Methods: +#### Accuracy Breakdown + +| Direction | Type | +| --- | --- | +| Request | [`AccuracyBreakdownV1ReportsBreakdownPostParams`](./src/types/reports/accuracy_breakdown_v1_reports_breakdown_post_params.py) | +| Response | [`AccuracyBreakdownV1ReportsBreakdownPostResponse`](./src/types/reports/accuracy_breakdown_v1_reports_breakdown_post_response.py) | + +```python +accuracy = client.reports.accuracy.breakdown_v1_reports_breakdown_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + breakdown_by="citation", + limit=10, + offset=0, + sort_by="citationShare", + sort_order="desc", +) +``` -- client.documents.create(\*\*params) -> DocumentCreateResponse -- client.documents.retrieve(document_id, \*\*params) -> DocumentRetrieveResponse -- client.documents.update(document_id, \*\*params) -> DocumentUpdateResponse -- client.documents.list(\*\*params) -> DocumentListResponse -- client.documents.delete(document_id, \*\*params) -> None -- client.documents.replace_content(document_id, \*\*params) -> DocumentReplaceContentResponse +#### Accuracy Citation Analysis -# Ads +| Direction | Type | +| --- | --- | +| Request | [`AccuracyCitationAnalysisV1ReportsCitationAnalysisPostParams`](./src/types/reports/accuracy_citation_analysis_v1_reports_citation_analysis_post_params.py) | +| Response | [`AccuracyCitationAnalysisV1ReportsCitationAnalysisPostResponse`](./src/types/reports/accuracy_citation_analysis_v1_reports_citation_analysis_post_response.py) | -## OpenAIAds +```python +accuracy = client.reports.accuracy.citation_analysis_v1_reports_citation_analysis_post( + category_id="", + clean_href="", + start_date="", + end_date="", +) +``` -### AdAccount +#### Accuracy Topic Ids -Types: +| Direction | Type | +| --- | --- | +| Request | [`AccuracyTopicIdsV1ReportsTopicIdsPostParams`](./src/types/reports/accuracy_topic_ids_v1_reports_topic_ids_post_params.py) | +| Response | [`AccuracyTopicIdsV1ReportsTopicIdsPostResponse`](./src/types/reports/accuracy_topic_ids_v1_reports_topic_ids_post_response.py) | ```python -from profound.types.ads.openai_ads import AdAccountRetrieveInsightsResponse +accuracy = client.reports.accuracy.topic_ids_v1_reports_topic_ids_post( + category_id="", + start_date="", + end_date="", +) +``` + +#### Accuracy Inaccurate Themes + +| Direction | Type | +| --- | --- | +| Request | [`AccuracyInaccurateThemesV1ReportsInaccurateThemesPostParams`](./src/types/reports/accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_params.py) | +| Response | [`AccuracyInaccurateThemesV1ReportsInaccurateThemesPostResponse`](./src/types/reports/accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_response.py) | + +```python +accuracy = client.reports.accuracy.inaccurate_themes_v1_reports_inaccurate_themes_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + limit=10, + offset=0, + sort_by="response_share", + sort_order="desc", +) +``` + +#### Accuracy Inaccurate Clusters + +| Direction | Type | +| --- | --- | +| Request | [`AccuracyInaccurateClustersV1ReportsInaccurateClustersPostParams`](./src/types/reports/accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_params.py) | +| Response | [`AccuracyInaccurateClustersV1ReportsInaccurateClustersPostResponse`](./src/types/reports/accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_response.py) | + +```python +accuracy = client.reports.accuracy.inaccurate_clusters_v1_reports_inaccurate_clusters_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + theme_id="", + limit=5000, + offset=0, +) +``` + +#### Accuracy Inaccuracy Drivers + +| Direction | Type | +| --- | --- | +| Request | [`AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostParams`](./src/types/reports/accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_params.py) | +| Response | [`AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostResponse`](./src/types/reports/accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_response.py) | + +```python +accuracy = client.reports.accuracy.inaccuracy_drivers_v1_reports_inaccuracy_drivers_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + limit=5, +) +``` + +#### Accuracy Top Inaccurate Claims + +| Direction | Type | +| --- | --- | +| Request | [`AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostParams`](./src/types/reports/accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_params.py) | +| Response | [`AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostResponse`](./src/types/reports/accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_response.py) | + +```python +accuracy = client.reports.accuracy.top_inaccurate_claims_v1_reports_top_inaccurate_claims_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + limit=5, +) +``` + +#### Accuracy Claim Breakdown + +| Direction | Type | +| --- | --- | +| Request | [`AccuracyClaimBreakdownV1ReportsClaimBreakdownPostParams`](./src/types/reports/accuracy_claim_breakdown_v1_reports_claim_breakdown_post_params.py) | +| Response | [`AccuracyClaimBreakdownV1ReportsClaimBreakdownPostResponse`](./src/types/reports/accuracy_claim_breakdown_v1_reports_claim_breakdown_post_response.py) | + +```python +accuracy = client.reports.accuracy.claim_breakdown_v1_reports_claim_breakdown_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + cluster_id="", +) +``` + +#### Accuracy Claim Citations + +| Direction | Type | +| --- | --- | +| Request | [`AccuracyClaimCitationsV1ReportsClaimCitationsPostParams`](./src/types/reports/accuracy_claim_citations_v1_reports_claim_citations_post_params.py) | +| Response | [`AccuracyClaimCitationsV1ReportsClaimCitationsPostResponse`](./src/types/reports/accuracy_claim_citations_v1_reports_claim_citations_post_response.py) | + +```python +accuracy = client.reports.accuracy.claim_citations_v1_reports_claim_citations_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + cluster_id="", + limit=10, + offset=0, + sort_order="desc", +) +``` + +#### Accuracy Cluster Example Runs + +| Direction | Type | +| --- | --- | +| Request | [`AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostParams`](./src/types/reports/accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_params.py) | +| Response | [`AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostResponse`](./src/types/reports/accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_response.py) | + +```python +accuracy = client.reports.accuracy.cluster_example_runs_v1_reports_cluster_example_runs_post( + category_id="", + cluster_id="", + start_date="", + end_date="", + limit=20, + offset=0, +) +``` + +#### Accuracy Cluster Verification Pairs + +| Direction | Type | +| --- | --- | +| Request | [`AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostParams`](./src/types/reports/accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_params.py) | +| Response | [`AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostResponse`](./src/types/reports/accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_response.py) | + +```python +accuracy = client.reports.accuracy.cluster_verification_pairs_v1_reports_cluster_verification_pairs_post( + category_id="", + cluster_id="", +) +``` + +#### Accuracy Factcheck Setup Status + +| Direction | Type | +| --- | --- | +| Request | [`AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostParams`](./src/types/reports/accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_params.py) | +| Response | [`AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostResponse`](./src/types/reports/accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_response.py) | + +```python +accuracy = client.reports.accuracy.factcheck_setup_status_v1_reports_factcheck_setup_status_post( + category_id="", +) +``` + +## `Content` + +### `Content Optimization` + +#### Optimization List + +| Direction | Type | +| --- | --- | +| Request | [`OptimizationListParams`](./src/types/content/optimization_list_params.py) | +| Response | [`OptimizationListResponse`](./src/types/content/optimization_list_response.py) | + +```python +optimization = client.content.optimization.list( + asset_id="assetId", + limit=10000, + offset=0, +) +``` + +#### Optimization Analysis + +| Direction | Type | +| --- | --- | +| Response | [`OptimizationRetrieveResponse`](./src/types/content/optimization_retrieve_response.py) | + +```python +optimization = client.content.optimization.retrieve( + asset_id="assetId", + content_id="contentId", +) +``` + +## `KnowledgeBases` + +### List Knowledge Bases + +List knowledge bases accessible to the API key. + +| Direction | Type | +| --- | --- | +| Request | [`KnowledgeBaseListParams`](./src/types/knowledge_base_list_params.py) | +| Response | [`KnowledgeBaseListResponse`](./src/types/knowledge_base_list_response.py) | + +```python +knowledge_base = client.knowledge_bases.list() ``` -Methods: +### Search Knowledge Base + +Search a knowledge base and return matching snippets or pages. + +| Direction | Type | +| --- | --- | +| Request | [`KnowledgeBaseSearchParams`](./src/types/knowledge_base_search_params.py) | +| Response | [`KnowledgeBaseSearchResponse`](./src/types/knowledge_base_search_response.py) | + +```python +knowledge_base = client.knowledge_bases.search( + knowledge_base_id="knowledgeBaseId", + query="", + top_k=0, + return_full_page=False, +) +``` + +### `KnowledgeBases Documents` + +#### Add Document + +Add a document to a knowledge base using JSON text or multipart file upload. + +| Direction | Type | +| --- | --- | +| Request | [`DocumentCreateParams`](./src/types/knowledge_bases/document_create_params.py) | +| Response | [`DocumentCreateResponse`](./src/types/knowledge_bases/document_create_response.py) | + +```python +document = client.knowledge_bases.documents.create( + knowledge_base_id="knowledgeBaseId", + name="", + text="", +) +``` + +#### Update Document + +Overwrite a knowledge base document using JSON text or multipart file upload. + +| Direction | Type | +| --- | --- | +| Request | [`DocumentUpdateParams`](./src/types/knowledge_bases/document_update_params.py) | +| Response | [`DocumentUpdateResponse`](./src/types/knowledge_bases/document_update_response.py) | + +```python +document = client.knowledge_bases.documents.update( + knowledge_base_id="knowledgeBaseId", + name="", + text="", +) +``` + +#### Delete Document + +Delete an existing document from a knowledge base. + +| Direction | Type | +| --- | --- | +| Request | [`DocumentDeleteParams`](./src/types/knowledge_bases/document_delete_params.py) | +| Response | [`DocumentDeleteResponse`](./src/types/knowledge_bases/document_delete_response.py) | -- client.ads.openai_ads.ad_account.retrieve_insights(\*\*params) -> AdAccountRetrieveInsightsResponse +```python +document = client.knowledge_bases.documents.delete( + knowledge_base_id="knowledgeBaseId", + name="", +) +``` + +### `KnowledgeBases Folders` + +#### Add Folder + +Create an empty folder at the requested knowledge base path. + +| Direction | Type | +| --- | --- | +| Request | [`FolderCreateParams`](./src/types/knowledge_bases/folder_create_params.py) | +| Response | [`FolderCreateResponse`](./src/types/knowledge_bases/folder_create_response.py) | + +```python +folder = client.knowledge_bases.folders.create( + knowledge_base_id="knowledgeBaseId", + path="", +) +``` + +#### Delete Folder + +Delete a folder. With recursive=false, non-empty folders return 409 and no contents are deleted. + +| Direction | Type | +| --- | --- | +| Request | [`FolderDeleteParams`](./src/types/knowledge_bases/folder_delete_params.py) | +| Response | [`FolderDeleteResponse`](./src/types/knowledge_bases/folder_delete_response.py) | + +```python +folder = client.knowledge_bases.folders.delete( + knowledge_base_id="knowledgeBaseId", + path="", + recursive=False, +) +``` + +## `Agents` + +### List agents + +List agents available to your organization. + +Agent status reflects whether an agent has ever been published. `published` +agents have a live published version. `draft` agents have not been +published yet. + +| Direction | Type | +| --- | --- | +| Request | [`AgentListParams`](./src/types/agent_list_params.py) | +| Response | [`AgentListResponse`](./src/types/agent_list_response.py) | + +```python +agent = client.agents.list( + limit=100, +) +``` + +### Create an agent + +Create a new draft agent owned by the given organization. + +`organization_id` is required and you must be a member of it. The agent is created +as a `draft`; publish it with `POST /v1/agents/{agent_id}/publish` once its graph +is ready. + +| Direction | Type | +| --- | --- | +| Request | [`AgentCreateV1PostParams`](./src/types/agent_create_v1_post_params.py) | +| Response | [`AgentCreateV1PostResponse`](./src/types/agent_create_v1_post_response.py) | + +```python +agent = client.agents.create_v1_post( + organization_id="", + name="", +) +``` + +### Publish an agent + +Publish an agent's latest draft as its live published version. + +You must be a member of the agent's organization. Publishing promotes the current +draft graph to a new published version. A draft that cannot produce its declared +input/output contract is rejected with `422` and is not published. + +| Direction | Type | +| --- | --- | +| Response | [`AgentPublishV1IdPublishPostResponse`](./src/types/agent_publish_v1_id_publish_post_response.py) | + +```python +agent = client.agents.publish_v1_id_publish_post( + agent_id="agentId", +) +``` + +### Get an agent + +Retrieve an agent and its schema details. + +Agents can have both a live published version and a draft version with newer +unpublished changes. Use the `version` parameter to choose which state to return. + +| Direction | Type | +| --- | --- | +| Request | [`AgentRetrieveParams`](./src/types/agent_retrieve_params.py) | +| Response | [`AgentRetrieveResponse`](./src/types/agent_retrieve_response.py) | + +```python +agent = client.agents.retrieve( + agent_id="agentId", +) +``` + +### Update an agent + +Update an agent's draft graph in place. + +You must be a member of the agent's organization. The agent's draft is replaced with the +supplied graph and re-validated, so you can iterate one draft — create, then update per +fix — instead of creating a new agent on every change. The response carries the updated +`validation`; publish with `POST /v1/agents/{agent_id}/publish` once `validation.valid`. + +| Direction | Type | +| --- | --- | +| Request | [`AgentUpdateV1IdPatchParams`](./src/types/agent_update_v1_id_patch_params.py) | +| Response | [`AgentUpdateV1IdPatchResponse`](./src/types/agent_update_v1_id_patch_response.py) | + +```python +agent = client.agents.update_v1_id_patch( + agent_id="agentId", + graph={}, +) +``` + +### Get an agent's graph + +Retrieve an agent's full workflow graph (`{nodes, edges}`). + +The graph is returned verbatim in the canonical dialect — the same shape `POST /v1/agents` +and `PATCH /v1/agents/{agent_id}` accept — so a known-good agent can be read back, copied, +and edited. Tool-backed nodes appear in their lowered `tool` form rather than the friendly +v1 node types. A `draft` is visible only to its creator; the `published` version is visible +across its organization. + +| Direction | Type | +| --- | --- | +| Request | [`AgentListGraphV1GraphGetParams`](./src/types/agent_list_graph_v1_graph_get_params.py) | +| Response | [`AgentListGraphV1GraphGetResponse`](./src/types/agent_list_graph_v1_graph_get_response.py) | + +```python +agent = client.agents.list_graph_v1_graph_get( + agent_id="agentId", +) +``` + +### `Agents NodeTypes` + +#### List node types + +List the node types available for building agents. + +The set is deterministic and does not depend on the caller, so the response +is safe to cache across sessions. Integration-dependent and dynamic-schema +node types are intentionally excluded in v1. + +| Direction | Type | +| --- | --- | +| Response | [`NodeTypeListV1AgentsGetResponse`](./src/types/agents/node_type_list_v1_agents_get_response.py) | + +```python +node_type = client.agents.node_types.list_v1_agents_get() +``` + +#### Get a node type schema + +Retrieve the JSON schema and worked examples for a single node type. + +The `schema` field is an opaque JSON Schema for the node's configuration. +Use `schema_version` as a cache key — it bumps whenever the schema changes. + +| Direction | Type | +| --- | --- | +| Response | [`NodeTypeListSchemaV1AgentsSchemaGetResponse`](./src/types/agents/node_type_list_schema_v1_agents_schema_get_response.py) | + +```python +node_type = client.agents.node_types.list_schema_v1_agents_schema_get( + node_type="nodeType", +) +``` + +### `Agents Runs` + +#### Run an agent + +Start a new run for an agent. + +Runs always execute the agent's live published version, so the agent must be +published first with `POST /v1/agents/{agent_id}/publish`. Unpublished drafts +cannot be run. + +| Direction | Type | +| --- | --- | +| Request | [`RunCreateParams`](./src/types/agents/run_create_params.py) | +| Response | [`RunCreateResponse`](./src/types/agents/run_create_response.py) | + +```python +run = client.agents.runs.create( + agent_id="agentId", +) +``` + +#### Get an agent run + +Retrieve the current status and result details for an agent run. + +| Direction | Type | +| --- | --- | +| Response | [`RunRetrieveResponse`](./src/types/agents/run_retrieve_response.py) | + +```python +run = client.agents.runs.retrieve( + agent_id="agentId", + run_id="runId", +) +``` + +## `Organizations` + +### List organizations + +Return every organization the caller's API key grants access to. Use this to discover organization IDs before calling endpoints that accept an `organization_id` filter. + +| Direction | Type | +| --- | --- | +| Response | [`OrganizationListResponse`](./src/types/organization_list_response.py) | + +```python +organization = client.organizations.list() +``` + +### Get Regions + +Get the organization regions. + +| Direction | Type | +| --- | --- | +| Request | [`OrganizationRegionsParams`](./src/types/organization_regions_params.py) | +| Response | [`OrganizationRegionsResponse`](./src/types/organization_regions_response.py) | + +```python +organization = client.organizations.regions() +``` + +### Get Models + +Get the organization models. + +| Direction | Type | +| --- | --- | +| Response | [`OrganizationModelsResponse`](./src/types/organization_models_response.py) | + +```python +organization = client.organizations.models() +``` + +### Get Domains + +Get the organization domains. + +| Direction | Type | +| --- | --- | +| Request | [`OrganizationDomainsParams`](./src/types/organization_domains_params.py) | +| Response | [`OrganizationDomainsResponse`](./src/types/organization_domains_response.py) | + +```python +organization = client.organizations.domains() +``` + +### Get Assets + +Get the organization assets, one row per (asset, organization) pair. + +An asset's category can belong to multiple organizations; one asset row is +emitted per owning org so no association is silently dropped. + +| Direction | Type | +| --- | --- | +| Request | [`OrganizationListAssetsParams`](./src/types/organization_list_assets_params.py) | +| Response | [`OrganizationListAssetsResponse`](./src/types/organization_list_assets_response.py) | + +```python +organization = client.organizations.list_assets() +``` + +### Get Personas + +Get the organization personas, one row per (persona, organization) pair. + +Same (item, org) fan-out as ``get_assets``: a persona's category can be +owned by multiple orgs, and each owning org gets its own row so no +association is silently dropped. + +| Direction | Type | +| --- | --- | +| Request | [`OrganizationGetPersonasParams`](./src/types/organization_get_personas_params.py) | +| Response | [`OrganizationGetPersonasResponse`](./src/types/organization_get_personas_response.py) | + +```python +organization = client.organizations.get_personas() +``` + +### `Organizations Categories` + +#### Get Categories + +Get the organization categories, one row per (category, organization) pair. + +| Direction | Type | +| --- | --- | +| Request | [`CategoryListParams`](./src/types/organizations/category_list_params.py) | +| Response | [`CategoryListResponse`](./src/types/organizations/category_list_response.py) | + +```python +category = client.organizations.categories.list() +``` + +#### Get Category Topics + +Get the topics for a specific category. + +| Direction | Type | +| --- | --- | +| Response | [`CategoryTopicsResponse`](./src/types/organizations/category_topics_response.py) | + +```python +category = client.organizations.categories.topics( + category_id="categoryId", +) +``` + +#### Get Category Tags + +Get the tags for a specific category. + +| Direction | Type | +| --- | --- | +| Response | [`CategoryTagsResponse`](./src/types/organizations/category_tags_response.py) | + +```python +category = client.organizations.categories.tags( + category_id="categoryId", +) +``` + +#### List prompts + +Retrieve prompts in a category with optional filtering by type, topic, tag, region, platform, or persona. Supports cursor-based pagination. + +| Direction | Type | +| --- | --- | +| Request | [`CategoryPromptsParams`](./src/types/organizations/category_prompts_params.py) | +| Response | [`CategoryPromptsResponse`](./src/types/organizations/category_prompts_response.py) | + +```python +category = client.organizations.categories.prompts( + category_id="categoryId", + limit=10000, + status=["active"], +) +``` + +#### Create prompts + +Create one or more prompts in a category. Topics and tags are auto-created if referenced by name and not yet existing. Use dry_run to preview without persisting. + +| Direction | Type | +| --- | --- | +| Request | [`CategoryCreatePromptsParams`](./src/types/organizations/category_create_prompts_params.py) | +| Response | [`CategoryCreatePromptsResponse`](./src/types/organizations/category_create_prompts_response.py) | + +```python +category = client.organizations.categories.create_prompts( + category_id="categoryId", + prompts=[], + dry_run=False, +) +``` + +#### Update prompts + +Update one or more existing prompts. Only provided fields are changed. Dimension fields (regions, platforms, personas, tags) replace the full set when provided. Use dry_run to preview without persisting. + +| Direction | Type | +| --- | --- | +| Request | [`CategoryUpdatePromptsParams`](./src/types/organizations/category_update_prompts_params.py) | +| Response | [`CategoryUpdatePromptsResponse`](./src/types/organizations/category_update_prompts_response.py) | + +```python +category = client.organizations.categories.update_prompts( + category_id="categoryId", + prompts=[], + dry_run=False, +) +``` + +#### Update prompt status + +Bulk-update the status of one or more prompts. Prompts already in the target status are skipped. Use dry_run to preview without persisting. + +Status options: +- 'active': Prompts will run daily. +- 'disabled': Prompts will not run moving forward, but historical data is preserved. +- 'deleted': Prompts are deleted along with historical data + +| Direction | Type | +| --- | --- | +| Request | [`CategoryUpdatePromptStatusParams`](./src/types/organizations/category_update_prompt_status_params.py) | +| Response | [`CategoryUpdatePromptStatusResponse`](./src/types/organizations/category_update_prompt_status_response.py) | + +```python +category = client.organizations.categories.update_prompt_status( + category_id="categoryId", + prompt_ids=[], + status="active", + dry_run=False, +) +``` + +#### Get Category Assets + +| Direction | Type | +| --- | --- | +| Response | [`CategoryAssetsResponse`](./src/types/organizations/category_assets_response.py) | + +```python +category = client.organizations.categories.assets( + category_id="categoryId", +) +``` + +#### Get Category Personas + +| Direction | Type | +| --- | --- | +| Response | [`CategoryGetCategoryPersonasResponse`](./src/types/organizations/category_get_category_personas_response.py) | + +```python +category = client.organizations.categories.get_category_personas( + category_id="categoryId", +) +``` diff --git a/bin/check-release-environment b/bin/check-release-environment deleted file mode 100644 index 1e951e9a..00000000 --- a/bin/check-release-environment +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash - -errors=() - -lenErrors=${#errors[@]} - -if [[ lenErrors -gt 0 ]]; then - echo -e "Found the following errors in the release environment:\n" - - for error in "${errors[@]}"; do - echo -e "- $error\n" - done - - exit 1 -fi - -echo "The environment is ready to push releases!" diff --git a/bin/publish-pypi b/bin/publish-pypi deleted file mode 100644 index 58957004..00000000 --- a/bin/publish-pypi +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -set -eux -rm -rf dist -mkdir -p dist -uv build -if [ -n "${PYPI_TOKEN:-}" ]; then - uv publish --token=$PYPI_TOKEN -else - uv publish -fi diff --git a/examples/.keep b/examples/.keep deleted file mode 100644 index d8c73e93..00000000 --- a/examples/.keep +++ /dev/null @@ -1,4 +0,0 @@ -File generated from our OpenAPI spec by Stainless. - -This directory can be used to store example files demonstrating usage of this SDK. -It is ignored by Stainless code generation and its content (other than this keep file) won't be touched. \ No newline at end of file diff --git a/examples/README.md b/examples/README.md deleted file mode 100644 index e69de29b..00000000 diff --git a/examples/profound.ipynb b/examples/profound.ipynb deleted file mode 100644 index ba3cbc67..00000000 --- a/examples/profound.ipynb +++ /dev/null @@ -1,978 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "ExecuteTime": { - "end_time": "2025-12-29T17:53:03.568243Z", - "start_time": "2025-12-29T17:53:03.546669Z" - } - }, - "source": [ - "Profound API\n", - "\n", - "This notebook demonstrates how to replicate Profound's frontend functionality using the `profound` Python library.\n", - "\n", - "**API Documentation**: [https://docs.tryprofound.com/rest-api](https://docs.tryprofound.com/rest-api)\n", - "\n", - "## Table of Contents\n", - "\n", - "- [Setup](#setup)\n", - "- [Configuration](#configuration)\n", - "- [Common Filters](#common-filters)\n", - "- [Helper Functions](#helper-functions)\n", - "- [Visibility Reports](#visibility-reports)\n", - "- [Citations Reports](#citations-reports)\n", - "- [Sentiment Reports](#sentiment-reports)" - ], - "id": "81c9cec63ae4a2a9" - }, - { - "cell_type": "markdown", - "metadata": { - "ExecuteTime": { - "end_time": "2026-01-05T14:26:45.557890Z", - "start_time": "2026-01-05T14:26:45.539698Z" - } - }, - "source": [ - "## Setup\n", - "\n", - "Install dependencies using `uv`:\n", - "\n", - "```bash\n", - "uv sync\n", - "```" - ], - "id": "ba646f1a27d72640" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "import os\n", - "import datetime\n", - "from typing import Any, Dict, List, Optional\n", - "\n", - "import pytz\n", - "import pandas as pd\n", - "\n", - "import profound\n", - "\n", - "profound_api_key = os.getenv(\n", - " \"PROFOUND_API_KEY\", \"change-me!\"\n", - ") # Provide using the environmental variable PROFOUND_API_KEY, or change the fallback value\n", - "profound_api_host = os.getenv(\"PROFOUND_API_HOST\", \"https://api.tryprofound.com\")\n", - "client = profound.Client(api_key=profound_api_key, base_url=profound_api_host)" - ], - "execution_count": null, - "outputs": [], - "id": "c89d301c7b7f018c" - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Configuration\n", - "\n", - "Set your API credentials and query parameters:\n" - ], - "id": "e76c896ba5c46138" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "DEFAULT_TIMEZONE = pytz.timezone(\"America/New_York\")\n", - "category_id = \"00000000-0000-0000-0000-000000000000\"\n", - "domain_url = \"example.com\"\n", - "\n", - "today = datetime.datetime.now(DEFAULT_TIMEZONE).date()\n", - "start_date = today - datetime.timedelta(days=7)\n", - "end_date = today" - ], - "execution_count": null, - "outputs": [], - "id": "e54444219a6d9ba0" - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Common Filters\n", - "\n", - "Define reusable filter configurations:\n" - ], - "id": "f3d8349c9cc3d2c7" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "common_filters = {\n", - " \"prompts_visibility\": {\"field\": \"prompt_type\", \"operator\": \"is\", \"value\": \"visibility\"},\n", - " \"region_us\": {\"field\": \"region_id\", \"operator\": \"in\", \"value\": [\"3c37529b-e592-43a9-839a-14bee2673a6b\"]},\n", - "}" - ], - "execution_count": null, - "outputs": [], - "id": "95650177be75d32a" - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Helper Functions\n", - "\n", - "### Core API Functions\n" - ], - "id": "e1722e6bcf357d18" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "def clean_payload(payload: Dict[str, Any]) -> Dict[str, Any]:\n", - " \"\"\"\n", - " Remove None values from payload dictionary without mutating the original.\n", - "\n", - " Args:\n", - " payload: Dictionary containing API request parameters\n", - "\n", - " Returns:\n", - " New dictionary with None values removed\n", - "\n", - " Example:\n", - " >>> payload = {\"filters\": None, \"pagination\": None, \"category_id\": \"123\"}\n", - " >>> clean_payload(payload)\n", - " {'category_id': '123'}\n", - " \"\"\"\n", - " return {k: v for k, v in payload.items() if v is not None}\n", - "\n", - "\n", - "def format_response_data(response) -> List[Dict[str, Any]]:\n", - " \"\"\"\n", - " Extract and format response data from API response.\n", - "\n", - " Args:\n", - " response: Response object from Profound API (has .info and .data attributes)\n", - "\n", - " Returns:\n", - " List of dictionaries containing dimension and metric values\n", - "\n", - " Raises:\n", - " KeyError: If response structure is unexpected\n", - "\n", - " Example:\n", - " >>> response = client.reports.citations(...)\n", - " >>> data = format_response_data(response)\n", - " >>> df = pd.DataFrame(data)\n", - " \"\"\"\n", - " query_info = response.info.query\n", - " dim_names = query_info[\"dimensions\"]\n", - " metric_names = query_info[\"metrics\"]\n", - " results = []\n", - " for row in response.data:\n", - " result = {}\n", - " for i, name in enumerate(dim_names):\n", - " result[name] = row.dimensions[i]\n", - " for i, name in enumerate(metric_names):\n", - " result[name] = row.metrics[i]\n", - " results.append(result)\n", - " return results\n", - "\n", - "\n", - "def build_payload(\n", - " category_id: str,\n", - " start_date: str,\n", - " end_date: str,\n", - " metrics: List[str],\n", - " dimensions: Optional[List[str]] = None,\n", - " filters: Optional[List[Dict[str, Any]]] = None,\n", - " pagination: Optional[Dict[str, int]] = None,\n", - ") -> Dict[str, Any]:\n", - " \"\"\"\n", - " Build API payload dictionary for report queries.\n", - "\n", - " Args:\n", - " category_id: Category identifier for the query\n", - " start_date: Start date in ISO format (YYYY-MM-DD)\n", - " end_date: End date in ISO format (YYYY-MM-DD)\n", - " metrics: List of metric names to retrieve\n", - " dimensions: Optional list of dimension names to group by\n", - " filters: Optional list of filter dictionaries\n", - " pagination: Optional pagination dict with 'limit' and 'offset' keys\n", - "\n", - " Returns:\n", - " Dictionary ready to be sent as JSON payload\n", - "\n", - " Example:\n", - " >>> payload = build_payload(\n", - " ... category_id=\"123\",\n", - " ... start_date=\"2025-01-01\",\n", - " ... end_date=\"2025-01-07\",\n", - " ... metrics=[\"count\"],\n", - " ... dimensions=[\"root_domain\"],\n", - " ... )\n", - " \"\"\"\n", - " payload = {\n", - " \"category_id\": category_id,\n", - " \"start_date\": start_date,\n", - " \"end_date\": end_date,\n", - " \"metrics\": metrics,\n", - " }\n", - " if dimensions is not None:\n", - " payload[\"dimensions\"] = dimensions\n", - " if filters is not None:\n", - " payload[\"filters\"] = filters\n", - " if pagination is not None:\n", - " payload[\"pagination\"] = pagination\n", - " return payload\n", - "\n", - "\n", - "def query_report(report_type: str, payload: Dict[str, Any]) -> pd.DataFrame:\n", - " \"\"\"\n", - " Query a report endpoint and return results as a pandas DataFrame.\n", - "\n", - " This function handles cleaning the payload, making the API request,\n", - " and formatting the response into a DataFrame with proper column names.\n", - "\n", - " Args:\n", - " report_type: Type of report - either \"citations\", \"visibility\", or \"sentiment\"\n", - " payload: Dictionary containing request parameters. None values for\n", - " 'filters' and 'pagination' will be automatically removed.\n", - "\n", - " Returns:\n", - " DataFrame with columns corresponding to dimensions and metrics\n", - "\n", - " Raises:\n", - " KeyError: If response structure is unexpected\n", - "\n", - " Example:\n", - " >>> df = query_report(\n", - " ... \"citations\",\n", - " ... {\n", - " ... \"category_id\": \"123\",\n", - " ... \"start_date\": \"2025-01-01\",\n", - " ... \"end_date\": \"2025-01-07\",\n", - " ... \"metrics\": [\"count\"],\n", - " ... \"filters\": None,\n", - " ... \"pagination\": None,\n", - " ... },\n", - " ... )\n", - " \"\"\"\n", - " clean_payload_dict = clean_payload(payload)\n", - "\n", - " if report_type == \"citations\":\n", - " response = client.reports.citations(**clean_payload_dict)\n", - " elif report_type == \"visibility\":\n", - " response = client.reports.visibility(**clean_payload_dict)\n", - " elif report_type == \"sentiment\":\n", - " response = client.reports.sentiment(**clean_payload_dict)\n", - " else:\n", - " raise ValueError(f\"Unknown report type: {report_type}. Must be 'citations', 'visibility', or 'sentiment'\")\n", - "\n", - " results = format_response_data(response)\n", - " return pd.DataFrame(results)" - ], - "execution_count": null, - "outputs": [], - "id": "63019b91f7bbb7d1" - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Visibility Report Functions\n", - "\n", - "Functions for querying visibility reports. See [API Documentation](https://docs.tryprofound.com/api-reference/reports/query-visibility) for details.\n" - ], - "id": "ac10b9aa2a2d0844" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "def get_visibility_share_by_date(\n", - " category_id: str,\n", - " start_date: str,\n", - " end_date: str,\n", - " filters: Optional[List[Dict[str, Any]]] = None,\n", - " pagination: Optional[Dict[str, int]] = None,\n", - ") -> pd.DataFrame:\n", - " \"\"\"\n", - " Get visibility scores by date and asset name.\n", - "\n", - " Args:\n", - " category_id: Category identifier for the query\n", - " start_date: Start date in ISO format (YYYY-MM-DD)\n", - " end_date: End date in ISO format (YYYY-MM-DD)\n", - " filters: Optional list of filter dictionaries. Each filter should have\n", - " 'field', 'operator', and 'value' keys.\n", - " pagination: Optional pagination dict with 'limit' and 'offset' keys\n", - "\n", - " Returns:\n", - " DataFrame with columns ['date', 'asset_name', 'visibility_score'],\n", - " sorted by date (ascending) and visibility_score (descending)\n", - "\n", - " Example:\n", - " >>> df = get_visibility_share_by_date(\n", - " ... category_id=\"123\", start_date=\"2025-01-01\", end_date=\"2025-01-07\", filters=[common_filters[\"region_us\"]]\n", - " ... )\n", - " \"\"\"\n", - " payload = build_payload(\n", - " category_id=category_id,\n", - " start_date=start_date,\n", - " end_date=end_date,\n", - " metrics=[\"visibility_score\"],\n", - " dimensions=[\"date\", \"asset_name\"],\n", - " filters=filters,\n", - " pagination=pagination,\n", - " )\n", - " visibility_df = query_report(\"visibility\", payload)\n", - " return visibility_df.sort_values([\"date\", \"visibility_score\"], ascending=[True, False])\n", - "\n", - "\n", - "def get_visibility_score_rank(\n", - " category_id: str,\n", - " start_date: str,\n", - " end_date: str,\n", - " filters: Optional[List[Dict[str, Any]]] = None,\n", - " pagination: Optional[Dict[str, int]] = None,\n", - ") -> pd.DataFrame:\n", - " \"\"\"\n", - " Get visibility score rankings by asset name.\n", - "\n", - " Args:\n", - " category_id: Category identifier for the query\n", - " start_date: Start date in ISO format (YYYY-MM-DD)\n", - " end_date: End date in ISO format (YYYY-MM-DD)\n", - " filters: Optional list of filter dictionaries\n", - " pagination: Optional pagination dict with 'limit' and 'offset' keys\n", - "\n", - " Returns:\n", - " DataFrame with columns ['asset_name', 'visibility_score']\n", - "\n", - " Example:\n", - " >>> df = get_visibility_score_rank(category_id=\"123\", start_date=\"2025-01-01\", end_date=\"2025-01-07\")\n", - " \"\"\"\n", - " payload = build_payload(\n", - " category_id=category_id,\n", - " start_date=start_date,\n", - " end_date=end_date,\n", - " metrics=[\"visibility_score\"],\n", - " dimensions=[\"asset_name\"],\n", - " filters=filters,\n", - " pagination=pagination,\n", - " )\n", - " return query_report(\"visibility\", payload)\n", - "\n", - "\n", - "def get_visibility_share_of_voice_rank(\n", - " category_id: str,\n", - " start_date: str,\n", - " end_date: str,\n", - " filters: Optional[List[Dict[str, Any]]] = None,\n", - " pagination: Optional[Dict[str, int]] = None,\n", - ") -> pd.DataFrame:\n", - " \"\"\"\n", - " Get share of voice rankings by asset name.\n", - "\n", - " Args:\n", - " category_id: Category identifier for the query\n", - " start_date: Start date in ISO format (YYYY-MM-DD)\n", - " end_date: End date in ISO format (YYYY-MM-DD)\n", - " filters: Optional list of filter dictionaries\n", - " pagination: Optional pagination dict with 'limit' and 'offset' keys\n", - "\n", - " Returns:\n", - " DataFrame with columns ['asset_name', 'share_of_voice']\n", - "\n", - " Example:\n", - " >>> df = get_visibility_share_of_voice_rank(category_id=\"123\", start_date=\"2025-01-01\", end_date=\"2025-01-07\")\n", - " \"\"\"\n", - " payload = build_payload(\n", - " category_id=category_id,\n", - " start_date=start_date,\n", - " end_date=end_date,\n", - " metrics=[\"share_of_voice\"],\n", - " dimensions=[\"asset_name\"],\n", - " filters=filters,\n", - " pagination=pagination,\n", - " )\n", - " return query_report(\"visibility\", payload)\n", - "\n", - "\n", - "def get_visibility_rankings_by_topic(\n", - " category_id: str,\n", - " start_date: str,\n", - " end_date: str,\n", - " filters: Optional[List[Dict[str, Any]]] = None,\n", - " pagination: Optional[Dict[str, int]] = None,\n", - ") -> pd.DataFrame:\n", - " \"\"\"\n", - " Get visibility score rankings broken down by topic and asset.\n", - "\n", - " Retrieves visibility scores for each asset within each topic, allowing\n", - " analysis of competitive positioning across different topic areas.\n", - "\n", - " Args:\n", - " category_id: Category identifier for the query\n", - " start_date: Start date in ISO format (YYYY-MM-DD)\n", - " end_date: End date in ISO format (YYYY-MM-DD)\n", - " filters: Optional list of filter dictionaries. Each filter should have\n", - " 'field', 'operator', and 'value' keys.\n", - " pagination: Optional pagination dict with 'limit' and 'offset' keys\n", - "\n", - " Returns:\n", - " DataFrame with columns ['topic', 'asset_name', 'visibility_score'],\n", - " sorted by topic (ascending), visibility_score (descending), and\n", - " asset_name (ascending)\n", - "\n", - " Example:\n", - " >>> df = get_visibility_rankings_by_topic(\n", - " ... category_id=\"123\", start_date=\"2025-01-01\", end_date=\"2025-01-07\", filters=[common_filters[\"region_us\"]]\n", - " ... )\n", - " >>> # View top assets per topic\n", - " >>> df.groupby(\"topic\").head(10)\n", - " \"\"\"\n", - " payload = build_payload(\n", - " category_id=category_id,\n", - " start_date=start_date,\n", - " end_date=end_date,\n", - " metrics=[\"visibility_score\"],\n", - " dimensions=[\"asset_name\", \"topic\"],\n", - " filters=filters,\n", - " pagination=pagination,\n", - " )\n", - " visibility_df = query_report(\"visibility\", payload)\n", - " visibility_df = visibility_df[[\"topic\", \"asset_name\", \"visibility_score\"]]\n", - "\n", - " return (\n", - " visibility_df.assign(\n", - " _topic=visibility_df[\"topic\"].str.lower(),\n", - " _asset=visibility_df[\"asset_name\"].str.lower(),\n", - " )\n", - " .sort_values([\"_topic\", \"visibility_score\", \"_asset\"], ascending=[True, False, True])\n", - " .drop(columns=[\"_topic\", \"_asset\"])\n", - " )" - ], - "execution_count": null, - "outputs": [], - "id": "6ab174d0412069bb" - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Citations Report Functions\n", - "\n", - "Functions for querying citations reports. See [API Documentation](https://docs.tryprofound.com/api-reference/reports/query-citations) for details.\n" - ], - "id": "17ec76b4e688604c" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "def get_citations_count(\n", - " category_id: str,\n", - " start_date: str,\n", - " end_date: str,\n", - " filters: Optional[List[Dict[str, Any]]] = None,\n", - " pagination: Optional[Dict[str, int]] = None,\n", - ") -> pd.DataFrame:\n", - " \"\"\"\n", - " Get total citation count.\n", - "\n", - " Args:\n", - " category_id: Category identifier for the query\n", - " start_date: Start date in ISO format (YYYY-MM-DD)\n", - " end_date: End date in ISO format (YYYY-MM-DD)\n", - " filters: Optional list of filter dictionaries\n", - " pagination: Optional pagination dict with 'limit' and 'offset' keys\n", - "\n", - " Returns:\n", - " DataFrame with a single row containing the 'count' column\n", - "\n", - " Example:\n", - " >>> df = get_citations_count(\n", - " ... category_id=\"123\",\n", - " ... start_date=\"2025-01-01\",\n", - " ... end_date=\"2025-01-07\",\n", - " ... filters=[common_filters[\"prompts_visibility\"]],\n", - " ... )\n", - " \"\"\"\n", - " payload = build_payload(\n", - " category_id=category_id,\n", - " start_date=start_date,\n", - " end_date=end_date,\n", - " metrics=[\"count\"],\n", - " filters=filters,\n", - " pagination=pagination,\n", - " )\n", - " return query_report(\"citations\", payload)\n", - "\n", - "\n", - "def get_citation_share(\n", - " category_id: str,\n", - " start_date: str,\n", - " end_date: str,\n", - " filters: Optional[List[Dict[str, Any]]] = None,\n", - " pagination: Optional[Dict[str, int]] = None,\n", - ") -> pd.DataFrame:\n", - " \"\"\"\n", - " Get citation share of voice by root domain.\n", - "\n", - " Args:\n", - " category_id: Category identifier for the query\n", - " start_date: Start date in ISO format (YYYY-MM-DD)\n", - " end_date: End date in ISO format (YYYY-MM-DD)\n", - " filters: Optional list of filter dictionaries\n", - " pagination: Optional pagination dict with 'limit' and 'offset' keys\n", - "\n", - " Returns:\n", - " DataFrame with columns ['root_domain', 'share_of_voice']\n", - "\n", - " Example:\n", - " >>> df = get_citation_share(category_id=\"123\", start_date=\"2025-01-01\", end_date=\"2025-01-07\")\n", - " \"\"\"\n", - " payload = build_payload(\n", - " category_id=category_id,\n", - " start_date=start_date,\n", - " end_date=end_date,\n", - " metrics=[\"share_of_voice\"],\n", - " dimensions=[\"root_domain\"],\n", - " filters=filters,\n", - " pagination=pagination,\n", - " )\n", - " return query_report(\"citations\", payload)\n", - "\n", - "\n", - "def get_citation_share_by_date(\n", - " category_id: str,\n", - " start_date: str,\n", - " end_date: str,\n", - " filters: Optional[List[Dict[str, Any]]] = None,\n", - " pagination: Optional[Dict[str, int]] = None,\n", - ") -> pd.DataFrame:\n", - " \"\"\"\n", - " Get citation share of voice by date and root domain.\n", - "\n", - " Args:\n", - " category_id: Category identifier for the query\n", - " start_date: Start date in ISO format (YYYY-MM-DD)\n", - " end_date: End date in ISO format (YYYY-MM-DD)\n", - " filters: Optional list of filter dictionaries\n", - " pagination: Optional pagination dict with 'limit' and 'offset' keys\n", - "\n", - " Returns:\n", - " DataFrame with columns ['date', 'root_domain', 'share_of_voice'],\n", - " sorted by date (ascending) and share_of_voice (descending)\n", - "\n", - " Example:\n", - " >>> df = get_citation_share_by_date(category_id=\"123\", start_date=\"2025-01-01\", end_date=\"2025-01-07\")\n", - " \"\"\"\n", - " payload = build_payload(\n", - " category_id=category_id,\n", - " start_date=start_date,\n", - " end_date=end_date,\n", - " metrics=[\"share_of_voice\"],\n", - " dimensions=[\"date\", \"root_domain\"],\n", - " filters=filters,\n", - " pagination=pagination,\n", - " )\n", - " citations_df = query_report(\"citations\", payload)\n", - " return citations_df.sort_values([\"date\", \"share_of_voice\"], ascending=[True, False])\n", - "\n", - "\n", - "def get_citation_categories(\n", - " category_id: str,\n", - " start_date: str,\n", - " end_date: str,\n", - " filters: Optional[List[Dict[str, Any]]] = None,\n", - " pagination: Optional[Dict[str, int]] = None,\n", - ") -> pd.DataFrame:\n", - " \"\"\"\n", - " Get citation categories with share of voice calculations.\n", - "\n", - " Calculates share of voice for each citation category by:\n", - " 1. Computing share of voice per model\n", - " 2. Averaging across all models\n", - "\n", - " Args:\n", - " category_id: Category identifier for the query\n", - " start_date: Start date in ISO format (YYYY-MM-DD)\n", - " end_date: End date in ISO format (YYYY-MM-DD)\n", - " filters: Optional list of filter dictionaries\n", - " pagination: Optional pagination dict with 'limit' and 'offset' keys\n", - "\n", - " Returns:\n", - " DataFrame with columns ['citation_category', 'share_of_voice', 'count'],\n", - " sorted by share_of_voice (descending)\n", - "\n", - " Example:\n", - " >>> df = get_citation_categories(category_id=\"123\", start_date=\"2025-01-01\", end_date=\"2025-01-07\")\n", - " \"\"\"\n", - " payload = build_payload(\n", - " category_id=category_id,\n", - " start_date=start_date,\n", - " end_date=end_date,\n", - " metrics=[\"count\"],\n", - " dimensions=[\"citation_category\", \"model\"],\n", - " filters=filters,\n", - " pagination=pagination,\n", - " )\n", - " citations_df = query_report(\"citations\", payload)\n", - "\n", - " total_unique_models = citations_df[\"model\"].nunique()\n", - " model_total_citations = citations_df.groupby(\"model\")[\"count\"].sum()\n", - "\n", - " citations_df[\"share_of_voice\"] = citations_df[\"count\"] / citations_df[\"model\"].map(model_total_citations)\n", - "\n", - " domain_category_scores = citations_df.groupby([\"citation_category\"], as_index=False)[\n", - " [\"share_of_voice\", \"count\"]\n", - " ].sum()\n", - "\n", - " domain_category_scores[\"share_of_voice\"] = domain_category_scores[\"share_of_voice\"] / total_unique_models\n", - "\n", - " return domain_category_scores.sort_values(\"share_of_voice\", ascending=False)\n", - "\n", - "\n", - "def get_top_citation_domains(\n", - " category_id: str,\n", - " start_date: str,\n", - " end_date: str,\n", - " filters: Optional[List[Dict[str, Any]]] = None,\n", - " pagination: Optional[Dict[str, int]] = None,\n", - ") -> pd.DataFrame:\n", - " \"\"\"\n", - " Calculate top citation domains based on citation share across models.\n", - "\n", - " Calculates share of voice for each root domain by:\n", - " 1. Computing share of voice per model\n", - " 2. Averaging across all models\n", - "\n", - " Args:\n", - " category_id: Category identifier for the query\n", - " start_date: Start date in ISO format (YYYY-MM-DD)\n", - " end_date: End date in ISO format (YYYY-MM-DD)\n", - " filters: Optional list of filter dictionaries\n", - " pagination: Optional pagination dict with 'limit' and 'offset' keys\n", - "\n", - " Returns:\n", - " DataFrame with columns ['root_domain', 'share_of_voice', 'count'],\n", - " sorted by share_of_voice (descending)\n", - "\n", - " Example:\n", - " >>> df = get_top_citation_domains(category_id=\"123\", start_date=\"2025-01-01\", end_date=\"2025-01-07\")\n", - " \"\"\"\n", - " payload = build_payload(\n", - " category_id=category_id,\n", - " start_date=start_date,\n", - " end_date=end_date,\n", - " metrics=[\"count\"],\n", - " dimensions=[\"root_domain\", \"model\"],\n", - " filters=filters,\n", - " pagination=pagination,\n", - " )\n", - " citations_df = query_report(\"citations\", payload)\n", - "\n", - " total_unique_models = citations_df[\"model\"].nunique()\n", - " model_total_citations = citations_df.groupby(\"model\")[\"count\"].sum()\n", - "\n", - " citations_df[\"share_of_voice\"] = citations_df[\"count\"] / citations_df[\"model\"].map(model_total_citations)\n", - "\n", - " domain_category_scores = citations_df.groupby([\"root_domain\"], as_index=False)[[\"share_of_voice\", \"count\"]].sum()\n", - "\n", - " domain_category_scores[\"share_of_voice\"] = domain_category_scores[\"share_of_voice\"] / total_unique_models\n", - "\n", - " return domain_category_scores.sort_values(\"share_of_voice\", ascending=False)" - ], - "execution_count": null, - "outputs": [], - "id": "ed1c8a588ac31326" - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Sentiment Report Functions\n", - "\n", - "Functions for querying sentiment reports. See [API Documentation](https://docs.tryprofound.com/api-reference/reports/query-sentiment) for details." - ], - "id": "ba93fb9c" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "def get_sentiment_by_date(\n", - " category_id: str,\n", - " start_date: str,\n", - " end_date: str,\n", - " filters: Optional[List[Dict[str, Any]]] = None,\n", - " pagination: Optional[Dict[str, int]] = None,\n", - ") -> pd.Series:\n", - " \"\"\"\n", - " Args:\n", - " category_id: Category identifier for the query\n", - " start_date: Start date in ISO format (YYYY-MM-DD)\n", - " end_date: End date in ISO format (YYYY-MM-DD)\n", - " filters: Optional list of filter dictionaries. Each filter should have\n", - " 'field', 'operator', and 'value' keys.\n", - " pagination: Optional pagination dict with 'limit' and 'offset' keys\n", - "\n", - " Returns:\n", - " Series with date as index and average positive_ratio as values\n", - "\n", - " Example:\n", - " >>> sentiment = get_sentiment_by_date(\n", - " ... category_id=\"123\",\n", - " ... start_date=\"2025-01-01\",\n", - " ... end_date=\"2025-01-07\",\n", - " ... filters=[common_filters[\"region_us\"]],\n", - " ... )\n", - " \"\"\"\n", - " payload = build_payload(\n", - " category_id=category_id,\n", - " start_date=start_date,\n", - " end_date=end_date,\n", - " metrics=[\"positive\", \"occurrences\"],\n", - " dimensions=[\"date\", \"model\"],\n", - " filters=filters,\n", - " pagination=pagination,\n", - " )\n", - " sentiment_df = query_report(\"sentiment\", payload)\n", - " sentiment_df[\"positive_ratio\"] = sentiment_df[\"positive\"] / sentiment_df[\"occurrences\"]\n", - " return sentiment_df.groupby(\"date\")[\"positive_ratio\"].mean()" - ], - "execution_count": null, - "outputs": [], - "id": "4d36e2ff" - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Visibility Reports\n" - ], - "id": "6f192e32e3c833fe" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "visibility_share_by_date = get_visibility_share_by_date(\n", - " category_id=category_id,\n", - " start_date=start_date,\n", - " end_date=end_date,\n", - " filters=[common_filters[\"region_us\"]],\n", - ")\n", - "visibility_share_by_date" - ], - "execution_count": null, - "outputs": [], - "id": "1a376e0d00a5fbd6" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "visibility_score_rank = get_visibility_score_rank(\n", - " category_id=category_id,\n", - " start_date=start_date,\n", - " end_date=end_date,\n", - " filters=[common_filters[\"region_us\"]],\n", - ")\n", - "visibility_score_rank" - ], - "execution_count": null, - "outputs": [], - "id": "2a98e9fe347b74ae" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "visibility_share_of_voice_rank = get_visibility_share_of_voice_rank(\n", - " category_id=category_id,\n", - " start_date=start_date,\n", - " end_date=end_date,\n", - " filters=[common_filters[\"region_us\"]],\n", - ")\n", - "visibility_share_of_voice_rank" - ], - "execution_count": null, - "outputs": [], - "id": "f9f43dd93c38c6e1" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "visibility_rankings_by_topic = get_visibility_rankings_by_topic(\n", - " category_id=category_id,\n", - " start_date=start_date,\n", - " end_date=end_date,\n", - " filters=[common_filters[\"region_us\"]],\n", - ")\n", - "visibility_rankings_by_topic.groupby(\"topic\").head(10)" - ], - "execution_count": null, - "outputs": [], - "id": "580ab98e" - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Citations Reports" - ], - "id": "5b13185b90dd586" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "citations_count = get_citations_count(\n", - " category_id=category_id,\n", - " start_date=start_date,\n", - " end_date=end_date,\n", - " filters=[\n", - " common_filters[\"prompts_visibility\"],\n", - " common_filters[\"region_us\"],\n", - " ],\n", - ")\n", - "citations_count" - ], - "execution_count": null, - "outputs": [], - "id": "72f1043c2e28f430" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "citation_share = get_citation_share(\n", - " category_id=category_id,\n", - " start_date=start_date,\n", - " end_date=end_date,\n", - " filters=[\n", - " {\n", - " \"field\": \"root_domain\",\n", - " \"operator\": \"is\",\n", - " \"value\": domain_url,\n", - " },\n", - " common_filters[\"prompts_visibility\"],\n", - " common_filters[\"region_us\"],\n", - " ],\n", - ")\n", - "citation_share" - ], - "execution_count": null, - "outputs": [], - "id": "fd8827873dc95935" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "citation_share_by_date = get_citation_share_by_date(\n", - " category_id=category_id,\n", - " start_date=start_date,\n", - " end_date=end_date,\n", - " filters=[\n", - " common_filters[\"prompts_visibility\"],\n", - " common_filters[\"region_us\"],\n", - " ],\n", - ")\n", - "citation_share_by_date" - ], - "execution_count": null, - "outputs": [], - "id": "dd532f569cd20262" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "citation_categories = get_citation_categories(\n", - " category_id=category_id,\n", - " start_date=start_date,\n", - " end_date=end_date,\n", - " filters=[\n", - " common_filters[\"prompts_visibility\"],\n", - " common_filters[\"region_us\"],\n", - " ],\n", - ")\n", - "citation_categories" - ], - "execution_count": null, - "outputs": [], - "id": "18e9bb6effbe5b7e" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "top_citation_domains = get_top_citation_domains(\n", - " category_id=category_id,\n", - " start_date=start_date,\n", - " end_date=end_date,\n", - " filters=[\n", - " common_filters[\"prompts_visibility\"],\n", - " common_filters[\"region_us\"],\n", - " ],\n", - ")\n", - "top_citation_domains" - ], - "execution_count": null, - "outputs": [], - "id": "d0fba9d0509fb6e7" - }, - { - "metadata": {}, - "cell_type": "markdown", - "source": "## Sentiment Reports", - "id": "1e7712bb18f51744" - }, - { - "metadata": {}, - "cell_type": "code", - "outputs": [], - "execution_count": null, - "source": [ - "sentiment = get_sentiment_by_date(\n", - " category_id=category_id,\n", - " start_date=start_date,\n", - " end_date=end_date,\n", - " filters=[common_filters[\"region_us\"]],\n", - ")\n", - "sentiment" - ], - "id": "4e3c2aa28c160a4a" - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.13.9" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/examples/pyproject.toml b/examples/pyproject.toml deleted file mode 100644 index 34c30fe6..00000000 --- a/examples/pyproject.toml +++ /dev/null @@ -1,19 +0,0 @@ -[project] -name = "profound-examples" -version = "0.1.0" -description = "Profound API examples." -readme = "README.md" -requires-python = ">=3.9.18" -dependencies = [ - "pandas>=2.3.3", - "profound", - "pytz>=2025.2", -] - -[tool.uv.sources] -profound = { workspace = true } - -[dependency-groups] -dev = [ - "ruff>=0.14.13", -] diff --git a/openapi.augmented.json b/openapi.augmented.json new file mode 100644 index 00000000..f9c2df3e --- /dev/null +++ b/openapi.augmented.json @@ -0,0 +1,20835 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "External API", + "version": "61770f593190b70031f3d019ae5b68d58e60743e", + "x-scalar-sdk-installation": [ + { + "lang": "Python", + "description": "```sh\npip install profound\n```" + } + ] + }, + "servers": [ + { + "url": "https://api.tryprofound.com", + "description": "Production Server" + } + ], + "paths": { + "/v1/org": { + "get": { + "tags": [ + "Organization" + ], + "summary": "List organizations", + "description": "Return every organization the caller's API key grants access to. Use this to discover organization IDs before calling endpoints that accept an `organization_id` filter.", + "operationId": "list_organizations_v1_org_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/Organization" + }, + "type": "array", + "title": "Response List Organizations V1 Org Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst organizations = await client.organizations.list();\n\nconsole.log(organizations);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\norganization = client.organizations.list()\nprint(organization)" + } + ] + } + }, + "/v1/org/regions": { + "get": { + "tags": [ + "Organization" + ], + "summary": "Get Regions", + "description": "Get the organization regions.", + "operationId": "get_regions_v1_org_regions_get", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "organization_ids", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + { + "type": "null" + } + ], + "description": "Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to.", + "title": "Organization Ids" + }, + "description": "Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to." + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NamedResource" + }, + "title": "Response Get Regions V1 Org Regions Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst namedResources = await client.organizations.regions();\n\nconsole.log(namedResources);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\norganization = client.organizations.regions()\nprint(organization)" + } + ] + } + }, + "/v1/org/models": { + "get": { + "tags": [ + "Organization" + ], + "summary": "Get Models", + "description": "Get the organization models.", + "operationId": "get_models_v1_org_models_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/NamedResource" + }, + "type": "array", + "title": "Response Get Models V1 Org Models Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst namedResources = await client.organizations.models();\n\nconsole.log(namedResources);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\norganization = client.organizations.models()\nprint(organization)" + } + ] + } + }, + "/v1/org/domains": { + "get": { + "tags": [ + "Organization" + ], + "summary": "Get Domains", + "description": "Get the organization domains.", + "operationId": "get_domains_v1_org_domains_get", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "organization_ids", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + { + "type": "null" + } + ], + "description": "Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to.", + "title": "Organization Ids" + }, + "description": "Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to." + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DomainWithOrganization" + }, + "title": "Response Get Domains V1 Org Domains Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.organizations.domains();\n\nconsole.log(response);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\norganization = client.organizations.domains()\nprint(organization)" + } + ] + } + }, + "/v1/org/assets": { + "get": { + "tags": [ + "Organization" + ], + "summary": "Get Assets", + "description": "Get the organization assets, one row per (asset, organization) pair.\n\nAn asset's category can belong to multiple organizations; one asset row is\nemitted per owning org so no association is silently dropped.", + "operationId": "get_assets_v1_org_assets_get", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "organization_ids", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + { + "type": "null" + } + ], + "description": "Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to.", + "title": "Organization Ids" + }, + "description": "Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to." + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganizationAssetsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.organizations.listAssets();\n\nconsole.log(response.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\norganization = client.organizations.list_assets()\nprint(organization)" + } + ] + } + }, + "/v1/org/personas": { + "get": { + "tags": [ + "Organization" + ], + "summary": "Get Personas", + "description": "Get the organization personas, one row per (persona, organization) pair.\n\nSame (item, org) fan-out as ``get_assets``: a persona's category can be\nowned by multiple orgs, and each owning org gets its own row so no\nassociation is silently dropped.", + "operationId": "get_personas_v1_org_personas_get", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "organization_ids", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + { + "type": "null" + } + ], + "description": "Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to.", + "title": "Organization Ids" + }, + "description": "Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to." + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganizationPersonasWithCategoryResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.organizations.getPersonas();\n\nconsole.log(response.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\norganization = client.organizations.get_personas()\nprint(organization)" + } + ] + } + }, + "/v1/org/categories": { + "get": { + "tags": [ + "Organization", + "Categories" + ], + "summary": "Get Categories", + "description": "Get the organization categories, one row per (category, organization) pair.", + "operationId": "get_categories_v1_org_categories_get", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "organization_ids", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + { + "type": "null" + } + ], + "description": "Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to.", + "title": "Organization Ids" + }, + "description": "Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to." + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CategoryWithOrganization" + }, + "title": "Response Get Categories V1 Org Categories Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst categories = await client.organizations.categories.list();\n\nconsole.log(categories);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ncategory = client.organizations.categories.list()\nprint(category)" + } + ] + } + }, + "/v1/org/categories/{category_id}/topics": { + "get": { + "tags": [ + "Organization", + "Categories" + ], + "summary": "Get Category Topics", + "description": "Get the topics for a specific category.", + "operationId": "get_category_topics_v1_org_categories__category_id__topics_get", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "category_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Category Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Topic" + }, + "title": "Response Get Category Topics V1 Org Categories Category Id Topics Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.organizations.categories.topics(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n);\n\nconsole.log(response);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ncategory = client.organizations.categories.topics(\n category_id=\"categoryId\",\n)\nprint(category)" + } + ] + } + }, + "/v1/org/categories/{category_id}/tags": { + "get": { + "tags": [ + "Organization", + "Categories" + ], + "summary": "Get Category Tags", + "description": "Get the tags for a specific category.", + "operationId": "get_category_tags_v1_org_categories__category_id__tags_get", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "category_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Category Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Tag" + }, + "title": "Response Get Category Tags V1 Org Categories Category Id Tags Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.organizations.categories.tags('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');\n\nconsole.log(response);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ncategory = client.organizations.categories.tags(\n category_id=\"categoryId\",\n)\nprint(category)" + } + ] + } + }, + "/v1/org/categories/{category_id}/regions": { + "get": { + "tags": [ + "Organization", + "Categories" + ], + "summary": "Get Category Regions", + "description": "Get the regions for a specific category.", + "operationId": "get_category_regions_v1_org_categories__category_id__regions_get", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "category_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Category Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NamedResource" + }, + "title": "Response Get Category Regions V1 Org Categories Category Id Regions Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst namedResources = await client.organizations.categories.retrieveRegions(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n);\n\nconsole.log(namedResources);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\norganization = client.organization.list_category_regions_v1_org_categories_category_regions_get(\n category_id=\"categoryId\",\n)\nprint(organization)" + } + ] + } + }, + "/v1/org/categories/{category_id}/prompts": { + "get": { + "tags": [ + "Organization", + "Categories" + ], + "summary": "List prompts", + "description": "Retrieve prompts in a category with optional filtering by type, topic, tag, region, platform, or persona. Supports cursor-based pagination.", + "operationId": "get_category_prompts_v1_org_categories__category_id__prompts_get", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "category_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Category Id" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 10000, + "exclusiveMinimum": 0, + "description": "Maximum number of prompts to return.", + "default": 10000, + "title": "Limit" + }, + "description": "Maximum number of prompts to return." + }, + { + "name": "cursor", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Pagination cursor from a previous response.", + "title": "Cursor" + }, + "description": "Pagination cursor from a previous response." + }, + { + "name": "order_dir", + "in": "query", + "required": false, + "schema": { + "$ref": "#/components/schemas/OrderByDirection", + "description": "Sort direction by creation date." + }, + "description": "Sort direction by creation date." + }, + { + "name": "analysis_type", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AnalysisType" + }, + "description": "Filter by analysis type (visibility, sentiment, accuracy).", + "default": [], + "title": "Analysis Type" + }, + "description": "Filter by analysis type (visibility, sentiment, accuracy)." + }, + { + "name": "prompt_type", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PromptType" + }, + "description": "Deprecated. Use analysis_type instead.", + "deprecated": true, + "default": [], + "title": "Prompt Type" + }, + "description": "Deprecated. Use analysis_type instead.", + "deprecated": true + }, + { + "name": "status", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "enum": [ + "active", + "disabled" + ], + "type": "string" + }, + "description": "Filter by prompt status. Defaults to `active` only.", + "default": [ + "active" + ], + "title": "Status" + }, + "description": "Filter by prompt status. Defaults to `active` only." + }, + { + "name": "topic_id", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "Filter by topic IDs.", + "default": [], + "title": "Topic Id" + }, + "description": "Filter by topic IDs." + }, + { + "name": "tag_id", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "Filter by tag IDs.", + "default": [], + "title": "Tag Id" + }, + "description": "Filter by tag IDs." + }, + { + "name": "region_id", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "Filter by region IDs.", + "default": [], + "title": "Region Id" + }, + "description": "Filter by region IDs." + }, + { + "name": "platform_id", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "Filter by platform IDs.", + "default": [], + "title": "Platform Id" + }, + "description": "Filter by platform IDs." + }, + { + "name": "persona_id", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "Filter by persona IDs.", + "default": [], + "title": "Persona Id" + }, + "description": "Filter by persona IDs." + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CategoryPromptsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.organizations.categories.prompts(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n);\n\nconsole.log(response.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ncategory = client.organizations.categories.prompts(\n category_id=\"categoryId\",\n limit=10000,\n status=[\"active\"],\n)\nprint(category)" + } + ] + }, + "post": { + "tags": [ + "Organization", + "Categories" + ], + "summary": "Create prompts", + "description": "Create one or more prompts in a category. Topics and tags are auto-created if referenced by name and not yet existing. Use dry_run to preview without persisting.", + "operationId": "create_category_prompts_v1_org_categories__category_id__prompts_post", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "category_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Category Id" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreatePromptsBody" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreatePromptsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.organizations.categories.createPrompts(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n {\n prompts: [\n {\n language: 'language',\n platforms: [{}],\n prompt: 'x',\n regions: [{}],\n topic: {},\n },\n ],\n },\n);\n\nconsole.log(response.dry_run);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ncategory = client.organizations.categories.create_prompts(\n category_id=\"categoryId\",\n prompts=[],\n dry_run=False,\n)\nprint(category)" + } + ] + }, + "patch": { + "tags": [ + "Organization", + "Categories" + ], + "summary": "Update prompts", + "description": "Update one or more existing prompts. Only provided fields are changed. Dimension fields (regions, platforms, personas, tags) replace the full set when provided. Use dry_run to preview without persisting.", + "operationId": "update_category_prompts_v1_org_categories__category_id__prompts_patch", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "category_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Category Id" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdatePromptsBody" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdatePromptsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.organizations.categories.updatePrompts(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n { prompts: [{ id: 'id' }] },\n);\n\nconsole.log(response.dry_run);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ncategory = client.organizations.categories.update_prompts(\n category_id=\"categoryId\",\n prompts=[],\n dry_run=False,\n)\nprint(category)" + } + ] + } + }, + "/v1/org/categories/{category_id}/prompts/status": { + "patch": { + "tags": [ + "Organization", + "Categories" + ], + "summary": "Update prompt status", + "description": "Bulk-update the status of one or more prompts. Prompts already in the target status are skipped. Use dry_run to preview without persisting.\n\nStatus options:\n- 'active': Prompts will run daily.\n- 'disabled': Prompts will not run moving forward, but historical data is preserved.\n- 'deleted': Prompts are deleted along with historical data", + "operationId": "update_category_prompt_status_v1_org_categories__category_id__prompts_status_patch", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "category_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Category Id" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdatePromptStatusBody" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdatePromptStatusResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.organizations.categories.updatePromptStatus(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n { prompt_ids: ['182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e'], status: 'active' },\n);\n\nconsole.log(response.dry_run);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ncategory = client.organizations.categories.update_prompt_status(\n category_id=\"categoryId\",\n prompt_ids=[],\n status=\"active\",\n dry_run=False,\n)\nprint(category)" + } + ] + } + }, + "/v1/org/categories/{category_id}/assets": { + "get": { + "tags": [ + "Organization", + "Categories" + ], + "summary": "Get Category Assets", + "operationId": "get_category_assets_v1_org_categories__category_id__assets_get", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "category_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Category Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CategoryAsset" + }, + "title": "Response Get Category Assets V1 Org Categories Category Id Assets Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.organizations.categories.assets(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n);\n\nconsole.log(response);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ncategory = client.organizations.categories.assets(\n category_id=\"categoryId\",\n)\nprint(category)" + } + ] + } + }, + "/v1/org/categories/{category_id}/personas": { + "get": { + "tags": [ + "Organization", + "Categories" + ], + "summary": "Get Category Personas", + "operationId": "get_category_personas_v1_org_categories__category_id__personas_get", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "category_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Category Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CategoryPersonasResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.organizations.categories.getCategoryPersonas(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n);\n\nconsole.log(response.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ncategory = client.organizations.categories.get_category_personas(\n category_id=\"categoryId\",\n)\nprint(category)" + } + ] + } + }, + "/v1/prompts/answers": { + "post": { + "tags": [ + "Prompts" + ], + "summary": "Get Answers", + "operationId": "get_answers_v1_prompts_answers_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnswersQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnswersResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.prompts.answers({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nanswer = client.prompts.answers.create_v1_prompts_post(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nprint(answer)" + } + ] + } + }, + "/v1/reports/citations": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Query Citations", + "description": "Get citations for a given category.", + "operationId": "query_citations_v1_reports_citations_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CitationsQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CitationsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.citations({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n metrics: ['count'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ncitation = client.reports.citations.query_v1_reports_post(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nprint(citation)" + } + ] + } + }, + "/v1/reports/citations/stream": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Stream Citations", + "operationId": "stream_citations_v1_reports_citations_stream_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StreamCitationsQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Server-sent events stream. Emits a `summary` event first, then one `row` event per streamed row.", + "content": { + "text/event-stream": { + "schema": { + "oneOf": [ + { + "properties": { + "query": { + "additionalProperties": true, + "type": "object", + "title": "Query", + "description": "The normalized query used to build the stream." + }, + "total_rows": { + "type": "integer", + "title": "Total Rows", + "description": "Total number of rows available before pagination is applied." + } + }, + "type": "object", + "required": [ + "query", + "total_rows" + ], + "title": "SSESummaryEventData" + }, + { + "additionalProperties": true, + "type": "object", + "description": "A streamed citations report row payload." + } + ] + }, + "examples": { + "summary": { + "summary": "Initial summary event payload", + "value": { + "query": { + "category_id": "12345678-1234-5678-1234-567812345678", + "metrics": [ + "count" + ], + "dimensions": [ + "model" + ] + }, + "total_rows": 2 + } + }, + "row": { + "summary": "Streamed row event payload", + "value": { + "model": { + "id": "11111111-1111-1111-1111-111111111111", + "name": "GPT-4" + }, + "count": 42 + } + } + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.streamCitations({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n metrics: ['count'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nstream = client.reports.citations.stream_v1_reports_stream_post(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nfor event in stream:\n print(event)" + } + ] + } + }, + "/v1/reports/visibility": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Query Visibility", + "description": "Query visibility report.", + "operationId": "query_visibility_v1_reports_visibility_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VisibilityQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Response" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst reportResponse = await client.reports.visibility({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n metrics: ['share_of_voice'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(reportResponse.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nvisibility = client.reports.visibility.query_v1_reports_post(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nprint(visibility)" + } + ] + } + }, + "/v1/reports/visibility/stream": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Stream Visibility", + "operationId": "stream_visibility_v1_reports_visibility_stream_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StreamVisibilityQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Server-sent events stream. Emits a `summary` event first, then one `row` event per streamed row.", + "content": { + "text/event-stream": { + "schema": { + "oneOf": [ + { + "properties": { + "query": { + "additionalProperties": true, + "type": "object", + "title": "Query", + "description": "The normalized query used to build the stream." + }, + "total_rows": { + "type": "integer", + "title": "Total Rows", + "description": "Total number of rows available before pagination is applied." + } + }, + "type": "object", + "required": [ + "query", + "total_rows" + ], + "title": "SSESummaryEventData" + }, + { + "additionalProperties": true, + "type": "object", + "description": "A streamed visibility report row payload." + } + ] + }, + "examples": { + "summary": { + "summary": "Initial summary event payload", + "value": { + "query": { + "category_id": "12345678-1234-5678-1234-567812345678", + "metrics": [ + "count" + ], + "dimensions": [ + "model" + ] + }, + "total_rows": 2 + } + }, + "row": { + "summary": "Streamed row event payload", + "value": { + "asset": { + "id": "11111111-1111-1111-1111-111111111111", + "name": "Brand A" + }, + "mentions_count": 7 + } + } + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.streamVisibility({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n metrics: ['share_of_voice'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nstream = client.reports.visibility.stream_v1_reports_stream_post(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nfor event in stream:\n print(event)" + } + ] + } + }, + "/v1/reports/sentiment": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Query Sentiment", + "description": "Get citations for a given category.", + "operationId": "query_sentiment_v1_reports_sentiment_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SentimentQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Response" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst reportResponse = await client.reports.sentiment({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n metrics: ['positive'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(reportResponse.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nsentiment = client.reports.sentiment.query_v1_reports_post(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nprint(sentiment)" + } + ] + } + }, + "/v1/reports/sentiment/stream": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Stream Sentiment", + "operationId": "stream_sentiment_v1_reports_sentiment_stream_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StreamSentimentQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Server-sent events stream. Emits a `summary` event first, then one `row` event per streamed row.", + "content": { + "text/event-stream": { + "schema": { + "oneOf": [ + { + "properties": { + "query": { + "additionalProperties": true, + "type": "object", + "title": "Query", + "description": "The normalized query used to build the stream." + }, + "total_rows": { + "type": "integer", + "title": "Total Rows", + "description": "Total number of rows available before pagination is applied." + } + }, + "type": "object", + "required": [ + "query", + "total_rows" + ], + "title": "SSESummaryEventData" + }, + { + "additionalProperties": true, + "type": "object", + "description": "A streamed sentiment report row payload." + } + ] + }, + "examples": { + "summary": { + "summary": "Initial summary event payload", + "value": { + "query": { + "category_id": "12345678-1234-5678-1234-567812345678", + "metrics": [ + "count" + ], + "dimensions": [ + "model" + ] + }, + "total_rows": 2 + } + }, + "row": { + "summary": "Streamed row event payload", + "value": { + "theme": "price", + "occurrences": 12 + } + } + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.streamSentiment({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n metrics: ['positive'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nstream = client.reports.sentiment.stream_v1_reports_stream_post(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nfor event in stream:\n print(event)" + } + ] + } + }, + "/v1/reports/sentiment-v2": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Query Sentiment V2", + "operationId": "query_sentiment_v2_v1_reports_sentiment_v2_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SentimentV2ReportQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SentimentV2ReportResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.sentimentV2({\n asset_name: 'asset_name',\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n metrics: ['sentiment'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.info);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nreport = client.reports.query_sentiment_v2_v1_sentiment_v2_post(\n category_id=\"\",\n asset_name=\"\",\n start_date=\"\",\n end_date=\"\",\n date_interval=\"day\",\n metrics=[],\n)\nprint(report)" + } + ] + } + }, + "/v1/reports/web-search-results": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Query Web Search Results", + "description": "Get web search results for a given category.", + "operationId": "query_web_search_results_v1_reports_web_search_results_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WebSearchResultsQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WebSearchResultsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.webSearchResults.query({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n metrics: ['count'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nweb_search_result = client.reports.web_search_results.query(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nprint(web_search_result)" + } + ] + } + }, + "/v1/reports/web-search-results/stream": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Stream Web Search Results", + "operationId": "stream_web_search_results_v1_reports_web_search_results_stream_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StreamWebSearchResultsQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Server-sent events stream. Emits a `summary` event first, then one `row` event per streamed row.", + "content": { + "text/event-stream": { + "schema": { + "oneOf": [ + { + "properties": { + "query": { + "additionalProperties": true, + "type": "object", + "title": "Query", + "description": "The normalized query used to build the stream." + }, + "total_rows": { + "type": "integer", + "title": "Total Rows", + "description": "Total number of rows available before pagination is applied." + } + }, + "type": "object", + "required": [ + "query", + "total_rows" + ], + "title": "SSESummaryEventData" + }, + { + "additionalProperties": true, + "type": "object", + "description": "A streamed web-search-results report row payload." + } + ] + }, + "examples": { + "summary": { + "summary": "Initial summary event payload", + "value": { + "query": { + "category_id": "12345678-1234-5678-1234-567812345678", + "metrics": [ + "count" + ], + "dimensions": [ + "model" + ] + }, + "total_rows": 2 + } + }, + "row": { + "summary": "Streamed row event payload", + "value": { + "model": { + "id": "11111111-1111-1111-1111-111111111111", + "name": "GPT-4" + }, + "count": 42 + } + } + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.webSearchResults.stream({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n metrics: ['count'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nstream = client.reports.web_search_results.stream(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nfor event in stream:\n print(event)" + } + ] + } + }, + "/v1/reports/referrals": { + "post": { + "tags": [ + "Reports", + "Human Referrals" + ], + "summary": "Get Referrals Report V1", + "description": "Get referral traffic report from the daily aggregated materialized view.\n\nThis endpoint queries pre-aggregated daily referral data, making it efficient\nfor large date ranges and high-traffic sites.", + "operationId": "get_referrals_report_v1_v1_reports_referrals_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReferralsQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Response" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst reportResponse = await client.reports.getReferralsReport({\n domain: 'domain',\n metrics: ['visits'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(reportResponse.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nreferral = client.reports.referrals.create_report_v1_v1_reports_post(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n domain=\"\",\n start_date=\"\",\n)\nprint(referral)" + } + ] + } + }, + "/v1/reports/bots": { + "post": { + "tags": [ + "Reports", + "Bot Traffic Reports" + ], + "summary": "Get Bots Report V1", + "description": "Get bot traffic report from the daily aggregated materialized view.\n\nThis endpoint queries pre-aggregated daily bot data, making it efficient\nfor large date ranges and high-traffic sites.\n\nMetrics:\n- count: unique bot visits\n- citations: unique citation events\n- indexing: unique indexing events\n- training: unique training events\n- last_visit: most recent visit timestamp", + "operationId": "get_bots_report_v1_v1_reports_bots_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BotsReportQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Response" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst reportResponse = await client.reports.getBotsReport({\n domain: 'domain',\n metrics: ['count'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(reportResponse.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nbot = client.reports.bots.create_report_v1_v1_reports_post(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n domain=\"\",\n start_date=\"\",\n)\nprint(bot)" + } + ] + } + }, + "/v1/content/{asset_id}/optimization": { + "get": { + "tags": [ + "Content", + "beta", + "Content optimization" + ], + "summary": "Optimization List", + "operationId": "optimization_list_v1_content__asset_id__optimization_get", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "asset_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Asset Id" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 50000, + "exclusiveMinimum": 0, + "description": "Maximum number of results to return", + "default": 10000, + "title": "Limit" + }, + "description": "Maximum number of results to return" + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 0, + "description": "Offset for pagination", + "default": 0, + "title": "Offset" + }, + "description": "Offset for pagination" + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContentOptimizationResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst optimizations = await client.content.optimization.list(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n);\n\nconsole.log(optimizations.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\noptimization = client.content.optimization.list(\n asset_id=\"assetId\",\n limit=10000,\n offset=0,\n)\nprint(optimization)" + } + ] + } + }, + "/v1/content/{asset_id}/optimization/{content_id}": { + "get": { + "tags": [ + "Content", + "beta", + "Content optimization" + ], + "summary": "Optimization Analysis", + "operationId": "optimization_analysis_v1_content__asset_id__optimization__content_id__get", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "asset_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Asset Id" + } + }, + { + "name": "content_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Content Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContentOptimizationAnalysisResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst optimization = await client.content.optimization.retrieve(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n { asset_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e' },\n);\n\nconsole.log(optimization.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\noptimization = client.content.optimization.retrieve(\n asset_id=\"assetId\",\n content_id=\"contentId\",\n)\nprint(optimization)" + } + ] + } + }, + "/v1/knowledge-bases": { + "get": { + "tags": [ + "Knowledge bases" + ], + "summary": "List Knowledge Bases", + "description": "List knowledge bases accessible to the API key.", + "operationId": "list_knowledge_bases_v1_knowledge_bases_get", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "organization_id", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "description": "Organization scope for API keys that can access multiple organizations.", + "title": "Organization Id" + }, + "description": "Organization scope for API keys that can access multiple organizations." + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListKnowledgeBasesResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst knowledgeBases = await client.knowledgeBases.list();\n\nconsole.log(knowledgeBases.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nknowledge_base = client.knowledge_bases.list()\nprint(knowledge_base)" + } + ] + } + }, + "/v1/knowledge-bases/{knowledge_base_id}/search": { + "post": { + "tags": [ + "Knowledge bases" + ], + "summary": "Search Knowledge Base", + "description": "Search a knowledge base and return matching snippets or pages.", + "operationId": "search_knowledge_base_v1_knowledge_bases__knowledge_base_id__search_post", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "knowledge_base_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Unique knowledge base ID.", + "title": "Knowledge Base Id" + }, + "description": "Unique knowledge base ID." + }, + { + "name": "organization_id", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "description": "Organization scope for API keys that can access multiple organizations.", + "title": "Organization Id" + }, + "description": "Organization scope for API keys that can access multiple organizations." + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SearchKnowledgeBaseRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/KnowledgeBaseSearchResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.knowledgeBases.search('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', {\n query: 'x',\n top_k: 1,\n});\n\nconsole.log(response.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nknowledge_base = client.knowledge_bases.search(\n knowledge_base_id=\"knowledgeBaseId\",\n query=\"\",\n top_k=0,\n return_full_page=False,\n)\nprint(knowledge_base)" + } + ] + } + }, + "/v1/knowledge-bases/{knowledge_base_id}/documents": { + "post": { + "tags": [ + "Knowledge bases" + ], + "summary": "Add Document", + "description": "Add a document to a knowledge base using JSON text or multipart file upload.", + "operationId": "add_document_v1_knowledge_bases__knowledge_base_id__documents_post", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "knowledge_base_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Unique knowledge base ID.", + "title": "Knowledge Base Id" + }, + "description": "Unique knowledge base ID." + }, + { + "name": "organization_id", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "description": "Organization scope for API keys that can access multiple organizations.", + "title": "Organization Id" + }, + "description": "Organization scope for API keys that can access multiple organizations." + } + ], + "responses": { + "201": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentOperationResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "name": { + "description": "Unique document name.", + "minLength": 1, + "title": "Name", + "type": "string" + }, + "text": { + "description": "Text content to add to the document.", + "minLength": 1, + "title": "Text", + "type": "string" + }, + "folder": { + "anyOf": [ + { + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Folder path to add the document under.", + "title": "Folder" + } + }, + "required": [ + "name", + "text" + ], + "title": "AddDocumentRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "type": "object", + "required": [ + "name", + "file" + ], + "properties": { + "name": { + "type": "string", + "description": "Document name or path." + }, + "folder": { + "type": "string", + "description": "Folder path containing the document." + }, + "file": { + "type": "string", + "format": "binary", + "description": "Document file to upload." + } + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst document = await client.knowledgeBases.documents.create(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n { name: 'x', text: 'x' },\n);\n\nconsole.log(document.message);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ndocument = client.knowledge_bases.documents.create(\n knowledge_base_id=\"knowledgeBaseId\",\n name=\"\",\n text=\"\",\n)\nprint(document)" + } + ] + }, + "put": { + "tags": [ + "Knowledge bases" + ], + "summary": "Update Document", + "description": "Overwrite a knowledge base document using JSON text or multipart file upload.", + "operationId": "update_document_v1_knowledge_bases__knowledge_base_id__documents_put", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "knowledge_base_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Unique knowledge base ID.", + "title": "Knowledge Base Id" + }, + "description": "Unique knowledge base ID." + }, + { + "name": "organization_id", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "description": "Organization scope for API keys that can access multiple organizations.", + "title": "Organization Id" + }, + "description": "Organization scope for API keys that can access multiple organizations." + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentOperationResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "name": { + "description": "Document name or path to update.", + "minLength": 1, + "title": "Name", + "type": "string" + }, + "text": { + "description": "Replacement text content for the document.", + "minLength": 1, + "title": "Text", + "type": "string" + }, + "folder": { + "anyOf": [ + { + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Folder path containing the document.", + "title": "Folder" + } + }, + "required": [ + "name", + "text" + ], + "title": "UpdateDocumentRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "type": "object", + "required": [ + "name", + "file" + ], + "properties": { + "name": { + "type": "string", + "description": "Document name or path." + }, + "folder": { + "type": "string", + "description": "Folder path containing the document." + }, + "file": { + "type": "string", + "format": "binary", + "description": "Document file to upload." + } + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst document = await client.knowledgeBases.documents.update(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n { name: 'x', text: 'x' },\n);\n\nconsole.log(document.message);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ndocument = client.knowledge_bases.documents.update(\n knowledge_base_id=\"knowledgeBaseId\",\n name=\"\",\n text=\"\",\n)\nprint(document)" + } + ] + }, + "delete": { + "tags": [ + "Knowledge bases" + ], + "summary": "Delete Document", + "description": "Delete an existing document from a knowledge base.", + "operationId": "delete_document_v1_knowledge_bases__knowledge_base_id__documents_delete", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "knowledge_base_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Unique knowledge base ID.", + "title": "Knowledge Base Id" + }, + "description": "Unique knowledge base ID." + }, + { + "name": "organization_id", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "description": "Organization scope for API keys that can access multiple organizations.", + "title": "Organization Id" + }, + "description": "Organization scope for API keys that can access multiple organizations." + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteDocumentRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentOperationResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst document = await client.knowledgeBases.documents.delete(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n { name: 'x' },\n);\n\nconsole.log(document.message);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ndocument = client.knowledge_bases.documents.delete(\n knowledge_base_id=\"knowledgeBaseId\",\n name=\"\",\n)\nprint(document)" + } + ] + } + }, + "/v1/knowledge-bases/{knowledge_base_id}/folders": { + "post": { + "tags": [ + "Knowledge bases" + ], + "summary": "Add Folder", + "description": "Create an empty folder at the requested knowledge base path.", + "operationId": "add_folder_v1_knowledge_bases__knowledge_base_id__folders_post", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "knowledge_base_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Unique knowledge base ID.", + "title": "Knowledge Base Id" + }, + "description": "Unique knowledge base ID." + }, + { + "name": "organization_id", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "description": "Organization scope for API keys that can access multiple organizations.", + "title": "Organization Id" + }, + "description": "Organization scope for API keys that can access multiple organizations." + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddFolderRequest" + } + } + } + }, + "responses": { + "201": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FolderOperationResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst folder = await client.knowledgeBases.folders.create('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', {\n path: 'x',\n});\n\nconsole.log(folder.message);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nfolder = client.knowledge_bases.folders.create(\n knowledge_base_id=\"knowledgeBaseId\",\n path=\"\",\n)\nprint(folder)" + } + ] + }, + "delete": { + "tags": [ + "Knowledge bases" + ], + "summary": "Delete Folder", + "description": "Delete a folder. With recursive=false, non-empty folders return 409 and no contents are deleted.", + "operationId": "delete_folder_v1_knowledge_bases__knowledge_base_id__folders_delete", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "knowledge_base_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Unique knowledge base ID.", + "title": "Knowledge Base Id" + }, + "description": "Unique knowledge base ID." + }, + { + "name": "organization_id", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "description": "Organization scope for API keys that can access multiple organizations.", + "title": "Organization Id" + }, + "description": "Organization scope for API keys that can access multiple organizations." + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteFolderRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FolderOperationResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst folder = await client.knowledgeBases.folders.delete('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', {\n path: 'x',\n});\n\nconsole.log(folder.message);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nfolder = client.knowledge_bases.folders.delete(\n knowledge_base_id=\"knowledgeBaseId\",\n path=\"\",\n recursive=False,\n)\nprint(folder)" + } + ] + } + }, + "/v1/reports/query-fanouts": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Query Fanouts", + "operationId": "query_fanouts_v1_reports_query_fanouts_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QueryFanoutsQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Response" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst reportResponse = await client.reports.queryFanouts({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n metrics: ['fanouts_per_execution'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(reportResponse.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nquery_fanout = client.reports.query_fanouts.v1_reports_post(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nprint(query_fanout)" + } + ] + } + }, + "/v1/reports/shopping/visibility": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Shopping Visibility", + "operationId": "shopping_visibility_v1_reports_shopping_visibility_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingVisibilityQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingRowsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.shopping.visibility({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nshopping = client.reports.shopping.visibility(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n date_interval=\"day\",\n include_count=False,\n tag_filter_type=\"any\",\n include_no_tag=False,\n exclude_topic_ids=False,\n include_asset_only=False,\n rank_by=\"visibility_score\",\n include_position_frequency=False,\n)\nprint(shopping)" + } + ] + } + }, + "/v1/reports/shopping/item-visibility": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Shopping Item Visibility", + "operationId": "shopping_item_visibility_v1_reports_shopping_item_visibility_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingItemVisibilityQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingRowsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.shopping.itemVisibility({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nshopping = client.reports.shopping.item_visibility(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n date_interval=\"day\",\n include_count=False,\n tag_filter_type=\"any\",\n include_no_tag=False,\n exclude_topic_ids=False,\n merchant_filter_type=\"any\",\n include_competitors=False,\n competitor_limit=5,\n include_position_frequency=False,\n)\nprint(shopping)" + } + ] + } + }, + "/v1/reports/shopping/merchant-distribution": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Shopping Merchant Distribution", + "operationId": "shopping_merchant_distribution_v1_reports_shopping_merchant_distribution_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingMerchantDistributionQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingRowsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.shopping.merchantDistribution({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nshopping = client.reports.shopping.merchant_distribution(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n date_interval=\"day\",\n include_count=False,\n tag_filter_type=\"any\",\n include_no_tag=False,\n exclude_topic_ids=False,\n)\nprint(shopping)" + } + ] + } + }, + "/v1/reports/shopping/merchant-visibility-by-brand": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Shopping Merchant Visibility By Brand", + "operationId": "shopping_merchant_visibility_by_brand_v1_reports_shopping_merchant_visibility_by_brand_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingMerchantVisibilityByBrandQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingRowsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.shopping.merchantVisibilityByBrand({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nshopping = client.reports.shopping.merchant_visibility_by_brand(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n date_interval=\"day\",\n include_count=False,\n tag_filter_type=\"any\",\n include_no_tag=False,\n exclude_topic_ids=False,\n include_brand_only=False,\n)\nprint(shopping)" + } + ] + } + }, + "/v1/reports/shopping/merchant-by-items": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Shopping Merchant By Items", + "operationId": "shopping_merchant_by_items_v1_reports_shopping_merchant_by_items_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingMerchantByItemsQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingRowsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.shopping.merchantByItems({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nshopping = client.reports.shopping.merchant_by_items(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n date_interval=\"day\",\n include_count=False,\n tag_filter_type=\"any\",\n include_no_tag=False,\n exclude_topic_ids=False,\n)\nprint(shopping)" + } + ] + } + }, + "/v1/reports/shopping/all-items-with-merchants": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Shopping All Items With Merchants", + "operationId": "shopping_all_items_with_merchants_v1_reports_shopping_all_items_with_merchants_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingAllItemsWithMerchantsQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingRowsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.shopping.allItemsWithMerchants({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nshopping = client.reports.shopping.all_items_with_merchants(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n date_interval=\"day\",\n include_count=False,\n tag_filter_type=\"any\",\n include_no_tag=False,\n exclude_topic_ids=False,\n merchant_filter_type=\"any\",\n rank_by=\"visibility\",\n sort_order=\"desc\",\n)\nprint(shopping)" + } + ] + } + }, + "/v1/reports/shopping/trigger-rate": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Shopping Trigger Rate", + "operationId": "shopping_trigger_rate_v1_reports_shopping_trigger_rate_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingTriggerRateQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingRowsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.shopping.triggerRate({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nshopping = client.reports.shopping.trigger_rate(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n date_interval=\"day\",\n include_count=False,\n tag_filter_type=\"any\",\n include_no_tag=False,\n exclude_topic_ids=False,\n)\nprint(shopping)" + } + ] + } + }, + "/v1/reports/shopping/merchant-share": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Shopping Merchant Share", + "operationId": "shopping_merchant_share_v1_reports_shopping_merchant_share_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingMerchantShareQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingRowsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.shopping.merchantShare({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nshopping = client.reports.shopping.merchant_share(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n date_interval=\"day\",\n include_count=False,\n tag_filter_type=\"any\",\n include_no_tag=False,\n exclude_topic_ids=False,\n)\nprint(shopping)" + } + ] + } + }, + "/v1/reports/shopping/product-merchant-urls": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Shopping Product Merchant Urls", + "operationId": "shopping_product_merchant_urls_v1_reports_shopping_product_merchant_urls_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingProductMerchantUrlsQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingRowsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.shopping.productMerchantURLs({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n product_names: ['string'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nshopping = client.reports.shopping.product_merchant_urls(\n category_id=\"\",\n product_names=[],\n start_date=\"\",\n end_date=\"\",\n)\nprint(shopping)" + } + ] + } + }, + "/v1/reports/shopping/executions": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Shopping Executions", + "operationId": "shopping_executions_v1_reports_shopping_executions_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingExecutionsQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingRowsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.shopping.executions({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nshopping = client.reports.shopping.executions(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n date_interval=\"day\",\n include_count=False,\n tag_filter_type=\"any\",\n include_no_tag=False,\n exclude_topic_ids=False,\n analysis_filter_type=\"any\",\n)\nprint(shopping)" + } + ] + } + }, + "/v1/agents": { + "get": { + "tags": [ + "Agents" + ], + "summary": "List agents", + "description": "List agents available to your organization.\n\nAgent status reflects whether an agent has ever been published. `published`\nagents have a live published version. `draft` agents have not been\npublished yet.", + "operationId": "list_agents_v1_agents_get", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "statuses", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/components/schemas/ListAgentsStatusFilter" + } + }, + { + "type": "null" + } + ], + "description": "Optional status filter. Use `published` to list agents that have a live published version, or `draft` to list agents that have not been published yet. Defaults to `published`.", + "title": "Statuses" + }, + "description": "Optional status filter. Use `published` to list agents that have a live published version, or `draft` to list agents that have not been published yet. Defaults to `published`." + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 100, + "exclusiveMinimum": 0, + "default": 100, + "title": "Limit" + } + }, + { + "name": "next_cursor", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Cursor" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListAgentsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst agents = await client.agents.list();\n\nconsole.log(agents.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nagent = client.agents.list(\n limit=100,\n)\nprint(agent)" + } + ] + }, + "post": { + "tags": [ + "Agents" + ], + "summary": "Create an agent", + "description": "Create a new draft agent owned by the given organization.\n\n`organization_id` is required and you must be a member of it. The agent is created\nas a `draft`; publish it with `POST /v1/agents/{agent_id}/publish` once its graph\nis ready.", + "operationId": "create_agent_v1_agents_post", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateAgentRequest", + "description": "The agent to create." + } + } + } + }, + "responses": { + "201": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Agent" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst agent = await client.agents.create({\n name: 'x',\n organization_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n});\n\nconsole.log(agent.id);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nagent = client.agents.create_v1_post(\n organization_id=\"\",\n name=\"\",\n)\nprint(agent)" + } + ] + } + }, + "/v1/agents/{agent_id}/publish": { + "post": { + "tags": [ + "Agents" + ], + "summary": "Publish an agent", + "description": "Publish an agent's latest draft as its live published version.\n\nYou must be a member of the agent's organization. Publishing promotes the current\ndraft graph to a new published version. A draft that cannot produce its declared\ninput/output contract is rejected with `422` and is not published.", + "operationId": "publish_agent_v1_agents__agent_id__publish_post", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "agent_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "The ID of the agent to publish.", + "title": "Agent Id" + }, + "description": "The ID of the agent to publish." + } + ], + "responses": { + "201": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Agent" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.publish('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');\n\nconsole.log(response.id);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nagent = client.agents.publish_v1_id_publish_post(\n agent_id=\"agentId\",\n)\nprint(agent)" + } + ] + } + }, + "/v1/agents/node-types": { + "get": { + "tags": [ + "Agents" + ], + "summary": "List node types", + "description": "List the node types available for building agents.\n\nThe set is deterministic and does not depend on the caller, so the response\nis safe to cache across sessions. Integration-dependent and dynamic-schema\nnode types are intentionally excluded in v1.", + "operationId": "list_node_types_v1_agents_node_types_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListNodeTypesResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst nodeTypes = await client.agents.nodeTypes.list();\n\nconsole.log(nodeTypes.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nnode_type = client.agents.node_types.list_v1_agents_get()\nprint(node_type)" + } + ] + } + }, + "/v1/agents/node-types/{node_type}/schema": { + "get": { + "tags": [ + "Agents" + ], + "summary": "Get a node type schema", + "description": "Retrieve the JSON schema and worked examples for a single node type.\n\nThe `schema` field is an opaque JSON Schema for the node's configuration.\nUse `schema_version` as a cache key — it bumps whenever the schema changes.", + "operationId": "get_node_type_schema_v1_agents_node_types__node_type__schema_get", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "node_type", + "in": "path", + "required": true, + "schema": { + "type": "string", + "description": "The node type to fetch the schema for, e.g. `llm`.", + "title": "Node Type" + }, + "description": "The node type to fetch the schema for, e.g. `llm`." + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NodeSchemaResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.nodeTypes.retrieveSchema('node_type');\n\nconsole.log(response.node_type);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nnode_type = client.agents.node_types.list_schema_v1_agents_schema_get(\n node_type=\"nodeType\",\n)\nprint(node_type)" + } + ] + } + }, + "/v1/agents/{agent_id}": { + "get": { + "tags": [ + "Agents" + ], + "summary": "Get an agent", + "description": "Retrieve an agent and its schema details.\n\nAgents can have both a live published version and a draft version with newer\nunpublished changes. Use the `version` parameter to choose which state to return.", + "operationId": "get_agent_v1_agents__agent_id__get", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "agent_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "The ID of the agent to retrieve.", + "title": "Agent Id" + }, + "description": "The ID of the agent to retrieve." + }, + { + "name": "version", + "in": "query", + "required": false, + "schema": { + "$ref": "#/components/schemas/AgentVersion", + "description": "Version of the agent to retrieve. Use `published` for the live version, or `draft` for the latest unpublished changes for the same agent. Defaults to `published`." + }, + "description": "Version of the agent to retrieve. Use `published` for the live version, or `draft` for the latest unpublished changes for the same agent. Defaults to `published`." + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentDetail" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst agent = await client.agents.retrieve('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');\n\nconsole.log(agent.id);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nagent = client.agents.retrieve(\n agent_id=\"agentId\",\n)\nprint(agent)" + } + ] + }, + "patch": { + "tags": [ + "Agents" + ], + "summary": "Update an agent", + "description": "Update an agent's draft graph in place.\n\nYou must be a member of the agent's organization. The agent's draft is replaced with the\nsupplied graph and re-validated, so you can iterate one draft — create, then update per\nfix — instead of creating a new agent on every change. The response carries the updated\n`validation`; publish with `POST /v1/agents/{agent_id}/publish` once `validation.valid`.", + "operationId": "update_agent_v1_agents__agent_id__patch", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "agent_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "The ID of the agent to update.", + "title": "Agent Id" + }, + "description": "The ID of the agent to update." + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateAgentRequest", + "description": "The new draft graph for the agent." + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentDetail" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst agent = await client.agents.update('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', {\n graph: { foo: 'bar' },\n});\n\nconsole.log(agent.id);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nagent = client.agents.update_v1_id_patch(\n agent_id=\"agentId\",\n graph={},\n)\nprint(agent)" + } + ] + } + }, + "/v1/agents/{agent_id}/graph": { + "get": { + "tags": [ + "Agents" + ], + "summary": "Get an agent's graph", + "description": "Retrieve an agent's full workflow graph (`{nodes, edges}`).\n\nThe graph is returned verbatim in the canonical dialect — the same shape `POST /v1/agents`\nand `PATCH /v1/agents/{agent_id}` accept — so a known-good agent can be read back, copied,\nand edited. Tool-backed nodes appear in their lowered `tool` form rather than the friendly\nv1 node types. A `draft` is visible only to its creator; the `published` version is visible\nacross its organization.", + "operationId": "get_agent_graph_v1_agents__agent_id__graph_get", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "agent_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "The ID of the agent whose graph to retrieve.", + "title": "Agent Id" + }, + "description": "The ID of the agent whose graph to retrieve." + }, + { + "name": "version", + "in": "query", + "required": false, + "schema": { + "$ref": "#/components/schemas/AgentVersion", + "description": "Version of the agent whose graph to retrieve. Use `published` for the live version, or `draft` for the latest unpublished changes. Defaults to `published`." + }, + "description": "Version of the agent whose graph to retrieve. Use `published` for the live version, or `draft` for the latest unpublished changes. Defaults to `published`." + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentGraph" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.retrieveGraph('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');\n\nconsole.log(response.agent_id);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nagent = client.agents.list_graph_v1_graph_get(\n agent_id=\"agentId\",\n)\nprint(agent)" + } + ] + } + }, + "/v1/agents/{agent_id}/runs": { + "post": { + "tags": [ + "Agents" + ], + "summary": "Run an agent", + "description": "Start a new run for an agent.\n\nRuns always execute the agent's live published version, so the agent must be\npublished first with `POST /v1/agents/{agent_id}/publish`. Unpublished drafts\ncannot be run.", + "operationId": "run_agent_v1_agents__agent_id__runs_post", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "agent_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "The ID of the agent to run.", + "title": "Agent Id" + }, + "description": "The ID of the agent to run." + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/RunAgentRequest" + }, + { + "type": "null" + } + ], + "description": "Inputs to send to the agent run.", + "title": "Request" + } + } + } + }, + "responses": { + "202": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AcceptedAgentRun" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst run = await client.agents.runs.create('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');\n\nconsole.log(run.id);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nrun = client.agents.runs.create(\n agent_id=\"agentId\",\n)\nprint(run)" + } + ] + } + }, + "/v1/agents/{agent_id}/runs/{run_id}": { + "get": { + "tags": [ + "Agents" + ], + "summary": "Get an agent run", + "description": "Retrieve the current status and result details for an agent run.", + "operationId": "get_agent_run_v1_agents__agent_id__runs__run_id__get", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "agent_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "The ID of the agent that owns the run.", + "title": "Agent Id" + }, + "description": "The ID of the agent that owns the run." + }, + { + "name": "run_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "The ID of the run to retrieve.", + "title": "Run Id" + }, + "description": "The ID of the run to retrieve." + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentRun" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst run = await client.agents.runs.retrieve('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', {\n agent_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n});\n\nconsole.log(run.id);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nrun = client.agents.runs.retrieve(\n agent_id=\"agentId\",\n run_id=\"runId\",\n)\nprint(run)" + } + ] + } + }, + "/v1/reports/accuracy/overview": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Accuracy Overview", + "operationId": "accuracy_overview_v1_reports_accuracy_overview_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccuracyOverviewQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccuracyOverviewResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.accuracy.createOverview({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response.overallAccuracy);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\naccuracy = client.reports.accuracy.overview_v1_reports_overview_post(\n start_date=\"\",\n end_date=\"\",\n category_id=\"\",\n exclude_topic_ids=False,\n tag_filter_type=\"any\",\n include_no_tag=True,\n include_no_persona=True,\n group_by=\"period\",\n)\nprint(accuracy)" + } + ] + } + }, + "/v1/reports/accuracy/breakdown": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Accuracy Breakdown", + "operationId": "accuracy_breakdown_v1_reports_accuracy_breakdown_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccuracyBreakdownQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccuracyBreakdownResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.accuracy.createBreakdown({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\naccuracy = client.reports.accuracy.breakdown_v1_reports_breakdown_post(\n start_date=\"\",\n end_date=\"\",\n category_id=\"\",\n exclude_topic_ids=False,\n tag_filter_type=\"any\",\n include_no_tag=True,\n include_no_persona=True,\n breakdown_by=\"citation\",\n limit=10,\n offset=0,\n sort_by=\"citationShare\",\n sort_order=\"desc\",\n)\nprint(accuracy)" + } + ] + } + }, + "/v1/reports/accuracy/citation-analysis": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Accuracy Citation Analysis", + "operationId": "accuracy_citation_analysis_v1_reports_accuracy_citation_analysis_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccuracyCitationAnalysisQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccuracyCitationAnalysisResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.accuracy.createCitationAnalysis({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n clean_href: 'clean_href',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response.domain);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\naccuracy = client.reports.accuracy.citation_analysis_v1_reports_citation_analysis_post(\n category_id=\"\",\n clean_href=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nprint(accuracy)" + } + ] + } + }, + "/v1/reports/accuracy/topic-ids": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Accuracy Topic Ids", + "operationId": "accuracy_topic_ids_v1_reports_accuracy_topic_ids_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccuracyTopicIdsQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Response Accuracy Topic Ids V1 Reports Accuracy Topic Ids Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.accuracy.createTopicIDs({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\naccuracy = client.reports.accuracy.topic_ids_v1_reports_topic_ids_post(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nprint(accuracy)" + } + ] + } + }, + "/v1/reports/accuracy/inaccurate-themes": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Accuracy Inaccurate Themes", + "operationId": "accuracy_inaccurate_themes_v1_reports_accuracy_inaccurate_themes_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InaccurateThemesQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InaccurateThemesResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.accuracy.createInaccurateThemes({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\naccuracy = client.reports.accuracy.inaccurate_themes_v1_reports_inaccurate_themes_post(\n start_date=\"\",\n end_date=\"\",\n category_id=\"\",\n exclude_topic_ids=False,\n tag_filter_type=\"any\",\n include_no_tag=True,\n include_no_persona=True,\n limit=10,\n offset=0,\n sort_by=\"response_share\",\n sort_order=\"desc\",\n)\nprint(accuracy)" + } + ] + } + }, + "/v1/reports/accuracy/inaccurate-clusters": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Accuracy Inaccurate Clusters", + "operationId": "accuracy_inaccurate_clusters_v1_reports_accuracy_inaccurate_clusters_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InaccurateClustersQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InaccurateClustersResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.accuracy.createInaccurateClusters({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: 'end_date',\n start_date: 'start_date',\n theme_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n});\n\nconsole.log(response.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\naccuracy = client.reports.accuracy.inaccurate_clusters_v1_reports_inaccurate_clusters_post(\n start_date=\"\",\n end_date=\"\",\n category_id=\"\",\n exclude_topic_ids=False,\n tag_filter_type=\"any\",\n include_no_tag=True,\n include_no_persona=True,\n theme_id=\"\",\n limit=5000,\n offset=0,\n)\nprint(accuracy)" + } + ] + } + }, + "/v1/reports/accuracy/inaccuracy-drivers": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Accuracy Inaccuracy Drivers", + "operationId": "accuracy_inaccuracy_drivers_v1_reports_accuracy_inaccuracy_drivers_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InaccuracyDriversQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InaccuracyDriversResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.accuracy.createInaccuracyDrivers({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\naccuracy = client.reports.accuracy.inaccuracy_drivers_v1_reports_inaccuracy_drivers_post(\n start_date=\"\",\n end_date=\"\",\n category_id=\"\",\n exclude_topic_ids=False,\n tag_filter_type=\"any\",\n include_no_tag=True,\n include_no_persona=True,\n limit=5,\n)\nprint(accuracy)" + } + ] + } + }, + "/v1/reports/accuracy/top-inaccurate-claims": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Accuracy Top Inaccurate Claims", + "operationId": "accuracy_top_inaccurate_claims_v1_reports_accuracy_top_inaccurate_claims_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TopInaccurateClaimsQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TopInaccurateClaimsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.accuracy.createTopInaccurateClaims({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\naccuracy = client.reports.accuracy.top_inaccurate_claims_v1_reports_top_inaccurate_claims_post(\n start_date=\"\",\n end_date=\"\",\n category_id=\"\",\n exclude_topic_ids=False,\n tag_filter_type=\"any\",\n include_no_tag=True,\n include_no_persona=True,\n limit=5,\n)\nprint(accuracy)" + } + ] + } + }, + "/v1/reports/accuracy/claim-breakdown": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Accuracy Claim Breakdown", + "operationId": "accuracy_claim_breakdown_v1_reports_accuracy_claim_breakdown_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ClaimBreakdownQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ClaimBreakdownResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.accuracy.createClaimBreakdown({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n cluster_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response.platform);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\naccuracy = client.reports.accuracy.claim_breakdown_v1_reports_claim_breakdown_post(\n start_date=\"\",\n end_date=\"\",\n category_id=\"\",\n exclude_topic_ids=False,\n tag_filter_type=\"any\",\n include_no_tag=True,\n include_no_persona=True,\n cluster_id=\"\",\n)\nprint(accuracy)" + } + ] + } + }, + "/v1/reports/accuracy/claim-citations": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Accuracy Claim Citations", + "operationId": "accuracy_claim_citations_v1_reports_accuracy_claim_citations_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ClaimCitationsQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ClaimCitationsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.accuracy.createClaimCitations({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n cluster_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\naccuracy = client.reports.accuracy.claim_citations_v1_reports_claim_citations_post(\n start_date=\"\",\n end_date=\"\",\n category_id=\"\",\n exclude_topic_ids=False,\n tag_filter_type=\"any\",\n include_no_tag=True,\n include_no_persona=True,\n cluster_id=\"\",\n limit=10,\n offset=0,\n sort_order=\"desc\",\n)\nprint(accuracy)" + } + ] + } + }, + "/v1/reports/accuracy/cluster-example-runs": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Accuracy Cluster Example Runs", + "operationId": "accuracy_cluster_example_runs_v1_reports_accuracy_cluster_example_runs_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ClusterExampleRunsQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ClusterExampleRunsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.accuracy.createClusterExampleRuns({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n cluster_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\naccuracy = client.reports.accuracy.cluster_example_runs_v1_reports_cluster_example_runs_post(\n category_id=\"\",\n cluster_id=\"\",\n start_date=\"\",\n end_date=\"\",\n limit=20,\n offset=0,\n)\nprint(accuracy)" + } + ] + } + }, + "/v1/reports/accuracy/cluster-verification-pairs": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Accuracy Cluster Verification Pairs", + "operationId": "accuracy_cluster_verification_pairs_v1_reports_accuracy_cluster_verification_pairs_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ClusterVerificationPairsQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ClusterVerificationPairsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.accuracy.createClusterVerificationPairs({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n cluster_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n});\n\nconsole.log(response.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\naccuracy = client.reports.accuracy.cluster_verification_pairs_v1_reports_cluster_verification_pairs_post(\n category_id=\"\",\n cluster_id=\"\",\n)\nprint(accuracy)" + } + ] + } + }, + "/v1/reports/accuracy/factcheck-setup-status": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Accuracy Factcheck Setup Status", + "operationId": "accuracy_factcheck_setup_status_v1_reports_accuracy_factcheck_setup_status_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FactCheckSetupStatusQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FactCheckSetupStatusResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.accuracy.createFactcheckSetupStatus({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n});\n\nconsole.log(response.activeAccuracyPromptCount);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\naccuracy = client.reports.accuracy.factcheck_setup_status_v1_reports_factcheck_setup_status_post(\n category_id=\"\",\n)\nprint(accuracy)" + } + ] + } + }, + "/v2/reports/referrals": { + "post": { + "tags": [ + "Reports", + "Human Referrals" + ], + "summary": "Get Referrals Report V2", + "description": "Get referral traffic report from the hourly aggregated materialized view (UTC-based).\n\nSupports date_interval=\"hour\", calendar intervals through \"year\", \"quarter\", and \"relative_week\".", + "operationId": "get_referrals_report_v2_v2_reports_referrals_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReferralsQueryV2" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Response" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst reportResponse = await client.reports.getReferralsReportV2({\n domain: 'domain',\n metrics: ['visits'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(reportResponse.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nreferral = client.reports.referrals.create_report_v2_v2_reports_post(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n domain=\"\",\n start_date=\"\",\n)\nprint(referral)" + } + ] + } + }, + "/v2/reports/bots": { + "post": { + "tags": [ + "Reports", + "Bot Traffic Reports" + ], + "summary": "Get Bots Report V2", + "description": "Get bot traffic report from the hourly aggregated materialized view (UTC-based).\n\nSupports date_interval=\"hour\", calendar intervals through \"year\", \"quarter\", and \"relative_week\".\n\nMetrics:\n- count: unique bot visits\n- citations: unique citation events (ai_assistant bot type)\n- indexing: unique indexing events (index bot type)\n- training: unique training events (ai_training bot type)\n- last_visit: most recent visit timestamp\n\nDimensions:\n- date, path, bot_name, bot_provider, bot_type", + "operationId": "get_bots_report_v2_v2_reports_bots_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BotsReportQueryV2" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Response" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst reportResponse = await client.reports.getBotsReportV2({\n domain: 'domain',\n metrics: ['count'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(reportResponse.data);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nbot = client.reports.bots.create_report_v2_v2_reports_post(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n domain=\"\",\n start_date=\"\",\n)\nprint(bot)" + } + ] + } + }, + "/v2/reports/visibility": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Query Visibility V2", + "operationId": "query_visibility_v2_v2_reports_visibility_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VisibilityV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Query Visibility V2 V2 Reports Visibility Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.queryVisibility({\n category_id: 'category_id',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nvisibility = client.reports.visibility.query_v2_v2_reports_post(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n interval=\"day\",\n scope=\"owned\",\n)\nprint(visibility)" + } + ] + } + }, + "/v2/reports/visibility/stream": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Stream Visibility V2", + "operationId": "stream_visibility_v2_v2_reports_visibility_stream_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VisibilityV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "text/event-stream": {} + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nawait client.reports.streamVisibilityV2({\n category_id: 'category_id',\n end_date: 'end_date',\n start_date: 'start_date',\n});" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nstream = client.reports.visibility.stream_v2_v2_reports_stream_post(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n interval=\"day\",\n scope=\"owned\",\n)\nfor event in stream:\n print(event)" + } + ] + } + }, + "/v2/reports/citations": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Query Citations V2", + "operationId": "query_citations_v2_v2_reports_citations_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CitationsV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Query Citations V2 V2 Reports Citations Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.queryCitations({\n category_id: 'category_id',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ncitation = client.reports.citations.query_v2_v2_reports_post(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n interval=\"day\",\n scope=\"all\",\n)\nprint(citation)" + } + ] + } + }, + "/v2/reports/citations/stream": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Stream Citations V2", + "operationId": "stream_citations_v2_v2_reports_citations_stream_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CitationsV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "text/event-stream": {} + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nawait client.reports.streamCitationsV2({\n category_id: 'category_id',\n end_date: 'end_date',\n start_date: 'start_date',\n});" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nstream = client.reports.citations.stream_v2_v2_reports_stream_post(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n interval=\"day\",\n scope=\"all\",\n)\nfor event in stream:\n print(event)" + } + ] + } + }, + "/v2/reports/sentiment": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Query Sentiment V2", + "operationId": "query_sentiment_v2_v2_reports_sentiment_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SentimentV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Query Sentiment V2 V2 Reports Sentiment Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.querySentiment({\n asset: 'asset',\n category_id: 'category_id',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nsentiment = client.reports.sentiment.query_v2_v2_reports_post(\n category_id=\"\",\n asset=\"\",\n start_date=\"\",\n end_date=\"\",\n interval=\"day\",\n include_cited_websites=False,\n)\nprint(sentiment)" + } + ] + } + }, + "/v2/reports/sentiment/stream": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Stream Sentiment V2", + "operationId": "stream_sentiment_v2_v2_reports_sentiment_stream_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SentimentV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "text/event-stream": {} + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nawait client.reports.streamSentimentV2({\n asset: 'asset',\n category_id: 'category_id',\n end_date: 'end_date',\n start_date: 'start_date',\n});" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nstream = client.reports.sentiment.stream_v2_v2_reports_stream_post(\n category_id=\"\",\n asset=\"\",\n start_date=\"\",\n end_date=\"\",\n interval=\"day\",\n include_cited_websites=False,\n)\nfor event in stream:\n print(event)" + } + ] + } + }, + "/v2/reports/query-fanouts": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Query Fanouts V2", + "operationId": "query_fanouts_v2_v2_reports_query_fanouts_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QueryFanoutsV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Query Fanouts V2 V2 Reports Query Fanouts Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.queryQueryFanouts({\n category_id: 'category_id',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nquery_fanout = client.reports.query_fanouts.v2_v2_reports_post(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n interval=\"day\",\n)\nprint(query_fanout)" + } + ] + } + }, + "/v2/reports/query-fanouts/stream": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Stream Query Fanouts V2", + "operationId": "stream_query_fanouts_v2_v2_reports_query_fanouts_stream_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QueryFanoutsV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "text/event-stream": {} + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nawait client.reports.streamQueryFanouts({\n category_id: 'category_id',\n end_date: 'end_date',\n start_date: 'start_date',\n});" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nstream = client.reports.query_fanouts.stream_v2_v2_reports_stream_post(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n interval=\"day\",\n)\nfor event in stream:\n print(event)" + } + ] + } + }, + "/v2/prompts/answers": { + "post": { + "tags": [ + "Prompts" + ], + "summary": "Query Answers V2", + "operationId": "query_answers_v2_v2_prompts_answers_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnswersV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Query Answers V2 V2 Prompts Answers Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.prompts.answersV2({\n category_id: 'category_id',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response);" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nanswer = client.prompts.answers.query_v2_v2_prompts_post(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nprint(answer)" + } + ] + } + }, + "/v2/prompts/answers/stream": { + "post": { + "tags": [ + "Prompts" + ], + "summary": "Stream Answers V2", + "operationId": "stream_answers_v2_v2_prompts_answers_stream_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnswersV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "text/event-stream": {} + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "JavaScript", + "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nawait client.prompts.streamAnswersV2({\n category_id: 'category_id',\n end_date: 'end_date',\n start_date: 'start_date',\n});" + }, + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nstream = client.prompts.answers.stream_v2_v2_prompts_stream_post(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nfor event in stream:\n print(event)" + } + ] + } + } + }, + "components": { + "schemas": { + "AEOScore": { + "properties": { + "target_zone": { + "$ref": "#/components/schemas/AEOScoreTargetZone" + }, + "value": { + "type": "number", + "title": "Value" + } + }, + "type": "object", + "required": [ + "target_zone", + "value" + ], + "title": "AEOScore" + }, + "AEOScoreTargetZone": { + "properties": { + "low": { + "type": "number", + "title": "Low" + }, + "high": { + "type": "number", + "title": "High" + } + }, + "type": "object", + "required": [ + "low", + "high" + ], + "title": "AEOScoreTargetZone" + }, + "AcceptedAgentRun": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id", + "description": "Unique ID for the accepted run." + }, + "agent_id": { + "type": "string", + "format": "uuid", + "title": "Agent Id", + "description": "Unique ID of the agent for this run." + }, + "status": { + "$ref": "#/components/schemas/AgentRunStatus", + "description": "Initial status of the accepted run." + }, + "started_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Started At", + "description": "When the run started, if execution began immediately." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "id", + "agent_id", + "status" + ], + "title": "AcceptedAgentRun", + "description": "Run details returned after a run request is accepted." + }, + "AccuracyBreakdownQuery": { + "properties": { + "start_date": { + "type": "string", + "title": "Start Date" + }, + "end_date": { + "type": "string", + "title": "End Date" + }, + "comparison_start_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison Start Date" + }, + "comparison_end_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison End Date" + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "topic_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Topic Ids" + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "tag_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Tag Ids" + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "all", + "any" + ], + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": true + }, + "region_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Region Ids" + }, + "platform_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Platform Ids" + }, + "persona_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Persona Ids" + }, + "include_no_persona": { + "type": "boolean", + "title": "Include No Persona", + "default": true + }, + "prompt_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Prompt Ids" + }, + "citation_categories": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Citation Categories" + }, + "breakdown_by": { + "type": "string", + "enum": [ + "citation", + "platform", + "topic", + "prompt", + "tag", + "region", + "persona" + ], + "title": "Breakdown By", + "default": "citation" + }, + "limit": { + "type": "integer", + "minimum": 1, + "title": "Limit", + "default": 10 + }, + "offset": { + "type": "integer", + "minimum": 0, + "title": "Offset", + "default": 0 + }, + "search_query": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Search Query" + }, + "sort_by": { + "type": "string", + "enum": [ + "citationShare", + "accuracy" + ], + "title": "Sort By", + "default": "citationShare" + }, + "sort_order": { + "type": "string", + "enum": [ + "asc", + "desc" + ], + "title": "Sort Order", + "default": "desc" + } + }, + "type": "object", + "required": [ + "start_date", + "end_date", + "category_id" + ], + "title": "AccuracyBreakdownQuery" + }, + "AccuracyBreakdownResponse": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/AccuracyBreakdownRow" + }, + "type": "array", + "title": "Data" + }, + "totalCount": { + "type": "integer", + "title": "Totalcount" + } + }, + "type": "object", + "required": [ + "data", + "totalCount" + ], + "title": "AccuracyBreakdownResponse" + }, + "AccuracyBreakdownRow": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + }, + "share": { + "type": "number", + "title": "Share" + }, + "shareChange": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Sharechange" + }, + "responseAccuracy": { + "type": "number", + "title": "Responseaccuracy" + }, + "accuracyChange": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Accuracychange" + }, + "inaccurateCount": { + "type": "integer", + "title": "Inaccuratecount" + }, + "inaccurateCountChange": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Inaccuratecountchange" + }, + "promptCount": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Promptcount" + }, + "citationCategory": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Citationcategory" + } + }, + "type": "object", + "required": [ + "id", + "name", + "share", + "responseAccuracy", + "inaccurateCount" + ], + "title": "AccuracyBreakdownRow" + }, + "AccuracyCitationAnalysisQuery": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "clean_href": { + "type": "string", + "title": "Clean Href" + }, + "start_date": { + "type": "string", + "title": "Start Date" + }, + "end_date": { + "type": "string", + "title": "End Date" + } + }, + "type": "object", + "required": [ + "category_id", + "clean_href", + "start_date", + "end_date" + ], + "title": "AccuracyCitationAnalysisQuery" + }, + "AccuracyCitationAnalysisResponse": { + "properties": { + "href": { + "type": "string", + "title": "Href" + }, + "domain": { + "type": "string", + "title": "Domain" + }, + "pageTitle": { + "type": "string", + "title": "Pagetitle" + }, + "markdownContent": { + "type": "string", + "title": "Markdowncontent" + }, + "claims": { + "items": { + "$ref": "#/components/schemas/AccuracyCitationClaim" + }, + "type": "array", + "title": "Claims" + } + }, + "type": "object", + "required": [ + "href", + "domain", + "pageTitle", + "markdownContent" + ], + "title": "AccuracyCitationAnalysisResponse" + }, + "AccuracyCitationClaim": { + "properties": { + "claimId": { + "type": "string", + "title": "Claimid" + }, + "claim": { + "type": "string", + "title": "Claim" + }, + "attributeId": { + "type": "string", + "title": "Attributeid" + }, + "attribute": { + "type": "string", + "title": "Attribute" + }, + "neutralThemeId": { + "type": "string", + "title": "Neutralthemeid" + }, + "neutralTheme": { + "type": "string", + "title": "Neutraltheme" + }, + "snippet": { + "type": "string", + "title": "Snippet" + }, + "polarity": { + "type": "string", + "enum": [ + "positive", + "negative" + ], + "title": "Polarity", + "default": "negative" + }, + "kbPath": { + "type": "string", + "title": "Kbpath", + "default": "" + }, + "kbSnippet": { + "type": "string", + "title": "Kbsnippet", + "default": "" + }, + "reasoning": { + "type": "string", + "title": "Reasoning", + "default": "" + }, + "evidence": { + "items": { + "$ref": "#/components/schemas/AccuracyCitationEvidence" + }, + "type": "array", + "title": "Evidence" + } + }, + "type": "object", + "required": [ + "claimId", + "claim", + "attributeId", + "attribute", + "neutralThemeId", + "neutralTheme", + "snippet" + ], + "title": "AccuracyCitationClaim", + "description": "A single inaccurate claim mapped to a cluster, surfaced on a cited page.\n\n``attribute`` carries the cluster's canonical claim so the drawer can group\nclaims the same way it groups sentiment attributes.\n\n``reasoning`` and ``evidence`` mirror the cluster's FactCheck verdict: the\n\"why it's inaccurate\" explanation plus the refuting knowledge-base snippets\nsurfaced in the Claim Analysis drawer. ``kb_path``/``kb_snippet`` are retained\nas the cluster's single representative snippet for backward compatibility." + }, + "AccuracyCitationEvidence": { + "properties": { + "kbName": { + "type": "string", + "title": "Kbname", + "default": "" + }, + "kbPath": { + "type": "string", + "title": "Kbpath", + "default": "" + }, + "kbSnippet": { + "type": "string", + "title": "Kbsnippet", + "default": "" + } + }, + "type": "object", + "title": "AccuracyCitationEvidence", + "description": "A single knowledge-base ground-truth snippet that refutes a claim's cluster.\n\n``kb_name`` is the official knowledge base name; ``kb_path`` is the document\npath within that knowledge base. ``kb_name`` is populated by the external API\nlayer (which can reach the knowledge-base service) and defaults to ``\"\"``\nelsewhere." + }, + "AccuracyOverviewQuery": { + "properties": { + "start_date": { + "type": "string", + "title": "Start Date" + }, + "end_date": { + "type": "string", + "title": "End Date" + }, + "comparison_start_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison Start Date" + }, + "comparison_end_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison End Date" + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "topic_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Topic Ids" + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "tag_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Tag Ids" + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "all", + "any" + ], + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": true + }, + "region_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Region Ids" + }, + "platform_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Platform Ids" + }, + "persona_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Persona Ids" + }, + "include_no_persona": { + "type": "boolean", + "title": "Include No Persona", + "default": true + }, + "prompt_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Prompt Ids" + }, + "citation_categories": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Citation Categories" + }, + "date_bucket": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Date Bucket" + }, + "group_by": { + "type": "string", + "enum": [ + "period", + "theme" + ], + "title": "Group By", + "default": "period" + } + }, + "type": "object", + "required": [ + "start_date", + "end_date", + "category_id" + ], + "title": "AccuracyOverviewQuery" + }, + "AccuracyOverviewResponse": { + "properties": { + "trendByPeriod": { + "items": { + "$ref": "#/components/schemas/AccuracyTrendPoint" + }, + "type": "array", + "title": "Trendbyperiod" + }, + "overallAccuracy": { + "type": "number", + "title": "Overallaccuracy" + }, + "accuracyChange": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Accuracychange" + }, + "scoreBreakdown": { + "items": { + "$ref": "#/components/schemas/AccuracyScoreBreakdown" + }, + "type": "array", + "title": "Scorebreakdown" + }, + "themeTrend": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/AccuracyThemeTrendSeries" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Themetrend" + }, + "availableSeries": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/AccuracyTrendSeriesMeta" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Availableseries" + } + }, + "type": "object", + "required": [ + "trendByPeriod", + "overallAccuracy", + "scoreBreakdown" + ], + "title": "AccuracyOverviewResponse" + }, + "AccuracyScoreBreakdown": { + "properties": { + "status": { + "type": "string", + "title": "Status" + }, + "count": { + "type": "integer", + "title": "Count" + }, + "share": { + "type": "number", + "title": "Share" + }, + "countChange": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Countchange" + }, + "shareChange": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Sharechange" + } + }, + "type": "object", + "required": [ + "status", + "count", + "share" + ], + "title": "AccuracyScoreBreakdown" + }, + "AccuracyThemeTrendPoint": { + "properties": { + "date": { + "type": "string", + "title": "Date" + }, + "total": { + "type": "integer", + "title": "Total" + }, + "accurate": { + "type": "integer", + "title": "Accurate" + }, + "ratio": { + "type": "number", + "title": "Ratio" + } + }, + "type": "object", + "required": [ + "date", + "total", + "accurate", + "ratio" + ], + "title": "AccuracyThemeTrendPoint" + }, + "AccuracyThemeTrendSeries": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "label": { + "type": "string", + "title": "Label" + }, + "data": { + "items": { + "$ref": "#/components/schemas/AccuracyThemeTrendPoint" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "id", + "label", + "data" + ], + "title": "AccuracyThemeTrendSeries" + }, + "AccuracyTopicIdsQuery": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "title": "Start Date" + }, + "end_date": { + "type": "string", + "title": "End Date" + } + }, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "AccuracyTopicIdsQuery" + }, + "AccuracyTrendPoint": { + "properties": { + "date": { + "type": "string", + "title": "Date" + }, + "total": { + "type": "integer", + "title": "Total" + }, + "accurate": { + "type": "integer", + "title": "Accurate" + }, + "ratio": { + "type": "number", + "title": "Ratio" + }, + "prevPeriodData": { + "anyOf": [ + { + "$ref": "#/components/schemas/AccuracyTrendPoint" + }, + { + "type": "null" + } + ] + } + }, + "type": "object", + "required": [ + "date", + "total", + "accurate", + "ratio" + ], + "title": "AccuracyTrendPoint" + }, + "AccuracyTrendSeriesMeta": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "label": { + "type": "string", + "title": "Label" + }, + "total": { + "type": "integer", + "title": "Total" + } + }, + "type": "object", + "required": [ + "id", + "label", + "total" + ], + "title": "AccuracyTrendSeriesMeta" + }, + "AddFolderRequest": { + "properties": { + "path": { + "type": "string", + "minLength": 1, + "title": "Path", + "description": "Folder path to create." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "path" + ], + "title": "AddFolderRequest" + }, + "Agent": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id", + "description": "Unique ID for the agent." + }, + "organization_id": { + "type": "string", + "format": "uuid", + "title": "Organization Id", + "description": "Unique ID of the organization that owns the agent." + }, + "name": { + "type": "string", + "title": "Name", + "description": "Display name of the agent." + }, + "status": { + "$ref": "#/components/schemas/AgentStatus", + "description": "Current status of the agent." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At", + "description": "When the agent was created." + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "Short description of the agent, if provided." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "id", + "organization_id", + "name", + "status", + "created_at" + ], + "title": "Agent", + "description": "Summary information for an agent." + }, + "AgentDetail": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id", + "description": "Unique ID for the agent." + }, + "organization_id": { + "type": "string", + "format": "uuid", + "title": "Organization Id", + "description": "Unique ID of the organization that owns the agent." + }, + "name": { + "type": "string", + "title": "Name", + "description": "Display name of the agent." + }, + "status": { + "$ref": "#/components/schemas/AgentStatus", + "description": "Current status of the agent." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At", + "description": "When the agent was created." + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "Short description of the agent, if provided." + }, + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/AgentSchema" + }, + { + "type": "null" + } + ], + "description": "Input and output schemas for this agent. Omitted while the agent's graph cannot be previewed (e.g. an empty or structurally-invalid draft); check `validation` to see what needs fixing." + }, + "validation": { + "anyOf": [ + { + "$ref": "#/components/schemas/AgentValidation" + }, + { + "type": "null" + } + ], + "description": "Validation report for the agent's graph, when available. Use `validation.valid` to check the agent is publishable." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "id", + "organization_id", + "name", + "status", + "created_at" + ], + "title": "AgentDetail", + "description": "Detailed information for an agent." + }, + "AgentGraph": { + "properties": { + "agent_id": { + "type": "string", + "format": "uuid", + "title": "Agent Id", + "description": "Unique ID of the agent the graph belongs to." + }, + "version": { + "$ref": "#/components/schemas/AgentVersion", + "description": "Which version of the agent this graph is — `published` or `draft`." + }, + "graph": { + "additionalProperties": true, + "type": "object", + "title": "Graph", + "description": "Workflow graph (`{nodes, edges}`) in the canonical dialect — the same shape `create` and `update` accept. Treat it as an opaque object: it is returned verbatim, so tool-backed nodes appear in their lowered `tool` form rather than the friendly v1 node types. Read it back to copy and edit a known-good agent." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "agent_id", + "version", + "graph" + ], + "title": "AgentGraph", + "description": "An agent version's workflow graph in the canonical dialect." + }, + "AgentRun": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id", + "description": "Unique ID for the run." + }, + "agent_id": { + "type": "string", + "format": "uuid", + "title": "Agent Id", + "description": "Unique ID of the agent for this run." + }, + "status": { + "$ref": "#/components/schemas/AgentRunStatus", + "description": "Current status of the run." + }, + "started_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Started At", + "description": "When the run started, if it has started." + }, + "finished_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Finished At", + "description": "When the run finished, if it has completed." + }, + "error": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Error", + "description": "Error details, when the run fails and error information is available." + }, + "outputs": { + "additionalProperties": true, + "type": "object", + "title": "Outputs", + "description": "Output values returned by the run, keyed by variable ID. This object conforms to `schema.output` from the agent detail response and is empty when no outputs are available." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "id", + "agent_id", + "status" + ], + "title": "AgentRun", + "description": "Status and result details for an agent run." + }, + "AgentRunStatus": { + "type": "string", + "enum": [ + "queued", + "running", + "succeeded", + "failed", + "cancelled", + "skipped", + "unknown" + ], + "title": "AgentRunStatus", + "description": "Current execution status for an agent run." + }, + "AgentSchema": { + "properties": { + "input": { + "additionalProperties": true, + "type": "object", + "title": "Input", + "description": "JSON Schema for the agent's `inputs` object. Use the top-level property keys as input field names when starting a run." + }, + "output": { + "additionalProperties": true, + "type": "object", + "title": "Output", + "description": "JSON Schema for the `outputs` object returned by `GET /v1/agents/{agent_id}/runs/{run_id}`." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "input", + "output" + ], + "title": "AgentSchema", + "description": "Schema metadata for an agent." + }, + "AgentStatus": { + "type": "string", + "enum": [ + "draft", + "published", + "unknown" + ], + "title": "AgentStatus", + "description": "Current availability status for an agent." + }, + "AgentValidation": { + "properties": { + "valid": { + "type": "boolean", + "title": "Valid", + "description": "Whether the agent's graph is valid and ready to publish." + }, + "issues": { + "items": { + "$ref": "#/components/schemas/AgentValidationIssue" + }, + "type": "array", + "title": "Issues", + "description": "Problems found while validating the graph. Empty when `valid` is true." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "valid" + ], + "title": "AgentValidation", + "description": "Result of validating an agent's graph.\n\nMirrors the report computed on every read, so callers can confirm a draft\nis publishable before calling publish." + }, + "AgentValidationIssue": { + "properties": { + "code": { + "type": "string", + "title": "Code", + "description": "Stable machine-readable identifier for the kind of issue." + }, + "message": { + "type": "string", + "title": "Message", + "description": "Human-readable description of the issue." + }, + "node_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Node Id", + "description": "ID of the node the issue applies to, if node-specific." + }, + "node_title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Node Title", + "description": "Display title of the affected node, if available." + }, + "field": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Field", + "description": "Name of the offending field on the node, if field-specific." + }, + "field_title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Field Title", + "description": "Display title of the affected field, if available." + }, + "violation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Violation", + "description": "The specific constraint that was violated, if available." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "code", + "message" + ], + "title": "AgentValidationIssue", + "description": "A single problem found while validating an agent's graph." + }, + "AgentVersion": { + "type": "string", + "enum": [ + "published", + "draft" + ], + "title": "AgentVersion", + "description": "Version selector for retrieving a specific agent." + }, + "AnalysisBreakdown": { + "properties": { + "title": { + "type": "string", + "title": "Title" + }, + "weight": { + "type": "number", + "title": "Weight" + }, + "score": { + "type": "number", + "title": "Score" + } + }, + "type": "object", + "required": [ + "title", + "weight", + "score" + ], + "title": "AnalysisBreakdown" + }, + "AnalysisInputs": { + "properties": { + "topic": { + "anyOf": [ + { + "$ref": "#/components/schemas/TopicInput" + }, + { + "type": "null" + } + ] + }, + "prompt": { + "anyOf": [ + { + "$ref": "#/components/schemas/PromptInput" + }, + { + "type": "null" + } + ] + }, + "top_citations": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Top Citations" + }, + "user": { + "$ref": "#/components/schemas/UserInput" + } + }, + "type": "object", + "required": [ + "topic", + "prompt", + "top_citations", + "user" + ], + "title": "AnalysisInputs" + }, + "AnalysisSummary": { + "properties": { + "breakdown": { + "items": { + "$ref": "#/components/schemas/AnalysisBreakdown" + }, + "type": "array", + "title": "Breakdown" + } + }, + "type": "object", + "required": [ + "breakdown" + ], + "title": "AnalysisSummary" + }, + "AnalysisType": { + "type": "string", + "enum": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ], + "title": "AnalysisType" + }, + "AnalysisTypeFilter": { + "properties": { + "field": { + "type": "string", + "const": "analysis_type", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "enum": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ] + }, + { + "items": { + "type": "string", + "enum": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ] + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "AnalysisTypeFilter", + "description": "Filter by analysis type (visibility, sentiment, or accuracy)." + }, + "AnswersQuery": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date" + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date" + }, + "pagination": { + "$ref": "#/components/schemas/Pagination", + "description": "Pagination parameters for the results. Default is 10,000 rows with no offset." + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/RegionNameFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/AnalysisTypeFilter" + }, + { + "$ref": "#/components/schemas/PromptTypeFilter" + }, + { + "$ref": "#/components/schemas/PromptFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/AssetIdFilter" + }, + { + "$ref": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "analysis_type": "#/components/schemas/AnalysisTypeFilter", + "asset_id": "#/components/schemas/AssetIdFilter", + "asset_name": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "prompt": "#/components/schemas/PromptFilter", + "prompt_type": "#/components/schemas/PromptTypeFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "region_name": "#/components/schemas/RegionNameFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter" + } + } + }, + "type": "array", + "title": "Filters", + "description": "List of filters to apply to the answers report." + }, + "include": { + "$ref": "#/components/schemas/EnabledFieldsResponse" + } + }, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "AnswersQuery", + "description": "Body for the answers endpoint." + }, + "AnswersRawData": { + "properties": { + "run_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Run Id" + }, + "created_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Created At" + }, + "prompt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Prompt" + }, + "prompt_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Prompt Id" + }, + "mentions": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Mentions" + }, + "analysis_types": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Analysis Types" + }, + "prompt_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Prompt Type" + }, + "response": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Response" + }, + "citations": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Citations" + }, + "citation_details": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/CitationDetail" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Citation Details" + }, + "web_search_results": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Web Search Results" + }, + "search_triggered": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Search Triggered" + }, + "themes": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Themes" + }, + "sentiment_themes": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/SentimentTheme" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Sentiment Themes", + "description": "Uses legacy sentiment data." + }, + "search_queries": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Search Queries" + }, + "topic": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Topic" + }, + "topic_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Topic Id" + }, + "region": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Region" + }, + "model": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Model" + }, + "model_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Model Id" + }, + "asset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Asset" + }, + "asset_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Asset Id" + }, + "tags": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Tags" + }, + "persona": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Persona" + } + }, + "type": "object", + "title": "AnswersRawData", + "description": "Raw data for the answers endpoint." + }, + "AnswersResponse": { + "properties": { + "info": { + "$ref": "#/components/schemas/AnswersResponseInfo" + }, + "data": { + "items": { + "$ref": "#/components/schemas/AnswersRawData" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "info", + "data" + ], + "title": "AnswersResponse", + "description": "Response for the answers endpoint." + }, + "AnswersResponseInfo": { + "properties": { + "total_rows": { + "type": "integer", + "title": "Total Rows" + } + }, + "type": "object", + "required": [ + "total_rows" + ], + "title": "AnswersResponseInfo" + }, + "AnswersV2Query": { + "properties": { + "category_id": { + "type": "string", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "YYYY-MM-DD, ET, inclusive" + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "YYYY-MM-DD, ET, inclusive" + }, + "include": { + "anyOf": [ + { + "items": { + "type": "string", + "enum": [ + "run_id", + "date", + "model", + "topic", + "topic_id", + "persona", + "region", + "tags", + "prompt", + "prompt_id", + "response", + "mentions", + "citations", + "search_queries", + "analysis_types", + "sentiment_claims" + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Include", + "description": "Which row fields to return: `run_id`, `date`, `model`, `topic`, `topic_id`, `region`, `persona`, `tags`, `prompt`, `prompt_id`, `response`, `mentions`, `citations`, `search_queries`, `analysis_types`, `sentiment_claims`. Omit for all of them." + }, + "filter": { + "anyOf": [ + { + "$ref": "#/components/schemas/FilterNode" + }, + { + "type": "null" + } + ], + "description": "and/or/not tree over `model`, `topic`, `region`, `persona`, `prompt`, `tag`, `analysis_type` (visibility/sentiment/factcheck); plus top-level `and` leaves `domain` or `page` (`is` one value, or `in` a list). Substring-search the prompt with `{\"field\": \"prompt\", \"op\": \"contains\", \"value\": \"…\"}`." + }, + "limit": { + "anyOf": [ + { + "type": "integer", + "maximum": 50, + "exclusiveMinimum": 0 + }, + { + "type": "null" + } + ], + "title": "Limit", + "description": "Page size; default 10, max 50." + }, + "max_results": { + "anyOf": [ + { + "type": "integer", + "exclusiveMinimum": 0 + }, + { + "type": "null" + } + ], + "title": "Max Results", + "description": "Stream endpoint only: cap the number of streamed rows (default: all)." + }, + "cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Cursor" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "AnswersV2Query" + }, + "AssetIdFilter": { + "properties": { + "field": { + "type": "string", + "const": "asset_id", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "AssetIdFilter" + }, + "BotNameFilter": { + "properties": { + "field": { + "type": "string", + "const": "bot_name", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "enum": [ + "Amazonbot", + "ClaudeBot", + "Claude-User", + "Claude-SearchBot", + "Applebot", + "Applebot-Extended", + "Bytespider", + "DeepSeek", + "DuckAssistBot", + "DuckDuckBot", + "Googlebot", + "Googlebot-News", + "Googlebot-Video", + "Googlebot-Image", + "Google-Extended", + "Storebot-Google", + "Google-CloudVertexBot", + "meta-externalfetcher", + "meta-externalagent", + "bingbot", + "MicrosoftPreview", + "ChatGPT-User", + "GPTBot", + "OAI-SearchBot", + "OAI-Operator", + "PerplexityBot", + "Perplexity-User", + "Grok-PageBrowser", + "YouBot", + "OpenClaw", + "baiduspider", + "CCBot", + "ERNIEBot", + "Gemini-Fetch", + "YandexBot", + "PetalBot", + "MistralAI-User", + "Slurp", + "Gemini-Deep-Research" + ] + }, + { + "items": { + "type": "string", + "enum": [ + "Amazonbot", + "ClaudeBot", + "Claude-User", + "Claude-SearchBot", + "Applebot", + "Applebot-Extended", + "Bytespider", + "DeepSeek", + "DuckAssistBot", + "DuckDuckBot", + "Googlebot", + "Googlebot-News", + "Googlebot-Video", + "Googlebot-Image", + "Google-Extended", + "Storebot-Google", + "Google-CloudVertexBot", + "meta-externalfetcher", + "meta-externalagent", + "bingbot", + "MicrosoftPreview", + "ChatGPT-User", + "GPTBot", + "OAI-SearchBot", + "OAI-Operator", + "PerplexityBot", + "Perplexity-User", + "Grok-PageBrowser", + "YouBot", + "OpenClaw", + "baiduspider", + "CCBot", + "ERNIEBot", + "Gemini-Fetch", + "YandexBot", + "PetalBot", + "MistralAI-User", + "Slurp", + "Gemini-Deep-Research" + ] + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "BotNameFilter", + "description": "Filter by bot name (user agent)" + }, + "BotProviderFilter": { + "properties": { + "field": { + "type": "string", + "const": "bot_provider", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "enum": [ + "openai", + "anthropic", + "chatgpt", + "deepseek", + "google", + "microsoft", + "perplexity", + "apple", + "bytedance", + "amazon", + "meta", + "duckduckgo", + "you", + "xai", + "grok", + "gemini", + "mistral", + "huawei", + "yandex", + "baidu", + "yahoo", + "commoncrawl", + "openclaw" + ] + }, + { + "items": { + "type": "string", + "enum": [ + "openai", + "anthropic", + "chatgpt", + "deepseek", + "google", + "microsoft", + "perplexity", + "apple", + "bytedance", + "amazon", + "meta", + "duckduckgo", + "you", + "xai", + "grok", + "gemini", + "mistral", + "huawei", + "yandex", + "baidu", + "yahoo", + "commoncrawl", + "openclaw" + ] + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "BotProviderFilter", + "description": "Filter by bot provider" + }, + "BotTypeFilter": { + "properties": { + "field": { + "type": "string", + "const": "bot_type", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "enum": [ + "ai_assistant", + "ai_training", + "index", + "ai_agent" + ] + }, + { + "items": { + "type": "string", + "enum": [ + "ai_assistant", + "ai_training", + "index", + "ai_agent" + ] + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "BotTypeFilter", + "description": "Filter by bot_type column (v2 hourly table only)" + }, + "BotsReportQuery": { + "properties": { + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "year", + "relative_week" + ], + "title": "Date Interval", + "description": "Date interval for the report. (only used with date dimension)", + "default": "day" + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "date", + "path", + "bot_name", + "bot_provider" + ] + }, + "type": "array", + "title": "Dimensions", + "description": "Dimensions to group the report by.", + "default": [] + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "count", + "citations", + "indexing", + "training", + "last_visit" + ] + }, + "type": "array", + "title": "Metrics" + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By", + "description": "\nCustom ordering of the report results.\n\nThe order is a record of key-value pairs where:\n- key is the field to order by, which can be a metric or dimension\n- value is the direction of the order, either 'asc' for ascending or 'desc' for descending.\n\nWhen not specified, the default order is the first metric in the query descending.\n ", + "default": {}, + "examples": [ + { + "date": "asc" + } + ] + }, + "pagination": { + "$ref": "#/components/schemas/Pagination", + "description": "Pagination settings for the report results." + }, + "domain": { + "type": "string", + "title": "Domain", + "description": "Domain to query logs for." + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date for logs. Accepts same formats as start_date. Defaults to now if omitted." + }, + "organization_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Organization Id" + }, + "metric_filters": { + "items": { + "$ref": "#/components/schemas/NumericMetricFilter" + }, + "type": "array", + "title": "Metric Filters", + "description": "Numeric filters applied after report metrics are calculated." + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/PathFilter" + }, + { + "$ref": "#/components/schemas/BotNameFilter" + }, + { + "$ref": "#/components/schemas/BotProviderFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "bot_name": "#/components/schemas/BotNameFilter", + "bot_provider": "#/components/schemas/BotProviderFilter", + "path": "#/components/schemas/PathFilter" + } + } + }, + "type": "array", + "title": "Filters", + "description": "Filters for bots report." + } + }, + "type": "object", + "required": [ + "metrics", + "domain", + "start_date" + ], + "title": "BotsReportQuery" + }, + "BotsReportQueryV2": { + "properties": { + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "description": "Date interval for the report. (only used with date dimension)", + "default": "day" + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "date", + "hour", + "path", + "bot_name", + "bot_provider", + "bot_type" + ] + }, + "type": "array", + "title": "Dimensions", + "description": "Dimensions to group the report by.", + "default": [] + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "count", + "citations", + "indexing", + "training", + "last_visit" + ] + }, + "type": "array", + "title": "Metrics" + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "propertyNames": { + "enum": [ + "date", + "hour", + "count", + "citations", + "indexing", + "training", + "last_visit", + "bot_type" + ] + }, + "type": "object", + "title": "Order By", + "description": "\nCustom ordering of the report results.\n\nThe order is a record of key-value pairs where:\n- key is the field to order by, which can be a metric or dimension\n- value is the direction of the order, either 'asc' for ascending or 'desc' for descending.\n\nWhen not specified, the default order is the first metric in the query descending.\n ", + "default": {}, + "examples": [ + { + "date": "asc" + } + ] + }, + "pagination": { + "$ref": "#/components/schemas/Pagination", + "description": "Pagination settings for the report results." + }, + "domain": { + "type": "string", + "title": "Domain", + "description": "Domain to query logs for." + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted." + }, + "organization_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Organization Id" + }, + "metric_filters": { + "items": { + "$ref": "#/components/schemas/NumericMetricFilter" + }, + "type": "array", + "title": "Metric Filters", + "description": "Numeric filters applied after report metrics are calculated." + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/PathFilter" + }, + { + "$ref": "#/components/schemas/BotNameFilter" + }, + { + "$ref": "#/components/schemas/BotProviderFilter" + }, + { + "$ref": "#/components/schemas/BotTypeFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "bot_name": "#/components/schemas/BotNameFilter", + "bot_provider": "#/components/schemas/BotProviderFilter", + "bot_type": "#/components/schemas/BotTypeFilter", + "path": "#/components/schemas/PathFilter" + } + } + }, + "type": "array", + "title": "Filters", + "description": "Filters for bots report." + } + }, + "type": "object", + "required": [ + "metrics", + "domain", + "start_date" + ], + "title": "BotsReportQueryV2" + }, + "BrandNameFilter": { + "properties": { + "field": { + "type": "string", + "const": "brand_name", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "BrandNameFilter" + }, + "Category": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + } + }, + "type": "object", + "required": [ + "id", + "name" + ], + "title": "Category" + }, + "CategoryAsset": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + }, + "website": { + "type": "string", + "title": "Website" + }, + "alternate_domains": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Alternate Domains" + }, + "is_owned": { + "type": "boolean", + "title": "Is Owned" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "logo_url": { + "type": "string", + "title": "Logo Url" + } + }, + "type": "object", + "required": [ + "id", + "name", + "website", + "is_owned", + "created_at", + "logo_url" + ], + "title": "CategoryAsset" + }, + "CategoryAssetWithCategory": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + }, + "website": { + "type": "string", + "title": "Website" + }, + "alternate_domains": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Alternate Domains" + }, + "is_owned": { + "type": "boolean", + "title": "Is Owned" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "logo_url": { + "type": "string", + "title": "Logo Url" + }, + "category": { + "$ref": "#/components/schemas/Category" + }, + "organization": { + "$ref": "#/components/schemas/Organization" + } + }, + "type": "object", + "required": [ + "id", + "name", + "website", + "is_owned", + "created_at", + "logo_url", + "category", + "organization" + ], + "title": "CategoryAssetWithCategory" + }, + "CategoryPersona": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + }, + "persona": { + "$ref": "#/components/schemas/PersonaProfile" + } + }, + "type": "object", + "required": [ + "id", + "name", + "persona" + ], + "title": "CategoryPersona" + }, + "CategoryPersonasResponse": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/CategoryPersona" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "data" + ], + "title": "CategoryPersonasResponse" + }, + "CategoryPromptsResponse": { + "properties": { + "info": { + "$ref": "#/components/schemas/PaginationInfo" + }, + "data": { + "items": { + "$ref": "#/components/schemas/Prompt" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "info", + "data" + ], + "title": "CategoryPromptsResponse" + }, + "CategoryWithOrganization": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + }, + "organization": { + "$ref": "#/components/schemas/Organization" + } + }, + "type": "object", + "required": [ + "id", + "name", + "organization" + ], + "title": "CategoryWithOrganization", + "description": "A category annotated with the organization that owns it." + }, + "CitationCategoryFilter": { + "properties": { + "field": { + "type": "string", + "const": "citation_category", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "CitationCategoryFilter", + "description": "Filter by citation category" + }, + "CitationDetail": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "clean_url": { + "type": "string", + "title": "Clean Url" + }, + "title": { + "type": "string", + "title": "Title" + }, + "text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Text" + }, + "hostname": { + "type": "string", + "title": "Hostname" + }, + "path": { + "type": "string", + "title": "Path" + }, + "first_cited_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "First Cited At" + }, + "positions": { + "items": { + "type": "integer" + }, + "type": "array", + "title": "Positions" + }, + "groups": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/CitationDetailGroup" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Groups" + }, + "citation_category": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Citation Category" + } + }, + "type": "object", + "required": [ + "url", + "clean_url", + "title", + "hostname", + "path" + ], + "title": "CitationDetail" + }, + "CitationDetailGroup": { + "properties": { + "group_id": { + "type": "integer", + "title": "Group Id" + }, + "group_position": { + "type": "integer", + "title": "Group Position" + } + }, + "type": "object", + "required": [ + "group_id", + "group_position" + ], + "title": "CitationDetailGroup" + }, + "CitationsQuery": { + "properties": { + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "description": "Date interval for the report. (only used with date dimension)", + "default": "day" + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "hostname", + "path", + "date", + "region", + "topic", + "topic_id", + "model", + "tag", + "prompt", + "prompt_id", + "url", + "root_domain", + "persona", + "citation_category" + ] + }, + "type": "array", + "title": "Dimensions", + "description": "Dimensions to group the report by.", + "default": [] + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "count", + "citation_share", + "share_of_voice", + "first_cited_at" + ] + }, + "type": "array", + "title": "Metrics", + "description": "Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead.", + "deprecated_values": { + "share_of_voice": "Use citation_share instead" + } + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By", + "description": "\n Custom ordering of the report results.\n\n The order is a record of key-value pairs where:\n - `key` is the field to order by, which can be a metric or dimension\n - `value` is the direction of the order, either `asc` for ascending or `desc` for descending.\n\n When not specified, the default order is the first metric in the query descending.\n ", + "default": {}, + "examples": [ + { + "date": "asc" + }, + { + "count": "desc", + "date": "asc" + } + ] + }, + "pagination": { + "$ref": "#/components/schemas/Pagination", + "description": "Pagination settings for the report results." + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/HostnameFilter" + }, + { + "$ref": "#/components/schemas/PathFilter" + }, + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/RegionNameFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/TopicNameFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/TagNameFilter" + }, + { + "$ref": "#/components/schemas/UrlFilter" + }, + { + "$ref": "#/components/schemas/RootDomainFilter" + }, + { + "$ref": "#/components/schemas/AnalysisTypeFilter" + }, + { + "$ref": "#/components/schemas/PromptTypeFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + }, + { + "$ref": "#/components/schemas/CitationCategoryFilter" + }, + { + "$ref": "#/components/schemas/PromptFilter" + }, + { + "$ref": "#/components/schemas/PromptIdFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "analysis_type": "#/components/schemas/AnalysisTypeFilter", + "citation_category": "#/components/schemas/CitationCategoryFilter", + "hostname": "#/components/schemas/HostnameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "path": "#/components/schemas/PathFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "prompt": "#/components/schemas/PromptFilter", + "prompt_id": "#/components/schemas/PromptIdFilter", + "prompt_type": "#/components/schemas/PromptTypeFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "region_name": "#/components/schemas/RegionNameFilter", + "root_domain": "#/components/schemas/RootDomainFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "tag_name": "#/components/schemas/TagNameFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter", + "topic_name": "#/components/schemas/TopicNameFilter", + "url": "#/components/schemas/UrlFilter" + } + } + }, + "type": "array", + "title": "Filters", + "description": "List of filters to apply to the citations report." + } + }, + "type": "object", + "required": [ + "metrics", + "category_id", + "start_date", + "end_date" + ], + "title": "CitationsQuery" + }, + "CitationsResponse": { + "properties": { + "info": { + "$ref": "#/components/schemas/Info" + }, + "data": { + "items": { + "$ref": "#/components/schemas/CitationsResult" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "info", + "data" + ], + "title": "CitationsResponse", + "examples": [ + { + "data": [ + { + "dimensions": [ + "example.com", + "/some/path", + "2023-10-01" + ], + "metrics": [ + 10, + 0.05 + ] + } + ], + "info": { + "query": { + "date_interval": "day", + "dimensions": [ + "hostname", + "path", + "date" + ], + "filters": [ + { + "field": "hostname", + "operator": "is", + "value": "example.com" + } + ], + "metrics": [ + "count", + "citation_share" + ] + }, + "total_rows": 200 + } + } + ] + }, + "CitationsResult": { + "properties": { + "metrics": { + "items": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "type": "array", + "title": "Metrics" + }, + "dimensions": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "type": "array", + "title": "Dimensions" + } + }, + "type": "object", + "required": [ + "metrics", + "dimensions" + ], + "title": "CitationsResult" + }, + "CitationsV2Query": { + "properties": { + "category_id": { + "type": "string", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "YYYY-MM-DD, ET, inclusive" + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "YYYY-MM-DD, ET, inclusive" + }, + "group_by": { + "items": { + "type": "string", + "enum": [ + "page", + "date", + "model", + "topic", + "region", + "persona", + "prompt" + ] + }, + "type": "array", + "title": "Group By" + }, + "metrics": { + "anyOf": [ + { + "items": { + "type": "string", + "enum": [ + "count", + "citation_share", + "rank", + "first_cited_at" + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Metrics" + }, + "interval": { + "type": "string", + "enum": [ + "day", + "week", + "month" + ], + "title": "Interval", + "default": "day" + }, + "scope": { + "type": "string", + "enum": [ + "all", + "owned" + ], + "title": "Scope", + "description": "`all` (every cited domain) or `owned` (only your owned domains, for easy client-side totals).", + "default": "all" + }, + "filter": { + "anyOf": [ + { + "$ref": "#/components/schemas/FilterNode" + }, + { + "type": "null" + } + ] + }, + "limit": { + "anyOf": [ + { + "type": "integer", + "maximum": 50, + "exclusiveMinimum": 0 + }, + { + "type": "null" + } + ], + "title": "Limit", + "description": "Page size; default 10, max 50." + }, + "max_results": { + "anyOf": [ + { + "type": "integer", + "exclusiveMinimum": 0 + }, + { + "type": "null" + } + ], + "title": "Max Results", + "description": "Stream endpoint only: cap the number of streamed rows (default: all)." + }, + "cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Cursor" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "CitationsV2Query" + }, + "ClaimBreakdownQuery": { + "properties": { + "start_date": { + "type": "string", + "title": "Start Date" + }, + "end_date": { + "type": "string", + "title": "End Date" + }, + "comparison_start_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison Start Date" + }, + "comparison_end_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison End Date" + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "topic_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Topic Ids" + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "tag_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Tag Ids" + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "all", + "any" + ], + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": true + }, + "region_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Region Ids" + }, + "platform_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Platform Ids" + }, + "persona_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Persona Ids" + }, + "include_no_persona": { + "type": "boolean", + "title": "Include No Persona", + "default": true + }, + "prompt_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Prompt Ids" + }, + "citation_categories": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Citation Categories" + }, + "cluster_id": { + "type": "string", + "format": "uuid", + "title": "Cluster Id" + } + }, + "type": "object", + "required": [ + "start_date", + "end_date", + "category_id", + "cluster_id" + ], + "title": "ClaimBreakdownQuery" + }, + "ClaimBreakdownResponse": { + "properties": { + "platform": { + "items": { + "$ref": "#/components/schemas/ClaimBreakdownRow" + }, + "type": "array", + "title": "Platform" + }, + "prompt": { + "items": { + "$ref": "#/components/schemas/ClaimPromptBreakdownRow" + }, + "type": "array", + "title": "Prompt" + } + }, + "type": "object", + "required": [ + "platform", + "prompt" + ], + "title": "ClaimBreakdownResponse" + }, + "ClaimBreakdownRow": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "label": { + "type": "string", + "title": "Label" + }, + "responseCount": { + "type": "integer", + "title": "Responsecount" + }, + "totalResponseCount": { + "type": "integer", + "title": "Totalresponsecount" + }, + "responseShare": { + "type": "number", + "title": "Responseshare" + }, + "responseShareDelta": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Responsesharedelta" + }, + "prevResponseCount": { + "type": "integer", + "title": "Prevresponsecount" + }, + "prevTotalResponseCount": { + "type": "integer", + "title": "Prevtotalresponsecount" + } + }, + "type": "object", + "required": [ + "id", + "label", + "responseCount", + "totalResponseCount", + "responseShare", + "prevResponseCount", + "prevTotalResponseCount" + ], + "title": "ClaimBreakdownRow" + }, + "ClaimCitationRow": { + "properties": { + "href": { + "type": "string", + "title": "Href" + }, + "hostname": { + "type": "string", + "title": "Hostname" + }, + "path": { + "type": "string", + "title": "Path" + }, + "citationCategory": { + "type": "string", + "title": "Citationcategory" + }, + "domainCategory": { + "type": "string", + "title": "Domaincategory" + }, + "snippet": { + "type": "string", + "title": "Snippet" + }, + "citationCount": { + "type": "number", + "title": "Citationcount" + }, + "citationShare": { + "type": "number", + "title": "Citationshare" + }, + "citationShareDelta": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Citationsharedelta" + } + }, + "type": "object", + "required": [ + "href", + "hostname", + "path", + "citationCategory", + "domainCategory", + "snippet", + "citationCount", + "citationShare" + ], + "title": "ClaimCitationRow" + }, + "ClaimCitationsQuery": { + "properties": { + "start_date": { + "type": "string", + "title": "Start Date" + }, + "end_date": { + "type": "string", + "title": "End Date" + }, + "comparison_start_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison Start Date" + }, + "comparison_end_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison End Date" + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "topic_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Topic Ids" + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "tag_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Tag Ids" + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "all", + "any" + ], + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": true + }, + "region_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Region Ids" + }, + "platform_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Platform Ids" + }, + "persona_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Persona Ids" + }, + "include_no_persona": { + "type": "boolean", + "title": "Include No Persona", + "default": true + }, + "prompt_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Prompt Ids" + }, + "citation_categories": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Citation Categories" + }, + "cluster_id": { + "type": "string", + "format": "uuid", + "title": "Cluster Id" + }, + "limit": { + "type": "integer", + "minimum": 1, + "title": "Limit", + "default": 10 + }, + "offset": { + "type": "integer", + "minimum": 0, + "title": "Offset", + "default": 0 + }, + "search_query": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Search Query" + }, + "sort_order": { + "type": "string", + "enum": [ + "asc", + "desc" + ], + "title": "Sort Order", + "default": "desc" + } + }, + "type": "object", + "required": [ + "start_date", + "end_date", + "category_id", + "cluster_id" + ], + "title": "ClaimCitationsQuery" + }, + "ClaimCitationsResponse": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/ClaimCitationRow" + }, + "type": "array", + "title": "Data" + }, + "totalCount": { + "type": "integer", + "title": "Totalcount" + } + }, + "type": "object", + "required": [ + "data", + "totalCount" + ], + "title": "ClaimCitationsResponse" + }, + "ClaimPromptBreakdownRow": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "label": { + "type": "string", + "title": "Label" + }, + "responseCount": { + "type": "integer", + "title": "Responsecount" + }, + "totalResponseCount": { + "type": "integer", + "title": "Totalresponsecount" + }, + "responseShare": { + "type": "number", + "title": "Responseshare" + }, + "responseShareDelta": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Responsesharedelta" + }, + "prevResponseCount": { + "type": "integer", + "title": "Prevresponsecount" + }, + "prevTotalResponseCount": { + "type": "integer", + "title": "Prevtotalresponsecount" + }, + "promptId": { + "type": "string", + "title": "Promptid" + }, + "promptText": { + "type": "string", + "title": "Prompttext" + }, + "topicId": { + "type": "string", + "title": "Topicid" + }, + "hasCurrent": { + "type": "boolean", + "title": "Hascurrent" + } + }, + "type": "object", + "required": [ + "id", + "label", + "responseCount", + "totalResponseCount", + "responseShare", + "prevResponseCount", + "prevTotalResponseCount", + "promptId", + "promptText", + "topicId", + "hasCurrent" + ], + "title": "ClaimPromptBreakdownRow" + }, + "ClusterExampleRun": { + "properties": { + "runId": { + "type": "string", + "title": "Runid" + }, + "claim": { + "type": "string", + "title": "Claim" + }, + "responseSnippet": { + "type": "string", + "title": "Responsesnippet" + }, + "modelId": { + "type": "string", + "title": "Modelid" + }, + "regionId": { + "type": "string", + "title": "Regionid" + }, + "createdAt": { + "type": "string", + "title": "Createdat" + } + }, + "type": "object", + "required": [ + "runId", + "claim", + "responseSnippet", + "modelId", + "regionId", + "createdAt" + ], + "title": "ClusterExampleRun" + }, + "ClusterExampleRunsQuery": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "cluster_id": { + "type": "string", + "format": "uuid", + "title": "Cluster Id" + }, + "start_date": { + "type": "string", + "title": "Start Date" + }, + "end_date": { + "type": "string", + "title": "End Date" + }, + "limit": { + "type": "integer", + "minimum": 1, + "title": "Limit", + "default": 20 + }, + "offset": { + "type": "integer", + "minimum": 0, + "title": "Offset", + "default": 0 + } + }, + "type": "object", + "required": [ + "category_id", + "cluster_id", + "start_date", + "end_date" + ], + "title": "ClusterExampleRunsQuery" + }, + "ClusterExampleRunsResponse": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/ClusterExampleRun" + }, + "type": "array", + "title": "Data" + }, + "totalCount": { + "type": "integer", + "title": "Totalcount" + } + }, + "type": "object", + "required": [ + "data", + "totalCount" + ], + "title": "ClusterExampleRunsResponse" + }, + "ClusterVerificationPair": { + "properties": { + "pairId": { + "type": "string", + "title": "Pairid" + }, + "snippetIdx": { + "type": "integer", + "title": "Snippetidx" + }, + "kbPath": { + "type": "string", + "title": "Kbpath" + }, + "quote": { + "type": "string", + "title": "Quote" + }, + "reasoning": { + "type": "string", + "title": "Reasoning" + }, + "sourceUpdatedAt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Sourceupdatedat" + } + }, + "type": "object", + "required": [ + "pairId", + "snippetIdx", + "kbPath", + "quote", + "reasoning" + ], + "title": "ClusterVerificationPair" + }, + "ClusterVerificationPairsQuery": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "cluster_id": { + "type": "string", + "format": "uuid", + "title": "Cluster Id" + } + }, + "type": "object", + "required": [ + "category_id", + "cluster_id" + ], + "title": "ClusterVerificationPairsQuery" + }, + "ClusterVerificationPairsResponse": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/ClusterVerificationPair" + }, + "type": "array", + "title": "Data" + }, + "clusterReasoning": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Clusterreasoning" + } + }, + "type": "object", + "required": [ + "data" + ], + "title": "ClusterVerificationPairsResponse" + }, + "ContentAnalysis": { + "properties": { + "content": { + "$ref": "#/components/schemas/DocumentContent" + }, + "aeo_content_score": { + "anyOf": [ + { + "$ref": "#/components/schemas/AEOScore" + }, + { + "type": "null" + } + ] + }, + "analysis": { + "$ref": "#/components/schemas/AnalysisSummary" + }, + "recommendations": { + "items": { + "$ref": "#/components/schemas/Recommendation" + }, + "type": "array", + "title": "Recommendations" + }, + "inputs": { + "$ref": "#/components/schemas/AnalysisInputs" + } + }, + "type": "object", + "required": [ + "content", + "aeo_content_score", + "analysis", + "recommendations", + "inputs" + ], + "title": "ContentAnalysis" + }, + "ContentFormat": { + "type": "string", + "enum": [ + "markdown", + "html" + ], + "title": "ContentFormat" + }, + "ContentOptimization": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id" + }, + "title": { + "type": "string", + "title": "Title" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "extracted_input": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Extracted Input" + }, + "type": { + "$ref": "#/components/schemas/ContentType" + }, + "status": { + "type": "string", + "title": "Status" + } + }, + "type": "object", + "required": [ + "id", + "title", + "created_at", + "extracted_input", + "type", + "status" + ], + "title": "ContentOptimization" + }, + "ContentOptimizationAnalysisResponse": { + "properties": { + "data": { + "$ref": "#/components/schemas/ContentAnalysis" + } + }, + "type": "object", + "required": [ + "data" + ], + "title": "ContentOptimizationAnalysisResponse" + }, + "ContentOptimizationResponse": { + "properties": { + "info": { + "$ref": "#/components/schemas/ContentOptimizationResponseInfo" + }, + "data": { + "items": { + "$ref": "#/components/schemas/ContentOptimization" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "info", + "data" + ], + "title": "ContentOptimizationResponse" + }, + "ContentOptimizationResponseInfo": { + "properties": { + "total_rows": { + "type": "integer", + "title": "Total Rows" + }, + "query": { + "$ref": "#/components/schemas/OptimizationQuery" + } + }, + "type": "object", + "required": [ + "total_rows", + "query" + ], + "title": "ContentOptimizationResponseInfo" + }, + "ContentType": { + "type": "string", + "enum": [ + "file", + "text", + "url" + ], + "title": "ContentType" + }, + "CreateAgentRequest": { + "properties": { + "organization_id": { + "type": "string", + "format": "uuid", + "title": "Organization Id", + "description": "ID of the organization that will own the agent. Required — Profound API keys are user-scoped, so the owning organization must be chosen explicitly. The caller must be a member of this organization." + }, + "name": { + "type": "string", + "minLength": 1, + "title": "Name", + "description": "Display name for the agent. Must be non-empty." + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "Short description of the agent." + }, + "graph": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Graph", + "description": "Initial workflow graph for the agent's draft version. Optional — an agent can be created empty and have its graph filled in later." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "organization_id", + "name" + ], + "title": "CreateAgentRequest", + "description": "Request body for creating a draft agent." + }, + "CreatePromptInput": { + "properties": { + "prompt": { + "type": "string", + "minLength": 1, + "title": "Prompt", + "description": "The prompt text to be sent to AI platforms." + }, + "topic": { + "$ref": "#/components/schemas/IdOrName", + "description": "Topic to assign. A new topic is created if the name doesn't exist." + }, + "language": { + "type": "string", + "title": "Language", + "description": "Language code (e.g. 'en-US')" + }, + "tags": { + "items": { + "$ref": "#/components/schemas/IdOrName" + }, + "type": "array", + "title": "Tags", + "description": "Tags to assign. New tags are created if names don't exist.", + "default": [] + }, + "regions": { + "items": { + "$ref": "#/components/schemas/IdOrName" + }, + "type": "array", + "minItems": 1, + "title": "Regions", + "description": "Regions where the prompt will be collected." + }, + "platforms": { + "items": { + "$ref": "#/components/schemas/IdOrName" + }, + "type": "array", + "minItems": 1, + "title": "Platforms", + "description": "AI platforms where the prompt will be collected." + }, + "personas": { + "items": { + "$ref": "#/components/schemas/IdOrName" + }, + "type": "array", + "title": "Personas", + "description": "Personas to use when collecting. Omit for default (no persona).", + "default": [] + }, + "analysis_types": { + "anyOf": [ + { + "items": { + "type": "string", + "enum": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Analysis Types", + "description": "Analysis types: 'visibility', 'sentiment', 'accuracy'. Defaults to ['visibility']." + }, + "prompt_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Prompt Type", + "description": "Deprecated. Use analysis_types instead. 'Visibility' or 'Sentiment'.", + "deprecated": true + }, + "asset": { + "anyOf": [ + { + "$ref": "#/components/schemas/IdOrName" + }, + { + "type": "null" + } + ], + "description": "Required for Sentiment prompts. The brand asset to evaluate." + } + }, + "type": "object", + "required": [ + "prompt", + "topic", + "language", + "regions", + "platforms" + ], + "title": "CreatePromptInput", + "description": "A single prompt to create within a category." + }, + "CreatePromptsBody": { + "properties": { + "prompts": { + "items": { + "$ref": "#/components/schemas/CreatePromptInput" + }, + "type": "array", + "title": "Prompts", + "description": "List of prompts to create." + }, + "dry_run": { + "type": "boolean", + "title": "Dry Run", + "description": "When true, validate and preview changes without persisting them.", + "default": false + } + }, + "type": "object", + "required": [ + "prompts" + ], + "title": "CreatePromptsBody" + }, + "CreatePromptsResponse": { + "properties": { + "dry_run": { + "type": "boolean", + "title": "Dry Run", + "description": "Whether this was a dry run (no changes persisted)." + }, + "created": { + "type": "integer", + "title": "Created", + "description": "Number of prompts created.", + "default": 0 + }, + "topics_created": { + "type": "integer", + "title": "Topics Created", + "description": "Number of new topics created.", + "default": 0 + }, + "tags_created": { + "type": "integer", + "title": "Tags Created", + "description": "Number of new tags created.", + "default": 0 + }, + "prompts": { + "items": { + "$ref": "#/components/schemas/PromptPreview" + }, + "type": "array", + "title": "Prompts", + "description": "List of created (or previewed) prompts with resolved references.", + "default": [] + } + }, + "type": "object", + "required": [ + "dry_run" + ], + "title": "CreatePromptsResponse", + "description": "Response from creating prompts." + }, + "CursorPagination": { + "properties": { + "limit": { + "type": "integer", + "maximum": 50000, + "exclusiveMinimum": 0, + "title": "Limit", + "description": "Maximum number of results to return. Default is 10,000, maximum is 50,000.", + "default": 10000 + }, + "next_cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Cursor", + "description": "Token for the next page, if more results are available." + } + }, + "additionalProperties": false, + "type": "object", + "title": "CursorPagination", + "description": "Cursor-based pagination metadata." + }, + "DeleteDocumentRequest": { + "properties": { + "name": { + "type": "string", + "minLength": 1, + "title": "Name", + "description": "Document path to delete." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "name" + ], + "title": "DeleteDocumentRequest" + }, + "DeleteFolderRequest": { + "properties": { + "path": { + "type": "string", + "minLength": 1, + "title": "Path", + "description": "Folder path to delete." + }, + "recursive": { + "type": "boolean", + "title": "Recursive", + "description": "When false, only empty folders are deleted and non-empty folders return a conflict. When true, the folder and all contents are deleted.", + "default": false + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "path" + ], + "title": "DeleteFolderRequest" + }, + "DocumentContent": { + "properties": { + "format": { + "$ref": "#/components/schemas/ContentFormat" + }, + "value": { + "type": "string", + "title": "Value" + } + }, + "type": "object", + "required": [ + "format", + "value" + ], + "title": "DocumentContent" + }, + "DocumentOperationResponse": { + "properties": { + "message": { + "type": "string", + "title": "Message", + "description": "Operation result message." + }, + "name": { + "type": "string", + "title": "Name", + "description": "Document name." + }, + "path": { + "type": "string", + "title": "Path", + "description": "Document path." + }, + "folder": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Folder", + "description": "Document folder path." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "message", + "name", + "path" + ], + "title": "DocumentOperationResponse" + }, + "DomainWithOrganization": { + "properties": { + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + }, + "organization": { + "$ref": "#/components/schemas/Organization" + } + }, + "type": "object", + "required": [ + "created_at", + "id", + "name", + "organization" + ], + "title": "DomainWithOrganization", + "description": "A domain paired with the organization edge it belongs to." + }, + "EnabledFieldsResponse": { + "properties": { + "run_id": { + "type": "boolean", + "title": "Run Id", + "default": false + }, + "created_at": { + "type": "boolean", + "title": "Created At", + "default": true + }, + "prompt": { + "type": "boolean", + "title": "Prompt", + "default": true + }, + "prompt_id": { + "type": "boolean", + "title": "Prompt Id", + "default": false + }, + "mentions": { + "type": "boolean", + "title": "Mentions", + "default": true + }, + "analysis_types": { + "type": "boolean", + "title": "Analysis Types", + "default": false + }, + "prompt_type": { + "type": "boolean", + "title": "Prompt Type", + "default": true, + "deprecated": true + }, + "response": { + "type": "boolean", + "title": "Response", + "default": true + }, + "citations": { + "type": "boolean", + "title": "Citations", + "default": true + }, + "citation_details": { + "type": "boolean", + "title": "Citation Details", + "default": false + }, + "web_search_results": { + "type": "boolean", + "title": "Web Search Results", + "default": false + }, + "search_triggered": { + "type": "boolean", + "title": "Search Triggered", + "default": false + }, + "themes": { + "type": "boolean", + "title": "Themes", + "description": "Use 'sentiment_themes' instead", + "default": true, + "deprecated": true + }, + "sentiment_themes": { + "type": "boolean", + "title": "Sentiment Themes", + "description": "Uses legacy sentiment data.", + "default": false + }, + "topic": { + "type": "boolean", + "title": "Topic", + "default": true + }, + "topic_id": { + "type": "boolean", + "title": "Topic Id", + "default": false + }, + "region": { + "type": "boolean", + "title": "Region", + "default": true + }, + "model": { + "type": "boolean", + "title": "Model", + "default": true + }, + "model_id": { + "type": "boolean", + "title": "Model Id", + "default": true + }, + "asset": { + "type": "boolean", + "title": "Asset", + "default": true + }, + "asset_id": { + "type": "boolean", + "title": "Asset Id", + "default": false + }, + "tags": { + "type": "boolean", + "title": "Tags", + "default": false + }, + "search_queries": { + "type": "boolean", + "title": "Search Queries", + "default": false + }, + "persona": { + "type": "boolean", + "title": "Persona", + "default": false + } + }, + "type": "object", + "title": "EnabledFieldsResponse" + }, + "EntityFilterClause": { + "properties": { + "op": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Op" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "op", + "value" + ], + "title": "EntityFilterClause", + "description": "Select/exclude the entity, applied outside the data `filter` tree." + }, + "FactCheckSetupStatusQuery": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + } + }, + "type": "object", + "required": [ + "category_id" + ], + "title": "FactCheckSetupStatusQuery" + }, + "FactCheckSetupStatusResponse": { + "properties": { + "activeAccuracyPromptCount": { + "type": "integer", + "title": "Activeaccuracypromptcount" + }, + "hasVerificationData": { + "type": "boolean", + "title": "Hasverificationdata" + }, + "isSetupComplete": { + "type": "boolean", + "title": "Issetupcomplete" + }, + "setupCreatedAt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Setupcreatedat" + }, + "setupKnowledgeBaseId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Setupknowledgebaseid" + } + }, + "type": "object", + "required": [ + "activeAccuracyPromptCount", + "hasVerificationData", + "isSetupComplete" + ], + "title": "FactCheckSetupStatusResponse" + }, + "FieldDiff": { + "properties": { + "old": { + "title": "Old", + "description": "Previous value." + }, + "new": { + "title": "New", + "description": "New value." + } + }, + "type": "object", + "title": "FieldDiff", + "description": "Shows the old and new value for a changed field." + }, + "FilterNode": { + "properties": { + "and": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/FilterNode" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "And" + }, + "or": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/FilterNode" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Or" + }, + "not": { + "anyOf": [ + { + "$ref": "#/components/schemas/FilterNode" + }, + { + "type": "null" + } + ] + }, + "field": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Field" + }, + "op": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Op" + }, + "value": { + "title": "Value" + } + }, + "additionalProperties": false, + "type": "object", + "title": "FilterNode", + "description": "A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group." + }, + "FolderOperationResponse": { + "properties": { + "message": { + "type": "string", + "title": "Message", + "description": "Operation result message." + }, + "path": { + "type": "string", + "title": "Path", + "description": "Folder path." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "message", + "path" + ], + "title": "FolderOperationResponse" + }, + "HTTPValidationError": { + "properties": { + "detail": { + "items": { + "$ref": "#/components/schemas/ValidationError" + }, + "type": "array", + "title": "Detail" + } + }, + "type": "object", + "title": "HTTPValidationError" + }, + "HostnameFilter": { + "properties": { + "field": { + "type": "string", + "const": "hostname", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "HostnameFilter", + "description": "Filter by hostname" + }, + "IdOrName": { + "properties": { + "id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Id", + "description": "UUID of the resource." + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Name", + "description": "Display name of the resource." + } + }, + "type": "object", + "title": "IdOrName", + "description": "Reference by id, name, or both. Plain strings work too:\nUUIDs become id lookups, other strings become name lookups." + }, + "InaccuracyDriverRow": { + "properties": { + "rowId": { + "type": "string", + "title": "Rowid" + }, + "clusterId": { + "type": "string", + "title": "Clusterid" + }, + "canonicalClaim": { + "type": "string", + "title": "Canonicalclaim" + }, + "snippet": { + "type": "string", + "title": "Snippet" + }, + "snippetClaimId": { + "type": "string", + "title": "Snippetclaimid" + }, + "claimOccurrence": { + "type": "number", + "title": "Claimoccurrence" + }, + "claimOccurrenceDelta": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Claimoccurrencedelta" + }, + "href": { + "type": "string", + "title": "Href" + }, + "citationCategory": { + "type": "string", + "title": "Citationcategory" + }, + "domainCategory": { + "type": "string", + "title": "Domaincategory" + }, + "citationCount": { + "type": "integer", + "title": "Citationcount" + } + }, + "type": "object", + "required": [ + "rowId", + "clusterId", + "canonicalClaim", + "snippet", + "snippetClaimId", + "claimOccurrence", + "href", + "citationCategory", + "domainCategory", + "citationCount" + ], + "title": "InaccuracyDriverRow", + "description": "A top inaccurate claim paired with one of its most-cited pages." + }, + "InaccuracyDriversQuery": { + "properties": { + "start_date": { + "type": "string", + "title": "Start Date" + }, + "end_date": { + "type": "string", + "title": "End Date" + }, + "comparison_start_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison Start Date" + }, + "comparison_end_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison End Date" + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "topic_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Topic Ids" + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "tag_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Tag Ids" + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "all", + "any" + ], + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": true + }, + "region_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Region Ids" + }, + "platform_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Platform Ids" + }, + "persona_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Persona Ids" + }, + "include_no_persona": { + "type": "boolean", + "title": "Include No Persona", + "default": true + }, + "prompt_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Prompt Ids" + }, + "citation_categories": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Citation Categories" + }, + "limit": { + "type": "integer", + "maximum": 50, + "minimum": 1, + "title": "Limit", + "default": 5 + } + }, + "type": "object", + "required": [ + "start_date", + "end_date", + "category_id" + ], + "title": "InaccuracyDriversQuery" + }, + "InaccuracyDriversResponse": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/InaccuracyDriverRow" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "data" + ], + "title": "InaccuracyDriversResponse" + }, + "InaccurateClusterRow": { + "properties": { + "clusterId": { + "type": "string", + "title": "Clusterid" + }, + "canonicalClaim": { + "type": "string", + "title": "Canonicalclaim" + }, + "description": { + "type": "string", + "title": "Description", + "default": "" + }, + "kbPath": { + "type": "string", + "title": "Kbpath" + }, + "kbSnippet": { + "type": "string", + "title": "Kbsnippet" + }, + "reasoning": { + "type": "string", + "title": "Reasoning" + }, + "claimCount": { + "type": "integer", + "title": "Claimcount" + }, + "responseCount": { + "type": "integer", + "title": "Responsecount" + }, + "totalResponseCount": { + "type": "integer", + "title": "Totalresponsecount" + }, + "responseShare": { + "type": "number", + "title": "Responseshare" + }, + "responseShareDelta": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Responsesharedelta" + }, + "citationHostnames": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Citationhostnames" + } + }, + "type": "object", + "required": [ + "clusterId", + "canonicalClaim", + "kbPath", + "kbSnippet", + "reasoning", + "claimCount", + "responseCount", + "totalResponseCount", + "responseShare", + "citationHostnames" + ], + "title": "InaccurateClusterRow" + }, + "InaccurateClustersQuery": { + "properties": { + "start_date": { + "type": "string", + "title": "Start Date" + }, + "end_date": { + "type": "string", + "title": "End Date" + }, + "comparison_start_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison Start Date" + }, + "comparison_end_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison End Date" + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "topic_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Topic Ids" + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "tag_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Tag Ids" + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "all", + "any" + ], + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": true + }, + "region_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Region Ids" + }, + "platform_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Platform Ids" + }, + "persona_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Persona Ids" + }, + "include_no_persona": { + "type": "boolean", + "title": "Include No Persona", + "default": true + }, + "prompt_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Prompt Ids" + }, + "citation_categories": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Citation Categories" + }, + "theme_id": { + "type": "string", + "format": "uuid", + "title": "Theme Id" + }, + "limit": { + "type": "integer", + "maximum": 10000, + "minimum": 1, + "title": "Limit", + "default": 5000 + }, + "offset": { + "type": "integer", + "minimum": 0, + "title": "Offset", + "default": 0 + }, + "search_query": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Search Query" + } + }, + "type": "object", + "required": [ + "start_date", + "end_date", + "category_id", + "theme_id" + ], + "title": "InaccurateClustersQuery" + }, + "InaccurateClustersResponse": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/InaccurateClusterRow" + }, + "type": "array", + "title": "Data" + }, + "totalCount": { + "type": "integer", + "title": "Totalcount" + } + }, + "type": "object", + "required": [ + "data", + "totalCount" + ], + "title": "InaccurateClustersResponse" + }, + "InaccurateThemeRow": { + "properties": { + "themeId": { + "type": "string", + "title": "Themeid" + }, + "neutralTheme": { + "type": "string", + "title": "Neutraltheme" + }, + "description": { + "type": "string", + "title": "Description", + "default": "" + }, + "inaccurateClaimCount": { + "type": "integer", + "title": "Inaccurateclaimcount" + }, + "inaccurateClusterCount": { + "type": "integer", + "title": "Inaccurateclustercount" + }, + "totalClaimCount": { + "type": "integer", + "title": "Totalclaimcount" + }, + "totalClusterCount": { + "type": "integer", + "title": "Totalclustercount" + }, + "responseCount": { + "type": "integer", + "title": "Responsecount" + }, + "totalResponseCount": { + "type": "integer", + "title": "Totalresponsecount" + }, + "responseShare": { + "type": "number", + "title": "Responseshare" + }, + "responseShareDelta": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Responsesharedelta" + } + }, + "type": "object", + "required": [ + "themeId", + "neutralTheme", + "inaccurateClaimCount", + "inaccurateClusterCount", + "totalClaimCount", + "totalClusterCount", + "responseCount", + "totalResponseCount", + "responseShare" + ], + "title": "InaccurateThemeRow" + }, + "InaccurateThemesQuery": { + "properties": { + "start_date": { + "type": "string", + "title": "Start Date" + }, + "end_date": { + "type": "string", + "title": "End Date" + }, + "comparison_start_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison Start Date" + }, + "comparison_end_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison End Date" + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "topic_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Topic Ids" + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "tag_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Tag Ids" + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "all", + "any" + ], + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": true + }, + "region_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Region Ids" + }, + "platform_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Platform Ids" + }, + "persona_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Persona Ids" + }, + "include_no_persona": { + "type": "boolean", + "title": "Include No Persona", + "default": true + }, + "prompt_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Prompt Ids" + }, + "citation_categories": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Citation Categories" + }, + "limit": { + "type": "integer", + "minimum": 1, + "title": "Limit", + "default": 10 + }, + "offset": { + "type": "integer", + "minimum": 0, + "title": "Offset", + "default": 0 + }, + "sort_by": { + "type": "string", + "const": "response_share", + "title": "Sort By", + "default": "response_share" + }, + "sort_order": { + "type": "string", + "enum": [ + "asc", + "desc" + ], + "title": "Sort Order", + "default": "desc" + }, + "search_query": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Search Query" + } + }, + "type": "object", + "required": [ + "start_date", + "end_date", + "category_id" + ], + "title": "InaccurateThemesQuery" + }, + "InaccurateThemesResponse": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/InaccurateThemeRow" + }, + "type": "array", + "title": "Data" + }, + "totalCount": { + "type": "integer", + "title": "Totalcount" + } + }, + "type": "object", + "required": [ + "data", + "totalCount" + ], + "title": "InaccurateThemesResponse" + }, + "Info": { + "properties": { + "total_rows": { + "type": "integer", + "title": "Total Rows" + }, + "query": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Query" + } + }, + "type": "object", + "required": [ + "total_rows" + ], + "title": "Info", + "description": "Base model for report information." + }, + "KnowledgeBaseItem": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id", + "description": "Unique knowledge base ID." + }, + "name": { + "type": "string", + "title": "Name", + "description": "Knowledge base name." + }, + "slug": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Slug", + "description": "Knowledge base slug." + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "Knowledge base description." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At", + "description": "Creation timestamp." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "id", + "name", + "created_at" + ], + "title": "KnowledgeBaseItem" + }, + "KnowledgeBaseSearchResponse": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/KnowledgeBaseSearchResult" + }, + "type": "array", + "title": "Data", + "description": "Knowledge base search results." + }, + "pagination": { + "$ref": "#/components/schemas/CursorPagination", + "description": "Pagination metadata." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "data" + ], + "title": "KnowledgeBaseSearchResponse" + }, + "KnowledgeBaseSearchResult": { + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Document or chunk path." + }, + "score": { + "type": "number", + "title": "Score", + "description": "Relevance score." + }, + "metadata": { + "additionalProperties": true, + "type": "object", + "title": "Metadata", + "description": "Result metadata, including folder path." + }, + "content": { + "type": "string", + "title": "Content", + "description": "Matched content." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "id", + "score", + "metadata", + "content" + ], + "title": "KnowledgeBaseSearchResult" + }, + "ListAgentsResponse": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/Agent" + }, + "type": "array", + "title": "Data", + "description": "Agents returned for this page." + }, + "pagination": { + "$ref": "#/components/schemas/CursorPagination", + "description": "Cursor pagination details for this response." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "data" + ], + "title": "ListAgentsResponse", + "description": "Paginated list of agents." + }, + "ListAgentsStatusFilter": { + "type": "string", + "enum": [ + "published", + "draft" + ], + "title": "ListAgentsStatusFilter", + "description": "Statuses you can use to filter the list agents response." + }, + "ListKnowledgeBasesResponse": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/KnowledgeBaseItem" + }, + "type": "array", + "title": "Data", + "description": "Knowledge bases accessible to the API key." + }, + "pagination": { + "$ref": "#/components/schemas/CursorPagination", + "description": "Pagination metadata." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "data" + ], + "title": "ListKnowledgeBasesResponse" + }, + "ListNodeTypesResponse": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/NodeTypeSummary" + }, + "type": "array", + "title": "Data", + "description": "Allowlisted node types, returned as thin summaries." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "data" + ], + "title": "ListNodeTypesResponse", + "description": "List of node types available to v1 agent authors." + }, + "MerchantNameFilter": { + "properties": { + "field": { + "type": "string", + "const": "merchant_name", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "MerchantNameFilter" + }, + "ModelIdFilter": { + "properties": { + "field": { + "anyOf": [ + { + "type": "string", + "const": "model_id" + }, + { + "type": "string", + "const": "model", + "deprecated": true + } + ], + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "ModelIdFilter", + "description": "Filter by AI model/platform UUID." + }, + "NamedResource": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + } + }, + "type": "object", + "required": [ + "id", + "name" + ], + "title": "NamedResource", + "description": "Generic id+name reference used across domain boundaries." + }, + "NamedResourceDiffList": { + "properties": { + "added": { + "items": { + "$ref": "#/components/schemas/NamedResource" + }, + "type": "array", + "title": "Added", + "description": "Resources that were added.", + "default": [] + }, + "removed": { + "items": { + "$ref": "#/components/schemas/NamedResource" + }, + "type": "array", + "title": "Removed", + "description": "Resources that were removed.", + "default": [] + } + }, + "type": "object", + "title": "NamedResourceDiffList", + "description": "Shows which resources were added or removed." + }, + "NodeSchemaResponse": { + "properties": { + "node_type": { + "type": "string", + "title": "Node Type", + "description": "Stable identifier for the node type, e.g. `llm`." + }, + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Schema", + "description": "Opaque JSON Schema for the node's configuration. Treat this as an arbitrary object; its internal shape can change between `schema_version` bumps." + }, + "schema_version": { + "type": "string", + "title": "Schema Version", + "description": "Opaque version string for the node schema. Bumps whenever the underlying schema changes, so it can be used as a client-side cache key." + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "Short description of what the node type does, if provided." + }, + "examples": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Examples", + "description": "Worked example configurations for the node type, in the canonical graph dialect. These are curated guidance maintained by external-api, versioned by `docs_version` (NOT `schema_version`): they illustrate a valid shape at curation time but are a starting point, not the contract — they may lag the validator. The authoritative contract is `schema`, and the only authoritative check that a graph is valid is publishing it (or the agent-validation endpoint). Do not parse `examples` as the schema." + }, + "documentation": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Documentation", + "description": "Opaque, human-oriented authoring guidance for the node type — purpose, constraints, enum values, and variable-flow notes that the machine `schema` does not always express (e.g. a conditional's else-branch rule, or an iteration's sub-graph shape). Treat as an arbitrary object; use `docs_version` as its cache key." + }, + "docs_version": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Docs Version", + "description": "Opaque version string for `documentation`/`examples`, independent of `schema_version`. Bumps when the authoring guidance changes even if the underlying machine `schema` did not. When it trails the live `schema_version`, treat `documentation`/`examples` as guidance that may be stale and validate against the live `schema`." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "node_type", + "schema", + "schema_version" + ], + "title": "NodeSchemaResponse", + "description": "JSON schema and worked examples for a single node type." + }, + "NodeTypeSummary": { + "properties": { + "node_type": { + "type": "string", + "title": "Node Type", + "description": "Stable identifier for the node type, e.g. `llm`." + }, + "display_name": { + "type": "string", + "title": "Display Name", + "description": "Human-readable name for the node type." + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "Short description of what the node type does, if provided." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "node_type", + "display_name" + ], + "title": "NodeTypeSummary", + "description": "Thin summary for a node type available to v1 agent authors." + }, + "NumericMetricFilter": { + "properties": { + "field": { + "type": "string", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + ">", + ">=", + "<", + "<=", + "=", + "==", + "!=" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "number" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "NumericMetricFilter" + }, + "OptimizationQuery": { + "properties": { + "asset_id": { + "type": "string", + "format": "uuid", + "title": "Asset Id" + }, + "pagination": { + "$ref": "#/components/schemas/Pagination", + "description": "Pagination parameters for the results. Default is 10,000 rows with no offset." + } + }, + "type": "object", + "required": [ + "asset_id" + ], + "title": "OptimizationQuery" + }, + "OrderByDirection": { + "type": "string", + "enum": [ + "asc", + "desc" + ], + "title": "OrderByDirection" + }, + "Organization": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Name" + } + }, + "type": "object", + "required": [ + "id", + "name" + ], + "title": "Organization" + }, + "OrganizationAssetsResponse": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/CategoryAssetWithCategory" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "data" + ], + "title": "OrganizationAssetsResponse" + }, + "OrganizationPersonasWithCategory": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + }, + "persona": { + "$ref": "#/components/schemas/PersonaProfile" + }, + "category": { + "$ref": "#/components/schemas/Category" + }, + "organization": { + "$ref": "#/components/schemas/Organization" + } + }, + "type": "object", + "required": [ + "id", + "name", + "persona", + "category", + "organization" + ], + "title": "OrganizationPersonasWithCategory" + }, + "OrganizationPersonasWithCategoryResponse": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/OrganizationPersonasWithCategory" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "data" + ], + "title": "OrganizationPersonasWithCategoryResponse" + }, + "Pagination": { + "properties": { + "limit": { + "type": "integer", + "maximum": 50000, + "exclusiveMinimum": 0, + "title": "Limit", + "description": "Maximum number of results to return. Default is 10,000, maximum is 50,000.", + "default": 10000 + }, + "offset": { + "type": "integer", + "minimum": 0, + "title": "Offset", + "description": "Offset for the results. Used for pagination.", + "default": 0 + } + }, + "type": "object", + "title": "Pagination", + "description": "Offset-based pagination parameters." + }, + "PaginationInfo": { + "properties": { + "total_rows": { + "type": "integer", + "title": "Total Rows" + }, + "limit": { + "type": "integer", + "title": "Limit" + }, + "next_cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Cursor" + } + }, + "type": "object", + "required": [ + "total_rows", + "limit", + "next_cursor" + ], + "title": "PaginationInfo" + }, + "PathFilter": { + "properties": { + "field": { + "type": "string", + "const": "path", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "PathFilter", + "description": "Filter by request path" + }, + "PersonaIdFilter": { + "properties": { + "field": { + "type": "string", + "const": "persona_id", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "PersonaIdFilter", + "description": "Filter by persona UUID." + }, + "PersonaProfile": { + "properties": { + "behavior": { + "$ref": "#/components/schemas/PersonaProfileBehavior" + }, + "employment": { + "$ref": "#/components/schemas/PersonaProfileEmployment" + }, + "demographics": { + "$ref": "#/components/schemas/PersonaProfileDemographics" + } + }, + "type": "object", + "required": [ + "behavior", + "employment", + "demographics" + ], + "title": "PersonaProfile" + }, + "PersonaProfileBehavior": { + "properties": { + "painPoints": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Painpoints" + }, + "motivations": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Motivations" + } + }, + "type": "object", + "title": "PersonaProfileBehavior" + }, + "PersonaProfileDemographics": { + "properties": { + "ageRange": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Agerange" + } + }, + "type": "object", + "title": "PersonaProfileDemographics" + }, + "PersonaProfileEmployment": { + "properties": { + "industry": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Industry" + }, + "jobTitle": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Jobtitle" + }, + "companySize": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Companysize" + }, + "roleSeniority": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Roleseniority" + } + }, + "type": "object", + "title": "PersonaProfileEmployment" + }, + "ProductNameFilter": { + "properties": { + "field": { + "type": "string", + "const": "product_name", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "ProductNameFilter" + }, + "Prompt": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "analysis_types": { + "items": { + "type": "string", + "enum": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ] + }, + "type": "array", + "title": "Analysis Types", + "default": [] + }, + "prompt_type": { + "type": "string", + "title": "Prompt Type", + "default": "", + "deprecated": true + }, + "prompt": { + "type": "string", + "title": "Prompt" + }, + "language": { + "type": "string", + "title": "Language" + }, + "status": { + "type": "string", + "enum": [ + "active", + "disabled" + ], + "title": "Status" + }, + "topic": { + "$ref": "#/components/schemas/NamedResource" + }, + "tags": { + "items": { + "$ref": "#/components/schemas/NamedResource" + }, + "type": "array", + "title": "Tags", + "default": [] + }, + "regions": { + "items": { + "$ref": "#/components/schemas/NamedResource" + }, + "type": "array", + "title": "Regions" + }, + "platforms": { + "items": { + "$ref": "#/components/schemas/NamedResource" + }, + "type": "array", + "title": "Platforms" + }, + "personas": { + "items": { + "$ref": "#/components/schemas/NamedResource" + }, + "type": "array", + "title": "Personas", + "default": [] + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Updated At" + } + }, + "type": "object", + "required": [ + "id", + "prompt", + "language", + "status", + "topic", + "regions", + "platforms", + "created_at", + "updated_at" + ], + "title": "Prompt" + }, + "PromptFilter": { + "properties": { + "field": { + "type": "string", + "const": "prompt", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "PromptFilter", + "description": "Filter by prompt text" + }, + "PromptIdFilter": { + "properties": { + "field": { + "type": "string", + "const": "prompt_id", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "PromptIdFilter", + "description": "Filter by prompt UUID." + }, + "PromptInput": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + } + }, + "type": "object", + "required": [ + "id", + "name" + ], + "title": "PromptInput" + }, + "PromptPreview": { + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Generated prompt ID." + }, + "prompt": { + "type": "string", + "title": "Prompt", + "description": "The prompt text." + }, + "topic": { + "$ref": "#/components/schemas/NamedResource", + "description": "Resolved topic." + }, + "language": { + "type": "string", + "title": "Language", + "description": "Language code." + }, + "tags": { + "items": { + "$ref": "#/components/schemas/NamedResource" + }, + "type": "array", + "title": "Tags", + "description": "Resolved tags.", + "default": [] + }, + "regions": { + "items": { + "$ref": "#/components/schemas/NamedResource" + }, + "type": "array", + "title": "Regions", + "description": "Resolved regions.", + "default": [] + }, + "platforms": { + "items": { + "$ref": "#/components/schemas/NamedResource" + }, + "type": "array", + "title": "Platforms", + "description": "Resolved platforms.", + "default": [] + }, + "personas": { + "items": { + "$ref": "#/components/schemas/NamedResource" + }, + "type": "array", + "title": "Personas", + "description": "Resolved personas.", + "default": [] + }, + "analysis_types": { + "items": { + "type": "string", + "enum": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ] + }, + "type": "array", + "title": "Analysis Types", + "description": "Analysis types assigned to this prompt.", + "default": [] + }, + "asset": { + "anyOf": [ + { + "$ref": "#/components/schemas/NamedResource" + }, + { + "type": "null" + } + ], + "description": "Resolved asset, if applicable." + } + }, + "type": "object", + "required": [ + "id", + "prompt", + "topic", + "language" + ], + "title": "PromptPreview", + "description": "Preview of a prompt that was (or would be) created." + }, + "PromptType": { + "type": "string", + "enum": [ + "visibility", + "sentiment" + ], + "title": "PromptType" + }, + "PromptTypeFilter": { + "properties": { + "field": { + "type": "string", + "const": "prompt_type", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "enum": [ + "visibility", + "sentiment" + ] + }, + { + "items": { + "type": "string", + "enum": [ + "visibility", + "sentiment" + ] + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "PromptTypeFilter", + "description": "Filter by prompt type (visibility or sentiment).\n\n.. deprecated::\n Use :class:`AnalysisTypeFilter` instead. ``prompt_type`` is normalised\n to ``analysis_type`` at parse time." + }, + "PromptUpdatePreview": { + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "ID of the updated prompt." + }, + "prompt": { + "anyOf": [ + { + "$ref": "#/components/schemas/FieldDiff" + }, + { + "type": "null" + } + ], + "description": "Prompt text diff." + }, + "topic": { + "anyOf": [ + { + "$ref": "#/components/schemas/FieldDiff" + }, + { + "type": "null" + } + ], + "description": "Topic diff." + }, + "language": { + "anyOf": [ + { + "$ref": "#/components/schemas/FieldDiff" + }, + { + "type": "null" + } + ], + "description": "Language diff." + }, + "tags": { + "anyOf": [ + { + "$ref": "#/components/schemas/NamedResourceDiffList" + }, + { + "type": "null" + } + ], + "description": "Tags added and removed." + }, + "regions": { + "anyOf": [ + { + "$ref": "#/components/schemas/NamedResourceDiffList" + }, + { + "type": "null" + } + ], + "description": "Regions added and removed." + }, + "platforms": { + "anyOf": [ + { + "$ref": "#/components/schemas/NamedResourceDiffList" + }, + { + "type": "null" + } + ], + "description": "Platforms added and removed." + }, + "personas": { + "anyOf": [ + { + "$ref": "#/components/schemas/NamedResourceDiffList" + }, + { + "type": "null" + } + ], + "description": "Personas added and removed." + }, + "analysis_types": { + "anyOf": [ + { + "$ref": "#/components/schemas/FieldDiff" + }, + { + "type": "null" + } + ], + "description": "Analysis types diff." + }, + "asset": { + "anyOf": [ + { + "$ref": "#/components/schemas/FieldDiff" + }, + { + "type": "null" + } + ], + "description": "Asset diff." + } + }, + "type": "object", + "required": [ + "id" + ], + "title": "PromptUpdatePreview", + "description": "Preview of changes applied (or to be applied) to a single prompt. Only changed fields are included." + }, + "QueryFanoutsQuery": { + "properties": { + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "description": "Date interval for the report. (only used with date dimension)", + "default": "day" + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "prompt", + "query", + "model", + "region", + "date" + ] + }, + "type": "array", + "title": "Dimensions", + "description": "Dimensions to group the report by.", + "default": [] + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "fanouts_per_execution", + "total_fanouts", + "share", + "query_variations" + ] + }, + "type": "array", + "title": "Metrics" + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "propertyNames": { + "enum": [ + "fanouts_per_execution", + "total_fanouts", + "share", + "query_variations", + "date" + ] + }, + "type": "object", + "title": "Order By", + "description": "Custom ordering. Keys must be a requested metric or the ``date`` dimension. Values are ``asc`` or ``desc``. Defaults to first metric descending.", + "default": {}, + "examples": [ + { + "fanouts_per_execution": "desc" + } + ] + }, + "pagination": { + "$ref": "#/components/schemas/Pagination", + "description": "Pagination settings for the report results." + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/RegionNameFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/PromptIdFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + }, + { + "$ref": "#/components/schemas/AnalysisTypeFilter" + }, + { + "$ref": "#/components/schemas/PromptTypeFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "analysis_type": "#/components/schemas/AnalysisTypeFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "prompt_id": "#/components/schemas/PromptIdFilter", + "prompt_type": "#/components/schemas/PromptTypeFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "region_name": "#/components/schemas/RegionNameFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter" + } + } + }, + "type": "array", + "title": "Filters", + "description": "Filters to apply to the query fanout report." + } + }, + "type": "object", + "required": [ + "metrics", + "category_id", + "start_date", + "end_date" + ], + "title": "QueryFanoutsQuery" + }, + "QueryFanoutsV2Query": { + "properties": { + "category_id": { + "type": "string", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "YYYY-MM-DD, ET, inclusive" + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "YYYY-MM-DD, ET, inclusive" + }, + "group_by": { + "items": { + "type": "string", + "enum": [ + "date", + "model", + "region", + "prompt", + "query" + ] + }, + "type": "array", + "title": "Group By" + }, + "metrics": { + "anyOf": [ + { + "items": { + "type": "string", + "enum": [ + "fanouts_per_execution", + "total_fanouts", + "share", + "query_variations" + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Metrics" + }, + "interval": { + "type": "string", + "enum": [ + "day", + "week", + "month" + ], + "title": "Interval", + "default": "day" + }, + "filter": { + "anyOf": [ + { + "$ref": "#/components/schemas/FilterNode" + }, + { + "type": "null" + } + ] + }, + "sort": { + "anyOf": [ + { + "$ref": "#/components/schemas/app__routes__v2__answer_engine_insights__reports__query_fanouts__SortSpec" + }, + { + "type": "null" + } + ] + }, + "limit": { + "anyOf": [ + { + "type": "integer", + "maximum": 50, + "exclusiveMinimum": 0 + }, + { + "type": "null" + } + ], + "title": "Limit", + "description": "Page size; default 10, max 50." + }, + "max_results": { + "anyOf": [ + { + "type": "integer", + "exclusiveMinimum": 0 + }, + { + "type": "null" + } + ], + "title": "Max Results", + "description": "Stream endpoint only: cap the number of streamed rows (default: all)." + }, + "cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Cursor" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "QueryFanoutsV2Query" + }, + "Recommendation": { + "properties": { + "title": { + "type": "string", + "title": "Title" + }, + "status": { + "$ref": "#/components/schemas/RecommendationStatus" + }, + "impact": { + "anyOf": [ + { + "$ref": "#/components/schemas/RecommendationImpact" + }, + { + "type": "null" + } + ] + }, + "suggestion": { + "$ref": "#/components/schemas/RecommendationSuggestion" + } + }, + "type": "object", + "required": [ + "title", + "status", + "impact", + "suggestion" + ], + "title": "Recommendation" + }, + "RecommendationImpact": { + "properties": { + "section": { + "type": "string", + "title": "Section" + }, + "score": { + "type": "number", + "title": "Score" + } + }, + "type": "object", + "required": [ + "section", + "score" + ], + "title": "RecommendationImpact" + }, + "RecommendationStatus": { + "type": "string", + "enum": [ + "done", + "pending" + ], + "title": "RecommendationStatus" + }, + "RecommendationSuggestion": { + "properties": { + "text": { + "type": "string", + "title": "Text" + }, + "rationale": { + "type": "string", + "title": "Rationale" + } + }, + "type": "object", + "required": [ + "text", + "rationale" + ], + "title": "RecommendationSuggestion" + }, + "ReferralSourceFilter": { + "properties": { + "field": { + "type": "string", + "const": "referral_source", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "enum": [ + "openai", + "none", + "anthropic", + "deepseek", + "perplexity", + "you", + "grok", + "microsoft", + "gemini", + "internal", + "other" + ] + }, + { + "items": { + "type": "string", + "enum": [ + "openai", + "none", + "anthropic", + "deepseek", + "perplexity", + "you", + "grok", + "microsoft", + "gemini", + "internal", + "other" + ] + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "ReferralSourceFilter", + "description": "Filter by referral source" + }, + "ReferralTypeFilter": { + "properties": { + "field": { + "type": "string", + "const": "referral_type", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "enum": [ + "internal", + "referer", + "utm", + "none" + ] + }, + { + "items": { + "type": "string", + "enum": [ + "internal", + "referer", + "utm", + "none" + ] + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "ReferralTypeFilter", + "description": "Filter by referral type" + }, + "ReferralsQuery": { + "properties": { + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "year", + "relative_week" + ], + "title": "Date Interval", + "description": "Date interval for the report. (only used with date dimension)", + "default": "day" + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "date", + "path", + "referral_source" + ] + }, + "type": "array", + "title": "Dimensions", + "description": "Dimensions to group the report by.", + "default": [] + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "visits", + "last_visit" + ] + }, + "type": "array", + "title": "Metrics" + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "propertyNames": { + "enum": [ + "date", + "path", + "referral_source", + "visits", + "last_visit" + ] + }, + "type": "object", + "title": "Order By", + "description": "\nCustom ordering of the report results.\n\nThe order is a record of key-value pairs where:\n- key is the field to order by, which can be a metric or dimension\n- value is the direction of the order, either 'asc' for ascending or 'desc' for descending.\n\nWhen not specified, the default order is the first metric in the query descending.\n ", + "default": {}, + "examples": [ + { + "date": "asc" + } + ] + }, + "pagination": { + "$ref": "#/components/schemas/Pagination", + "description": "Pagination settings for the report results." + }, + "domain": { + "type": "string", + "title": "Domain", + "description": "Domain to query logs for." + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date for logs. Accepts same formats as start_date. Defaults to now if omitted." + }, + "organization_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Organization Id" + }, + "metric_filters": { + "items": { + "$ref": "#/components/schemas/NumericMetricFilter" + }, + "type": "array", + "title": "Metric Filters", + "description": "Numeric filters applied after report metrics are calculated." + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/PathFilter" + }, + { + "$ref": "#/components/schemas/ReferralSourceFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "path": "#/components/schemas/PathFilter", + "referral_source": "#/components/schemas/ReferralSourceFilter" + } + } + }, + "type": "array", + "title": "Filters", + "description": "Filters for referrals report." + } + }, + "type": "object", + "required": [ + "metrics", + "domain", + "start_date" + ], + "title": "ReferralsQuery" + }, + "ReferralsQueryV2": { + "properties": { + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "description": "Date interval for the report. (only used with date dimension)", + "default": "day" + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "date", + "hour", + "path", + "referral_source", + "referral_type" + ] + }, + "type": "array", + "title": "Dimensions", + "description": "Dimensions to group the report by.", + "default": [] + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "visits", + "last_visit" + ] + }, + "type": "array", + "title": "Metrics" + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "propertyNames": { + "enum": [ + "date", + "hour", + "path", + "referral_source", + "visits", + "last_visit", + "referral_type" + ] + }, + "type": "object", + "title": "Order By", + "description": "\nCustom ordering of the report results.\n\nThe order is a record of key-value pairs where:\n- key is the field to order by, which can be a metric or dimension\n- value is the direction of the order, either 'asc' for ascending or 'desc' for descending.\n\nWhen not specified, the default order is the first metric in the query descending.\n ", + "default": {}, + "examples": [ + { + "date": "asc" + } + ] + }, + "pagination": { + "$ref": "#/components/schemas/Pagination", + "description": "Pagination settings for the report results." + }, + "domain": { + "type": "string", + "title": "Domain", + "description": "Domain to query logs for." + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted." + }, + "organization_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Organization Id" + }, + "metric_filters": { + "items": { + "$ref": "#/components/schemas/NumericMetricFilter" + }, + "type": "array", + "title": "Metric Filters", + "description": "Numeric filters applied after report metrics are calculated." + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/PathFilter" + }, + { + "$ref": "#/components/schemas/ReferralSourceFilter" + }, + { + "$ref": "#/components/schemas/ReferralTypeFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "path": "#/components/schemas/PathFilter", + "referral_source": "#/components/schemas/ReferralSourceFilter", + "referral_type": "#/components/schemas/ReferralTypeFilter" + } + } + }, + "type": "array", + "title": "Filters", + "description": "Filters for referrals report." + } + }, + "type": "object", + "required": [ + "metrics", + "domain", + "start_date" + ], + "title": "ReferralsQueryV2" + }, + "RegionIdFilter": { + "properties": { + "field": { + "anyOf": [ + { + "type": "string", + "const": "region_id" + }, + { + "type": "string", + "const": "region", + "deprecated": true + } + ], + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "RegionIdFilter", + "description": "Filter by region UUID." + }, + "RegionNameFilter": { + "properties": { + "field": { + "type": "string", + "const": "region_name", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "RegionNameFilter", + "description": "Filter by region name." + }, + "Response": { + "properties": { + "info": { + "$ref": "#/components/schemas/Info" + }, + "data": { + "items": { + "$ref": "#/components/schemas/Result" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "info", + "data" + ], + "title": "Response", + "description": "Base response model for reports." + }, + "Result": { + "properties": { + "metrics": { + "items": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "number" + } + ] + }, + "type": "array", + "title": "Metrics" + }, + "dimensions": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "type": "array", + "title": "Dimensions" + } + }, + "type": "object", + "required": [ + "metrics", + "dimensions" + ], + "title": "Result", + "description": "Base model for report results." + }, + "RootDomainFilter": { + "properties": { + "field": { + "type": "string", + "const": "root_domain", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "RootDomainFilter", + "description": "Filter by root domain" + }, + "RunAgentRequest": { + "properties": { + "inputs": { + "additionalProperties": true, + "type": "object", + "title": "Inputs", + "description": "Input values for the run. Keys should match the property names defined in `schema.input`. Omit the request body when the agent does not require inputs." + } + }, + "additionalProperties": false, + "type": "object", + "title": "RunAgentRequest", + "description": "Request body for starting an agent run." + }, + "SearchKnowledgeBaseFilters": { + "properties": { + "tags": { + "anyOf": [ + { + "items": { + "type": "string", + "minLength": 1 + }, + "type": "array", + "minItems": 1 + }, + { + "type": "null" + } + ], + "title": "Tags", + "description": "Optional tags to match. Documents with any matching tag are included." + }, + "folders": { + "anyOf": [ + { + "items": { + "type": "string", + "minLength": 1 + }, + "type": "array", + "maxItems": 1, + "minItems": 1 + }, + { + "type": "null" + } + ], + "title": "Folders", + "description": "Optional folder paths to search within. Currently limited to one folder." + } + }, + "additionalProperties": false, + "type": "object", + "title": "SearchKnowledgeBaseFilters" + }, + "SearchKnowledgeBaseRequest": { + "properties": { + "query": { + "type": "string", + "minLength": 1, + "title": "Query", + "description": "Search query." + }, + "top_k": { + "type": "integer", + "maximum": 100, + "minimum": 1, + "title": "Top K", + "description": "Maximum number of results to return." + }, + "return_full_page": { + "type": "boolean", + "title": "Return Full Page", + "description": "Return full page content instead of snippets.", + "default": false + }, + "filters": { + "anyOf": [ + { + "$ref": "#/components/schemas/SearchKnowledgeBaseFilters" + }, + { + "type": "null" + } + ], + "description": "Optional search filters." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "query", + "top_k" + ], + "title": "SearchKnowledgeBaseRequest" + }, + "SearchQueryFilter": { + "properties": { + "field": { + "type": "string", + "const": "search_query", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "SearchQueryFilter", + "description": "Filter by web-search query string." + }, + "SentimentDataPoint": { + "properties": { + "scores": { + "$ref": "#/components/schemas/SentimentPeriodScores" + }, + "date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Date" + }, + "prev_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Prev Date" + }, + "group_ids": { + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Group Ids" + }, + "group_names": { + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Group Names" + }, + "group_metadata": { + "anyOf": [ + { + "$ref": "#/components/schemas/SentimentGroupMetadata" + }, + { + "type": "null" + } + ] + }, + "cited_website_hrefs": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Cited Website Hrefs" + }, + "total_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Total Count" + } + }, + "type": "object", + "required": [ + "scores" + ], + "title": "SentimentDataPoint" + }, + "SentimentGroupMetadata": { + "properties": { + "theme_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Theme Id" + }, + "theme": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Theme" + }, + "claim_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Claim Id" + }, + "claim": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Claim" + }, + "sentiment": { + "anyOf": [ + { + "type": "string", + "enum": [ + "positive", + "negative" + ] + }, + { + "type": "null" + } + ], + "title": "Sentiment" + }, + "prompt_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Prompt Id" + }, + "prompt_text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Prompt Text" + }, + "topic_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Topic Id" + }, + "run_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Run Id" + }, + "created_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Created At" + }, + "model_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Model Id" + }, + "region_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Region Id" + }, + "persona_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Persona Id" + }, + "asset_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Asset Name" + }, + "child_count_total": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Child Count Total" + }, + "child_count_matching": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Child Count Matching" + }, + "parent_matches_search": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Parent Matches Search" + }, + "child_matches_search": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Child Matches Search" + } + }, + "type": "object", + "title": "SentimentGroupMetadata" + }, + "SentimentPeriodScores": { + "properties": { + "current": { + "anyOf": [ + { + "$ref": "#/components/schemas/SentimentScores" + }, + { + "type": "null" + } + ] + }, + "previous": { + "anyOf": [ + { + "$ref": "#/components/schemas/SentimentScores" + }, + { + "type": "null" + } + ] + } + }, + "type": "object", + "title": "SentimentPeriodScores" + }, + "SentimentQuery": { + "properties": { + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "description": "Date interval for the report. (only used with date dimension)", + "default": "day" + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "theme", + "date", + "region", + "topic", + "topic_id", + "model", + "asset_id", + "asset_name", + "tag", + "prompt", + "prompt_id", + "sentiment_type", + "persona" + ] + }, + "type": "array", + "title": "Dimensions", + "description": "Dimensions to group the report by.", + "default": [] + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "positive", + "negative", + "occurrences" + ] + }, + "type": "array", + "title": "Metrics" + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By", + "description": "\nCustom ordering of the report results.\n\nThe order is a record of key-value pairs where:\n- key is the field to order by, which can be a metric or dimension\n- value is the direction of the order, either 'asc' for ascending or 'desc' for descending.\n\nWhen not specified, the default order is the first metric in the query descending.\n ", + "default": {}, + "examples": [ + { + "date": "asc" + } + ] + }, + "pagination": { + "$ref": "#/components/schemas/Pagination", + "description": "Pagination settings for the report results." + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/AssetIdFilter" + }, + { + "$ref": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter" + }, + { + "$ref": "#/components/schemas/ThemeFilter" + }, + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/RegionNameFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/TopicNameFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/TagNameFilter" + }, + { + "$ref": "#/components/schemas/PromptFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_id": "#/components/schemas/AssetIdFilter", + "asset_name": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "prompt": "#/components/schemas/PromptFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "region_name": "#/components/schemas/RegionNameFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "tag_name": "#/components/schemas/TagNameFilter", + "theme": "#/components/schemas/ThemeFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter", + "topic_name": "#/components/schemas/TopicNameFilter" + } + } + }, + "type": "array", + "title": "Filters", + "description": "List of filters to apply to the sentiment report." + } + }, + "type": "object", + "required": [ + "metrics", + "category_id", + "start_date", + "end_date" + ], + "title": "SentimentQuery" + }, + "SentimentScores": { + "properties": { + "positive_sentiment": { + "type": "number", + "title": "Positive Sentiment" + }, + "negative_sentiment": { + "type": "number", + "title": "Negative Sentiment" + }, + "assessment_count": { + "type": "integer", + "title": "Assessment Count" + }, + "occurrence": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Occurrence" + }, + "response_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Response Count" + }, + "total_response_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Total Response Count" + } + }, + "type": "object", + "required": [ + "positive_sentiment", + "negative_sentiment", + "assessment_count" + ], + "title": "SentimentScores" + }, + "SentimentTheme": { + "properties": { + "type": { + "anyOf": [ + { + "type": "string", + "const": "positive" + }, + { + "type": "string", + "const": "negative" + } + ], + "title": "Type" + }, + "name": { + "type": "string", + "title": "Name" + } + }, + "type": "object", + "required": [ + "type", + "name" + ], + "title": "SentimentTheme" + }, + "SentimentV2ClaimFilter": { + "properties": { + "field": { + "type": "string", + "const": "claim", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "SentimentV2ClaimFilter" + }, + "SentimentV2ClaimIdFilter": { + "properties": { + "field": { + "type": "string", + "const": "claim_id", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "SentimentV2ClaimIdFilter" + }, + "SentimentV2ModelIdFilter": { + "properties": { + "field": { + "type": "string", + "const": "model_id", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "SentimentV2ModelIdFilter" + }, + "SentimentV2PersonaIdFilter": { + "properties": { + "field": { + "type": "string", + "const": "persona_id", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "SentimentV2PersonaIdFilter" + }, + "SentimentV2PromptIdFilter": { + "properties": { + "field": { + "type": "string", + "const": "prompt_id", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "SentimentV2PromptIdFilter" + }, + "SentimentV2Query": { + "properties": { + "category_id": { + "type": "string", + "title": "Category Id" + }, + "asset": { + "type": "string", + "title": "Asset", + "description": "The brand name to analyze (sentiment is extracted on name, not id)." + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "YYYY-MM-DD, ET, inclusive" + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "YYYY-MM-DD, ET, inclusive" + }, + "comparison_start_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison Start Date", + "description": "YYYY-MM-DD, ET, inclusive (with end)." + }, + "comparison_end_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison End Date", + "description": "YYYY-MM-DD, ET, inclusive (with start)." + }, + "group_by": { + "items": { + "type": "string", + "enum": [ + "date", + "model", + "topic", + "region", + "prompt", + "persona", + "tag", + "theme", + "claim", + "run", + "competitor" + ] + }, + "type": "array", + "title": "Group By" + }, + "metrics": { + "anyOf": [ + { + "items": { + "type": "string", + "enum": [ + "positive_sentiment", + "negative_sentiment", + "occurrence" + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Metrics" + }, + "interval": { + "type": "string", + "enum": [ + "day", + "week", + "month" + ], + "title": "Interval", + "default": "day" + }, + "filter": { + "anyOf": [ + { + "$ref": "#/components/schemas/FilterNode" + }, + { + "type": "null" + } + ] + }, + "sort": { + "$ref": "#/components/schemas/app__routes__v2__answer_engine_insights__reports__sentiment__SortSpec" + }, + "include_cited_websites": { + "type": "boolean", + "title": "Include Cited Websites", + "description": "Return cited websites per row (only when grouping by `theme`/`claim`).", + "default": false + }, + "limit": { + "anyOf": [ + { + "type": "integer", + "maximum": 50, + "exclusiveMinimum": 0 + }, + { + "type": "null" + } + ], + "title": "Limit", + "description": "Page size; default 10, max 50." + }, + "max_results": { + "anyOf": [ + { + "type": "integer", + "exclusiveMinimum": 0 + }, + { + "type": "null" + } + ], + "title": "Max Results", + "description": "Stream endpoint only: cap the number of streamed rows (default: all)." + }, + "cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Cursor" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "category_id", + "asset", + "start_date", + "end_date" + ], + "title": "SentimentV2Query" + }, + "SentimentV2RegionIdFilter": { + "properties": { + "field": { + "type": "string", + "const": "region_id", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "SentimentV2RegionIdFilter" + }, + "SentimentV2ReportInfo": { + "properties": { + "query": { + "additionalProperties": true, + "type": "object", + "title": "Query" + }, + "total_rows": { + "type": "integer", + "title": "Total Rows" + } + }, + "type": "object", + "required": [ + "query", + "total_rows" + ], + "title": "SentimentV2ReportInfo" + }, + "SentimentV2ReportQuery": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "asset_name": { + "type": "string", + "title": "Asset Name" + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + }, + "comparison_start_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Comparison Start Date", + "description": "Start of the previous period for delta computation." + }, + "comparison_end_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Comparison End Date", + "description": "End of the previous period for delta computation." + }, + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "description": "Date interval for the report. Only used when dimensions includes date.", + "default": "day" + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "date", + "topic", + "region", + "model", + "prompt", + "persona", + "tag", + "theme", + "claim", + "run", + "asset_name" + ] + }, + "type": "array", + "title": "Dimensions", + "description": "Dimensions to group the report by." + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "sentiment", + "occurrence" + ] + }, + "type": "array", + "title": "Metrics" + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/SentimentV2ModelIdFilter" + }, + { + "$ref": "#/components/schemas/SentimentV2RegionIdFilter" + }, + { + "$ref": "#/components/schemas/SentimentV2TopicIdFilter" + }, + { + "$ref": "#/components/schemas/SentimentV2PromptIdFilter" + }, + { + "$ref": "#/components/schemas/SentimentV2PersonaIdFilter" + }, + { + "$ref": "#/components/schemas/SentimentV2TagIdFilter" + }, + { + "$ref": "#/components/schemas/SentimentV2RunIdFilter" + }, + { + "$ref": "#/components/schemas/SentimentV2ThemeIdFilter" + }, + { + "$ref": "#/components/schemas/SentimentV2ThemeFilter" + }, + { + "$ref": "#/components/schemas/SentimentV2ClaimIdFilter" + }, + { + "$ref": "#/components/schemas/SentimentV2ClaimFilter" + }, + { + "$ref": "#/components/schemas/SentimentV2SentimentFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "claim": "#/components/schemas/SentimentV2ClaimFilter", + "claim_id": "#/components/schemas/SentimentV2ClaimIdFilter", + "model_id": "#/components/schemas/SentimentV2ModelIdFilter", + "persona_id": "#/components/schemas/SentimentV2PersonaIdFilter", + "prompt_id": "#/components/schemas/SentimentV2PromptIdFilter", + "region_id": "#/components/schemas/SentimentV2RegionIdFilter", + "run_id": "#/components/schemas/SentimentV2RunIdFilter", + "sentiment": "#/components/schemas/SentimentV2SentimentFilter", + "tag_id": "#/components/schemas/SentimentV2TagIdFilter", + "theme": "#/components/schemas/SentimentV2ThemeFilter", + "theme_id": "#/components/schemas/SentimentV2ThemeIdFilter", + "topic_id": "#/components/schemas/SentimentV2TopicIdFilter" + } + } + }, + "type": "array", + "title": "Filters", + "description": "List of filters to apply to the sentiment-v2 report." + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "propertyNames": { + "enum": [ + "sentiment", + "occurrence", + "assessment_count", + "positive_sentiment", + "negative_sentiment", + "date", + "topic", + "region", + "model", + "prompt", + "persona", + "tag", + "theme", + "claim", + "run", + "asset_name" + ] + }, + "type": "object", + "title": "Order By", + "description": "Custom ordering of report results. Dimension keys must also be present in dimensions. The sentiment metric orders by positive_sentiment.", + "examples": [ + { + "occurrence": "desc" + } + ] + }, + "pagination": { + "$ref": "#/components/schemas/Pagination", + "description": "Pagination settings for the report results." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "category_id", + "asset_name", + "start_date", + "end_date", + "metrics" + ], + "title": "SentimentV2ReportQuery" + }, + "SentimentV2ReportResponse": { + "properties": { + "info": { + "$ref": "#/components/schemas/SentimentV2ReportInfo" + }, + "data": { + "items": { + "$ref": "#/components/schemas/SentimentDataPoint" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "info" + ], + "title": "SentimentV2ReportResponse" + }, + "SentimentV2RunIdFilter": { + "properties": { + "field": { + "type": "string", + "const": "run_id", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "SentimentV2RunIdFilter" + }, + "SentimentV2SentimentFilter": { + "properties": { + "field": { + "type": "string", + "const": "sentiment", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "enum": [ + "positive", + "negative" + ] + }, + { + "items": { + "type": "string", + "enum": [ + "positive", + "negative" + ] + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "SentimentV2SentimentFilter" + }, + "SentimentV2TagIdFilter": { + "properties": { + "field": { + "type": "string", + "const": "tag_id", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "SentimentV2TagIdFilter" + }, + "SentimentV2ThemeFilter": { + "properties": { + "field": { + "type": "string", + "const": "theme", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "SentimentV2ThemeFilter" + }, + "SentimentV2ThemeIdFilter": { + "properties": { + "field": { + "type": "string", + "const": "theme_id", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "SentimentV2ThemeIdFilter" + }, + "SentimentV2TopicIdFilter": { + "properties": { + "field": { + "type": "string", + "const": "topic_id", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "SentimentV2TopicIdFilter" + }, + "ShoppingAllItemsWithMerchantsQuery": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "comparison_start_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Comparison Start Date" + }, + "comparison_end_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Comparison End Date" + }, + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "default": "day" + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/PromptIdFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + }, + { + "$ref": "#/components/schemas/BrandNameFilter" + }, + { + "$ref": "#/components/schemas/MerchantNameFilter" + }, + { + "$ref": "#/components/schemas/ProductNameFilter" + }, + { + "$ref": "#/components/schemas/profound_shopping__api__AssetNameFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "#/components/schemas/profound_shopping__api__AssetNameFilter", + "brand_name": "#/components/schemas/BrandNameFilter", + "merchant_name": "#/components/schemas/MerchantNameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "product_name": "#/components/schemas/ProductNameFilter", + "prompt_id": "#/components/schemas/PromptIdFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter" + } + } + }, + "type": "array", + "title": "Filters" + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By" + }, + "pagination": { + "anyOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { + "type": "null" + } + ] + }, + "include_count": { + "type": "boolean", + "title": "Include Count", + "default": false + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "any", + "all" + ], + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": false + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "period", + "product_name", + "brand_name", + "product_url", + "product_image_urls", + "product_price", + "merchant_names", + "merchant_prices" + ] + }, + "type": "array", + "title": "Dimensions" + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "visibility_score", + "share_of_voice", + "average_position", + "visibility_rank", + "product_rating", + "product_num_reviews", + "total_count" + ] + }, + "type": "array", + "title": "Metrics" + }, + "owned_asset_names": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Owned Asset Names" + }, + "include_items": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Include Items" + }, + "search_item": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Search Item" + }, + "merchant_filter_type": { + "type": "string", + "enum": [ + "any", + "all" + ], + "title": "Merchant Filter Type", + "default": "any" + }, + "rank_by": { + "type": "string", + "enum": [ + "visibility", + "average_position", + "name" + ], + "title": "Rank By", + "default": "visibility" + }, + "sort_order": { + "type": "string", + "enum": [ + "asc", + "desc" + ], + "title": "Sort Order", + "default": "desc" + } + }, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "ShoppingAllItemsWithMerchantsQuery" + }, + "ShoppingExecutionsQuery": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "comparison_start_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Comparison Start Date" + }, + "comparison_end_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Comparison End Date" + }, + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "default": "day" + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/PromptIdFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + }, + { + "$ref": "#/components/schemas/BrandNameFilter" + }, + { + "$ref": "#/components/schemas/MerchantNameFilter" + }, + { + "$ref": "#/components/schemas/ProductNameFilter" + }, + { + "$ref": "#/components/schemas/profound_shopping__api__AssetNameFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "#/components/schemas/profound_shopping__api__AssetNameFilter", + "brand_name": "#/components/schemas/BrandNameFilter", + "merchant_name": "#/components/schemas/MerchantNameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "product_name": "#/components/schemas/ProductNameFilter", + "prompt_id": "#/components/schemas/PromptIdFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter" + } + } + }, + "type": "array", + "title": "Filters" + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By" + }, + "pagination": { + "anyOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { + "type": "null" + } + ] + }, + "include_count": { + "type": "boolean", + "title": "Include Count", + "default": false + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "any", + "all" + ], + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": false + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "analysis_types": { + "items": { + "type": "string", + "enum": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ] + }, + "type": "array", + "title": "Analysis Types" + }, + "analysis_filter_type": { + "type": "string", + "enum": [ + "any", + "all" + ], + "title": "Analysis Filter Type", + "default": "any" + }, + "owned_asset_names": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Owned Asset Names" + } + }, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "ShoppingExecutionsQuery" + }, + "ShoppingItemVisibilityQuery": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "comparison_start_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Comparison Start Date" + }, + "comparison_end_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Comparison End Date" + }, + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "default": "day" + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/PromptIdFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + }, + { + "$ref": "#/components/schemas/BrandNameFilter" + }, + { + "$ref": "#/components/schemas/MerchantNameFilter" + }, + { + "$ref": "#/components/schemas/ProductNameFilter" + }, + { + "$ref": "#/components/schemas/profound_shopping__api__AssetNameFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "#/components/schemas/profound_shopping__api__AssetNameFilter", + "brand_name": "#/components/schemas/BrandNameFilter", + "merchant_name": "#/components/schemas/MerchantNameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "product_name": "#/components/schemas/ProductNameFilter", + "prompt_id": "#/components/schemas/PromptIdFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter" + } + } + }, + "type": "array", + "title": "Filters" + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By" + }, + "pagination": { + "anyOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { + "type": "null" + } + ] + }, + "include_count": { + "type": "boolean", + "title": "Include Count", + "default": false + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "any", + "all" + ], + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": false + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "period", + "product_name", + "brand_name", + "date", + "topic_id", + "prompt_id", + "prompt", + "product_url", + "product_image_urls", + "product_price" + ] + }, + "type": "array", + "title": "Dimensions" + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "visibility_score", + "share_of_voice", + "average_position", + "visibility_rank", + "position1_percentage", + "position2_percentage", + "position3_percentage", + "position_above3_percentage", + "product_rating", + "product_num_reviews", + "total_count" + ] + }, + "type": "array", + "title": "Metrics" + }, + "owned_asset_names": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Owned Asset Names" + }, + "include_items": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Include Items" + }, + "search_item": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Search Item" + }, + "merchant_filter_type": { + "type": "string", + "enum": [ + "any", + "all" + ], + "title": "Merchant Filter Type", + "default": "any" + }, + "include_competitors": { + "type": "boolean", + "title": "Include Competitors", + "default": false + }, + "target_product": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Target Product" + }, + "competitor_limit": { + "type": "integer", + "minimum": 1, + "title": "Competitor Limit", + "default": 5 + }, + "include_position_frequency": { + "type": "boolean", + "title": "Include Position Frequency", + "default": false + } + }, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "ShoppingItemVisibilityQuery" + }, + "ShoppingMerchantByItemsQuery": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "comparison_start_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Comparison Start Date" + }, + "comparison_end_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Comparison End Date" + }, + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "default": "day" + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/PromptIdFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + }, + { + "$ref": "#/components/schemas/BrandNameFilter" + }, + { + "$ref": "#/components/schemas/MerchantNameFilter" + }, + { + "$ref": "#/components/schemas/ProductNameFilter" + }, + { + "$ref": "#/components/schemas/profound_shopping__api__AssetNameFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "#/components/schemas/profound_shopping__api__AssetNameFilter", + "brand_name": "#/components/schemas/BrandNameFilter", + "merchant_name": "#/components/schemas/MerchantNameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "product_name": "#/components/schemas/ProductNameFilter", + "prompt_id": "#/components/schemas/PromptIdFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter" + } + } + }, + "type": "array", + "title": "Filters" + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By" + }, + "pagination": { + "anyOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { + "type": "null" + } + ] + }, + "include_count": { + "type": "boolean", + "title": "Include Count", + "default": false + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "any", + "all" + ], + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": false + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "period", + "merchant_name", + "product_name", + "brand_name", + "product_image_urls", + "product_price", + "merchant_prices", + "has_instant_checkout", + "delivery_options", + "merchant_url" + ] + }, + "type": "array", + "title": "Dimensions" + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "merchant_visibility", + "product_visibility", + "product_rank", + "avg_position", + "total_count" + ] + }, + "type": "array", + "title": "Metrics" + }, + "product_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Product Name" + } + }, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "ShoppingMerchantByItemsQuery" + }, + "ShoppingMerchantDistributionQuery": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "comparison_start_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Comparison Start Date" + }, + "comparison_end_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Comparison End Date" + }, + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "default": "day" + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/PromptIdFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + }, + { + "$ref": "#/components/schemas/BrandNameFilter" + }, + { + "$ref": "#/components/schemas/MerchantNameFilter" + }, + { + "$ref": "#/components/schemas/ProductNameFilter" + }, + { + "$ref": "#/components/schemas/profound_shopping__api__AssetNameFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "#/components/schemas/profound_shopping__api__AssetNameFilter", + "brand_name": "#/components/schemas/BrandNameFilter", + "merchant_name": "#/components/schemas/MerchantNameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "product_name": "#/components/schemas/ProductNameFilter", + "prompt_id": "#/components/schemas/PromptIdFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter" + } + } + }, + "type": "array", + "title": "Filters" + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By" + }, + "pagination": { + "anyOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { + "type": "null" + } + ] + }, + "include_count": { + "type": "boolean", + "title": "Include Count", + "default": false + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "any", + "all" + ], + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": false + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "period", + "merchant_name", + "date", + "owned_asset_name" + ] + }, + "type": "array", + "title": "Dimensions" + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "offer_count", + "product_count", + "average_rank", + "share_of_offers", + "visibility_rank", + "total_count" + ] + }, + "type": "array", + "title": "Metrics" + }, + "owned_asset_names": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Owned Asset Names" + }, + "search_merchant": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Search Merchant" + } + }, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "ShoppingMerchantDistributionQuery" + }, + "ShoppingMerchantShareQuery": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "comparison_start_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Comparison Start Date" + }, + "comparison_end_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Comparison End Date" + }, + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "default": "day" + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/PromptIdFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + }, + { + "$ref": "#/components/schemas/BrandNameFilter" + }, + { + "$ref": "#/components/schemas/MerchantNameFilter" + }, + { + "$ref": "#/components/schemas/ProductNameFilter" + }, + { + "$ref": "#/components/schemas/profound_shopping__api__AssetNameFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "#/components/schemas/profound_shopping__api__AssetNameFilter", + "brand_name": "#/components/schemas/BrandNameFilter", + "merchant_name": "#/components/schemas/MerchantNameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "product_name": "#/components/schemas/ProductNameFilter", + "prompt_id": "#/components/schemas/PromptIdFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter" + } + } + }, + "type": "array", + "title": "Filters" + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By" + }, + "pagination": { + "anyOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { + "type": "null" + } + ] + }, + "include_count": { + "type": "boolean", + "title": "Include Count", + "default": false + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "any", + "all" + ], + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": false + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "period", + "topic_id", + "prompt_id" + ] + }, + "type": "array", + "title": "Dimensions" + }, + "metrics": { + "items": { + "type": "string", + "const": "merchant_share" + }, + "type": "array", + "title": "Metrics" + }, + "target_asset_names": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Target Asset Names" + }, + "owned_asset_names": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Owned Asset Names" + } + }, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "ShoppingMerchantShareQuery" + }, + "ShoppingMerchantVisibilityByBrandQuery": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "comparison_start_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Comparison Start Date" + }, + "comparison_end_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Comparison End Date" + }, + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "default": "day" + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/PromptIdFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + }, + { + "$ref": "#/components/schemas/BrandNameFilter" + }, + { + "$ref": "#/components/schemas/MerchantNameFilter" + }, + { + "$ref": "#/components/schemas/ProductNameFilter" + }, + { + "$ref": "#/components/schemas/profound_shopping__api__AssetNameFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "#/components/schemas/profound_shopping__api__AssetNameFilter", + "brand_name": "#/components/schemas/BrandNameFilter", + "merchant_name": "#/components/schemas/MerchantNameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "product_name": "#/components/schemas/ProductNameFilter", + "prompt_id": "#/components/schemas/PromptIdFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter" + } + } + }, + "type": "array", + "title": "Filters" + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By" + }, + "pagination": { + "anyOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { + "type": "null" + } + ] + }, + "include_count": { + "type": "boolean", + "title": "Include Count", + "default": false + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "any", + "all" + ], + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": false + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "period", + "merchant_name", + "brand_name" + ] + }, + "type": "array", + "title": "Dimensions" + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "visibility_score", + "share_of_voice", + "average_position", + "visibility_rank", + "total_count" + ] + }, + "type": "array", + "title": "Metrics" + }, + "owned_asset_names": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Owned Asset Names" + }, + "search_brand": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Search Brand" + }, + "include_brand": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Include Brand" + }, + "include_brand_only": { + "type": "boolean", + "title": "Include Brand Only", + "default": false + } + }, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "ShoppingMerchantVisibilityByBrandQuery" + }, + "ShoppingProductMerchantUrlsQuery": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "product_names": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Product Names" + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date" + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date" + } + }, + "type": "object", + "required": [ + "category_id", + "product_names", + "start_date", + "end_date" + ], + "title": "ShoppingProductMerchantUrlsQuery" + }, + "ShoppingRowsResponse": { + "properties": { + "info": { + "$ref": "#/components/schemas/Info" + }, + "data": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "info", + "data" + ], + "title": "ShoppingRowsResponse" + }, + "ShoppingTriggerRateQuery": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "comparison_start_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Comparison Start Date" + }, + "comparison_end_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Comparison End Date" + }, + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "default": "day" + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/PromptIdFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + }, + { + "$ref": "#/components/schemas/BrandNameFilter" + }, + { + "$ref": "#/components/schemas/MerchantNameFilter" + }, + { + "$ref": "#/components/schemas/ProductNameFilter" + }, + { + "$ref": "#/components/schemas/profound_shopping__api__AssetNameFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "#/components/schemas/profound_shopping__api__AssetNameFilter", + "brand_name": "#/components/schemas/BrandNameFilter", + "merchant_name": "#/components/schemas/MerchantNameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "product_name": "#/components/schemas/ProductNameFilter", + "prompt_id": "#/components/schemas/PromptIdFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter" + } + } + }, + "type": "array", + "title": "Filters" + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By" + }, + "pagination": { + "anyOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { + "type": "null" + } + ] + }, + "include_count": { + "type": "boolean", + "title": "Include Count", + "default": false + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "any", + "all" + ], + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": false + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "period", + "date", + "model_id", + "topic_id", + "region_id", + "persona_id", + "prompt_id", + "prompt" + ] + }, + "type": "array", + "title": "Dimensions" + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "total_runs", + "shopping_triggered_runs", + "trigger_rate_percentage" + ] + }, + "type": "array", + "title": "Metrics" + } + }, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "ShoppingTriggerRateQuery" + }, + "ShoppingVisibilityQuery": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "comparison_start_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Comparison Start Date" + }, + "comparison_end_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Comparison End Date" + }, + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "default": "day" + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/PromptIdFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + }, + { + "$ref": "#/components/schemas/BrandNameFilter" + }, + { + "$ref": "#/components/schemas/MerchantNameFilter" + }, + { + "$ref": "#/components/schemas/ProductNameFilter" + }, + { + "$ref": "#/components/schemas/profound_shopping__api__AssetNameFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "#/components/schemas/profound_shopping__api__AssetNameFilter", + "brand_name": "#/components/schemas/BrandNameFilter", + "merchant_name": "#/components/schemas/MerchantNameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "product_name": "#/components/schemas/ProductNameFilter", + "prompt_id": "#/components/schemas/PromptIdFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter" + } + } + }, + "type": "array", + "title": "Filters" + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By" + }, + "pagination": { + "anyOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { + "type": "null" + } + ] + }, + "include_count": { + "type": "boolean", + "title": "Include Count", + "default": false + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "any", + "all" + ], + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": false + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "period", + "asset_name", + "date", + "model_id", + "topic_id", + "region_id", + "prompt_id", + "prompt" + ] + }, + "type": "array", + "title": "Dimensions" + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "visibility_score", + "share_of_voice", + "average_position", + "visibility_rank", + "average_position_rank", + "position1_percentage", + "position2_percentage", + "position3_percentage", + "position_above3_percentage", + "total_count" + ] + }, + "type": "array", + "title": "Metrics" + }, + "owned_asset_names": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Owned Asset Names" + }, + "search_asset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Search Asset" + }, + "include_asset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Include Asset" + }, + "include_asset_only": { + "type": "boolean", + "title": "Include Asset Only", + "default": false + }, + "include_assets_only": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Include Assets Only" + }, + "rank_by": { + "type": "string", + "enum": [ + "visibility_score", + "average_position" + ], + "title": "Rank By", + "default": "visibility_score" + }, + "include_position_frequency": { + "type": "boolean", + "title": "Include Position Frequency", + "default": false + } + }, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "ShoppingVisibilityQuery" + }, + "StreamCitationsQuery": { + "properties": { + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "description": "Date interval for the report. (only used with date dimension)", + "default": "day" + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "hostname", + "path", + "date", + "region", + "topic", + "topic_id", + "model", + "tag", + "prompt", + "prompt_id", + "url", + "root_domain", + "persona", + "citation_category" + ] + }, + "type": "array", + "title": "Dimensions", + "description": "Dimensions to group the report by.", + "default": [] + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "count", + "citation_share", + "share_of_voice", + "first_cited_at" + ] + }, + "type": "array", + "title": "Metrics", + "description": "Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead.", + "deprecated_values": { + "share_of_voice": "Use citation_share instead" + } + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By", + "description": "\n Custom ordering of the report results.\n\n The order is a record of key-value pairs where:\n - `key` is the field to order by, which can be a metric or dimension\n - `value` is the direction of the order, either `asc` for ascending or `desc` for descending.\n\n When not specified, the default order is the first metric in the query descending.\n ", + "default": {}, + "examples": [ + { + "date": "asc" + }, + { + "count": "desc", + "date": "asc" + } + ] + }, + "pagination": { + "anyOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { + "type": "null" + } + ] + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/HostnameFilter" + }, + { + "$ref": "#/components/schemas/PathFilter" + }, + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/RegionNameFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/TopicNameFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/TagNameFilter" + }, + { + "$ref": "#/components/schemas/UrlFilter" + }, + { + "$ref": "#/components/schemas/RootDomainFilter" + }, + { + "$ref": "#/components/schemas/AnalysisTypeFilter" + }, + { + "$ref": "#/components/schemas/PromptTypeFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + }, + { + "$ref": "#/components/schemas/CitationCategoryFilter" + }, + { + "$ref": "#/components/schemas/PromptFilter" + }, + { + "$ref": "#/components/schemas/PromptIdFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "analysis_type": "#/components/schemas/AnalysisTypeFilter", + "citation_category": "#/components/schemas/CitationCategoryFilter", + "hostname": "#/components/schemas/HostnameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "path": "#/components/schemas/PathFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "prompt": "#/components/schemas/PromptFilter", + "prompt_id": "#/components/schemas/PromptIdFilter", + "prompt_type": "#/components/schemas/PromptTypeFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "region_name": "#/components/schemas/RegionNameFilter", + "root_domain": "#/components/schemas/RootDomainFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "tag_name": "#/components/schemas/TagNameFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter", + "topic_name": "#/components/schemas/TopicNameFilter", + "url": "#/components/schemas/UrlFilter" + } + } + }, + "type": "array", + "title": "Filters", + "description": "List of filters to apply to the citations report." + } + }, + "type": "object", + "required": [ + "metrics", + "category_id", + "start_date", + "end_date" + ], + "title": "StreamCitationsQuery" + }, + "StreamSentimentQuery": { + "properties": { + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "description": "Date interval for the report. (only used with date dimension)", + "default": "day" + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "theme", + "date", + "region", + "topic", + "topic_id", + "model", + "asset_id", + "asset_name", + "tag", + "prompt", + "prompt_id", + "sentiment_type", + "persona" + ] + }, + "type": "array", + "title": "Dimensions", + "description": "Dimensions to group the report by.", + "default": [] + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "positive", + "negative", + "occurrences" + ] + }, + "type": "array", + "title": "Metrics" + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By", + "description": "\nCustom ordering of the report results.\n\nThe order is a record of key-value pairs where:\n- key is the field to order by, which can be a metric or dimension\n- value is the direction of the order, either 'asc' for ascending or 'desc' for descending.\n\nWhen not specified, the default order is the first metric in the query descending.\n ", + "default": {}, + "examples": [ + { + "date": "asc" + } + ] + }, + "pagination": { + "anyOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { + "type": "null" + } + ] + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/AssetIdFilter" + }, + { + "$ref": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter" + }, + { + "$ref": "#/components/schemas/ThemeFilter" + }, + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/RegionNameFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/TopicNameFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/TagNameFilter" + }, + { + "$ref": "#/components/schemas/PromptFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_id": "#/components/schemas/AssetIdFilter", + "asset_name": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "prompt": "#/components/schemas/PromptFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "region_name": "#/components/schemas/RegionNameFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "tag_name": "#/components/schemas/TagNameFilter", + "theme": "#/components/schemas/ThemeFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter", + "topic_name": "#/components/schemas/TopicNameFilter" + } + } + }, + "type": "array", + "title": "Filters", + "description": "List of filters to apply to the sentiment report." + } + }, + "type": "object", + "required": [ + "metrics", + "category_id", + "start_date", + "end_date" + ], + "title": "StreamSentimentQuery" + }, + "StreamVisibilityQuery": { + "properties": { + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "description": "Date interval for the report. (only used with date dimension)", + "default": "day" + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "date", + "region", + "topic", + "topic_id", + "model", + "asset_id", + "asset_name", + "prompt", + "prompt_id", + "tag", + "persona" + ] + }, + "type": "array", + "title": "Dimensions", + "description": "Dimensions to group the report by.", + "default": [] + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "share_of_voice", + "mentions_count", + "visibility_score", + "executions", + "average_position" + ] + }, + "type": "array", + "title": "Metrics" + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By", + "description": "\nCustom ordering of the report results.\n\nThe order is a record of key-value pairs where:\n- key is the field to order by, which can be a metric or dimension\n- value is the direction of the order, either 'asc' for ascending or 'desc' for descending.\n\nWhen not specified, the default order is the first metric in the query descending.\n ", + "default": {}, + "examples": [ + { + "date": "asc" + } + ] + }, + "pagination": { + "anyOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { + "type": "null" + } + ] + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/RegionNameFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/TopicNameFilter" + }, + { + "$ref": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/TagNameFilter" + }, + { + "$ref": "#/components/schemas/PromptIdFilter" + }, + { + "$ref": "#/components/schemas/PromptFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "prompt": "#/components/schemas/PromptFilter", + "prompt_id": "#/components/schemas/PromptIdFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "region_name": "#/components/schemas/RegionNameFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "tag_name": "#/components/schemas/TagNameFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter", + "topic_name": "#/components/schemas/TopicNameFilter" + } + } + }, + "type": "array", + "title": "Filters", + "description": "List of filters to apply to the visibility report." + } + }, + "type": "object", + "required": [ + "metrics", + "category_id", + "start_date", + "end_date" + ], + "title": "StreamVisibilityQuery" + }, + "StreamWebSearchResultsQuery": { + "properties": { + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "description": "Date interval for the report. (only used with date dimension)", + "default": "day" + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "hostname", + "path", + "url", + "root_domain", + "date", + "region", + "topic", + "topic_id", + "model", + "tag", + "prompt", + "prompt_id", + "persona", + "search_query" + ] + }, + "type": "array", + "title": "Dimensions", + "description": "Dimensions to group the report by.", + "default": [] + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "count", + "search_share" + ] + }, + "type": "array", + "minItems": 1, + "title": "Metrics", + "description": "Metrics to include. `search_share` is the per-prompt occurrence rate." + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By", + "description": "\n Custom ordering of the report results.\n\n The order is a record of key-value pairs where:\n - `key` is the field to order by, which can be a metric or dimension\n - `value` is the direction of the order, either `asc` for ascending or `desc` for descending.\n\n When not specified, the default order is the first metric in the query descending.\n ", + "default": {}, + "examples": [ + { + "date": "asc" + }, + { + "count": "desc", + "date": "asc" + } + ] + }, + "pagination": { + "anyOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { + "type": "null" + } + ] + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/HostnameFilter" + }, + { + "$ref": "#/components/schemas/PathFilter" + }, + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/UrlFilter" + }, + { + "$ref": "#/components/schemas/RootDomainFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + }, + { + "$ref": "#/components/schemas/PromptFilter" + }, + { + "$ref": "#/components/schemas/PromptIdFilter" + }, + { + "$ref": "#/components/schemas/SearchQueryFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "hostname": "#/components/schemas/HostnameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "path": "#/components/schemas/PathFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "prompt": "#/components/schemas/PromptFilter", + "prompt_id": "#/components/schemas/PromptIdFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "root_domain": "#/components/schemas/RootDomainFilter", + "search_query": "#/components/schemas/SearchQueryFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter", + "url": "#/components/schemas/UrlFilter" + } + } + }, + "type": "array", + "title": "Filters", + "description": "List of filters to apply to the web search results report." + } + }, + "type": "object", + "required": [ + "metrics", + "category_id", + "start_date", + "end_date" + ], + "title": "StreamWebSearchResultsQuery" + }, + "Tag": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + } + }, + "type": "object", + "required": [ + "id", + "name" + ], + "title": "Tag" + }, + "TagIdFilter": { + "properties": { + "field": { + "anyOf": [ + { + "type": "string", + "const": "tag_id" + }, + { + "type": "string", + "const": "tag", + "deprecated": true + } + ], + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "TagIdFilter", + "description": "Filter by tag (prompt group) UUID." + }, + "TagNameFilter": { + "properties": { + "field": { + "type": "string", + "const": "tag_name", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "TagNameFilter", + "description": "Filter by tag name." + }, + "ThemeFilter": { + "properties": { + "field": { + "type": "string", + "const": "theme", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "ThemeFilter", + "description": "Filter by theme" + }, + "TopInaccurateClaimRow": { + "properties": { + "clusterId": { + "type": "string", + "title": "Clusterid" + }, + "canonicalClaim": { + "type": "string", + "title": "Canonicalclaim" + }, + "claimOccurrence": { + "type": "number", + "title": "Claimoccurrence" + }, + "claimOccurrenceDelta": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Claimoccurrencedelta" + } + }, + "type": "object", + "required": [ + "clusterId", + "canonicalClaim", + "claimOccurrence" + ], + "title": "TopInaccurateClaimRow" + }, + "TopInaccurateClaimsQuery": { + "properties": { + "start_date": { + "type": "string", + "title": "Start Date" + }, + "end_date": { + "type": "string", + "title": "End Date" + }, + "comparison_start_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison Start Date" + }, + "comparison_end_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison End Date" + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "topic_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Topic Ids" + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "tag_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Tag Ids" + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "all", + "any" + ], + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": true + }, + "region_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Region Ids" + }, + "platform_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Platform Ids" + }, + "persona_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Persona Ids" + }, + "include_no_persona": { + "type": "boolean", + "title": "Include No Persona", + "default": true + }, + "prompt_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Prompt Ids" + }, + "citation_categories": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Citation Categories" + }, + "limit": { + "type": "integer", + "maximum": 50, + "minimum": 1, + "title": "Limit", + "default": 5 + } + }, + "type": "object", + "required": [ + "start_date", + "end_date", + "category_id" + ], + "title": "TopInaccurateClaimsQuery" + }, + "TopInaccurateClaimsResponse": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/TopInaccurateClaimRow" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "data" + ], + "title": "TopInaccurateClaimsResponse" + }, + "Topic": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + }, + "status": { + "type": "string", + "enum": [ + "active", + "disabled" + ], + "title": "Status" + } + }, + "type": "object", + "required": [ + "id", + "name", + "status" + ], + "title": "Topic" + }, + "TopicIdFilter": { + "properties": { + "field": { + "anyOf": [ + { + "type": "string", + "const": "topic_id" + }, + { + "type": "string", + "const": "topic", + "deprecated": true + } + ], + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "TopicIdFilter", + "description": "Filter by topic UUID." + }, + "TopicInput": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + } + }, + "type": "object", + "required": [ + "id", + "name" + ], + "title": "TopicInput" + }, + "TopicNameFilter": { + "properties": { + "field": { + "type": "string", + "const": "topic_name", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "TopicNameFilter", + "description": "Filter by topic name" + }, + "UpdateAgentRequest": { + "properties": { + "graph": { + "additionalProperties": true, + "type": "object", + "title": "Graph", + "description": "New workflow graph for the agent's draft version. Replaces the current draft graph; the agent is iterated in place rather than re-created, so its ID is stable. Required — a null graph is rejected as a 422 here rather than as a relayed upstream error." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "graph" + ], + "title": "UpdateAgentRequest", + "description": "Request body for updating a draft agent's graph in place." + }, + "UpdatePromptInput": { + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "ID of the prompt to update." + }, + "prompt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Prompt", + "description": "New prompt text." + }, + "topic": { + "anyOf": [ + { + "$ref": "#/components/schemas/IdOrName" + }, + { + "type": "null" + } + ], + "description": "New topic. A new topic is created if the name doesn't exist." + }, + "language": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Language", + "description": "New language code. Must be enabled for the organization." + }, + "tags": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/IdOrName" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Tags", + "description": "New tag set. Replaces all existing tags on the prompt." + }, + "regions": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/IdOrName" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Regions", + "description": "New region set. Replaces all existing regions." + }, + "platforms": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/IdOrName" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Platforms", + "description": "New platform set. Replaces all existing platforms." + }, + "personas": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/IdOrName" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Personas", + "description": "New persona set. Replaces all existing personas." + }, + "analysis_types": { + "anyOf": [ + { + "items": { + "type": "string", + "enum": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Analysis Types", + "description": "New analysis types. Replaces all existing analysis types on the prompt." + }, + "prompt_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Prompt Type", + "description": "Deprecated. Use analysis_types instead.", + "deprecated": true + }, + "asset": { + "anyOf": [ + { + "$ref": "#/components/schemas/IdOrName" + }, + { + "type": "null" + } + ], + "description": "Asset reference. Required when analysis_types includes 'sentiment'." + } + }, + "type": "object", + "required": [ + "id" + ], + "title": "UpdatePromptInput", + "description": "Fields to update on an existing prompt. Only provided fields are changed; omitted fields are left unchanged." + }, + "UpdatePromptStatusBody": { + "properties": { + "prompt_ids": { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array", + "title": "Prompt Ids", + "description": "IDs of the prompts to update." + }, + "status": { + "type": "string", + "enum": [ + "active", + "disabled", + "deleted" + ], + "title": "Status", + "description": "Target status: 'active', 'disabled', or 'deleted'." + }, + "dry_run": { + "type": "boolean", + "title": "Dry Run", + "description": "When true, validate and preview changes without persisting them.", + "default": false + } + }, + "type": "object", + "required": [ + "prompt_ids", + "status" + ], + "title": "UpdatePromptStatusBody" + }, + "UpdatePromptStatusResponse": { + "properties": { + "dry_run": { + "type": "boolean", + "title": "Dry Run", + "description": "Whether this was a dry run (no changes persisted)." + }, + "updated_prompts": { + "type": "integer", + "title": "Updated Prompts", + "description": "Number of prompts whose status was changed.", + "default": 0 + } + }, + "type": "object", + "required": [ + "dry_run" + ], + "title": "UpdatePromptStatusResponse", + "description": "Response from updating prompt statuses." + }, + "UpdatePromptsBody": { + "properties": { + "prompts": { + "items": { + "$ref": "#/components/schemas/UpdatePromptInput" + }, + "type": "array", + "title": "Prompts", + "description": "List of prompt updates. Each entry must include an `id` and at least one field to change." + }, + "dry_run": { + "type": "boolean", + "title": "Dry Run", + "description": "When true, validate and preview changes without persisting them.", + "default": false + } + }, + "type": "object", + "required": [ + "prompts" + ], + "title": "UpdatePromptsBody" + }, + "UpdatePromptsResponse": { + "properties": { + "dry_run": { + "type": "boolean", + "title": "Dry Run", + "description": "Whether this was a dry run (no changes persisted)." + }, + "updated": { + "type": "integer", + "title": "Updated", + "description": "Number of prompts that had changes.", + "default": 0 + }, + "topics_created": { + "type": "integer", + "title": "Topics Created", + "description": "Number of new topics created.", + "default": 0 + }, + "tags_created": { + "type": "integer", + "title": "Tags Created", + "description": "Number of new tags created.", + "default": 0 + }, + "prompts": { + "items": { + "$ref": "#/components/schemas/PromptUpdatePreview" + }, + "type": "array", + "title": "Prompts", + "description": "List of prompts with their change diffs.", + "default": [] + } + }, + "type": "object", + "required": [ + "dry_run" + ], + "title": "UpdatePromptsResponse", + "description": "Response from updating prompts." + }, + "UrlFilter": { + "properties": { + "field": { + "type": "string", + "const": "url", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "UrlFilter", + "description": "Filter by URL" + }, + "UserInput": { + "properties": { + "type": { + "$ref": "#/components/schemas/ContentType" + }, + "value": { + "type": "string", + "title": "Value" + }, + "metadata": { + "additionalProperties": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ] + }, + "type": "object", + "title": "Metadata" + } + }, + "type": "object", + "required": [ + "type", + "value", + "metadata" + ], + "title": "UserInput" + }, + "ValidationError": { + "properties": { + "loc": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ] + }, + "type": "array", + "title": "Location" + }, + "msg": { + "type": "string", + "title": "Message" + }, + "type": { + "type": "string", + "title": "Error Type" + }, + "input": { + "title": "Input" + }, + "ctx": { + "type": "object", + "title": "Context" + } + }, + "type": "object", + "required": [ + "loc", + "msg", + "type" + ], + "title": "ValidationError" + }, + "VisibilityQuery": { + "properties": { + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "description": "Date interval for the report. (only used with date dimension)", + "default": "day" + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "date", + "region", + "topic", + "topic_id", + "model", + "asset_id", + "asset_name", + "prompt", + "prompt_id", + "tag", + "persona" + ] + }, + "type": "array", + "title": "Dimensions", + "description": "Dimensions to group the report by.", + "default": [] + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "share_of_voice", + "mentions_count", + "visibility_score", + "executions", + "average_position" + ] + }, + "type": "array", + "title": "Metrics" + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By", + "description": "\nCustom ordering of the report results.\n\nThe order is a record of key-value pairs where:\n- key is the field to order by, which can be a metric or dimension\n- value is the direction of the order, either 'asc' for ascending or 'desc' for descending.\n\nWhen not specified, the default order is the first metric in the query descending.\n ", + "default": {}, + "examples": [ + { + "date": "asc" + } + ] + }, + "pagination": { + "$ref": "#/components/schemas/Pagination", + "description": "Pagination settings for the report results." + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/RegionNameFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/TopicNameFilter" + }, + { + "$ref": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/TagNameFilter" + }, + { + "$ref": "#/components/schemas/PromptIdFilter" + }, + { + "$ref": "#/components/schemas/PromptFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "prompt": "#/components/schemas/PromptFilter", + "prompt_id": "#/components/schemas/PromptIdFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "region_name": "#/components/schemas/RegionNameFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "tag_name": "#/components/schemas/TagNameFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter", + "topic_name": "#/components/schemas/TopicNameFilter" + } + } + }, + "type": "array", + "title": "Filters", + "description": "List of filters to apply to the visibility report." + } + }, + "type": "object", + "required": [ + "metrics", + "category_id", + "start_date", + "end_date" + ], + "title": "VisibilityQuery" + }, + "VisibilityV2Query": { + "properties": { + "category_id": { + "type": "string", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "YYYY-MM-DD, ET, inclusive" + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "YYYY-MM-DD, ET, inclusive" + }, + "group_by": { + "items": { + "type": "string", + "enum": [ + "date", + "model", + "topic", + "region", + "prompt", + "persona" + ] + }, + "type": "array", + "title": "Group By" + }, + "metrics": { + "anyOf": [ + { + "items": { + "type": "string", + "enum": [ + "visibility_score", + "share_of_voice", + "average_position" + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Metrics" + }, + "interval": { + "type": "string", + "enum": [ + "day", + "week", + "month" + ], + "title": "Interval", + "default": "day" + }, + "scope": { + "type": "string", + "enum": [ + "owned", + "all" + ], + "title": "Scope", + "default": "owned" + }, + "assets": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "$ref": "#/components/schemas/EntityFilterClause" + }, + { + "type": "null" + } + ], + "title": "Assets", + "description": "A name (`is`), a list (`in`), or {op,value} with op `is`/`in`/`not_in`." + }, + "filter": { + "anyOf": [ + { + "$ref": "#/components/schemas/FilterNode" + }, + { + "type": "null" + } + ] + }, + "sort": { + "$ref": "#/components/schemas/app__routes__v2__answer_engine_insights__reports__visibility__SortSpec" + }, + "limit": { + "anyOf": [ + { + "type": "integer", + "maximum": 50, + "exclusiveMinimum": 0 + }, + { + "type": "null" + } + ], + "title": "Limit", + "description": "Page size; default 10, max 50." + }, + "max_results": { + "anyOf": [ + { + "type": "integer", + "exclusiveMinimum": 0 + }, + { + "type": "null" + } + ], + "title": "Max Results", + "description": "Stream endpoint only: cap the number of streamed rows (default: all)." + }, + "cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Cursor" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "VisibilityV2Query" + }, + "WebSearchResultsQuery": { + "properties": { + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "description": "Date interval for the report. (only used with date dimension)", + "default": "day" + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "hostname", + "path", + "url", + "root_domain", + "date", + "region", + "topic", + "topic_id", + "model", + "tag", + "prompt", + "prompt_id", + "persona", + "search_query" + ] + }, + "type": "array", + "title": "Dimensions", + "description": "Dimensions to group the report by.", + "default": [] + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "count", + "search_share" + ] + }, + "type": "array", + "minItems": 1, + "title": "Metrics", + "description": "Metrics to include. `search_share` is the per-prompt occurrence rate." + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By", + "description": "\n Custom ordering of the report results.\n\n The order is a record of key-value pairs where:\n - `key` is the field to order by, which can be a metric or dimension\n - `value` is the direction of the order, either `asc` for ascending or `desc` for descending.\n\n When not specified, the default order is the first metric in the query descending.\n ", + "default": {}, + "examples": [ + { + "date": "asc" + }, + { + "count": "desc", + "date": "asc" + } + ] + }, + "pagination": { + "$ref": "#/components/schemas/Pagination", + "description": "Pagination settings for the report results." + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/HostnameFilter" + }, + { + "$ref": "#/components/schemas/PathFilter" + }, + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/UrlFilter" + }, + { + "$ref": "#/components/schemas/RootDomainFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + }, + { + "$ref": "#/components/schemas/PromptFilter" + }, + { + "$ref": "#/components/schemas/PromptIdFilter" + }, + { + "$ref": "#/components/schemas/SearchQueryFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "hostname": "#/components/schemas/HostnameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "path": "#/components/schemas/PathFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "prompt": "#/components/schemas/PromptFilter", + "prompt_id": "#/components/schemas/PromptIdFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "root_domain": "#/components/schemas/RootDomainFilter", + "search_query": "#/components/schemas/SearchQueryFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter", + "url": "#/components/schemas/UrlFilter" + } + } + }, + "type": "array", + "title": "Filters", + "description": "List of filters to apply to the web search results report." + } + }, + "type": "object", + "required": [ + "metrics", + "category_id", + "start_date", + "end_date" + ], + "title": "WebSearchResultsQuery" + }, + "WebSearchResultsResponse": { + "properties": { + "info": { + "$ref": "#/components/schemas/Info" + }, + "data": { + "items": { + "$ref": "#/components/schemas/WebSearchResultsResult" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "info", + "data" + ], + "title": "WebSearchResultsResponse", + "examples": [ + { + "data": [ + { + "dimensions": [ + "example.com", + "/some/path", + "2023-10-01" + ], + "metrics": [ + 10, + 0.05 + ] + } + ], + "info": { + "query": { + "date_interval": "day", + "dimensions": [ + "hostname", + "path", + "date" + ], + "filters": [ + { + "field": "hostname", + "operator": "is", + "value": "example.com" + } + ], + "metrics": [ + "count", + "search_share" + ] + }, + "total_rows": 200 + } + } + ] + }, + "WebSearchResultsResult": { + "properties": { + "metrics": { + "items": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "number" + } + ] + }, + "type": "array", + "title": "Metrics" + }, + "dimensions": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ] + }, + "type": "array", + "title": "Dimensions" + } + }, + "type": "object", + "required": [ + "metrics", + "dimensions" + ], + "title": "WebSearchResultsResult" + }, + "app__routes__v2__answer_engine_insights__reports__query_fanouts__SortSpec": { + "properties": { + "field": { + "type": "string", + "title": "Field" + }, + "dir": { + "type": "string", + "enum": [ + "asc", + "desc" + ], + "title": "Dir", + "default": "desc" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "field" + ], + "title": "SortSpec" + }, + "app__routes__v2__answer_engine_insights__reports__sentiment__SortSpec": { + "properties": { + "field": { + "type": "string", + "enum": [ + "occurrence", + "positive_sentiment", + "negative_sentiment" + ], + "title": "Field", + "default": "positive_sentiment" + }, + "dir": { + "type": "string", + "enum": [ + "asc", + "desc" + ], + "title": "Dir", + "default": "desc" + } + }, + "type": "object", + "title": "SortSpec" + }, + "app__routes__v2__answer_engine_insights__reports__visibility__SortSpec": { + "properties": { + "field": { + "type": "string", + "enum": [ + "visibility_score", + "share_of_voice", + "average_position" + ], + "title": "Field", + "default": "visibility_score" + } + }, + "type": "object", + "title": "SortSpec" + }, + "profound_answer_engine_insights__filters__AssetNameFilter": { + "properties": { + "field": { + "type": "string", + "const": "asset_name", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "AssetNameFilter", + "description": "Filter by asset name" + }, + "profound_shopping__api__AssetNameFilter": { + "properties": { + "field": { + "type": "string", + "const": "asset_name", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "AssetNameFilter" + } + }, + "securitySchemes": { + "APIKeyHeader": { + "type": "apiKey", + "in": "header", + "name": "X-API-Key" + }, + "BearerAuth": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT" + } + } + }, + "security": [ + { + "APIKeyHeader": [ + "X-API-Key" + ] + }, + { + "BearerAuth": [] + } + ] +} diff --git a/pyproject.toml b/pyproject.toml index 9ecd79d4..13f1c2e5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,13 +1,9 @@ [project] name = "profound" -version = "0.57.0" -description = "The official Python library for the profound API" -dynamic = ["readme"] +version = "0.3.0" +description = "profound Python client." license = "Apache-2.0" -authors = [ -{ name = "Profound", email = "support@tryprofound.com" }, -] - +requires-python = ">= 3.9" dependencies = [ "httpx>=0.23.0, <1", "pydantic>=1.9.0, <3", @@ -17,244 +13,13 @@ dependencies = [ "sniffio", ] -requires-python = ">= 3.9" -classifiers = [ - "Typing :: Typed", - "Intended Audience :: Developers", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Programming Language :: Python :: 3.12", - "Programming Language :: Python :: 3.13", - "Programming Language :: Python :: 3.14", - "Operating System :: OS Independent", - "Operating System :: POSIX", - "Operating System :: MacOS", - "Operating System :: POSIX :: Linux", - "Operating System :: Microsoft :: Windows", - "Topic :: Software Development :: Libraries :: Python Modules", - "License :: OSI Approved :: Apache Software License" -] - -[project.urls] -Homepage = "https://github.com/cooper-square-technologies/profound-python-sdk" -Repository = "https://github.com/cooper-square-technologies/profound-python-sdk" - -[project.optional-dependencies] -aiohttp = ["aiohttp", "httpx_aiohttp>=0.1.9"] - -[tool.uv] -managed = true -required-version = ">=0.9" -conflicts = [ - [ - { group = "pydantic-v1" }, - { group = "pydantic-v2" }, - ], -] - -[dependency-groups] -# version pins are in uv.lock -dev = [ - "pyright==1.1.399", - "mypy==1.17", - "respx", - "pytest", - "pytest-asyncio", - "ruff", - "time-machine", - "dirty-equals>=0.6.0", - "importlib-metadata>=6.7.0", - "rich>=13.7.1", - "pytest-xdist>=3.6.1", -] -pydantic-v1 = [ - "pydantic>=1.9.0,<2", -] -pydantic-v2 = [ - "pydantic~=2.0 ; python_full_version < '3.14'", - "pydantic~=2.12 ; python_full_version >= '3.14'", -] [build-system] -requires = ["hatchling==1.26.3", "hatch-fancy-pypi-readme"] +requires = ["hatchling>=1.18.0"] build-backend = "hatchling.build" -[tool.hatch.build] -include = [ - "src/*" -] - [tool.hatch.build.targets.wheel] -packages = ["src/profound"] - -[tool.hatch.build.targets.sdist] -# Basically everything except hidden files/directories (such as .github, .devcontainers, .python-version, etc) -include = [ - "/*.toml", - "/*.json", - "/*.lock", - "/*.md", - "/mypy.ini", - "/noxfile.py", - "bin/*", - "examples/*", - "src/*", - "tests/*", -] - -[tool.hatch.metadata.hooks.fancy-pypi-readme] -content-type = "text/markdown" +packages = ["src"] -[[tool.hatch.metadata.hooks.fancy-pypi-readme.fragments]] -path = "README.md" - -[[tool.hatch.metadata.hooks.fancy-pypi-readme.substitutions]] -# replace relative links with absolute links -pattern = '\[(.+?)\]\(((?!https?://)\S+?)\)' -replacement = '[\1](https://github.com/cooper-square-technologies/profound-python-sdk/tree/main/\g<2>)' - -[tool.pytest.ini_options] -testpaths = ["tests"] -addopts = "--tb=short -n auto" -xfail_strict = true -asyncio_mode = "auto" -asyncio_default_fixture_loop_scope = "session" -filterwarnings = [ - "error" -] - -[tool.pyright] -# this enables practically every flag given by pyright. -# there are a couple of flags that are still disabled by -# default in strict mode as they are experimental and niche. -typeCheckingMode = "strict" -pythonVersion = "3.9" - -exclude = [ - "_dev", - ".venv", - ".nox", - ".git", -] - -reportImplicitOverride = true -reportOverlappingOverload = false - -reportImportCycles = false -reportPrivateUsage = false - -[tool.mypy] -pretty = true -show_error_codes = true - -# Exclude _files.py because mypy isn't smart enough to apply -# the correct type narrowing and as this is an internal module -# it's fine to just use Pyright. -# -# We also exclude our `tests` as mypy doesn't always infer -# types correctly and Pyright will still catch any type errors. -exclude = ["src/profound/_files.py", "_dev/.*.py", "tests/.*"] - -strict_equality = true -implicit_reexport = true -check_untyped_defs = true -no_implicit_optional = true - -warn_return_any = true -warn_unreachable = true -warn_unused_configs = true - -# Turn these options off as it could cause conflicts -# with the Pyright options. -warn_unused_ignores = false -warn_redundant_casts = false - -disallow_any_generics = true -disallow_untyped_defs = true -disallow_untyped_calls = true -disallow_subclassing_any = true -disallow_incomplete_defs = true -disallow_untyped_decorators = true -cache_fine_grained = true - -# By default, mypy reports an error if you assign a value to the result -# of a function call that doesn't return anything. We do this in our test -# cases: -# ``` -# result = ... -# assert result is None -# ``` -# Changing this codegen to make mypy happy would increase complexity -# and would not be worth it. -disable_error_code = "func-returns-value,overload-cannot-match" - -# https://github.com/python/mypy/issues/12162 -[[tool.mypy.overrides]] -module = "black.files.*" -ignore_errors = true -ignore_missing_imports = true - - -[tool.ruff] -line-length = 120 -output-format = "grouped" -target-version = "py38" - -[tool.ruff.format] -docstring-code-format = true - -[tool.ruff.lint] -select = [ - # isort - "I", - # bugbear rules - "B", - # remove unused imports - "F401", - # check for missing future annotations - "FA102", - # bare except statements - "E722", - # unused arguments - "ARG", - # print statements - "T201", - "T203", - # misuse of typing.TYPE_CHECKING - "TC004", - # import rules - "TID251", -] -ignore = [ - # mutable defaults - "B006", -] -unfixable = [ - # disable auto fix for print statements - "T201", - "T203", -] - -extend-safe-fixes = ["FA102"] - -[tool.ruff.lint.flake8-tidy-imports.banned-api] -"functools.lru_cache".msg = "This function does not retain type information for the wrapped function's arguments; The `lru_cache` function from `_utils` should be used instead" - -[tool.ruff.lint.isort] -length-sort = true -length-sort-straight = true -combine-as-imports = true -extra-standard-library = ["typing_extensions"] -known-first-party = ["profound", "tests"] - -[tool.ruff.lint.per-file-ignores] -"bin/**.py" = ["T201", "T203"] -"scripts/**.py" = ["T201", "T203"] -"tests/**.py" = ["T201", "T203"] -"examples/**.py" = ["T201", "T203"] - -[tool.uv.workspace] -members = [ - "examples", -] +[tool.hatch.build.targets.wheel.sources] +"src" = "profound" diff --git a/release-please-config.json b/release-please-config.json deleted file mode 100644 index 8e2d409f..00000000 --- a/release-please-config.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "packages": { - ".": {} - }, - "$schema": "https://raw.githubusercontent.com/stainless-api/release-please/main/schemas/config.json", - "include-v-in-tag": true, - "include-component-in-tag": false, - "versioning": "prerelease", - "prerelease": true, - "bump-minor-pre-major": true, - "bump-patch-for-minor-pre-major": false, - "pull-request-header": "Automated Release PR", - "pull-request-title-pattern": "release: ${version}", - "changelog-sections": [ - { - "type": "feat", - "section": "Features" - }, - { - "type": "fix", - "section": "Bug Fixes" - }, - { - "type": "perf", - "section": "Performance Improvements" - }, - { - "type": "revert", - "section": "Reverts" - }, - { - "type": "chore", - "section": "Chores" - }, - { - "type": "docs", - "section": "Documentation" - }, - { - "type": "style", - "section": "Styles" - }, - { - "type": "refactor", - "section": "Refactors" - }, - { - "type": "test", - "section": "Tests", - "hidden": true - }, - { - "type": "build", - "section": "Build System" - }, - { - "type": "ci", - "section": "Continuous Integration", - "hidden": true - } - ], - "release-type": "python", - "extra-files": [ - "src/profound/_version.py" - ] -} \ No newline at end of file diff --git a/requirements-dev.lock b/requirements-dev.lock deleted file mode 100644 index 749b4cc6..00000000 --- a/requirements-dev.lock +++ /dev/null @@ -1,110 +0,0 @@ -# This file was autogenerated by uv via the following command: -# uv export -o requirements-dev.lock --no-hashes --e . -annotated-types==0.7.0 - # via pydantic -anyio==4.12.1 - # via - # httpx - # profound -backports-asyncio-runner==1.2.0 ; python_full_version < '3.11' - # via pytest-asyncio -certifi==2026.1.4 - # via - # httpcore - # httpx -colorama==0.4.6 ; sys_platform == 'win32' - # via pytest -dirty-equals==0.11 -distro==1.9.0 - # via profound -exceptiongroup==1.3.1 ; python_full_version < '3.11' - # via - # anyio - # pytest -execnet==2.1.2 - # via pytest-xdist -h11==0.16.0 - # via httpcore -httpcore==1.0.9 - # via httpx -httpx==0.28.1 - # via - # profound - # respx -idna==3.11 - # via - # anyio - # httpx -importlib-metadata==8.7.1 -iniconfig==2.1.0 ; python_full_version < '3.10' - # via pytest -iniconfig==2.3.0 ; python_full_version >= '3.10' - # via pytest -markdown-it-py==3.0.0 ; python_full_version < '3.10' - # via rich -markdown-it-py==4.0.0 ; python_full_version >= '3.10' - # via rich -mdurl==0.1.2 - # via markdown-it-py -mypy==1.17.0 -mypy-extensions==1.1.0 - # via mypy -nodeenv==1.10.0 - # via pyright -packaging==25.0 - # via pytest -pathspec==1.0.3 - # via mypy -pluggy==1.6.0 - # via pytest -pydantic==2.12.5 - # via profound -pydantic-core==2.41.5 - # via pydantic -pygments==2.19.2 - # via - # pytest - # rich -pyright==1.1.399 -pytest==8.4.2 ; python_full_version < '3.10' - # via - # pytest-asyncio - # pytest-xdist -pytest==9.0.2 ; python_full_version >= '3.10' - # via - # pytest-asyncio - # pytest-xdist -pytest-asyncio==1.2.0 ; python_full_version < '3.10' -pytest-asyncio==1.3.0 ; python_full_version >= '3.10' -pytest-xdist==3.8.0 -python-dateutil==2.9.0.post0 ; python_full_version < '3.10' - # via time-machine -respx==0.22.0 -rich==14.2.0 -ruff==0.14.13 -six==1.17.0 ; python_full_version < '3.10' - # via python-dateutil -sniffio==1.3.1 - # via profound -time-machine==2.19.0 ; python_full_version < '3.10' -time-machine==3.2.0 ; python_full_version >= '3.10' -tomli==2.4.0 ; python_full_version < '3.11' - # via - # mypy - # pytest -typing-extensions==4.15.0 - # via - # anyio - # exceptiongroup - # mypy - # profound - # pydantic - # pydantic-core - # pyright - # pytest-asyncio - # typing-inspection -typing-inspection==0.4.2 - # via pydantic -zipp==3.23.0 - # via importlib-metadata diff --git a/scalar-sdk.manifest.json b/scalar-sdk.manifest.json new file mode 100644 index 00000000..18b98c46 --- /dev/null +++ b/scalar-sdk.manifest.json @@ -0,0 +1,34307 @@ +{ + "name": "Profound", + "slug": "profound", + "version": "0.1.0", + "servers": [ + "https://api.tryprofound.com" + ], + "environments": { + "production_server": "https://api.tryprofound.com", + "production": "https://api.tryprofound.com" + }, + "environmentOrder": [ + "production", + "production_server" + ], + "auth": [ + "apiKey", + "bearer" + ], + "authDetails": [ + { + "kind": "apiKey", + "id": "APIKeyHeader", + "in": "header", + "paramName": "X-API-Key" + }, + { + "kind": "bearer", + "id": "BearerAuth", + "bearerFormat": "JWT" + } + ], + "clientHeaderParams": [], + "schemas": [ + { + "name": "AeoScore", + "source": "AeoScore", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "target_zone", + "publicName": "target_zone", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "AeoScoreTargetZone" + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "number" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AeoScoreTargetZone", + "source": "AeoScoreTargetZone", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "low", + "publicName": "low", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "number" + } + }, + { + "name": "high", + "publicName": "high", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "number" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AcceptedAgentRun", + "source": "AcceptedAgentRun", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "agent_id", + "publicName": "agent_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "status", + "publicName": "status", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "AgentRunStatus" + } + }, + { + "name": "started_at", + "publicName": "started_at", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AccuracyBreakdownQuery", + "source": "AccuracyBreakdownQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "comparison_start_date", + "publicName": "comparison_start_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "comparison_end_date", + "publicName": "comparison_end_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "topic_ids", + "publicName": "topic_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "exclude_topic_ids", + "publicName": "exclude_topic_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "tag_ids", + "publicName": "tag_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "tag_filter_type", + "publicName": "tag_filter_type", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "all", + "any" + ], + "names": [ + "All", + "Any" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "include_no_tag", + "publicName": "include_no_tag", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "region_ids", + "publicName": "region_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "platform_ids", + "publicName": "platform_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "persona_ids", + "publicName": "persona_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "include_no_persona", + "publicName": "include_no_persona", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "prompt_ids", + "publicName": "prompt_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "citation_categories", + "publicName": "citation_categories", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "breakdown_by", + "publicName": "breakdown_by", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "citation", + "platform", + "topic", + "prompt", + "tag", + "region", + "persona" + ], + "names": [ + "Citation", + "Platform", + "Topic", + "Prompt", + "Tag", + "Region", + "Persona" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "limit", + "publicName": "limit", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer", + "validation": {} + } + }, + { + "name": "offset", + "publicName": "offset", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer", + "validation": {} + } + }, + { + "name": "search_query", + "publicName": "search_query", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "sort_by", + "publicName": "sort_by", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "citationShare", + "accuracy" + ], + "names": [ + "CitationShare", + "Accuracy" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "sort_order", + "publicName": "sort_order", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AccuracyBreakdownResponse", + "source": "AccuracyBreakdownResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "data", + "publicName": "data", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "AccuracyBreakdownRow" + } + } + }, + { + "name": "totalCount", + "publicName": "totalCount", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AccuracyBreakdownRow", + "source": "AccuracyBreakdownRow", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "name", + "publicName": "name", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "share", + "publicName": "share", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "number" + } + }, + { + "name": "shareChange", + "publicName": "shareChange", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "responseAccuracy", + "publicName": "responseAccuracy", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "number" + } + }, + { + "name": "accuracyChange", + "publicName": "accuracyChange", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "inaccurateCount", + "publicName": "inaccurateCount", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "inaccurateCountChange", + "publicName": "inaccurateCountChange", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "integer" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "promptCount", + "publicName": "promptCount", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "integer" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "citationCategory", + "publicName": "citationCategory", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AccuracyCitationAnalysisQuery", + "source": "AccuracyCitationAnalysisQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "clean_href", + "publicName": "clean_href", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AccuracyCitationAnalysisResponse", + "source": "AccuracyCitationAnalysisResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "href", + "publicName": "href", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "domain", + "publicName": "domain", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "pageTitle", + "publicName": "pageTitle", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "markdownContent", + "publicName": "markdownContent", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "claims", + "publicName": "claims", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "AccuracyCitationClaim" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AccuracyCitationClaim", + "source": "AccuracyCitationClaim", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "claimId", + "publicName": "claimId", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "claim", + "publicName": "claim", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "attributeId", + "publicName": "attributeId", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "attribute", + "publicName": "attribute", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "neutralThemeId", + "publicName": "neutralThemeId", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "neutralTheme", + "publicName": "neutralTheme", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "snippet", + "publicName": "snippet", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "polarity", + "publicName": "polarity", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "positive", + "negative" + ], + "names": [ + "Positive", + "Negative" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "kbPath", + "publicName": "kbPath", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "kbSnippet", + "publicName": "kbSnippet", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "reasoning", + "publicName": "reasoning", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "evidence", + "publicName": "evidence", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "AccuracyCitationEvidence" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AccuracyCitationEvidence", + "source": "AccuracyCitationEvidence", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "kbName", + "publicName": "kbName", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "kbPath", + "publicName": "kbPath", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "kbSnippet", + "publicName": "kbSnippet", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AccuracyOverviewQuery", + "source": "AccuracyOverviewQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "comparison_start_date", + "publicName": "comparison_start_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "comparison_end_date", + "publicName": "comparison_end_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "topic_ids", + "publicName": "topic_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "exclude_topic_ids", + "publicName": "exclude_topic_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "tag_ids", + "publicName": "tag_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "tag_filter_type", + "publicName": "tag_filter_type", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "all", + "any" + ], + "names": [ + "All", + "Any" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "include_no_tag", + "publicName": "include_no_tag", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "region_ids", + "publicName": "region_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "platform_ids", + "publicName": "platform_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "persona_ids", + "publicName": "persona_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "include_no_persona", + "publicName": "include_no_persona", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "prompt_ids", + "publicName": "prompt_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "citation_categories", + "publicName": "citation_categories", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "date_bucket", + "publicName": "date_bucket", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "group_by", + "publicName": "group_by", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "period", + "theme" + ], + "names": [ + "Period", + "Theme" + ], + "deprecations": [ + false, + false + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AccuracyOverviewResponse", + "source": "AccuracyOverviewResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "trendByPeriod", + "publicName": "trendByPeriod", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "AccuracyTrendPoint" + } + } + }, + { + "name": "overallAccuracy", + "publicName": "overallAccuracy", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "number" + } + }, + { + "name": "accuracyChange", + "publicName": "accuracyChange", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "scoreBreakdown", + "publicName": "scoreBreakdown", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "AccuracyScoreBreakdown" + } + } + }, + { + "name": "themeTrend", + "publicName": "themeTrend", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "ref", + "name": "AccuracyThemeTrendSeries" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "availableSeries", + "publicName": "availableSeries", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "ref", + "name": "AccuracyTrendSeriesMeta" + } + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AccuracyScoreBreakdown", + "source": "AccuracyScoreBreakdown", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "status", + "publicName": "status", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "count", + "publicName": "count", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "share", + "publicName": "share", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "number" + } + }, + { + "name": "countChange", + "publicName": "countChange", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "integer" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "shareChange", + "publicName": "shareChange", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AccuracyThemeTrendPoint", + "source": "AccuracyThemeTrendPoint", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "date", + "publicName": "date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "total", + "publicName": "total", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "accurate", + "publicName": "accurate", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "ratio", + "publicName": "ratio", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "number" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AccuracyThemeTrendSeries", + "source": "AccuracyThemeTrendSeries", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "label", + "publicName": "label", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "data", + "publicName": "data", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "AccuracyThemeTrendPoint" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AccuracyTopicIdsQuery", + "source": "AccuracyTopicIdsQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AccuracyTrendPoint", + "source": "AccuracyTrendPoint", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "date", + "publicName": "date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "total", + "publicName": "total", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "accurate", + "publicName": "accurate", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "ratio", + "publicName": "ratio", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "number" + } + }, + { + "name": "prevPeriodData", + "publicName": "prevPeriodData", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "AccuracyTrendPoint" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AccuracyTrendSeriesMeta", + "source": "AccuracyTrendSeriesMeta", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "label", + "publicName": "label", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "total", + "publicName": "total", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AddFolderRequest", + "source": "AddFolderRequest", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "path", + "publicName": "path", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "validation": { + "minLength": 1 + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "Agent", + "source": "Agent", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "organization_id", + "publicName": "organization_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "name", + "publicName": "name", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "status", + "publicName": "status", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "AgentStatus" + } + }, + { + "name": "created_at", + "publicName": "created_at", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "description", + "publicName": "description", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AgentDetail", + "source": "AgentDetail", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "organization_id", + "publicName": "organization_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "name", + "publicName": "name", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "status", + "publicName": "status", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "AgentStatus" + } + }, + { + "name": "created_at", + "publicName": "created_at", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "description", + "publicName": "description", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "schema", + "publicName": "schema", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "AgentSchema" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "validation", + "publicName": "validation", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "AgentValidation" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AgentGraph", + "source": "AgentGraph", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "agent_id", + "publicName": "agent_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "version", + "publicName": "version", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "AgentVersion" + } + }, + { + "name": "graph", + "publicName": "graph", + "required": true, + "deprecated": false, + "type": { + "kind": "object", + "properties": [], + "additionalProperties": { + "kind": "unknown" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AgentRun", + "source": "AgentRun", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "agent_id", + "publicName": "agent_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "status", + "publicName": "status", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "AgentRunStatus" + } + }, + { + "name": "started_at", + "publicName": "started_at", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "finished_at", + "publicName": "finished_at", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "error", + "publicName": "error", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "object", + "properties": [], + "additionalProperties": { + "kind": "unknown" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "outputs", + "publicName": "outputs", + "required": false, + "deprecated": false, + "type": { + "kind": "object", + "properties": [], + "additionalProperties": { + "kind": "unknown" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AgentRunStatus", + "source": "AgentRunStatus", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "queued", + "running", + "succeeded", + "failed", + "cancelled", + "skipped", + "unknown" + ], + "names": [ + "Queued", + "Running", + "Succeeded", + "Failed", + "Cancelled", + "Skipped", + "Unknown" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "AgentSchema", + "source": "AgentSchema", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "input", + "publicName": "input", + "required": true, + "deprecated": false, + "type": { + "kind": "object", + "properties": [], + "additionalProperties": { + "kind": "unknown" + } + } + }, + { + "name": "output", + "publicName": "output", + "required": true, + "deprecated": false, + "type": { + "kind": "object", + "properties": [], + "additionalProperties": { + "kind": "unknown" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AgentStatus", + "source": "AgentStatus", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "draft", + "published", + "unknown" + ], + "names": [ + "Draft", + "Published", + "Unknown" + ], + "deprecations": [ + false, + false, + false + ] + } + }, + { + "name": "AgentValidation", + "source": "AgentValidation", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "valid", + "publicName": "valid", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "issues", + "publicName": "issues", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "AgentValidationIssue" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AgentValidationIssue", + "source": "AgentValidationIssue", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "code", + "publicName": "code", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "message", + "publicName": "message", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "node_id", + "publicName": "node_id", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "node_title", + "publicName": "node_title", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "field", + "publicName": "field", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "field_title", + "publicName": "field_title", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "violation", + "publicName": "violation", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AgentVersion", + "source": "AgentVersion", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "published", + "draft" + ], + "names": [ + "Published", + "Draft" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "AnalysisBreakdown", + "source": "AnalysisBreakdown", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "title", + "publicName": "title", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "weight", + "publicName": "weight", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "number" + } + }, + { + "name": "score", + "publicName": "score", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "number" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AnalysisInputs", + "source": "AnalysisInputs", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "topic", + "publicName": "topic", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "TopicInput" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "prompt", + "publicName": "prompt", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "PromptInput" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "top_citations", + "publicName": "top_citations", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "user", + "publicName": "user", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "UserInput" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AnalysisSummary", + "source": "AnalysisSummary", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "breakdown", + "publicName": "breakdown", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "AnalysisBreakdown" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AnalysisType", + "source": "AnalysisType", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ], + "names": [ + "Visibility", + "Sentiment", + "SentimentV2", + "Accuracy" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + }, + { + "name": "AnalysisTypeFilter", + "source": "AnalysisTypeFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "analysis_type" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "enum", + "values": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ], + "names": [ + "Visibility", + "Sentiment", + "SentimentV2", + "Accuracy" + ], + "deprecations": [ + false, + false, + false, + false + ] + }, + { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ], + "names": [ + "Visibility", + "Sentiment", + "SentimentV2", + "Accuracy" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AnswersQuery", + "source": "AnswersQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "ref", + "name": "Pagination" + } + }, + { + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "RegionIdFilter" + }, + { + "kind": "ref", + "name": "RegionNameFilter" + }, + { + "kind": "ref", + "name": "ModelIdFilter" + }, + { + "kind": "ref", + "name": "TagIdFilter" + }, + { + "kind": "ref", + "name": "AnalysisTypeFilter" + }, + { + "kind": "ref", + "name": "PromptTypeFilter" + }, + { + "kind": "ref", + "name": "PromptFilter" + }, + { + "kind": "ref", + "name": "PersonaIdFilter" + }, + { + "kind": "ref", + "name": "TopicIdFilter" + }, + { + "kind": "ref", + "name": "AssetIdFilter" + }, + { + "kind": "ref", + "name": "ProfoundAnswerEngineInsightsFiltersAssetNameFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "analysis_type": "AnalysisTypeFilter", + "asset_id": "AssetIdFilter", + "asset_name": "ProfoundAnswerEngineInsightsFiltersAssetNameFilter", + "model": "ModelIdFilter", + "model_id": "ModelIdFilter", + "persona_id": "PersonaIdFilter", + "prompt": "PromptFilter", + "prompt_type": "PromptTypeFilter", + "region": "RegionIdFilter", + "region_id": "RegionIdFilter", + "region_name": "RegionNameFilter", + "tag": "TagIdFilter", + "tag_id": "TagIdFilter", + "topic": "TopicIdFilter", + "topic_id": "TopicIdFilter" + } + }, + "variantNames": [ + "RegionIdFilter", + "RegionNameFilter", + "ModelIdFilter", + "TagIdFilter", + "AnalysisTypeFilter", + "PromptTypeFilter", + "PromptFilter", + "PersonaIdFilter", + "TopicIdFilter", + "AssetIdFilter", + "AssetNameFilter" + ] + } + } + }, + { + "name": "include", + "publicName": "include", + "required": false, + "deprecated": false, + "type": { + "kind": "ref", + "name": "EnabledFieldsResponse" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AnswersRawData", + "source": "AnswersRawData", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "run_id", + "publicName": "run_id", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "created_at", + "publicName": "created_at", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "prompt", + "publicName": "prompt", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "prompt_id", + "publicName": "prompt_id", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "mentions", + "publicName": "mentions", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "analysis_types", + "publicName": "analysis_types", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "prompt_type", + "publicName": "prompt_type", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "response", + "publicName": "response", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "citations", + "publicName": "citations", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "citation_details", + "publicName": "citation_details", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "ref", + "name": "CitationDetail" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "web_search_results", + "publicName": "web_search_results", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "search_triggered", + "publicName": "search_triggered", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "themes", + "publicName": "themes", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "sentiment_themes", + "publicName": "sentiment_themes", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "ref", + "name": "SentimentTheme" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "search_queries", + "publicName": "search_queries", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "topic", + "publicName": "topic", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "topic_id", + "publicName": "topic_id", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "region", + "publicName": "region", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "model", + "publicName": "model", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "model_id", + "publicName": "model_id", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "asset", + "publicName": "asset", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "asset_id", + "publicName": "asset_id", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "tags", + "publicName": "tags", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "persona", + "publicName": "persona", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AnswersResponse", + "source": "AnswersResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "info", + "publicName": "info", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "AnswersResponseInfo" + } + }, + { + "name": "data", + "publicName": "data", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "AnswersRawData" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AnswersResponseInfo", + "source": "AnswersResponseInfo", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "total_rows", + "publicName": "total_rows", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AnswersV2Query", + "source": "AnswersV2Query", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "include", + "publicName": "include", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "run_id", + "date", + "model", + "topic", + "topic_id", + "persona", + "region", + "tags", + "prompt", + "prompt_id", + "response", + "mentions", + "citations", + "search_queries", + "analysis_types", + "sentiment_claims" + ], + "names": [ + "RunId", + "Date", + "Model", + "Topic", + "TopicId", + "Persona", + "Region", + "Tags", + "Prompt", + "PromptId", + "Response", + "Mentions", + "Citations", + "SearchQueries", + "AnalysisTypes", + "SentimentClaims" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "filter", + "publicName": "filter", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "FilterNode" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "limit", + "publicName": "limit", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "integer", + "validation": {} + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "max_results", + "publicName": "max_results", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "integer" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "cursor", + "publicName": "cursor", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AssetIdFilter", + "source": "AssetIdFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "asset_id" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "BotNameFilter", + "source": "BotNameFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "bot_name" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "enum", + "values": [ + "Amazonbot", + "ClaudeBot", + "Claude-User", + "Claude-SearchBot", + "Applebot", + "Applebot-Extended", + "Bytespider", + "DeepSeek", + "DuckAssistBot", + "DuckDuckBot", + "Googlebot", + "Googlebot-News", + "Googlebot-Video", + "Googlebot-Image", + "Google-Extended", + "Storebot-Google", + "Google-CloudVertexBot", + "meta-externalfetcher", + "meta-externalagent", + "bingbot", + "MicrosoftPreview", + "ChatGPT-User", + "GPTBot", + "OAI-SearchBot", + "OAI-Operator", + "PerplexityBot", + "Perplexity-User", + "Grok-PageBrowser", + "YouBot", + "OpenClaw", + "baiduspider", + "CCBot", + "ERNIEBot", + "Gemini-Fetch", + "YandexBot", + "PetalBot", + "MistralAI-User", + "Slurp", + "Gemini-Deep-Research" + ], + "names": [ + "Amazonbot", + "ClaudeBot", + "ClaudeUser", + "ClaudeSearchBot", + "Applebot", + "ApplebotExtended", + "Bytespider", + "DeepSeek", + "DuckAssistBot", + "DuckDuckBot", + "Googlebot", + "GooglebotNews", + "GooglebotVideo", + "GooglebotImage", + "GoogleExtended", + "StorebotGoogle", + "GoogleCloudVertexBot", + "MetaExternalfetcher", + "MetaExternalagent", + "Bingbot", + "MicrosoftPreview", + "ChatGptUser", + "GptBot", + "OaiSearchBot", + "OaiOperator", + "PerplexityBot", + "PerplexityUser", + "GrokPageBrowser", + "YouBot", + "OpenClaw", + "Baiduspider", + "CcBot", + "ErnieBot", + "GeminiFetch", + "YandexBot", + "PetalBot", + "MistralAiUser", + "Slurp", + "GeminiDeepResearch" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + }, + { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "Amazonbot", + "ClaudeBot", + "Claude-User", + "Claude-SearchBot", + "Applebot", + "Applebot-Extended", + "Bytespider", + "DeepSeek", + "DuckAssistBot", + "DuckDuckBot", + "Googlebot", + "Googlebot-News", + "Googlebot-Video", + "Googlebot-Image", + "Google-Extended", + "Storebot-Google", + "Google-CloudVertexBot", + "meta-externalfetcher", + "meta-externalagent", + "bingbot", + "MicrosoftPreview", + "ChatGPT-User", + "GPTBot", + "OAI-SearchBot", + "OAI-Operator", + "PerplexityBot", + "Perplexity-User", + "Grok-PageBrowser", + "YouBot", + "OpenClaw", + "baiduspider", + "CCBot", + "ERNIEBot", + "Gemini-Fetch", + "YandexBot", + "PetalBot", + "MistralAI-User", + "Slurp", + "Gemini-Deep-Research" + ], + "names": [ + "Amazonbot", + "ClaudeBot", + "ClaudeUser", + "ClaudeSearchBot", + "Applebot", + "ApplebotExtended", + "Bytespider", + "DeepSeek", + "DuckAssistBot", + "DuckDuckBot", + "Googlebot", + "GooglebotNews", + "GooglebotVideo", + "GooglebotImage", + "GoogleExtended", + "StorebotGoogle", + "GoogleCloudVertexBot", + "MetaExternalfetcher", + "MetaExternalagent", + "Bingbot", + "MicrosoftPreview", + "ChatGptUser", + "GptBot", + "OaiSearchBot", + "OaiOperator", + "PerplexityBot", + "PerplexityUser", + "GrokPageBrowser", + "YouBot", + "OpenClaw", + "Baiduspider", + "CcBot", + "ErnieBot", + "GeminiFetch", + "YandexBot", + "PetalBot", + "MistralAiUser", + "Slurp", + "GeminiDeepResearch" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "BotProviderFilter", + "source": "BotProviderFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "bot_provider" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "enum", + "values": [ + "openai", + "anthropic", + "chatgpt", + "deepseek", + "google", + "microsoft", + "perplexity", + "apple", + "bytedance", + "amazon", + "meta", + "duckduckgo", + "you", + "xai", + "grok", + "gemini", + "mistral", + "huawei", + "yandex", + "baidu", + "yahoo", + "commoncrawl", + "openclaw" + ], + "names": [ + "Openai", + "Anthropic", + "Chatgpt", + "Deepseek", + "Google", + "Microsoft", + "Perplexity", + "Apple", + "Bytedance", + "Amazon", + "Meta", + "Duckduckgo", + "You", + "Xai", + "Grok", + "Gemini", + "Mistral", + "Huawei", + "Yandex", + "Baidu", + "Yahoo", + "Commoncrawl", + "Openclaw" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + }, + { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "openai", + "anthropic", + "chatgpt", + "deepseek", + "google", + "microsoft", + "perplexity", + "apple", + "bytedance", + "amazon", + "meta", + "duckduckgo", + "you", + "xai", + "grok", + "gemini", + "mistral", + "huawei", + "yandex", + "baidu", + "yahoo", + "commoncrawl", + "openclaw" + ], + "names": [ + "Openai", + "Anthropic", + "Chatgpt", + "Deepseek", + "Google", + "Microsoft", + "Perplexity", + "Apple", + "Bytedance", + "Amazon", + "Meta", + "Duckduckgo", + "You", + "Xai", + "Grok", + "Gemini", + "Mistral", + "Huawei", + "Yandex", + "Baidu", + "Yahoo", + "Commoncrawl", + "Openclaw" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "BotTypeFilter", + "source": "BotTypeFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "bot_type" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "enum", + "values": [ + "ai_assistant", + "ai_training", + "index", + "ai_agent" + ], + "names": [ + "AiAssistant", + "AiTraining", + "Index", + "AiAgent" + ], + "deprecations": [ + false, + false, + false, + false + ] + }, + { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "ai_assistant", + "ai_training", + "index", + "ai_agent" + ], + "names": [ + "AiAssistant", + "AiTraining", + "Index", + "AiAgent" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "BotsReportQuery", + "source": "BotsReportQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "date_interval", + "publicName": "date_interval", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "dimensions", + "publicName": "dimensions", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "date", + "path", + "bot_name", + "bot_provider" + ], + "names": [ + "Date", + "Path", + "BotName", + "BotProvider" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "count", + "citations", + "indexing", + "training", + "last_visit" + ], + "names": [ + "Count", + "Citations", + "Indexing", + "Training", + "LastVisit" + ], + "deprecations": [ + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "order_by", + "publicName": "order_by", + "required": false, + "deprecated": false, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "ref", + "name": "Pagination" + } + }, + { + "name": "domain", + "publicName": "domain", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "organization_id", + "publicName": "organization_id", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "metric_filters", + "publicName": "metric_filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "NumericMetricFilter" + } + } + }, + { + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "PathFilter" + }, + { + "kind": "ref", + "name": "BotNameFilter" + }, + { + "kind": "ref", + "name": "BotProviderFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "bot_name": "BotNameFilter", + "bot_provider": "BotProviderFilter", + "path": "PathFilter" + } + }, + "variantNames": [ + "PathFilter", + "BotNameFilter", + "BotProviderFilter" + ] + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "BotsReportQueryV2", + "source": "BotsReportQueryV2", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "date_interval", + "publicName": "date_interval", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "dimensions", + "publicName": "dimensions", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "date", + "hour", + "path", + "bot_name", + "bot_provider", + "bot_type" + ], + "names": [ + "Date", + "Hour", + "Path", + "BotName", + "BotProvider", + "BotType" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "count", + "citations", + "indexing", + "training", + "last_visit" + ], + "names": [ + "Count", + "Citations", + "Indexing", + "Training", + "LastVisit" + ], + "deprecations": [ + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "order_by", + "publicName": "order_by", + "required": false, + "deprecated": false, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "ref", + "name": "Pagination" + } + }, + { + "name": "domain", + "publicName": "domain", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "organization_id", + "publicName": "organization_id", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "metric_filters", + "publicName": "metric_filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "NumericMetricFilter" + } + } + }, + { + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "PathFilter" + }, + { + "kind": "ref", + "name": "BotNameFilter" + }, + { + "kind": "ref", + "name": "BotProviderFilter" + }, + { + "kind": "ref", + "name": "BotTypeFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "bot_name": "BotNameFilter", + "bot_provider": "BotProviderFilter", + "bot_type": "BotTypeFilter", + "path": "PathFilter" + } + }, + "variantNames": [ + "PathFilter", + "BotNameFilter", + "BotProviderFilter", + "BotTypeFilter" + ] + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "BrandNameFilter", + "source": "BrandNameFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "brand_name" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "Category", + "source": "Category", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "name", + "publicName": "name", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "CategoryAsset", + "source": "CategoryAsset", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "name", + "publicName": "name", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "website", + "publicName": "website", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "alternate_domains", + "publicName": "alternate_domains", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "is_owned", + "publicName": "is_owned", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "created_at", + "publicName": "created_at", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "logo_url", + "publicName": "logo_url", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "CategoryAssetWithCategory", + "source": "CategoryAssetWithCategory", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "name", + "publicName": "name", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "website", + "publicName": "website", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "alternate_domains", + "publicName": "alternate_domains", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "is_owned", + "publicName": "is_owned", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "created_at", + "publicName": "created_at", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "logo_url", + "publicName": "logo_url", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "category", + "publicName": "category", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "Category" + } + }, + { + "name": "organization", + "publicName": "organization", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "Organization" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "CategoryPersona", + "source": "CategoryPersona", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "name", + "publicName": "name", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "persona", + "publicName": "persona", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "PersonaProfile" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "CategoryPersonasResponse", + "source": "CategoryPersonasResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "data", + "publicName": "data", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "CategoryPersona" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "CategoryPromptsResponse", + "source": "CategoryPromptsResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "info", + "publicName": "info", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "PaginationInfo" + } + }, + { + "name": "data", + "publicName": "data", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "Prompt" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "CategoryWithOrganization", + "source": "CategoryWithOrganization", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "name", + "publicName": "name", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "organization", + "publicName": "organization", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "Organization" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "CitationCategoryFilter", + "source": "CitationCategoryFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "citation_category" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "CitationDetail", + "source": "CitationDetail", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "url", + "publicName": "url", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "clean_url", + "publicName": "clean_url", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "title", + "publicName": "title", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "text", + "publicName": "text", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "hostname", + "publicName": "hostname", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "path", + "publicName": "path", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "first_cited_at", + "publicName": "first_cited_at", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "positions", + "publicName": "positions", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "integer" + } + } + }, + { + "name": "groups", + "publicName": "groups", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "ref", + "name": "CitationDetailGroup" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "citation_category", + "publicName": "citation_category", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "CitationDetailGroup", + "source": "CitationDetailGroup", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "group_id", + "publicName": "group_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "group_position", + "publicName": "group_position", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "CitationsQuery", + "source": "CitationsQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "date_interval", + "publicName": "date_interval", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "dimensions", + "publicName": "dimensions", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "hostname", + "path", + "date", + "region", + "topic", + "topic_id", + "model", + "tag", + "prompt", + "prompt_id", + "url", + "root_domain", + "persona", + "citation_category" + ], + "names": [ + "Hostname", + "Path", + "Date", + "Region", + "Topic", + "TopicId", + "Model", + "Tag", + "Prompt", + "PromptId", + "Url", + "RootDomain", + "Persona", + "CitationCategory" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "count", + "citation_share", + "share_of_voice", + "first_cited_at" + ], + "names": [ + "Count", + "CitationShare", + "ShareOfVoice", + "FirstCitedAt" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + } + }, + { + "name": "order_by", + "publicName": "order_by", + "required": false, + "deprecated": false, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "ref", + "name": "Pagination" + } + }, + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "HostnameFilter" + }, + { + "kind": "ref", + "name": "PathFilter" + }, + { + "kind": "ref", + "name": "RegionIdFilter" + }, + { + "kind": "ref", + "name": "RegionNameFilter" + }, + { + "kind": "ref", + "name": "TopicIdFilter" + }, + { + "kind": "ref", + "name": "TopicNameFilter" + }, + { + "kind": "ref", + "name": "ModelIdFilter" + }, + { + "kind": "ref", + "name": "TagIdFilter" + }, + { + "kind": "ref", + "name": "TagNameFilter" + }, + { + "kind": "ref", + "name": "UrlFilter" + }, + { + "kind": "ref", + "name": "RootDomainFilter" + }, + { + "kind": "ref", + "name": "AnalysisTypeFilter" + }, + { + "kind": "ref", + "name": "PromptTypeFilter" + }, + { + "kind": "ref", + "name": "PersonaIdFilter" + }, + { + "kind": "ref", + "name": "CitationCategoryFilter" + }, + { + "kind": "ref", + "name": "PromptFilter" + }, + { + "kind": "ref", + "name": "PromptIdFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "analysis_type": "AnalysisTypeFilter", + "citation_category": "CitationCategoryFilter", + "hostname": "HostnameFilter", + "model": "ModelIdFilter", + "model_id": "ModelIdFilter", + "path": "PathFilter", + "persona_id": "PersonaIdFilter", + "prompt": "PromptFilter", + "prompt_id": "PromptIdFilter", + "prompt_type": "PromptTypeFilter", + "region": "RegionIdFilter", + "region_id": "RegionIdFilter", + "region_name": "RegionNameFilter", + "root_domain": "RootDomainFilter", + "tag": "TagIdFilter", + "tag_id": "TagIdFilter", + "tag_name": "TagNameFilter", + "topic": "TopicIdFilter", + "topic_id": "TopicIdFilter", + "topic_name": "TopicNameFilter", + "url": "UrlFilter" + } + }, + "variantNames": [ + "HostnameFilter", + "PathFilter", + "RegionIdFilter", + "RegionNameFilter", + "TopicIdFilter", + "TopicNameFilter", + "ModelIdFilter", + "TagIdFilter", + "TagNameFilter", + "UrlFilter", + "RootDomainFilter", + "AnalysisTypeFilter", + "PromptTypeFilter", + "PersonaIdFilter", + "CitationCategoryFilter", + "PromptFilter", + "PromptIdFilter" + ] + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "CitationsResponse", + "source": "CitationsResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "info", + "publicName": "info", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "ReportInfo" + } + }, + { + "name": "data", + "publicName": "data", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "CitationsResult" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "CitationsResult", + "source": "CitationsResult", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "metrics", + "publicName": "metrics", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "integer" + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "primitive", + "type": "string" + } + ], + "variantNames": [ + null, + null, + null + ] + }, + { + "kind": "null" + } + ] + } + } + }, + { + "name": "dimensions", + "publicName": "dimensions", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + ], + "variantNames": [ + null, + null + ] + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "CitationsV2Query", + "source": "CitationsV2Query", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "group_by", + "publicName": "group_by", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "page", + "date", + "model", + "topic", + "region", + "persona", + "prompt" + ], + "names": [ + "Page", + "Date", + "Model", + "Topic", + "Region", + "Persona", + "Prompt" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "count", + "citation_share", + "rank", + "first_cited_at" + ], + "names": [ + "Count", + "CitationShare", + "Rank", + "FirstCitedAt" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "interval", + "publicName": "interval", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "day", + "week", + "month" + ], + "names": [ + "Day", + "Week", + "Month" + ], + "deprecations": [ + false, + false, + false + ] + } + }, + { + "name": "scope", + "publicName": "scope", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "all", + "owned" + ], + "names": [ + "All", + "Owned" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "filter", + "publicName": "filter", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "FilterNode" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "limit", + "publicName": "limit", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "integer", + "validation": {} + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "max_results", + "publicName": "max_results", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "integer" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "cursor", + "publicName": "cursor", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ClaimBreakdownQuery", + "source": "ClaimBreakdownQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "comparison_start_date", + "publicName": "comparison_start_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "comparison_end_date", + "publicName": "comparison_end_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "topic_ids", + "publicName": "topic_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "exclude_topic_ids", + "publicName": "exclude_topic_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "tag_ids", + "publicName": "tag_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "tag_filter_type", + "publicName": "tag_filter_type", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "all", + "any" + ], + "names": [ + "All", + "Any" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "include_no_tag", + "publicName": "include_no_tag", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "region_ids", + "publicName": "region_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "platform_ids", + "publicName": "platform_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "persona_ids", + "publicName": "persona_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "include_no_persona", + "publicName": "include_no_persona", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "prompt_ids", + "publicName": "prompt_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "citation_categories", + "publicName": "citation_categories", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "cluster_id", + "publicName": "cluster_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ClaimBreakdownResponse", + "source": "ClaimBreakdownResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "platform", + "publicName": "platform", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "ClaimBreakdownRow" + } + } + }, + { + "name": "prompt", + "publicName": "prompt", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "ClaimPromptBreakdownRow" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ClaimBreakdownRow", + "source": "ClaimBreakdownRow", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "label", + "publicName": "label", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "responseCount", + "publicName": "responseCount", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "totalResponseCount", + "publicName": "totalResponseCount", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "responseShare", + "publicName": "responseShare", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "number" + } + }, + { + "name": "responseShareDelta", + "publicName": "responseShareDelta", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "prevResponseCount", + "publicName": "prevResponseCount", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "prevTotalResponseCount", + "publicName": "prevTotalResponseCount", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ClaimCitationRow", + "source": "ClaimCitationRow", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "href", + "publicName": "href", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "hostname", + "publicName": "hostname", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "path", + "publicName": "path", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "citationCategory", + "publicName": "citationCategory", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "domainCategory", + "publicName": "domainCategory", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "snippet", + "publicName": "snippet", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "citationCount", + "publicName": "citationCount", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "number" + } + }, + { + "name": "citationShare", + "publicName": "citationShare", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "number" + } + }, + { + "name": "citationShareDelta", + "publicName": "citationShareDelta", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ClaimCitationsQuery", + "source": "ClaimCitationsQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "comparison_start_date", + "publicName": "comparison_start_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "comparison_end_date", + "publicName": "comparison_end_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "topic_ids", + "publicName": "topic_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "exclude_topic_ids", + "publicName": "exclude_topic_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "tag_ids", + "publicName": "tag_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "tag_filter_type", + "publicName": "tag_filter_type", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "all", + "any" + ], + "names": [ + "All", + "Any" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "include_no_tag", + "publicName": "include_no_tag", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "region_ids", + "publicName": "region_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "platform_ids", + "publicName": "platform_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "persona_ids", + "publicName": "persona_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "include_no_persona", + "publicName": "include_no_persona", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "prompt_ids", + "publicName": "prompt_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "citation_categories", + "publicName": "citation_categories", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "cluster_id", + "publicName": "cluster_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "limit", + "publicName": "limit", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer", + "validation": {} + } + }, + { + "name": "offset", + "publicName": "offset", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer", + "validation": {} + } + }, + { + "name": "search_query", + "publicName": "search_query", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "sort_order", + "publicName": "sort_order", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ClaimCitationsResponse", + "source": "ClaimCitationsResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "data", + "publicName": "data", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "ClaimCitationRow" + } + } + }, + { + "name": "totalCount", + "publicName": "totalCount", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ClaimPromptBreakdownRow", + "source": "ClaimPromptBreakdownRow", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "label", + "publicName": "label", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "responseCount", + "publicName": "responseCount", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "totalResponseCount", + "publicName": "totalResponseCount", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "responseShare", + "publicName": "responseShare", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "number" + } + }, + { + "name": "responseShareDelta", + "publicName": "responseShareDelta", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "prevResponseCount", + "publicName": "prevResponseCount", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "prevTotalResponseCount", + "publicName": "prevTotalResponseCount", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "promptId", + "publicName": "promptId", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "promptText", + "publicName": "promptText", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "topicId", + "publicName": "topicId", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "hasCurrent", + "publicName": "hasCurrent", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ClusterExampleRun", + "source": "ClusterExampleRun", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "runId", + "publicName": "runId", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "claim", + "publicName": "claim", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "responseSnippet", + "publicName": "responseSnippet", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "modelId", + "publicName": "modelId", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "regionId", + "publicName": "regionId", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "createdAt", + "publicName": "createdAt", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ClusterExampleRunsQuery", + "source": "ClusterExampleRunsQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "cluster_id", + "publicName": "cluster_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "limit", + "publicName": "limit", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer", + "validation": {} + } + }, + { + "name": "offset", + "publicName": "offset", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer", + "validation": {} + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ClusterExampleRunsResponse", + "source": "ClusterExampleRunsResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "data", + "publicName": "data", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "ClusterExampleRun" + } + } + }, + { + "name": "totalCount", + "publicName": "totalCount", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ClusterVerificationPair", + "source": "ClusterVerificationPair", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "pairId", + "publicName": "pairId", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "snippetIdx", + "publicName": "snippetIdx", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "kbPath", + "publicName": "kbPath", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "quote", + "publicName": "quote", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "reasoning", + "publicName": "reasoning", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "sourceUpdatedAt", + "publicName": "sourceUpdatedAt", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ClusterVerificationPairsQuery", + "source": "ClusterVerificationPairsQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "cluster_id", + "publicName": "cluster_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ClusterVerificationPairsResponse", + "source": "ClusterVerificationPairsResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "data", + "publicName": "data", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "ClusterVerificationPair" + } + } + }, + { + "name": "clusterReasoning", + "publicName": "clusterReasoning", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ContentAnalysis", + "source": "ContentAnalysis", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "content", + "publicName": "content", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "DocumentContent" + } + }, + { + "name": "aeo_content_score", + "publicName": "aeo_content_score", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "AeoScore" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "analysis", + "publicName": "analysis", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "AnalysisSummary" + } + }, + { + "name": "recommendations", + "publicName": "recommendations", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "Recommendation" + } + } + }, + { + "name": "inputs", + "publicName": "inputs", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "AnalysisInputs" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ContentFormat", + "source": "ContentFormat", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "markdown", + "html" + ], + "names": [ + "Markdown", + "Html" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "ContentOptimization", + "source": "ContentOptimization", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "title", + "publicName": "title", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "created_at", + "publicName": "created_at", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "extracted_input", + "publicName": "extracted_input", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "type", + "publicName": "type", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "ContentType" + } + }, + { + "name": "status", + "publicName": "status", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ContentOptimizationAnalysisResponse", + "source": "ContentOptimizationAnalysisResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "data", + "publicName": "data", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "ContentAnalysis" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ContentOptimizationResponse", + "source": "ContentOptimizationResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "info", + "publicName": "info", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "ContentOptimizationResponseInfo" + } + }, + { + "name": "data", + "publicName": "data", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "ContentOptimization" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ContentOptimizationResponseInfo", + "source": "ContentOptimizationResponseInfo", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "total_rows", + "publicName": "total_rows", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "query", + "publicName": "query", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "OptimizationQuery" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ContentType", + "source": "ContentType", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "file", + "text", + "url" + ], + "names": [ + "File", + "Text", + "Url" + ], + "deprecations": [ + false, + false, + false + ] + } + }, + { + "name": "CreateAgentRequest", + "source": "CreateAgentRequest", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "organization_id", + "publicName": "organization_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "name", + "publicName": "name", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "validation": { + "minLength": 1 + } + } + }, + { + "name": "description", + "publicName": "description", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "graph", + "publicName": "graph", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "object", + "properties": [], + "additionalProperties": { + "kind": "unknown" + } + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "CreatePromptInput", + "source": "CreatePromptInput", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "prompt", + "publicName": "prompt", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "validation": { + "minLength": 1 + } + } + }, + { + "name": "topic", + "publicName": "topic", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "IdOrName" + } + }, + { + "name": "language", + "publicName": "language", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "tags", + "publicName": "tags", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "IdOrName" + } + } + }, + { + "name": "regions", + "publicName": "regions", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "IdOrName" + }, + "validation": { + "minItems": 1 + } + } + }, + { + "name": "platforms", + "publicName": "platforms", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "IdOrName" + }, + "validation": { + "minItems": 1 + } + } + }, + { + "name": "personas", + "publicName": "personas", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "IdOrName" + } + } + }, + { + "name": "analysis_types", + "publicName": "analysis_types", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ], + "names": [ + "Visibility", + "Sentiment", + "SentimentV2", + "Accuracy" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "prompt_type", + "publicName": "prompt_type", + "required": false, + "deprecated": true, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "asset", + "publicName": "asset", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "IdOrName" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "CreatePromptsBody", + "source": "CreatePromptsBody", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "prompts", + "publicName": "prompts", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "CreatePromptInput" + } + } + }, + { + "name": "dry_run", + "publicName": "dry_run", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "CreatePromptsResponse", + "source": "CreatePromptsResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "dry_run", + "publicName": "dry_run", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "created", + "publicName": "created", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "topics_created", + "publicName": "topics_created", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "tags_created", + "publicName": "tags_created", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "prompts", + "publicName": "prompts", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "PromptPreview" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "CursorPagination", + "source": "CursorPagination", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "limit", + "publicName": "limit", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer", + "validation": {} + } + }, + { + "name": "next_cursor", + "publicName": "next_cursor", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "DeleteDocumentRequest", + "source": "DeleteDocumentRequest", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "name", + "publicName": "name", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "validation": { + "minLength": 1 + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "DeleteFolderRequest", + "source": "DeleteFolderRequest", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "path", + "publicName": "path", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "validation": { + "minLength": 1 + } + } + }, + { + "name": "recursive", + "publicName": "recursive", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "DocumentContent", + "source": "DocumentContent", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "format", + "publicName": "format", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "ContentFormat" + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "DocumentOperationResponse", + "source": "DocumentOperationResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "message", + "publicName": "message", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "name", + "publicName": "name", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "path", + "publicName": "path", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "folder", + "publicName": "folder", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "DomainWithOrganization", + "source": "DomainWithOrganization", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "created_at", + "publicName": "created_at", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "name", + "publicName": "name", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "organization", + "publicName": "organization", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "Organization" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "EnabledFieldsResponse", + "source": "EnabledFieldsResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "run_id", + "publicName": "run_id", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "created_at", + "publicName": "created_at", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "prompt", + "publicName": "prompt", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "prompt_id", + "publicName": "prompt_id", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "mentions", + "publicName": "mentions", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "analysis_types", + "publicName": "analysis_types", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "prompt_type", + "publicName": "prompt_type", + "required": false, + "deprecated": true, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "response", + "publicName": "response", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "citations", + "publicName": "citations", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "citation_details", + "publicName": "citation_details", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "web_search_results", + "publicName": "web_search_results", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "search_triggered", + "publicName": "search_triggered", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "themes", + "publicName": "themes", + "required": false, + "deprecated": true, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "sentiment_themes", + "publicName": "sentiment_themes", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "topic", + "publicName": "topic", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "topic_id", + "publicName": "topic_id", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "region", + "publicName": "region", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "model", + "publicName": "model", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "model_id", + "publicName": "model_id", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "asset", + "publicName": "asset", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "asset_id", + "publicName": "asset_id", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "tags", + "publicName": "tags", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "search_queries", + "publicName": "search_queries", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "persona", + "publicName": "persona", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "EntityFilterClause", + "source": "EntityFilterClause", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "op", + "publicName": "op", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "FactCheckSetupStatusQuery", + "source": "FactCheckSetupStatusQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "FactCheckSetupStatusResponse", + "source": "FactCheckSetupStatusResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "activeAccuracyPromptCount", + "publicName": "activeAccuracyPromptCount", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "hasVerificationData", + "publicName": "hasVerificationData", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "isSetupComplete", + "publicName": "isSetupComplete", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "setupCreatedAt", + "publicName": "setupCreatedAt", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "setupKnowledgeBaseId", + "publicName": "setupKnowledgeBaseId", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "FieldDiff", + "source": "FieldDiff", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "old", + "publicName": "old", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "new", + "publicName": "new", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "FilterNode", + "source": "FilterNode", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "and", + "publicName": "and", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "ref", + "name": "FilterNode" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "or", + "publicName": "or", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "ref", + "name": "FilterNode" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "not", + "publicName": "not", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "FilterNode" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "field", + "publicName": "field", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "op", + "publicName": "op", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "FolderOperationResponse", + "source": "FolderOperationResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "message", + "publicName": "message", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "path", + "publicName": "path", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "HttpValidationError", + "source": "HttpValidationError", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "detail", + "publicName": "detail", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "ValidationError" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "HostnameFilter", + "source": "HostnameFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "hostname" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "IdOrName", + "source": "IdOrName", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "name", + "publicName": "name", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "InaccuracyDriverRow", + "source": "InaccuracyDriverRow", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "rowId", + "publicName": "rowId", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "clusterId", + "publicName": "clusterId", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "canonicalClaim", + "publicName": "canonicalClaim", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "snippet", + "publicName": "snippet", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "snippetClaimId", + "publicName": "snippetClaimId", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "claimOccurrence", + "publicName": "claimOccurrence", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "number" + } + }, + { + "name": "claimOccurrenceDelta", + "publicName": "claimOccurrenceDelta", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "href", + "publicName": "href", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "citationCategory", + "publicName": "citationCategory", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "domainCategory", + "publicName": "domainCategory", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "citationCount", + "publicName": "citationCount", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "InaccuracyDriversQuery", + "source": "InaccuracyDriversQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "comparison_start_date", + "publicName": "comparison_start_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "comparison_end_date", + "publicName": "comparison_end_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "topic_ids", + "publicName": "topic_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "exclude_topic_ids", + "publicName": "exclude_topic_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "tag_ids", + "publicName": "tag_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "tag_filter_type", + "publicName": "tag_filter_type", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "all", + "any" + ], + "names": [ + "All", + "Any" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "include_no_tag", + "publicName": "include_no_tag", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "region_ids", + "publicName": "region_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "platform_ids", + "publicName": "platform_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "persona_ids", + "publicName": "persona_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "include_no_persona", + "publicName": "include_no_persona", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "prompt_ids", + "publicName": "prompt_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "citation_categories", + "publicName": "citation_categories", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "limit", + "publicName": "limit", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer", + "validation": {} + } + } + ], + "additionalProperties": false + } + }, + { + "name": "InaccuracyDriversResponse", + "source": "InaccuracyDriversResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "data", + "publicName": "data", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "InaccuracyDriverRow" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "InaccurateClusterRow", + "source": "InaccurateClusterRow", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "clusterId", + "publicName": "clusterId", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "canonicalClaim", + "publicName": "canonicalClaim", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "description", + "publicName": "description", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "kbPath", + "publicName": "kbPath", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "kbSnippet", + "publicName": "kbSnippet", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "reasoning", + "publicName": "reasoning", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "claimCount", + "publicName": "claimCount", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "responseCount", + "publicName": "responseCount", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "totalResponseCount", + "publicName": "totalResponseCount", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "responseShare", + "publicName": "responseShare", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "number" + } + }, + { + "name": "responseShareDelta", + "publicName": "responseShareDelta", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "citationHostnames", + "publicName": "citationHostnames", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "InaccurateClustersQuery", + "source": "InaccurateClustersQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "comparison_start_date", + "publicName": "comparison_start_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "comparison_end_date", + "publicName": "comparison_end_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "topic_ids", + "publicName": "topic_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "exclude_topic_ids", + "publicName": "exclude_topic_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "tag_ids", + "publicName": "tag_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "tag_filter_type", + "publicName": "tag_filter_type", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "all", + "any" + ], + "names": [ + "All", + "Any" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "include_no_tag", + "publicName": "include_no_tag", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "region_ids", + "publicName": "region_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "platform_ids", + "publicName": "platform_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "persona_ids", + "publicName": "persona_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "include_no_persona", + "publicName": "include_no_persona", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "prompt_ids", + "publicName": "prompt_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "citation_categories", + "publicName": "citation_categories", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "theme_id", + "publicName": "theme_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "limit", + "publicName": "limit", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer", + "validation": {} + } + }, + { + "name": "offset", + "publicName": "offset", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer", + "validation": {} + } + }, + { + "name": "search_query", + "publicName": "search_query", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "InaccurateClustersResponse", + "source": "InaccurateClustersResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "data", + "publicName": "data", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "InaccurateClusterRow" + } + } + }, + { + "name": "totalCount", + "publicName": "totalCount", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "InaccurateThemeRow", + "source": "InaccurateThemeRow", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "themeId", + "publicName": "themeId", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "neutralTheme", + "publicName": "neutralTheme", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "description", + "publicName": "description", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "inaccurateClaimCount", + "publicName": "inaccurateClaimCount", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "inaccurateClusterCount", + "publicName": "inaccurateClusterCount", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "totalClaimCount", + "publicName": "totalClaimCount", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "totalClusterCount", + "publicName": "totalClusterCount", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "responseCount", + "publicName": "responseCount", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "totalResponseCount", + "publicName": "totalResponseCount", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "responseShare", + "publicName": "responseShare", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "number" + } + }, + { + "name": "responseShareDelta", + "publicName": "responseShareDelta", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "InaccurateThemesQuery", + "source": "InaccurateThemesQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "comparison_start_date", + "publicName": "comparison_start_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "comparison_end_date", + "publicName": "comparison_end_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "topic_ids", + "publicName": "topic_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "exclude_topic_ids", + "publicName": "exclude_topic_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "tag_ids", + "publicName": "tag_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "tag_filter_type", + "publicName": "tag_filter_type", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "all", + "any" + ], + "names": [ + "All", + "Any" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "include_no_tag", + "publicName": "include_no_tag", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "region_ids", + "publicName": "region_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "platform_ids", + "publicName": "platform_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "persona_ids", + "publicName": "persona_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "include_no_persona", + "publicName": "include_no_persona", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "prompt_ids", + "publicName": "prompt_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "citation_categories", + "publicName": "citation_categories", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "limit", + "publicName": "limit", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer", + "validation": {} + } + }, + { + "name": "offset", + "publicName": "offset", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer", + "validation": {} + } + }, + { + "name": "sort_by", + "publicName": "sort_by", + "required": false, + "deprecated": false, + "type": { + "kind": "literal", + "value": "response_share" + } + }, + { + "name": "sort_order", + "publicName": "sort_order", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "search_query", + "publicName": "search_query", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "InaccurateThemesResponse", + "source": "InaccurateThemesResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "data", + "publicName": "data", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "InaccurateThemeRow" + } + } + }, + { + "name": "totalCount", + "publicName": "totalCount", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ReportInfo", + "source": "ReportInfo", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "total_rows", + "publicName": "total_rows", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "query", + "publicName": "query", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "object", + "properties": [], + "additionalProperties": { + "kind": "unknown" + } + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "KnowledgeBaseItem", + "source": "KnowledgeBaseItem", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "name", + "publicName": "name", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "slug", + "publicName": "slug", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "description", + "publicName": "description", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "created_at", + "publicName": "created_at", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "KnowledgeBaseSearchResponse", + "source": "KnowledgeBaseSearchResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "data", + "publicName": "data", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "KnowledgeBaseSearchResult" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "ref", + "name": "CursorPagination" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "KnowledgeBaseSearchResult", + "source": "KnowledgeBaseSearchResult", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "score", + "publicName": "score", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "number" + } + }, + { + "name": "metadata", + "publicName": "metadata", + "required": true, + "deprecated": false, + "type": { + "kind": "object", + "properties": [], + "additionalProperties": { + "kind": "unknown" + } + } + }, + { + "name": "content", + "publicName": "content", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ListAgentsResponse", + "source": "ListAgentsResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "data", + "publicName": "data", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "Agent" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "ref", + "name": "CursorPagination" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ListAgentsStatusFilter", + "source": "ListAgentsStatusFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "published", + "draft" + ], + "names": [ + "Published", + "Draft" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "ListKnowledgeBasesResponse", + "source": "ListKnowledgeBasesResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "data", + "publicName": "data", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "KnowledgeBaseItem" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "ref", + "name": "CursorPagination" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ListNodeTypesResponse", + "source": "ListNodeTypesResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "data", + "publicName": "data", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "NodeTypeSummary" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "MerchantNameFilter", + "source": "MerchantNameFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "merchant_name" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ModelIdFilter", + "source": "ModelIdFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "literal", + "value": "model_id" + }, + { + "kind": "literal", + "value": "model" + } + ], + "variantNames": [ + null, + null + ] + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "NamedResource", + "source": "NamedResource", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "name", + "publicName": "name", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "NamedResourceDiffList", + "source": "NamedResourceDiffList", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "added", + "publicName": "added", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "NamedResource" + } + } + }, + { + "name": "removed", + "publicName": "removed", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "NamedResource" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "NodeSchemaResponse", + "source": "NodeSchemaResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "node_type", + "publicName": "node_type", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "schema", + "publicName": "schema", + "required": true, + "deprecated": false, + "type": { + "kind": "object", + "properties": [], + "additionalProperties": { + "kind": "unknown" + } + } + }, + { + "name": "schema_version", + "publicName": "schema_version", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "description", + "publicName": "description", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "examples", + "publicName": "examples", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "object", + "properties": [], + "additionalProperties": { + "kind": "unknown" + } + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "documentation", + "publicName": "documentation", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "object", + "properties": [], + "additionalProperties": { + "kind": "unknown" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "docs_version", + "publicName": "docs_version", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "NodeTypeSummary", + "source": "NodeTypeSummary", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "node_type", + "publicName": "node_type", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "display_name", + "publicName": "display_name", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "description", + "publicName": "description", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "NumericMetricFilter", + "source": "NumericMetricFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + ">", + ">=", + "<", + "<=", + "=", + "==", + "!=" + ], + "names": [ + "GreaterThan", + "GreaterThanEqual", + "LessThan", + "LessThanEqual", + "Equal", + "EqualEqual", + "NotEqual" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "integer" + }, + { + "kind": "primitive", + "type": "number" + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "OptimizationQuery", + "source": "OptimizationQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "asset_id", + "publicName": "asset_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "ref", + "name": "Pagination" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "OrderByDirection", + "source": "OrderByDirection", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "Organization", + "source": "Organization", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "name", + "publicName": "name", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "OrganizationAssetsResponse", + "source": "OrganizationAssetsResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "data", + "publicName": "data", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "CategoryAssetWithCategory" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "OrganizationPersonasWithCategory", + "source": "OrganizationPersonasWithCategory", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "name", + "publicName": "name", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "persona", + "publicName": "persona", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "PersonaProfile" + } + }, + { + "name": "category", + "publicName": "category", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "Category" + } + }, + { + "name": "organization", + "publicName": "organization", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "Organization" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "OrganizationPersonasWithCategoryResponse", + "source": "OrganizationPersonasWithCategoryResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "data", + "publicName": "data", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "OrganizationPersonasWithCategory" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "Pagination", + "source": "Pagination", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "limit", + "publicName": "limit", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer", + "validation": {} + } + }, + { + "name": "offset", + "publicName": "offset", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer", + "validation": {} + } + } + ], + "additionalProperties": false + } + }, + { + "name": "PaginationInfo", + "source": "PaginationInfo", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "total_rows", + "publicName": "total_rows", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "limit", + "publicName": "limit", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "next_cursor", + "publicName": "next_cursor", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "PathFilter", + "source": "PathFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "path" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "PersonaIdFilter", + "source": "PersonaIdFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "persona_id" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "PersonaProfile", + "source": "PersonaProfile", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "behavior", + "publicName": "behavior", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "PersonaProfileBehavior" + } + }, + { + "name": "employment", + "publicName": "employment", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "PersonaProfileEmployment" + } + }, + { + "name": "demographics", + "publicName": "demographics", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "PersonaProfileDemographics" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "PersonaProfileBehavior", + "source": "PersonaProfileBehavior", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "painPoints", + "publicName": "painPoints", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "motivations", + "publicName": "motivations", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "PersonaProfileDemographics", + "source": "PersonaProfileDemographics", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "ageRange", + "publicName": "ageRange", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "PersonaProfileEmployment", + "source": "PersonaProfileEmployment", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "industry", + "publicName": "industry", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "jobTitle", + "publicName": "jobTitle", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "companySize", + "publicName": "companySize", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "roleSeniority", + "publicName": "roleSeniority", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ProductNameFilter", + "source": "ProductNameFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "product_name" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "Prompt", + "source": "Prompt", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "analysis_types", + "publicName": "analysis_types", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ], + "names": [ + "Visibility", + "Sentiment", + "SentimentV2", + "Accuracy" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + } + }, + { + "name": "prompt_type", + "publicName": "prompt_type", + "required": false, + "deprecated": true, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "prompt", + "publicName": "prompt", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "language", + "publicName": "language", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "status", + "publicName": "status", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "active", + "disabled" + ], + "names": [ + "Active", + "Disabled" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "topic", + "publicName": "topic", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "NamedResource" + } + }, + { + "name": "tags", + "publicName": "tags", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "NamedResource" + } + } + }, + { + "name": "regions", + "publicName": "regions", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "NamedResource" + } + } + }, + { + "name": "platforms", + "publicName": "platforms", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "NamedResource" + } + } + }, + { + "name": "personas", + "publicName": "personas", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "NamedResource" + } + } + }, + { + "name": "created_at", + "publicName": "created_at", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "updated_at", + "publicName": "updated_at", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "PromptFilter", + "source": "PromptFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "prompt" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "PromptIdFilter", + "source": "PromptIdFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "prompt_id" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "PromptInput", + "source": "PromptInput", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "name", + "publicName": "name", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "PromptPreview", + "source": "PromptPreview", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "prompt", + "publicName": "prompt", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "topic", + "publicName": "topic", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "NamedResource" + } + }, + { + "name": "language", + "publicName": "language", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "tags", + "publicName": "tags", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "NamedResource" + } + } + }, + { + "name": "regions", + "publicName": "regions", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "NamedResource" + } + } + }, + { + "name": "platforms", + "publicName": "platforms", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "NamedResource" + } + } + }, + { + "name": "personas", + "publicName": "personas", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "NamedResource" + } + } + }, + { + "name": "analysis_types", + "publicName": "analysis_types", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ], + "names": [ + "Visibility", + "Sentiment", + "SentimentV2", + "Accuracy" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + } + }, + { + "name": "asset", + "publicName": "asset", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "NamedResource" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "PromptType", + "source": "PromptType", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "visibility", + "sentiment" + ], + "names": [ + "Visibility", + "Sentiment" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "PromptTypeFilter", + "source": "PromptTypeFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "prompt_type" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "enum", + "values": [ + "visibility", + "sentiment" + ], + "names": [ + "Visibility", + "Sentiment" + ], + "deprecations": [ + false, + false + ] + }, + { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "visibility", + "sentiment" + ], + "names": [ + "Visibility", + "Sentiment" + ], + "deprecations": [ + false, + false + ] + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "PromptUpdatePreview", + "source": "PromptUpdatePreview", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "prompt", + "publicName": "prompt", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "FieldDiff" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "topic", + "publicName": "topic", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "FieldDiff" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "language", + "publicName": "language", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "FieldDiff" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "tags", + "publicName": "tags", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "NamedResourceDiffList" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "regions", + "publicName": "regions", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "NamedResourceDiffList" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "platforms", + "publicName": "platforms", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "NamedResourceDiffList" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "personas", + "publicName": "personas", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "NamedResourceDiffList" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "analysis_types", + "publicName": "analysis_types", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "FieldDiff" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "asset", + "publicName": "asset", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "FieldDiff" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "QueryFanoutsQuery", + "source": "QueryFanoutsQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "date_interval", + "publicName": "date_interval", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "dimensions", + "publicName": "dimensions", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "prompt", + "query", + "model", + "region", + "date" + ], + "names": [ + "Prompt", + "Query", + "Model", + "Region", + "Date" + ], + "deprecations": [ + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "fanouts_per_execution", + "total_fanouts", + "share", + "query_variations" + ], + "names": [ + "FanoutsPerExecution", + "TotalFanouts", + "Share", + "QueryVariations" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + } + }, + { + "name": "order_by", + "publicName": "order_by", + "required": false, + "deprecated": false, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "ref", + "name": "Pagination" + } + }, + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "RegionIdFilter" + }, + { + "kind": "ref", + "name": "RegionNameFilter" + }, + { + "kind": "ref", + "name": "ModelIdFilter" + }, + { + "kind": "ref", + "name": "TopicIdFilter" + }, + { + "kind": "ref", + "name": "TagIdFilter" + }, + { + "kind": "ref", + "name": "PromptIdFilter" + }, + { + "kind": "ref", + "name": "PersonaIdFilter" + }, + { + "kind": "ref", + "name": "AnalysisTypeFilter" + }, + { + "kind": "ref", + "name": "PromptTypeFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "analysis_type": "AnalysisTypeFilter", + "model": "ModelIdFilter", + "model_id": "ModelIdFilter", + "persona_id": "PersonaIdFilter", + "prompt_id": "PromptIdFilter", + "prompt_type": "PromptTypeFilter", + "region": "RegionIdFilter", + "region_id": "RegionIdFilter", + "region_name": "RegionNameFilter", + "tag": "TagIdFilter", + "tag_id": "TagIdFilter", + "topic": "TopicIdFilter", + "topic_id": "TopicIdFilter" + } + }, + "variantNames": [ + "RegionIdFilter", + "RegionNameFilter", + "ModelIdFilter", + "TopicIdFilter", + "TagIdFilter", + "PromptIdFilter", + "PersonaIdFilter", + "AnalysisTypeFilter", + "PromptTypeFilter" + ] + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "QueryFanoutsV2Query", + "source": "QueryFanoutsV2Query", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "group_by", + "publicName": "group_by", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "date", + "model", + "region", + "prompt", + "query" + ], + "names": [ + "Date", + "Model", + "Region", + "Prompt", + "Query" + ], + "deprecations": [ + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "fanouts_per_execution", + "total_fanouts", + "share", + "query_variations" + ], + "names": [ + "FanoutsPerExecution", + "TotalFanouts", + "Share", + "QueryVariations" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "interval", + "publicName": "interval", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "day", + "week", + "month" + ], + "names": [ + "Day", + "Week", + "Month" + ], + "deprecations": [ + false, + false, + false + ] + } + }, + { + "name": "filter", + "publicName": "filter", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "FilterNode" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "sort", + "publicName": "sort", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "AppRoutesV2AnswerEngineInsightsReportsQueryFanoutsSortSpec" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "limit", + "publicName": "limit", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "integer", + "validation": {} + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "max_results", + "publicName": "max_results", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "integer" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "cursor", + "publicName": "cursor", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "Recommendation", + "source": "Recommendation", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "title", + "publicName": "title", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "status", + "publicName": "status", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "RecommendationStatus" + } + }, + { + "name": "impact", + "publicName": "impact", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "RecommendationImpact" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "suggestion", + "publicName": "suggestion", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "RecommendationSuggestion" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "RecommendationImpact", + "source": "RecommendationImpact", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "section", + "publicName": "section", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "score", + "publicName": "score", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "number" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "RecommendationStatus", + "source": "RecommendationStatus", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "done", + "pending" + ], + "names": [ + "Done", + "Pending" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "RecommendationSuggestion", + "source": "RecommendationSuggestion", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "text", + "publicName": "text", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "rationale", + "publicName": "rationale", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ReferralSourceFilter", + "source": "ReferralSourceFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "referral_source" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "enum", + "values": [ + "openai", + "none", + "anthropic", + "deepseek", + "perplexity", + "you", + "grok", + "microsoft", + "gemini", + "internal", + "other" + ], + "names": [ + "Openai", + "None", + "Anthropic", + "Deepseek", + "Perplexity", + "You", + "Grok", + "Microsoft", + "Gemini", + "Internal", + "Other" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + }, + { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "openai", + "none", + "anthropic", + "deepseek", + "perplexity", + "you", + "grok", + "microsoft", + "gemini", + "internal", + "other" + ], + "names": [ + "Openai", + "None", + "Anthropic", + "Deepseek", + "Perplexity", + "You", + "Grok", + "Microsoft", + "Gemini", + "Internal", + "Other" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ReferralTypeFilter", + "source": "ReferralTypeFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "referral_type" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "enum", + "values": [ + "internal", + "referer", + "utm", + "none" + ], + "names": [ + "Internal", + "Referer", + "Utm", + "None" + ], + "deprecations": [ + false, + false, + false, + false + ] + }, + { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "internal", + "referer", + "utm", + "none" + ], + "names": [ + "Internal", + "Referer", + "Utm", + "None" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ReferralsQuery", + "source": "ReferralsQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "date_interval", + "publicName": "date_interval", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "dimensions", + "publicName": "dimensions", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "date", + "path", + "referral_source" + ], + "names": [ + "Date", + "Path", + "ReferralSource" + ], + "deprecations": [ + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "visits", + "last_visit" + ], + "names": [ + "Visits", + "LastVisit" + ], + "deprecations": [ + false, + false + ] + } + } + }, + { + "name": "order_by", + "publicName": "order_by", + "required": false, + "deprecated": false, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "ref", + "name": "Pagination" + } + }, + { + "name": "domain", + "publicName": "domain", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "organization_id", + "publicName": "organization_id", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "metric_filters", + "publicName": "metric_filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "NumericMetricFilter" + } + } + }, + { + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "PathFilter" + }, + { + "kind": "ref", + "name": "ReferralSourceFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "path": "PathFilter", + "referral_source": "ReferralSourceFilter" + } + }, + "variantNames": [ + "PathFilter", + "ReferralSourceFilter" + ] + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ReferralsQueryV2", + "source": "ReferralsQueryV2", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "date_interval", + "publicName": "date_interval", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "dimensions", + "publicName": "dimensions", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "date", + "hour", + "path", + "referral_source", + "referral_type" + ], + "names": [ + "Date", + "Hour", + "Path", + "ReferralSource", + "ReferralType" + ], + "deprecations": [ + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "visits", + "last_visit" + ], + "names": [ + "Visits", + "LastVisit" + ], + "deprecations": [ + false, + false + ] + } + } + }, + { + "name": "order_by", + "publicName": "order_by", + "required": false, + "deprecated": false, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "ref", + "name": "Pagination" + } + }, + { + "name": "domain", + "publicName": "domain", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "organization_id", + "publicName": "organization_id", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "metric_filters", + "publicName": "metric_filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "NumericMetricFilter" + } + } + }, + { + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "PathFilter" + }, + { + "kind": "ref", + "name": "ReferralSourceFilter" + }, + { + "kind": "ref", + "name": "ReferralTypeFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "path": "PathFilter", + "referral_source": "ReferralSourceFilter", + "referral_type": "ReferralTypeFilter" + } + }, + "variantNames": [ + "PathFilter", + "ReferralSourceFilter", + "ReferralTypeFilter" + ] + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "RegionIdFilter", + "source": "RegionIdFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "literal", + "value": "region_id" + }, + { + "kind": "literal", + "value": "region" + } + ], + "variantNames": [ + null, + null + ] + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "RegionNameFilter", + "source": "RegionNameFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "region_name" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ReportResponse", + "source": "ReportResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "info", + "publicName": "info", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "ReportInfo" + } + }, + { + "name": "data", + "publicName": "data", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "ReportResult" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ReportResult", + "source": "ReportResult", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "metrics", + "publicName": "metrics", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "integer" + }, + { + "kind": "primitive", + "type": "number" + } + ], + "variantNames": [ + null, + null + ] + } + } + }, + { + "name": "dimensions", + "publicName": "dimensions", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + ], + "variantNames": [ + null, + null + ] + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "RootDomainFilter", + "source": "RootDomainFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "root_domain" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "RunAgentRequest", + "source": "RunAgentRequest", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "inputs", + "publicName": "inputs", + "required": false, + "deprecated": false, + "type": { + "kind": "object", + "properties": [], + "additionalProperties": { + "kind": "unknown" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "SearchKnowledgeBaseFilters", + "source": "SearchKnowledgeBaseFilters", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "tags", + "publicName": "tags", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "validation": { + "minLength": 1 + } + }, + "validation": { + "minItems": 1 + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "folders", + "publicName": "folders", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "validation": { + "minLength": 1 + } + }, + "validation": { + "minItems": 1, + "maxItems": 1 + } + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "SearchKnowledgeBaseRequest", + "source": "SearchKnowledgeBaseRequest", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "query", + "publicName": "query", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "validation": { + "minLength": 1 + } + } + }, + { + "name": "top_k", + "publicName": "top_k", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer", + "validation": {} + } + }, + { + "name": "return_full_page", + "publicName": "return_full_page", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "SearchKnowledgeBaseFilters" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "SearchQueryFilter", + "source": "SearchQueryFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "search_query" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "SentimentDataPoint", + "source": "SentimentDataPoint", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "scores", + "publicName": "scores", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "SentimentPeriodScores" + } + }, + { + "name": "date", + "publicName": "date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "prev_date", + "publicName": "prev_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "group_ids", + "publicName": "group_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "record", + "value": { + "kind": "primitive", + "type": "string" + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "group_names", + "publicName": "group_names", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "record", + "value": { + "kind": "primitive", + "type": "string" + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "group_metadata", + "publicName": "group_metadata", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "SentimentGroupMetadata" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "cited_website_hrefs", + "publicName": "cited_website_hrefs", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "total_count", + "publicName": "total_count", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "integer" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "SentimentGroupMetadata", + "source": "SentimentGroupMetadata", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "theme_id", + "publicName": "theme_id", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "theme", + "publicName": "theme", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "claim_id", + "publicName": "claim_id", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "claim", + "publicName": "claim", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "sentiment", + "publicName": "sentiment", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "enum", + "values": [ + "positive", + "negative" + ], + "names": [ + "Positive", + "Negative" + ], + "deprecations": [ + false, + false + ] + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "prompt_id", + "publicName": "prompt_id", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "prompt_text", + "publicName": "prompt_text", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "topic_id", + "publicName": "topic_id", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "run_id", + "publicName": "run_id", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "created_at", + "publicName": "created_at", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "model_id", + "publicName": "model_id", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "region_id", + "publicName": "region_id", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "persona_id", + "publicName": "persona_id", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "asset_name", + "publicName": "asset_name", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "child_count_total", + "publicName": "child_count_total", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "integer" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "child_count_matching", + "publicName": "child_count_matching", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "integer" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "parent_matches_search", + "publicName": "parent_matches_search", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "child_matches_search", + "publicName": "child_matches_search", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "SentimentPeriodScores", + "source": "SentimentPeriodScores", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "current", + "publicName": "current", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "SentimentScores" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "previous", + "publicName": "previous", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "SentimentScores" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "SentimentQuery", + "source": "SentimentQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "date_interval", + "publicName": "date_interval", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "dimensions", + "publicName": "dimensions", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "theme", + "date", + "region", + "topic", + "topic_id", + "model", + "asset_id", + "asset_name", + "tag", + "prompt", + "prompt_id", + "sentiment_type", + "persona" + ], + "names": [ + "Theme", + "Date", + "Region", + "Topic", + "TopicId", + "Model", + "AssetId", + "AssetName", + "Tag", + "Prompt", + "PromptId", + "SentimentType", + "Persona" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "positive", + "negative", + "occurrences" + ], + "names": [ + "Positive", + "Negative", + "Occurrences" + ], + "deprecations": [ + false, + false, + false + ] + } + } + }, + { + "name": "order_by", + "publicName": "order_by", + "required": false, + "deprecated": false, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "ref", + "name": "Pagination" + } + }, + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "AssetIdFilter" + }, + { + "kind": "ref", + "name": "ProfoundAnswerEngineInsightsFiltersAssetNameFilter" + }, + { + "kind": "ref", + "name": "ThemeFilter" + }, + { + "kind": "ref", + "name": "RegionIdFilter" + }, + { + "kind": "ref", + "name": "RegionNameFilter" + }, + { + "kind": "ref", + "name": "TopicIdFilter" + }, + { + "kind": "ref", + "name": "TopicNameFilter" + }, + { + "kind": "ref", + "name": "ModelIdFilter" + }, + { + "kind": "ref", + "name": "TagIdFilter" + }, + { + "kind": "ref", + "name": "TagNameFilter" + }, + { + "kind": "ref", + "name": "PromptFilter" + }, + { + "kind": "ref", + "name": "PersonaIdFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_id": "AssetIdFilter", + "asset_name": "ProfoundAnswerEngineInsightsFiltersAssetNameFilter", + "model": "ModelIdFilter", + "model_id": "ModelIdFilter", + "persona_id": "PersonaIdFilter", + "prompt": "PromptFilter", + "region": "RegionIdFilter", + "region_id": "RegionIdFilter", + "region_name": "RegionNameFilter", + "tag": "TagIdFilter", + "tag_id": "TagIdFilter", + "tag_name": "TagNameFilter", + "theme": "ThemeFilter", + "topic": "TopicIdFilter", + "topic_id": "TopicIdFilter", + "topic_name": "TopicNameFilter" + } + }, + "variantNames": [ + "AssetIdFilter", + "AssetNameFilter", + "ThemeFilter", + "RegionIdFilter", + "RegionNameFilter", + "TopicIdFilter", + "TopicNameFilter", + "ModelIdFilter", + "TagIdFilter", + "TagNameFilter", + "PromptFilter", + "PersonaIdFilter" + ] + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "SentimentScores", + "source": "SentimentScores", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "positive_sentiment", + "publicName": "positive_sentiment", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "number" + } + }, + { + "name": "negative_sentiment", + "publicName": "negative_sentiment", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "number" + } + }, + { + "name": "assessment_count", + "publicName": "assessment_count", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "occurrence", + "publicName": "occurrence", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "response_count", + "publicName": "response_count", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "integer" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "total_response_count", + "publicName": "total_response_count", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "integer" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "SentimentTheme", + "source": "SentimentTheme", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "type", + "publicName": "type", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "literal", + "value": "positive" + }, + { + "kind": "literal", + "value": "negative" + } + ], + "variantNames": [ + null, + null + ] + } + }, + { + "name": "name", + "publicName": "name", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "SentimentV2ClaimFilter", + "source": "SentimentV2ClaimFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "claim" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "SentimentV2ClaimIdFilter", + "source": "SentimentV2ClaimIdFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "claim_id" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "SentimentV2ModelIdFilter", + "source": "SentimentV2ModelIdFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "model_id" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "SentimentV2PersonaIdFilter", + "source": "SentimentV2PersonaIdFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "persona_id" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "SentimentV2PromptIdFilter", + "source": "SentimentV2PromptIdFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "prompt_id" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "SentimentV2Query", + "source": "SentimentV2Query", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "asset", + "publicName": "asset", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "comparison_start_date", + "publicName": "comparison_start_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "comparison_end_date", + "publicName": "comparison_end_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "group_by", + "publicName": "group_by", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "date", + "model", + "topic", + "region", + "prompt", + "persona", + "tag", + "theme", + "claim", + "run", + "competitor" + ], + "names": [ + "Date", + "Model", + "Topic", + "Region", + "Prompt", + "Persona", + "Tag", + "Theme", + "Claim", + "Run", + "Competitor" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "positive_sentiment", + "negative_sentiment", + "occurrence" + ], + "names": [ + "PositiveSentiment", + "NegativeSentiment", + "Occurrence" + ], + "deprecations": [ + false, + false, + false + ] + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "interval", + "publicName": "interval", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "day", + "week", + "month" + ], + "names": [ + "Day", + "Week", + "Month" + ], + "deprecations": [ + false, + false, + false + ] + } + }, + { + "name": "filter", + "publicName": "filter", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "FilterNode" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "sort", + "publicName": "sort", + "required": false, + "deprecated": false, + "type": { + "kind": "ref", + "name": "AppRoutesV2AnswerEngineInsightsReportsSentimentSortSpec" + } + }, + { + "name": "include_cited_websites", + "publicName": "include_cited_websites", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "limit", + "publicName": "limit", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "integer", + "validation": {} + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "max_results", + "publicName": "max_results", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "integer" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "cursor", + "publicName": "cursor", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "SentimentV2RegionIdFilter", + "source": "SentimentV2RegionIdFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "region_id" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "SentimentV2ReportInfo", + "source": "SentimentV2ReportInfo", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "query", + "publicName": "query", + "required": true, + "deprecated": false, + "type": { + "kind": "object", + "properties": [], + "additionalProperties": { + "kind": "unknown" + } + } + }, + { + "name": "total_rows", + "publicName": "total_rows", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "SentimentV2ReportQuery", + "source": "SentimentV2ReportQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "asset_name", + "publicName": "asset_name", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "comparison_start_date", + "publicName": "comparison_start_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "comparison_end_date", + "publicName": "comparison_end_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "date_interval", + "publicName": "date_interval", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "dimensions", + "publicName": "dimensions", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "date", + "topic", + "region", + "model", + "prompt", + "persona", + "tag", + "theme", + "claim", + "run", + "asset_name" + ], + "names": [ + "Date", + "Topic", + "Region", + "Model", + "Prompt", + "Persona", + "Tag", + "Theme", + "Claim", + "Run", + "AssetName" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "sentiment", + "occurrence" + ], + "names": [ + "Sentiment", + "Occurrence" + ], + "deprecations": [ + false, + false + ] + } + } + }, + { + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "SentimentV2ModelIdFilter" + }, + { + "kind": "ref", + "name": "SentimentV2RegionIdFilter" + }, + { + "kind": "ref", + "name": "SentimentV2TopicIdFilter" + }, + { + "kind": "ref", + "name": "SentimentV2PromptIdFilter" + }, + { + "kind": "ref", + "name": "SentimentV2PersonaIdFilter" + }, + { + "kind": "ref", + "name": "SentimentV2TagIdFilter" + }, + { + "kind": "ref", + "name": "SentimentV2RunIdFilter" + }, + { + "kind": "ref", + "name": "SentimentV2ThemeIdFilter" + }, + { + "kind": "ref", + "name": "SentimentV2ThemeFilter" + }, + { + "kind": "ref", + "name": "SentimentV2ClaimIdFilter" + }, + { + "kind": "ref", + "name": "SentimentV2ClaimFilter" + }, + { + "kind": "ref", + "name": "SentimentV2SentimentFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "claim": "SentimentV2ClaimFilter", + "claim_id": "SentimentV2ClaimIdFilter", + "model_id": "SentimentV2ModelIdFilter", + "persona_id": "SentimentV2PersonaIdFilter", + "prompt_id": "SentimentV2PromptIdFilter", + "region_id": "SentimentV2RegionIdFilter", + "run_id": "SentimentV2RunIdFilter", + "sentiment": "SentimentV2SentimentFilter", + "tag_id": "SentimentV2TagIdFilter", + "theme": "SentimentV2ThemeFilter", + "theme_id": "SentimentV2ThemeIdFilter", + "topic_id": "SentimentV2TopicIdFilter" + } + }, + "variantNames": [ + "SentimentV2ModelIdFilter", + "SentimentV2RegionIdFilter", + "SentimentV2TopicIdFilter", + "SentimentV2PromptIdFilter", + "SentimentV2PersonaIdFilter", + "SentimentV2TagIdFilter", + "SentimentV2RunIdFilter", + "SentimentV2ThemeIdFilter", + "SentimentV2ThemeFilter", + "SentimentV2ClaimIdFilter", + "SentimentV2ClaimFilter", + "SentimentV2SentimentFilter" + ] + } + } + }, + { + "name": "order_by", + "publicName": "order_by", + "required": false, + "deprecated": false, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "ref", + "name": "Pagination" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "SentimentV2ReportResponse", + "source": "SentimentV2ReportResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "info", + "publicName": "info", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "SentimentV2ReportInfo" + } + }, + { + "name": "data", + "publicName": "data", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "SentimentDataPoint" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "SentimentV2RunIdFilter", + "source": "SentimentV2RunIdFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "run_id" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "SentimentV2SentimentFilter", + "source": "SentimentV2SentimentFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "sentiment" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "enum", + "values": [ + "positive", + "negative" + ], + "names": [ + "Positive", + "Negative" + ], + "deprecations": [ + false, + false + ] + }, + { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "positive", + "negative" + ], + "names": [ + "Positive", + "Negative" + ], + "deprecations": [ + false, + false + ] + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "SentimentV2TagIdFilter", + "source": "SentimentV2TagIdFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "tag_id" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "SentimentV2ThemeFilter", + "source": "SentimentV2ThemeFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "theme" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "SentimentV2ThemeIdFilter", + "source": "SentimentV2ThemeIdFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "theme_id" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "SentimentV2TopicIdFilter", + "source": "SentimentV2TopicIdFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "topic_id" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ShoppingAllItemsWithMerchantsQuery", + "source": "ShoppingAllItemsWithMerchantsQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "comparison_start_date", + "publicName": "comparison_start_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "comparison_end_date", + "publicName": "comparison_end_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "date_interval", + "publicName": "date_interval", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "RegionIdFilter" + }, + { + "kind": "ref", + "name": "ModelIdFilter" + }, + { + "kind": "ref", + "name": "TopicIdFilter" + }, + { + "kind": "ref", + "name": "TagIdFilter" + }, + { + "kind": "ref", + "name": "PromptIdFilter" + }, + { + "kind": "ref", + "name": "PersonaIdFilter" + }, + { + "kind": "ref", + "name": "BrandNameFilter" + }, + { + "kind": "ref", + "name": "MerchantNameFilter" + }, + { + "kind": "ref", + "name": "ProductNameFilter" + }, + { + "kind": "ref", + "name": "ProfoundShoppingApiAssetNameFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "ProfoundShoppingApiAssetNameFilter", + "brand_name": "BrandNameFilter", + "merchant_name": "MerchantNameFilter", + "model": "ModelIdFilter", + "model_id": "ModelIdFilter", + "persona_id": "PersonaIdFilter", + "product_name": "ProductNameFilter", + "prompt_id": "PromptIdFilter", + "region": "RegionIdFilter", + "region_id": "RegionIdFilter", + "tag": "TagIdFilter", + "tag_id": "TagIdFilter", + "topic": "TopicIdFilter", + "topic_id": "TopicIdFilter" + } + }, + "variantNames": [ + "RegionIdFilter", + "ModelIdFilter", + "TopicIdFilter", + "TagIdFilter", + "PromptIdFilter", + "PersonaIdFilter", + "BrandNameFilter", + "MerchantNameFilter", + "ProductNameFilter", + "AssetNameFilter" + ] + } + } + }, + { + "name": "order_by", + "publicName": "order_by", + "required": false, + "deprecated": false, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "Pagination" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "include_count", + "publicName": "include_count", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "tag_filter_type", + "publicName": "tag_filter_type", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "any", + "all" + ], + "names": [ + "Any", + "All" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "include_no_tag", + "publicName": "include_no_tag", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "exclude_topic_ids", + "publicName": "exclude_topic_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "dimensions", + "publicName": "dimensions", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "period", + "product_name", + "brand_name", + "product_url", + "product_image_urls", + "product_price", + "merchant_names", + "merchant_prices" + ], + "names": [ + "Period", + "ProductName", + "BrandName", + "ProductUrl", + "ProductImageUrls", + "ProductPrice", + "MerchantNames", + "MerchantPrices" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "visibility_score", + "share_of_voice", + "average_position", + "visibility_rank", + "product_rating", + "product_num_reviews", + "total_count" + ], + "names": [ + "VisibilityScore", + "ShareOfVoice", + "AveragePosition", + "VisibilityRank", + "ProductRating", + "ProductNumReviews", + "TotalCount" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "owned_asset_names", + "publicName": "owned_asset_names", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "include_items", + "publicName": "include_items", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "search_item", + "publicName": "search_item", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "merchant_filter_type", + "publicName": "merchant_filter_type", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "any", + "all" + ], + "names": [ + "Any", + "All" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "rank_by", + "publicName": "rank_by", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "visibility", + "average_position", + "name" + ], + "names": [ + "Visibility", + "AveragePosition", + "Name" + ], + "deprecations": [ + false, + false, + false + ] + } + }, + { + "name": "sort_order", + "publicName": "sort_order", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ShoppingExecutionsQuery", + "source": "ShoppingExecutionsQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "comparison_start_date", + "publicName": "comparison_start_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "comparison_end_date", + "publicName": "comparison_end_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "date_interval", + "publicName": "date_interval", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "RegionIdFilter" + }, + { + "kind": "ref", + "name": "ModelIdFilter" + }, + { + "kind": "ref", + "name": "TopicIdFilter" + }, + { + "kind": "ref", + "name": "TagIdFilter" + }, + { + "kind": "ref", + "name": "PromptIdFilter" + }, + { + "kind": "ref", + "name": "PersonaIdFilter" + }, + { + "kind": "ref", + "name": "BrandNameFilter" + }, + { + "kind": "ref", + "name": "MerchantNameFilter" + }, + { + "kind": "ref", + "name": "ProductNameFilter" + }, + { + "kind": "ref", + "name": "ProfoundShoppingApiAssetNameFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "ProfoundShoppingApiAssetNameFilter", + "brand_name": "BrandNameFilter", + "merchant_name": "MerchantNameFilter", + "model": "ModelIdFilter", + "model_id": "ModelIdFilter", + "persona_id": "PersonaIdFilter", + "product_name": "ProductNameFilter", + "prompt_id": "PromptIdFilter", + "region": "RegionIdFilter", + "region_id": "RegionIdFilter", + "tag": "TagIdFilter", + "tag_id": "TagIdFilter", + "topic": "TopicIdFilter", + "topic_id": "TopicIdFilter" + } + }, + "variantNames": [ + "RegionIdFilter", + "ModelIdFilter", + "TopicIdFilter", + "TagIdFilter", + "PromptIdFilter", + "PersonaIdFilter", + "BrandNameFilter", + "MerchantNameFilter", + "ProductNameFilter", + "AssetNameFilter" + ] + } + } + }, + { + "name": "order_by", + "publicName": "order_by", + "required": false, + "deprecated": false, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "Pagination" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "include_count", + "publicName": "include_count", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "tag_filter_type", + "publicName": "tag_filter_type", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "any", + "all" + ], + "names": [ + "Any", + "All" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "include_no_tag", + "publicName": "include_no_tag", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "exclude_topic_ids", + "publicName": "exclude_topic_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "analysis_types", + "publicName": "analysis_types", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ], + "names": [ + "Visibility", + "Sentiment", + "SentimentV2", + "Accuracy" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + } + }, + { + "name": "analysis_filter_type", + "publicName": "analysis_filter_type", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "any", + "all" + ], + "names": [ + "Any", + "All" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "owned_asset_names", + "publicName": "owned_asset_names", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ShoppingItemVisibilityQuery", + "source": "ShoppingItemVisibilityQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "comparison_start_date", + "publicName": "comparison_start_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "comparison_end_date", + "publicName": "comparison_end_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "date_interval", + "publicName": "date_interval", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "RegionIdFilter" + }, + { + "kind": "ref", + "name": "ModelIdFilter" + }, + { + "kind": "ref", + "name": "TopicIdFilter" + }, + { + "kind": "ref", + "name": "TagIdFilter" + }, + { + "kind": "ref", + "name": "PromptIdFilter" + }, + { + "kind": "ref", + "name": "PersonaIdFilter" + }, + { + "kind": "ref", + "name": "BrandNameFilter" + }, + { + "kind": "ref", + "name": "MerchantNameFilter" + }, + { + "kind": "ref", + "name": "ProductNameFilter" + }, + { + "kind": "ref", + "name": "ProfoundShoppingApiAssetNameFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "ProfoundShoppingApiAssetNameFilter", + "brand_name": "BrandNameFilter", + "merchant_name": "MerchantNameFilter", + "model": "ModelIdFilter", + "model_id": "ModelIdFilter", + "persona_id": "PersonaIdFilter", + "product_name": "ProductNameFilter", + "prompt_id": "PromptIdFilter", + "region": "RegionIdFilter", + "region_id": "RegionIdFilter", + "tag": "TagIdFilter", + "tag_id": "TagIdFilter", + "topic": "TopicIdFilter", + "topic_id": "TopicIdFilter" + } + }, + "variantNames": [ + "RegionIdFilter", + "ModelIdFilter", + "TopicIdFilter", + "TagIdFilter", + "PromptIdFilter", + "PersonaIdFilter", + "BrandNameFilter", + "MerchantNameFilter", + "ProductNameFilter", + "AssetNameFilter" + ] + } + } + }, + { + "name": "order_by", + "publicName": "order_by", + "required": false, + "deprecated": false, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "Pagination" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "include_count", + "publicName": "include_count", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "tag_filter_type", + "publicName": "tag_filter_type", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "any", + "all" + ], + "names": [ + "Any", + "All" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "include_no_tag", + "publicName": "include_no_tag", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "exclude_topic_ids", + "publicName": "exclude_topic_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "dimensions", + "publicName": "dimensions", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "period", + "product_name", + "brand_name", + "date", + "topic_id", + "prompt_id", + "prompt", + "product_url", + "product_image_urls", + "product_price" + ], + "names": [ + "Period", + "ProductName", + "BrandName", + "Date", + "TopicId", + "PromptId", + "Prompt", + "ProductUrl", + "ProductImageUrls", + "ProductPrice" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "visibility_score", + "share_of_voice", + "average_position", + "visibility_rank", + "position1_percentage", + "position2_percentage", + "position3_percentage", + "position_above3_percentage", + "product_rating", + "product_num_reviews", + "total_count" + ], + "names": [ + "VisibilityScore", + "ShareOfVoice", + "AveragePosition", + "VisibilityRank", + "Position1Percentage", + "Position2Percentage", + "Position3Percentage", + "PositionAbove3Percentage", + "ProductRating", + "ProductNumReviews", + "TotalCount" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "owned_asset_names", + "publicName": "owned_asset_names", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "include_items", + "publicName": "include_items", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "search_item", + "publicName": "search_item", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "merchant_filter_type", + "publicName": "merchant_filter_type", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "any", + "all" + ], + "names": [ + "Any", + "All" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "include_competitors", + "publicName": "include_competitors", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "target_product", + "publicName": "target_product", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "competitor_limit", + "publicName": "competitor_limit", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer", + "validation": {} + } + }, + { + "name": "include_position_frequency", + "publicName": "include_position_frequency", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ShoppingMerchantByItemsQuery", + "source": "ShoppingMerchantByItemsQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "comparison_start_date", + "publicName": "comparison_start_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "comparison_end_date", + "publicName": "comparison_end_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "date_interval", + "publicName": "date_interval", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "RegionIdFilter" + }, + { + "kind": "ref", + "name": "ModelIdFilter" + }, + { + "kind": "ref", + "name": "TopicIdFilter" + }, + { + "kind": "ref", + "name": "TagIdFilter" + }, + { + "kind": "ref", + "name": "PromptIdFilter" + }, + { + "kind": "ref", + "name": "PersonaIdFilter" + }, + { + "kind": "ref", + "name": "BrandNameFilter" + }, + { + "kind": "ref", + "name": "MerchantNameFilter" + }, + { + "kind": "ref", + "name": "ProductNameFilter" + }, + { + "kind": "ref", + "name": "ProfoundShoppingApiAssetNameFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "ProfoundShoppingApiAssetNameFilter", + "brand_name": "BrandNameFilter", + "merchant_name": "MerchantNameFilter", + "model": "ModelIdFilter", + "model_id": "ModelIdFilter", + "persona_id": "PersonaIdFilter", + "product_name": "ProductNameFilter", + "prompt_id": "PromptIdFilter", + "region": "RegionIdFilter", + "region_id": "RegionIdFilter", + "tag": "TagIdFilter", + "tag_id": "TagIdFilter", + "topic": "TopicIdFilter", + "topic_id": "TopicIdFilter" + } + }, + "variantNames": [ + "RegionIdFilter", + "ModelIdFilter", + "TopicIdFilter", + "TagIdFilter", + "PromptIdFilter", + "PersonaIdFilter", + "BrandNameFilter", + "MerchantNameFilter", + "ProductNameFilter", + "AssetNameFilter" + ] + } + } + }, + { + "name": "order_by", + "publicName": "order_by", + "required": false, + "deprecated": false, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "Pagination" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "include_count", + "publicName": "include_count", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "tag_filter_type", + "publicName": "tag_filter_type", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "any", + "all" + ], + "names": [ + "Any", + "All" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "include_no_tag", + "publicName": "include_no_tag", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "exclude_topic_ids", + "publicName": "exclude_topic_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "dimensions", + "publicName": "dimensions", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "period", + "merchant_name", + "product_name", + "brand_name", + "product_image_urls", + "product_price", + "merchant_prices", + "has_instant_checkout", + "delivery_options", + "merchant_url" + ], + "names": [ + "Period", + "MerchantName", + "ProductName", + "BrandName", + "ProductImageUrls", + "ProductPrice", + "MerchantPrices", + "HasInstantCheckout", + "DeliveryOptions", + "MerchantUrl" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "merchant_visibility", + "product_visibility", + "product_rank", + "avg_position", + "total_count" + ], + "names": [ + "MerchantVisibility", + "ProductVisibility", + "ProductRank", + "AvgPosition", + "TotalCount" + ], + "deprecations": [ + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "product_name", + "publicName": "product_name", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ShoppingMerchantDistributionQuery", + "source": "ShoppingMerchantDistributionQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "comparison_start_date", + "publicName": "comparison_start_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "comparison_end_date", + "publicName": "comparison_end_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "date_interval", + "publicName": "date_interval", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "RegionIdFilter" + }, + { + "kind": "ref", + "name": "ModelIdFilter" + }, + { + "kind": "ref", + "name": "TopicIdFilter" + }, + { + "kind": "ref", + "name": "TagIdFilter" + }, + { + "kind": "ref", + "name": "PromptIdFilter" + }, + { + "kind": "ref", + "name": "PersonaIdFilter" + }, + { + "kind": "ref", + "name": "BrandNameFilter" + }, + { + "kind": "ref", + "name": "MerchantNameFilter" + }, + { + "kind": "ref", + "name": "ProductNameFilter" + }, + { + "kind": "ref", + "name": "ProfoundShoppingApiAssetNameFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "ProfoundShoppingApiAssetNameFilter", + "brand_name": "BrandNameFilter", + "merchant_name": "MerchantNameFilter", + "model": "ModelIdFilter", + "model_id": "ModelIdFilter", + "persona_id": "PersonaIdFilter", + "product_name": "ProductNameFilter", + "prompt_id": "PromptIdFilter", + "region": "RegionIdFilter", + "region_id": "RegionIdFilter", + "tag": "TagIdFilter", + "tag_id": "TagIdFilter", + "topic": "TopicIdFilter", + "topic_id": "TopicIdFilter" + } + }, + "variantNames": [ + "RegionIdFilter", + "ModelIdFilter", + "TopicIdFilter", + "TagIdFilter", + "PromptIdFilter", + "PersonaIdFilter", + "BrandNameFilter", + "MerchantNameFilter", + "ProductNameFilter", + "AssetNameFilter" + ] + } + } + }, + { + "name": "order_by", + "publicName": "order_by", + "required": false, + "deprecated": false, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "Pagination" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "include_count", + "publicName": "include_count", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "tag_filter_type", + "publicName": "tag_filter_type", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "any", + "all" + ], + "names": [ + "Any", + "All" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "include_no_tag", + "publicName": "include_no_tag", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "exclude_topic_ids", + "publicName": "exclude_topic_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "dimensions", + "publicName": "dimensions", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "period", + "merchant_name", + "date", + "owned_asset_name" + ], + "names": [ + "Period", + "MerchantName", + "Date", + "OwnedAssetName" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "offer_count", + "product_count", + "average_rank", + "share_of_offers", + "visibility_rank", + "total_count" + ], + "names": [ + "OfferCount", + "ProductCount", + "AverageRank", + "ShareOfOffers", + "VisibilityRank", + "TotalCount" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "owned_asset_names", + "publicName": "owned_asset_names", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "search_merchant", + "publicName": "search_merchant", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ShoppingMerchantShareQuery", + "source": "ShoppingMerchantShareQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "comparison_start_date", + "publicName": "comparison_start_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "comparison_end_date", + "publicName": "comparison_end_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "date_interval", + "publicName": "date_interval", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "RegionIdFilter" + }, + { + "kind": "ref", + "name": "ModelIdFilter" + }, + { + "kind": "ref", + "name": "TopicIdFilter" + }, + { + "kind": "ref", + "name": "TagIdFilter" + }, + { + "kind": "ref", + "name": "PromptIdFilter" + }, + { + "kind": "ref", + "name": "PersonaIdFilter" + }, + { + "kind": "ref", + "name": "BrandNameFilter" + }, + { + "kind": "ref", + "name": "MerchantNameFilter" + }, + { + "kind": "ref", + "name": "ProductNameFilter" + }, + { + "kind": "ref", + "name": "ProfoundShoppingApiAssetNameFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "ProfoundShoppingApiAssetNameFilter", + "brand_name": "BrandNameFilter", + "merchant_name": "MerchantNameFilter", + "model": "ModelIdFilter", + "model_id": "ModelIdFilter", + "persona_id": "PersonaIdFilter", + "product_name": "ProductNameFilter", + "prompt_id": "PromptIdFilter", + "region": "RegionIdFilter", + "region_id": "RegionIdFilter", + "tag": "TagIdFilter", + "tag_id": "TagIdFilter", + "topic": "TopicIdFilter", + "topic_id": "TopicIdFilter" + } + }, + "variantNames": [ + "RegionIdFilter", + "ModelIdFilter", + "TopicIdFilter", + "TagIdFilter", + "PromptIdFilter", + "PersonaIdFilter", + "BrandNameFilter", + "MerchantNameFilter", + "ProductNameFilter", + "AssetNameFilter" + ] + } + } + }, + { + "name": "order_by", + "publicName": "order_by", + "required": false, + "deprecated": false, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "Pagination" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "include_count", + "publicName": "include_count", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "tag_filter_type", + "publicName": "tag_filter_type", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "any", + "all" + ], + "names": [ + "Any", + "All" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "include_no_tag", + "publicName": "include_no_tag", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "exclude_topic_ids", + "publicName": "exclude_topic_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "dimensions", + "publicName": "dimensions", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "period", + "topic_id", + "prompt_id" + ], + "names": [ + "Period", + "TopicId", + "PromptId" + ], + "deprecations": [ + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "literal", + "value": "merchant_share" + } + } + }, + { + "name": "target_asset_names", + "publicName": "target_asset_names", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "owned_asset_names", + "publicName": "owned_asset_names", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ShoppingMerchantVisibilityByBrandQuery", + "source": "ShoppingMerchantVisibilityByBrandQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "comparison_start_date", + "publicName": "comparison_start_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "comparison_end_date", + "publicName": "comparison_end_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "date_interval", + "publicName": "date_interval", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "RegionIdFilter" + }, + { + "kind": "ref", + "name": "ModelIdFilter" + }, + { + "kind": "ref", + "name": "TopicIdFilter" + }, + { + "kind": "ref", + "name": "TagIdFilter" + }, + { + "kind": "ref", + "name": "PromptIdFilter" + }, + { + "kind": "ref", + "name": "PersonaIdFilter" + }, + { + "kind": "ref", + "name": "BrandNameFilter" + }, + { + "kind": "ref", + "name": "MerchantNameFilter" + }, + { + "kind": "ref", + "name": "ProductNameFilter" + }, + { + "kind": "ref", + "name": "ProfoundShoppingApiAssetNameFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "ProfoundShoppingApiAssetNameFilter", + "brand_name": "BrandNameFilter", + "merchant_name": "MerchantNameFilter", + "model": "ModelIdFilter", + "model_id": "ModelIdFilter", + "persona_id": "PersonaIdFilter", + "product_name": "ProductNameFilter", + "prompt_id": "PromptIdFilter", + "region": "RegionIdFilter", + "region_id": "RegionIdFilter", + "tag": "TagIdFilter", + "tag_id": "TagIdFilter", + "topic": "TopicIdFilter", + "topic_id": "TopicIdFilter" + } + }, + "variantNames": [ + "RegionIdFilter", + "ModelIdFilter", + "TopicIdFilter", + "TagIdFilter", + "PromptIdFilter", + "PersonaIdFilter", + "BrandNameFilter", + "MerchantNameFilter", + "ProductNameFilter", + "AssetNameFilter" + ] + } + } + }, + { + "name": "order_by", + "publicName": "order_by", + "required": false, + "deprecated": false, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "Pagination" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "include_count", + "publicName": "include_count", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "tag_filter_type", + "publicName": "tag_filter_type", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "any", + "all" + ], + "names": [ + "Any", + "All" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "include_no_tag", + "publicName": "include_no_tag", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "exclude_topic_ids", + "publicName": "exclude_topic_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "dimensions", + "publicName": "dimensions", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "period", + "merchant_name", + "brand_name" + ], + "names": [ + "Period", + "MerchantName", + "BrandName" + ], + "deprecations": [ + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "visibility_score", + "share_of_voice", + "average_position", + "visibility_rank", + "total_count" + ], + "names": [ + "VisibilityScore", + "ShareOfVoice", + "AveragePosition", + "VisibilityRank", + "TotalCount" + ], + "deprecations": [ + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "owned_asset_names", + "publicName": "owned_asset_names", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "search_brand", + "publicName": "search_brand", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "include_brand", + "publicName": "include_brand", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "include_brand_only", + "publicName": "include_brand_only", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ShoppingProductMerchantUrlsQuery", + "source": "ShoppingProductMerchantUrlsQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "product_names", + "publicName": "product_names", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ShoppingRowsResponse", + "source": "ShoppingRowsResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "info", + "publicName": "info", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "ReportInfo" + } + }, + { + "name": "data", + "publicName": "data", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "object", + "properties": [], + "additionalProperties": { + "kind": "unknown" + } + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ShoppingTriggerRateQuery", + "source": "ShoppingTriggerRateQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "comparison_start_date", + "publicName": "comparison_start_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "comparison_end_date", + "publicName": "comparison_end_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "date_interval", + "publicName": "date_interval", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "RegionIdFilter" + }, + { + "kind": "ref", + "name": "ModelIdFilter" + }, + { + "kind": "ref", + "name": "TopicIdFilter" + }, + { + "kind": "ref", + "name": "TagIdFilter" + }, + { + "kind": "ref", + "name": "PromptIdFilter" + }, + { + "kind": "ref", + "name": "PersonaIdFilter" + }, + { + "kind": "ref", + "name": "BrandNameFilter" + }, + { + "kind": "ref", + "name": "MerchantNameFilter" + }, + { + "kind": "ref", + "name": "ProductNameFilter" + }, + { + "kind": "ref", + "name": "ProfoundShoppingApiAssetNameFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "ProfoundShoppingApiAssetNameFilter", + "brand_name": "BrandNameFilter", + "merchant_name": "MerchantNameFilter", + "model": "ModelIdFilter", + "model_id": "ModelIdFilter", + "persona_id": "PersonaIdFilter", + "product_name": "ProductNameFilter", + "prompt_id": "PromptIdFilter", + "region": "RegionIdFilter", + "region_id": "RegionIdFilter", + "tag": "TagIdFilter", + "tag_id": "TagIdFilter", + "topic": "TopicIdFilter", + "topic_id": "TopicIdFilter" + } + }, + "variantNames": [ + "RegionIdFilter", + "ModelIdFilter", + "TopicIdFilter", + "TagIdFilter", + "PromptIdFilter", + "PersonaIdFilter", + "BrandNameFilter", + "MerchantNameFilter", + "ProductNameFilter", + "AssetNameFilter" + ] + } + } + }, + { + "name": "order_by", + "publicName": "order_by", + "required": false, + "deprecated": false, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "Pagination" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "include_count", + "publicName": "include_count", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "tag_filter_type", + "publicName": "tag_filter_type", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "any", + "all" + ], + "names": [ + "Any", + "All" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "include_no_tag", + "publicName": "include_no_tag", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "exclude_topic_ids", + "publicName": "exclude_topic_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "dimensions", + "publicName": "dimensions", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "period", + "date", + "model_id", + "topic_id", + "region_id", + "persona_id", + "prompt_id", + "prompt" + ], + "names": [ + "Period", + "Date", + "ModelId", + "TopicId", + "RegionId", + "PersonaId", + "PromptId", + "Prompt" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "total_runs", + "shopping_triggered_runs", + "trigger_rate_percentage" + ], + "names": [ + "TotalRuns", + "ShoppingTriggeredRuns", + "TriggerRatePercentage" + ], + "deprecations": [ + false, + false, + false + ] + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ShoppingVisibilityQuery", + "source": "ShoppingVisibilityQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "comparison_start_date", + "publicName": "comparison_start_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "comparison_end_date", + "publicName": "comparison_end_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "date_interval", + "publicName": "date_interval", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "RegionIdFilter" + }, + { + "kind": "ref", + "name": "ModelIdFilter" + }, + { + "kind": "ref", + "name": "TopicIdFilter" + }, + { + "kind": "ref", + "name": "TagIdFilter" + }, + { + "kind": "ref", + "name": "PromptIdFilter" + }, + { + "kind": "ref", + "name": "PersonaIdFilter" + }, + { + "kind": "ref", + "name": "BrandNameFilter" + }, + { + "kind": "ref", + "name": "MerchantNameFilter" + }, + { + "kind": "ref", + "name": "ProductNameFilter" + }, + { + "kind": "ref", + "name": "ProfoundShoppingApiAssetNameFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "ProfoundShoppingApiAssetNameFilter", + "brand_name": "BrandNameFilter", + "merchant_name": "MerchantNameFilter", + "model": "ModelIdFilter", + "model_id": "ModelIdFilter", + "persona_id": "PersonaIdFilter", + "product_name": "ProductNameFilter", + "prompt_id": "PromptIdFilter", + "region": "RegionIdFilter", + "region_id": "RegionIdFilter", + "tag": "TagIdFilter", + "tag_id": "TagIdFilter", + "topic": "TopicIdFilter", + "topic_id": "TopicIdFilter" + } + }, + "variantNames": [ + "RegionIdFilter", + "ModelIdFilter", + "TopicIdFilter", + "TagIdFilter", + "PromptIdFilter", + "PersonaIdFilter", + "BrandNameFilter", + "MerchantNameFilter", + "ProductNameFilter", + "AssetNameFilter" + ] + } + } + }, + { + "name": "order_by", + "publicName": "order_by", + "required": false, + "deprecated": false, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "Pagination" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "include_count", + "publicName": "include_count", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "tag_filter_type", + "publicName": "tag_filter_type", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "any", + "all" + ], + "names": [ + "Any", + "All" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "include_no_tag", + "publicName": "include_no_tag", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "exclude_topic_ids", + "publicName": "exclude_topic_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "dimensions", + "publicName": "dimensions", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "period", + "asset_name", + "date", + "model_id", + "topic_id", + "region_id", + "prompt_id", + "prompt" + ], + "names": [ + "Period", + "AssetName", + "Date", + "ModelId", + "TopicId", + "RegionId", + "PromptId", + "Prompt" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "visibility_score", + "share_of_voice", + "average_position", + "visibility_rank", + "average_position_rank", + "position1_percentage", + "position2_percentage", + "position3_percentage", + "position_above3_percentage", + "total_count" + ], + "names": [ + "VisibilityScore", + "ShareOfVoice", + "AveragePosition", + "VisibilityRank", + "AveragePositionRank", + "Position1Percentage", + "Position2Percentage", + "Position3Percentage", + "PositionAbove3Percentage", + "TotalCount" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "owned_asset_names", + "publicName": "owned_asset_names", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "search_asset", + "publicName": "search_asset", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "include_asset", + "publicName": "include_asset", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "include_asset_only", + "publicName": "include_asset_only", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "include_assets_only", + "publicName": "include_assets_only", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "rank_by", + "publicName": "rank_by", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "visibility_score", + "average_position" + ], + "names": [ + "VisibilityScore", + "AveragePosition" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "include_position_frequency", + "publicName": "include_position_frequency", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "StreamCitationsQuery", + "source": "StreamCitationsQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "date_interval", + "publicName": "date_interval", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "dimensions", + "publicName": "dimensions", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "hostname", + "path", + "date", + "region", + "topic", + "topic_id", + "model", + "tag", + "prompt", + "prompt_id", + "url", + "root_domain", + "persona", + "citation_category" + ], + "names": [ + "Hostname", + "Path", + "Date", + "Region", + "Topic", + "TopicId", + "Model", + "Tag", + "Prompt", + "PromptId", + "Url", + "RootDomain", + "Persona", + "CitationCategory" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "count", + "citation_share", + "share_of_voice", + "first_cited_at" + ], + "names": [ + "Count", + "CitationShare", + "ShareOfVoice", + "FirstCitedAt" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + } + }, + { + "name": "order_by", + "publicName": "order_by", + "required": false, + "deprecated": false, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "Pagination" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "HostnameFilter" + }, + { + "kind": "ref", + "name": "PathFilter" + }, + { + "kind": "ref", + "name": "RegionIdFilter" + }, + { + "kind": "ref", + "name": "RegionNameFilter" + }, + { + "kind": "ref", + "name": "TopicIdFilter" + }, + { + "kind": "ref", + "name": "TopicNameFilter" + }, + { + "kind": "ref", + "name": "ModelIdFilter" + }, + { + "kind": "ref", + "name": "TagIdFilter" + }, + { + "kind": "ref", + "name": "TagNameFilter" + }, + { + "kind": "ref", + "name": "UrlFilter" + }, + { + "kind": "ref", + "name": "RootDomainFilter" + }, + { + "kind": "ref", + "name": "AnalysisTypeFilter" + }, + { + "kind": "ref", + "name": "PromptTypeFilter" + }, + { + "kind": "ref", + "name": "PersonaIdFilter" + }, + { + "kind": "ref", + "name": "CitationCategoryFilter" + }, + { + "kind": "ref", + "name": "PromptFilter" + }, + { + "kind": "ref", + "name": "PromptIdFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "analysis_type": "AnalysisTypeFilter", + "citation_category": "CitationCategoryFilter", + "hostname": "HostnameFilter", + "model": "ModelIdFilter", + "model_id": "ModelIdFilter", + "path": "PathFilter", + "persona_id": "PersonaIdFilter", + "prompt": "PromptFilter", + "prompt_id": "PromptIdFilter", + "prompt_type": "PromptTypeFilter", + "region": "RegionIdFilter", + "region_id": "RegionIdFilter", + "region_name": "RegionNameFilter", + "root_domain": "RootDomainFilter", + "tag": "TagIdFilter", + "tag_id": "TagIdFilter", + "tag_name": "TagNameFilter", + "topic": "TopicIdFilter", + "topic_id": "TopicIdFilter", + "topic_name": "TopicNameFilter", + "url": "UrlFilter" + } + }, + "variantNames": [ + "HostnameFilter", + "PathFilter", + "RegionIdFilter", + "RegionNameFilter", + "TopicIdFilter", + "TopicNameFilter", + "ModelIdFilter", + "TagIdFilter", + "TagNameFilter", + "UrlFilter", + "RootDomainFilter", + "AnalysisTypeFilter", + "PromptTypeFilter", + "PersonaIdFilter", + "CitationCategoryFilter", + "PromptFilter", + "PromptIdFilter" + ] + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "StreamSentimentQuery", + "source": "StreamSentimentQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "date_interval", + "publicName": "date_interval", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "dimensions", + "publicName": "dimensions", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "theme", + "date", + "region", + "topic", + "topic_id", + "model", + "asset_id", + "asset_name", + "tag", + "prompt", + "prompt_id", + "sentiment_type", + "persona" + ], + "names": [ + "Theme", + "Date", + "Region", + "Topic", + "TopicId", + "Model", + "AssetId", + "AssetName", + "Tag", + "Prompt", + "PromptId", + "SentimentType", + "Persona" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "positive", + "negative", + "occurrences" + ], + "names": [ + "Positive", + "Negative", + "Occurrences" + ], + "deprecations": [ + false, + false, + false + ] + } + } + }, + { + "name": "order_by", + "publicName": "order_by", + "required": false, + "deprecated": false, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "Pagination" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "AssetIdFilter" + }, + { + "kind": "ref", + "name": "ProfoundAnswerEngineInsightsFiltersAssetNameFilter" + }, + { + "kind": "ref", + "name": "ThemeFilter" + }, + { + "kind": "ref", + "name": "RegionIdFilter" + }, + { + "kind": "ref", + "name": "RegionNameFilter" + }, + { + "kind": "ref", + "name": "TopicIdFilter" + }, + { + "kind": "ref", + "name": "TopicNameFilter" + }, + { + "kind": "ref", + "name": "ModelIdFilter" + }, + { + "kind": "ref", + "name": "TagIdFilter" + }, + { + "kind": "ref", + "name": "TagNameFilter" + }, + { + "kind": "ref", + "name": "PromptFilter" + }, + { + "kind": "ref", + "name": "PersonaIdFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_id": "AssetIdFilter", + "asset_name": "ProfoundAnswerEngineInsightsFiltersAssetNameFilter", + "model": "ModelIdFilter", + "model_id": "ModelIdFilter", + "persona_id": "PersonaIdFilter", + "prompt": "PromptFilter", + "region": "RegionIdFilter", + "region_id": "RegionIdFilter", + "region_name": "RegionNameFilter", + "tag": "TagIdFilter", + "tag_id": "TagIdFilter", + "tag_name": "TagNameFilter", + "theme": "ThemeFilter", + "topic": "TopicIdFilter", + "topic_id": "TopicIdFilter", + "topic_name": "TopicNameFilter" + } + }, + "variantNames": [ + "AssetIdFilter", + "AssetNameFilter", + "ThemeFilter", + "RegionIdFilter", + "RegionNameFilter", + "TopicIdFilter", + "TopicNameFilter", + "ModelIdFilter", + "TagIdFilter", + "TagNameFilter", + "PromptFilter", + "PersonaIdFilter" + ] + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "StreamVisibilityQuery", + "source": "StreamVisibilityQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "date_interval", + "publicName": "date_interval", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "dimensions", + "publicName": "dimensions", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "date", + "region", + "topic", + "topic_id", + "model", + "asset_id", + "asset_name", + "prompt", + "prompt_id", + "tag", + "persona" + ], + "names": [ + "Date", + "Region", + "Topic", + "TopicId", + "Model", + "AssetId", + "AssetName", + "Prompt", + "PromptId", + "Tag", + "Persona" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "share_of_voice", + "mentions_count", + "visibility_score", + "executions", + "average_position" + ], + "names": [ + "ShareOfVoice", + "MentionsCount", + "VisibilityScore", + "Executions", + "AveragePosition" + ], + "deprecations": [ + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "order_by", + "publicName": "order_by", + "required": false, + "deprecated": false, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "Pagination" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "RegionIdFilter" + }, + { + "kind": "ref", + "name": "RegionNameFilter" + }, + { + "kind": "ref", + "name": "ModelIdFilter" + }, + { + "kind": "ref", + "name": "TopicIdFilter" + }, + { + "kind": "ref", + "name": "TopicNameFilter" + }, + { + "kind": "ref", + "name": "ProfoundAnswerEngineInsightsFiltersAssetNameFilter" + }, + { + "kind": "ref", + "name": "TagIdFilter" + }, + { + "kind": "ref", + "name": "TagNameFilter" + }, + { + "kind": "ref", + "name": "PromptIdFilter" + }, + { + "kind": "ref", + "name": "PromptFilter" + }, + { + "kind": "ref", + "name": "PersonaIdFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "ProfoundAnswerEngineInsightsFiltersAssetNameFilter", + "model": "ModelIdFilter", + "model_id": "ModelIdFilter", + "persona_id": "PersonaIdFilter", + "prompt": "PromptFilter", + "prompt_id": "PromptIdFilter", + "region": "RegionIdFilter", + "region_id": "RegionIdFilter", + "region_name": "RegionNameFilter", + "tag": "TagIdFilter", + "tag_id": "TagIdFilter", + "tag_name": "TagNameFilter", + "topic": "TopicIdFilter", + "topic_id": "TopicIdFilter", + "topic_name": "TopicNameFilter" + } + }, + "variantNames": [ + "RegionIdFilter", + "RegionNameFilter", + "ModelIdFilter", + "TopicIdFilter", + "TopicNameFilter", + "AssetNameFilter", + "TagIdFilter", + "TagNameFilter", + "PromptIdFilter", + "PromptFilter", + "PersonaIdFilter" + ] + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "StreamWebSearchResultsQuery", + "source": "StreamWebSearchResultsQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "date_interval", + "publicName": "date_interval", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "dimensions", + "publicName": "dimensions", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "hostname", + "path", + "url", + "root_domain", + "date", + "region", + "topic", + "topic_id", + "model", + "tag", + "prompt", + "prompt_id", + "persona", + "search_query" + ], + "names": [ + "Hostname", + "Path", + "Url", + "RootDomain", + "Date", + "Region", + "Topic", + "TopicId", + "Model", + "Tag", + "Prompt", + "PromptId", + "Persona", + "SearchQuery" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "count", + "search_share" + ], + "names": [ + "Count", + "SearchShare" + ], + "deprecations": [ + false, + false + ] + }, + "validation": { + "minItems": 1 + } + } + }, + { + "name": "order_by", + "publicName": "order_by", + "required": false, + "deprecated": false, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "Pagination" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "HostnameFilter" + }, + { + "kind": "ref", + "name": "PathFilter" + }, + { + "kind": "ref", + "name": "RegionIdFilter" + }, + { + "kind": "ref", + "name": "TopicIdFilter" + }, + { + "kind": "ref", + "name": "ModelIdFilter" + }, + { + "kind": "ref", + "name": "TagIdFilter" + }, + { + "kind": "ref", + "name": "UrlFilter" + }, + { + "kind": "ref", + "name": "RootDomainFilter" + }, + { + "kind": "ref", + "name": "PersonaIdFilter" + }, + { + "kind": "ref", + "name": "PromptFilter" + }, + { + "kind": "ref", + "name": "PromptIdFilter" + }, + { + "kind": "ref", + "name": "SearchQueryFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "hostname": "HostnameFilter", + "model": "ModelIdFilter", + "model_id": "ModelIdFilter", + "path": "PathFilter", + "persona_id": "PersonaIdFilter", + "prompt": "PromptFilter", + "prompt_id": "PromptIdFilter", + "region": "RegionIdFilter", + "region_id": "RegionIdFilter", + "root_domain": "RootDomainFilter", + "search_query": "SearchQueryFilter", + "tag": "TagIdFilter", + "tag_id": "TagIdFilter", + "topic": "TopicIdFilter", + "topic_id": "TopicIdFilter", + "url": "UrlFilter" + } + }, + "variantNames": [ + "HostnameFilter", + "PathFilter", + "RegionIdFilter", + "TopicIdFilter", + "ModelIdFilter", + "TagIdFilter", + "UrlFilter", + "RootDomainFilter", + "PersonaIdFilter", + "PromptFilter", + "PromptIdFilter", + "SearchQueryFilter" + ] + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "Tag", + "source": "Tag", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "name", + "publicName": "name", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "TagIdFilter", + "source": "TagIdFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "literal", + "value": "tag_id" + }, + { + "kind": "literal", + "value": "tag" + } + ], + "variantNames": [ + null, + null + ] + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "TagNameFilter", + "source": "TagNameFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "tag_name" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ThemeFilter", + "source": "ThemeFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "theme" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "TopInaccurateClaimRow", + "source": "TopInaccurateClaimRow", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "clusterId", + "publicName": "clusterId", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "canonicalClaim", + "publicName": "canonicalClaim", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "claimOccurrence", + "publicName": "claimOccurrence", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "number" + } + }, + { + "name": "claimOccurrenceDelta", + "publicName": "claimOccurrenceDelta", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "TopInaccurateClaimsQuery", + "source": "TopInaccurateClaimsQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "comparison_start_date", + "publicName": "comparison_start_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "comparison_end_date", + "publicName": "comparison_end_date", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "topic_ids", + "publicName": "topic_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "exclude_topic_ids", + "publicName": "exclude_topic_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "tag_ids", + "publicName": "tag_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "tag_filter_type", + "publicName": "tag_filter_type", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "all", + "any" + ], + "names": [ + "All", + "Any" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "include_no_tag", + "publicName": "include_no_tag", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "region_ids", + "publicName": "region_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "platform_ids", + "publicName": "platform_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "persona_ids", + "publicName": "persona_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "include_no_persona", + "publicName": "include_no_persona", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "prompt_ids", + "publicName": "prompt_ids", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "citation_categories", + "publicName": "citation_categories", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "limit", + "publicName": "limit", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer", + "validation": {} + } + } + ], + "additionalProperties": false + } + }, + { + "name": "TopInaccurateClaimsResponse", + "source": "TopInaccurateClaimsResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "data", + "publicName": "data", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "TopInaccurateClaimRow" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "Topic", + "source": "Topic", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "name", + "publicName": "name", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "status", + "publicName": "status", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "active", + "disabled" + ], + "names": [ + "Active", + "Disabled" + ], + "deprecations": [ + false, + false + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "TopicIdFilter", + "source": "TopicIdFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "literal", + "value": "topic_id" + }, + { + "kind": "literal", + "value": "topic" + } + ], + "variantNames": [ + null, + null + ] + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "TopicInput", + "source": "TopicInput", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "name", + "publicName": "name", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "TopicNameFilter", + "source": "TopicNameFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "topic_name" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "UpdateAgentRequest", + "source": "UpdateAgentRequest", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "graph", + "publicName": "graph", + "required": true, + "deprecated": false, + "type": { + "kind": "object", + "properties": [], + "additionalProperties": { + "kind": "unknown" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "UpdatePromptInput", + "source": "UpdatePromptInput", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "prompt", + "publicName": "prompt", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "topic", + "publicName": "topic", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "IdOrName" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "language", + "publicName": "language", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "tags", + "publicName": "tags", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "ref", + "name": "IdOrName" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "regions", + "publicName": "regions", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "ref", + "name": "IdOrName" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "platforms", + "publicName": "platforms", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "ref", + "name": "IdOrName" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "personas", + "publicName": "personas", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "ref", + "name": "IdOrName" + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "analysis_types", + "publicName": "analysis_types", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ], + "names": [ + "Visibility", + "Sentiment", + "SentimentV2", + "Accuracy" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "prompt_type", + "publicName": "prompt_type", + "required": false, + "deprecated": true, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "asset", + "publicName": "asset", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "IdOrName" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "UpdatePromptStatusBody", + "source": "UpdatePromptStatusBody", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "prompt_ids", + "publicName": "prompt_ids", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + } + }, + { + "name": "status", + "publicName": "status", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "active", + "disabled", + "deleted" + ], + "names": [ + "Active", + "Disabled", + "Deleted" + ], + "deprecations": [ + false, + false, + false + ] + } + }, + { + "name": "dry_run", + "publicName": "dry_run", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "UpdatePromptStatusResponse", + "source": "UpdatePromptStatusResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "dry_run", + "publicName": "dry_run", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "updated_prompts", + "publicName": "updated_prompts", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "UpdatePromptsBody", + "source": "UpdatePromptsBody", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "prompts", + "publicName": "prompts", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "UpdatePromptInput" + } + } + }, + { + "name": "dry_run", + "publicName": "dry_run", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "UpdatePromptsResponse", + "source": "UpdatePromptsResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "dry_run", + "publicName": "dry_run", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "updated", + "publicName": "updated", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "topics_created", + "publicName": "topics_created", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "tags_created", + "publicName": "tags_created", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "prompts", + "publicName": "prompts", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "PromptUpdatePreview" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "UrlFilter", + "source": "UrlFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "url" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "UserInput", + "source": "UserInput", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "type", + "publicName": "type", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "ContentType" + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "metadata", + "publicName": "metadata", + "required": true, + "deprecated": false, + "type": { + "kind": "record", + "value": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "integer" + }, + { + "kind": "primitive", + "type": "string" + } + ], + "variantNames": [ + null, + null + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ValidationError", + "source": "ValidationError", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "loc", + "publicName": "loc", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "primitive", + "type": "integer" + } + ], + "variantNames": [ + null, + null + ] + } + } + }, + { + "name": "msg", + "publicName": "msg", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "type", + "publicName": "type", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "input", + "publicName": "input", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "ctx", + "publicName": "ctx", + "required": false, + "deprecated": false, + "type": { + "kind": "object", + "properties": [], + "additionalProperties": false + } + } + ], + "additionalProperties": false + } + }, + { + "name": "VisibilityQuery", + "source": "VisibilityQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "date_interval", + "publicName": "date_interval", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "dimensions", + "publicName": "dimensions", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "date", + "region", + "topic", + "topic_id", + "model", + "asset_id", + "asset_name", + "prompt", + "prompt_id", + "tag", + "persona" + ], + "names": [ + "Date", + "Region", + "Topic", + "TopicId", + "Model", + "AssetId", + "AssetName", + "Prompt", + "PromptId", + "Tag", + "Persona" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "share_of_voice", + "mentions_count", + "visibility_score", + "executions", + "average_position" + ], + "names": [ + "ShareOfVoice", + "MentionsCount", + "VisibilityScore", + "Executions", + "AveragePosition" + ], + "deprecations": [ + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "order_by", + "publicName": "order_by", + "required": false, + "deprecated": false, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "ref", + "name": "Pagination" + } + }, + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "RegionIdFilter" + }, + { + "kind": "ref", + "name": "RegionNameFilter" + }, + { + "kind": "ref", + "name": "ModelIdFilter" + }, + { + "kind": "ref", + "name": "TopicIdFilter" + }, + { + "kind": "ref", + "name": "TopicNameFilter" + }, + { + "kind": "ref", + "name": "ProfoundAnswerEngineInsightsFiltersAssetNameFilter" + }, + { + "kind": "ref", + "name": "TagIdFilter" + }, + { + "kind": "ref", + "name": "TagNameFilter" + }, + { + "kind": "ref", + "name": "PromptIdFilter" + }, + { + "kind": "ref", + "name": "PromptFilter" + }, + { + "kind": "ref", + "name": "PersonaIdFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "ProfoundAnswerEngineInsightsFiltersAssetNameFilter", + "model": "ModelIdFilter", + "model_id": "ModelIdFilter", + "persona_id": "PersonaIdFilter", + "prompt": "PromptFilter", + "prompt_id": "PromptIdFilter", + "region": "RegionIdFilter", + "region_id": "RegionIdFilter", + "region_name": "RegionNameFilter", + "tag": "TagIdFilter", + "tag_id": "TagIdFilter", + "tag_name": "TagNameFilter", + "topic": "TopicIdFilter", + "topic_id": "TopicIdFilter", + "topic_name": "TopicNameFilter" + } + }, + "variantNames": [ + "RegionIdFilter", + "RegionNameFilter", + "ModelIdFilter", + "TopicIdFilter", + "TopicNameFilter", + "AssetNameFilter", + "TagIdFilter", + "TagNameFilter", + "PromptIdFilter", + "PromptFilter", + "PersonaIdFilter" + ] + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "VisibilityV2Query", + "source": "VisibilityV2Query", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "group_by", + "publicName": "group_by", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "date", + "model", + "topic", + "region", + "prompt", + "persona" + ], + "names": [ + "Date", + "Model", + "Topic", + "Region", + "Prompt", + "Persona" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "visibility_score", + "share_of_voice", + "average_position" + ], + "names": [ + "VisibilityScore", + "ShareOfVoice", + "AveragePosition" + ], + "deprecations": [ + false, + false, + false + ] + } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "interval", + "publicName": "interval", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "day", + "week", + "month" + ], + "names": [ + "Day", + "Week", + "Month" + ], + "deprecations": [ + false, + false, + false + ] + } + }, + { + "name": "scope", + "publicName": "scope", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "owned", + "all" + ], + "names": [ + "Owned", + "All" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "assets", + "publicName": "assets", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + }, + { + "kind": "ref", + "name": "EntityFilterClause" + } + ], + "variantNames": [ + null, + null, + "EntityFilterClause" + ] + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "filter", + "publicName": "filter", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "FilterNode" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "sort", + "publicName": "sort", + "required": false, + "deprecated": false, + "type": { + "kind": "ref", + "name": "AppRoutesV2AnswerEngineInsightsReportsVisibilitySortSpec" + } + }, + { + "name": "limit", + "publicName": "limit", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "integer", + "validation": {} + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "max_results", + "publicName": "max_results", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "integer" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "cursor", + "publicName": "cursor", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "WebSearchResultsQuery", + "source": "WebSearchResultsQuery", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "date_interval", + "publicName": "date_interval", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "dimensions", + "publicName": "dimensions", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "hostname", + "path", + "url", + "root_domain", + "date", + "region", + "topic", + "topic_id", + "model", + "tag", + "prompt", + "prompt_id", + "persona", + "search_query" + ], + "names": [ + "Hostname", + "Path", + "Url", + "RootDomain", + "Date", + "Region", + "Topic", + "TopicId", + "Model", + "Tag", + "Prompt", + "PromptId", + "Persona", + "SearchQuery" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "count", + "search_share" + ], + "names": [ + "Count", + "SearchShare" + ], + "deprecations": [ + false, + false + ] + }, + "validation": { + "minItems": 1 + } + } + }, + { + "name": "order_by", + "publicName": "order_by", + "required": false, + "deprecated": false, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "ref", + "name": "Pagination" + } + }, + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "HostnameFilter" + }, + { + "kind": "ref", + "name": "PathFilter" + }, + { + "kind": "ref", + "name": "RegionIdFilter" + }, + { + "kind": "ref", + "name": "TopicIdFilter" + }, + { + "kind": "ref", + "name": "ModelIdFilter" + }, + { + "kind": "ref", + "name": "TagIdFilter" + }, + { + "kind": "ref", + "name": "UrlFilter" + }, + { + "kind": "ref", + "name": "RootDomainFilter" + }, + { + "kind": "ref", + "name": "PersonaIdFilter" + }, + { + "kind": "ref", + "name": "PromptFilter" + }, + { + "kind": "ref", + "name": "PromptIdFilter" + }, + { + "kind": "ref", + "name": "SearchQueryFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "hostname": "HostnameFilter", + "model": "ModelIdFilter", + "model_id": "ModelIdFilter", + "path": "PathFilter", + "persona_id": "PersonaIdFilter", + "prompt": "PromptFilter", + "prompt_id": "PromptIdFilter", + "region": "RegionIdFilter", + "region_id": "RegionIdFilter", + "root_domain": "RootDomainFilter", + "search_query": "SearchQueryFilter", + "tag": "TagIdFilter", + "tag_id": "TagIdFilter", + "topic": "TopicIdFilter", + "topic_id": "TopicIdFilter", + "url": "UrlFilter" + } + }, + "variantNames": [ + "HostnameFilter", + "PathFilter", + "RegionIdFilter", + "TopicIdFilter", + "ModelIdFilter", + "TagIdFilter", + "UrlFilter", + "RootDomainFilter", + "PersonaIdFilter", + "PromptFilter", + "PromptIdFilter", + "SearchQueryFilter" + ] + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "WebSearchResultsResponse", + "source": "WebSearchResultsResponse", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "info", + "publicName": "info", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "ReportInfo" + } + }, + { + "name": "data", + "publicName": "data", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "WebSearchResultsResult" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "WebSearchResultsResult", + "source": "WebSearchResultsResult", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "metrics", + "publicName": "metrics", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "integer" + }, + { + "kind": "primitive", + "type": "number" + } + ], + "variantNames": [ + null, + null + ] + } + } + }, + { + "name": "dimensions", + "publicName": "dimensions", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + ], + "variantNames": [ + null, + null + ] + }, + { + "kind": "null" + } + ] + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AppRoutesV2AnswerEngineInsightsReportsQueryFanoutsSortSpec", + "source": "AppRoutesV2AnswerEngineInsightsReportsQueryFanoutsSortSpec", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "dir", + "publicName": "dir", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AppRoutesV2AnswerEngineInsightsReportsSentimentSortSpec", + "source": "AppRoutesV2AnswerEngineInsightsReportsSentimentSortSpec", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "occurrence", + "positive_sentiment", + "negative_sentiment" + ], + "names": [ + "Occurrence", + "PositiveSentiment", + "NegativeSentiment" + ], + "deprecations": [ + false, + false, + false + ] + } + }, + { + "name": "dir", + "publicName": "dir", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "AppRoutesV2AnswerEngineInsightsReportsVisibilitySortSpec", + "source": "AppRoutesV2AnswerEngineInsightsReportsVisibilitySortSpec", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "visibility_score", + "share_of_voice", + "average_position" + ], + "names": [ + "VisibilityScore", + "ShareOfVoice", + "AveragePosition" + ], + "deprecations": [ + false, + false, + false + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ProfoundAnswerEngineInsightsFiltersAssetNameFilter", + "source": "ProfoundAnswerEngineInsightsFiltersAssetNameFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "asset_name" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "ProfoundShoppingApiAssetNameFilter", + "source": "ProfoundShoppingApiAssetNameFilter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "asset_name" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + } + ], + "resources": [ + "organization", + "prompts", + "prompts.answers", + "reports", + "reports.citations", + "reports.visibility", + "reports.sentiment", + "reports.webSearchResults", + "reports.referrals", + "reports.bots", + "reports.queryFanouts", + "reports.shopping", + "reports.accuracy", + "content", + "content.optimization", + "knowledgeBases", + "knowledgeBases.documents", + "knowledgeBases.folders", + "agents", + "agents.nodeTypes", + "agents.runs", + "organizations", + "organizations.categories" + ], + "publicResources": [ + "organization", + "prompts", + "prompts.answers", + "reports", + "reports.citations", + "reports.visibility", + "reports.sentiment", + "reports.webSearchResults", + "reports.referrals", + "reports.bots", + "reports.queryFanouts", + "reports.shopping", + "reports.accuracy", + "content", + "content.optimization", + "knowledgeBases", + "knowledgeBases.documents", + "knowledgeBases.folders", + "agents", + "agents.nodeTypes", + "agents.runs", + "organizations", + "organizations.categories" + ], + "operations": [ + { + "resource": "organization", + "publicResource": "organization", + "operation": "listCategoryRegionsV1OrgCategoriesCategoryRegionsGet", + "publicOperation": "listCategoryRegionsV1OrgCategoriesCategoryRegionsGet", + "deprecated": false, + "method": "GET", + "path": "/v1/org/categories/{category_id}/regions", + "pathParams": [ + "category_id" + ], + "publicPathParams": [ + "category_id" + ], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "pathParamDetails": [ + { + "name": "category_id", + "required": true, + "style": "simple", + "explode": false + } + ], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "OrganizationListCategoryRegionsV1OrgCategoriesCategoryRegionsGetParams" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "prompts.answers", + "publicResource": "prompts.answers", + "operation": "createV1PromptsPost", + "publicOperation": "createV1PromptsPost", + "deprecated": false, + "method": "POST", + "path": "/v1/prompts/answers", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "category_id", + "start_date", + "end_date", + "pagination", + "filters", + "include" + ], + "publicBodyParams": [ + "category_id", + "start_date", + "end_date", + "pagination", + "filters", + "include" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "AnswerCreateV1PromptsPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "AnswersResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "prompts.answers", + "publicResource": "prompts.answers", + "operation": "queryV2V2PromptsPost", + "publicOperation": "queryV2V2PromptsPost", + "deprecated": false, + "method": "POST", + "path": "/v2/prompts/answers", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "category_id", + "start_date", + "end_date", + "include", + "filter", + "limit", + "max_results", + "cursor" + ], + "publicBodyParams": [ + "category_id", + "start_date", + "end_date", + "include", + "filter", + "limit", + "max_results", + "cursor" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "AnswerQueryV2V2PromptsPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "prompts.answers", + "publicResource": "prompts.answers", + "operation": "streamV2V2PromptsStreamPost", + "publicOperation": "streamV2V2PromptsStreamPost", + "deprecated": false, + "method": "POST", + "path": "/v2/prompts/answers/stream", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "category_id", + "start_date", + "end_date", + "include", + "filter", + "limit", + "max_results", + "cursor" + ], + "publicBodyParams": [ + "category_id", + "start_date", + "end_date", + "include", + "filter", + "limit", + "max_results", + "cursor" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "AnswerStreamV2V2PromptsStreamPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "text/event-stream", + "encoding": "text", + "contents": [ + { + "contentType": "text/event-stream", + "encoding": "text" + } + ] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http", + "streaming": "sse" + }, + { + "resource": "reports", + "publicResource": "reports", + "operation": "querySentimentV2V1SentimentV2Post", + "publicOperation": "querySentimentV2V1SentimentV2Post", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/sentiment-v2", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "category_id", + "asset_name", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "dimensions", + "metrics", + "filters", + "order_by", + "pagination" + ], + "publicBodyParams": [ + "category_id", + "asset_name", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "dimensions", + "metrics", + "filters", + "order_by", + "pagination" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "ReportQuerySentimentV2V1SentimentV2PostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "SentimentV2ReportResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.citations", + "publicResource": "reports.citations", + "operation": "queryV1ReportsPost", + "publicOperation": "queryV1ReportsPost", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/citations", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" + ], + "publicBodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "CitationQueryV1ReportsPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "CitationsResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.citations", + "publicResource": "reports.citations", + "operation": "streamV1ReportsStreamPost", + "publicOperation": "streamV1ReportsStreamPost", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/citations/stream", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" + ], + "publicBodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "CitationStreamV1ReportsStreamPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "text/event-stream", + "encoding": "text", + "contents": [ + { + "contentType": "text/event-stream", + "encoding": "text" + } + ] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http", + "streaming": "sse" + }, + { + "resource": "reports.citations", + "publicResource": "reports.citations", + "operation": "queryV2V2ReportsPost", + "publicOperation": "queryV2V2ReportsPost", + "deprecated": false, + "method": "POST", + "path": "/v2/reports/citations", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "category_id", + "start_date", + "end_date", + "group_by", + "metrics", + "interval", + "scope", + "filter", + "limit", + "max_results", + "cursor" + ], + "publicBodyParams": [ + "category_id", + "start_date", + "end_date", + "group_by", + "metrics", + "interval", + "scope", + "filter", + "limit", + "max_results", + "cursor" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "CitationQueryV2V2ReportsPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.citations", + "publicResource": "reports.citations", + "operation": "streamV2V2ReportsStreamPost", + "publicOperation": "streamV2V2ReportsStreamPost", + "deprecated": false, + "method": "POST", + "path": "/v2/reports/citations/stream", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "category_id", + "start_date", + "end_date", + "group_by", + "metrics", + "interval", + "scope", + "filter", + "limit", + "max_results", + "cursor" + ], + "publicBodyParams": [ + "category_id", + "start_date", + "end_date", + "group_by", + "metrics", + "interval", + "scope", + "filter", + "limit", + "max_results", + "cursor" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "CitationStreamV2V2ReportsStreamPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "text/event-stream", + "encoding": "text", + "contents": [ + { + "contentType": "text/event-stream", + "encoding": "text" + } + ] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http", + "streaming": "sse" + }, + { + "resource": "reports.visibility", + "publicResource": "reports.visibility", + "operation": "queryV1ReportsPost", + "publicOperation": "queryV1ReportsPost", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/visibility", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" + ], + "publicBodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "VisibilityQueryV1ReportsPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "ReportResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.visibility", + "publicResource": "reports.visibility", + "operation": "streamV1ReportsStreamPost", + "publicOperation": "streamV1ReportsStreamPost", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/visibility/stream", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" + ], + "publicBodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "VisibilityStreamV1ReportsStreamPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "text/event-stream", + "encoding": "text", + "contents": [ + { + "contentType": "text/event-stream", + "encoding": "text" + } + ] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http", + "streaming": "sse" + }, + { + "resource": "reports.visibility", + "publicResource": "reports.visibility", + "operation": "queryV2V2ReportsPost", + "publicOperation": "queryV2V2ReportsPost", + "deprecated": false, + "method": "POST", + "path": "/v2/reports/visibility", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "category_id", + "start_date", + "end_date", + "group_by", + "metrics", + "interval", + "scope", + "assets", + "filter", + "sort", + "limit", + "max_results", + "cursor" + ], + "publicBodyParams": [ + "category_id", + "start_date", + "end_date", + "group_by", + "metrics", + "interval", + "scope", + "assets", + "filter", + "sort", + "limit", + "max_results", + "cursor" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "VisibilityQueryV2V2ReportsPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.visibility", + "publicResource": "reports.visibility", + "operation": "streamV2V2ReportsStreamPost", + "publicOperation": "streamV2V2ReportsStreamPost", + "deprecated": false, + "method": "POST", + "path": "/v2/reports/visibility/stream", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "category_id", + "start_date", + "end_date", + "group_by", + "metrics", + "interval", + "scope", + "assets", + "filter", + "sort", + "limit", + "max_results", + "cursor" + ], + "publicBodyParams": [ + "category_id", + "start_date", + "end_date", + "group_by", + "metrics", + "interval", + "scope", + "assets", + "filter", + "sort", + "limit", + "max_results", + "cursor" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "VisibilityStreamV2V2ReportsStreamPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "text/event-stream", + "encoding": "text", + "contents": [ + { + "contentType": "text/event-stream", + "encoding": "text" + } + ] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http", + "streaming": "sse" + }, + { + "resource": "reports.sentiment", + "publicResource": "reports.sentiment", + "operation": "queryV1ReportsPost", + "publicOperation": "queryV1ReportsPost", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/sentiment", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" + ], + "publicBodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "SentimentQueryV1ReportsPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "ReportResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.sentiment", + "publicResource": "reports.sentiment", + "operation": "streamV1ReportsStreamPost", + "publicOperation": "streamV1ReportsStreamPost", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/sentiment/stream", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" + ], + "publicBodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "SentimentStreamV1ReportsStreamPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "text/event-stream", + "encoding": "text", + "contents": [ + { + "contentType": "text/event-stream", + "encoding": "text" + } + ] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http", + "streaming": "sse" + }, + { + "resource": "reports.sentiment", + "publicResource": "reports.sentiment", + "operation": "queryV2V2ReportsPost", + "publicOperation": "queryV2V2ReportsPost", + "deprecated": false, + "method": "POST", + "path": "/v2/reports/sentiment", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "category_id", + "asset", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "group_by", + "metrics", + "interval", + "filter", + "sort", + "include_cited_websites", + "limit", + "max_results", + "cursor" + ], + "publicBodyParams": [ + "category_id", + "asset", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "group_by", + "metrics", + "interval", + "filter", + "sort", + "include_cited_websites", + "limit", + "max_results", + "cursor" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "SentimentQueryV2V2ReportsPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.sentiment", + "publicResource": "reports.sentiment", + "operation": "streamV2V2ReportsStreamPost", + "publicOperation": "streamV2V2ReportsStreamPost", + "deprecated": false, + "method": "POST", + "path": "/v2/reports/sentiment/stream", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "category_id", + "asset", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "group_by", + "metrics", + "interval", + "filter", + "sort", + "include_cited_websites", + "limit", + "max_results", + "cursor" + ], + "publicBodyParams": [ + "category_id", + "asset", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "group_by", + "metrics", + "interval", + "filter", + "sort", + "include_cited_websites", + "limit", + "max_results", + "cursor" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "SentimentStreamV2V2ReportsStreamPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "text/event-stream", + "encoding": "text", + "contents": [ + { + "contentType": "text/event-stream", + "encoding": "text" + } + ] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http", + "streaming": "sse" + }, + { + "resource": "reports.webSearchResults", + "publicResource": "reports.webSearchResults", + "operation": "query", + "publicOperation": "query", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/web-search-results", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" + ], + "publicBodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "WebSearchResultQueryParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "WebSearchResultsResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.webSearchResults", + "publicResource": "reports.webSearchResults", + "operation": "stream", + "publicOperation": "stream", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/web-search-results/stream", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" + ], + "publicBodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "WebSearchResultStreamParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "text/event-stream", + "encoding": "text", + "contents": [ + { + "contentType": "text/event-stream", + "encoding": "text" + } + ] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http", + "streaming": "sse" + }, + { + "resource": "reports.referrals", + "publicResource": "reports.referrals", + "operation": "createReportV1V1ReportsPost", + "publicOperation": "createReportV1V1ReportsPost", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/referrals", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "domain", + "start_date", + "end_date", + "organization_id", + "metric_filters", + "filters" + ], + "publicBodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "domain", + "start_date", + "end_date", + "organization_id", + "metric_filters", + "filters" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "ReferralCreateReportV1V1ReportsPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "ReportResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.referrals", + "publicResource": "reports.referrals", + "operation": "createReportV2V2ReportsPost", + "publicOperation": "createReportV2V2ReportsPost", + "deprecated": false, + "method": "POST", + "path": "/v2/reports/referrals", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "domain", + "start_date", + "end_date", + "organization_id", + "metric_filters", + "filters" + ], + "publicBodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "domain", + "start_date", + "end_date", + "organization_id", + "metric_filters", + "filters" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "ReferralCreateReportV2V2ReportsPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "ReportResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.bots", + "publicResource": "reports.bots", + "operation": "createReportV1V1ReportsPost", + "publicOperation": "createReportV1V1ReportsPost", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/bots", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "domain", + "start_date", + "end_date", + "organization_id", + "metric_filters", + "filters" + ], + "publicBodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "domain", + "start_date", + "end_date", + "organization_id", + "metric_filters", + "filters" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "BotCreateReportV1V1ReportsPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "ReportResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.bots", + "publicResource": "reports.bots", + "operation": "createReportV2V2ReportsPost", + "publicOperation": "createReportV2V2ReportsPost", + "deprecated": false, + "method": "POST", + "path": "/v2/reports/bots", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "domain", + "start_date", + "end_date", + "organization_id", + "metric_filters", + "filters" + ], + "publicBodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "domain", + "start_date", + "end_date", + "organization_id", + "metric_filters", + "filters" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "BotCreateReportV2V2ReportsPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "ReportResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.queryFanouts", + "publicResource": "reports.queryFanouts", + "operation": "v1ReportsPost", + "publicOperation": "v1ReportsPost", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/query-fanouts", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" + ], + "publicBodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "QueryFanoutV1ReportsPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "ReportResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.queryFanouts", + "publicResource": "reports.queryFanouts", + "operation": "v2V2ReportsPost", + "publicOperation": "v2V2ReportsPost", + "deprecated": false, + "method": "POST", + "path": "/v2/reports/query-fanouts", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "category_id", + "start_date", + "end_date", + "group_by", + "metrics", + "interval", + "filter", + "sort", + "limit", + "max_results", + "cursor" + ], + "publicBodyParams": [ + "category_id", + "start_date", + "end_date", + "group_by", + "metrics", + "interval", + "filter", + "sort", + "limit", + "max_results", + "cursor" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "QueryFanoutV2V2ReportsPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.queryFanouts", + "publicResource": "reports.queryFanouts", + "operation": "streamV2V2ReportsStreamPost", + "publicOperation": "streamV2V2ReportsStreamPost", + "deprecated": false, + "method": "POST", + "path": "/v2/reports/query-fanouts/stream", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "category_id", + "start_date", + "end_date", + "group_by", + "metrics", + "interval", + "filter", + "sort", + "limit", + "max_results", + "cursor" + ], + "publicBodyParams": [ + "category_id", + "start_date", + "end_date", + "group_by", + "metrics", + "interval", + "filter", + "sort", + "limit", + "max_results", + "cursor" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "QueryFanoutStreamV2V2ReportsStreamPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "text/event-stream", + "encoding": "text", + "contents": [ + { + "contentType": "text/event-stream", + "encoding": "text" + } + ] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http", + "streaming": "sse" + }, + { + "resource": "reports.shopping", + "publicResource": "reports.shopping", + "operation": "visibility", + "publicOperation": "visibility", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/shopping/visibility", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "owned_asset_names", + "search_asset", + "include_asset", + "include_asset_only", + "include_assets_only", + "rank_by", + "include_position_frequency" + ], + "publicBodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "owned_asset_names", + "search_asset", + "include_asset", + "include_asset_only", + "include_assets_only", + "rank_by", + "include_position_frequency" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "ShoppingVisibilityParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "ShoppingRowsResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.shopping", + "publicResource": "reports.shopping", + "operation": "itemVisibility", + "publicOperation": "itemVisibility", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/shopping/item-visibility", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "owned_asset_names", + "include_items", + "search_item", + "merchant_filter_type", + "include_competitors", + "target_product", + "competitor_limit", + "include_position_frequency" + ], + "publicBodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "owned_asset_names", + "include_items", + "search_item", + "merchant_filter_type", + "include_competitors", + "target_product", + "competitor_limit", + "include_position_frequency" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "ShoppingItemVisibilityParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "ShoppingRowsResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.shopping", + "publicResource": "reports.shopping", + "operation": "merchantDistribution", + "publicOperation": "merchantDistribution", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/shopping/merchant-distribution", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "owned_asset_names", + "search_merchant" + ], + "publicBodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "owned_asset_names", + "search_merchant" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "ShoppingMerchantDistributionParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "ShoppingRowsResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.shopping", + "publicResource": "reports.shopping", + "operation": "merchantVisibilityByBrand", + "publicOperation": "merchantVisibilityByBrand", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/shopping/merchant-visibility-by-brand", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "owned_asset_names", + "search_brand", + "include_brand", + "include_brand_only" + ], + "publicBodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "owned_asset_names", + "search_brand", + "include_brand", + "include_brand_only" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "ShoppingMerchantVisibilityByBrandParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "ShoppingRowsResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.shopping", + "publicResource": "reports.shopping", + "operation": "merchantByItems", + "publicOperation": "merchantByItems", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/shopping/merchant-by-items", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "product_name" + ], + "publicBodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "product_name" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "ShoppingMerchantByItemsParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "ShoppingRowsResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.shopping", + "publicResource": "reports.shopping", + "operation": "allItemsWithMerchants", + "publicOperation": "allItemsWithMerchants", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/shopping/all-items-with-merchants", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "owned_asset_names", + "include_items", + "search_item", + "merchant_filter_type", + "rank_by", + "sort_order" + ], + "publicBodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "owned_asset_names", + "include_items", + "search_item", + "merchant_filter_type", + "rank_by", + "sort_order" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "ShoppingAllItemsWithMerchantsParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "ShoppingRowsResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.shopping", + "publicResource": "reports.shopping", + "operation": "triggerRate", + "publicOperation": "triggerRate", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/shopping/trigger-rate", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics" + ], + "publicBodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "ShoppingTriggerRateParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "ShoppingRowsResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.shopping", + "publicResource": "reports.shopping", + "operation": "merchantShare", + "publicOperation": "merchantShare", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/shopping/merchant-share", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "target_asset_names", + "owned_asset_names" + ], + "publicBodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "target_asset_names", + "owned_asset_names" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "ShoppingMerchantShareParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "ShoppingRowsResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.shopping", + "publicResource": "reports.shopping", + "operation": "productMerchantUrls", + "publicOperation": "productMerchantUrls", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/shopping/product-merchant-urls", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "category_id", + "product_names", + "start_date", + "end_date" + ], + "publicBodyParams": [ + "category_id", + "product_names", + "start_date", + "end_date" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "ShoppingProductMerchantUrlsParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "ShoppingRowsResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.shopping", + "publicResource": "reports.shopping", + "operation": "executions", + "publicOperation": "executions", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/shopping/executions", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "analysis_types", + "analysis_filter_type", + "owned_asset_names" + ], + "publicBodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "analysis_types", + "analysis_filter_type", + "owned_asset_names" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "ShoppingExecutionsParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "ShoppingRowsResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.accuracy", + "publicResource": "reports.accuracy", + "operation": "overviewV1ReportsOverviewPost", + "publicOperation": "overviewV1ReportsOverviewPost", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/accuracy/overview", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "category_id", + "topic_ids", + "exclude_topic_ids", + "tag_ids", + "tag_filter_type", + "include_no_tag", + "region_ids", + "platform_ids", + "persona_ids", + "include_no_persona", + "prompt_ids", + "citation_categories", + "date_bucket", + "group_by" + ], + "publicBodyParams": [ + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "category_id", + "topic_ids", + "exclude_topic_ids", + "tag_ids", + "tag_filter_type", + "include_no_tag", + "region_ids", + "platform_ids", + "persona_ids", + "include_no_persona", + "prompt_ids", + "citation_categories", + "date_bucket", + "group_by" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "AccuracyOverviewV1ReportsOverviewPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "AccuracyOverviewResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.accuracy", + "publicResource": "reports.accuracy", + "operation": "breakdownV1ReportsBreakdownPost", + "publicOperation": "breakdownV1ReportsBreakdownPost", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/accuracy/breakdown", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "category_id", + "topic_ids", + "exclude_topic_ids", + "tag_ids", + "tag_filter_type", + "include_no_tag", + "region_ids", + "platform_ids", + "persona_ids", + "include_no_persona", + "prompt_ids", + "citation_categories", + "breakdown_by", + "limit", + "offset", + "search_query", + "sort_by", + "sort_order" + ], + "publicBodyParams": [ + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "category_id", + "topic_ids", + "exclude_topic_ids", + "tag_ids", + "tag_filter_type", + "include_no_tag", + "region_ids", + "platform_ids", + "persona_ids", + "include_no_persona", + "prompt_ids", + "citation_categories", + "breakdown_by", + "limit", + "offset", + "search_query", + "sort_by", + "sort_order" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "AccuracyBreakdownV1ReportsBreakdownPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "AccuracyBreakdownResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.accuracy", + "publicResource": "reports.accuracy", + "operation": "citationAnalysisV1ReportsCitationAnalysisPost", + "publicOperation": "citationAnalysisV1ReportsCitationAnalysisPost", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/accuracy/citation-analysis", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "category_id", + "clean_href", + "start_date", + "end_date" + ], + "publicBodyParams": [ + "category_id", + "clean_href", + "start_date", + "end_date" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "AccuracyCitationAnalysisV1ReportsCitationAnalysisPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "AccuracyCitationAnalysisResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.accuracy", + "publicResource": "reports.accuracy", + "operation": "topicIdsV1ReportsTopicIdsPost", + "publicOperation": "topicIdsV1ReportsTopicIdsPost", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/accuracy/topic-ids", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "category_id", + "start_date", + "end_date" + ], + "publicBodyParams": [ + "category_id", + "start_date", + "end_date" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "AccuracyTopicIdsV1ReportsTopicIdsPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.accuracy", + "publicResource": "reports.accuracy", + "operation": "inaccurateThemesV1ReportsInaccurateThemesPost", + "publicOperation": "inaccurateThemesV1ReportsInaccurateThemesPost", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/accuracy/inaccurate-themes", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "category_id", + "topic_ids", + "exclude_topic_ids", + "tag_ids", + "tag_filter_type", + "include_no_tag", + "region_ids", + "platform_ids", + "persona_ids", + "include_no_persona", + "prompt_ids", + "citation_categories", + "limit", + "offset", + "sort_by", + "sort_order", + "search_query" + ], + "publicBodyParams": [ + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "category_id", + "topic_ids", + "exclude_topic_ids", + "tag_ids", + "tag_filter_type", + "include_no_tag", + "region_ids", + "platform_ids", + "persona_ids", + "include_no_persona", + "prompt_ids", + "citation_categories", + "limit", + "offset", + "sort_by", + "sort_order", + "search_query" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "AccuracyInaccurateThemesV1ReportsInaccurateThemesPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "InaccurateThemesResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.accuracy", + "publicResource": "reports.accuracy", + "operation": "inaccurateClustersV1ReportsInaccurateClustersPost", + "publicOperation": "inaccurateClustersV1ReportsInaccurateClustersPost", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/accuracy/inaccurate-clusters", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "category_id", + "topic_ids", + "exclude_topic_ids", + "tag_ids", + "tag_filter_type", + "include_no_tag", + "region_ids", + "platform_ids", + "persona_ids", + "include_no_persona", + "prompt_ids", + "citation_categories", + "theme_id", + "limit", + "offset", + "search_query" + ], + "publicBodyParams": [ + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "category_id", + "topic_ids", + "exclude_topic_ids", + "tag_ids", + "tag_filter_type", + "include_no_tag", + "region_ids", + "platform_ids", + "persona_ids", + "include_no_persona", + "prompt_ids", + "citation_categories", + "theme_id", + "limit", + "offset", + "search_query" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "AccuracyInaccurateClustersV1ReportsInaccurateClustersPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "InaccurateClustersResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.accuracy", + "publicResource": "reports.accuracy", + "operation": "inaccuracyDriversV1ReportsInaccuracyDriversPost", + "publicOperation": "inaccuracyDriversV1ReportsInaccuracyDriversPost", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/accuracy/inaccuracy-drivers", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "category_id", + "topic_ids", + "exclude_topic_ids", + "tag_ids", + "tag_filter_type", + "include_no_tag", + "region_ids", + "platform_ids", + "persona_ids", + "include_no_persona", + "prompt_ids", + "citation_categories", + "limit" + ], + "publicBodyParams": [ + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "category_id", + "topic_ids", + "exclude_topic_ids", + "tag_ids", + "tag_filter_type", + "include_no_tag", + "region_ids", + "platform_ids", + "persona_ids", + "include_no_persona", + "prompt_ids", + "citation_categories", + "limit" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "InaccuracyDriversResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.accuracy", + "publicResource": "reports.accuracy", + "operation": "topInaccurateClaimsV1ReportsTopInaccurateClaimsPost", + "publicOperation": "topInaccurateClaimsV1ReportsTopInaccurateClaimsPost", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/accuracy/top-inaccurate-claims", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "category_id", + "topic_ids", + "exclude_topic_ids", + "tag_ids", + "tag_filter_type", + "include_no_tag", + "region_ids", + "platform_ids", + "persona_ids", + "include_no_persona", + "prompt_ids", + "citation_categories", + "limit" + ], + "publicBodyParams": [ + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "category_id", + "topic_ids", + "exclude_topic_ids", + "tag_ids", + "tag_filter_type", + "include_no_tag", + "region_ids", + "platform_ids", + "persona_ids", + "include_no_persona", + "prompt_ids", + "citation_categories", + "limit" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "TopInaccurateClaimsResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.accuracy", + "publicResource": "reports.accuracy", + "operation": "claimBreakdownV1ReportsClaimBreakdownPost", + "publicOperation": "claimBreakdownV1ReportsClaimBreakdownPost", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/accuracy/claim-breakdown", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "category_id", + "topic_ids", + "exclude_topic_ids", + "tag_ids", + "tag_filter_type", + "include_no_tag", + "region_ids", + "platform_ids", + "persona_ids", + "include_no_persona", + "prompt_ids", + "citation_categories", + "cluster_id" + ], + "publicBodyParams": [ + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "category_id", + "topic_ids", + "exclude_topic_ids", + "tag_ids", + "tag_filter_type", + "include_no_tag", + "region_ids", + "platform_ids", + "persona_ids", + "include_no_persona", + "prompt_ids", + "citation_categories", + "cluster_id" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "AccuracyClaimBreakdownV1ReportsClaimBreakdownPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "ClaimBreakdownResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.accuracy", + "publicResource": "reports.accuracy", + "operation": "claimCitationsV1ReportsClaimCitationsPost", + "publicOperation": "claimCitationsV1ReportsClaimCitationsPost", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/accuracy/claim-citations", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "category_id", + "topic_ids", + "exclude_topic_ids", + "tag_ids", + "tag_filter_type", + "include_no_tag", + "region_ids", + "platform_ids", + "persona_ids", + "include_no_persona", + "prompt_ids", + "citation_categories", + "cluster_id", + "limit", + "offset", + "search_query", + "sort_order" + ], + "publicBodyParams": [ + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "category_id", + "topic_ids", + "exclude_topic_ids", + "tag_ids", + "tag_filter_type", + "include_no_tag", + "region_ids", + "platform_ids", + "persona_ids", + "include_no_persona", + "prompt_ids", + "citation_categories", + "cluster_id", + "limit", + "offset", + "search_query", + "sort_order" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "AccuracyClaimCitationsV1ReportsClaimCitationsPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "ClaimCitationsResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.accuracy", + "publicResource": "reports.accuracy", + "operation": "clusterExampleRunsV1ReportsClusterExampleRunsPost", + "publicOperation": "clusterExampleRunsV1ReportsClusterExampleRunsPost", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/accuracy/cluster-example-runs", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "category_id", + "cluster_id", + "start_date", + "end_date", + "limit", + "offset" + ], + "publicBodyParams": [ + "category_id", + "cluster_id", + "start_date", + "end_date", + "limit", + "offset" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "ClusterExampleRunsResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.accuracy", + "publicResource": "reports.accuracy", + "operation": "clusterVerificationPairsV1ReportsClusterVerificationPairsPost", + "publicOperation": "clusterVerificationPairsV1ReportsClusterVerificationPairsPost", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/accuracy/cluster-verification-pairs", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "category_id", + "cluster_id" + ], + "publicBodyParams": [ + "category_id", + "cluster_id" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "ClusterVerificationPairsResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "reports.accuracy", + "publicResource": "reports.accuracy", + "operation": "factcheckSetupStatusV1ReportsFactcheckSetupStatusPost", + "publicOperation": "factcheckSetupStatusV1ReportsFactcheckSetupStatusPost", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/accuracy/factcheck-setup-status", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "category_id" + ], + "publicBodyParams": [ + "category_id" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "FactCheckSetupStatusResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "content.optimization", + "publicResource": "content.optimization", + "operation": "list", + "publicOperation": "list", + "deprecated": false, + "method": "GET", + "path": "/v1/content/{asset_id}/optimization", + "pathParams": [ + "asset_id" + ], + "publicPathParams": [ + "asset_id" + ], + "queryParams": [ + "limit", + "offset" + ], + "publicQueryParams": [ + "limit", + "offset" + ], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "pathParamDetails": [ + { + "name": "asset_id", + "required": true, + "style": "simple", + "explode": false + } + ], + "queryParamDetails": [ + { + "name": "limit", + "required": false, + "style": "form", + "explode": true, + "defaultValue": 10000 + }, + { + "name": "offset", + "required": false, + "style": "form", + "explode": true, + "defaultValue": 0 + } + ], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "OptimizationListParams" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "ContentOptimizationResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "content.optimization", + "publicResource": "content.optimization", + "operation": "retrieve", + "publicOperation": "retrieve", + "deprecated": false, + "method": "GET", + "path": "/v1/content/{asset_id}/optimization/{content_id}", + "pathParams": [ + "asset_id", + "content_id" + ], + "publicPathParams": [ + "asset_id", + "content_id" + ], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "pathParamDetails": [ + { + "name": "asset_id", + "required": true, + "style": "simple", + "explode": false + }, + { + "name": "content_id", + "required": true, + "style": "simple", + "explode": false + } + ], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "OptimizationRetrieveParams" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "ContentOptimizationAnalysisResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "knowledgeBases", + "publicResource": "knowledgeBases", + "operation": "list", + "publicOperation": "list", + "deprecated": false, + "method": "GET", + "path": "/v1/knowledge-bases", + "pathParams": [], + "publicPathParams": [], + "queryParams": [ + "organization_id" + ], + "publicQueryParams": [ + "organization_id" + ], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "pathParamDetails": [], + "queryParamDetails": [ + { + "name": "organization_id", + "required": false, + "style": "form", + "explode": true + } + ], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "KnowledgeBaseListParams" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "ListKnowledgeBasesResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "knowledgeBases", + "publicResource": "knowledgeBases", + "operation": "search", + "publicOperation": "search", + "deprecated": false, + "method": "POST", + "path": "/v1/knowledge-bases/{knowledge_base_id}/search", + "pathParams": [ + "knowledge_base_id" + ], + "publicPathParams": [ + "knowledge_base_id" + ], + "queryParams": [ + "organization_id" + ], + "publicQueryParams": [ + "organization_id" + ], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "query", + "top_k", + "return_full_page", + "filters" + ], + "publicBodyParams": [ + "query", + "top_k", + "return_full_page", + "filters" + ], + "pathParamDetails": [ + { + "name": "knowledge_base_id", + "required": true, + "style": "simple", + "explode": false + } + ], + "queryParamDetails": [ + { + "name": "organization_id", + "required": false, + "style": "form", + "explode": true + } + ], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "KnowledgeBaseSearchParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "KnowledgeBaseSearchResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "knowledgeBases.documents", + "publicResource": "knowledgeBases.documents", + "operation": "create", + "publicOperation": "create", + "deprecated": false, + "method": "POST", + "path": "/v1/knowledge-bases/{knowledge_base_id}/documents", + "pathParams": [ + "knowledge_base_id" + ], + "publicPathParams": [ + "knowledge_base_id" + ], + "queryParams": [ + "organization_id" + ], + "publicQueryParams": [ + "organization_id" + ], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "name", + "text", + "folder" + ], + "publicBodyParams": [ + "name", + "text", + "folder" + ], + "pathParamDetails": [ + { + "name": "knowledge_base_id", + "required": true, + "style": "simple", + "explode": false + } + ], + "queryParamDetails": [ + { + "name": "organization_id", + "required": false, + "style": "form", + "explode": true + } + ], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "DocumentCreateParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + }, + { + "contentType": "multipart/form-data", + "encoding": "multipart" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "201", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "DocumentOperationResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "201", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "knowledgeBases.documents", + "publicResource": "knowledgeBases.documents", + "operation": "update", + "publicOperation": "update", + "deprecated": false, + "method": "PUT", + "path": "/v1/knowledge-bases/{knowledge_base_id}/documents", + "pathParams": [ + "knowledge_base_id" + ], + "publicPathParams": [ + "knowledge_base_id" + ], + "queryParams": [ + "organization_id" + ], + "publicQueryParams": [ + "organization_id" + ], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "name", + "text", + "folder" + ], + "publicBodyParams": [ + "name", + "text", + "folder" + ], + "pathParamDetails": [ + { + "name": "knowledge_base_id", + "required": true, + "style": "simple", + "explode": false + } + ], + "queryParamDetails": [ + { + "name": "organization_id", + "required": false, + "style": "form", + "explode": true + } + ], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "DocumentUpdateParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + }, + { + "contentType": "multipart/form-data", + "encoding": "multipart" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "DocumentOperationResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "knowledgeBases.documents", + "publicResource": "knowledgeBases.documents", + "operation": "delete", + "publicOperation": "delete", + "deprecated": false, + "method": "DELETE", + "path": "/v1/knowledge-bases/{knowledge_base_id}/documents", + "pathParams": [ + "knowledge_base_id" + ], + "publicPathParams": [ + "knowledge_base_id" + ], + "queryParams": [ + "organization_id" + ], + "publicQueryParams": [ + "organization_id" + ], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "name" + ], + "publicBodyParams": [ + "name" + ], + "pathParamDetails": [ + { + "name": "knowledge_base_id", + "required": true, + "style": "simple", + "explode": false + } + ], + "queryParamDetails": [ + { + "name": "organization_id", + "required": false, + "style": "form", + "explode": true + } + ], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "DocumentDeleteParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "DocumentOperationResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "knowledgeBases.folders", + "publicResource": "knowledgeBases.folders", + "operation": "create", + "publicOperation": "create", + "deprecated": false, + "method": "POST", + "path": "/v1/knowledge-bases/{knowledge_base_id}/folders", + "pathParams": [ + "knowledge_base_id" + ], + "publicPathParams": [ + "knowledge_base_id" + ], + "queryParams": [ + "organization_id" + ], + "publicQueryParams": [ + "organization_id" + ], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "path" + ], + "publicBodyParams": [ + "path" + ], + "pathParamDetails": [ + { + "name": "knowledge_base_id", + "required": true, + "style": "simple", + "explode": false + } + ], + "queryParamDetails": [ + { + "name": "organization_id", + "required": false, + "style": "form", + "explode": true + } + ], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "FolderCreateParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "201", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "FolderOperationResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "201", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "knowledgeBases.folders", + "publicResource": "knowledgeBases.folders", + "operation": "delete", + "publicOperation": "delete", + "deprecated": false, + "method": "DELETE", + "path": "/v1/knowledge-bases/{knowledge_base_id}/folders", + "pathParams": [ + "knowledge_base_id" + ], + "publicPathParams": [ + "knowledge_base_id" + ], + "queryParams": [ + "organization_id" + ], + "publicQueryParams": [ + "organization_id" + ], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "path", + "recursive" + ], + "publicBodyParams": [ + "path", + "recursive" + ], + "pathParamDetails": [ + { + "name": "knowledge_base_id", + "required": true, + "style": "simple", + "explode": false + } + ], + "queryParamDetails": [ + { + "name": "organization_id", + "required": false, + "style": "form", + "explode": true + } + ], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "FolderDeleteParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "FolderOperationResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "agents", + "publicResource": "agents", + "operation": "list", + "publicOperation": "list", + "deprecated": false, + "method": "GET", + "path": "/v1/agents", + "pathParams": [], + "publicPathParams": [], + "queryParams": [ + "statuses", + "limit", + "next_cursor" + ], + "publicQueryParams": [ + "statuses", + "limit", + "next_cursor" + ], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "pathParamDetails": [], + "queryParamDetails": [ + { + "name": "statuses", + "required": false, + "style": "form", + "explode": true + }, + { + "name": "limit", + "required": false, + "style": "form", + "explode": true, + "defaultValue": 100 + }, + { + "name": "next_cursor", + "required": false, + "style": "form", + "explode": true + } + ], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "AgentListParams" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "ListAgentsResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "agents", + "publicResource": "agents", + "operation": "createV1Post", + "publicOperation": "createV1Post", + "deprecated": false, + "method": "POST", + "path": "/v1/agents", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "organization_id", + "name", + "description", + "graph" + ], + "publicBodyParams": [ + "organization_id", + "name", + "description", + "graph" + ], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "AgentCreateV1PostParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "201", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "Agent", + "publicAliases": [] + }, + "result": { + "successStatus": "201", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "agents", + "publicResource": "agents", + "operation": "publishV1IdPublishPost", + "publicOperation": "publishV1IdPublishPost", + "deprecated": false, + "method": "POST", + "path": "/v1/agents/{agent_id}/publish", + "pathParams": [ + "agent_id" + ], + "publicPathParams": [ + "agent_id" + ], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "pathParamDetails": [ + { + "name": "agent_id", + "required": true, + "style": "simple", + "explode": false + } + ], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "AgentPublishV1IdPublishPostParams" + }, + "response": { + "status": "201", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "Agent", + "publicAliases": [] + }, + "result": { + "successStatus": "201", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "agents", + "publicResource": "agents", + "operation": "retrieve", + "publicOperation": "retrieve", + "deprecated": false, + "method": "GET", + "path": "/v1/agents/{agent_id}", + "pathParams": [ + "agent_id" + ], + "publicPathParams": [ + "agent_id" + ], + "queryParams": [ + "version" + ], + "publicQueryParams": [ + "version" + ], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "pathParamDetails": [ + { + "name": "agent_id", + "required": true, + "style": "simple", + "explode": false + } + ], + "queryParamDetails": [ + { + "name": "version", + "required": false, + "style": "form", + "explode": true + } + ], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "AgentRetrieveParams" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "AgentDetail", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "agents", + "publicResource": "agents", + "operation": "updateV1IdPatch", + "publicOperation": "updateV1IdPatch", + "deprecated": false, + "method": "PATCH", + "path": "/v1/agents/{agent_id}", + "pathParams": [ + "agent_id" + ], + "publicPathParams": [ + "agent_id" + ], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "graph" + ], + "publicBodyParams": [ + "graph" + ], + "pathParamDetails": [ + { + "name": "agent_id", + "required": true, + "style": "simple", + "explode": false + } + ], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "AgentUpdateV1IdPatchParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "AgentDetail", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "agents", + "publicResource": "agents", + "operation": "listGraphV1GraphGet", + "publicOperation": "listGraphV1GraphGet", + "deprecated": false, + "method": "GET", + "path": "/v1/agents/{agent_id}/graph", + "pathParams": [ + "agent_id" + ], + "publicPathParams": [ + "agent_id" + ], + "queryParams": [ + "version" + ], + "publicQueryParams": [ + "version" + ], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "pathParamDetails": [ + { + "name": "agent_id", + "required": true, + "style": "simple", + "explode": false + } + ], + "queryParamDetails": [ + { + "name": "version", + "required": false, + "style": "form", + "explode": true + } + ], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "AgentListGraphV1GraphGetParams" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "AgentGraph", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "agents.nodeTypes", + "publicResource": "agents.nodeTypes", + "operation": "listV1AgentsGet", + "publicOperation": "listV1AgentsGet", + "deprecated": false, + "method": "GET", + "path": "/v1/agents/node-types", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "ListNodeTypesResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "agents.nodeTypes", + "publicResource": "agents.nodeTypes", + "operation": "listSchemaV1AgentsSchemaGet", + "publicOperation": "listSchemaV1AgentsSchemaGet", + "deprecated": false, + "method": "GET", + "path": "/v1/agents/node-types/{node_type}/schema", + "pathParams": [ + "node_type" + ], + "publicPathParams": [ + "node_type" + ], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "pathParamDetails": [ + { + "name": "node_type", + "required": true, + "style": "simple", + "explode": false + } + ], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "NodeTypeListSchemaV1AgentsSchemaGetParams" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "NodeSchemaResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "agents.runs", + "publicResource": "agents.runs", + "operation": "create", + "publicOperation": "create", + "deprecated": false, + "method": "POST", + "path": "/v1/agents/{agent_id}/runs", + "pathParams": [ + "agent_id" + ], + "publicPathParams": [ + "agent_id" + ], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "body" + ], + "publicBodyParams": [ + "body" + ], + "pathParamDetails": [ + { + "name": "agent_id", + "required": true, + "style": "simple", + "explode": false + } + ], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "RunCreateParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": false, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "202", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "AcceptedAgentRun", + "publicAliases": [] + }, + "result": { + "successStatus": "202", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "agents.runs", + "publicResource": "agents.runs", + "operation": "retrieve", + "publicOperation": "retrieve", + "deprecated": false, + "method": "GET", + "path": "/v1/agents/{agent_id}/runs/{run_id}", + "pathParams": [ + "agent_id", + "run_id" + ], + "publicPathParams": [ + "agent_id", + "run_id" + ], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "pathParamDetails": [ + { + "name": "agent_id", + "required": true, + "style": "simple", + "explode": false + }, + { + "name": "run_id", + "required": true, + "style": "simple", + "explode": false + } + ], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "RunRetrieveParams" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "AgentRun", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "organizations", + "publicResource": "organizations", + "operation": "list", + "publicOperation": "list", + "deprecated": false, + "method": "GET", + "path": "/v1/org", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "organizations", + "publicResource": "organizations", + "operation": "regions", + "publicOperation": "regions", + "deprecated": false, + "method": "GET", + "path": "/v1/org/regions", + "pathParams": [], + "publicPathParams": [], + "queryParams": [ + "organization_ids" + ], + "publicQueryParams": [ + "organization_ids" + ], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "pathParamDetails": [], + "queryParamDetails": [ + { + "name": "organization_ids", + "required": false, + "style": "form", + "explode": true + } + ], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "OrganizationRegionsParams" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "organizations", + "publicResource": "organizations", + "operation": "models", + "publicOperation": "models", + "deprecated": false, + "method": "GET", + "path": "/v1/org/models", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "pathParamDetails": [], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "organizations", + "publicResource": "organizations", + "operation": "domains", + "publicOperation": "domains", + "deprecated": false, + "method": "GET", + "path": "/v1/org/domains", + "pathParams": [], + "publicPathParams": [], + "queryParams": [ + "organization_ids" + ], + "publicQueryParams": [ + "organization_ids" + ], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "pathParamDetails": [], + "queryParamDetails": [ + { + "name": "organization_ids", + "required": false, + "style": "form", + "explode": true + } + ], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "OrganizationDomainsParams" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "organizations", + "publicResource": "organizations", + "operation": "listAssets", + "publicOperation": "listAssets", + "deprecated": false, + "method": "GET", + "path": "/v1/org/assets", + "pathParams": [], + "publicPathParams": [], + "queryParams": [ + "organization_ids" + ], + "publicQueryParams": [ + "organization_ids" + ], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "pathParamDetails": [], + "queryParamDetails": [ + { + "name": "organization_ids", + "required": false, + "style": "form", + "explode": true + } + ], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "OrganizationListAssetsParams" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "OrganizationAssetsResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "organizations", + "publicResource": "organizations", + "operation": "getPersonas", + "publicOperation": "getPersonas", + "deprecated": false, + "method": "GET", + "path": "/v1/org/personas", + "pathParams": [], + "publicPathParams": [], + "queryParams": [ + "organization_ids" + ], + "publicQueryParams": [ + "organization_ids" + ], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "pathParamDetails": [], + "queryParamDetails": [ + { + "name": "organization_ids", + "required": false, + "style": "form", + "explode": true + } + ], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "OrganizationGetPersonasParams" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "OrganizationPersonasWithCategoryResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "organizations.categories", + "publicResource": "organizations.categories", + "operation": "list", + "publicOperation": "list", + "deprecated": false, + "method": "GET", + "path": "/v1/org/categories", + "pathParams": [], + "publicPathParams": [], + "queryParams": [ + "organization_ids" + ], + "publicQueryParams": [ + "organization_ids" + ], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "pathParamDetails": [], + "queryParamDetails": [ + { + "name": "organization_ids", + "required": false, + "style": "form", + "explode": true + } + ], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "CategoryListParams" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "organizations.categories", + "publicResource": "organizations.categories", + "operation": "topics", + "publicOperation": "topics", + "deprecated": false, + "method": "GET", + "path": "/v1/org/categories/{category_id}/topics", + "pathParams": [ + "category_id" + ], + "publicPathParams": [ + "category_id" + ], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "pathParamDetails": [ + { + "name": "category_id", + "required": true, + "style": "simple", + "explode": false + } + ], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "CategoryTopicsParams" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "organizations.categories", + "publicResource": "organizations.categories", + "operation": "tags", + "publicOperation": "tags", + "deprecated": false, + "method": "GET", + "path": "/v1/org/categories/{category_id}/tags", + "pathParams": [ + "category_id" + ], + "publicPathParams": [ + "category_id" + ], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "pathParamDetails": [ + { + "name": "category_id", + "required": true, + "style": "simple", + "explode": false + } + ], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "CategoryTagsParams" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "organizations.categories", + "publicResource": "organizations.categories", + "operation": "prompts", + "publicOperation": "prompts", + "deprecated": false, + "method": "GET", + "path": "/v1/org/categories/{category_id}/prompts", + "pathParams": [ + "category_id" + ], + "publicPathParams": [ + "category_id" + ], + "queryParams": [ + "limit", + "cursor", + "order_dir", + "analysis_type", + "prompt_type", + "status", + "topic_id", + "tag_id", + "region_id", + "platform_id", + "persona_id" + ], + "publicQueryParams": [ + "limit", + "cursor", + "order_dir", + "analysis_type", + "prompt_type", + "status", + "topic_id", + "tag_id", + "region_id", + "platform_id", + "persona_id" + ], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "pathParamDetails": [ + { + "name": "category_id", + "required": true, + "style": "simple", + "explode": false + } + ], + "queryParamDetails": [ + { + "name": "limit", + "required": false, + "style": "form", + "explode": true, + "defaultValue": 10000 + }, + { + "name": "cursor", + "required": false, + "style": "form", + "explode": true + }, + { + "name": "order_dir", + "required": false, + "style": "form", + "explode": true + }, + { + "name": "analysis_type", + "required": false, + "style": "form", + "explode": true + }, + { + "name": "prompt_type", + "required": false, + "style": "form", + "explode": true + }, + { + "name": "status", + "required": false, + "style": "form", + "explode": true, + "defaultValue": [ + "active" + ] + }, + { + "name": "topic_id", + "required": false, + "style": "form", + "explode": true + }, + { + "name": "tag_id", + "required": false, + "style": "form", + "explode": true + }, + { + "name": "region_id", + "required": false, + "style": "form", + "explode": true + }, + { + "name": "platform_id", + "required": false, + "style": "form", + "explode": true + }, + { + "name": "persona_id", + "required": false, + "style": "form", + "explode": true + } + ], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "CategoryPromptsParams" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "CategoryPromptsResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "organizations.categories", + "publicResource": "organizations.categories", + "operation": "createPrompts", + "publicOperation": "createPrompts", + "deprecated": false, + "method": "POST", + "path": "/v1/org/categories/{category_id}/prompts", + "pathParams": [ + "category_id" + ], + "publicPathParams": [ + "category_id" + ], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "prompts", + "dry_run" + ], + "publicBodyParams": [ + "prompts", + "dry_run" + ], + "pathParamDetails": [ + { + "name": "category_id", + "required": true, + "style": "simple", + "explode": false + } + ], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "CategoryCreatePromptsParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "CreatePromptsResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "organizations.categories", + "publicResource": "organizations.categories", + "operation": "updatePrompts", + "publicOperation": "updatePrompts", + "deprecated": false, + "method": "PATCH", + "path": "/v1/org/categories/{category_id}/prompts", + "pathParams": [ + "category_id" + ], + "publicPathParams": [ + "category_id" + ], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "prompts", + "dry_run" + ], + "publicBodyParams": [ + "prompts", + "dry_run" + ], + "pathParamDetails": [ + { + "name": "category_id", + "required": true, + "style": "simple", + "explode": false + } + ], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "CategoryUpdatePromptsParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "UpdatePromptsResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "organizations.categories", + "publicResource": "organizations.categories", + "operation": "updatePromptStatus", + "publicOperation": "updatePromptStatus", + "deprecated": false, + "method": "PATCH", + "path": "/v1/org/categories/{category_id}/prompts/status", + "pathParams": [ + "category_id" + ], + "publicPathParams": [ + "category_id" + ], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [ + "prompt_ids", + "status", + "dry_run" + ], + "publicBodyParams": [ + "prompt_ids", + "status", + "dry_run" + ], + "pathParamDetails": [ + { + "name": "category_id", + "required": true, + "style": "simple", + "explode": false + } + ], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "CategoryUpdatePromptStatusParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "UpdatePromptStatusResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "organizations.categories", + "publicResource": "organizations.categories", + "operation": "assets", + "publicOperation": "assets", + "deprecated": false, + "method": "GET", + "path": "/v1/org/categories/{category_id}/assets", + "pathParams": [ + "category_id" + ], + "publicPathParams": [ + "category_id" + ], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "pathParamDetails": [ + { + "name": "category_id", + "required": true, + "style": "simple", + "explode": false + } + ], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "CategoryAssetsParams" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + }, + { + "resource": "organizations.categories", + "publicResource": "organizations.categories", + "operation": "getCategoryPersonas", + "publicOperation": "getCategoryPersonas", + "deprecated": false, + "method": "GET", + "path": "/v1/org/categories/{category_id}/personas", + "pathParams": [ + "category_id" + ], + "publicPathParams": [ + "category_id" + ], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "pathParamDetails": [ + { + "name": "category_id", + "required": true, + "style": "simple", + "explode": false + } + ], + "queryParamDetails": [], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "CategoryGetCategoryPersonasParams" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "responseModel": { + "name": "CategoryPersonasResponse", + "publicAliases": [] + }, + "result": { + "successStatus": "200", + "errorStatuses": [ + "422" + ] + }, + "errorResponses": [ + { + "status": "422", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "HttpValidationError", + "publicAliases": [] + } + } + ], + "responseLinks": [], + "transport": "http" + } + ], + "webhooks": [] +} diff --git a/scripts/bootstrap b/scripts/bootstrap deleted file mode 100755 index 5a23841b..00000000 --- a/scripts/bootstrap +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash - -set -e - -cd "$(dirname "$0")/.." - -if [ -f "Brewfile" ] && [ "$(uname -s)" = "Darwin" ] && [ "${SKIP_BREW:-}" != "1" ] && [ -t 0 ]; then - brew bundle check >/dev/null 2>&1 || { - echo -n "==> Install Homebrew dependencies? (y/N): " - read -r response - case "$response" in - [yY][eE][sS]|[yY]) - brew bundle - ;; - *) - ;; - esac - echo - } -fi - -echo "==> Installing Python…" -uv python install - -echo "==> Installing Python dependencies…" -uv sync --all-extras - -echo "==> Exporting Python dependencies…" -# note: `--no-hashes` is required because of https://github.com/pypa/pip/issues/4995 -uv export -o requirements-dev.lock --no-hashes diff --git a/scripts/format b/scripts/format deleted file mode 100755 index c8e1f69d..00000000 --- a/scripts/format +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash - -set -e - -cd "$(dirname "$0")/.." - -echo "==> Running ruff" -uv run ruff format -uv run ruff check --fix . -# run formatting again to fix any inconsistencies when imports are stripped -uv run ruff format - -echo "==> Formatting docs" -uv run python scripts/utils/ruffen-docs.py README.md $(find . -type f -name api.md) diff --git a/scripts/lint b/scripts/lint deleted file mode 100755 index 02defcf3..00000000 --- a/scripts/lint +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash - -set -e - -cd "$(dirname "$0")/.." - -if [ "$1" = "--fix" ]; then - echo "==> Running ruff with --fix" - uv run ruff check . --fix -else - echo "==> Running ruff" - uv run ruff check . -fi - -echo "==> Running pyright" -uv run pyright -p . - -echo "==> Running mypy" -uv run mypy . - -echo "==> Making sure it imports" -uv run python -c 'import profound' diff --git a/scripts/test b/scripts/test deleted file mode 100755 index fe50ebb1..00000000 --- a/scripts/test +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env bash - -set -e - -cd "$(dirname "$0")/.." - - - -export DEFER_PYDANTIC_BUILD=false - -# Note that we need to specify the patch version here so that uv -# won't use unstable (alpha, beta, rc) releases for the tests -PY_VERSION_MIN=">=3.9.0" -PY_VERSION_MAX=">=3.14.0" - -function run_tests() { - echo "==> Running tests with Pydantic v2" - uv run --isolated --all-extras pytest "$@" - - # Skip Pydantic v1 tests on latest Python (not supported) - if [[ "$UV_PYTHON" != "$PY_VERSION_MAX" ]]; then - echo "==> Running tests with Pydantic v1" - uv run --isolated --all-extras --group=pydantic-v1 pytest "$@" - fi -} - -# If UV_PYTHON is already set in the environment, just run the command once -if [[ -n "$UV_PYTHON" ]]; then - run_tests "$@" -else - # If UV_PYTHON is not set, run the command for min and max versions - - echo "==> Running tests for Python $PY_VERSION_MIN" - UV_PYTHON="$PY_VERSION_MIN" run_tests "$@" - - echo "==> Running tests for Python $PY_VERSION_MAX" - UV_PYTHON="$PY_VERSION_MAX" run_tests "$@" -fi diff --git a/scripts/utils/ruffen-docs.py b/scripts/utils/ruffen-docs.py deleted file mode 100644 index 0cf2bd2f..00000000 --- a/scripts/utils/ruffen-docs.py +++ /dev/null @@ -1,167 +0,0 @@ -# fork of https://github.com/asottile/blacken-docs adapted for ruff -from __future__ import annotations - -import re -import sys -import argparse -import textwrap -import contextlib -import subprocess -from typing import Match, Optional, Sequence, Generator, NamedTuple, cast - -MD_RE = re.compile( - r"(?P^(?P *)```\s*python\n)" r"(?P.*?)" r"(?P^(?P=indent)```\s*$)", - re.DOTALL | re.MULTILINE, -) -MD_PYCON_RE = re.compile( - r"(?P^(?P *)```\s*pycon\n)" r"(?P.*?)" r"(?P^(?P=indent)```.*$)", - re.DOTALL | re.MULTILINE, -) -PYCON_PREFIX = ">>> " -PYCON_CONTINUATION_PREFIX = "..." -PYCON_CONTINUATION_RE = re.compile( - rf"^{re.escape(PYCON_CONTINUATION_PREFIX)}( |$)", -) -DEFAULT_LINE_LENGTH = 100 - - -class CodeBlockError(NamedTuple): - offset: int - exc: Exception - - -def format_str( - src: str, -) -> tuple[str, Sequence[CodeBlockError]]: - errors: list[CodeBlockError] = [] - - @contextlib.contextmanager - def _collect_error(match: Match[str]) -> Generator[None, None, None]: - try: - yield - except Exception as e: - errors.append(CodeBlockError(match.start(), e)) - - def _md_match(match: Match[str]) -> str: - code = textwrap.dedent(match["code"]) - with _collect_error(match): - code = format_code_block(code) - code = textwrap.indent(code, match["indent"]) - return f"{match['before']}{code}{match['after']}" - - def _pycon_match(match: Match[str]) -> str: - code = "" - fragment = cast(Optional[str], None) - - def finish_fragment() -> None: - nonlocal code - nonlocal fragment - - if fragment is not None: - with _collect_error(match): - fragment = format_code_block(fragment) - fragment_lines = fragment.splitlines() - code += f"{PYCON_PREFIX}{fragment_lines[0]}\n" - for line in fragment_lines[1:]: - # Skip blank lines to handle Black adding a blank above - # functions within blocks. A blank line would end the REPL - # continuation prompt. - # - # >>> if True: - # ... def f(): - # ... pass - # ... - if line: - code += f"{PYCON_CONTINUATION_PREFIX} {line}\n" - if fragment_lines[-1].startswith(" "): - code += f"{PYCON_CONTINUATION_PREFIX}\n" - fragment = None - - indentation = None - for line in match["code"].splitlines(): - orig_line, line = line, line.lstrip() - if indentation is None and line: - indentation = len(orig_line) - len(line) - continuation_match = PYCON_CONTINUATION_RE.match(line) - if continuation_match and fragment is not None: - fragment += line[continuation_match.end() :] + "\n" - else: - finish_fragment() - if line.startswith(PYCON_PREFIX): - fragment = line[len(PYCON_PREFIX) :] + "\n" - else: - code += orig_line[indentation:] + "\n" - finish_fragment() - return code - - def _md_pycon_match(match: Match[str]) -> str: - code = _pycon_match(match) - code = textwrap.indent(code, match["indent"]) - return f"{match['before']}{code}{match['after']}" - - src = MD_RE.sub(_md_match, src) - src = MD_PYCON_RE.sub(_md_pycon_match, src) - return src, errors - - -def format_code_block(code: str) -> str: - return subprocess.check_output( - [ - sys.executable, - "-m", - "ruff", - "format", - "--stdin-filename=script.py", - f"--line-length={DEFAULT_LINE_LENGTH}", - ], - encoding="utf-8", - input=code, - ) - - -def format_file( - filename: str, - skip_errors: bool, -) -> int: - with open(filename, encoding="UTF-8") as f: - contents = f.read() - new_contents, errors = format_str(contents) - for error in errors: - lineno = contents[: error.offset].count("\n") + 1 - print(f"{filename}:{lineno}: code block parse error {error.exc}") - if errors and not skip_errors: - return 1 - if contents != new_contents: - print(f"{filename}: Rewriting...") - with open(filename, "w", encoding="UTF-8") as f: - f.write(new_contents) - return 0 - else: - return 0 - - -def main(argv: Sequence[str] | None = None) -> int: - parser = argparse.ArgumentParser() - parser.add_argument( - "-l", - "--line-length", - type=int, - default=DEFAULT_LINE_LENGTH, - ) - parser.add_argument( - "-S", - "--skip-string-normalization", - action="store_true", - ) - parser.add_argument("-E", "--skip-errors", action="store_true") - parser.add_argument("filenames", nargs="*") - args = parser.parse_args(argv) - - retv = 0 - for filename in args.filenames: - retv |= format_file(filename, skip_errors=args.skip_errors) - return retv - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/scripts/utils/upload-artifact.sh b/scripts/utils/upload-artifact.sh deleted file mode 100755 index 115e35bd..00000000 --- a/scripts/utils/upload-artifact.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash -set -exuo pipefail - -FILENAME=$(basename dist/*.whl) - -RESPONSE=$(curl -X POST "$URL?filename=$FILENAME" \ - -H "Authorization: Bearer $AUTH" \ - -H "Content-Type: application/json") - -SIGNED_URL=$(echo "$RESPONSE" | jq -r '.url') - -if [[ "$SIGNED_URL" == "null" ]]; then - echo -e "\033[31mFailed to get signed URL.\033[0m" - exit 1 -fi - -UPLOAD_RESPONSE=$(curl -v -X PUT \ - -H "Content-Type: binary/octet-stream" \ - --data-binary "@dist/$FILENAME" "$SIGNED_URL" 2>&1) - -if echo "$UPLOAD_RESPONSE" | grep -q "HTTP/[0-9.]* 200"; then - echo -e "\033[32mUploaded build to Stainless storage.\033[0m" - echo -e "\033[32mInstallation: pip install 'https://pkg.stainless.com/s/profound-python/$SHA/$FILENAME'\033[0m" -else - echo -e "\033[31mFailed to upload artifact.\033[0m" - exit 1 -fi diff --git a/src/profound/__init__.py b/src/__init__.py similarity index 74% rename from src/profound/__init__.py rename to src/__init__.py index 59c27fb0..09396e6b 100644 --- a/src/profound/__init__.py +++ b/src/__init__.py @@ -1,31 +1,20 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. import typing as _t from . import types from ._types import NOT_GIVEN, Omit, NoneType, NotGiven, Transport, ProxiesTypes, omit, not_given from ._utils import file_from_path -from ._client import ( - ENVIRONMENTS, - Client, - Stream, - Timeout, - Profound, - Transport, - AsyncClient, - AsyncStream, - AsyncProfound, - RequestOptions, -) +from ._client import Client, Stream, Profound, Timeout, Transport, AsyncClient, AsyncStream, AsyncProfound, RequestOptions, ENVIRONMENTS from ._models import BaseModel from ._version import __title__, __version__ from ._response import APIResponse as APIResponse, AsyncAPIResponse as AsyncAPIResponse from ._constants import DEFAULT_TIMEOUT, DEFAULT_MAX_RETRIES, DEFAULT_CONNECTION_LIMITS from ._exceptions import ( APIError, + ProfoundError, ConflictError, NotFoundError, - ProfoundError, APIStatusError, RateLimitError, APITimeoutError, @@ -41,6 +30,7 @@ from ._utils._logs import setup_logging as _setup_logging __all__ = [ + "ENVIRONMENTS", "types", "__version__", "__title__", @@ -74,7 +64,6 @@ "AsyncStream", "Profound", "AsyncProfound", - "ENVIRONMENTS", "file_from_path", "BaseModel", "DEFAULT_TIMEOUT", @@ -90,15 +79,11 @@ _setup_logging() -# Update the __module__ attribute for exported symbols so that -# error messages point to this module instead of the module -# it was originally defined in, e.g. -# profound._exceptions.NotFoundError -> profound.NotFoundError __locals = locals() -for __name in __all__: - if not __name.startswith("__"): +__module_name = __name__ +for __export_name in __all__: + if not __export_name.startswith("__"): try: - __locals[__name].__module__ = "profound" + __locals[__export_name].__module__ = __module_name except (TypeError, AttributeError): - # Some of our exported symbols are builtins which we can't set attributes for. pass diff --git a/src/profound/_base_client.py b/src/_base_client.py similarity index 92% rename from src/profound/_base_client.py rename to src/_base_client.py index c478365e..654de9df 100644 --- a/src/profound/_base_client.py +++ b/src/_base_client.py @@ -13,6 +13,7 @@ import email.utils from types import TracebackType from random import random +from dataclasses import field, dataclass from typing import ( TYPE_CHECKING, Any, @@ -63,7 +64,7 @@ ) from ._utils import is_dict, is_list, asyncify, is_given, lru_cache, is_mapping from ._compat import PYDANTIC_V1, model_copy, model_dump -from ._models import GenericModel, FinalRequestOptions, validate_type, construct_type +from ._models import GenericModel, SecurityOptions, FinalRequestOptions, validate_type, construct_type from ._response import ( APIResponse, BaseAPIResponse, @@ -115,10 +116,38 @@ HTTPX_DEFAULT_TIMEOUT = Timeout(5.0) +@dataclass +class CursorPageConfig: + """Per-operation cursor pagination descriptor baked into a page by the generated list method. + + The Python view of the shared, language-neutral descriptor: where the items array lives, how to + read the next cursor, which request param carries it, and on which carrier (query vs body). + Driving extraction from this config — rather than typed `items`/`next_cursor` model fields — lets + one page class serve every cursor scheme, including `cursor_id` (cursor read from the last item) + and body-carried cursors. + """ + + # Body path to the items array (e.g. ["items"], ["data"]). + items_path: List[str] = field(default_factory=list) + # "field" (a top-level response field) or "item" (a field on the last item — `cursor_id`). + cursor_kind: str = "field" + # Path to the cursor value: from the body root when cursor_kind is "field", or from the last item. + cursor_path: List[str] = field(default_factory=list) + # Request param wire name that carries the cursor. + cursor_param: str = "cursor" + # "query" or "body": the carrier the cursor param rides on the next request. + cursor_location: str = "query" + # Keep paginating across an empty page when set. + continue_on_empty_items: bool = False + # Body path to the scheme's `has_more` boolean. Only an explicit False stops pagination; + # a missing or non-boolean value falls back to cursor-presence semantics. + has_more_path: List[str] = field(default_factory=list) + + class PageInfo: """Stores the necessary information to build the request to retrieve the next page. - Either `url` or `params` must be set. + Exactly one of `url`, `params` (query carrier), or `json` (body carrier) must be set. """ url: URL | NotGiven @@ -180,6 +209,10 @@ class BasePage(GenericModel, Generic[_T]): _options: FinalRequestOptions = PrivateAttr() _model: Type[_T] = PrivateAttr() + # Per-operation cursor descriptor; set by the paginated method via _set_private_attributes and + # carried forward across pages so every page extracts items/cursor identically. None for pages + # that predate metadata-driven pagination. + _cursor_config: Optional[CursorPageConfig] = PrivateAttr(None) def has_next_page(self) -> bool: items = self._get_page_items() @@ -235,6 +268,7 @@ def _set_private_attributes( client: SyncAPIClient, model: Type[_T], options: FinalRequestOptions, + cursor_config: Optional[CursorPageConfig] = None, ) -> None: if (not PYDANTIC_V1) and getattr(self, "__pydantic_private__", None) is None: self.__pydantic_private__ = {} @@ -242,6 +276,7 @@ def _set_private_attributes( self._model = model self._client = client self._options = options + self._cursor_config = cursor_config # Pydantic uses a custom `__iter__` method to support casting BaseModels # to dictionaries. e.g. dict(model). @@ -273,7 +308,10 @@ def get_next_page(self: SyncPageT) -> SyncPageT: ) options = self._info_to_options(info) - return self._client._request_api_list(self._model, page=self.__class__, options=options) + # Carry the cursor descriptor forward so the next page extracts items/cursor identically. + return self._client._request_api_list( + self._model, page=self.__class__, options=options, cursor_config=self._cursor_config + ) class AsyncPaginator(Generic[_T, AsyncPageT]): @@ -283,11 +321,13 @@ def __init__( options: FinalRequestOptions, page_cls: Type[AsyncPageT], model: Type[_T], + cursor_config: Optional[CursorPageConfig] = None, ) -> None: self._model = model self._client = client self._options = options self._page_cls = page_cls + self._cursor_config = cursor_config def __await__(self) -> Generator[Any, None, AsyncPageT]: return self._get_page().__await__() @@ -298,6 +338,7 @@ def _parser(resp: AsyncPageT) -> AsyncPageT: model=self._model, options=self._options, client=self._client, + cursor_config=self._cursor_config, ) return resp @@ -323,6 +364,7 @@ def _set_private_attributes( model: Type[_T], client: AsyncAPIClient, options: FinalRequestOptions, + cursor_config: Optional[CursorPageConfig] = None, ) -> None: if (not PYDANTIC_V1) and getattr(self, "__pydantic_private__", None) is None: self.__pydantic_private__ = {} @@ -330,6 +372,7 @@ def _set_private_attributes( self._model = model self._client = client self._options = options + self._cursor_config = cursor_config async def __aiter__(self) -> AsyncIterator[_T]: async for page in self.iter_pages(): @@ -353,7 +396,10 @@ async def get_next_page(self: AsyncPageT) -> AsyncPageT: ) options = self._info_to_options(info) - return await self._client._request_api_list(self._model, page=self.__class__, options=options) + # Carry the cursor descriptor forward so the next page extracts items/cursor identically. + return await self._client._request_api_list( + self._model, page=self.__class__, options=options, cursor_config=self._cursor_config + ) _HttpxClientT = TypeVar("_HttpxClientT", bound=Union[httpx.Client, httpx.AsyncClient]) @@ -432,10 +478,41 @@ def _make_status_error( ) -> _exceptions.APIStatusError: raise NotImplementedError() - def _build_headers(self, options: FinalRequestOptions, *, retries_taken: int = 0) -> httpx.Headers: + def _auth_headers( + self, + security: SecurityOptions, # noqa: ARG002 + ) -> dict[str, str]: + return {} + + def _auth_query( + self, + security: SecurityOptions, # noqa: ARG002 + ) -> dict[str, str]: + return {} + + def _auth_cookies( + self, + security: SecurityOptions, # noqa: ARG002 + ) -> dict[str, str]: + return {} + + def _custom_auth( + self, + security: SecurityOptions, # noqa: ARG002 + ) -> httpx.Auth | None: + return None + + def _build_headers( + self, + options: FinalRequestOptions, + *, + params: Query, + cookies: Mapping[str, str], + retries_taken: int = 0, + ) -> httpx.Headers: custom_headers = options.headers or {} - headers_dict = _merge_mappings(self.default_headers, custom_headers) - self._validate_headers(headers_dict, custom_headers) + headers_dict = _merge_mappings({**self._auth_headers(options.security), **self.default_headers}, custom_headers) + self._validate_headers(headers_dict, custom_headers, params, cookies) # headers are case-insensitive while dictionaries are not. headers = httpx.Headers(headers_dict) @@ -447,14 +524,14 @@ def _build_headers(self, options: FinalRequestOptions, *, retries_taken: int = 0 # Don't set these headers if they were already set or removed by the caller. We check # `custom_headers`, which can contain `Omit()`, instead of `headers` to account for the removal case. lower_custom_headers = [header.lower() for header in custom_headers] - if "x-stainless-retry-count" not in lower_custom_headers: - headers["x-stainless-retry-count"] = str(retries_taken) - if "x-stainless-read-timeout" not in lower_custom_headers: + if "x-scalar-retry-count" not in lower_custom_headers: + headers["x-scalar-retry-count"] = str(retries_taken) + if "x-scalar-read-timeout" not in lower_custom_headers: timeout = self.timeout if isinstance(options.timeout, NotGiven) else options.timeout if isinstance(timeout, Timeout): timeout = timeout.read if timeout is not None: - headers["x-stainless-read-timeout"] = str(timeout) + headers["x-scalar-read-timeout"] = str(timeout) return headers @@ -505,8 +582,9 @@ def _build_request( else: raise RuntimeError(f"Unexpected JSON data type, {type(json_data)}, cannot merge with `extra_body`") - headers = self._build_headers(options, retries_taken=retries_taken) - params = _merge_mappings(self.default_query, options.params) + params = _merge_mappings({**self._auth_query(options.security), **self.default_query}, options.params) + cookies = self._auth_cookies(options.security) + headers = self._build_headers(options, retries_taken=retries_taken, params=params, cookies=cookies) content_type = headers.get("Content-Type") files = options.files @@ -579,6 +657,7 @@ def _build_request( # so that passing a `TypedDict` doesn't cause an error. # https://github.com/microsoft/pyright/issues/3526#event-6715453066 params=self.qs.stringify(cast(Mapping[str, Any], params)) if params else None, + cookies=cookies or None, **kwargs, ) @@ -675,7 +754,6 @@ def default_headers(self) -> dict[str, str | Omit]: "Content-Type": "application/json", "User-Agent": self.user_agent, **self.platform_headers(), - **self.auth_headers, **self._custom_headers, } @@ -689,8 +767,10 @@ def _validate_headers( self, headers: Headers, # noqa: ARG002 custom_headers: Headers, # noqa: ARG002 + params: Query, # noqa: ARG002 + cookies: Mapping[str, str], # noqa: ARG002 ) -> None: - """Validate the given default headers and custom headers. + """Validate merged auth-bearing headers, query params, and cookies. Does nothing by default. """ @@ -808,7 +888,7 @@ def _should_retry(self, response: httpx.Response) -> bool: return False def _idempotency_key(self) -> str: - return f"stainless-python-retry-{uuid.uuid4()}" + return f"scalar-python-retry-{uuid.uuid4()}" class _DefaultHttpxClient(httpx.Client): @@ -857,6 +937,7 @@ def __init__( custom_headers: Mapping[str, str] | None = None, custom_query: Mapping[str, object] | None = None, _strict_response_validation: bool, + **kwargs: Any, ) -> None: if not is_given(timeout): # if the user passed in a custom http client with a non-default @@ -890,6 +971,8 @@ def __init__( base_url=base_url, # cast to a valid type because mypy doesn't understand our type narrowing timeout=cast(Timeout, timeout), + # Used by generated `with_options(_extra_kwargs=...)` for HTTPX client configuration. + **kwargs, ) def is_closed(self) -> bool: @@ -994,8 +1077,9 @@ def request( self._prepare_request(request) kwargs: HttpxSendArgs = {} - if self.custom_auth is not None: - kwargs["auth"] = self.custom_auth + custom_auth = self._custom_auth(options.security) + if custom_auth is not None: + kwargs["auth"] = custom_auth if options.follow_redirects is not None: kwargs["follow_redirects"] = options.follow_redirects @@ -1155,12 +1239,14 @@ def _request_api_list( model: Type[object], page: Type[SyncPageT], options: FinalRequestOptions, + cursor_config: Optional[CursorPageConfig] = None, ) -> SyncPageT: def _parser(resp: SyncPageT) -> SyncPageT: resp._set_private_attributes( client=self, model=model, options=options, + cursor_config=cursor_config, ) return resp @@ -1365,9 +1451,10 @@ def get_api_list( body: Body | None = None, options: RequestOptions = {}, method: str = "get", + cursor_config: Optional[CursorPageConfig] = None, ) -> SyncPageT: opts = FinalRequestOptions.construct(method=method, url=path, json_data=body, **options) - return self._request_api_list(model, page, opts) + return self._request_api_list(model, page, opts, cursor_config=cursor_config) class _DefaultAsyncHttpxClient(httpx.AsyncClient): @@ -1439,6 +1526,7 @@ def __init__( http_client: httpx.AsyncClient | None = None, custom_headers: Mapping[str, str] | None = None, custom_query: Mapping[str, object] | None = None, + **kwargs: Any, ) -> None: if not is_given(timeout): # if the user passed in a custom http client with a non-default @@ -1472,6 +1560,8 @@ def __init__( base_url=base_url, # cast to a valid type because mypy doesn't understand our type narrowing timeout=cast(Timeout, timeout), + # Used by generated `with_options(_extra_kwargs=...)` for HTTPX client configuration. + **kwargs, ) def is_closed(self) -> bool: @@ -1739,8 +1829,11 @@ def _request_api_list( model: Type[_T], page: Type[AsyncPageT], options: FinalRequestOptions, + cursor_config: Optional[CursorPageConfig] = None, ) -> AsyncPaginator[_T, AsyncPageT]: - return AsyncPaginator(client=self, options=options, page_cls=page, model=model) + return AsyncPaginator( + client=self, options=options, page_cls=page, model=model, cursor_config=cursor_config + ) @overload async def get( @@ -1942,9 +2035,10 @@ def get_api_list( body: Body | None = None, options: RequestOptions = {}, method: str = "get", + cursor_config: Optional[CursorPageConfig] = None, ) -> AsyncPaginator[_T, AsyncPageT]: opts = FinalRequestOptions.construct(method=method, url=path, json_data=body, **options) - return self._request_api_list(model, page, opts) + return self._request_api_list(model, page, opts, cursor_config=cursor_config) def make_request_options( @@ -1956,6 +2050,7 @@ def make_request_options( idempotency_key: str | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, post_parser: PostParser | NotGiven = not_given, + security: SecurityOptions | None = None, ) -> RequestOptions: """Create a dict of type RequestOptions without keys of NotGiven values.""" options: RequestOptions = {} @@ -1981,6 +2076,9 @@ def make_request_options( # internal options["post_parser"] = post_parser # type: ignore + if security is not None: + options["security"] = security + return options @@ -2058,12 +2156,12 @@ def get_platform() -> Platform: @lru_cache(maxsize=None) def platform_headers(version: str, *, platform: Platform | None) -> Dict[str, str]: return { - "X-Stainless-Lang": "python", - "X-Stainless-Package-Version": version, - "X-Stainless-OS": str(platform or get_platform()), - "X-Stainless-Arch": str(get_architecture()), - "X-Stainless-Runtime": get_python_runtime(), - "X-Stainless-Runtime-Version": get_python_version(), + "X-Scalar-Lang": "python", + "X-Scalar-Package-Version": version, + "X-Scalar-OS": str(platform or get_platform()), + "X-Scalar-Arch": str(get_architecture()), + "X-Scalar-Runtime": get_python_runtime(), + "X-Scalar-Runtime-Version": get_python_version(), } diff --git a/src/profound/_client.py b/src/_client.py similarity index 58% rename from src/profound/_client.py rename to src/_client.py index f9d83750..f40b6e03 100644 --- a/src/profound/_client.py +++ b/src/_client.py @@ -1,10 +1,11 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from __future__ import annotations import os -from typing import TYPE_CHECKING, Any, Dict, Mapping, cast -from typing_extensions import Self, Literal, override +import threading +from typing import TYPE_CHECKING, Any, Mapping +from typing_extensions import Literal, Self, override import httpx @@ -20,76 +21,54 @@ RequestOptions, not_given, ) -from ._utils import ( - is_given, - is_mapping_t, - get_async_library, -) +from ._utils import is_given, is_mapping_t, get_async_library from ._compat import cached_property -from ._version import __version__ -from ._streaming import Stream as Stream, AsyncStream as AsyncStream from ._exceptions import APIStatusError from ._base_client import ( DEFAULT_MAX_RETRIES, SyncAPIClient, AsyncAPIClient, ) +from ._streaming import Stream as Stream, AsyncStream as AsyncStream +from ._version import __version__ if TYPE_CHECKING: - from .resources import ( - ads, - agents, - content, - prompts, - reports, - projects, - documents, - integrations, - organizations, - knowledge_bases, - ) - from .resources.ads.ads import AdsResource, AsyncAdsResource + from .resources import organization, prompts, reports, content, knowledge_bases, agents, organizations + from .resources.organization import OrganizationResource, AsyncOrganizationResource from .resources.prompts import PromptsResource, AsyncPromptsResource - from .resources.documents import DocumentsResource, AsyncDocumentsResource - from .resources.integrations import IntegrationsResource, AsyncIntegrationsResource - from .resources.agents.agents import AgentsResource, AsyncAgentsResource - from .resources.content.content import ContentResource, AsyncContentResource - from .resources.reports.reports import ReportsResource, AsyncReportsResource - from .resources.projects.projects import ProjectsResource, AsyncProjectsResource - from .resources.organizations.organizations import OrganizationsResource, AsyncOrganizationsResource - from .resources.knowledge_bases.knowledge_bases import KnowledgeBasesResource, AsyncKnowledgeBasesResource - -__all__ = [ - "ENVIRONMENTS", - "Timeout", - "Transport", - "ProxiesTypes", - "RequestOptions", - "Profound", - "AsyncProfound", - "Client", - "AsyncClient", -] - -ENVIRONMENTS: Dict[str, str] = { + from .resources.reports import ReportsResource, AsyncReportsResource + from .resources.content import ContentResource, AsyncContentResource + from .resources.knowledge_bases import KnowledgeBasesResource, AsyncKnowledgeBasesResource + from .resources.agents import AgentsResource, AsyncAgentsResource + from .resources.organizations import OrganizationsResource, AsyncOrganizationsResource + +# Serializes lazy resource imports so concurrent cold access from multiple +# threads cannot deadlock on CPython import locks (see CPython 3.14). +_RESOURCE_IMPORT_LOCK = threading.RLock() + +ENVIRONMENTS: dict[str, str] = { "production": "https://api.tryprofound.com", - "development": "https://dev.api.tryprofound.com", + "production_server": "https://api.tryprofound.com", } +__all__ = ["ENVIRONMENTS", "Profound", "AsyncProfound", "Client", "AsyncClient", "Timeout", "Transport", "ProxiesTypes", "RequestOptions"] + class Profound(SyncAPIClient): # client options + api_key_header: str | None + bearer_auth: str | None access_token: str | None api_key: str | None - _environment: Literal["production", "development"] | NotGiven - def __init__( self, *, + api_key_header: str | None = None, + bearer_auth: str | None = None, access_token: str | None = None, api_key: str | None = None, - environment: Literal["production", "development"] | NotGiven = not_given, + environment: Literal["production", "production_server"] | NotGiven = not_given, base_url: str | httpx.URL | None | NotGiven = not_given, timeout: float | Timeout | None | NotGiven = not_given, max_retries: int = DEFAULT_MAX_RETRIES, @@ -112,29 +91,35 @@ def __init__( """Construct a new synchronous Profound client instance. This automatically infers the following arguments from their corresponding environment variables if they are not provided: + - `api_key_header` from `API_KEY_HEADER` + - `bearer_auth` from `BEARER_AUTH` - `access_token` from `PROFOUND_ACCESS_TOKEN` - `api_key` from `PROFOUND_API_KEY` """ + if api_key_header is None: + api_key_header = os.environ.get("API_KEY_HEADER") + self.api_key_header = api_key_header + if bearer_auth is None: + bearer_auth = os.environ.get("BEARER_AUTH") + self.bearer_auth = bearer_auth if access_token is None: access_token = os.environ.get("PROFOUND_ACCESS_TOKEN") self.access_token = access_token - if api_key is None: api_key = os.environ.get("PROFOUND_API_KEY") self.api_key = api_key - self._environment = environment - base_url_env = os.environ.get("PROFOUND_BASE_URL") if is_given(base_url) and base_url is not None: - # cast required because mypy doesn't understand the type narrowing - base_url = cast("str | httpx.URL", base_url) # pyright: ignore[reportUnnecessaryCast] + if is_given(environment): + raise ValueError( + "Ambiguous URL; the `base_url` and `environment` arguments are both set. Pass `base_url=None` to use the environment.", + ) elif is_given(environment): if base_url_env and base_url is not None: raise ValueError( - "Ambiguous URL; The `PROFOUND_BASE_URL` env var and the `environment` argument are given. If you want to use the environment, you must pass base_url=None", + "Ambiguous URL; the base URL environment variable and the `environment` argument are both set. Pass base_url=None to use the environment.", ) - try: base_url = ENVIRONMENTS[environment] except KeyError as exc: @@ -143,12 +128,10 @@ def __init__( base_url = base_url_env else: self._environment = environment = "production" - try: base_url = ENVIRONMENTS[environment] except KeyError as exc: raise ValueError(f"Unknown environment: {environment}") from exc - custom_headers_env = os.environ.get("PROFOUND_CUSTOM_HEADERS") if custom_headers_env is not None: parsed: dict[str, str] = {} @@ -157,7 +140,6 @@ def __init__( if colon >= 0: parsed[line[:colon].strip()] = line[colon + 1 :].strip() default_headers = {**parsed, **(default_headers if is_mapping_t(default_headers) else {})} - super().__init__( version=__version__, base_url=base_url, @@ -168,66 +150,50 @@ def __init__( custom_query=default_query, _strict_response_validation=_strict_response_validation, ) + self._idempotency_header = "Idempotency-Key" + self._default_stream_cls = Stream @cached_property - def organizations(self) -> OrganizationsResource: - from .resources.organizations import OrganizationsResource - - return OrganizationsResource(self) + def organization(self) -> "OrganizationResource": + with _RESOURCE_IMPORT_LOCK: + from .resources.organization import OrganizationResource + return OrganizationResource(self) @cached_property - def prompts(self) -> PromptsResource: - from .resources.prompts import PromptsResource - + def prompts(self) -> "PromptsResource": + with _RESOURCE_IMPORT_LOCK: + from .resources.prompts import PromptsResource return PromptsResource(self) @cached_property - def reports(self) -> ReportsResource: - from .resources.reports import ReportsResource - + def reports(self) -> "ReportsResource": + with _RESOURCE_IMPORT_LOCK: + from .resources.reports import ReportsResource return ReportsResource(self) @cached_property - def content(self) -> ContentResource: - from .resources.content import ContentResource - + def content(self) -> "ContentResource": + with _RESOURCE_IMPORT_LOCK: + from .resources.content import ContentResource return ContentResource(self) @cached_property - def agents(self) -> AgentsResource: - from .resources.agents import AgentsResource - - return AgentsResource(self) - - @cached_property - def knowledge_bases(self) -> KnowledgeBasesResource: - from .resources.knowledge_bases import KnowledgeBasesResource - + def knowledge_bases(self) -> "KnowledgeBasesResource": + with _RESOURCE_IMPORT_LOCK: + from .resources.knowledge_bases import KnowledgeBasesResource return KnowledgeBasesResource(self) @cached_property - def projects(self) -> ProjectsResource: - from .resources.projects import ProjectsResource - - return ProjectsResource(self) - - @cached_property - def integrations(self) -> IntegrationsResource: - from .resources.integrations import IntegrationsResource - - return IntegrationsResource(self) - - @cached_property - def documents(self) -> DocumentsResource: - from .resources.documents import DocumentsResource - - return DocumentsResource(self) + def agents(self) -> "AgentsResource": + with _RESOURCE_IMPORT_LOCK: + from .resources.agents import AgentsResource + return AgentsResource(self) @cached_property - def ads(self) -> AdsResource: - from .resources.ads import AdsResource - - return AdsResource(self) + def organizations(self) -> "OrganizationsResource": + with _RESOURCE_IMPORT_LOCK: + from .resources.organizations import OrganizationsResource + return OrganizationsResource(self) @cached_property def with_raw_response(self) -> ProfoundWithRawResponse: @@ -242,52 +208,93 @@ def with_streaming_response(self) -> ProfoundWithStreamedResponse: def qs(self) -> Querystring: return Querystring(array_format="repeat") - @property @override - def auth_headers(self) -> dict[str, str]: - return {**self._bearer_auth, **self._api_key_header} + def _auth_headers(self, security: dict[str, bool]) -> dict[str, str]: + _ = security + return { + **self._api_key_header_header_auth, + **self._bearer_auth_header_auth, + **self._access_token_header_auth, + **self._api_key_header_auth, + } + + @override + def _auth_query(self, security: dict[str, bool]) -> dict[str, str]: + _ = security + return { + } + + @override + def _auth_cookies(self, security: dict[str, bool]) -> dict[str, str]: + _ = security + return { + } @property - def _bearer_auth(self) -> dict[str, str]: - access_token = self.access_token - if access_token is None: + def _api_key_header_header_auth(self) -> dict[str, str]: + value = self.api_key_header + if value is None: return {} - return {"Authorization": f"Bearer {access_token}"} + return {"X-API-Key": value} @property - def _api_key_header(self) -> dict[str, str]: - api_key = self.api_key - if api_key is None: + def _bearer_auth_header_auth(self) -> dict[str, str]: + value = self.bearer_auth + if value is None: return {} - return {"X-API-Key": api_key} + return {"Authorization": f"Bearer {value}"} + + @property + def _access_token_header_auth(self) -> dict[str, str]: + value = self.access_token + if value is None: + return {} + return {"Authorization": f"Bearer {value}"} + + @property + def _api_key_header_auth(self) -> dict[str, str]: + value = self.api_key + if value is None: + return {} + return {"X-API-Key": value} + @property @override def default_headers(self) -> dict[str, str | Omit]: return { **super().default_headers, - "X-Stainless-Async": "false", + "X-Scalar-Async": "false", **self._custom_headers, } @override - def _validate_headers(self, headers: Headers, custom_headers: Headers) -> None: - if headers.get("Authorization") or isinstance(custom_headers.get("Authorization"), Omit): + def _validate_headers( + self, + headers: Headers, + custom_headers: Headers, + params: Mapping[str, object], + cookies: Mapping[str, str], + ) -> None: + if headers.get("X-API-Key"): return - - if headers.get("X-API-Key") or isinstance(custom_headers.get("X-API-Key"), Omit): + if isinstance(custom_headers.get("X-API-Key"), Omit): + return + if headers.get("Authorization"): return + if isinstance(custom_headers.get("Authorization"), Omit): + return + raise TypeError("Could not resolve authentication method. Expected X-API-Key or Authorization to be set.") - raise TypeError( - '"Could not resolve authentication method. Expected either access_token or api_key to be set. Or for one of the `Authorization` or `X-API-Key` headers to be explicitly omitted"' - ) def copy( self, *, + api_key_header: str | None = None, + bearer_auth: str | None = None, access_token: str | None = None, api_key: str | None = None, - environment: Literal["production", "development"] | None = None, + environment: str | None = None, base_url: str | httpx.URL | None = None, timeout: float | Timeout | None | NotGiven = not_given, http_client: httpx.Client | None = None, @@ -298,74 +305,60 @@ def copy( set_default_query: Mapping[str, object] | None = None, _extra_kwargs: Mapping[str, Any] = {}, ) -> Self: - """ - Create a new client instance re-using the same options given to the current client with optional overriding. - """ + """Create a new client reusing this client's options with optional overrides.""" if default_headers is not None and set_default_headers is not None: raise ValueError("The `default_headers` and `set_default_headers` arguments are mutually exclusive") - if default_query is not None and set_default_query is not None: raise ValueError("The `default_query` and `set_default_query` arguments are mutually exclusive") - headers = self._custom_headers if default_headers is not None: headers = {**headers, **default_headers} elif set_default_headers is not None: headers = set_default_headers - params = self._custom_query if default_query is not None: params = {**params, **default_query} elif set_default_query is not None: params = set_default_query - http_client = http_client or self._client + copied_base_url = base_url if base_url is not None else self.base_url + # Environment overrides must resolve their own URL instead of reusing this client's host. + if environment is not None and base_url is None: + copied_base_url = None return self.__class__( + api_key_header=api_key_header or self.api_key_header, + bearer_auth=bearer_auth or self.bearer_auth, access_token=access_token or self.access_token, api_key=api_key or self.api_key, - base_url=base_url or self.base_url, - environment=environment or self._environment, + environment=environment if environment is not None else self._environment, + base_url=copied_base_url, timeout=self.timeout if isinstance(timeout, NotGiven) else timeout, http_client=http_client, max_retries=max_retries if is_given(max_retries) else self.max_retries, default_headers=headers, default_query=params, + _strict_response_validation=self._strict_response_validation, **_extra_kwargs, ) - # Alias for `copy` for nicer inline usage, e.g. - # client.with_options(timeout=10).foo.create(...) with_options = copy @override - def _make_status_error( - self, - err_msg: str, - *, - body: object, - response: httpx.Response, - ) -> APIStatusError: + def _make_status_error(self, err_msg: str, *, body: object, response: httpx.Response) -> APIStatusError: if response.status_code == 400: return _exceptions.BadRequestError(err_msg, response=response, body=body) - if response.status_code == 401: return _exceptions.AuthenticationError(err_msg, response=response, body=body) - if response.status_code == 403: return _exceptions.PermissionDeniedError(err_msg, response=response, body=body) - if response.status_code == 404: return _exceptions.NotFoundError(err_msg, response=response, body=body) - if response.status_code == 409: return _exceptions.ConflictError(err_msg, response=response, body=body) - if response.status_code == 422: return _exceptions.UnprocessableEntityError(err_msg, response=response, body=body) - if response.status_code == 429: return _exceptions.RateLimitError(err_msg, response=response, body=body) - if response.status_code >= 500: return _exceptions.InternalServerError(err_msg, response=response, body=body) return APIStatusError(err_msg, response=response, body=body) @@ -373,17 +366,19 @@ def _make_status_error( class AsyncProfound(AsyncAPIClient): # client options + api_key_header: str | None + bearer_auth: str | None access_token: str | None api_key: str | None - _environment: Literal["production", "development"] | NotGiven - def __init__( self, *, + api_key_header: str | None = None, + bearer_auth: str | None = None, access_token: str | None = None, api_key: str | None = None, - environment: Literal["production", "development"] | NotGiven = not_given, + environment: Literal["production", "production_server"] | NotGiven = not_given, base_url: str | httpx.URL | None | NotGiven = not_given, timeout: float | Timeout | None | NotGiven = not_given, max_retries: int = DEFAULT_MAX_RETRIES, @@ -406,29 +401,35 @@ def __init__( """Construct a new async AsyncProfound client instance. This automatically infers the following arguments from their corresponding environment variables if they are not provided: + - `api_key_header` from `API_KEY_HEADER` + - `bearer_auth` from `BEARER_AUTH` - `access_token` from `PROFOUND_ACCESS_TOKEN` - `api_key` from `PROFOUND_API_KEY` """ + if api_key_header is None: + api_key_header = os.environ.get("API_KEY_HEADER") + self.api_key_header = api_key_header + if bearer_auth is None: + bearer_auth = os.environ.get("BEARER_AUTH") + self.bearer_auth = bearer_auth if access_token is None: access_token = os.environ.get("PROFOUND_ACCESS_TOKEN") self.access_token = access_token - if api_key is None: api_key = os.environ.get("PROFOUND_API_KEY") self.api_key = api_key - self._environment = environment - base_url_env = os.environ.get("PROFOUND_BASE_URL") if is_given(base_url) and base_url is not None: - # cast required because mypy doesn't understand the type narrowing - base_url = cast("str | httpx.URL", base_url) # pyright: ignore[reportUnnecessaryCast] + if is_given(environment): + raise ValueError( + "Ambiguous URL; the `base_url` and `environment` arguments are both set. Pass `base_url=None` to use the environment.", + ) elif is_given(environment): if base_url_env and base_url is not None: raise ValueError( - "Ambiguous URL; The `PROFOUND_BASE_URL` env var and the `environment` argument are given. If you want to use the environment, you must pass base_url=None", + "Ambiguous URL; the base URL environment variable and the `environment` argument are both set. Pass base_url=None to use the environment.", ) - try: base_url = ENVIRONMENTS[environment] except KeyError as exc: @@ -437,12 +438,10 @@ def __init__( base_url = base_url_env else: self._environment = environment = "production" - try: base_url = ENVIRONMENTS[environment] except KeyError as exc: raise ValueError(f"Unknown environment: {environment}") from exc - custom_headers_env = os.environ.get("PROFOUND_CUSTOM_HEADERS") if custom_headers_env is not None: parsed: dict[str, str] = {} @@ -451,7 +450,6 @@ def __init__( if colon >= 0: parsed[line[:colon].strip()] = line[colon + 1 :].strip() default_headers = {**parsed, **(default_headers if is_mapping_t(default_headers) else {})} - super().__init__( version=__version__, base_url=base_url, @@ -462,66 +460,50 @@ def __init__( custom_query=default_query, _strict_response_validation=_strict_response_validation, ) + self._idempotency_header = "Idempotency-Key" + self._default_stream_cls = AsyncStream @cached_property - def organizations(self) -> AsyncOrganizationsResource: - from .resources.organizations import AsyncOrganizationsResource - - return AsyncOrganizationsResource(self) + def organization(self) -> "AsyncOrganizationResource": + with _RESOURCE_IMPORT_LOCK: + from .resources.organization import AsyncOrganizationResource + return AsyncOrganizationResource(self) @cached_property - def prompts(self) -> AsyncPromptsResource: - from .resources.prompts import AsyncPromptsResource - + def prompts(self) -> "AsyncPromptsResource": + with _RESOURCE_IMPORT_LOCK: + from .resources.prompts import AsyncPromptsResource return AsyncPromptsResource(self) @cached_property - def reports(self) -> AsyncReportsResource: - from .resources.reports import AsyncReportsResource - + def reports(self) -> "AsyncReportsResource": + with _RESOURCE_IMPORT_LOCK: + from .resources.reports import AsyncReportsResource return AsyncReportsResource(self) @cached_property - def content(self) -> AsyncContentResource: - from .resources.content import AsyncContentResource - + def content(self) -> "AsyncContentResource": + with _RESOURCE_IMPORT_LOCK: + from .resources.content import AsyncContentResource return AsyncContentResource(self) @cached_property - def agents(self) -> AsyncAgentsResource: - from .resources.agents import AsyncAgentsResource - - return AsyncAgentsResource(self) - - @cached_property - def knowledge_bases(self) -> AsyncKnowledgeBasesResource: - from .resources.knowledge_bases import AsyncKnowledgeBasesResource - + def knowledge_bases(self) -> "AsyncKnowledgeBasesResource": + with _RESOURCE_IMPORT_LOCK: + from .resources.knowledge_bases import AsyncKnowledgeBasesResource return AsyncKnowledgeBasesResource(self) @cached_property - def projects(self) -> AsyncProjectsResource: - from .resources.projects import AsyncProjectsResource - - return AsyncProjectsResource(self) - - @cached_property - def integrations(self) -> AsyncIntegrationsResource: - from .resources.integrations import AsyncIntegrationsResource - - return AsyncIntegrationsResource(self) - - @cached_property - def documents(self) -> AsyncDocumentsResource: - from .resources.documents import AsyncDocumentsResource - - return AsyncDocumentsResource(self) + def agents(self) -> "AsyncAgentsResource": + with _RESOURCE_IMPORT_LOCK: + from .resources.agents import AsyncAgentsResource + return AsyncAgentsResource(self) @cached_property - def ads(self) -> AsyncAdsResource: - from .resources.ads import AsyncAdsResource - - return AsyncAdsResource(self) + def organizations(self) -> "AsyncOrganizationsResource": + with _RESOURCE_IMPORT_LOCK: + from .resources.organizations import AsyncOrganizationsResource + return AsyncOrganizationsResource(self) @cached_property def with_raw_response(self) -> AsyncProfoundWithRawResponse: @@ -536,52 +518,93 @@ def with_streaming_response(self) -> AsyncProfoundWithStreamedResponse: def qs(self) -> Querystring: return Querystring(array_format="repeat") - @property @override - def auth_headers(self) -> dict[str, str]: - return {**self._bearer_auth, **self._api_key_header} + def _auth_headers(self, security: dict[str, bool]) -> dict[str, str]: + _ = security + return { + **self._api_key_header_header_auth, + **self._bearer_auth_header_auth, + **self._access_token_header_auth, + **self._api_key_header_auth, + } + + @override + def _auth_query(self, security: dict[str, bool]) -> dict[str, str]: + _ = security + return { + } + + @override + def _auth_cookies(self, security: dict[str, bool]) -> dict[str, str]: + _ = security + return { + } @property - def _bearer_auth(self) -> dict[str, str]: - access_token = self.access_token - if access_token is None: + def _api_key_header_header_auth(self) -> dict[str, str]: + value = self.api_key_header + if value is None: return {} - return {"Authorization": f"Bearer {access_token}"} + return {"X-API-Key": value} @property - def _api_key_header(self) -> dict[str, str]: - api_key = self.api_key - if api_key is None: + def _bearer_auth_header_auth(self) -> dict[str, str]: + value = self.bearer_auth + if value is None: return {} - return {"X-API-Key": api_key} + return {"Authorization": f"Bearer {value}"} + + @property + def _access_token_header_auth(self) -> dict[str, str]: + value = self.access_token + if value is None: + return {} + return {"Authorization": f"Bearer {value}"} + + @property + def _api_key_header_auth(self) -> dict[str, str]: + value = self.api_key + if value is None: + return {} + return {"X-API-Key": value} + @property @override def default_headers(self) -> dict[str, str | Omit]: return { **super().default_headers, - "X-Stainless-Async": f"async:{get_async_library()}", + "X-Scalar-Async": f"async:{get_async_library()}", **self._custom_headers, } @override - def _validate_headers(self, headers: Headers, custom_headers: Headers) -> None: - if headers.get("Authorization") or isinstance(custom_headers.get("Authorization"), Omit): + def _validate_headers( + self, + headers: Headers, + custom_headers: Headers, + params: Mapping[str, object], + cookies: Mapping[str, str], + ) -> None: + if headers.get("X-API-Key"): return - - if headers.get("X-API-Key") or isinstance(custom_headers.get("X-API-Key"), Omit): + if isinstance(custom_headers.get("X-API-Key"), Omit): return + if headers.get("Authorization"): + return + if isinstance(custom_headers.get("Authorization"), Omit): + return + raise TypeError("Could not resolve authentication method. Expected X-API-Key or Authorization to be set.") - raise TypeError( - '"Could not resolve authentication method. Expected either access_token or api_key to be set. Or for one of the `Authorization` or `X-API-Key` headers to be explicitly omitted"' - ) def copy( self, *, + api_key_header: str | None = None, + bearer_auth: str | None = None, access_token: str | None = None, api_key: str | None = None, - environment: Literal["production", "development"] | None = None, + environment: str | None = None, base_url: str | httpx.URL | None = None, timeout: float | Timeout | None | NotGiven = not_given, http_client: httpx.AsyncClient | None = None, @@ -592,74 +615,60 @@ def copy( set_default_query: Mapping[str, object] | None = None, _extra_kwargs: Mapping[str, Any] = {}, ) -> Self: - """ - Create a new client instance re-using the same options given to the current client with optional overriding. - """ + """Create a new client reusing this client's options with optional overrides.""" if default_headers is not None and set_default_headers is not None: raise ValueError("The `default_headers` and `set_default_headers` arguments are mutually exclusive") - if default_query is not None and set_default_query is not None: raise ValueError("The `default_query` and `set_default_query` arguments are mutually exclusive") - headers = self._custom_headers if default_headers is not None: headers = {**headers, **default_headers} elif set_default_headers is not None: headers = set_default_headers - params = self._custom_query if default_query is not None: params = {**params, **default_query} elif set_default_query is not None: params = set_default_query - http_client = http_client or self._client + copied_base_url = base_url if base_url is not None else self.base_url + # Environment overrides must resolve their own URL instead of reusing this client's host. + if environment is not None and base_url is None: + copied_base_url = None return self.__class__( + api_key_header=api_key_header or self.api_key_header, + bearer_auth=bearer_auth or self.bearer_auth, access_token=access_token or self.access_token, api_key=api_key or self.api_key, - base_url=base_url or self.base_url, - environment=environment or self._environment, + environment=environment if environment is not None else self._environment, + base_url=copied_base_url, timeout=self.timeout if isinstance(timeout, NotGiven) else timeout, http_client=http_client, max_retries=max_retries if is_given(max_retries) else self.max_retries, default_headers=headers, default_query=params, + _strict_response_validation=self._strict_response_validation, **_extra_kwargs, ) - # Alias for `copy` for nicer inline usage, e.g. - # client.with_options(timeout=10).foo.create(...) with_options = copy @override - def _make_status_error( - self, - err_msg: str, - *, - body: object, - response: httpx.Response, - ) -> APIStatusError: + def _make_status_error(self, err_msg: str, *, body: object, response: httpx.Response) -> APIStatusError: if response.status_code == 400: return _exceptions.BadRequestError(err_msg, response=response, body=body) - if response.status_code == 401: return _exceptions.AuthenticationError(err_msg, response=response, body=body) - if response.status_code == 403: return _exceptions.PermissionDeniedError(err_msg, response=response, body=body) - if response.status_code == 404: return _exceptions.NotFoundError(err_msg, response=response, body=body) - if response.status_code == 409: return _exceptions.ConflictError(err_msg, response=response, body=body) - if response.status_code == 422: return _exceptions.UnprocessableEntityError(err_msg, response=response, body=body) - if response.status_code == 429: return _exceptions.RateLimitError(err_msg, response=response, body=body) - if response.status_code >= 500: return _exceptions.InternalServerError(err_msg, response=response, body=body) return APIStatusError(err_msg, response=response, body=body) @@ -672,64 +681,46 @@ def __init__(self, client: Profound) -> None: self._client = client @cached_property - def organizations(self) -> organizations.OrganizationsResourceWithRawResponse: - from .resources.organizations import OrganizationsResourceWithRawResponse - - return OrganizationsResourceWithRawResponse(self._client.organizations) + def organization(self) -> organization.OrganizationResourceWithRawResponse: + with _RESOURCE_IMPORT_LOCK: + from .resources.organization import OrganizationResourceWithRawResponse + return OrganizationResourceWithRawResponse(self._client.organization) @cached_property def prompts(self) -> prompts.PromptsResourceWithRawResponse: - from .resources.prompts import PromptsResourceWithRawResponse - + with _RESOURCE_IMPORT_LOCK: + from .resources.prompts import PromptsResourceWithRawResponse return PromptsResourceWithRawResponse(self._client.prompts) @cached_property def reports(self) -> reports.ReportsResourceWithRawResponse: - from .resources.reports import ReportsResourceWithRawResponse - + with _RESOURCE_IMPORT_LOCK: + from .resources.reports import ReportsResourceWithRawResponse return ReportsResourceWithRawResponse(self._client.reports) @cached_property def content(self) -> content.ContentResourceWithRawResponse: - from .resources.content import ContentResourceWithRawResponse - + with _RESOURCE_IMPORT_LOCK: + from .resources.content import ContentResourceWithRawResponse return ContentResourceWithRawResponse(self._client.content) - @cached_property - def agents(self) -> agents.AgentsResourceWithRawResponse: - from .resources.agents import AgentsResourceWithRawResponse - - return AgentsResourceWithRawResponse(self._client.agents) - @cached_property def knowledge_bases(self) -> knowledge_bases.KnowledgeBasesResourceWithRawResponse: - from .resources.knowledge_bases import KnowledgeBasesResourceWithRawResponse - + with _RESOURCE_IMPORT_LOCK: + from .resources.knowledge_bases import KnowledgeBasesResourceWithRawResponse return KnowledgeBasesResourceWithRawResponse(self._client.knowledge_bases) @cached_property - def projects(self) -> projects.ProjectsResourceWithRawResponse: - from .resources.projects import ProjectsResourceWithRawResponse - - return ProjectsResourceWithRawResponse(self._client.projects) - - @cached_property - def integrations(self) -> integrations.IntegrationsResourceWithRawResponse: - from .resources.integrations import IntegrationsResourceWithRawResponse - - return IntegrationsResourceWithRawResponse(self._client.integrations) - - @cached_property - def documents(self) -> documents.DocumentsResourceWithRawResponse: - from .resources.documents import DocumentsResourceWithRawResponse - - return DocumentsResourceWithRawResponse(self._client.documents) + def agents(self) -> agents.AgentsResourceWithRawResponse: + with _RESOURCE_IMPORT_LOCK: + from .resources.agents import AgentsResourceWithRawResponse + return AgentsResourceWithRawResponse(self._client.agents) @cached_property - def ads(self) -> ads.AdsResourceWithRawResponse: - from .resources.ads import AdsResourceWithRawResponse - - return AdsResourceWithRawResponse(self._client.ads) + def organizations(self) -> organizations.OrganizationsResourceWithRawResponse: + with _RESOURCE_IMPORT_LOCK: + from .resources.organizations import OrganizationsResourceWithRawResponse + return OrganizationsResourceWithRawResponse(self._client.organizations) class AsyncProfoundWithRawResponse: @@ -739,64 +730,46 @@ def __init__(self, client: AsyncProfound) -> None: self._client = client @cached_property - def organizations(self) -> organizations.AsyncOrganizationsResourceWithRawResponse: - from .resources.organizations import AsyncOrganizationsResourceWithRawResponse - - return AsyncOrganizationsResourceWithRawResponse(self._client.organizations) + def organization(self) -> organization.AsyncOrganizationResourceWithRawResponse: + with _RESOURCE_IMPORT_LOCK: + from .resources.organization import AsyncOrganizationResourceWithRawResponse + return AsyncOrganizationResourceWithRawResponse(self._client.organization) @cached_property def prompts(self) -> prompts.AsyncPromptsResourceWithRawResponse: - from .resources.prompts import AsyncPromptsResourceWithRawResponse - + with _RESOURCE_IMPORT_LOCK: + from .resources.prompts import AsyncPromptsResourceWithRawResponse return AsyncPromptsResourceWithRawResponse(self._client.prompts) @cached_property def reports(self) -> reports.AsyncReportsResourceWithRawResponse: - from .resources.reports import AsyncReportsResourceWithRawResponse - + with _RESOURCE_IMPORT_LOCK: + from .resources.reports import AsyncReportsResourceWithRawResponse return AsyncReportsResourceWithRawResponse(self._client.reports) @cached_property def content(self) -> content.AsyncContentResourceWithRawResponse: - from .resources.content import AsyncContentResourceWithRawResponse - + with _RESOURCE_IMPORT_LOCK: + from .resources.content import AsyncContentResourceWithRawResponse return AsyncContentResourceWithRawResponse(self._client.content) - @cached_property - def agents(self) -> agents.AsyncAgentsResourceWithRawResponse: - from .resources.agents import AsyncAgentsResourceWithRawResponse - - return AsyncAgentsResourceWithRawResponse(self._client.agents) - @cached_property def knowledge_bases(self) -> knowledge_bases.AsyncKnowledgeBasesResourceWithRawResponse: - from .resources.knowledge_bases import AsyncKnowledgeBasesResourceWithRawResponse - + with _RESOURCE_IMPORT_LOCK: + from .resources.knowledge_bases import AsyncKnowledgeBasesResourceWithRawResponse return AsyncKnowledgeBasesResourceWithRawResponse(self._client.knowledge_bases) @cached_property - def projects(self) -> projects.AsyncProjectsResourceWithRawResponse: - from .resources.projects import AsyncProjectsResourceWithRawResponse - - return AsyncProjectsResourceWithRawResponse(self._client.projects) - - @cached_property - def integrations(self) -> integrations.AsyncIntegrationsResourceWithRawResponse: - from .resources.integrations import AsyncIntegrationsResourceWithRawResponse - - return AsyncIntegrationsResourceWithRawResponse(self._client.integrations) - - @cached_property - def documents(self) -> documents.AsyncDocumentsResourceWithRawResponse: - from .resources.documents import AsyncDocumentsResourceWithRawResponse - - return AsyncDocumentsResourceWithRawResponse(self._client.documents) + def agents(self) -> agents.AsyncAgentsResourceWithRawResponse: + with _RESOURCE_IMPORT_LOCK: + from .resources.agents import AsyncAgentsResourceWithRawResponse + return AsyncAgentsResourceWithRawResponse(self._client.agents) @cached_property - def ads(self) -> ads.AsyncAdsResourceWithRawResponse: - from .resources.ads import AsyncAdsResourceWithRawResponse - - return AsyncAdsResourceWithRawResponse(self._client.ads) + def organizations(self) -> organizations.AsyncOrganizationsResourceWithRawResponse: + with _RESOURCE_IMPORT_LOCK: + from .resources.organizations import AsyncOrganizationsResourceWithRawResponse + return AsyncOrganizationsResourceWithRawResponse(self._client.organizations) class ProfoundWithStreamedResponse: @@ -806,64 +779,46 @@ def __init__(self, client: Profound) -> None: self._client = client @cached_property - def organizations(self) -> organizations.OrganizationsResourceWithStreamingResponse: - from .resources.organizations import OrganizationsResourceWithStreamingResponse - - return OrganizationsResourceWithStreamingResponse(self._client.organizations) + def organization(self) -> organization.OrganizationResourceWithStreamingResponse: + with _RESOURCE_IMPORT_LOCK: + from .resources.organization import OrganizationResourceWithStreamingResponse + return OrganizationResourceWithStreamingResponse(self._client.organization) @cached_property def prompts(self) -> prompts.PromptsResourceWithStreamingResponse: - from .resources.prompts import PromptsResourceWithStreamingResponse - + with _RESOURCE_IMPORT_LOCK: + from .resources.prompts import PromptsResourceWithStreamingResponse return PromptsResourceWithStreamingResponse(self._client.prompts) @cached_property def reports(self) -> reports.ReportsResourceWithStreamingResponse: - from .resources.reports import ReportsResourceWithStreamingResponse - + with _RESOURCE_IMPORT_LOCK: + from .resources.reports import ReportsResourceWithStreamingResponse return ReportsResourceWithStreamingResponse(self._client.reports) @cached_property def content(self) -> content.ContentResourceWithStreamingResponse: - from .resources.content import ContentResourceWithStreamingResponse - + with _RESOURCE_IMPORT_LOCK: + from .resources.content import ContentResourceWithStreamingResponse return ContentResourceWithStreamingResponse(self._client.content) - @cached_property - def agents(self) -> agents.AgentsResourceWithStreamingResponse: - from .resources.agents import AgentsResourceWithStreamingResponse - - return AgentsResourceWithStreamingResponse(self._client.agents) - @cached_property def knowledge_bases(self) -> knowledge_bases.KnowledgeBasesResourceWithStreamingResponse: - from .resources.knowledge_bases import KnowledgeBasesResourceWithStreamingResponse - + with _RESOURCE_IMPORT_LOCK: + from .resources.knowledge_bases import KnowledgeBasesResourceWithStreamingResponse return KnowledgeBasesResourceWithStreamingResponse(self._client.knowledge_bases) @cached_property - def projects(self) -> projects.ProjectsResourceWithStreamingResponse: - from .resources.projects import ProjectsResourceWithStreamingResponse - - return ProjectsResourceWithStreamingResponse(self._client.projects) - - @cached_property - def integrations(self) -> integrations.IntegrationsResourceWithStreamingResponse: - from .resources.integrations import IntegrationsResourceWithStreamingResponse - - return IntegrationsResourceWithStreamingResponse(self._client.integrations) - - @cached_property - def documents(self) -> documents.DocumentsResourceWithStreamingResponse: - from .resources.documents import DocumentsResourceWithStreamingResponse - - return DocumentsResourceWithStreamingResponse(self._client.documents) + def agents(self) -> agents.AgentsResourceWithStreamingResponse: + with _RESOURCE_IMPORT_LOCK: + from .resources.agents import AgentsResourceWithStreamingResponse + return AgentsResourceWithStreamingResponse(self._client.agents) @cached_property - def ads(self) -> ads.AdsResourceWithStreamingResponse: - from .resources.ads import AdsResourceWithStreamingResponse - - return AdsResourceWithStreamingResponse(self._client.ads) + def organizations(self) -> organizations.OrganizationsResourceWithStreamingResponse: + with _RESOURCE_IMPORT_LOCK: + from .resources.organizations import OrganizationsResourceWithStreamingResponse + return OrganizationsResourceWithStreamingResponse(self._client.organizations) class AsyncProfoundWithStreamedResponse: @@ -873,66 +828,48 @@ def __init__(self, client: AsyncProfound) -> None: self._client = client @cached_property - def organizations(self) -> organizations.AsyncOrganizationsResourceWithStreamingResponse: - from .resources.organizations import AsyncOrganizationsResourceWithStreamingResponse - - return AsyncOrganizationsResourceWithStreamingResponse(self._client.organizations) + def organization(self) -> organization.AsyncOrganizationResourceWithStreamingResponse: + with _RESOURCE_IMPORT_LOCK: + from .resources.organization import AsyncOrganizationResourceWithStreamingResponse + return AsyncOrganizationResourceWithStreamingResponse(self._client.organization) @cached_property def prompts(self) -> prompts.AsyncPromptsResourceWithStreamingResponse: - from .resources.prompts import AsyncPromptsResourceWithStreamingResponse - + with _RESOURCE_IMPORT_LOCK: + from .resources.prompts import AsyncPromptsResourceWithStreamingResponse return AsyncPromptsResourceWithStreamingResponse(self._client.prompts) @cached_property def reports(self) -> reports.AsyncReportsResourceWithStreamingResponse: - from .resources.reports import AsyncReportsResourceWithStreamingResponse - + with _RESOURCE_IMPORT_LOCK: + from .resources.reports import AsyncReportsResourceWithStreamingResponse return AsyncReportsResourceWithStreamingResponse(self._client.reports) @cached_property def content(self) -> content.AsyncContentResourceWithStreamingResponse: - from .resources.content import AsyncContentResourceWithStreamingResponse - + with _RESOURCE_IMPORT_LOCK: + from .resources.content import AsyncContentResourceWithStreamingResponse return AsyncContentResourceWithStreamingResponse(self._client.content) - @cached_property - def agents(self) -> agents.AsyncAgentsResourceWithStreamingResponse: - from .resources.agents import AsyncAgentsResourceWithStreamingResponse - - return AsyncAgentsResourceWithStreamingResponse(self._client.agents) - @cached_property def knowledge_bases(self) -> knowledge_bases.AsyncKnowledgeBasesResourceWithStreamingResponse: - from .resources.knowledge_bases import AsyncKnowledgeBasesResourceWithStreamingResponse - + with _RESOURCE_IMPORT_LOCK: + from .resources.knowledge_bases import AsyncKnowledgeBasesResourceWithStreamingResponse return AsyncKnowledgeBasesResourceWithStreamingResponse(self._client.knowledge_bases) @cached_property - def projects(self) -> projects.AsyncProjectsResourceWithStreamingResponse: - from .resources.projects import AsyncProjectsResourceWithStreamingResponse - - return AsyncProjectsResourceWithStreamingResponse(self._client.projects) - - @cached_property - def integrations(self) -> integrations.AsyncIntegrationsResourceWithStreamingResponse: - from .resources.integrations import AsyncIntegrationsResourceWithStreamingResponse - - return AsyncIntegrationsResourceWithStreamingResponse(self._client.integrations) - - @cached_property - def documents(self) -> documents.AsyncDocumentsResourceWithStreamingResponse: - from .resources.documents import AsyncDocumentsResourceWithStreamingResponse - - return AsyncDocumentsResourceWithStreamingResponse(self._client.documents) + def agents(self) -> agents.AsyncAgentsResourceWithStreamingResponse: + with _RESOURCE_IMPORT_LOCK: + from .resources.agents import AsyncAgentsResourceWithStreamingResponse + return AsyncAgentsResourceWithStreamingResponse(self._client.agents) @cached_property - def ads(self) -> ads.AsyncAdsResourceWithStreamingResponse: - from .resources.ads import AsyncAdsResourceWithStreamingResponse - - return AsyncAdsResourceWithStreamingResponse(self._client.ads) + def organizations(self) -> organizations.AsyncOrganizationsResourceWithStreamingResponse: + with _RESOURCE_IMPORT_LOCK: + from .resources.organizations import AsyncOrganizationsResourceWithStreamingResponse + return AsyncOrganizationsResourceWithStreamingResponse(self._client.organizations) +# Alias names for the documented `Client` / `AsyncClient` symbols. Client = Profound - AsyncClient = AsyncProfound diff --git a/src/profound/_compat.py b/src/_compat.py similarity index 100% rename from src/profound/_compat.py rename to src/_compat.py diff --git a/src/profound/_constants.py b/src/_constants.py similarity index 58% rename from src/profound/_constants.py rename to src/_constants.py index 6ddf2c71..969d075e 100644 --- a/src/profound/_constants.py +++ b/src/_constants.py @@ -1,9 +1,9 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See CONTRIBUTING.md for details. import httpx -RAW_RESPONSE_HEADER = "X-Stainless-Raw-Response" -OVERRIDE_CAST_TO_HEADER = "____stainless_override_cast_to" +RAW_RESPONSE_HEADER = "X-Scalar-Raw-Response" +OVERRIDE_CAST_TO_HEADER = "____scalar_override_cast_to" # default timeout is 1 minute DEFAULT_TIMEOUT = httpx.Timeout(timeout=60, connect=5.0) diff --git a/src/_event_handler.py b/src/_event_handler.py new file mode 100644 index 00000000..d84a24dc --- /dev/null +++ b/src/_event_handler.py @@ -0,0 +1,85 @@ +# File generated from our OpenAPI spec by Scalar. See CONTRIBUTING.md for details. + +from __future__ import annotations + +import threading +from typing import Any, Callable + +EventHandler = Callable[..., Any] + + +class EventHandlerRegistry: + """Thread-safe (optional) registry of event handlers.""" + + def __init__(self, *, use_lock: bool = False) -> None: + self._handlers: dict[str, list[EventHandler]] = {} + self._once_ids: set[int] = set() + self._lock: threading.Lock | None = threading.Lock() if use_lock else None + + def _acquire(self) -> None: + if self._lock is not None: + self._lock.acquire() + + def _release(self) -> None: + if self._lock is not None: + self._lock.release() + + def add(self, event_type: str, handler: EventHandler, *, once: bool = False) -> None: + self._acquire() + try: + handlers = self._handlers.setdefault(event_type, []) + handlers.append(handler) + if once: + self._once_ids.add(id(handler)) + finally: + self._release() + + def remove(self, event_type: str, handler: EventHandler) -> None: + self._acquire() + try: + handlers = self._handlers.get(event_type) + if handlers is not None: + try: + handlers.remove(handler) + except ValueError: + pass + self._once_ids.discard(id(handler)) + finally: + self._release() + + def get_handlers(self, event_type: str) -> list[EventHandler]: + """Return a snapshot of handlers for the given event type, removing once-handlers.""" + self._acquire() + try: + handlers = self._handlers.get(event_type) + if not handlers: + return [] + result = list(handlers) + to_remove = [h for h in result if id(h) in self._once_ids] + for h in to_remove: + handlers.remove(h) + self._once_ids.discard(id(h)) + return result + finally: + self._release() + + def has_handlers(self, event_type: str) -> bool: + self._acquire() + try: + handlers = self._handlers.get(event_type) + return bool(handlers) + finally: + self._release() + + def merge_into(self, target: EventHandlerRegistry) -> None: + """Move all handlers from this registry into *target*, then clear self.""" + self._acquire() + try: + for event_type, handlers in self._handlers.items(): + for handler in handlers: + once = id(handler) in self._once_ids + target.add(event_type, handler, once=once) + self._handlers.clear() + self._once_ids.clear() + finally: + self._release() diff --git a/src/profound/_exceptions.py b/src/_exceptions.py similarity index 83% rename from src/profound/_exceptions.py rename to src/_exceptions.py index 3238336a..f2b9865c 100644 --- a/src/profound/_exceptions.py +++ b/src/_exceptions.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See CONTRIBUTING.md for details. from __future__ import annotations @@ -15,6 +15,8 @@ "UnprocessableEntityError", "RateLimitError", "InternalServerError", + "WebSocketConnectionClosedError", + "WebSocketQueueFullError", ] @@ -106,3 +108,19 @@ class RateLimitError(APIStatusError): class InternalServerError(APIStatusError): pass + + +class WebSocketConnectionClosedError(ProfoundError): + """Raised when a WebSocket connection closes with unsent messages.""" + + unsent_messages: list[str] + + def __init__(self, message: str, *, unsent_messages: list[str]) -> None: + super().__init__(message) + self.unsent_messages = unsent_messages + + +class WebSocketQueueFullError(ProfoundError): + """Raised when the outgoing WebSocket message queue exceeds its byte-size limit.""" + + pass diff --git a/src/profound/_files.py b/src/_files.py similarity index 100% rename from src/profound/_files.py rename to src/_files.py diff --git a/src/profound/_models.py b/src/_models.py similarity index 99% rename from src/profound/_models.py rename to src/_models.py index 8c5ab260..ce728eb7 100644 --- a/src/profound/_models.py +++ b/src/_models.py @@ -871,6 +871,11 @@ def _create_pydantic_model(type_: _T) -> Type[RootModel[_T]]: return RootModel[type_] # type: ignore +class SecurityOptions(TypedDict, total=False): + api_key_auth: bool + bearer_auth: bool + + class FinalRequestOptionsInput(TypedDict, total=False): method: Required[str] url: Required[str] @@ -884,6 +889,7 @@ class FinalRequestOptionsInput(TypedDict, total=False): json_data: Body extra_json: AnyMapping follow_redirects: bool + security: SecurityOptions @final @@ -898,6 +904,10 @@ class FinalRequestOptions(pydantic.BaseModel): idempotency_key: Union[str, None] = None post_parser: Union[Callable[[Any], Any], NotGiven] = NotGiven() follow_redirects: Union[bool, None] = None + security: SecurityOptions = { + "api_key_auth": True, + "bearer_auth": True, + } content: Union[bytes, bytearray, IO[bytes], Iterable[bytes], AsyncIterable[bytes], None] = None # It should be noted that we cannot use `json` here as that would override diff --git a/src/profound/_qs.py b/src/_qs.py similarity index 100% rename from src/profound/_qs.py rename to src/_qs.py diff --git a/src/profound/_resource.py b/src/_resource.py similarity index 92% rename from src/profound/_resource.py rename to src/_resource.py index ef52893c..1e7ed469 100644 --- a/src/profound/_resource.py +++ b/src/_resource.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See CONTRIBUTING.md for details. from __future__ import annotations diff --git a/src/profound/_response.py b/src/_response.py similarity index 98% rename from src/profound/_response.py rename to src/_response.py index 8700122c..e9123c5a 100644 --- a/src/profound/_response.py +++ b/src/_response.py @@ -25,7 +25,14 @@ import pydantic from ._types import NoneType -from ._utils import is_given, extract_type_arg, is_annotated_type, is_type_alias_type, extract_type_var_from_base +from ._utils import ( + is_given, + is_union_type, + extract_type_arg, + is_annotated_type, + is_type_alias_type, + extract_type_var_from_base, +) from ._models import BaseModel, is_basemodel from ._constants import RAW_RESPONSE_HEADER, OVERRIDE_CAST_TO_HEADER from ._streaming import Stream, AsyncStream, is_stream_class_type, extract_stream_chunk_type @@ -181,7 +188,7 @@ def _parse(self, *, to: type[_T] | None = None) -> R | _T: ), ) - if cast_to is NoneType: + if cast_to is None or cast_to is NoneType: return cast(R, None) response = self.http_response @@ -220,14 +227,16 @@ def _parse(self, *, to: type[_T] | None = None) -> R | _T: and not issubclass(origin, BaseModel) and issubclass(origin, pydantic.BaseModel) ): - raise TypeError("Pydantic models must subclass our base model type, e.g. `from profound import BaseModel`") + raise TypeError( + "Pydantic models must subclass our base model type, e.g. `from profound import BaseModel`" + ) if ( cast_to is not object and not origin is list and not origin is dict - and not origin is Union - and not issubclass(origin, BaseModel) + and not is_union_type(cast_to) + and not (inspect.isclass(origin) and issubclass(origin, BaseModel)) ): raise RuntimeError( f"Unsupported type, expected {cast_to} to be a subclass of {BaseModel}, {dict}, {list}, {Union}, {NoneType}, {str} or {httpx.Response}." diff --git a/src/_send_queue.py b/src/_send_queue.py new file mode 100644 index 00000000..3140d45b --- /dev/null +++ b/src/_send_queue.py @@ -0,0 +1,90 @@ +# File generated from our OpenAPI spec by Scalar. See CONTRIBUTING.md for details. + +from __future__ import annotations + +import typing +import threading + +from ._exceptions import WebSocketQueueFullError + + +class SendQueue: + """Bounded byte-size queue for outgoing WebSocket messages. + + Messages are stored as pre-serialized strings. The queue enforces a + maximum byte budget so that unbounded buffering cannot occur during + reconnection windows. + """ + + def __init__(self, max_bytes: int = 1_048_576) -> None: + self._queue: list[tuple[str, int]] = [] # (data, byte_length) + self._bytes: int = 0 + self._max_bytes = max_bytes + self._lock = threading.Lock() + + def enqueue(self, data: str) -> None: + """Append *data* to the queue. + + Raises :class:`WebSocketQueueFullError` if the message would + exceed the byte-size limit. + """ + byte_length = len(data.encode("utf-8")) + with self._lock: + if self._bytes + byte_length > self._max_bytes: + raise WebSocketQueueFullError("send queue is full, message discarded") + self._queue.append((data, byte_length)) + self._bytes += byte_length + + def flush_sync(self, send: typing.Callable[[str], object]) -> None: + """Send every queued message via *send*. + + If *send* raises, the failing message and all subsequent messages + are re-queued and the error is re-raised. + """ + with self._lock: + pending = list(self._queue) + self._queue.clear() + self._bytes = 0 + + for i, (data, _byte_length) in enumerate(pending): + try: + send(data) + except Exception: + with self._lock: + remaining = pending[i:] + self._queue = remaining + self._queue + self._bytes = sum(bl for _, bl in self._queue) + raise + + async def flush_async(self, send: typing.Callable[[str], typing.Awaitable[object]]) -> None: + """Async variant of :meth:`flush_sync`.""" + with self._lock: + pending = list(self._queue) + self._queue.clear() + self._bytes = 0 + + for i, (data, _byte_length) in enumerate(pending): + try: + await send(data) + except Exception: + with self._lock: + remaining = pending[i:] + self._queue = remaining + self._queue + self._bytes = sum(bl for _, bl in self._queue) + raise + + def drain(self) -> list[str]: + """Remove and return all queued messages.""" + with self._lock: + items = [data for data, _ in self._queue] + self._queue.clear() + self._bytes = 0 + return items + + def __len__(self) -> int: + with self._lock: + return len(self._queue) + + def __bool__(self) -> bool: + with self._lock: + return len(self._queue) > 0 diff --git a/src/profound/_streaming.py b/src/_streaming.py similarity index 78% rename from src/profound/_streaming.py rename to src/_streaming.py index 3d9cc4b0..91039f42 100644 --- a/src/profound/_streaming.py +++ b/src/_streaming.py @@ -56,10 +56,41 @@ def __stream__(self) -> Iterator[_T]: response = self.response process_data = self._client._process_response_data iterator = self._iter_events() + content_type = (response.headers.get("content-type") or "").lower() + is_jsonl = "json" in content_type and "event-stream" not in content_type try: + if is_jsonl: + # Newline-delimited JSON (`application/jsonl`, + # `application/x-jsonl`, etc.) has no SSE framing, so the + # `_decoder.iter_bytes` path above would never yield. We + # parse each non-empty line as one event so callers can + # iterate without caring whether the wire format is SSE + # or JSONL. + buffer = b"" + for chunk in response.iter_bytes(): + if not chunk: + continue + buffer += chunk + while b"\n" in buffer: + line, buffer = buffer.split(b"\n", 1) + text = line.decode("utf-8").strip() + if not text: + continue + yield process_data(data=json.loads(text), cast_to=cast_to, response=response) + tail = buffer.decode("utf-8").strip() + if tail: + yield process_data(data=json.loads(tail), cast_to=cast_to, response=response) + return + for sse in iterator: - yield process_data(data=sse.json(), cast_to=cast_to, response=response) + if not sse.data: + continue + try: + payload = sse.json() + except Exception: + payload = sse.data + yield process_data(data=payload, cast_to=cast_to, response=response) finally: # Ensure the response is closed even if the consumer doesn't read all data response.close() @@ -122,10 +153,36 @@ async def __stream__(self) -> AsyncIterator[_T]: response = self.response process_data = self._client._process_response_data iterator = self._iter_events() + content_type = (response.headers.get("content-type") or "").lower() + is_jsonl = "json" in content_type and "event-stream" not in content_type try: + if is_jsonl: + # See the sync sibling for why JSONL gets its own branch. + buffer = b"" + async for chunk in response.aiter_bytes(): + if not chunk: + continue + buffer += chunk + while b"\n" in buffer: + line, buffer = buffer.split(b"\n", 1) + text = line.decode("utf-8").strip() + if not text: + continue + yield process_data(data=json.loads(text), cast_to=cast_to, response=response) + tail = buffer.decode("utf-8").strip() + if tail: + yield process_data(data=json.loads(tail), cast_to=cast_to, response=response) + return + async for sse in iterator: - yield process_data(data=sse.json(), cast_to=cast_to, response=response) + if not sse.data: + continue + try: + payload = sse.json() + except Exception: + payload = sse.data + yield process_data(data=payload, cast_to=cast_to, response=response) finally: # Ensure the response is closed even if the consumer doesn't read all data await response.aclose() diff --git a/src/profound/_types.py b/src/_types.py similarity index 98% rename from src/profound/_types.py rename to src/_types.py index 5e11da8f..f8673670 100644 --- a/src/profound/_types.py +++ b/src/_types.py @@ -36,7 +36,7 @@ from httpx import URL, Proxy, Timeout, Response, BaseTransport, AsyncBaseTransport if TYPE_CHECKING: - from ._models import BaseModel + from ._models import BaseModel, SecurityOptions from ._response import APIResponse, AsyncAPIResponse Transport = BaseTransport @@ -124,6 +124,7 @@ class RequestOptions(TypedDict, total=False): extra_json: AnyMapping idempotency_key: str follow_redirects: bool + security: SecurityOptions # Sentinel class used until PEP 0661 is accepted diff --git a/src/profound/_utils/__init__.py b/src/_utils/__init__.py similarity index 100% rename from src/profound/_utils/__init__.py rename to src/_utils/__init__.py diff --git a/src/profound/_utils/_compat.py b/src/_utils/_compat.py similarity index 100% rename from src/profound/_utils/_compat.py rename to src/_utils/_compat.py diff --git a/src/profound/_utils/_datetime_parse.py b/src/_utils/_datetime_parse.py similarity index 100% rename from src/profound/_utils/_datetime_parse.py rename to src/_utils/_datetime_parse.py diff --git a/src/profound/_utils/_json.py b/src/_utils/_json.py similarity index 100% rename from src/profound/_utils/_json.py rename to src/_utils/_json.py diff --git a/src/profound/_utils/_logs.py b/src/_utils/_logs.py similarity index 100% rename from src/profound/_utils/_logs.py rename to src/_utils/_logs.py diff --git a/src/profound/_utils/_path.py b/src/_utils/_path.py similarity index 100% rename from src/profound/_utils/_path.py rename to src/_utils/_path.py diff --git a/src/profound/_utils/_proxy.py b/src/_utils/_proxy.py similarity index 100% rename from src/profound/_utils/_proxy.py rename to src/_utils/_proxy.py diff --git a/src/profound/_utils/_reflection.py b/src/_utils/_reflection.py similarity index 100% rename from src/profound/_utils/_reflection.py rename to src/_utils/_reflection.py diff --git a/src/profound/_utils/_resources_proxy.py b/src/_utils/_resources_proxy.py similarity index 100% rename from src/profound/_utils/_resources_proxy.py rename to src/_utils/_resources_proxy.py diff --git a/src/profound/_utils/_streams.py b/src/_utils/_streams.py similarity index 100% rename from src/profound/_utils/_streams.py rename to src/_utils/_streams.py diff --git a/src/profound/_utils/_sync.py b/src/_utils/_sync.py similarity index 100% rename from src/profound/_utils/_sync.py rename to src/_utils/_sync.py diff --git a/src/profound/_utils/_transform.py b/src/_utils/_transform.py similarity index 100% rename from src/profound/_utils/_transform.py rename to src/_utils/_transform.py diff --git a/src/profound/_utils/_typing.py b/src/_utils/_typing.py similarity index 100% rename from src/profound/_utils/_typing.py rename to src/_utils/_typing.py diff --git a/src/profound/_utils/_utils.py b/src/_utils/_utils.py similarity index 99% rename from src/profound/_utils/_utils.py rename to src/_utils/_utils.py index 199cd231..8b051e25 100644 --- a/src/profound/_utils/_utils.py +++ b/src/_utils/_utils.py @@ -389,7 +389,7 @@ def get_required_header(headers: HeadersLike, header: str) -> str: if k.lower() == lower_header and isinstance(v, str): return v - # to deal with the case where the header looks like Stainless-Event-Id + # to deal with the case where the header looks like Scalar-Event-Id intercaps_header = re.sub(r"([^\w])(\w)", lambda pat: pat.group(1) + pat.group(2).upper(), header.capitalize()) for normalized_header in [header, lower_header, header.upper(), intercaps_header]: diff --git a/src/_version.py b/src/_version.py new file mode 100644 index 00000000..c906e793 --- /dev/null +++ b/src/_version.py @@ -0,0 +1,4 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +__title__ = "profound" +__version__ = "0.3.0" diff --git a/src/profound/_version.py b/src/profound/_version.py deleted file mode 100644 index ecf47868..00000000 --- a/src/profound/_version.py +++ /dev/null @@ -1,4 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -__title__ = "profound" -__version__ = "0.57.0" # x-release-please-version diff --git a/src/profound/lib/.keep b/src/profound/lib/.keep deleted file mode 100644 index 5e2c99fd..00000000 --- a/src/profound/lib/.keep +++ /dev/null @@ -1,4 +0,0 @@ -File generated from our OpenAPI spec by Stainless. - -This directory can be used to store custom files to expand the SDK. -It is ignored by Stainless code generation and its content (other than this keep file) won't be touched. \ No newline at end of file diff --git a/src/profound/resources/ads/__init__.py b/src/profound/resources/ads/__init__.py deleted file mode 100644 index d1321761..00000000 --- a/src/profound/resources/ads/__init__.py +++ /dev/null @@ -1,33 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from .ads import ( - AdsResource, - AsyncAdsResource, - AdsResourceWithRawResponse, - AsyncAdsResourceWithRawResponse, - AdsResourceWithStreamingResponse, - AsyncAdsResourceWithStreamingResponse, -) -from .openai_ads import ( - OpenAIAdsResource, - AsyncOpenAIAdsResource, - OpenAIAdsResourceWithRawResponse, - AsyncOpenAIAdsResourceWithRawResponse, - OpenAIAdsResourceWithStreamingResponse, - AsyncOpenAIAdsResourceWithStreamingResponse, -) - -__all__ = [ - "OpenAIAdsResource", - "AsyncOpenAIAdsResource", - "OpenAIAdsResourceWithRawResponse", - "AsyncOpenAIAdsResourceWithRawResponse", - "OpenAIAdsResourceWithStreamingResponse", - "AsyncOpenAIAdsResourceWithStreamingResponse", - "AdsResource", - "AsyncAdsResource", - "AdsResourceWithRawResponse", - "AsyncAdsResourceWithRawResponse", - "AdsResourceWithStreamingResponse", - "AsyncAdsResourceWithStreamingResponse", -] diff --git a/src/profound/resources/ads/ads.py b/src/profound/resources/ads/ads.py deleted file mode 100644 index 70838705..00000000 --- a/src/profound/resources/ads/ads.py +++ /dev/null @@ -1,102 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from ..._compat import cached_property -from ..._resource import SyncAPIResource, AsyncAPIResource -from .openai_ads.openai_ads import ( - OpenAIAdsResource, - AsyncOpenAIAdsResource, - OpenAIAdsResourceWithRawResponse, - AsyncOpenAIAdsResourceWithRawResponse, - OpenAIAdsResourceWithStreamingResponse, - AsyncOpenAIAdsResourceWithStreamingResponse, -) - -__all__ = ["AdsResource", "AsyncAdsResource"] - - -class AdsResource(SyncAPIResource): - @cached_property - def openai_ads(self) -> OpenAIAdsResource: - return OpenAIAdsResource(self._client) - - @cached_property - def with_raw_response(self) -> AdsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return AdsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AdsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return AdsResourceWithStreamingResponse(self) - - -class AsyncAdsResource(AsyncAPIResource): - @cached_property - def openai_ads(self) -> AsyncOpenAIAdsResource: - return AsyncOpenAIAdsResource(self._client) - - @cached_property - def with_raw_response(self) -> AsyncAdsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return AsyncAdsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncAdsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return AsyncAdsResourceWithStreamingResponse(self) - - -class AdsResourceWithRawResponse: - def __init__(self, ads: AdsResource) -> None: - self._ads = ads - - @cached_property - def openai_ads(self) -> OpenAIAdsResourceWithRawResponse: - return OpenAIAdsResourceWithRawResponse(self._ads.openai_ads) - - -class AsyncAdsResourceWithRawResponse: - def __init__(self, ads: AsyncAdsResource) -> None: - self._ads = ads - - @cached_property - def openai_ads(self) -> AsyncOpenAIAdsResourceWithRawResponse: - return AsyncOpenAIAdsResourceWithRawResponse(self._ads.openai_ads) - - -class AdsResourceWithStreamingResponse: - def __init__(self, ads: AdsResource) -> None: - self._ads = ads - - @cached_property - def openai_ads(self) -> OpenAIAdsResourceWithStreamingResponse: - return OpenAIAdsResourceWithStreamingResponse(self._ads.openai_ads) - - -class AsyncAdsResourceWithStreamingResponse: - def __init__(self, ads: AsyncAdsResource) -> None: - self._ads = ads - - @cached_property - def openai_ads(self) -> AsyncOpenAIAdsResourceWithStreamingResponse: - return AsyncOpenAIAdsResourceWithStreamingResponse(self._ads.openai_ads) diff --git a/src/profound/resources/ads/openai_ads/__init__.py b/src/profound/resources/ads/openai_ads/__init__.py deleted file mode 100644 index 553f2b0c..00000000 --- a/src/profound/resources/ads/openai_ads/__init__.py +++ /dev/null @@ -1,33 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from .ad_account import ( - AdAccountResource, - AsyncAdAccountResource, - AdAccountResourceWithRawResponse, - AsyncAdAccountResourceWithRawResponse, - AdAccountResourceWithStreamingResponse, - AsyncAdAccountResourceWithStreamingResponse, -) -from .openai_ads import ( - OpenAIAdsResource, - AsyncOpenAIAdsResource, - OpenAIAdsResourceWithRawResponse, - AsyncOpenAIAdsResourceWithRawResponse, - OpenAIAdsResourceWithStreamingResponse, - AsyncOpenAIAdsResourceWithStreamingResponse, -) - -__all__ = [ - "AdAccountResource", - "AsyncAdAccountResource", - "AdAccountResourceWithRawResponse", - "AsyncAdAccountResourceWithRawResponse", - "AdAccountResourceWithStreamingResponse", - "AsyncAdAccountResourceWithStreamingResponse", - "OpenAIAdsResource", - "AsyncOpenAIAdsResource", - "OpenAIAdsResourceWithRawResponse", - "AsyncOpenAIAdsResourceWithRawResponse", - "OpenAIAdsResourceWithStreamingResponse", - "AsyncOpenAIAdsResourceWithStreamingResponse", -] diff --git a/src/profound/resources/ads/openai_ads/ad_account.py b/src/profound/resources/ads/openai_ads/ad_account.py deleted file mode 100644 index eaf8fb74..00000000 --- a/src/profound/resources/ads/openai_ads/ad_account.py +++ /dev/null @@ -1,244 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import Literal - -import httpx - -from ...._types import Body, Omit, Query, Headers, NotGiven, SequenceNotStr, omit, not_given -from ...._utils import maybe_transform, async_maybe_transform -from ...._compat import cached_property -from ...._resource import SyncAPIResource, AsyncAPIResource -from ...._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from ...._base_client import make_request_options -from ....types.ads.openai_ads import ad_account_retrieve_insights_params -from ....types.ads.openai_ads.ad_account_retrieve_insights_response import AdAccountRetrieveInsightsResponse - -__all__ = ["AdAccountResource", "AsyncAdAccountResource"] - - -class AdAccountResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> AdAccountResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return AdAccountResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AdAccountResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return AdAccountResourceWithStreamingResponse(self) - - def retrieve_insights( - self, - *, - after: Optional[str] | Omit = omit, - aggregation_level: Optional[Literal["ad_account", "campaign", "ad_group", "ad"]] | Omit = omit, - before: Optional[str] | Omit = omit, - limit: Optional[int] | Omit = omit, - organization_id: Optional[str] | Omit = omit, - time_granularity: Optional[Literal["hourly", "daily", "monthly", "none"]] | Omit = omit, - time_ranges: Optional[SequenceNotStr[str]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AdAccountRetrieveInsightsResponse: - """ - Get ad account insights for the organization's OpenAI Ads partner brand. - - `aggregation_level=campaign` returns one row per campaign (with `campaign_id` / - `campaign_name` and all metrics), so every campaign's insights come back in a - single call; `time_granularity=daily` gives per-day rows (e.g. daily spend). - - Args: - after: Return items after this ID (forward pagination). - - aggregation_level: Row entity for the insights breakdown. `campaign` returns one row per campaign. - - before: Return items before this ID (backward pagination). - - limit: Maximum rows to return. - - organization_id: Organization scope for API keys that can access multiple organizations. - - time_granularity: Time bucket for the rows; `none` or omitted returns totals over the whole range. - - time_ranges: Time ranges as JSON objects, e.g. - `{"type": "date_range", "since": "2026-07-01", "until": "2026-07-18"}`. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._get( - "/v1/ads/openai-ads/ad-account/insights", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "after": after, - "aggregation_level": aggregation_level, - "before": before, - "limit": limit, - "organization_id": organization_id, - "time_granularity": time_granularity, - "time_ranges": time_ranges, - }, - ad_account_retrieve_insights_params.AdAccountRetrieveInsightsParams, - ), - ), - cast_to=AdAccountRetrieveInsightsResponse, - ) - - -class AsyncAdAccountResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncAdAccountResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return AsyncAdAccountResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncAdAccountResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return AsyncAdAccountResourceWithStreamingResponse(self) - - async def retrieve_insights( - self, - *, - after: Optional[str] | Omit = omit, - aggregation_level: Optional[Literal["ad_account", "campaign", "ad_group", "ad"]] | Omit = omit, - before: Optional[str] | Omit = omit, - limit: Optional[int] | Omit = omit, - organization_id: Optional[str] | Omit = omit, - time_granularity: Optional[Literal["hourly", "daily", "monthly", "none"]] | Omit = omit, - time_ranges: Optional[SequenceNotStr[str]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AdAccountRetrieveInsightsResponse: - """ - Get ad account insights for the organization's OpenAI Ads partner brand. - - `aggregation_level=campaign` returns one row per campaign (with `campaign_id` / - `campaign_name` and all metrics), so every campaign's insights come back in a - single call; `time_granularity=daily` gives per-day rows (e.g. daily spend). - - Args: - after: Return items after this ID (forward pagination). - - aggregation_level: Row entity for the insights breakdown. `campaign` returns one row per campaign. - - before: Return items before this ID (backward pagination). - - limit: Maximum rows to return. - - organization_id: Organization scope for API keys that can access multiple organizations. - - time_granularity: Time bucket for the rows; `none` or omitted returns totals over the whole range. - - time_ranges: Time ranges as JSON objects, e.g. - `{"type": "date_range", "since": "2026-07-01", "until": "2026-07-18"}`. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._get( - "/v1/ads/openai-ads/ad-account/insights", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - { - "after": after, - "aggregation_level": aggregation_level, - "before": before, - "limit": limit, - "organization_id": organization_id, - "time_granularity": time_granularity, - "time_ranges": time_ranges, - }, - ad_account_retrieve_insights_params.AdAccountRetrieveInsightsParams, - ), - ), - cast_to=AdAccountRetrieveInsightsResponse, - ) - - -class AdAccountResourceWithRawResponse: - def __init__(self, ad_account: AdAccountResource) -> None: - self._ad_account = ad_account - - self.retrieve_insights = to_raw_response_wrapper( - ad_account.retrieve_insights, - ) - - -class AsyncAdAccountResourceWithRawResponse: - def __init__(self, ad_account: AsyncAdAccountResource) -> None: - self._ad_account = ad_account - - self.retrieve_insights = async_to_raw_response_wrapper( - ad_account.retrieve_insights, - ) - - -class AdAccountResourceWithStreamingResponse: - def __init__(self, ad_account: AdAccountResource) -> None: - self._ad_account = ad_account - - self.retrieve_insights = to_streamed_response_wrapper( - ad_account.retrieve_insights, - ) - - -class AsyncAdAccountResourceWithStreamingResponse: - def __init__(self, ad_account: AsyncAdAccountResource) -> None: - self._ad_account = ad_account - - self.retrieve_insights = async_to_streamed_response_wrapper( - ad_account.retrieve_insights, - ) diff --git a/src/profound/resources/ads/openai_ads/openai_ads.py b/src/profound/resources/ads/openai_ads/openai_ads.py deleted file mode 100644 index c964d5af..00000000 --- a/src/profound/resources/ads/openai_ads/openai_ads.py +++ /dev/null @@ -1,102 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from ...._compat import cached_property -from .ad_account import ( - AdAccountResource, - AsyncAdAccountResource, - AdAccountResourceWithRawResponse, - AsyncAdAccountResourceWithRawResponse, - AdAccountResourceWithStreamingResponse, - AsyncAdAccountResourceWithStreamingResponse, -) -from ...._resource import SyncAPIResource, AsyncAPIResource - -__all__ = ["OpenAIAdsResource", "AsyncOpenAIAdsResource"] - - -class OpenAIAdsResource(SyncAPIResource): - @cached_property - def ad_account(self) -> AdAccountResource: - return AdAccountResource(self._client) - - @cached_property - def with_raw_response(self) -> OpenAIAdsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return OpenAIAdsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> OpenAIAdsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return OpenAIAdsResourceWithStreamingResponse(self) - - -class AsyncOpenAIAdsResource(AsyncAPIResource): - @cached_property - def ad_account(self) -> AsyncAdAccountResource: - return AsyncAdAccountResource(self._client) - - @cached_property - def with_raw_response(self) -> AsyncOpenAIAdsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return AsyncOpenAIAdsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncOpenAIAdsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return AsyncOpenAIAdsResourceWithStreamingResponse(self) - - -class OpenAIAdsResourceWithRawResponse: - def __init__(self, openai_ads: OpenAIAdsResource) -> None: - self._openai_ads = openai_ads - - @cached_property - def ad_account(self) -> AdAccountResourceWithRawResponse: - return AdAccountResourceWithRawResponse(self._openai_ads.ad_account) - - -class AsyncOpenAIAdsResourceWithRawResponse: - def __init__(self, openai_ads: AsyncOpenAIAdsResource) -> None: - self._openai_ads = openai_ads - - @cached_property - def ad_account(self) -> AsyncAdAccountResourceWithRawResponse: - return AsyncAdAccountResourceWithRawResponse(self._openai_ads.ad_account) - - -class OpenAIAdsResourceWithStreamingResponse: - def __init__(self, openai_ads: OpenAIAdsResource) -> None: - self._openai_ads = openai_ads - - @cached_property - def ad_account(self) -> AdAccountResourceWithStreamingResponse: - return AdAccountResourceWithStreamingResponse(self._openai_ads.ad_account) - - -class AsyncOpenAIAdsResourceWithStreamingResponse: - def __init__(self, openai_ads: AsyncOpenAIAdsResource) -> None: - self._openai_ads = openai_ads - - @cached_property - def ad_account(self) -> AsyncAdAccountResourceWithStreamingResponse: - return AsyncAdAccountResourceWithStreamingResponse(self._openai_ads.ad_account) diff --git a/src/profound/resources/agents/agents.py b/src/profound/resources/agents/agents.py deleted file mode 100644 index db5e6b6f..00000000 --- a/src/profound/resources/agents/agents.py +++ /dev/null @@ -1,827 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Dict, List, Optional -from typing_extensions import Literal - -import httpx - -from .runs import ( - RunsResource, - AsyncRunsResource, - RunsResourceWithRawResponse, - AsyncRunsResourceWithRawResponse, - RunsResourceWithStreamingResponse, - AsyncRunsResourceWithStreamingResponse, -) -from ...types import ( - agent_list_params, - agent_create_params, - agent_update_params, - agent_retrieve_params, - agent_retrieve_graph_params, -) -from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from ..._utils import path_template, maybe_transform, async_maybe_transform -from ..._compat import cached_property -from .node_types import ( - NodeTypesResource, - AsyncNodeTypesResource, - NodeTypesResourceWithRawResponse, - AsyncNodeTypesResourceWithRawResponse, - NodeTypesResourceWithStreamingResponse, - AsyncNodeTypesResourceWithStreamingResponse, -) -from ..._resource import SyncAPIResource, AsyncAPIResource -from ..._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from ..._base_client import make_request_options -from ...types.agent_list_response import AgentListResponse -from ...types.agent_create_response import AgentCreateResponse -from ...types.agent_update_response import AgentUpdateResponse -from ...types.agent_publish_response import AgentPublishResponse -from ...types.agent_retrieve_response import AgentRetrieveResponse -from ...types.agent_retrieve_graph_response import AgentRetrieveGraphResponse - -__all__ = ["AgentsResource", "AsyncAgentsResource"] - - -class AgentsResource(SyncAPIResource): - @cached_property - def runs(self) -> RunsResource: - return RunsResource(self._client) - - @cached_property - def node_types(self) -> NodeTypesResource: - return NodeTypesResource(self._client) - - @cached_property - def with_raw_response(self) -> AgentsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return AgentsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AgentsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return AgentsResourceWithStreamingResponse(self) - - def create( - self, - *, - name: str, - organization_id: str, - description: Optional[str] | Omit = omit, - graph: Optional[Dict[str, object]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AgentCreateResponse: - """ - Create a new draft agent owned by the given organization. - - `organization_id` is required and you must be a member of it. The agent is - created as a `draft`; publish it with `POST /v1/agents/{agent_id}/publish` once - its graph is ready. - - Args: - name: Display name for the agent. Must be non-empty. - - organization_id: ID of the organization that will own the agent. Required — Profound API keys are - user-scoped, so the owning organization must be chosen explicitly. The caller - must be a member of this organization. - - description: Short description of the agent. - - graph: Initial workflow graph for the agent's draft version. Optional — an agent can be - created empty and have its graph filled in later. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v1/agents", - body=maybe_transform( - { - "name": name, - "organization_id": organization_id, - "description": description, - "graph": graph, - }, - agent_create_params.AgentCreateParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AgentCreateResponse, - ) - - def retrieve( - self, - agent_id: str, - *, - version: Literal["published", "draft"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AgentRetrieveResponse: - """ - Retrieve an agent and its schema details. - - Agents can have both a live published version and a draft version with newer - unpublished changes. Use the `version` parameter to choose which state to - return. - - Args: - agent_id: The ID of the agent to retrieve. - - version: Version of the agent to retrieve. Use `published` for the live version, or - `draft` for the latest unpublished changes for the same agent. Defaults to - `published`. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not agent_id: - raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") - return self._get( - path_template("/v1/agents/{agent_id}", agent_id=agent_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform({"version": version}, agent_retrieve_params.AgentRetrieveParams), - ), - cast_to=AgentRetrieveResponse, - ) - - def update( - self, - agent_id: str, - *, - graph: Dict[str, object], - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AgentUpdateResponse: - """ - Update an agent's draft graph in place. - - You must be a member of the agent's organization. The agent's draft is replaced - with the supplied graph and re-validated, so you can iterate one draft — create, - then update per fix — instead of creating a new agent on every change. The - response carries the updated `validation`; publish with - `POST /v1/agents/{agent_id}/publish` once `validation.valid`. - - Args: - agent_id: The ID of the agent to update. - - graph: New workflow graph for the agent's draft version. Replaces the current draft - graph; the agent is iterated in place rather than re-created, so its ID is - stable. Required — a null graph is rejected as a 422 here rather than as a - relayed upstream error. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not agent_id: - raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") - return self._patch( - path_template("/v1/agents/{agent_id}", agent_id=agent_id), - body=maybe_transform({"graph": graph}, agent_update_params.AgentUpdateParams), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AgentUpdateResponse, - ) - - def list( - self, - *, - limit: int | Omit = omit, - next_cursor: Optional[str] | Omit = omit, - statuses: Optional[List[Literal["published", "draft"]]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AgentListResponse: - """ - List agents available to your organization. - - Agent status reflects whether an agent has ever been published. `published` - agents have a live published version. `draft` agents have not been published - yet. - - Args: - statuses: Optional status filter. Use `published` to list agents that have a live - published version, or `draft` to list agents that have not been published yet. - Defaults to `published`. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._get( - "/v1/agents", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "limit": limit, - "next_cursor": next_cursor, - "statuses": statuses, - }, - agent_list_params.AgentListParams, - ), - ), - cast_to=AgentListResponse, - ) - - def publish( - self, - agent_id: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AgentPublishResponse: - """ - Publish an agent's latest draft as its live published version. - - You must be a member of the agent's organization. Publishing promotes the - current draft graph to a new published version. A draft that cannot produce its - declared input/output contract is rejected with `422` and is not published. - - Args: - agent_id: The ID of the agent to publish. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not agent_id: - raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") - return self._post( - path_template("/v1/agents/{agent_id}/publish", agent_id=agent_id), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AgentPublishResponse, - ) - - def retrieve_graph( - self, - agent_id: str, - *, - version: Literal["published", "draft"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AgentRetrieveGraphResponse: - """ - Retrieve an agent's full workflow graph (`{nodes, edges}`). - - The graph is returned verbatim in the canonical dialect — the same shape - `POST /v1/agents` and `PATCH /v1/agents/{agent_id}` accept — so a known-good - agent can be read back, copied, and edited. Tool-backed nodes appear in their - lowered `tool` form rather than the friendly v1 node types. A `draft` is visible - only to its creator; the `published` version is visible across its organization. - - Args: - agent_id: The ID of the agent whose graph to retrieve. - - version: Version of the agent whose graph to retrieve. Use `published` for the live - version, or `draft` for the latest unpublished changes. Defaults to `published`. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not agent_id: - raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") - return self._get( - path_template("/v1/agents/{agent_id}/graph", agent_id=agent_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform({"version": version}, agent_retrieve_graph_params.AgentRetrieveGraphParams), - ), - cast_to=AgentRetrieveGraphResponse, - ) - - -class AsyncAgentsResource(AsyncAPIResource): - @cached_property - def runs(self) -> AsyncRunsResource: - return AsyncRunsResource(self._client) - - @cached_property - def node_types(self) -> AsyncNodeTypesResource: - return AsyncNodeTypesResource(self._client) - - @cached_property - def with_raw_response(self) -> AsyncAgentsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return AsyncAgentsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncAgentsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return AsyncAgentsResourceWithStreamingResponse(self) - - async def create( - self, - *, - name: str, - organization_id: str, - description: Optional[str] | Omit = omit, - graph: Optional[Dict[str, object]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AgentCreateResponse: - """ - Create a new draft agent owned by the given organization. - - `organization_id` is required and you must be a member of it. The agent is - created as a `draft`; publish it with `POST /v1/agents/{agent_id}/publish` once - its graph is ready. - - Args: - name: Display name for the agent. Must be non-empty. - - organization_id: ID of the organization that will own the agent. Required — Profound API keys are - user-scoped, so the owning organization must be chosen explicitly. The caller - must be a member of this organization. - - description: Short description of the agent. - - graph: Initial workflow graph for the agent's draft version. Optional — an agent can be - created empty and have its graph filled in later. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v1/agents", - body=await async_maybe_transform( - { - "name": name, - "organization_id": organization_id, - "description": description, - "graph": graph, - }, - agent_create_params.AgentCreateParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AgentCreateResponse, - ) - - async def retrieve( - self, - agent_id: str, - *, - version: Literal["published", "draft"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AgentRetrieveResponse: - """ - Retrieve an agent and its schema details. - - Agents can have both a live published version and a draft version with newer - unpublished changes. Use the `version` parameter to choose which state to - return. - - Args: - agent_id: The ID of the agent to retrieve. - - version: Version of the agent to retrieve. Use `published` for the live version, or - `draft` for the latest unpublished changes for the same agent. Defaults to - `published`. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not agent_id: - raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") - return await self._get( - path_template("/v1/agents/{agent_id}", agent_id=agent_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform({"version": version}, agent_retrieve_params.AgentRetrieveParams), - ), - cast_to=AgentRetrieveResponse, - ) - - async def update( - self, - agent_id: str, - *, - graph: Dict[str, object], - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AgentUpdateResponse: - """ - Update an agent's draft graph in place. - - You must be a member of the agent's organization. The agent's draft is replaced - with the supplied graph and re-validated, so you can iterate one draft — create, - then update per fix — instead of creating a new agent on every change. The - response carries the updated `validation`; publish with - `POST /v1/agents/{agent_id}/publish` once `validation.valid`. - - Args: - agent_id: The ID of the agent to update. - - graph: New workflow graph for the agent's draft version. Replaces the current draft - graph; the agent is iterated in place rather than re-created, so its ID is - stable. Required — a null graph is rejected as a 422 here rather than as a - relayed upstream error. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not agent_id: - raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") - return await self._patch( - path_template("/v1/agents/{agent_id}", agent_id=agent_id), - body=await async_maybe_transform({"graph": graph}, agent_update_params.AgentUpdateParams), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AgentUpdateResponse, - ) - - async def list( - self, - *, - limit: int | Omit = omit, - next_cursor: Optional[str] | Omit = omit, - statuses: Optional[List[Literal["published", "draft"]]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AgentListResponse: - """ - List agents available to your organization. - - Agent status reflects whether an agent has ever been published. `published` - agents have a live published version. `draft` agents have not been published - yet. - - Args: - statuses: Optional status filter. Use `published` to list agents that have a live - published version, or `draft` to list agents that have not been published yet. - Defaults to `published`. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._get( - "/v1/agents", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - { - "limit": limit, - "next_cursor": next_cursor, - "statuses": statuses, - }, - agent_list_params.AgentListParams, - ), - ), - cast_to=AgentListResponse, - ) - - async def publish( - self, - agent_id: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AgentPublishResponse: - """ - Publish an agent's latest draft as its live published version. - - You must be a member of the agent's organization. Publishing promotes the - current draft graph to a new published version. A draft that cannot produce its - declared input/output contract is rejected with `422` and is not published. - - Args: - agent_id: The ID of the agent to publish. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not agent_id: - raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") - return await self._post( - path_template("/v1/agents/{agent_id}/publish", agent_id=agent_id), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AgentPublishResponse, - ) - - async def retrieve_graph( - self, - agent_id: str, - *, - version: Literal["published", "draft"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AgentRetrieveGraphResponse: - """ - Retrieve an agent's full workflow graph (`{nodes, edges}`). - - The graph is returned verbatim in the canonical dialect — the same shape - `POST /v1/agents` and `PATCH /v1/agents/{agent_id}` accept — so a known-good - agent can be read back, copied, and edited. Tool-backed nodes appear in their - lowered `tool` form rather than the friendly v1 node types. A `draft` is visible - only to its creator; the `published` version is visible across its organization. - - Args: - agent_id: The ID of the agent whose graph to retrieve. - - version: Version of the agent whose graph to retrieve. Use `published` for the live - version, or `draft` for the latest unpublished changes. Defaults to `published`. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not agent_id: - raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") - return await self._get( - path_template("/v1/agents/{agent_id}/graph", agent_id=agent_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - {"version": version}, agent_retrieve_graph_params.AgentRetrieveGraphParams - ), - ), - cast_to=AgentRetrieveGraphResponse, - ) - - -class AgentsResourceWithRawResponse: - def __init__(self, agents: AgentsResource) -> None: - self._agents = agents - - self.create = to_raw_response_wrapper( - agents.create, - ) - self.retrieve = to_raw_response_wrapper( - agents.retrieve, - ) - self.update = to_raw_response_wrapper( - agents.update, - ) - self.list = to_raw_response_wrapper( - agents.list, - ) - self.publish = to_raw_response_wrapper( - agents.publish, - ) - self.retrieve_graph = to_raw_response_wrapper( - agents.retrieve_graph, - ) - - @cached_property - def runs(self) -> RunsResourceWithRawResponse: - return RunsResourceWithRawResponse(self._agents.runs) - - @cached_property - def node_types(self) -> NodeTypesResourceWithRawResponse: - return NodeTypesResourceWithRawResponse(self._agents.node_types) - - -class AsyncAgentsResourceWithRawResponse: - def __init__(self, agents: AsyncAgentsResource) -> None: - self._agents = agents - - self.create = async_to_raw_response_wrapper( - agents.create, - ) - self.retrieve = async_to_raw_response_wrapper( - agents.retrieve, - ) - self.update = async_to_raw_response_wrapper( - agents.update, - ) - self.list = async_to_raw_response_wrapper( - agents.list, - ) - self.publish = async_to_raw_response_wrapper( - agents.publish, - ) - self.retrieve_graph = async_to_raw_response_wrapper( - agents.retrieve_graph, - ) - - @cached_property - def runs(self) -> AsyncRunsResourceWithRawResponse: - return AsyncRunsResourceWithRawResponse(self._agents.runs) - - @cached_property - def node_types(self) -> AsyncNodeTypesResourceWithRawResponse: - return AsyncNodeTypesResourceWithRawResponse(self._agents.node_types) - - -class AgentsResourceWithStreamingResponse: - def __init__(self, agents: AgentsResource) -> None: - self._agents = agents - - self.create = to_streamed_response_wrapper( - agents.create, - ) - self.retrieve = to_streamed_response_wrapper( - agents.retrieve, - ) - self.update = to_streamed_response_wrapper( - agents.update, - ) - self.list = to_streamed_response_wrapper( - agents.list, - ) - self.publish = to_streamed_response_wrapper( - agents.publish, - ) - self.retrieve_graph = to_streamed_response_wrapper( - agents.retrieve_graph, - ) - - @cached_property - def runs(self) -> RunsResourceWithStreamingResponse: - return RunsResourceWithStreamingResponse(self._agents.runs) - - @cached_property - def node_types(self) -> NodeTypesResourceWithStreamingResponse: - return NodeTypesResourceWithStreamingResponse(self._agents.node_types) - - -class AsyncAgentsResourceWithStreamingResponse: - def __init__(self, agents: AsyncAgentsResource) -> None: - self._agents = agents - - self.create = async_to_streamed_response_wrapper( - agents.create, - ) - self.retrieve = async_to_streamed_response_wrapper( - agents.retrieve, - ) - self.update = async_to_streamed_response_wrapper( - agents.update, - ) - self.list = async_to_streamed_response_wrapper( - agents.list, - ) - self.publish = async_to_streamed_response_wrapper( - agents.publish, - ) - self.retrieve_graph = async_to_streamed_response_wrapper( - agents.retrieve_graph, - ) - - @cached_property - def runs(self) -> AsyncRunsResourceWithStreamingResponse: - return AsyncRunsResourceWithStreamingResponse(self._agents.runs) - - @cached_property - def node_types(self) -> AsyncNodeTypesResourceWithStreamingResponse: - return AsyncNodeTypesResourceWithStreamingResponse(self._agents.node_types) diff --git a/src/profound/resources/agents/node_types.py b/src/profound/resources/agents/node_types.py deleted file mode 100644 index 5ed9a877..00000000 --- a/src/profound/resources/agents/node_types.py +++ /dev/null @@ -1,237 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import httpx - -from ..._types import Body, Query, Headers, NotGiven, not_given -from ..._utils import path_template -from ..._compat import cached_property -from ..._resource import SyncAPIResource, AsyncAPIResource -from ..._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from ..._base_client import make_request_options -from ...types.agents.node_type_list_response import NodeTypeListResponse -from ...types.agents.node_type_retrieve_schema_response import NodeTypeRetrieveSchemaResponse - -__all__ = ["NodeTypesResource", "AsyncNodeTypesResource"] - - -class NodeTypesResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> NodeTypesResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return NodeTypesResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> NodeTypesResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return NodeTypesResourceWithStreamingResponse(self) - - def list( - self, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> NodeTypeListResponse: - """ - List the node types available for building agents. - - The set is deterministic and does not depend on the caller, so the response is - safe to cache across sessions. Integration-dependent and dynamic-schema node - types are intentionally excluded in v1. - """ - return self._get( - "/v1/agents/node-types", - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=NodeTypeListResponse, - ) - - def retrieve_schema( - self, - node_type: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> NodeTypeRetrieveSchemaResponse: - """ - Retrieve the JSON schema for a single node type. - - The `schema` field is an opaque JSON Schema for the node's configuration. Use - `schema_version` as a cache key — it bumps whenever the schema changes. - - Args: - node_type: The node type to fetch the schema for, e.g. `llm`. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not node_type: - raise ValueError(f"Expected a non-empty value for `node_type` but received {node_type!r}") - return self._get( - path_template("/v1/agents/node-types/{node_type}/schema", node_type=node_type), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=NodeTypeRetrieveSchemaResponse, - ) - - -class AsyncNodeTypesResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncNodeTypesResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return AsyncNodeTypesResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncNodeTypesResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return AsyncNodeTypesResourceWithStreamingResponse(self) - - async def list( - self, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> NodeTypeListResponse: - """ - List the node types available for building agents. - - The set is deterministic and does not depend on the caller, so the response is - safe to cache across sessions. Integration-dependent and dynamic-schema node - types are intentionally excluded in v1. - """ - return await self._get( - "/v1/agents/node-types", - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=NodeTypeListResponse, - ) - - async def retrieve_schema( - self, - node_type: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> NodeTypeRetrieveSchemaResponse: - """ - Retrieve the JSON schema for a single node type. - - The `schema` field is an opaque JSON Schema for the node's configuration. Use - `schema_version` as a cache key — it bumps whenever the schema changes. - - Args: - node_type: The node type to fetch the schema for, e.g. `llm`. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not node_type: - raise ValueError(f"Expected a non-empty value for `node_type` but received {node_type!r}") - return await self._get( - path_template("/v1/agents/node-types/{node_type}/schema", node_type=node_type), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=NodeTypeRetrieveSchemaResponse, - ) - - -class NodeTypesResourceWithRawResponse: - def __init__(self, node_types: NodeTypesResource) -> None: - self._node_types = node_types - - self.list = to_raw_response_wrapper( - node_types.list, - ) - self.retrieve_schema = to_raw_response_wrapper( - node_types.retrieve_schema, - ) - - -class AsyncNodeTypesResourceWithRawResponse: - def __init__(self, node_types: AsyncNodeTypesResource) -> None: - self._node_types = node_types - - self.list = async_to_raw_response_wrapper( - node_types.list, - ) - self.retrieve_schema = async_to_raw_response_wrapper( - node_types.retrieve_schema, - ) - - -class NodeTypesResourceWithStreamingResponse: - def __init__(self, node_types: NodeTypesResource) -> None: - self._node_types = node_types - - self.list = to_streamed_response_wrapper( - node_types.list, - ) - self.retrieve_schema = to_streamed_response_wrapper( - node_types.retrieve_schema, - ) - - -class AsyncNodeTypesResourceWithStreamingResponse: - def __init__(self, node_types: AsyncNodeTypesResource) -> None: - self._node_types = node_types - - self.list = async_to_streamed_response_wrapper( - node_types.list, - ) - self.retrieve_schema = async_to_streamed_response_wrapper( - node_types.retrieve_schema, - ) diff --git a/src/profound/resources/documents.py b/src/profound/resources/documents.py deleted file mode 100644 index 73bb6d15..00000000 --- a/src/profound/resources/documents.py +++ /dev/null @@ -1,1087 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import Literal - -import httpx - -from ..types import ( - document_list_params, - document_create_params, - document_delete_params, - document_update_params, - document_retrieve_params, - document_replace_content_params, -) -from .._types import Body, Omit, Query, Headers, NoneType, NotGiven, omit, not_given -from .._utils import path_template, maybe_transform, async_maybe_transform -from .._compat import cached_property -from .._resource import SyncAPIResource, AsyncAPIResource -from .._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from .._base_client import make_request_options -from ..types.document_list_response import DocumentListResponse -from ..types.document_create_response import DocumentCreateResponse -from ..types.document_update_response import DocumentUpdateResponse -from ..types.document_retrieve_response import DocumentRetrieveResponse -from ..types.document_replace_content_response import DocumentReplaceContentResponse - -__all__ = ["DocumentsResource", "AsyncDocumentsResource"] - - -class DocumentsResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> DocumentsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return DocumentsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> DocumentsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return DocumentsResourceWithStreamingResponse(self) - - def create( - self, - *, - id: str, - content_markdown: str, - name: str, - organization_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> DocumentCreateResponse: - """ - Create a Profound document with markdown content. - - `organization_id` is required and you must be a member of it. You choose the - document's `id`, and creation is idempotent on it: repeating the request returns - the existing document rather than creating a second one. - - New documents are visible only to their creator; share them from the Profound - app, or open one with the `url` in the response. - - A `201` response does not confirm that a new document was created: it is also - returned when `id` already existed, in which case the existing document comes - back unchanged. Upstream gives no signal to tell the two apart, so this endpoint - does not claim to either — it is safe to retry with the same `id` either way. - - Args: - id: - ID for the new document, chosen by you. Creation is idempotent on this ID: - repeating a request with the same ID returns the existing document instead of - creating a second one, so a retry after a network error is safe. - - content_markdown: Initial document body as markdown. Must be non-empty. Rendered into the - collaborative editor, so the result is real editable content, not a stored blob. - - name: Title for the document. Must be non-empty. - - organization_id: ID of the organization that will own the document. Required — Profound API keys - are user-scoped, so the owning organization must be chosen explicitly. The - caller must be a member of this organization. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v1/documents", - body=maybe_transform( - { - "id": id, - "content_markdown": content_markdown, - "name": name, - "organization_id": organization_id, - }, - document_create_params.DocumentCreateParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=DocumentCreateResponse, - ) - - def retrieve( - self, - document_id: str, - *, - organization_id: str, - include_comments: bool | Omit = omit, - include_tabs: bool | Omit = omit, - preview: bool | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> DocumentRetrieveResponse: - """ - Read a document: its metadata, its default tab's body, its other tabs, its - comments, and its version hash. - - You can read any document you have access to in the Profound app, including ones - created there rather than through this API. - - By default this is a preview: the body is truncated to save your context, and - the version hash is withheld so a preview alone can never be used to replace a - document blindly. Pass `preview=false` when you intend to write. - - Args: - document_id: ID of the document. - - organization_id: ID of the organization that owns the document. Required — Profound API keys are - user-scoped, so the owning organization must be named explicitly. The caller - must be a member of this organization. - - include_comments: Include the document's review comments, each mapped to `{content, context}`. On - by default — a comment is part of the document's review state, not an aside. - Turn it off to skip the comment-thread walk upstream; off, `comments` is omitted - from the response rather than returned as an empty list. - - include_tabs: Include the document's other tabs. On by default — a tab body is part of the - document, not an aside. Off, `additional_tabs` is omitted from the response - rather than returned as an empty list. - - preview: Bound every body in the response — `content_markdown` and each tab's — and set - `content_truncated` if any was cut. On by default. Upstream has no partial-read - of its own — every read is a full round trip through the collaborative editor — - so this saves your context, not upstream cost. A preview read also omits - `version_hash`, on purpose: a hash returned next to a body you have not fully - seen invites replacing content you never read. Pass `preview=false` before you - intend to write, to get the whole body, `content_truncated: false`, and the - hash. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not document_id: - raise ValueError(f"Expected a non-empty value for `document_id` but received {document_id!r}") - return self._get( - path_template("/v1/documents/{document_id}", document_id=document_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "organization_id": organization_id, - "include_comments": include_comments, - "include_tabs": include_tabs, - "preview": preview, - }, - document_retrieve_params.DocumentRetrieveParams, - ), - ), - cast_to=DocumentRetrieveResponse, - ) - - def update( - self, - document_id: str, - *, - organization_id: str, - name: Optional[str] | Omit = omit, - visibility: Optional[Literal["invited_only", "organization"]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> DocumentUpdateResponse: - """ - Rename a document, change who can see it, or both in one call. - - Renaming sets a permanent lock on the title, and changing visibility can - silently change who has access — see the `name` and `visibility` field - descriptions for what each one does before you use it. - - Renaming needs edit access; changing visibility is creator-only, and upstream - enforces it. You can act on a document this API created, or one you created - yourself in the Profound app — not one merely shared with you. - - Args: - document_id: ID of the document. - - organization_id: ID of the organization that owns the document. Required — Profound API keys are - user-scoped, so the owning organization must be named explicitly. The caller - must be a member of this organization. - - name: New title for the document. Renaming sets a permanent lock: once a document is - renamed through this route, its title stops following the first heading of its - content, for the rest of the document's life, and no route can undo the lock. - Omit to leave the title as it is. - - visibility: New sharing scope: `invited_only` for only the people invited to the document, - or `organization` for everyone in the owning organization. Only the document's - creator can change this; omit to leave sharing as it is. Three things worth - knowing before you set it: `organization` visibility grants view only — there is - no value here that grants the organization edit access. Setting `invited_only` - removes the organization's access entirely. And re-asserting `organization` on a - document whose organization grant is already `edit` silently downgrades the - whole organization to view — upstream replays the access sync whenever this - field is sent, and that sync always upserts view, even when the value you sent - matches the one already stored. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not document_id: - raise ValueError(f"Expected a non-empty value for `document_id` but received {document_id!r}") - return self._patch( - path_template("/v1/documents/{document_id}", document_id=document_id), - body=maybe_transform( - { - "organization_id": organization_id, - "name": name, - "visibility": visibility, - }, - document_update_params.DocumentUpdateParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=DocumentUpdateResponse, - ) - - def list( - self, - *, - organization_id: str, - limit: int | Omit = omit, - next_cursor: Optional[str] | Omit = omit, - q: Optional[str] | Omit = omit, - sort: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> DocumentListResponse: - """ - List documents visible to your organization, newest-modified-first. - - Documents are ordered by last-modified time, most recent first, with no other - sort option. This is a walk over a live, mutable collection: a document created - or modified while you are paging can shift which page it lands on, so a single - walk may show it to you twice or, rarely, skip it. - - This response never includes a total count. Upstream counts totals before - applying your organization's access filter, so a total, or treating a short page - as the last one, would misreport what you can actually see. Keep following - `pagination.next_cursor` until it comes back null — that, and not a short or - even an empty page, is the end of the walk. A page whose rows the access filter - removed entirely is empty while later pages still hold documents, so the last - page of a walk may legitimately be an empty one. - - Args: - organization_id: ID of the organization whose documents to list. Required. The caller must be a - member of this organization. - - q: Filter to documents whose name contains this text, case-insensitively. Matches - only the document's name, never its content — a query that finds nothing does - not mean the topic is unwritten, only that no title mentions it. Blank or - omitted returns every document. Ignored when sent alongside `next_cursor`, which - carries the filter the walk started with. Matching is name-only as of this - release; broader matching may follow if upstream changes how it indexes the name - column. - - sort: Documents are always ordered newest-modified-first (`updated_at DESC`, then - `created_at DESC`, then `id DESC`); there is no parameter that changes this. - `recency` is the only accepted value, and passing it is a no-op that names the - guarantee rather than altering it — any other value is rejected outright rather - than silently ignored. Ordering is never re-applied to a returned page either: - that would only be consistent within the page, not across a paginated walk. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._get( - "/v1/documents", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "organization_id": organization_id, - "limit": limit, - "next_cursor": next_cursor, - "q": q, - "sort": sort, - }, - document_list_params.DocumentListParams, - ), - ), - cast_to=DocumentListResponse, - ) - - def delete( - self, - document_id: str, - *, - organization_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> None: - """ - Delete a document created through this integration. - - Only documents created through this integration can be deleted here. A document - created in the Profound app can never be deleted through this route, even by the - person who owns it — creation provenance is stamped once, at creation, and is - never backfilled onto documents made another way. - - The delete is soft: the row is marked deleted at the storage layer rather than - destroyed. There is no restore through this API, or any other — treat a delete - as final even though the data itself is not gone. - - A 404 means the document is not visible to you at all. It covers three cases the - response does not distinguish, on purpose: the document never existed, it was - already deleted by an earlier call to this same route, or it exists but your - credential resolves no role on it. Deleting the same document twice returns 404 - on the second call, not a second 204. - - A 403 means the opposite: the document is visible to you but not deletable here, - and the message says which rule refused — it was not created through this - integration, or you are not its creator. Deleting is creator-only, so edit - access is not enough to remove a document out from under its owner. - - Args: - document_id: ID of the document. - - organization_id: ID of the organization that owns the document. You must be a member of it. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not document_id: - raise ValueError(f"Expected a non-empty value for `document_id` but received {document_id!r}") - extra_headers = {"Accept": "*/*", **(extra_headers or {})} - return self._delete( - path_template("/v1/documents/{document_id}", document_id=document_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - {"organization_id": organization_id}, document_delete_params.DocumentDeleteParams - ), - ), - cast_to=NoneType, - ) - - def replace_content( - self, - document_id: str, - *, - content_markdown: str, - organization_id: str, - skip_title_sync: bool | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> DocumentReplaceContentResponse: - """ - Overwrite a document's entire body with new markdown, replacing what it held - before. - - This is a whole-body replace, not a patch: send the complete new text every - time. An empty `content_markdown` is valid and clears the document. - - Two destructive side effects apply on every call, regardless of what you send: - - - The document collapses to its default tab. Every non-default tab is deleted, - and the comments map is cleared for **all** tabs, including the default one — - a document with a live comment thread on any tab loses it. - - `skip_title_sync` defaults to `false`, matching the Profound app: the title - follows the new content's first heading, so a replace silently renames the - document unless the heading matches the current title or `skip_title_sync` is - set. - - There is no compare-and-swap: this call does not accept a precondition, and - nothing stops two concurrent replaces from silently overwriting each other - last-writer-wins. Upstream's own `version_hash` documentation says as much — the - token is "still a change detector rather than a precondition: a caller must not - treat a matching token as licence to overwrite blindly, because it names the - room at a moment cortex observed and not the moment its own write lands." - Sending a `working_version_hash` (or any spelling of it) is rejected with a - `400` naming this rather than accepted and silently discarded, which is what - happens on the upstream route this wraps. - - You can replace a document this API created, or one you created yourself - directly — not merely one shared with you. - - Args: - document_id: ID of the document. - - content_markdown: New markdown body for the document, replacing everything it held before. An - empty string is valid and clears the document — nothing else warns you before - that happens, so treat sending one as deliberate. Whole-body replace only: send - the complete new text, not just the part that changed. Capped at 1,000,000 - bytes; the upstream router separately caps the entire request at 2 MiB, so a - body near this cap can still be refused in transit rather than by this field. - - organization_id: ID of the organization that owns the document. Required — Profound API keys are - user-scoped, so the owning organization must be chosen explicitly. The caller - must be a member of this organization. - - skip_title_sync: Off by default, matching the Profound app: the document's title follows the new - content's first heading, so a replace silently renames the document whenever - that heading differs from the current title. Set true to keep the current title - regardless of what the new content's first heading says. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not document_id: - raise ValueError(f"Expected a non-empty value for `document_id` but received {document_id!r}") - return self._post( - path_template("/v1/documents/{document_id}/content", document_id=document_id), - body=maybe_transform( - { - "content_markdown": content_markdown, - "organization_id": organization_id, - "skip_title_sync": skip_title_sync, - }, - document_replace_content_params.DocumentReplaceContentParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=DocumentReplaceContentResponse, - ) - - -class AsyncDocumentsResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncDocumentsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return AsyncDocumentsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncDocumentsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return AsyncDocumentsResourceWithStreamingResponse(self) - - async def create( - self, - *, - id: str, - content_markdown: str, - name: str, - organization_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> DocumentCreateResponse: - """ - Create a Profound document with markdown content. - - `organization_id` is required and you must be a member of it. You choose the - document's `id`, and creation is idempotent on it: repeating the request returns - the existing document rather than creating a second one. - - New documents are visible only to their creator; share them from the Profound - app, or open one with the `url` in the response. - - A `201` response does not confirm that a new document was created: it is also - returned when `id` already existed, in which case the existing document comes - back unchanged. Upstream gives no signal to tell the two apart, so this endpoint - does not claim to either — it is safe to retry with the same `id` either way. - - Args: - id: - ID for the new document, chosen by you. Creation is idempotent on this ID: - repeating a request with the same ID returns the existing document instead of - creating a second one, so a retry after a network error is safe. - - content_markdown: Initial document body as markdown. Must be non-empty. Rendered into the - collaborative editor, so the result is real editable content, not a stored blob. - - name: Title for the document. Must be non-empty. - - organization_id: ID of the organization that will own the document. Required — Profound API keys - are user-scoped, so the owning organization must be chosen explicitly. The - caller must be a member of this organization. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v1/documents", - body=await async_maybe_transform( - { - "id": id, - "content_markdown": content_markdown, - "name": name, - "organization_id": organization_id, - }, - document_create_params.DocumentCreateParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=DocumentCreateResponse, - ) - - async def retrieve( - self, - document_id: str, - *, - organization_id: str, - include_comments: bool | Omit = omit, - include_tabs: bool | Omit = omit, - preview: bool | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> DocumentRetrieveResponse: - """ - Read a document: its metadata, its default tab's body, its other tabs, its - comments, and its version hash. - - You can read any document you have access to in the Profound app, including ones - created there rather than through this API. - - By default this is a preview: the body is truncated to save your context, and - the version hash is withheld so a preview alone can never be used to replace a - document blindly. Pass `preview=false` when you intend to write. - - Args: - document_id: ID of the document. - - organization_id: ID of the organization that owns the document. Required — Profound API keys are - user-scoped, so the owning organization must be named explicitly. The caller - must be a member of this organization. - - include_comments: Include the document's review comments, each mapped to `{content, context}`. On - by default — a comment is part of the document's review state, not an aside. - Turn it off to skip the comment-thread walk upstream; off, `comments` is omitted - from the response rather than returned as an empty list. - - include_tabs: Include the document's other tabs. On by default — a tab body is part of the - document, not an aside. Off, `additional_tabs` is omitted from the response - rather than returned as an empty list. - - preview: Bound every body in the response — `content_markdown` and each tab's — and set - `content_truncated` if any was cut. On by default. Upstream has no partial-read - of its own — every read is a full round trip through the collaborative editor — - so this saves your context, not upstream cost. A preview read also omits - `version_hash`, on purpose: a hash returned next to a body you have not fully - seen invites replacing content you never read. Pass `preview=false` before you - intend to write, to get the whole body, `content_truncated: false`, and the - hash. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not document_id: - raise ValueError(f"Expected a non-empty value for `document_id` but received {document_id!r}") - return await self._get( - path_template("/v1/documents/{document_id}", document_id=document_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - { - "organization_id": organization_id, - "include_comments": include_comments, - "include_tabs": include_tabs, - "preview": preview, - }, - document_retrieve_params.DocumentRetrieveParams, - ), - ), - cast_to=DocumentRetrieveResponse, - ) - - async def update( - self, - document_id: str, - *, - organization_id: str, - name: Optional[str] | Omit = omit, - visibility: Optional[Literal["invited_only", "organization"]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> DocumentUpdateResponse: - """ - Rename a document, change who can see it, or both in one call. - - Renaming sets a permanent lock on the title, and changing visibility can - silently change who has access — see the `name` and `visibility` field - descriptions for what each one does before you use it. - - Renaming needs edit access; changing visibility is creator-only, and upstream - enforces it. You can act on a document this API created, or one you created - yourself in the Profound app — not one merely shared with you. - - Args: - document_id: ID of the document. - - organization_id: ID of the organization that owns the document. Required — Profound API keys are - user-scoped, so the owning organization must be named explicitly. The caller - must be a member of this organization. - - name: New title for the document. Renaming sets a permanent lock: once a document is - renamed through this route, its title stops following the first heading of its - content, for the rest of the document's life, and no route can undo the lock. - Omit to leave the title as it is. - - visibility: New sharing scope: `invited_only` for only the people invited to the document, - or `organization` for everyone in the owning organization. Only the document's - creator can change this; omit to leave sharing as it is. Three things worth - knowing before you set it: `organization` visibility grants view only — there is - no value here that grants the organization edit access. Setting `invited_only` - removes the organization's access entirely. And re-asserting `organization` on a - document whose organization grant is already `edit` silently downgrades the - whole organization to view — upstream replays the access sync whenever this - field is sent, and that sync always upserts view, even when the value you sent - matches the one already stored. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not document_id: - raise ValueError(f"Expected a non-empty value for `document_id` but received {document_id!r}") - return await self._patch( - path_template("/v1/documents/{document_id}", document_id=document_id), - body=await async_maybe_transform( - { - "organization_id": organization_id, - "name": name, - "visibility": visibility, - }, - document_update_params.DocumentUpdateParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=DocumentUpdateResponse, - ) - - async def list( - self, - *, - organization_id: str, - limit: int | Omit = omit, - next_cursor: Optional[str] | Omit = omit, - q: Optional[str] | Omit = omit, - sort: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> DocumentListResponse: - """ - List documents visible to your organization, newest-modified-first. - - Documents are ordered by last-modified time, most recent first, with no other - sort option. This is a walk over a live, mutable collection: a document created - or modified while you are paging can shift which page it lands on, so a single - walk may show it to you twice or, rarely, skip it. - - This response never includes a total count. Upstream counts totals before - applying your organization's access filter, so a total, or treating a short page - as the last one, would misreport what you can actually see. Keep following - `pagination.next_cursor` until it comes back null — that, and not a short or - even an empty page, is the end of the walk. A page whose rows the access filter - removed entirely is empty while later pages still hold documents, so the last - page of a walk may legitimately be an empty one. - - Args: - organization_id: ID of the organization whose documents to list. Required. The caller must be a - member of this organization. - - q: Filter to documents whose name contains this text, case-insensitively. Matches - only the document's name, never its content — a query that finds nothing does - not mean the topic is unwritten, only that no title mentions it. Blank or - omitted returns every document. Ignored when sent alongside `next_cursor`, which - carries the filter the walk started with. Matching is name-only as of this - release; broader matching may follow if upstream changes how it indexes the name - column. - - sort: Documents are always ordered newest-modified-first (`updated_at DESC`, then - `created_at DESC`, then `id DESC`); there is no parameter that changes this. - `recency` is the only accepted value, and passing it is a no-op that names the - guarantee rather than altering it — any other value is rejected outright rather - than silently ignored. Ordering is never re-applied to a returned page either: - that would only be consistent within the page, not across a paginated walk. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._get( - "/v1/documents", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - { - "organization_id": organization_id, - "limit": limit, - "next_cursor": next_cursor, - "q": q, - "sort": sort, - }, - document_list_params.DocumentListParams, - ), - ), - cast_to=DocumentListResponse, - ) - - async def delete( - self, - document_id: str, - *, - organization_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> None: - """ - Delete a document created through this integration. - - Only documents created through this integration can be deleted here. A document - created in the Profound app can never be deleted through this route, even by the - person who owns it — creation provenance is stamped once, at creation, and is - never backfilled onto documents made another way. - - The delete is soft: the row is marked deleted at the storage layer rather than - destroyed. There is no restore through this API, or any other — treat a delete - as final even though the data itself is not gone. - - A 404 means the document is not visible to you at all. It covers three cases the - response does not distinguish, on purpose: the document never existed, it was - already deleted by an earlier call to this same route, or it exists but your - credential resolves no role on it. Deleting the same document twice returns 404 - on the second call, not a second 204. - - A 403 means the opposite: the document is visible to you but not deletable here, - and the message says which rule refused — it was not created through this - integration, or you are not its creator. Deleting is creator-only, so edit - access is not enough to remove a document out from under its owner. - - Args: - document_id: ID of the document. - - organization_id: ID of the organization that owns the document. You must be a member of it. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not document_id: - raise ValueError(f"Expected a non-empty value for `document_id` but received {document_id!r}") - extra_headers = {"Accept": "*/*", **(extra_headers or {})} - return await self._delete( - path_template("/v1/documents/{document_id}", document_id=document_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - {"organization_id": organization_id}, document_delete_params.DocumentDeleteParams - ), - ), - cast_to=NoneType, - ) - - async def replace_content( - self, - document_id: str, - *, - content_markdown: str, - organization_id: str, - skip_title_sync: bool | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> DocumentReplaceContentResponse: - """ - Overwrite a document's entire body with new markdown, replacing what it held - before. - - This is a whole-body replace, not a patch: send the complete new text every - time. An empty `content_markdown` is valid and clears the document. - - Two destructive side effects apply on every call, regardless of what you send: - - - The document collapses to its default tab. Every non-default tab is deleted, - and the comments map is cleared for **all** tabs, including the default one — - a document with a live comment thread on any tab loses it. - - `skip_title_sync` defaults to `false`, matching the Profound app: the title - follows the new content's first heading, so a replace silently renames the - document unless the heading matches the current title or `skip_title_sync` is - set. - - There is no compare-and-swap: this call does not accept a precondition, and - nothing stops two concurrent replaces from silently overwriting each other - last-writer-wins. Upstream's own `version_hash` documentation says as much — the - token is "still a change detector rather than a precondition: a caller must not - treat a matching token as licence to overwrite blindly, because it names the - room at a moment cortex observed and not the moment its own write lands." - Sending a `working_version_hash` (or any spelling of it) is rejected with a - `400` naming this rather than accepted and silently discarded, which is what - happens on the upstream route this wraps. - - You can replace a document this API created, or one you created yourself - directly — not merely one shared with you. - - Args: - document_id: ID of the document. - - content_markdown: New markdown body for the document, replacing everything it held before. An - empty string is valid and clears the document — nothing else warns you before - that happens, so treat sending one as deliberate. Whole-body replace only: send - the complete new text, not just the part that changed. Capped at 1,000,000 - bytes; the upstream router separately caps the entire request at 2 MiB, so a - body near this cap can still be refused in transit rather than by this field. - - organization_id: ID of the organization that owns the document. Required — Profound API keys are - user-scoped, so the owning organization must be chosen explicitly. The caller - must be a member of this organization. - - skip_title_sync: Off by default, matching the Profound app: the document's title follows the new - content's first heading, so a replace silently renames the document whenever - that heading differs from the current title. Set true to keep the current title - regardless of what the new content's first heading says. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not document_id: - raise ValueError(f"Expected a non-empty value for `document_id` but received {document_id!r}") - return await self._post( - path_template("/v1/documents/{document_id}/content", document_id=document_id), - body=await async_maybe_transform( - { - "content_markdown": content_markdown, - "organization_id": organization_id, - "skip_title_sync": skip_title_sync, - }, - document_replace_content_params.DocumentReplaceContentParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=DocumentReplaceContentResponse, - ) - - -class DocumentsResourceWithRawResponse: - def __init__(self, documents: DocumentsResource) -> None: - self._documents = documents - - self.create = to_raw_response_wrapper( - documents.create, - ) - self.retrieve = to_raw_response_wrapper( - documents.retrieve, - ) - self.update = to_raw_response_wrapper( - documents.update, - ) - self.list = to_raw_response_wrapper( - documents.list, - ) - self.delete = to_raw_response_wrapper( - documents.delete, - ) - self.replace_content = to_raw_response_wrapper( - documents.replace_content, - ) - - -class AsyncDocumentsResourceWithRawResponse: - def __init__(self, documents: AsyncDocumentsResource) -> None: - self._documents = documents - - self.create = async_to_raw_response_wrapper( - documents.create, - ) - self.retrieve = async_to_raw_response_wrapper( - documents.retrieve, - ) - self.update = async_to_raw_response_wrapper( - documents.update, - ) - self.list = async_to_raw_response_wrapper( - documents.list, - ) - self.delete = async_to_raw_response_wrapper( - documents.delete, - ) - self.replace_content = async_to_raw_response_wrapper( - documents.replace_content, - ) - - -class DocumentsResourceWithStreamingResponse: - def __init__(self, documents: DocumentsResource) -> None: - self._documents = documents - - self.create = to_streamed_response_wrapper( - documents.create, - ) - self.retrieve = to_streamed_response_wrapper( - documents.retrieve, - ) - self.update = to_streamed_response_wrapper( - documents.update, - ) - self.list = to_streamed_response_wrapper( - documents.list, - ) - self.delete = to_streamed_response_wrapper( - documents.delete, - ) - self.replace_content = to_streamed_response_wrapper( - documents.replace_content, - ) - - -class AsyncDocumentsResourceWithStreamingResponse: - def __init__(self, documents: AsyncDocumentsResource) -> None: - self._documents = documents - - self.create = async_to_streamed_response_wrapper( - documents.create, - ) - self.retrieve = async_to_streamed_response_wrapper( - documents.retrieve, - ) - self.update = async_to_streamed_response_wrapper( - documents.update, - ) - self.list = async_to_streamed_response_wrapper( - documents.list, - ) - self.delete = async_to_streamed_response_wrapper( - documents.delete, - ) - self.replace_content = async_to_streamed_response_wrapper( - documents.replace_content, - ) diff --git a/src/profound/resources/integrations.py b/src/profound/resources/integrations.py deleted file mode 100644 index 25d73b5d..00000000 --- a/src/profound/resources/integrations.py +++ /dev/null @@ -1,210 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import Literal - -import httpx - -from ..types import integration_list_params -from .._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from .._utils import maybe_transform, async_maybe_transform -from .._compat import cached_property -from .._resource import SyncAPIResource, AsyncAPIResource -from .._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from .._base_client import make_request_options -from ..types.integration_list_response import IntegrationListResponse - -__all__ = ["IntegrationsResource", "AsyncIntegrationsResource"] - - -class IntegrationsResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> IntegrationsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return IntegrationsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> IntegrationsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return IntegrationsResourceWithStreamingResponse(self) - - def list( - self, - *, - organization_id: Optional[str] | Omit = omit, - provider: Optional[str] | Omit = omit, - status_filter: Optional[Literal["active", "pending", "needs_reauth", "revoking", "revoked"]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> IntegrationListResponse: - """ - List the organization's connected integrations. - - Returns every connected integration by default, each with its lifecycle - `status`; pass `status_filter` to narrow to one status (e.g. `needs_reauth`). - Each row's `integration_id` is the value a hub-backed node needs bound to it. - - Args: - organization_id: Organization scope for API keys that can access multiple organizations. - - provider: Filter to a single connector/provider id, e.g. `google_drive`. - - status_filter: Filter to one lifecycle status. Omitted returns all statuses. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._get( - "/v1/integrations", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "organization_id": organization_id, - "provider": provider, - "status_filter": status_filter, - }, - integration_list_params.IntegrationListParams, - ), - ), - cast_to=IntegrationListResponse, - ) - - -class AsyncIntegrationsResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncIntegrationsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return AsyncIntegrationsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncIntegrationsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return AsyncIntegrationsResourceWithStreamingResponse(self) - - async def list( - self, - *, - organization_id: Optional[str] | Omit = omit, - provider: Optional[str] | Omit = omit, - status_filter: Optional[Literal["active", "pending", "needs_reauth", "revoking", "revoked"]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> IntegrationListResponse: - """ - List the organization's connected integrations. - - Returns every connected integration by default, each with its lifecycle - `status`; pass `status_filter` to narrow to one status (e.g. `needs_reauth`). - Each row's `integration_id` is the value a hub-backed node needs bound to it. - - Args: - organization_id: Organization scope for API keys that can access multiple organizations. - - provider: Filter to a single connector/provider id, e.g. `google_drive`. - - status_filter: Filter to one lifecycle status. Omitted returns all statuses. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._get( - "/v1/integrations", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - { - "organization_id": organization_id, - "provider": provider, - "status_filter": status_filter, - }, - integration_list_params.IntegrationListParams, - ), - ), - cast_to=IntegrationListResponse, - ) - - -class IntegrationsResourceWithRawResponse: - def __init__(self, integrations: IntegrationsResource) -> None: - self._integrations = integrations - - self.list = to_raw_response_wrapper( - integrations.list, - ) - - -class AsyncIntegrationsResourceWithRawResponse: - def __init__(self, integrations: AsyncIntegrationsResource) -> None: - self._integrations = integrations - - self.list = async_to_raw_response_wrapper( - integrations.list, - ) - - -class IntegrationsResourceWithStreamingResponse: - def __init__(self, integrations: IntegrationsResource) -> None: - self._integrations = integrations - - self.list = to_streamed_response_wrapper( - integrations.list, - ) - - -class AsyncIntegrationsResourceWithStreamingResponse: - def __init__(self, integrations: AsyncIntegrationsResource) -> None: - self._integrations = integrations - - self.list = async_to_streamed_response_wrapper( - integrations.list, - ) diff --git a/src/profound/resources/knowledge_bases/documents.py b/src/profound/resources/knowledge_bases/documents.py deleted file mode 100644 index 756381ab..00000000 --- a/src/profound/resources/knowledge_bases/documents.py +++ /dev/null @@ -1,500 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Mapping, Optional, cast - -import httpx - -from ..._files import deepcopy_with_paths -from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from ..._utils import extract_files, path_template, maybe_transform, async_maybe_transform -from ..._compat import cached_property -from ..._resource import SyncAPIResource, AsyncAPIResource -from ..._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from ..._base_client import make_request_options -from ...types.knowledge_bases import document_create_params, document_delete_params, document_update_params -from ...types.knowledge_bases.document_create_response import DocumentCreateResponse -from ...types.knowledge_bases.document_delete_response import DocumentDeleteResponse -from ...types.knowledge_bases.document_update_response import DocumentUpdateResponse - -__all__ = ["DocumentsResource", "AsyncDocumentsResource"] - - -class DocumentsResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> DocumentsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return DocumentsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> DocumentsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return DocumentsResourceWithStreamingResponse(self) - - def create( - self, - knowledge_base_id: str, - *, - name: str, - text: str, - organization_id: Optional[str] | Omit = omit, - folder: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> DocumentCreateResponse: - """ - Add a document to a knowledge base using JSON text or multipart file upload. - - Args: - knowledge_base_id: Unique knowledge base ID. - - name: Unique document name. - - text: Text content to add to the document. - - organization_id: Organization scope for API keys that can access multiple organizations. - - folder: Folder path to add the document under. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not knowledge_base_id: - raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") - body = deepcopy_with_paths( - { - "name": name, - "text": text, - "folder": folder, - }, - [["file"]], - ) - files = extract_files(cast(Mapping[str, object], body), paths=[["file"]]) - if files: - # It should be noted that the actual Content-Type header that will be - # sent to the server will contain a `boundary` parameter, e.g. - # multipart/form-data; boundary=---abc-- - extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})} - return self._post( - path_template("/v1/knowledge-bases/{knowledge_base_id}/documents", knowledge_base_id=knowledge_base_id), - body=maybe_transform(body, document_create_params.DocumentCreateParams), - files=files, - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - {"organization_id": organization_id}, document_create_params.DocumentCreateParams - ), - ), - cast_to=DocumentCreateResponse, - ) - - def update( - self, - knowledge_base_id: str, - *, - name: str, - text: str, - organization_id: Optional[str] | Omit = omit, - folder: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> DocumentUpdateResponse: - """ - Overwrite a knowledge base document using JSON text or multipart file upload. - - Args: - knowledge_base_id: Unique knowledge base ID. - - name: Document name or path to update. - - text: Replacement text content for the document. - - organization_id: Organization scope for API keys that can access multiple organizations. - - folder: Folder path containing the document. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not knowledge_base_id: - raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") - body = deepcopy_with_paths( - { - "name": name, - "text": text, - "folder": folder, - }, - [["file"]], - ) - files = extract_files(cast(Mapping[str, object], body), paths=[["file"]]) - if files: - # It should be noted that the actual Content-Type header that will be - # sent to the server will contain a `boundary` parameter, e.g. - # multipart/form-data; boundary=---abc-- - extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})} - return self._put( - path_template("/v1/knowledge-bases/{knowledge_base_id}/documents", knowledge_base_id=knowledge_base_id), - body=maybe_transform(body, document_update_params.DocumentUpdateParams), - files=files, - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - {"organization_id": organization_id}, document_update_params.DocumentUpdateParams - ), - ), - cast_to=DocumentUpdateResponse, - ) - - def delete( - self, - knowledge_base_id: str, - *, - name: str, - organization_id: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> DocumentDeleteResponse: - """ - Delete an existing document from a knowledge base. - - Args: - knowledge_base_id: Unique knowledge base ID. - - name: Document path to delete. - - organization_id: Organization scope for API keys that can access multiple organizations. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not knowledge_base_id: - raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") - return self._delete( - path_template("/v1/knowledge-bases/{knowledge_base_id}/documents", knowledge_base_id=knowledge_base_id), - body=maybe_transform({"name": name}, document_delete_params.DocumentDeleteParams), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - {"organization_id": organization_id}, document_delete_params.DocumentDeleteParams - ), - ), - cast_to=DocumentDeleteResponse, - ) - - -class AsyncDocumentsResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncDocumentsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return AsyncDocumentsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncDocumentsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return AsyncDocumentsResourceWithStreamingResponse(self) - - async def create( - self, - knowledge_base_id: str, - *, - name: str, - text: str, - organization_id: Optional[str] | Omit = omit, - folder: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> DocumentCreateResponse: - """ - Add a document to a knowledge base using JSON text or multipart file upload. - - Args: - knowledge_base_id: Unique knowledge base ID. - - name: Unique document name. - - text: Text content to add to the document. - - organization_id: Organization scope for API keys that can access multiple organizations. - - folder: Folder path to add the document under. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not knowledge_base_id: - raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") - body = deepcopy_with_paths( - { - "name": name, - "text": text, - "folder": folder, - }, - [["file"]], - ) - files = extract_files(cast(Mapping[str, object], body), paths=[["file"]]) - if files: - # It should be noted that the actual Content-Type header that will be - # sent to the server will contain a `boundary` parameter, e.g. - # multipart/form-data; boundary=---abc-- - extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})} - return await self._post( - path_template("/v1/knowledge-bases/{knowledge_base_id}/documents", knowledge_base_id=knowledge_base_id), - body=await async_maybe_transform(body, document_create_params.DocumentCreateParams), - files=files, - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - {"organization_id": organization_id}, document_create_params.DocumentCreateParams - ), - ), - cast_to=DocumentCreateResponse, - ) - - async def update( - self, - knowledge_base_id: str, - *, - name: str, - text: str, - organization_id: Optional[str] | Omit = omit, - folder: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> DocumentUpdateResponse: - """ - Overwrite a knowledge base document using JSON text or multipart file upload. - - Args: - knowledge_base_id: Unique knowledge base ID. - - name: Document name or path to update. - - text: Replacement text content for the document. - - organization_id: Organization scope for API keys that can access multiple organizations. - - folder: Folder path containing the document. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not knowledge_base_id: - raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") - body = deepcopy_with_paths( - { - "name": name, - "text": text, - "folder": folder, - }, - [["file"]], - ) - files = extract_files(cast(Mapping[str, object], body), paths=[["file"]]) - if files: - # It should be noted that the actual Content-Type header that will be - # sent to the server will contain a `boundary` parameter, e.g. - # multipart/form-data; boundary=---abc-- - extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})} - return await self._put( - path_template("/v1/knowledge-bases/{knowledge_base_id}/documents", knowledge_base_id=knowledge_base_id), - body=await async_maybe_transform(body, document_update_params.DocumentUpdateParams), - files=files, - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - {"organization_id": organization_id}, document_update_params.DocumentUpdateParams - ), - ), - cast_to=DocumentUpdateResponse, - ) - - async def delete( - self, - knowledge_base_id: str, - *, - name: str, - organization_id: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> DocumentDeleteResponse: - """ - Delete an existing document from a knowledge base. - - Args: - knowledge_base_id: Unique knowledge base ID. - - name: Document path to delete. - - organization_id: Organization scope for API keys that can access multiple organizations. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not knowledge_base_id: - raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") - return await self._delete( - path_template("/v1/knowledge-bases/{knowledge_base_id}/documents", knowledge_base_id=knowledge_base_id), - body=await async_maybe_transform({"name": name}, document_delete_params.DocumentDeleteParams), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - {"organization_id": organization_id}, document_delete_params.DocumentDeleteParams - ), - ), - cast_to=DocumentDeleteResponse, - ) - - -class DocumentsResourceWithRawResponse: - def __init__(self, documents: DocumentsResource) -> None: - self._documents = documents - - self.create = to_raw_response_wrapper( - documents.create, - ) - self.update = to_raw_response_wrapper( - documents.update, - ) - self.delete = to_raw_response_wrapper( - documents.delete, - ) - - -class AsyncDocumentsResourceWithRawResponse: - def __init__(self, documents: AsyncDocumentsResource) -> None: - self._documents = documents - - self.create = async_to_raw_response_wrapper( - documents.create, - ) - self.update = async_to_raw_response_wrapper( - documents.update, - ) - self.delete = async_to_raw_response_wrapper( - documents.delete, - ) - - -class DocumentsResourceWithStreamingResponse: - def __init__(self, documents: DocumentsResource) -> None: - self._documents = documents - - self.create = to_streamed_response_wrapper( - documents.create, - ) - self.update = to_streamed_response_wrapper( - documents.update, - ) - self.delete = to_streamed_response_wrapper( - documents.delete, - ) - - -class AsyncDocumentsResourceWithStreamingResponse: - def __init__(self, documents: AsyncDocumentsResource) -> None: - self._documents = documents - - self.create = async_to_streamed_response_wrapper( - documents.create, - ) - self.update = async_to_streamed_response_wrapper( - documents.update, - ) - self.delete = async_to_streamed_response_wrapper( - documents.delete, - ) diff --git a/src/profound/resources/organizations/categories.py b/src/profound/resources/organizations/categories.py deleted file mode 100644 index 0cdfb20f..00000000 --- a/src/profound/resources/organizations/categories.py +++ /dev/null @@ -1,1214 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Iterable, Optional -from typing_extensions import Literal - -import httpx - -from ..._types import Body, Omit, Query, Headers, NotGiven, SequenceNotStr, omit, not_given -from ..._utils import path_template, maybe_transform, async_maybe_transform -from ..._compat import cached_property -from ..._resource import SyncAPIResource, AsyncAPIResource -from ..._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from ..._base_client import make_request_options -from ...types.organizations import ( - category_list_params, - category_prompts_params, - category_create_prompts_params, - category_update_prompts_params, - category_update_prompt_status_params, -) -from ...types.organizations.category_list_response import CategoryListResponse -from ...types.organizations.category_tags_response import CategoryTagsResponse -from ...types.organizations.category_assets_response import CategoryAssetsResponse -from ...types.organizations.category_topics_response import CategoryTopicsResponse -from ...types.organizations.category_prompts_response import CategoryPromptsResponse -from ...types.organizations.category_create_prompts_response import CategoryCreatePromptsResponse -from ...types.organizations.category_update_prompts_response import CategoryUpdatePromptsResponse -from ...types.organizations.category_retrieve_regions_response import CategoryRetrieveRegionsResponse -from ...types.organizations.category_update_prompt_status_response import CategoryUpdatePromptStatusResponse -from ...types.organizations.category_get_category_personas_response import CategoryGetCategoryPersonasResponse -from ...types.organizations.category_get_citation_categories_response import CategoryGetCitationCategoriesResponse - -__all__ = ["CategoriesResource", "AsyncCategoriesResource"] - - -class CategoriesResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> CategoriesResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return CategoriesResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> CategoriesResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return CategoriesResourceWithStreamingResponse(self) - - def list( - self, - *, - organization_ids: Optional[SequenceNotStr[str]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryListResponse: - """ - Get the organization categories, one row per (category, organization) pair. - - Args: - organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the - parameter to target multiple orgs (e.g. - `?organization_ids=&organization_ids=`). Omit to return data from - every organization the caller has access to. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._get( - "/v1/org/categories", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform({"organization_ids": organization_ids}, category_list_params.CategoryListParams), - ), - cast_to=CategoryListResponse, - ) - - def assets( - self, - category_id: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryAssetsResponse: - """ - Get Category Assets - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not category_id: - raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return self._get( - path_template("/v1/org/categories/{category_id}/assets", category_id=category_id), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=CategoryAssetsResponse, - ) - - def create_prompts( - self, - category_id: str, - *, - prompts: Iterable[category_create_prompts_params.Prompt], - dry_run: bool | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryCreatePromptsResponse: - """Create one or more prompts in a category. - - Topics and tags are auto-created if - referenced by name and not yet existing. Use dry_run to preview without - persisting. - - Args: - prompts: List of prompts to create. - - dry_run: When true, validate and preview changes without persisting them. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not category_id: - raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return self._post( - path_template("/v1/org/categories/{category_id}/prompts", category_id=category_id), - body=maybe_transform( - { - "prompts": prompts, - "dry_run": dry_run, - }, - category_create_prompts_params.CategoryCreatePromptsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=CategoryCreatePromptsResponse, - ) - - def get_category_personas( - self, - category_id: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryGetCategoryPersonasResponse: - """ - Get Category Personas - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not category_id: - raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return self._get( - path_template("/v1/org/categories/{category_id}/personas", category_id=category_id), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=CategoryGetCategoryPersonasResponse, - ) - - def get_citation_categories( - self, - category_id: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryGetCitationCategoriesResponse: - """ - Get the citation categories for a category: the built-in buckets plus any custom - categories. - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not category_id: - raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return self._get( - path_template("/v1/org/categories/{category_id}/citation-categories", category_id=category_id), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=CategoryGetCitationCategoriesResponse, - ) - - def prompts( - self, - category_id: str, - *, - analysis_type: List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]] | Omit = omit, - cursor: Optional[str] | Omit = omit, - limit: int | Omit = omit, - order_by: Literal["created_at", "prompt"] | Omit = omit, - order_dir: Literal["asc", "desc"] | Omit = omit, - persona_id: SequenceNotStr[str] | Omit = omit, - platform_id: SequenceNotStr[str] | Omit = omit, - prompt_type: List[Literal["visibility", "sentiment"]] | Omit = omit, - region_id: SequenceNotStr[str] | Omit = omit, - status: List[Literal["active", "disabled"]] | Omit = omit, - tag_id: SequenceNotStr[str] | Omit = omit, - topic_id: SequenceNotStr[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryPromptsResponse: - """ - Retrieve prompts in a category with optional filtering by type, topic, tag, - region, platform, or persona. Supports cursor-based pagination. - - Args: - analysis_type: Filter by analysis type (visibility, sentiment, accuracy). - - cursor: Pagination cursor from a previous response. - - limit: Maximum number of prompts to return. - - order_by: Field used to order prompts. - - order_dir: Sort direction for the selected order field. - - persona_id: Filter by persona IDs. - - platform_id: Filter by platform IDs. - - prompt_type: Deprecated. Use analysis_type instead. - - region_id: Filter by region IDs. - - status: Filter by prompt status. Defaults to `active` only. - - tag_id: Filter by tag IDs. - - topic_id: Filter by topic IDs. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not category_id: - raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return self._get( - path_template("/v1/org/categories/{category_id}/prompts", category_id=category_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "analysis_type": analysis_type, - "cursor": cursor, - "limit": limit, - "order_by": order_by, - "order_dir": order_dir, - "persona_id": persona_id, - "platform_id": platform_id, - "prompt_type": prompt_type, - "region_id": region_id, - "status": status, - "tag_id": tag_id, - "topic_id": topic_id, - }, - category_prompts_params.CategoryPromptsParams, - ), - ), - cast_to=CategoryPromptsResponse, - ) - - def retrieve_regions( - self, - category_id: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryRetrieveRegionsResponse: - """ - Get the regions for a specific category. - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not category_id: - raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return self._get( - path_template("/v1/org/categories/{category_id}/regions", category_id=category_id), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=CategoryRetrieveRegionsResponse, - ) - - def tags( - self, - category_id: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryTagsResponse: - """ - Get the tags for a specific category. - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not category_id: - raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return self._get( - path_template("/v1/org/categories/{category_id}/tags", category_id=category_id), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=CategoryTagsResponse, - ) - - def topics( - self, - category_id: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryTopicsResponse: - """ - Get the topics for a specific category. - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not category_id: - raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return self._get( - path_template("/v1/org/categories/{category_id}/topics", category_id=category_id), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=CategoryTopicsResponse, - ) - - def update_prompt_status( - self, - category_id: str, - *, - prompt_ids: SequenceNotStr[str], - status: Literal["active", "disabled", "deleted"], - dry_run: bool | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryUpdatePromptStatusResponse: - """Bulk-update the status of one or more prompts. - - Prompts already in the target - status are skipped. Use dry_run to preview without persisting. - - Status options: - - - 'active': Prompts will run daily. - - 'disabled': Prompts will not run moving forward, but historical data is - preserved. - - 'deleted': Prompts are deleted along with historical data - - Args: - prompt_ids: IDs of the prompts to update. - - status: Target status: 'active', 'disabled', or 'deleted'. - - dry_run: When true, validate and preview changes without persisting them. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not category_id: - raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return self._patch( - path_template("/v1/org/categories/{category_id}/prompts/status", category_id=category_id), - body=maybe_transform( - { - "prompt_ids": prompt_ids, - "status": status, - "dry_run": dry_run, - }, - category_update_prompt_status_params.CategoryUpdatePromptStatusParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=CategoryUpdatePromptStatusResponse, - ) - - def update_prompts( - self, - category_id: str, - *, - prompts: Iterable[category_update_prompts_params.Prompt], - dry_run: bool | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryUpdatePromptsResponse: - """Update one or more existing prompts. - - Only provided fields are changed. Dimension - fields (regions, platforms, personas, tags) replace the full set when provided. - Use dry_run to preview without persisting. - - Args: - prompts: List of prompt updates. Each entry must include an `id` and at least one field - to change. - - dry_run: When true, validate and preview changes without persisting them. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not category_id: - raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return self._patch( - path_template("/v1/org/categories/{category_id}/prompts", category_id=category_id), - body=maybe_transform( - { - "prompts": prompts, - "dry_run": dry_run, - }, - category_update_prompts_params.CategoryUpdatePromptsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=CategoryUpdatePromptsResponse, - ) - - -class AsyncCategoriesResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncCategoriesResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return AsyncCategoriesResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncCategoriesResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return AsyncCategoriesResourceWithStreamingResponse(self) - - async def list( - self, - *, - organization_ids: Optional[SequenceNotStr[str]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryListResponse: - """ - Get the organization categories, one row per (category, organization) pair. - - Args: - organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the - parameter to target multiple orgs (e.g. - `?organization_ids=&organization_ids=`). Omit to return data from - every organization the caller has access to. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._get( - "/v1/org/categories", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - {"organization_ids": organization_ids}, category_list_params.CategoryListParams - ), - ), - cast_to=CategoryListResponse, - ) - - async def assets( - self, - category_id: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryAssetsResponse: - """ - Get Category Assets - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not category_id: - raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return await self._get( - path_template("/v1/org/categories/{category_id}/assets", category_id=category_id), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=CategoryAssetsResponse, - ) - - async def create_prompts( - self, - category_id: str, - *, - prompts: Iterable[category_create_prompts_params.Prompt], - dry_run: bool | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryCreatePromptsResponse: - """Create one or more prompts in a category. - - Topics and tags are auto-created if - referenced by name and not yet existing. Use dry_run to preview without - persisting. - - Args: - prompts: List of prompts to create. - - dry_run: When true, validate and preview changes without persisting them. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not category_id: - raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return await self._post( - path_template("/v1/org/categories/{category_id}/prompts", category_id=category_id), - body=await async_maybe_transform( - { - "prompts": prompts, - "dry_run": dry_run, - }, - category_create_prompts_params.CategoryCreatePromptsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=CategoryCreatePromptsResponse, - ) - - async def get_category_personas( - self, - category_id: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryGetCategoryPersonasResponse: - """ - Get Category Personas - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not category_id: - raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return await self._get( - path_template("/v1/org/categories/{category_id}/personas", category_id=category_id), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=CategoryGetCategoryPersonasResponse, - ) - - async def get_citation_categories( - self, - category_id: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryGetCitationCategoriesResponse: - """ - Get the citation categories for a category: the built-in buckets plus any custom - categories. - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not category_id: - raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return await self._get( - path_template("/v1/org/categories/{category_id}/citation-categories", category_id=category_id), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=CategoryGetCitationCategoriesResponse, - ) - - async def prompts( - self, - category_id: str, - *, - analysis_type: List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]] | Omit = omit, - cursor: Optional[str] | Omit = omit, - limit: int | Omit = omit, - order_by: Literal["created_at", "prompt"] | Omit = omit, - order_dir: Literal["asc", "desc"] | Omit = omit, - persona_id: SequenceNotStr[str] | Omit = omit, - platform_id: SequenceNotStr[str] | Omit = omit, - prompt_type: List[Literal["visibility", "sentiment"]] | Omit = omit, - region_id: SequenceNotStr[str] | Omit = omit, - status: List[Literal["active", "disabled"]] | Omit = omit, - tag_id: SequenceNotStr[str] | Omit = omit, - topic_id: SequenceNotStr[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryPromptsResponse: - """ - Retrieve prompts in a category with optional filtering by type, topic, tag, - region, platform, or persona. Supports cursor-based pagination. - - Args: - analysis_type: Filter by analysis type (visibility, sentiment, accuracy). - - cursor: Pagination cursor from a previous response. - - limit: Maximum number of prompts to return. - - order_by: Field used to order prompts. - - order_dir: Sort direction for the selected order field. - - persona_id: Filter by persona IDs. - - platform_id: Filter by platform IDs. - - prompt_type: Deprecated. Use analysis_type instead. - - region_id: Filter by region IDs. - - status: Filter by prompt status. Defaults to `active` only. - - tag_id: Filter by tag IDs. - - topic_id: Filter by topic IDs. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not category_id: - raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return await self._get( - path_template("/v1/org/categories/{category_id}/prompts", category_id=category_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - { - "analysis_type": analysis_type, - "cursor": cursor, - "limit": limit, - "order_by": order_by, - "order_dir": order_dir, - "persona_id": persona_id, - "platform_id": platform_id, - "prompt_type": prompt_type, - "region_id": region_id, - "status": status, - "tag_id": tag_id, - "topic_id": topic_id, - }, - category_prompts_params.CategoryPromptsParams, - ), - ), - cast_to=CategoryPromptsResponse, - ) - - async def retrieve_regions( - self, - category_id: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryRetrieveRegionsResponse: - """ - Get the regions for a specific category. - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not category_id: - raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return await self._get( - path_template("/v1/org/categories/{category_id}/regions", category_id=category_id), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=CategoryRetrieveRegionsResponse, - ) - - async def tags( - self, - category_id: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryTagsResponse: - """ - Get the tags for a specific category. - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not category_id: - raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return await self._get( - path_template("/v1/org/categories/{category_id}/tags", category_id=category_id), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=CategoryTagsResponse, - ) - - async def topics( - self, - category_id: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryTopicsResponse: - """ - Get the topics for a specific category. - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not category_id: - raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return await self._get( - path_template("/v1/org/categories/{category_id}/topics", category_id=category_id), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=CategoryTopicsResponse, - ) - - async def update_prompt_status( - self, - category_id: str, - *, - prompt_ids: SequenceNotStr[str], - status: Literal["active", "disabled", "deleted"], - dry_run: bool | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryUpdatePromptStatusResponse: - """Bulk-update the status of one or more prompts. - - Prompts already in the target - status are skipped. Use dry_run to preview without persisting. - - Status options: - - - 'active': Prompts will run daily. - - 'disabled': Prompts will not run moving forward, but historical data is - preserved. - - 'deleted': Prompts are deleted along with historical data - - Args: - prompt_ids: IDs of the prompts to update. - - status: Target status: 'active', 'disabled', or 'deleted'. - - dry_run: When true, validate and preview changes without persisting them. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not category_id: - raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return await self._patch( - path_template("/v1/org/categories/{category_id}/prompts/status", category_id=category_id), - body=await async_maybe_transform( - { - "prompt_ids": prompt_ids, - "status": status, - "dry_run": dry_run, - }, - category_update_prompt_status_params.CategoryUpdatePromptStatusParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=CategoryUpdatePromptStatusResponse, - ) - - async def update_prompts( - self, - category_id: str, - *, - prompts: Iterable[category_update_prompts_params.Prompt], - dry_run: bool | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryUpdatePromptsResponse: - """Update one or more existing prompts. - - Only provided fields are changed. Dimension - fields (regions, platforms, personas, tags) replace the full set when provided. - Use dry_run to preview without persisting. - - Args: - prompts: List of prompt updates. Each entry must include an `id` and at least one field - to change. - - dry_run: When true, validate and preview changes without persisting them. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not category_id: - raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return await self._patch( - path_template("/v1/org/categories/{category_id}/prompts", category_id=category_id), - body=await async_maybe_transform( - { - "prompts": prompts, - "dry_run": dry_run, - }, - category_update_prompts_params.CategoryUpdatePromptsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=CategoryUpdatePromptsResponse, - ) - - -class CategoriesResourceWithRawResponse: - def __init__(self, categories: CategoriesResource) -> None: - self._categories = categories - - self.list = to_raw_response_wrapper( - categories.list, - ) - self.assets = to_raw_response_wrapper( - categories.assets, - ) - self.create_prompts = to_raw_response_wrapper( - categories.create_prompts, - ) - self.get_category_personas = to_raw_response_wrapper( - categories.get_category_personas, - ) - self.get_citation_categories = to_raw_response_wrapper( - categories.get_citation_categories, - ) - self.prompts = to_raw_response_wrapper( - categories.prompts, - ) - self.retrieve_regions = to_raw_response_wrapper( - categories.retrieve_regions, - ) - self.tags = to_raw_response_wrapper( - categories.tags, - ) - self.topics = to_raw_response_wrapper( - categories.topics, - ) - self.update_prompt_status = to_raw_response_wrapper( - categories.update_prompt_status, - ) - self.update_prompts = to_raw_response_wrapper( - categories.update_prompts, - ) - - -class AsyncCategoriesResourceWithRawResponse: - def __init__(self, categories: AsyncCategoriesResource) -> None: - self._categories = categories - - self.list = async_to_raw_response_wrapper( - categories.list, - ) - self.assets = async_to_raw_response_wrapper( - categories.assets, - ) - self.create_prompts = async_to_raw_response_wrapper( - categories.create_prompts, - ) - self.get_category_personas = async_to_raw_response_wrapper( - categories.get_category_personas, - ) - self.get_citation_categories = async_to_raw_response_wrapper( - categories.get_citation_categories, - ) - self.prompts = async_to_raw_response_wrapper( - categories.prompts, - ) - self.retrieve_regions = async_to_raw_response_wrapper( - categories.retrieve_regions, - ) - self.tags = async_to_raw_response_wrapper( - categories.tags, - ) - self.topics = async_to_raw_response_wrapper( - categories.topics, - ) - self.update_prompt_status = async_to_raw_response_wrapper( - categories.update_prompt_status, - ) - self.update_prompts = async_to_raw_response_wrapper( - categories.update_prompts, - ) - - -class CategoriesResourceWithStreamingResponse: - def __init__(self, categories: CategoriesResource) -> None: - self._categories = categories - - self.list = to_streamed_response_wrapper( - categories.list, - ) - self.assets = to_streamed_response_wrapper( - categories.assets, - ) - self.create_prompts = to_streamed_response_wrapper( - categories.create_prompts, - ) - self.get_category_personas = to_streamed_response_wrapper( - categories.get_category_personas, - ) - self.get_citation_categories = to_streamed_response_wrapper( - categories.get_citation_categories, - ) - self.prompts = to_streamed_response_wrapper( - categories.prompts, - ) - self.retrieve_regions = to_streamed_response_wrapper( - categories.retrieve_regions, - ) - self.tags = to_streamed_response_wrapper( - categories.tags, - ) - self.topics = to_streamed_response_wrapper( - categories.topics, - ) - self.update_prompt_status = to_streamed_response_wrapper( - categories.update_prompt_status, - ) - self.update_prompts = to_streamed_response_wrapper( - categories.update_prompts, - ) - - -class AsyncCategoriesResourceWithStreamingResponse: - def __init__(self, categories: AsyncCategoriesResource) -> None: - self._categories = categories - - self.list = async_to_streamed_response_wrapper( - categories.list, - ) - self.assets = async_to_streamed_response_wrapper( - categories.assets, - ) - self.create_prompts = async_to_streamed_response_wrapper( - categories.create_prompts, - ) - self.get_category_personas = async_to_streamed_response_wrapper( - categories.get_category_personas, - ) - self.get_citation_categories = async_to_streamed_response_wrapper( - categories.get_citation_categories, - ) - self.prompts = async_to_streamed_response_wrapper( - categories.prompts, - ) - self.retrieve_regions = async_to_streamed_response_wrapper( - categories.retrieve_regions, - ) - self.tags = async_to_streamed_response_wrapper( - categories.tags, - ) - self.topics = async_to_streamed_response_wrapper( - categories.topics, - ) - self.update_prompt_status = async_to_streamed_response_wrapper( - categories.update_prompt_status, - ) - self.update_prompts = async_to_streamed_response_wrapper( - categories.update_prompts, - ) diff --git a/src/profound/resources/projects/__init__.py b/src/profound/resources/projects/__init__.py deleted file mode 100644 index a400cf64..00000000 --- a/src/profound/resources/projects/__init__.py +++ /dev/null @@ -1,47 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from .tasks import ( - TasksResource, - AsyncTasksResource, - TasksResourceWithRawResponse, - AsyncTasksResourceWithRawResponse, - TasksResourceWithStreamingResponse, - AsyncTasksResourceWithStreamingResponse, -) -from .projects import ( - ProjectsResource, - AsyncProjectsResource, - ProjectsResourceWithRawResponse, - AsyncProjectsResourceWithRawResponse, - ProjectsResourceWithStreamingResponse, - AsyncProjectsResourceWithStreamingResponse, -) -from .generations import ( - GenerationsResource, - AsyncGenerationsResource, - GenerationsResourceWithRawResponse, - AsyncGenerationsResourceWithRawResponse, - GenerationsResourceWithStreamingResponse, - AsyncGenerationsResourceWithStreamingResponse, -) - -__all__ = [ - "GenerationsResource", - "AsyncGenerationsResource", - "GenerationsResourceWithRawResponse", - "AsyncGenerationsResourceWithRawResponse", - "GenerationsResourceWithStreamingResponse", - "AsyncGenerationsResourceWithStreamingResponse", - "TasksResource", - "AsyncTasksResource", - "TasksResourceWithRawResponse", - "AsyncTasksResourceWithRawResponse", - "TasksResourceWithStreamingResponse", - "AsyncTasksResourceWithStreamingResponse", - "ProjectsResource", - "AsyncProjectsResource", - "ProjectsResourceWithRawResponse", - "AsyncProjectsResourceWithRawResponse", - "ProjectsResourceWithStreamingResponse", - "AsyncProjectsResourceWithStreamingResponse", -] diff --git a/src/profound/resources/projects/generations.py b/src/profound/resources/projects/generations.py deleted file mode 100644 index 6b7eee3a..00000000 --- a/src/profound/resources/projects/generations.py +++ /dev/null @@ -1,302 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional - -import httpx - -from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from ..._utils import path_template, maybe_transform, async_maybe_transform -from ..._compat import cached_property -from ..._resource import SyncAPIResource, AsyncAPIResource -from ..._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from ..._base_client import make_request_options -from ...types.projects import generation_list_params, generation_retrieve_params -from ...types.projects.generation_list_response import GenerationListResponse -from ...types.projects.generation_retrieve_response import GenerationRetrieveResponse - -__all__ = ["GenerationsResource", "AsyncGenerationsResource"] - - -class GenerationsResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> GenerationsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return GenerationsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> GenerationsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return GenerationsResourceWithStreamingResponse(self) - - def retrieve( - self, - run_id: str, - *, - category_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> GenerationRetrieveResponse: - """ - Get Project Generation Status - - Args: - run_id: Unique project generation run ID. - - category_id: Category that owns the project. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not run_id: - raise ValueError(f"Expected a non-empty value for `run_id` but received {run_id!r}") - return self._get( - path_template("/v1/projects/generations/{run_id}", run_id=run_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - {"category_id": category_id}, generation_retrieve_params.GenerationRetrieveParams - ), - ), - cast_to=GenerationRetrieveResponse, - ) - - def list( - self, - *, - category_id: str, - limit: int | Omit = omit, - offset: int | Omit = omit, - status: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> GenerationListResponse: - """ - List Project Generations - - Args: - category_id: Category that owns the project. - - status: Comma-separated generation statuses: queued, running, completed, failed. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._get( - "/v1/projects/generations", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "category_id": category_id, - "limit": limit, - "offset": offset, - "status": status, - }, - generation_list_params.GenerationListParams, - ), - ), - cast_to=GenerationListResponse, - ) - - -class AsyncGenerationsResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncGenerationsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return AsyncGenerationsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncGenerationsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return AsyncGenerationsResourceWithStreamingResponse(self) - - async def retrieve( - self, - run_id: str, - *, - category_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> GenerationRetrieveResponse: - """ - Get Project Generation Status - - Args: - run_id: Unique project generation run ID. - - category_id: Category that owns the project. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not run_id: - raise ValueError(f"Expected a non-empty value for `run_id` but received {run_id!r}") - return await self._get( - path_template("/v1/projects/generations/{run_id}", run_id=run_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - {"category_id": category_id}, generation_retrieve_params.GenerationRetrieveParams - ), - ), - cast_to=GenerationRetrieveResponse, - ) - - async def list( - self, - *, - category_id: str, - limit: int | Omit = omit, - offset: int | Omit = omit, - status: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> GenerationListResponse: - """ - List Project Generations - - Args: - category_id: Category that owns the project. - - status: Comma-separated generation statuses: queued, running, completed, failed. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._get( - "/v1/projects/generations", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - { - "category_id": category_id, - "limit": limit, - "offset": offset, - "status": status, - }, - generation_list_params.GenerationListParams, - ), - ), - cast_to=GenerationListResponse, - ) - - -class GenerationsResourceWithRawResponse: - def __init__(self, generations: GenerationsResource) -> None: - self._generations = generations - - self.retrieve = to_raw_response_wrapper( - generations.retrieve, - ) - self.list = to_raw_response_wrapper( - generations.list, - ) - - -class AsyncGenerationsResourceWithRawResponse: - def __init__(self, generations: AsyncGenerationsResource) -> None: - self._generations = generations - - self.retrieve = async_to_raw_response_wrapper( - generations.retrieve, - ) - self.list = async_to_raw_response_wrapper( - generations.list, - ) - - -class GenerationsResourceWithStreamingResponse: - def __init__(self, generations: GenerationsResource) -> None: - self._generations = generations - - self.retrieve = to_streamed_response_wrapper( - generations.retrieve, - ) - self.list = to_streamed_response_wrapper( - generations.list, - ) - - -class AsyncGenerationsResourceWithStreamingResponse: - def __init__(self, generations: AsyncGenerationsResource) -> None: - self._generations = generations - - self.retrieve = async_to_streamed_response_wrapper( - generations.retrieve, - ) - self.list = async_to_streamed_response_wrapper( - generations.list, - ) diff --git a/src/profound/resources/projects/projects.py b/src/profound/resources/projects/projects.py deleted file mode 100644 index db95ff36..00000000 --- a/src/profound/resources/projects/projects.py +++ /dev/null @@ -1,884 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Iterable, Optional - -import httpx - -from .tasks import ( - TasksResource, - AsyncTasksResource, - TasksResourceWithRawResponse, - AsyncTasksResourceWithRawResponse, - TasksResourceWithStreamingResponse, - AsyncTasksResourceWithStreamingResponse, -) -from ...types import ( - project_list_params, - project_create_params, - project_delete_params, - project_archive_params, - project_retrieve_params, - project_unarchive_params, - project_get_status_params, -) -from ..._types import Body, Omit, Query, Headers, NoneType, NotGiven, SequenceNotStr, omit, not_given -from ..._utils import path_template, maybe_transform, async_maybe_transform -from ..._compat import cached_property -from ..._resource import SyncAPIResource, AsyncAPIResource -from ..._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from .generations import ( - GenerationsResource, - AsyncGenerationsResource, - GenerationsResourceWithRawResponse, - AsyncGenerationsResourceWithRawResponse, - GenerationsResourceWithStreamingResponse, - AsyncGenerationsResourceWithStreamingResponse, -) -from ..._base_client import make_request_options -from ...types.project_list_response import ProjectListResponse -from ...types.project_create_response import ProjectCreateResponse -from ...types.project_archive_response import ProjectArchiveResponse -from ...types.project_retrieve_response import ProjectRetrieveResponse -from ...types.project_unarchive_response import ProjectUnarchiveResponse -from ...types.project_get_status_response import ProjectGetStatusResponse - -__all__ = ["ProjectsResource", "AsyncProjectsResource"] - - -class ProjectsResource(SyncAPIResource): - @cached_property - def generations(self) -> GenerationsResource: - return GenerationsResource(self._client) - - @cached_property - def tasks(self) -> TasksResource: - return TasksResource(self._client) - - @cached_property - def with_raw_response(self) -> ProjectsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return ProjectsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> ProjectsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return ProjectsResourceWithStreamingResponse(self) - - def create( - self, - *, - category_id: str, - attachments: Iterable[project_create_params.Attachment] | Omit = omit, - focus: Optional[str] | Omit = omit, - generation_context: Optional[project_create_params.GenerationContext] | Omit = omit, - project_name: Optional[str] | Omit = omit, - title: Optional[str] | Omit = omit, - topics: SequenceNotStr[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ProjectCreateResponse: - """ - Create Project - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v1/projects", - body=maybe_transform( - { - "category_id": category_id, - "attachments": attachments, - "focus": focus, - "generation_context": generation_context, - "project_name": project_name, - "title": title, - "topics": topics, - }, - project_create_params.ProjectCreateParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ProjectCreateResponse, - ) - - def retrieve( - self, - project_id: str, - *, - category_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ProjectRetrieveResponse: - """ - Get Project - - Args: - project_id: Unique project ID. - - category_id: Category that owns the project. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not project_id: - raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}") - return self._get( - path_template("/v1/projects/{project_id}", project_id=project_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform({"category_id": category_id}, project_retrieve_params.ProjectRetrieveParams), - ), - cast_to=ProjectRetrieveResponse, - ) - - def list( - self, - *, - category_id: str, - limit: int | Omit = omit, - offset: int | Omit = omit, - status: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ProjectListResponse: - """ - List Projects - - Args: - category_id: Category that owns the project. - - status: Comma-separated project statuses: suggested, tracked, retired. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._get( - "/v1/projects", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "category_id": category_id, - "limit": limit, - "offset": offset, - "status": status, - }, - project_list_params.ProjectListParams, - ), - ), - cast_to=ProjectListResponse, - ) - - def delete( - self, - project_id: str, - *, - category_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> None: - """ - Delete Project - - Args: - project_id: Unique project ID. - - category_id: Category that owns the project. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not project_id: - raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}") - extra_headers = {"Accept": "*/*", **(extra_headers or {})} - return self._delete( - path_template("/v1/projects/{project_id}", project_id=project_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform({"category_id": category_id}, project_delete_params.ProjectDeleteParams), - ), - cast_to=NoneType, - ) - - def archive( - self, - project_id: str, - *, - category_id: str, - reason: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ProjectArchiveResponse: - """ - Archive Project - - Args: - project_id: Unique project ID. - - category_id: Category that owns the project. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not project_id: - raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}") - return self._post( - path_template("/v1/projects/{project_id}/archive", project_id=project_id), - body=maybe_transform({"reason": reason}, project_archive_params.ProjectArchiveParams), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform({"category_id": category_id}, project_archive_params.ProjectArchiveParams), - ), - cast_to=ProjectArchiveResponse, - ) - - def get_status( - self, - project_id: str, - *, - category_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ProjectGetStatusResponse: - """ - Get Project Status - - Args: - project_id: Unique project ID. - - category_id: Category that owns the project. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not project_id: - raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}") - return self._get( - path_template("/v1/projects/{project_id}/status", project_id=project_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform({"category_id": category_id}, project_get_status_params.ProjectGetStatusParams), - ), - cast_to=ProjectGetStatusResponse, - ) - - def unarchive( - self, - project_id: str, - *, - category_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ProjectUnarchiveResponse: - """ - Unarchive Project - - Args: - project_id: Unique project ID. - - category_id: Category that owns the project. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not project_id: - raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}") - return self._post( - path_template("/v1/projects/{project_id}/unarchive", project_id=project_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform({"category_id": category_id}, project_unarchive_params.ProjectUnarchiveParams), - ), - cast_to=ProjectUnarchiveResponse, - ) - - -class AsyncProjectsResource(AsyncAPIResource): - @cached_property - def generations(self) -> AsyncGenerationsResource: - return AsyncGenerationsResource(self._client) - - @cached_property - def tasks(self) -> AsyncTasksResource: - return AsyncTasksResource(self._client) - - @cached_property - def with_raw_response(self) -> AsyncProjectsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return AsyncProjectsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncProjectsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return AsyncProjectsResourceWithStreamingResponse(self) - - async def create( - self, - *, - category_id: str, - attachments: Iterable[project_create_params.Attachment] | Omit = omit, - focus: Optional[str] | Omit = omit, - generation_context: Optional[project_create_params.GenerationContext] | Omit = omit, - project_name: Optional[str] | Omit = omit, - title: Optional[str] | Omit = omit, - topics: SequenceNotStr[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ProjectCreateResponse: - """ - Create Project - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v1/projects", - body=await async_maybe_transform( - { - "category_id": category_id, - "attachments": attachments, - "focus": focus, - "generation_context": generation_context, - "project_name": project_name, - "title": title, - "topics": topics, - }, - project_create_params.ProjectCreateParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ProjectCreateResponse, - ) - - async def retrieve( - self, - project_id: str, - *, - category_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ProjectRetrieveResponse: - """ - Get Project - - Args: - project_id: Unique project ID. - - category_id: Category that owns the project. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not project_id: - raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}") - return await self._get( - path_template("/v1/projects/{project_id}", project_id=project_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - {"category_id": category_id}, project_retrieve_params.ProjectRetrieveParams - ), - ), - cast_to=ProjectRetrieveResponse, - ) - - async def list( - self, - *, - category_id: str, - limit: int | Omit = omit, - offset: int | Omit = omit, - status: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ProjectListResponse: - """ - List Projects - - Args: - category_id: Category that owns the project. - - status: Comma-separated project statuses: suggested, tracked, retired. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._get( - "/v1/projects", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - { - "category_id": category_id, - "limit": limit, - "offset": offset, - "status": status, - }, - project_list_params.ProjectListParams, - ), - ), - cast_to=ProjectListResponse, - ) - - async def delete( - self, - project_id: str, - *, - category_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> None: - """ - Delete Project - - Args: - project_id: Unique project ID. - - category_id: Category that owns the project. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not project_id: - raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}") - extra_headers = {"Accept": "*/*", **(extra_headers or {})} - return await self._delete( - path_template("/v1/projects/{project_id}", project_id=project_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - {"category_id": category_id}, project_delete_params.ProjectDeleteParams - ), - ), - cast_to=NoneType, - ) - - async def archive( - self, - project_id: str, - *, - category_id: str, - reason: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ProjectArchiveResponse: - """ - Archive Project - - Args: - project_id: Unique project ID. - - category_id: Category that owns the project. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not project_id: - raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}") - return await self._post( - path_template("/v1/projects/{project_id}/archive", project_id=project_id), - body=await async_maybe_transform({"reason": reason}, project_archive_params.ProjectArchiveParams), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - {"category_id": category_id}, project_archive_params.ProjectArchiveParams - ), - ), - cast_to=ProjectArchiveResponse, - ) - - async def get_status( - self, - project_id: str, - *, - category_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ProjectGetStatusResponse: - """ - Get Project Status - - Args: - project_id: Unique project ID. - - category_id: Category that owns the project. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not project_id: - raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}") - return await self._get( - path_template("/v1/projects/{project_id}/status", project_id=project_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - {"category_id": category_id}, project_get_status_params.ProjectGetStatusParams - ), - ), - cast_to=ProjectGetStatusResponse, - ) - - async def unarchive( - self, - project_id: str, - *, - category_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ProjectUnarchiveResponse: - """ - Unarchive Project - - Args: - project_id: Unique project ID. - - category_id: Category that owns the project. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not project_id: - raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}") - return await self._post( - path_template("/v1/projects/{project_id}/unarchive", project_id=project_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - {"category_id": category_id}, project_unarchive_params.ProjectUnarchiveParams - ), - ), - cast_to=ProjectUnarchiveResponse, - ) - - -class ProjectsResourceWithRawResponse: - def __init__(self, projects: ProjectsResource) -> None: - self._projects = projects - - self.create = to_raw_response_wrapper( - projects.create, - ) - self.retrieve = to_raw_response_wrapper( - projects.retrieve, - ) - self.list = to_raw_response_wrapper( - projects.list, - ) - self.delete = to_raw_response_wrapper( - projects.delete, - ) - self.archive = to_raw_response_wrapper( - projects.archive, - ) - self.get_status = to_raw_response_wrapper( - projects.get_status, - ) - self.unarchive = to_raw_response_wrapper( - projects.unarchive, - ) - - @cached_property - def generations(self) -> GenerationsResourceWithRawResponse: - return GenerationsResourceWithRawResponse(self._projects.generations) - - @cached_property - def tasks(self) -> TasksResourceWithRawResponse: - return TasksResourceWithRawResponse(self._projects.tasks) - - -class AsyncProjectsResourceWithRawResponse: - def __init__(self, projects: AsyncProjectsResource) -> None: - self._projects = projects - - self.create = async_to_raw_response_wrapper( - projects.create, - ) - self.retrieve = async_to_raw_response_wrapper( - projects.retrieve, - ) - self.list = async_to_raw_response_wrapper( - projects.list, - ) - self.delete = async_to_raw_response_wrapper( - projects.delete, - ) - self.archive = async_to_raw_response_wrapper( - projects.archive, - ) - self.get_status = async_to_raw_response_wrapper( - projects.get_status, - ) - self.unarchive = async_to_raw_response_wrapper( - projects.unarchive, - ) - - @cached_property - def generations(self) -> AsyncGenerationsResourceWithRawResponse: - return AsyncGenerationsResourceWithRawResponse(self._projects.generations) - - @cached_property - def tasks(self) -> AsyncTasksResourceWithRawResponse: - return AsyncTasksResourceWithRawResponse(self._projects.tasks) - - -class ProjectsResourceWithStreamingResponse: - def __init__(self, projects: ProjectsResource) -> None: - self._projects = projects - - self.create = to_streamed_response_wrapper( - projects.create, - ) - self.retrieve = to_streamed_response_wrapper( - projects.retrieve, - ) - self.list = to_streamed_response_wrapper( - projects.list, - ) - self.delete = to_streamed_response_wrapper( - projects.delete, - ) - self.archive = to_streamed_response_wrapper( - projects.archive, - ) - self.get_status = to_streamed_response_wrapper( - projects.get_status, - ) - self.unarchive = to_streamed_response_wrapper( - projects.unarchive, - ) - - @cached_property - def generations(self) -> GenerationsResourceWithStreamingResponse: - return GenerationsResourceWithStreamingResponse(self._projects.generations) - - @cached_property - def tasks(self) -> TasksResourceWithStreamingResponse: - return TasksResourceWithStreamingResponse(self._projects.tasks) - - -class AsyncProjectsResourceWithStreamingResponse: - def __init__(self, projects: AsyncProjectsResource) -> None: - self._projects = projects - - self.create = async_to_streamed_response_wrapper( - projects.create, - ) - self.retrieve = async_to_streamed_response_wrapper( - projects.retrieve, - ) - self.list = async_to_streamed_response_wrapper( - projects.list, - ) - self.delete = async_to_streamed_response_wrapper( - projects.delete, - ) - self.archive = async_to_streamed_response_wrapper( - projects.archive, - ) - self.get_status = async_to_streamed_response_wrapper( - projects.get_status, - ) - self.unarchive = async_to_streamed_response_wrapper( - projects.unarchive, - ) - - @cached_property - def generations(self) -> AsyncGenerationsResourceWithStreamingResponse: - return AsyncGenerationsResourceWithStreamingResponse(self._projects.generations) - - @cached_property - def tasks(self) -> AsyncTasksResourceWithStreamingResponse: - return AsyncTasksResourceWithStreamingResponse(self._projects.tasks) diff --git a/src/profound/resources/projects/tasks.py b/src/profound/resources/projects/tasks.py deleted file mode 100644 index 9c7c8274..00000000 --- a/src/profound/resources/projects/tasks.py +++ /dev/null @@ -1,829 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import Literal - -import httpx - -from ..._types import Body, Omit, Query, Headers, NoneType, NotGiven, omit, not_given -from ..._utils import path_template, maybe_transform, async_maybe_transform -from ..._compat import cached_property -from ..._resource import SyncAPIResource, AsyncAPIResource -from ..._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from ..._base_client import make_request_options -from ...types.projects import ( - task_list_params, - task_create_params, - task_delete_params, - task_update_params, - task_retrieve_params, - task_update_status_params, -) -from ...types.projects.task_list_response import TaskListResponse -from ...types.projects.task_create_response import TaskCreateResponse -from ...types.projects.task_update_response import TaskUpdateResponse -from ...types.projects.task_retrieve_response import TaskRetrieveResponse -from ...types.projects.task_update_status_response import TaskUpdateStatusResponse - -__all__ = ["TasksResource", "AsyncTasksResource"] - - -class TasksResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> TasksResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return TasksResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> TasksResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return TasksResourceWithStreamingResponse(self) - - def create( - self, - project_id: str, - *, - category_id: str, - title: str, - brief: Optional[str] | Omit = omit, - impact: Optional[int] | Omit = omit, - position: Optional[int] | Omit = omit, - reference_label: Optional[str] | Omit = omit, - reference_url: Optional[str] | Omit = omit, - summary: Optional[str] | Omit = omit, - topic: Optional[str] | Omit = omit, - type: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> TaskCreateResponse: - """ - Create Project Task - - Args: - project_id: Unique project ID. - - category_id: Category that owns the project. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not project_id: - raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}") - return self._post( - path_template("/v1/projects/{project_id}/tasks", project_id=project_id), - body=maybe_transform( - { - "title": title, - "brief": brief, - "impact": impact, - "position": position, - "reference_label": reference_label, - "reference_url": reference_url, - "summary": summary, - "topic": topic, - "type": type, - }, - task_create_params.TaskCreateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform({"category_id": category_id}, task_create_params.TaskCreateParams), - ), - cast_to=TaskCreateResponse, - ) - - def retrieve( - self, - task_id: str, - *, - project_id: str, - category_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> TaskRetrieveResponse: - """ - Get Project Task - - Args: - project_id: Unique project ID. - - task_id: Unique project task ID. - - category_id: Category that owns the project. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not project_id: - raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}") - if not task_id: - raise ValueError(f"Expected a non-empty value for `task_id` but received {task_id!r}") - return self._get( - path_template("/v1/projects/{project_id}/tasks/{task_id}", project_id=project_id, task_id=task_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform({"category_id": category_id}, task_retrieve_params.TaskRetrieveParams), - ), - cast_to=TaskRetrieveResponse, - ) - - def update( - self, - task_id: str, - *, - project_id: str, - category_id: str, - brief: Optional[str] | Omit = omit, - impact: Optional[int] | Omit = omit, - reference_label: Optional[str] | Omit = omit, - reference_url: Optional[str] | Omit = omit, - summary: Optional[str] | Omit = omit, - title: Optional[str] | Omit = omit, - topic: Optional[str] | Omit = omit, - type: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> TaskUpdateResponse: - """ - Update Project Task - - Args: - project_id: Unique project ID. - - task_id: Unique project task ID. - - category_id: Category that owns the project. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not project_id: - raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}") - if not task_id: - raise ValueError(f"Expected a non-empty value for `task_id` but received {task_id!r}") - return self._patch( - path_template("/v1/projects/{project_id}/tasks/{task_id}", project_id=project_id, task_id=task_id), - body=maybe_transform( - { - "brief": brief, - "impact": impact, - "reference_label": reference_label, - "reference_url": reference_url, - "summary": summary, - "title": title, - "topic": topic, - "type": type, - }, - task_update_params.TaskUpdateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform({"category_id": category_id}, task_update_params.TaskUpdateParams), - ), - cast_to=TaskUpdateResponse, - ) - - def list( - self, - project_id: str, - *, - category_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> TaskListResponse: - """ - List Project Tasks - - Args: - project_id: Unique project ID. - - category_id: Category that owns the project. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not project_id: - raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}") - return self._get( - path_template("/v1/projects/{project_id}/tasks", project_id=project_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform({"category_id": category_id}, task_list_params.TaskListParams), - ), - cast_to=TaskListResponse, - ) - - def delete( - self, - task_id: str, - *, - project_id: str, - category_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> None: - """ - Delete Project Task - - Args: - project_id: Unique project ID. - - task_id: Unique project task ID. - - category_id: Category that owns the project. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not project_id: - raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}") - if not task_id: - raise ValueError(f"Expected a non-empty value for `task_id` but received {task_id!r}") - extra_headers = {"Accept": "*/*", **(extra_headers or {})} - return self._delete( - path_template("/v1/projects/{project_id}/tasks/{task_id}", project_id=project_id, task_id=task_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform({"category_id": category_id}, task_delete_params.TaskDeleteParams), - ), - cast_to=NoneType, - ) - - def update_status( - self, - task_id: str, - *, - project_id: str, - category_id: str, - status: Literal["not_started", "in_progress", "done", "abandoned"], - note: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> TaskUpdateStatusResponse: - """ - Update Project Task Status - - Args: - project_id: Unique project ID. - - task_id: Unique project task ID. - - category_id: Category that owns the project. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not project_id: - raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}") - if not task_id: - raise ValueError(f"Expected a non-empty value for `task_id` but received {task_id!r}") - return self._post( - path_template("/v1/projects/{project_id}/tasks/{task_id}/status", project_id=project_id, task_id=task_id), - body=maybe_transform( - { - "status": status, - "note": note, - }, - task_update_status_params.TaskUpdateStatusParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform({"category_id": category_id}, task_update_status_params.TaskUpdateStatusParams), - ), - cast_to=TaskUpdateStatusResponse, - ) - - -class AsyncTasksResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncTasksResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return AsyncTasksResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncTasksResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return AsyncTasksResourceWithStreamingResponse(self) - - async def create( - self, - project_id: str, - *, - category_id: str, - title: str, - brief: Optional[str] | Omit = omit, - impact: Optional[int] | Omit = omit, - position: Optional[int] | Omit = omit, - reference_label: Optional[str] | Omit = omit, - reference_url: Optional[str] | Omit = omit, - summary: Optional[str] | Omit = omit, - topic: Optional[str] | Omit = omit, - type: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> TaskCreateResponse: - """ - Create Project Task - - Args: - project_id: Unique project ID. - - category_id: Category that owns the project. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not project_id: - raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}") - return await self._post( - path_template("/v1/projects/{project_id}/tasks", project_id=project_id), - body=await async_maybe_transform( - { - "title": title, - "brief": brief, - "impact": impact, - "position": position, - "reference_label": reference_label, - "reference_url": reference_url, - "summary": summary, - "topic": topic, - "type": type, - }, - task_create_params.TaskCreateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform({"category_id": category_id}, task_create_params.TaskCreateParams), - ), - cast_to=TaskCreateResponse, - ) - - async def retrieve( - self, - task_id: str, - *, - project_id: str, - category_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> TaskRetrieveResponse: - """ - Get Project Task - - Args: - project_id: Unique project ID. - - task_id: Unique project task ID. - - category_id: Category that owns the project. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not project_id: - raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}") - if not task_id: - raise ValueError(f"Expected a non-empty value for `task_id` but received {task_id!r}") - return await self._get( - path_template("/v1/projects/{project_id}/tasks/{task_id}", project_id=project_id, task_id=task_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - {"category_id": category_id}, task_retrieve_params.TaskRetrieveParams - ), - ), - cast_to=TaskRetrieveResponse, - ) - - async def update( - self, - task_id: str, - *, - project_id: str, - category_id: str, - brief: Optional[str] | Omit = omit, - impact: Optional[int] | Omit = omit, - reference_label: Optional[str] | Omit = omit, - reference_url: Optional[str] | Omit = omit, - summary: Optional[str] | Omit = omit, - title: Optional[str] | Omit = omit, - topic: Optional[str] | Omit = omit, - type: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> TaskUpdateResponse: - """ - Update Project Task - - Args: - project_id: Unique project ID. - - task_id: Unique project task ID. - - category_id: Category that owns the project. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not project_id: - raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}") - if not task_id: - raise ValueError(f"Expected a non-empty value for `task_id` but received {task_id!r}") - return await self._patch( - path_template("/v1/projects/{project_id}/tasks/{task_id}", project_id=project_id, task_id=task_id), - body=await async_maybe_transform( - { - "brief": brief, - "impact": impact, - "reference_label": reference_label, - "reference_url": reference_url, - "summary": summary, - "title": title, - "topic": topic, - "type": type, - }, - task_update_params.TaskUpdateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform({"category_id": category_id}, task_update_params.TaskUpdateParams), - ), - cast_to=TaskUpdateResponse, - ) - - async def list( - self, - project_id: str, - *, - category_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> TaskListResponse: - """ - List Project Tasks - - Args: - project_id: Unique project ID. - - category_id: Category that owns the project. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not project_id: - raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}") - return await self._get( - path_template("/v1/projects/{project_id}/tasks", project_id=project_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform({"category_id": category_id}, task_list_params.TaskListParams), - ), - cast_to=TaskListResponse, - ) - - async def delete( - self, - task_id: str, - *, - project_id: str, - category_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> None: - """ - Delete Project Task - - Args: - project_id: Unique project ID. - - task_id: Unique project task ID. - - category_id: Category that owns the project. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not project_id: - raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}") - if not task_id: - raise ValueError(f"Expected a non-empty value for `task_id` but received {task_id!r}") - extra_headers = {"Accept": "*/*", **(extra_headers or {})} - return await self._delete( - path_template("/v1/projects/{project_id}/tasks/{task_id}", project_id=project_id, task_id=task_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform({"category_id": category_id}, task_delete_params.TaskDeleteParams), - ), - cast_to=NoneType, - ) - - async def update_status( - self, - task_id: str, - *, - project_id: str, - category_id: str, - status: Literal["not_started", "in_progress", "done", "abandoned"], - note: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> TaskUpdateStatusResponse: - """ - Update Project Task Status - - Args: - project_id: Unique project ID. - - task_id: Unique project task ID. - - category_id: Category that owns the project. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not project_id: - raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}") - if not task_id: - raise ValueError(f"Expected a non-empty value for `task_id` but received {task_id!r}") - return await self._post( - path_template("/v1/projects/{project_id}/tasks/{task_id}/status", project_id=project_id, task_id=task_id), - body=await async_maybe_transform( - { - "status": status, - "note": note, - }, - task_update_status_params.TaskUpdateStatusParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - {"category_id": category_id}, task_update_status_params.TaskUpdateStatusParams - ), - ), - cast_to=TaskUpdateStatusResponse, - ) - - -class TasksResourceWithRawResponse: - def __init__(self, tasks: TasksResource) -> None: - self._tasks = tasks - - self.create = to_raw_response_wrapper( - tasks.create, - ) - self.retrieve = to_raw_response_wrapper( - tasks.retrieve, - ) - self.update = to_raw_response_wrapper( - tasks.update, - ) - self.list = to_raw_response_wrapper( - tasks.list, - ) - self.delete = to_raw_response_wrapper( - tasks.delete, - ) - self.update_status = to_raw_response_wrapper( - tasks.update_status, - ) - - -class AsyncTasksResourceWithRawResponse: - def __init__(self, tasks: AsyncTasksResource) -> None: - self._tasks = tasks - - self.create = async_to_raw_response_wrapper( - tasks.create, - ) - self.retrieve = async_to_raw_response_wrapper( - tasks.retrieve, - ) - self.update = async_to_raw_response_wrapper( - tasks.update, - ) - self.list = async_to_raw_response_wrapper( - tasks.list, - ) - self.delete = async_to_raw_response_wrapper( - tasks.delete, - ) - self.update_status = async_to_raw_response_wrapper( - tasks.update_status, - ) - - -class TasksResourceWithStreamingResponse: - def __init__(self, tasks: TasksResource) -> None: - self._tasks = tasks - - self.create = to_streamed_response_wrapper( - tasks.create, - ) - self.retrieve = to_streamed_response_wrapper( - tasks.retrieve, - ) - self.update = to_streamed_response_wrapper( - tasks.update, - ) - self.list = to_streamed_response_wrapper( - tasks.list, - ) - self.delete = to_streamed_response_wrapper( - tasks.delete, - ) - self.update_status = to_streamed_response_wrapper( - tasks.update_status, - ) - - -class AsyncTasksResourceWithStreamingResponse: - def __init__(self, tasks: AsyncTasksResource) -> None: - self._tasks = tasks - - self.create = async_to_streamed_response_wrapper( - tasks.create, - ) - self.retrieve = async_to_streamed_response_wrapper( - tasks.retrieve, - ) - self.update = async_to_streamed_response_wrapper( - tasks.update, - ) - self.list = async_to_streamed_response_wrapper( - tasks.list, - ) - self.delete = async_to_streamed_response_wrapper( - tasks.delete, - ) - self.update_status = async_to_streamed_response_wrapper( - tasks.update_status, - ) diff --git a/src/profound/resources/prompts.py b/src/profound/resources/prompts.py deleted file mode 100644 index 49dd4f2b..00000000 --- a/src/profound/resources/prompts.py +++ /dev/null @@ -1,603 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Any, List, Union, Iterable, Optional, cast -from datetime import datetime -from typing_extensions import Literal - -import httpx - -from ..types import prompt_answers_params, prompt_answers_v2_params, prompt_stream_answers_v2_params -from .._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from .._utils import maybe_transform, async_maybe_transform -from .._compat import cached_property -from .._resource import SyncAPIResource, AsyncAPIResource -from .._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from .._streaming import Stream, AsyncStream -from .._base_client import make_request_options -from ..types.prompt_answers_response import PromptAnswersResponse -from ..types.shared_params.pagination import Pagination -from ..types.prompt_answers_v2_response import PromptAnswersV2Response -from ..types.prompt_stream_answers_v2_response import PromptStreamAnswersV2Response - -__all__ = ["PromptsResource", "AsyncPromptsResource"] - - -class PromptsResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> PromptsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return PromptsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> PromptsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return PromptsResourceWithStreamingResponse(self) - - def answers( - self, - *, - category_id: str, - end_date: Union[str, datetime], - start_date: Union[str, datetime], - filters: Iterable[prompt_answers_params.Filter] | Omit = omit, - include: prompt_answers_params.Include | Omit = omit, - pagination: Pagination | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> PromptAnswersResponse: - """ - Get Answers - - Args: - filters: List of filters to apply to the answers report. - - pagination: Pagination parameters for the results. Default is 10,000 rows with no offset. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v1/prompts/answers", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "filters": filters, - "include": include, - "pagination": pagination, - }, - prompt_answers_params.PromptAnswersParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=PromptAnswersResponse, - ) - - def answers_v2( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - filter: Optional[prompt_answers_v2_params.Filter] | Omit = omit, - include: Optional[ - List[ - Literal[ - "run_id", - "date", - "model", - "topic", - "topic_id", - "persona", - "region", - "tags", - "prompt", - "prompt_id", - "response", - "mentions", - "citations", - "citation_details", - "search_queries", - "analysis_types", - "sentiment_claims", - ] - ] - ] - | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> PromptAnswersV2Response: - """ - Query Answers V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - include: Which row fields to return: `run_id`, `date`, `model`, `topic`, `topic_id`, - `region`, `persona`, `tags`, `prompt`, `prompt_id`, `response`, `mentions`, - `citations`, `citation_details`, `search_queries`, `analysis_types`, - `sentiment_claims`. Omit for all fields except `citation_details`, which must be - requested explicitly because it is expensive. - - limit: Page size; default 10, max 200. - - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v2/prompts/answers", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "filter": filter, - "include": include, - "limit": limit, - "max_results": max_results, - }, - prompt_answers_v2_params.PromptAnswersV2Params, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=PromptAnswersV2Response, - ) - - def stream_answers_v2( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - filter: Optional[prompt_stream_answers_v2_params.Filter] | Omit = omit, - include: Optional[ - List[ - Literal[ - "run_id", - "date", - "model", - "topic", - "topic_id", - "persona", - "region", - "tags", - "prompt", - "prompt_id", - "response", - "mentions", - "citations", - "citation_details", - "search_queries", - "analysis_types", - "sentiment_claims", - ] - ] - ] - | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Stream[PromptStreamAnswersV2Response]: - """ - Stream Answers V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - include: Which row fields to return: `run_id`, `date`, `model`, `topic`, `topic_id`, - `region`, `persona`, `tags`, `prompt`, `prompt_id`, `response`, `mentions`, - `citations`, `citation_details`, `search_queries`, `analysis_types`, - `sentiment_claims`. Omit for all fields except `citation_details`, which must be - requested explicitly because it is expensive. - - limit: Page size; default 10, max 200. - - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return self._post( - "/v2/prompts/answers/stream", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "filter": filter, - "include": include, - "limit": limit, - "max_results": max_results, - }, - prompt_stream_answers_v2_params.PromptStreamAnswersV2Params, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, PromptStreamAnswersV2Response - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=Stream[PromptStreamAnswersV2Response], - ) - - -class AsyncPromptsResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncPromptsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return AsyncPromptsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncPromptsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return AsyncPromptsResourceWithStreamingResponse(self) - - async def answers( - self, - *, - category_id: str, - end_date: Union[str, datetime], - start_date: Union[str, datetime], - filters: Iterable[prompt_answers_params.Filter] | Omit = omit, - include: prompt_answers_params.Include | Omit = omit, - pagination: Pagination | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> PromptAnswersResponse: - """ - Get Answers - - Args: - filters: List of filters to apply to the answers report. - - pagination: Pagination parameters for the results. Default is 10,000 rows with no offset. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v1/prompts/answers", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "filters": filters, - "include": include, - "pagination": pagination, - }, - prompt_answers_params.PromptAnswersParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=PromptAnswersResponse, - ) - - async def answers_v2( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - filter: Optional[prompt_answers_v2_params.Filter] | Omit = omit, - include: Optional[ - List[ - Literal[ - "run_id", - "date", - "model", - "topic", - "topic_id", - "persona", - "region", - "tags", - "prompt", - "prompt_id", - "response", - "mentions", - "citations", - "citation_details", - "search_queries", - "analysis_types", - "sentiment_claims", - ] - ] - ] - | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> PromptAnswersV2Response: - """ - Query Answers V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - include: Which row fields to return: `run_id`, `date`, `model`, `topic`, `topic_id`, - `region`, `persona`, `tags`, `prompt`, `prompt_id`, `response`, `mentions`, - `citations`, `citation_details`, `search_queries`, `analysis_types`, - `sentiment_claims`. Omit for all fields except `citation_details`, which must be - requested explicitly because it is expensive. - - limit: Page size; default 10, max 200. - - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v2/prompts/answers", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "filter": filter, - "include": include, - "limit": limit, - "max_results": max_results, - }, - prompt_answers_v2_params.PromptAnswersV2Params, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=PromptAnswersV2Response, - ) - - async def stream_answers_v2( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - filter: Optional[prompt_stream_answers_v2_params.Filter] | Omit = omit, - include: Optional[ - List[ - Literal[ - "run_id", - "date", - "model", - "topic", - "topic_id", - "persona", - "region", - "tags", - "prompt", - "prompt_id", - "response", - "mentions", - "citations", - "citation_details", - "search_queries", - "analysis_types", - "sentiment_claims", - ] - ] - ] - | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncStream[PromptStreamAnswersV2Response]: - """ - Stream Answers V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - include: Which row fields to return: `run_id`, `date`, `model`, `topic`, `topic_id`, - `region`, `persona`, `tags`, `prompt`, `prompt_id`, `response`, `mentions`, - `citations`, `citation_details`, `search_queries`, `analysis_types`, - `sentiment_claims`. Omit for all fields except `citation_details`, which must be - requested explicitly because it is expensive. - - limit: Page size; default 10, max 200. - - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return await self._post( - "/v2/prompts/answers/stream", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "filter": filter, - "include": include, - "limit": limit, - "max_results": max_results, - }, - prompt_stream_answers_v2_params.PromptStreamAnswersV2Params, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, PromptStreamAnswersV2Response - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=AsyncStream[PromptStreamAnswersV2Response], - ) - - -class PromptsResourceWithRawResponse: - def __init__(self, prompts: PromptsResource) -> None: - self._prompts = prompts - - self.answers = to_raw_response_wrapper( - prompts.answers, - ) - self.answers_v2 = to_raw_response_wrapper( - prompts.answers_v2, - ) - self.stream_answers_v2 = to_raw_response_wrapper( - prompts.stream_answers_v2, - ) - - -class AsyncPromptsResourceWithRawResponse: - def __init__(self, prompts: AsyncPromptsResource) -> None: - self._prompts = prompts - - self.answers = async_to_raw_response_wrapper( - prompts.answers, - ) - self.answers_v2 = async_to_raw_response_wrapper( - prompts.answers_v2, - ) - self.stream_answers_v2 = async_to_raw_response_wrapper( - prompts.stream_answers_v2, - ) - - -class PromptsResourceWithStreamingResponse: - def __init__(self, prompts: PromptsResource) -> None: - self._prompts = prompts - - self.answers = to_streamed_response_wrapper( - prompts.answers, - ) - self.answers_v2 = to_streamed_response_wrapper( - prompts.answers_v2, - ) - self.stream_answers_v2 = to_streamed_response_wrapper( - prompts.stream_answers_v2, - ) - - -class AsyncPromptsResourceWithStreamingResponse: - def __init__(self, prompts: AsyncPromptsResource) -> None: - self._prompts = prompts - - self.answers = async_to_streamed_response_wrapper( - prompts.answers, - ) - self.answers_v2 = async_to_streamed_response_wrapper( - prompts.answers_v2, - ) - self.stream_answers_v2 = async_to_streamed_response_wrapper( - prompts.stream_answers_v2, - ) diff --git a/src/profound/resources/reports/__init__.py b/src/profound/resources/reports/__init__.py deleted file mode 100644 index 8c1d7a21..00000000 --- a/src/profound/resources/reports/__init__.py +++ /dev/null @@ -1,89 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from .social import ( - SocialResource, - AsyncSocialResource, - SocialResourceWithRawResponse, - AsyncSocialResourceWithRawResponse, - SocialResourceWithStreamingResponse, - AsyncSocialResourceWithStreamingResponse, -) -from .reports import ( - ReportsResource, - AsyncReportsResource, - ReportsResourceWithRawResponse, - AsyncReportsResourceWithRawResponse, - ReportsResourceWithStreamingResponse, - AsyncReportsResourceWithStreamingResponse, -) -from .accuracy import ( - AccuracyResource, - AsyncAccuracyResource, - AccuracyResourceWithRawResponse, - AsyncAccuracyResourceWithRawResponse, - AccuracyResourceWithStreamingResponse, - AsyncAccuracyResourceWithStreamingResponse, -) -from .shopping import ( - ShoppingResource, - AsyncShoppingResource, - ShoppingResourceWithRawResponse, - AsyncShoppingResourceWithRawResponse, - ShoppingResourceWithStreamingResponse, - AsyncShoppingResourceWithStreamingResponse, -) -from .factcheck import ( - FactcheckResource, - AsyncFactcheckResource, - FactcheckResourceWithRawResponse, - AsyncFactcheckResourceWithRawResponse, - FactcheckResourceWithStreamingResponse, - AsyncFactcheckResourceWithStreamingResponse, -) -from .web_search_results import ( - WebSearchResultsResource, - AsyncWebSearchResultsResource, - WebSearchResultsResourceWithRawResponse, - AsyncWebSearchResultsResourceWithRawResponse, - WebSearchResultsResourceWithStreamingResponse, - AsyncWebSearchResultsResourceWithStreamingResponse, -) - -__all__ = [ - "WebSearchResultsResource", - "AsyncWebSearchResultsResource", - "WebSearchResultsResourceWithRawResponse", - "AsyncWebSearchResultsResourceWithRawResponse", - "WebSearchResultsResourceWithStreamingResponse", - "AsyncWebSearchResultsResourceWithStreamingResponse", - "ShoppingResource", - "AsyncShoppingResource", - "ShoppingResourceWithRawResponse", - "AsyncShoppingResourceWithRawResponse", - "ShoppingResourceWithStreamingResponse", - "AsyncShoppingResourceWithStreamingResponse", - "AccuracyResource", - "AsyncAccuracyResource", - "AccuracyResourceWithRawResponse", - "AsyncAccuracyResourceWithRawResponse", - "AccuracyResourceWithStreamingResponse", - "AsyncAccuracyResourceWithStreamingResponse", - "FactcheckResource", - "AsyncFactcheckResource", - "FactcheckResourceWithRawResponse", - "AsyncFactcheckResourceWithRawResponse", - "FactcheckResourceWithStreamingResponse", - "AsyncFactcheckResourceWithStreamingResponse", - "SocialResource", - "AsyncSocialResource", - "SocialResourceWithRawResponse", - "AsyncSocialResourceWithRawResponse", - "SocialResourceWithStreamingResponse", - "AsyncSocialResourceWithStreamingResponse", - "ReportsResource", - "AsyncReportsResource", - "ReportsResourceWithRawResponse", - "AsyncReportsResourceWithRawResponse", - "ReportsResourceWithStreamingResponse", - "AsyncReportsResourceWithStreamingResponse", -] diff --git a/src/profound/resources/reports/accuracy.py b/src/profound/resources/reports/accuracy.py deleted file mode 100644 index 98aa7e69..00000000 --- a/src/profound/resources/reports/accuracy.py +++ /dev/null @@ -1,1932 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Optional -from typing_extensions import Literal - -import httpx - -from ..._types import Body, Omit, Query, Headers, NotGiven, SequenceNotStr, omit, not_given -from ..._utils import maybe_transform, async_maybe_transform -from ..._compat import cached_property -from ..._resource import SyncAPIResource, AsyncAPIResource -from ..._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from ..._base_client import make_request_options -from ...types.reports import ( - accuracy_create_overview_params, - accuracy_create_breakdown_params, - accuracy_create_topic_ids_params, - accuracy_create_claim_breakdown_params, - accuracy_create_claim_citations_params, - accuracy_create_citation_analysis_params, - accuracy_create_inaccurate_themes_params, - accuracy_create_inaccuracy_drivers_params, - accuracy_create_inaccurate_clusters_params, - accuracy_create_cluster_example_runs_params, - accuracy_create_top_inaccurate_claims_params, - accuracy_create_factcheck_setup_status_params, - accuracy_create_cluster_verification_pairs_params, -) -from ...types.reports.accuracy_create_overview_response import AccuracyCreateOverviewResponse -from ...types.reports.accuracy_create_breakdown_response import AccuracyCreateBreakdownResponse -from ...types.reports.accuracy_create_topic_ids_response import AccuracyCreateTopicIDsResponse -from ...types.reports.accuracy_create_claim_breakdown_response import AccuracyCreateClaimBreakdownResponse -from ...types.reports.accuracy_create_claim_citations_response import AccuracyCreateClaimCitationsResponse -from ...types.reports.accuracy_create_citation_analysis_response import AccuracyCreateCitationAnalysisResponse -from ...types.reports.accuracy_create_inaccurate_themes_response import AccuracyCreateInaccurateThemesResponse -from ...types.reports.accuracy_create_inaccuracy_drivers_response import AccuracyCreateInaccuracyDriversResponse -from ...types.reports.accuracy_create_inaccurate_clusters_response import AccuracyCreateInaccurateClustersResponse -from ...types.reports.accuracy_create_cluster_example_runs_response import AccuracyCreateClusterExampleRunsResponse -from ...types.reports.accuracy_create_top_inaccurate_claims_response import AccuracyCreateTopInaccurateClaimsResponse -from ...types.reports.accuracy_create_factcheck_setup_status_response import AccuracyCreateFactcheckSetupStatusResponse -from ...types.reports.accuracy_create_cluster_verification_pairs_response import ( - AccuracyCreateClusterVerificationPairsResponse, -) - -__all__ = ["AccuracyResource", "AsyncAccuracyResource"] - - -class AccuracyResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> AccuracyResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return AccuracyResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AccuracyResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return AccuracyResourceWithStreamingResponse(self) - - def create_breakdown( - self, - *, - category_id: str, - end_date: str, - start_date: str, - breakdown_by: Literal["citation", "platform", "topic", "prompt", "tag", "region", "persona", "theme"] - | Omit = omit, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - comparison_start_date: Optional[str] | Omit = omit, - date_bucket: Optional[str] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - group_by: Optional[List[Literal["platform", "topic", "prompt", "tag", "region", "persona", "theme", "date"]]] - | Omit = omit, - include_no_persona: bool | Omit = omit, - include_no_tag: bool | Omit = omit, - limit: int | Omit = omit, - offset: int | Omit = omit, - pagination: Optional[accuracy_create_breakdown_params.Pagination] | Omit = omit, - persona_ids: Optional[SequenceNotStr[str]] | Omit = omit, - platform_ids: Optional[SequenceNotStr[str]] | Omit = omit, - prompt_ids: Optional[SequenceNotStr[str]] | Omit = omit, - region_ids: Optional[SequenceNotStr[str]] | Omit = omit, - search_query: Optional[str] | Omit = omit, - sort_by: Literal["citationShare", "accuracy"] | Omit = omit, - sort_order: Literal["asc", "desc"] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - tag_ids: Optional[SequenceNotStr[str]] | Omit = omit, - topic_ids: Optional[SequenceNotStr[str]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCreateBreakdownResponse: - """ - Accuracy Breakdown - - Args: - pagination: Canonical grouped pagination plan for Accuracy Breakdown rows. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v1/reports/accuracy/breakdown", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "breakdown_by": breakdown_by, - "citation_categories": citation_categories, - "comparison_end_date": comparison_end_date, - "comparison_start_date": comparison_start_date, - "date_bucket": date_bucket, - "exclude_topic_ids": exclude_topic_ids, - "group_by": group_by, - "include_no_persona": include_no_persona, - "include_no_tag": include_no_tag, - "limit": limit, - "offset": offset, - "pagination": pagination, - "persona_ids": persona_ids, - "platform_ids": platform_ids, - "prompt_ids": prompt_ids, - "region_ids": region_ids, - "search_query": search_query, - "sort_by": sort_by, - "sort_order": sort_order, - "tag_filter_type": tag_filter_type, - "tag_ids": tag_ids, - "topic_ids": topic_ids, - }, - accuracy_create_breakdown_params.AccuracyCreateBreakdownParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AccuracyCreateBreakdownResponse, - ) - - def create_citation_analysis( - self, - *, - category_id: str, - clean_href: str, - end_date: str, - start_date: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCreateCitationAnalysisResponse: - """ - Accuracy Citation Analysis - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v1/reports/accuracy/citation-analysis", - body=maybe_transform( - { - "category_id": category_id, - "clean_href": clean_href, - "end_date": end_date, - "start_date": start_date, - }, - accuracy_create_citation_analysis_params.AccuracyCreateCitationAnalysisParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AccuracyCreateCitationAnalysisResponse, - ) - - def create_claim_breakdown( - self, - *, - category_id: str, - cluster_id: str, - end_date: str, - start_date: str, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - comparison_start_date: Optional[str] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - include_no_persona: bool | Omit = omit, - include_no_tag: bool | Omit = omit, - persona_ids: Optional[SequenceNotStr[str]] | Omit = omit, - platform_ids: Optional[SequenceNotStr[str]] | Omit = omit, - prompt_ids: Optional[SequenceNotStr[str]] | Omit = omit, - region_ids: Optional[SequenceNotStr[str]] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - tag_ids: Optional[SequenceNotStr[str]] | Omit = omit, - topic_ids: Optional[SequenceNotStr[str]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCreateClaimBreakdownResponse: - """ - Accuracy Claim Breakdown - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v1/reports/accuracy/claim-breakdown", - body=maybe_transform( - { - "category_id": category_id, - "cluster_id": cluster_id, - "end_date": end_date, - "start_date": start_date, - "citation_categories": citation_categories, - "comparison_end_date": comparison_end_date, - "comparison_start_date": comparison_start_date, - "exclude_topic_ids": exclude_topic_ids, - "include_no_persona": include_no_persona, - "include_no_tag": include_no_tag, - "persona_ids": persona_ids, - "platform_ids": platform_ids, - "prompt_ids": prompt_ids, - "region_ids": region_ids, - "tag_filter_type": tag_filter_type, - "tag_ids": tag_ids, - "topic_ids": topic_ids, - }, - accuracy_create_claim_breakdown_params.AccuracyCreateClaimBreakdownParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AccuracyCreateClaimBreakdownResponse, - ) - - def create_claim_citations( - self, - *, - category_id: str, - cluster_id: str, - end_date: str, - start_date: str, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - comparison_start_date: Optional[str] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - include_no_persona: bool | Omit = omit, - include_no_tag: bool | Omit = omit, - limit: int | Omit = omit, - offset: int | Omit = omit, - persona_ids: Optional[SequenceNotStr[str]] | Omit = omit, - platform_ids: Optional[SequenceNotStr[str]] | Omit = omit, - prompt_ids: Optional[SequenceNotStr[str]] | Omit = omit, - region_ids: Optional[SequenceNotStr[str]] | Omit = omit, - search_query: Optional[str] | Omit = omit, - sort_order: Literal["asc", "desc"] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - tag_ids: Optional[SequenceNotStr[str]] | Omit = omit, - topic_ids: Optional[SequenceNotStr[str]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCreateClaimCitationsResponse: - """ - Accuracy Claim Citations - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v1/reports/accuracy/claim-citations", - body=maybe_transform( - { - "category_id": category_id, - "cluster_id": cluster_id, - "end_date": end_date, - "start_date": start_date, - "citation_categories": citation_categories, - "comparison_end_date": comparison_end_date, - "comparison_start_date": comparison_start_date, - "exclude_topic_ids": exclude_topic_ids, - "include_no_persona": include_no_persona, - "include_no_tag": include_no_tag, - "limit": limit, - "offset": offset, - "persona_ids": persona_ids, - "platform_ids": platform_ids, - "prompt_ids": prompt_ids, - "region_ids": region_ids, - "search_query": search_query, - "sort_order": sort_order, - "tag_filter_type": tag_filter_type, - "tag_ids": tag_ids, - "topic_ids": topic_ids, - }, - accuracy_create_claim_citations_params.AccuracyCreateClaimCitationsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AccuracyCreateClaimCitationsResponse, - ) - - def create_cluster_example_runs( - self, - *, - category_id: str, - cluster_id: str, - end_date: str, - start_date: str, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - comparison_start_date: Optional[str] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - include_no_persona: bool | Omit = omit, - include_no_tag: bool | Omit = omit, - limit: int | Omit = omit, - offset: int | Omit = omit, - persona_ids: Optional[SequenceNotStr[str]] | Omit = omit, - platform_ids: Optional[SequenceNotStr[str]] | Omit = omit, - prompt_ids: Optional[SequenceNotStr[str]] | Omit = omit, - region_ids: Optional[SequenceNotStr[str]] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - tag_ids: Optional[SequenceNotStr[str]] | Omit = omit, - topic_ids: Optional[SequenceNotStr[str]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCreateClusterExampleRunsResponse: - """ - Accuracy Cluster Example Runs - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v1/reports/accuracy/cluster-example-runs", - body=maybe_transform( - { - "category_id": category_id, - "cluster_id": cluster_id, - "end_date": end_date, - "start_date": start_date, - "citation_categories": citation_categories, - "comparison_end_date": comparison_end_date, - "comparison_start_date": comparison_start_date, - "exclude_topic_ids": exclude_topic_ids, - "include_no_persona": include_no_persona, - "include_no_tag": include_no_tag, - "limit": limit, - "offset": offset, - "persona_ids": persona_ids, - "platform_ids": platform_ids, - "prompt_ids": prompt_ids, - "region_ids": region_ids, - "tag_filter_type": tag_filter_type, - "tag_ids": tag_ids, - "topic_ids": topic_ids, - }, - accuracy_create_cluster_example_runs_params.AccuracyCreateClusterExampleRunsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AccuracyCreateClusterExampleRunsResponse, - ) - - def create_cluster_verification_pairs( - self, - *, - category_id: str, - cluster_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCreateClusterVerificationPairsResponse: - """ - Accuracy Cluster Verification Pairs - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v1/reports/accuracy/cluster-verification-pairs", - body=maybe_transform( - { - "category_id": category_id, - "cluster_id": cluster_id, - }, - accuracy_create_cluster_verification_pairs_params.AccuracyCreateClusterVerificationPairsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AccuracyCreateClusterVerificationPairsResponse, - ) - - def create_factcheck_setup_status( - self, - *, - category_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCreateFactcheckSetupStatusResponse: - """ - Accuracy Factcheck Setup Status - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v1/reports/accuracy/factcheck-setup-status", - body=maybe_transform( - {"category_id": category_id}, - accuracy_create_factcheck_setup_status_params.AccuracyCreateFactcheckSetupStatusParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AccuracyCreateFactcheckSetupStatusResponse, - ) - - def create_inaccuracy_drivers( - self, - *, - category_id: str, - end_date: str, - start_date: str, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - comparison_start_date: Optional[str] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - include_no_persona: bool | Omit = omit, - include_no_tag: bool | Omit = omit, - limit: int | Omit = omit, - persona_ids: Optional[SequenceNotStr[str]] | Omit = omit, - platform_ids: Optional[SequenceNotStr[str]] | Omit = omit, - prompt_ids: Optional[SequenceNotStr[str]] | Omit = omit, - region_ids: Optional[SequenceNotStr[str]] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - tag_ids: Optional[SequenceNotStr[str]] | Omit = omit, - topic_ids: Optional[SequenceNotStr[str]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCreateInaccuracyDriversResponse: - """ - Accuracy Inaccuracy Drivers - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v1/reports/accuracy/inaccuracy-drivers", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "citation_categories": citation_categories, - "comparison_end_date": comparison_end_date, - "comparison_start_date": comparison_start_date, - "exclude_topic_ids": exclude_topic_ids, - "include_no_persona": include_no_persona, - "include_no_tag": include_no_tag, - "limit": limit, - "persona_ids": persona_ids, - "platform_ids": platform_ids, - "prompt_ids": prompt_ids, - "region_ids": region_ids, - "tag_filter_type": tag_filter_type, - "tag_ids": tag_ids, - "topic_ids": topic_ids, - }, - accuracy_create_inaccuracy_drivers_params.AccuracyCreateInaccuracyDriversParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AccuracyCreateInaccuracyDriversResponse, - ) - - def create_inaccurate_clusters( - self, - *, - category_id: str, - end_date: str, - start_date: str, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - comparison_start_date: Optional[str] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - include_models: bool | Omit = omit, - include_no_persona: bool | Omit = omit, - include_no_tag: bool | Omit = omit, - limit: int | Omit = omit, - offset: int | Omit = omit, - persona_ids: Optional[SequenceNotStr[str]] | Omit = omit, - platform_ids: Optional[SequenceNotStr[str]] | Omit = omit, - prompt_ids: Optional[SequenceNotStr[str]] | Omit = omit, - region_ids: Optional[SequenceNotStr[str]] | Omit = omit, - search_query: Optional[str] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - tag_ids: Optional[SequenceNotStr[str]] | Omit = omit, - theme_id: Optional[str] | Omit = omit, - topic_ids: Optional[SequenceNotStr[str]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCreateInaccurateClustersResponse: - """ - Accuracy Inaccurate Clusters - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v1/reports/accuracy/inaccurate-clusters", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "citation_categories": citation_categories, - "comparison_end_date": comparison_end_date, - "comparison_start_date": comparison_start_date, - "exclude_topic_ids": exclude_topic_ids, - "include_models": include_models, - "include_no_persona": include_no_persona, - "include_no_tag": include_no_tag, - "limit": limit, - "offset": offset, - "persona_ids": persona_ids, - "platform_ids": platform_ids, - "prompt_ids": prompt_ids, - "region_ids": region_ids, - "search_query": search_query, - "tag_filter_type": tag_filter_type, - "tag_ids": tag_ids, - "theme_id": theme_id, - "topic_ids": topic_ids, - }, - accuracy_create_inaccurate_clusters_params.AccuracyCreateInaccurateClustersParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AccuracyCreateInaccurateClustersResponse, - ) - - def create_inaccurate_themes( - self, - *, - category_id: str, - end_date: str, - start_date: str, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - comparison_start_date: Optional[str] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - include_no_persona: bool | Omit = omit, - include_no_tag: bool | Omit = omit, - limit: int | Omit = omit, - offset: int | Omit = omit, - persona_ids: Optional[SequenceNotStr[str]] | Omit = omit, - platform_ids: Optional[SequenceNotStr[str]] | Omit = omit, - prompt_ids: Optional[SequenceNotStr[str]] | Omit = omit, - region_ids: Optional[SequenceNotStr[str]] | Omit = omit, - search_query: Optional[str] | Omit = omit, - sort_by: Literal["response_share"] | Omit = omit, - sort_order: Literal["asc", "desc"] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - tag_ids: Optional[SequenceNotStr[str]] | Omit = omit, - topic_ids: Optional[SequenceNotStr[str]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCreateInaccurateThemesResponse: - """ - Accuracy Inaccurate Themes - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v1/reports/accuracy/inaccurate-themes", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "citation_categories": citation_categories, - "comparison_end_date": comparison_end_date, - "comparison_start_date": comparison_start_date, - "exclude_topic_ids": exclude_topic_ids, - "include_no_persona": include_no_persona, - "include_no_tag": include_no_tag, - "limit": limit, - "offset": offset, - "persona_ids": persona_ids, - "platform_ids": platform_ids, - "prompt_ids": prompt_ids, - "region_ids": region_ids, - "search_query": search_query, - "sort_by": sort_by, - "sort_order": sort_order, - "tag_filter_type": tag_filter_type, - "tag_ids": tag_ids, - "topic_ids": topic_ids, - }, - accuracy_create_inaccurate_themes_params.AccuracyCreateInaccurateThemesParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AccuracyCreateInaccurateThemesResponse, - ) - - def create_overview( - self, - *, - category_id: str, - end_date: str, - start_date: str, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - comparison_start_date: Optional[str] | Omit = omit, - date_bucket: Optional[str] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - group_by: Literal["period", "theme"] | Omit = omit, - include_no_persona: bool | Omit = omit, - include_no_tag: bool | Omit = omit, - persona_ids: Optional[SequenceNotStr[str]] | Omit = omit, - platform_ids: Optional[SequenceNotStr[str]] | Omit = omit, - prompt_ids: Optional[SequenceNotStr[str]] | Omit = omit, - region_ids: Optional[SequenceNotStr[str]] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - tag_ids: Optional[SequenceNotStr[str]] | Omit = omit, - topic_ids: Optional[SequenceNotStr[str]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCreateOverviewResponse: - """ - Accuracy Overview - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v1/reports/accuracy/overview", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "citation_categories": citation_categories, - "comparison_end_date": comparison_end_date, - "comparison_start_date": comparison_start_date, - "date_bucket": date_bucket, - "exclude_topic_ids": exclude_topic_ids, - "group_by": group_by, - "include_no_persona": include_no_persona, - "include_no_tag": include_no_tag, - "persona_ids": persona_ids, - "platform_ids": platform_ids, - "prompt_ids": prompt_ids, - "region_ids": region_ids, - "tag_filter_type": tag_filter_type, - "tag_ids": tag_ids, - "topic_ids": topic_ids, - }, - accuracy_create_overview_params.AccuracyCreateOverviewParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AccuracyCreateOverviewResponse, - ) - - def create_top_inaccurate_claims( - self, - *, - category_id: str, - end_date: str, - start_date: str, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - comparison_start_date: Optional[str] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - include_no_persona: bool | Omit = omit, - include_no_tag: bool | Omit = omit, - limit: int | Omit = omit, - persona_ids: Optional[SequenceNotStr[str]] | Omit = omit, - platform_ids: Optional[SequenceNotStr[str]] | Omit = omit, - prompt_ids: Optional[SequenceNotStr[str]] | Omit = omit, - region_ids: Optional[SequenceNotStr[str]] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - tag_ids: Optional[SequenceNotStr[str]] | Omit = omit, - topic_ids: Optional[SequenceNotStr[str]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCreateTopInaccurateClaimsResponse: - """ - Accuracy Top Inaccurate Claims - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v1/reports/accuracy/top-inaccurate-claims", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "citation_categories": citation_categories, - "comparison_end_date": comparison_end_date, - "comparison_start_date": comparison_start_date, - "exclude_topic_ids": exclude_topic_ids, - "include_no_persona": include_no_persona, - "include_no_tag": include_no_tag, - "limit": limit, - "persona_ids": persona_ids, - "platform_ids": platform_ids, - "prompt_ids": prompt_ids, - "region_ids": region_ids, - "tag_filter_type": tag_filter_type, - "tag_ids": tag_ids, - "topic_ids": topic_ids, - }, - accuracy_create_top_inaccurate_claims_params.AccuracyCreateTopInaccurateClaimsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AccuracyCreateTopInaccurateClaimsResponse, - ) - - def create_topic_ids( - self, - *, - category_id: str, - end_date: str, - start_date: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCreateTopicIDsResponse: - """ - Accuracy Topic Ids - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v1/reports/accuracy/topic-ids", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - }, - accuracy_create_topic_ids_params.AccuracyCreateTopicIDsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AccuracyCreateTopicIDsResponse, - ) - - -class AsyncAccuracyResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncAccuracyResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return AsyncAccuracyResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncAccuracyResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return AsyncAccuracyResourceWithStreamingResponse(self) - - async def create_breakdown( - self, - *, - category_id: str, - end_date: str, - start_date: str, - breakdown_by: Literal["citation", "platform", "topic", "prompt", "tag", "region", "persona", "theme"] - | Omit = omit, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - comparison_start_date: Optional[str] | Omit = omit, - date_bucket: Optional[str] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - group_by: Optional[List[Literal["platform", "topic", "prompt", "tag", "region", "persona", "theme", "date"]]] - | Omit = omit, - include_no_persona: bool | Omit = omit, - include_no_tag: bool | Omit = omit, - limit: int | Omit = omit, - offset: int | Omit = omit, - pagination: Optional[accuracy_create_breakdown_params.Pagination] | Omit = omit, - persona_ids: Optional[SequenceNotStr[str]] | Omit = omit, - platform_ids: Optional[SequenceNotStr[str]] | Omit = omit, - prompt_ids: Optional[SequenceNotStr[str]] | Omit = omit, - region_ids: Optional[SequenceNotStr[str]] | Omit = omit, - search_query: Optional[str] | Omit = omit, - sort_by: Literal["citationShare", "accuracy"] | Omit = omit, - sort_order: Literal["asc", "desc"] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - tag_ids: Optional[SequenceNotStr[str]] | Omit = omit, - topic_ids: Optional[SequenceNotStr[str]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCreateBreakdownResponse: - """ - Accuracy Breakdown - - Args: - pagination: Canonical grouped pagination plan for Accuracy Breakdown rows. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v1/reports/accuracy/breakdown", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "breakdown_by": breakdown_by, - "citation_categories": citation_categories, - "comparison_end_date": comparison_end_date, - "comparison_start_date": comparison_start_date, - "date_bucket": date_bucket, - "exclude_topic_ids": exclude_topic_ids, - "group_by": group_by, - "include_no_persona": include_no_persona, - "include_no_tag": include_no_tag, - "limit": limit, - "offset": offset, - "pagination": pagination, - "persona_ids": persona_ids, - "platform_ids": platform_ids, - "prompt_ids": prompt_ids, - "region_ids": region_ids, - "search_query": search_query, - "sort_by": sort_by, - "sort_order": sort_order, - "tag_filter_type": tag_filter_type, - "tag_ids": tag_ids, - "topic_ids": topic_ids, - }, - accuracy_create_breakdown_params.AccuracyCreateBreakdownParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AccuracyCreateBreakdownResponse, - ) - - async def create_citation_analysis( - self, - *, - category_id: str, - clean_href: str, - end_date: str, - start_date: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCreateCitationAnalysisResponse: - """ - Accuracy Citation Analysis - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v1/reports/accuracy/citation-analysis", - body=await async_maybe_transform( - { - "category_id": category_id, - "clean_href": clean_href, - "end_date": end_date, - "start_date": start_date, - }, - accuracy_create_citation_analysis_params.AccuracyCreateCitationAnalysisParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AccuracyCreateCitationAnalysisResponse, - ) - - async def create_claim_breakdown( - self, - *, - category_id: str, - cluster_id: str, - end_date: str, - start_date: str, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - comparison_start_date: Optional[str] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - include_no_persona: bool | Omit = omit, - include_no_tag: bool | Omit = omit, - persona_ids: Optional[SequenceNotStr[str]] | Omit = omit, - platform_ids: Optional[SequenceNotStr[str]] | Omit = omit, - prompt_ids: Optional[SequenceNotStr[str]] | Omit = omit, - region_ids: Optional[SequenceNotStr[str]] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - tag_ids: Optional[SequenceNotStr[str]] | Omit = omit, - topic_ids: Optional[SequenceNotStr[str]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCreateClaimBreakdownResponse: - """ - Accuracy Claim Breakdown - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v1/reports/accuracy/claim-breakdown", - body=await async_maybe_transform( - { - "category_id": category_id, - "cluster_id": cluster_id, - "end_date": end_date, - "start_date": start_date, - "citation_categories": citation_categories, - "comparison_end_date": comparison_end_date, - "comparison_start_date": comparison_start_date, - "exclude_topic_ids": exclude_topic_ids, - "include_no_persona": include_no_persona, - "include_no_tag": include_no_tag, - "persona_ids": persona_ids, - "platform_ids": platform_ids, - "prompt_ids": prompt_ids, - "region_ids": region_ids, - "tag_filter_type": tag_filter_type, - "tag_ids": tag_ids, - "topic_ids": topic_ids, - }, - accuracy_create_claim_breakdown_params.AccuracyCreateClaimBreakdownParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AccuracyCreateClaimBreakdownResponse, - ) - - async def create_claim_citations( - self, - *, - category_id: str, - cluster_id: str, - end_date: str, - start_date: str, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - comparison_start_date: Optional[str] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - include_no_persona: bool | Omit = omit, - include_no_tag: bool | Omit = omit, - limit: int | Omit = omit, - offset: int | Omit = omit, - persona_ids: Optional[SequenceNotStr[str]] | Omit = omit, - platform_ids: Optional[SequenceNotStr[str]] | Omit = omit, - prompt_ids: Optional[SequenceNotStr[str]] | Omit = omit, - region_ids: Optional[SequenceNotStr[str]] | Omit = omit, - search_query: Optional[str] | Omit = omit, - sort_order: Literal["asc", "desc"] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - tag_ids: Optional[SequenceNotStr[str]] | Omit = omit, - topic_ids: Optional[SequenceNotStr[str]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCreateClaimCitationsResponse: - """ - Accuracy Claim Citations - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v1/reports/accuracy/claim-citations", - body=await async_maybe_transform( - { - "category_id": category_id, - "cluster_id": cluster_id, - "end_date": end_date, - "start_date": start_date, - "citation_categories": citation_categories, - "comparison_end_date": comparison_end_date, - "comparison_start_date": comparison_start_date, - "exclude_topic_ids": exclude_topic_ids, - "include_no_persona": include_no_persona, - "include_no_tag": include_no_tag, - "limit": limit, - "offset": offset, - "persona_ids": persona_ids, - "platform_ids": platform_ids, - "prompt_ids": prompt_ids, - "region_ids": region_ids, - "search_query": search_query, - "sort_order": sort_order, - "tag_filter_type": tag_filter_type, - "tag_ids": tag_ids, - "topic_ids": topic_ids, - }, - accuracy_create_claim_citations_params.AccuracyCreateClaimCitationsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AccuracyCreateClaimCitationsResponse, - ) - - async def create_cluster_example_runs( - self, - *, - category_id: str, - cluster_id: str, - end_date: str, - start_date: str, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - comparison_start_date: Optional[str] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - include_no_persona: bool | Omit = omit, - include_no_tag: bool | Omit = omit, - limit: int | Omit = omit, - offset: int | Omit = omit, - persona_ids: Optional[SequenceNotStr[str]] | Omit = omit, - platform_ids: Optional[SequenceNotStr[str]] | Omit = omit, - prompt_ids: Optional[SequenceNotStr[str]] | Omit = omit, - region_ids: Optional[SequenceNotStr[str]] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - tag_ids: Optional[SequenceNotStr[str]] | Omit = omit, - topic_ids: Optional[SequenceNotStr[str]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCreateClusterExampleRunsResponse: - """ - Accuracy Cluster Example Runs - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v1/reports/accuracy/cluster-example-runs", - body=await async_maybe_transform( - { - "category_id": category_id, - "cluster_id": cluster_id, - "end_date": end_date, - "start_date": start_date, - "citation_categories": citation_categories, - "comparison_end_date": comparison_end_date, - "comparison_start_date": comparison_start_date, - "exclude_topic_ids": exclude_topic_ids, - "include_no_persona": include_no_persona, - "include_no_tag": include_no_tag, - "limit": limit, - "offset": offset, - "persona_ids": persona_ids, - "platform_ids": platform_ids, - "prompt_ids": prompt_ids, - "region_ids": region_ids, - "tag_filter_type": tag_filter_type, - "tag_ids": tag_ids, - "topic_ids": topic_ids, - }, - accuracy_create_cluster_example_runs_params.AccuracyCreateClusterExampleRunsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AccuracyCreateClusterExampleRunsResponse, - ) - - async def create_cluster_verification_pairs( - self, - *, - category_id: str, - cluster_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCreateClusterVerificationPairsResponse: - """ - Accuracy Cluster Verification Pairs - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v1/reports/accuracy/cluster-verification-pairs", - body=await async_maybe_transform( - { - "category_id": category_id, - "cluster_id": cluster_id, - }, - accuracy_create_cluster_verification_pairs_params.AccuracyCreateClusterVerificationPairsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AccuracyCreateClusterVerificationPairsResponse, - ) - - async def create_factcheck_setup_status( - self, - *, - category_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCreateFactcheckSetupStatusResponse: - """ - Accuracy Factcheck Setup Status - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v1/reports/accuracy/factcheck-setup-status", - body=await async_maybe_transform( - {"category_id": category_id}, - accuracy_create_factcheck_setup_status_params.AccuracyCreateFactcheckSetupStatusParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AccuracyCreateFactcheckSetupStatusResponse, - ) - - async def create_inaccuracy_drivers( - self, - *, - category_id: str, - end_date: str, - start_date: str, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - comparison_start_date: Optional[str] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - include_no_persona: bool | Omit = omit, - include_no_tag: bool | Omit = omit, - limit: int | Omit = omit, - persona_ids: Optional[SequenceNotStr[str]] | Omit = omit, - platform_ids: Optional[SequenceNotStr[str]] | Omit = omit, - prompt_ids: Optional[SequenceNotStr[str]] | Omit = omit, - region_ids: Optional[SequenceNotStr[str]] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - tag_ids: Optional[SequenceNotStr[str]] | Omit = omit, - topic_ids: Optional[SequenceNotStr[str]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCreateInaccuracyDriversResponse: - """ - Accuracy Inaccuracy Drivers - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v1/reports/accuracy/inaccuracy-drivers", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "citation_categories": citation_categories, - "comparison_end_date": comparison_end_date, - "comparison_start_date": comparison_start_date, - "exclude_topic_ids": exclude_topic_ids, - "include_no_persona": include_no_persona, - "include_no_tag": include_no_tag, - "limit": limit, - "persona_ids": persona_ids, - "platform_ids": platform_ids, - "prompt_ids": prompt_ids, - "region_ids": region_ids, - "tag_filter_type": tag_filter_type, - "tag_ids": tag_ids, - "topic_ids": topic_ids, - }, - accuracy_create_inaccuracy_drivers_params.AccuracyCreateInaccuracyDriversParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AccuracyCreateInaccuracyDriversResponse, - ) - - async def create_inaccurate_clusters( - self, - *, - category_id: str, - end_date: str, - start_date: str, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - comparison_start_date: Optional[str] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - include_models: bool | Omit = omit, - include_no_persona: bool | Omit = omit, - include_no_tag: bool | Omit = omit, - limit: int | Omit = omit, - offset: int | Omit = omit, - persona_ids: Optional[SequenceNotStr[str]] | Omit = omit, - platform_ids: Optional[SequenceNotStr[str]] | Omit = omit, - prompt_ids: Optional[SequenceNotStr[str]] | Omit = omit, - region_ids: Optional[SequenceNotStr[str]] | Omit = omit, - search_query: Optional[str] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - tag_ids: Optional[SequenceNotStr[str]] | Omit = omit, - theme_id: Optional[str] | Omit = omit, - topic_ids: Optional[SequenceNotStr[str]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCreateInaccurateClustersResponse: - """ - Accuracy Inaccurate Clusters - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v1/reports/accuracy/inaccurate-clusters", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "citation_categories": citation_categories, - "comparison_end_date": comparison_end_date, - "comparison_start_date": comparison_start_date, - "exclude_topic_ids": exclude_topic_ids, - "include_models": include_models, - "include_no_persona": include_no_persona, - "include_no_tag": include_no_tag, - "limit": limit, - "offset": offset, - "persona_ids": persona_ids, - "platform_ids": platform_ids, - "prompt_ids": prompt_ids, - "region_ids": region_ids, - "search_query": search_query, - "tag_filter_type": tag_filter_type, - "tag_ids": tag_ids, - "theme_id": theme_id, - "topic_ids": topic_ids, - }, - accuracy_create_inaccurate_clusters_params.AccuracyCreateInaccurateClustersParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AccuracyCreateInaccurateClustersResponse, - ) - - async def create_inaccurate_themes( - self, - *, - category_id: str, - end_date: str, - start_date: str, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - comparison_start_date: Optional[str] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - include_no_persona: bool | Omit = omit, - include_no_tag: bool | Omit = omit, - limit: int | Omit = omit, - offset: int | Omit = omit, - persona_ids: Optional[SequenceNotStr[str]] | Omit = omit, - platform_ids: Optional[SequenceNotStr[str]] | Omit = omit, - prompt_ids: Optional[SequenceNotStr[str]] | Omit = omit, - region_ids: Optional[SequenceNotStr[str]] | Omit = omit, - search_query: Optional[str] | Omit = omit, - sort_by: Literal["response_share"] | Omit = omit, - sort_order: Literal["asc", "desc"] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - tag_ids: Optional[SequenceNotStr[str]] | Omit = omit, - topic_ids: Optional[SequenceNotStr[str]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCreateInaccurateThemesResponse: - """ - Accuracy Inaccurate Themes - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v1/reports/accuracy/inaccurate-themes", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "citation_categories": citation_categories, - "comparison_end_date": comparison_end_date, - "comparison_start_date": comparison_start_date, - "exclude_topic_ids": exclude_topic_ids, - "include_no_persona": include_no_persona, - "include_no_tag": include_no_tag, - "limit": limit, - "offset": offset, - "persona_ids": persona_ids, - "platform_ids": platform_ids, - "prompt_ids": prompt_ids, - "region_ids": region_ids, - "search_query": search_query, - "sort_by": sort_by, - "sort_order": sort_order, - "tag_filter_type": tag_filter_type, - "tag_ids": tag_ids, - "topic_ids": topic_ids, - }, - accuracy_create_inaccurate_themes_params.AccuracyCreateInaccurateThemesParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AccuracyCreateInaccurateThemesResponse, - ) - - async def create_overview( - self, - *, - category_id: str, - end_date: str, - start_date: str, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - comparison_start_date: Optional[str] | Omit = omit, - date_bucket: Optional[str] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - group_by: Literal["period", "theme"] | Omit = omit, - include_no_persona: bool | Omit = omit, - include_no_tag: bool | Omit = omit, - persona_ids: Optional[SequenceNotStr[str]] | Omit = omit, - platform_ids: Optional[SequenceNotStr[str]] | Omit = omit, - prompt_ids: Optional[SequenceNotStr[str]] | Omit = omit, - region_ids: Optional[SequenceNotStr[str]] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - tag_ids: Optional[SequenceNotStr[str]] | Omit = omit, - topic_ids: Optional[SequenceNotStr[str]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCreateOverviewResponse: - """ - Accuracy Overview - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v1/reports/accuracy/overview", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "citation_categories": citation_categories, - "comparison_end_date": comparison_end_date, - "comparison_start_date": comparison_start_date, - "date_bucket": date_bucket, - "exclude_topic_ids": exclude_topic_ids, - "group_by": group_by, - "include_no_persona": include_no_persona, - "include_no_tag": include_no_tag, - "persona_ids": persona_ids, - "platform_ids": platform_ids, - "prompt_ids": prompt_ids, - "region_ids": region_ids, - "tag_filter_type": tag_filter_type, - "tag_ids": tag_ids, - "topic_ids": topic_ids, - }, - accuracy_create_overview_params.AccuracyCreateOverviewParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AccuracyCreateOverviewResponse, - ) - - async def create_top_inaccurate_claims( - self, - *, - category_id: str, - end_date: str, - start_date: str, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - comparison_start_date: Optional[str] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - include_no_persona: bool | Omit = omit, - include_no_tag: bool | Omit = omit, - limit: int | Omit = omit, - persona_ids: Optional[SequenceNotStr[str]] | Omit = omit, - platform_ids: Optional[SequenceNotStr[str]] | Omit = omit, - prompt_ids: Optional[SequenceNotStr[str]] | Omit = omit, - region_ids: Optional[SequenceNotStr[str]] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - tag_ids: Optional[SequenceNotStr[str]] | Omit = omit, - topic_ids: Optional[SequenceNotStr[str]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCreateTopInaccurateClaimsResponse: - """ - Accuracy Top Inaccurate Claims - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v1/reports/accuracy/top-inaccurate-claims", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "citation_categories": citation_categories, - "comparison_end_date": comparison_end_date, - "comparison_start_date": comparison_start_date, - "exclude_topic_ids": exclude_topic_ids, - "include_no_persona": include_no_persona, - "include_no_tag": include_no_tag, - "limit": limit, - "persona_ids": persona_ids, - "platform_ids": platform_ids, - "prompt_ids": prompt_ids, - "region_ids": region_ids, - "tag_filter_type": tag_filter_type, - "tag_ids": tag_ids, - "topic_ids": topic_ids, - }, - accuracy_create_top_inaccurate_claims_params.AccuracyCreateTopInaccurateClaimsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AccuracyCreateTopInaccurateClaimsResponse, - ) - - async def create_topic_ids( - self, - *, - category_id: str, - end_date: str, - start_date: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCreateTopicIDsResponse: - """ - Accuracy Topic Ids - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v1/reports/accuracy/topic-ids", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - }, - accuracy_create_topic_ids_params.AccuracyCreateTopicIDsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=AccuracyCreateTopicIDsResponse, - ) - - -class AccuracyResourceWithRawResponse: - def __init__(self, accuracy: AccuracyResource) -> None: - self._accuracy = accuracy - - self.create_breakdown = to_raw_response_wrapper( - accuracy.create_breakdown, - ) - self.create_citation_analysis = to_raw_response_wrapper( - accuracy.create_citation_analysis, - ) - self.create_claim_breakdown = to_raw_response_wrapper( - accuracy.create_claim_breakdown, - ) - self.create_claim_citations = to_raw_response_wrapper( - accuracy.create_claim_citations, - ) - self.create_cluster_example_runs = to_raw_response_wrapper( - accuracy.create_cluster_example_runs, - ) - self.create_cluster_verification_pairs = to_raw_response_wrapper( - accuracy.create_cluster_verification_pairs, - ) - self.create_factcheck_setup_status = to_raw_response_wrapper( - accuracy.create_factcheck_setup_status, - ) - self.create_inaccuracy_drivers = to_raw_response_wrapper( - accuracy.create_inaccuracy_drivers, - ) - self.create_inaccurate_clusters = to_raw_response_wrapper( - accuracy.create_inaccurate_clusters, - ) - self.create_inaccurate_themes = to_raw_response_wrapper( - accuracy.create_inaccurate_themes, - ) - self.create_overview = to_raw_response_wrapper( - accuracy.create_overview, - ) - self.create_top_inaccurate_claims = to_raw_response_wrapper( - accuracy.create_top_inaccurate_claims, - ) - self.create_topic_ids = to_raw_response_wrapper( - accuracy.create_topic_ids, - ) - - -class AsyncAccuracyResourceWithRawResponse: - def __init__(self, accuracy: AsyncAccuracyResource) -> None: - self._accuracy = accuracy - - self.create_breakdown = async_to_raw_response_wrapper( - accuracy.create_breakdown, - ) - self.create_citation_analysis = async_to_raw_response_wrapper( - accuracy.create_citation_analysis, - ) - self.create_claim_breakdown = async_to_raw_response_wrapper( - accuracy.create_claim_breakdown, - ) - self.create_claim_citations = async_to_raw_response_wrapper( - accuracy.create_claim_citations, - ) - self.create_cluster_example_runs = async_to_raw_response_wrapper( - accuracy.create_cluster_example_runs, - ) - self.create_cluster_verification_pairs = async_to_raw_response_wrapper( - accuracy.create_cluster_verification_pairs, - ) - self.create_factcheck_setup_status = async_to_raw_response_wrapper( - accuracy.create_factcheck_setup_status, - ) - self.create_inaccuracy_drivers = async_to_raw_response_wrapper( - accuracy.create_inaccuracy_drivers, - ) - self.create_inaccurate_clusters = async_to_raw_response_wrapper( - accuracy.create_inaccurate_clusters, - ) - self.create_inaccurate_themes = async_to_raw_response_wrapper( - accuracy.create_inaccurate_themes, - ) - self.create_overview = async_to_raw_response_wrapper( - accuracy.create_overview, - ) - self.create_top_inaccurate_claims = async_to_raw_response_wrapper( - accuracy.create_top_inaccurate_claims, - ) - self.create_topic_ids = async_to_raw_response_wrapper( - accuracy.create_topic_ids, - ) - - -class AccuracyResourceWithStreamingResponse: - def __init__(self, accuracy: AccuracyResource) -> None: - self._accuracy = accuracy - - self.create_breakdown = to_streamed_response_wrapper( - accuracy.create_breakdown, - ) - self.create_citation_analysis = to_streamed_response_wrapper( - accuracy.create_citation_analysis, - ) - self.create_claim_breakdown = to_streamed_response_wrapper( - accuracy.create_claim_breakdown, - ) - self.create_claim_citations = to_streamed_response_wrapper( - accuracy.create_claim_citations, - ) - self.create_cluster_example_runs = to_streamed_response_wrapper( - accuracy.create_cluster_example_runs, - ) - self.create_cluster_verification_pairs = to_streamed_response_wrapper( - accuracy.create_cluster_verification_pairs, - ) - self.create_factcheck_setup_status = to_streamed_response_wrapper( - accuracy.create_factcheck_setup_status, - ) - self.create_inaccuracy_drivers = to_streamed_response_wrapper( - accuracy.create_inaccuracy_drivers, - ) - self.create_inaccurate_clusters = to_streamed_response_wrapper( - accuracy.create_inaccurate_clusters, - ) - self.create_inaccurate_themes = to_streamed_response_wrapper( - accuracy.create_inaccurate_themes, - ) - self.create_overview = to_streamed_response_wrapper( - accuracy.create_overview, - ) - self.create_top_inaccurate_claims = to_streamed_response_wrapper( - accuracy.create_top_inaccurate_claims, - ) - self.create_topic_ids = to_streamed_response_wrapper( - accuracy.create_topic_ids, - ) - - -class AsyncAccuracyResourceWithStreamingResponse: - def __init__(self, accuracy: AsyncAccuracyResource) -> None: - self._accuracy = accuracy - - self.create_breakdown = async_to_streamed_response_wrapper( - accuracy.create_breakdown, - ) - self.create_citation_analysis = async_to_streamed_response_wrapper( - accuracy.create_citation_analysis, - ) - self.create_claim_breakdown = async_to_streamed_response_wrapper( - accuracy.create_claim_breakdown, - ) - self.create_claim_citations = async_to_streamed_response_wrapper( - accuracy.create_claim_citations, - ) - self.create_cluster_example_runs = async_to_streamed_response_wrapper( - accuracy.create_cluster_example_runs, - ) - self.create_cluster_verification_pairs = async_to_streamed_response_wrapper( - accuracy.create_cluster_verification_pairs, - ) - self.create_factcheck_setup_status = async_to_streamed_response_wrapper( - accuracy.create_factcheck_setup_status, - ) - self.create_inaccuracy_drivers = async_to_streamed_response_wrapper( - accuracy.create_inaccuracy_drivers, - ) - self.create_inaccurate_clusters = async_to_streamed_response_wrapper( - accuracy.create_inaccurate_clusters, - ) - self.create_inaccurate_themes = async_to_streamed_response_wrapper( - accuracy.create_inaccurate_themes, - ) - self.create_overview = async_to_streamed_response_wrapper( - accuracy.create_overview, - ) - self.create_top_inaccurate_claims = async_to_streamed_response_wrapper( - accuracy.create_top_inaccurate_claims, - ) - self.create_topic_ids = async_to_streamed_response_wrapper( - accuracy.create_topic_ids, - ) diff --git a/src/profound/resources/reports/factcheck/__init__.py b/src/profound/resources/reports/factcheck/__init__.py deleted file mode 100644 index d40c2bde..00000000 --- a/src/profound/resources/reports/factcheck/__init__.py +++ /dev/null @@ -1,33 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from .claims import ( - ClaimsResource, - AsyncClaimsResource, - ClaimsResourceWithRawResponse, - AsyncClaimsResourceWithRawResponse, - ClaimsResourceWithStreamingResponse, - AsyncClaimsResourceWithStreamingResponse, -) -from .factcheck import ( - FactcheckResource, - AsyncFactcheckResource, - FactcheckResourceWithRawResponse, - AsyncFactcheckResourceWithRawResponse, - FactcheckResourceWithStreamingResponse, - AsyncFactcheckResourceWithStreamingResponse, -) - -__all__ = [ - "ClaimsResource", - "AsyncClaimsResource", - "ClaimsResourceWithRawResponse", - "AsyncClaimsResourceWithRawResponse", - "ClaimsResourceWithStreamingResponse", - "AsyncClaimsResourceWithStreamingResponse", - "FactcheckResource", - "AsyncFactcheckResource", - "FactcheckResourceWithRawResponse", - "AsyncFactcheckResourceWithRawResponse", - "FactcheckResourceWithStreamingResponse", - "AsyncFactcheckResourceWithStreamingResponse", -] diff --git a/src/profound/resources/reports/factcheck/claims.py b/src/profound/resources/reports/factcheck/claims.py deleted file mode 100644 index e591f5d9..00000000 --- a/src/profound/resources/reports/factcheck/claims.py +++ /dev/null @@ -1,398 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Any, List, Optional, cast -from typing_extensions import Literal - -import httpx - -from ...._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from ...._utils import maybe_transform, async_maybe_transform -from ...._compat import cached_property -from ...._resource import SyncAPIResource, AsyncAPIResource -from ...._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from ...._streaming import Stream, AsyncStream -from ...._base_client import make_request_options -from ....types.reports.factcheck import claim_query_claims_params, claim_stream_claims_params -from ....types.reports.factcheck.claim_query_claims_response import ClaimQueryClaimsResponse -from ....types.reports.factcheck.claim_stream_claims_response import ClaimStreamClaimsResponse - -__all__ = ["ClaimsResource", "AsyncClaimsResource"] - - -class ClaimsResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> ClaimsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return ClaimsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> ClaimsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return ClaimsResourceWithStreamingResponse(self) - - def query_claims( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - filter: Optional[claim_query_claims_params.Filter] | Omit = omit, - group_by: List[Literal["model", "region", "persona", "prompt", "topic", "tag", "theme"]] | Omit = omit, - include: Optional[List[Literal["theme", "reasoning", "models", "evidence", "citation_sources"]]] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ClaimQueryClaimsResponse: - """ - Query Claims - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - group_by: Optional single dim to section the claims (e.g. per model). Empty → one flat - claim list. - - include: Optional per-claim detail fields to add to each claim (see options). - - limit: Claims (or sections) per page; default 25. - - max_results: Stream only: cap entries returned. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v2/reports/factcheck/claims", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "include": include, - "limit": limit, - "max_results": max_results, - }, - claim_query_claims_params.ClaimQueryClaimsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ClaimQueryClaimsResponse, - ) - - def stream_claims( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - filter: Optional[claim_stream_claims_params.Filter] | Omit = omit, - group_by: List[Literal["model", "region", "persona", "prompt", "topic", "tag", "theme"]] | Omit = omit, - include: Optional[List[Literal["theme", "reasoning", "models", "evidence", "citation_sources"]]] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Stream[ClaimStreamClaimsResponse]: - """ - Stream Claims - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - group_by: Optional single dim to section the claims (e.g. per model). Empty → one flat - claim list. - - include: Optional per-claim detail fields to add to each claim (see options). - - limit: Claims (or sections) per page; default 25. - - max_results: Stream only: cap entries returned. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return self._post( - "/v2/reports/factcheck/claims/stream", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "include": include, - "limit": limit, - "max_results": max_results, - }, - claim_stream_claims_params.ClaimStreamClaimsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, ClaimStreamClaimsResponse - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=Stream[ClaimStreamClaimsResponse], - ) - - -class AsyncClaimsResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncClaimsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return AsyncClaimsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncClaimsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return AsyncClaimsResourceWithStreamingResponse(self) - - async def query_claims( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - filter: Optional[claim_query_claims_params.Filter] | Omit = omit, - group_by: List[Literal["model", "region", "persona", "prompt", "topic", "tag", "theme"]] | Omit = omit, - include: Optional[List[Literal["theme", "reasoning", "models", "evidence", "citation_sources"]]] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ClaimQueryClaimsResponse: - """ - Query Claims - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - group_by: Optional single dim to section the claims (e.g. per model). Empty → one flat - claim list. - - include: Optional per-claim detail fields to add to each claim (see options). - - limit: Claims (or sections) per page; default 25. - - max_results: Stream only: cap entries returned. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v2/reports/factcheck/claims", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "include": include, - "limit": limit, - "max_results": max_results, - }, - claim_query_claims_params.ClaimQueryClaimsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ClaimQueryClaimsResponse, - ) - - async def stream_claims( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - filter: Optional[claim_stream_claims_params.Filter] | Omit = omit, - group_by: List[Literal["model", "region", "persona", "prompt", "topic", "tag", "theme"]] | Omit = omit, - include: Optional[List[Literal["theme", "reasoning", "models", "evidence", "citation_sources"]]] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncStream[ClaimStreamClaimsResponse]: - """ - Stream Claims - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - group_by: Optional single dim to section the claims (e.g. per model). Empty → one flat - claim list. - - include: Optional per-claim detail fields to add to each claim (see options). - - limit: Claims (or sections) per page; default 25. - - max_results: Stream only: cap entries returned. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return await self._post( - "/v2/reports/factcheck/claims/stream", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "include": include, - "limit": limit, - "max_results": max_results, - }, - claim_stream_claims_params.ClaimStreamClaimsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, ClaimStreamClaimsResponse - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=AsyncStream[ClaimStreamClaimsResponse], - ) - - -class ClaimsResourceWithRawResponse: - def __init__(self, claims: ClaimsResource) -> None: - self._claims = claims - - self.query_claims = to_raw_response_wrapper( - claims.query_claims, - ) - self.stream_claims = to_raw_response_wrapper( - claims.stream_claims, - ) - - -class AsyncClaimsResourceWithRawResponse: - def __init__(self, claims: AsyncClaimsResource) -> None: - self._claims = claims - - self.query_claims = async_to_raw_response_wrapper( - claims.query_claims, - ) - self.stream_claims = async_to_raw_response_wrapper( - claims.stream_claims, - ) - - -class ClaimsResourceWithStreamingResponse: - def __init__(self, claims: ClaimsResource) -> None: - self._claims = claims - - self.query_claims = to_streamed_response_wrapper( - claims.query_claims, - ) - self.stream_claims = to_streamed_response_wrapper( - claims.stream_claims, - ) - - -class AsyncClaimsResourceWithStreamingResponse: - def __init__(self, claims: AsyncClaimsResource) -> None: - self._claims = claims - - self.query_claims = async_to_streamed_response_wrapper( - claims.query_claims, - ) - self.stream_claims = async_to_streamed_response_wrapper( - claims.stream_claims, - ) diff --git a/src/profound/resources/reports/factcheck/factcheck.py b/src/profound/resources/reports/factcheck/factcheck.py deleted file mode 100644 index b748ca0f..00000000 --- a/src/profound/resources/reports/factcheck/factcheck.py +++ /dev/null @@ -1,418 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Any, List, Optional, cast -from typing_extensions import Literal - -import httpx - -from .claims import ( - ClaimsResource, - AsyncClaimsResource, - ClaimsResourceWithRawResponse, - AsyncClaimsResourceWithRawResponse, - ClaimsResourceWithStreamingResponse, - AsyncClaimsResourceWithStreamingResponse, -) -from ...._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from ...._utils import maybe_transform, async_maybe_transform -from ...._compat import cached_property -from ...._resource import SyncAPIResource, AsyncAPIResource -from ...._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from ...._streaming import Stream, AsyncStream -from ...._base_client import make_request_options -from ....types.reports import factcheck_query_scores_params, factcheck_stream_scores_params -from ....types.reports.factcheck_query_scores_response import FactcheckQueryScoresResponse -from ....types.reports.factcheck_stream_scores_response import FactcheckStreamScoresResponse - -__all__ = ["FactcheckResource", "AsyncFactcheckResource"] - - -class FactcheckResource(SyncAPIResource): - @cached_property - def claims(self) -> ClaimsResource: - return ClaimsResource(self._client) - - @cached_property - def with_raw_response(self) -> FactcheckResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return FactcheckResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> FactcheckResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return FactcheckResourceWithStreamingResponse(self) - - def query_scores( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - filter: Optional[factcheck_query_scores_params.Filter] | Omit = omit, - group_by: List[Literal["date", "model", "region", "persona", "prompt", "topic", "tag", "citation", "theme"]] - | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> FactcheckQueryScoresResponse: - """ - Query Scores - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - group_by: Up to two dimensions to slice by; empty returns the headline score. `citation` - must be alone. - - limit: Rows per page; default 100. - - max_results: Stream only: cap rows returned. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v2/reports/factcheck", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "limit": limit, - "max_results": max_results, - }, - factcheck_query_scores_params.FactcheckQueryScoresParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=FactcheckQueryScoresResponse, - ) - - def stream_scores( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - filter: Optional[factcheck_stream_scores_params.Filter] | Omit = omit, - group_by: List[Literal["date", "model", "region", "persona", "prompt", "topic", "tag", "citation", "theme"]] - | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Stream[FactcheckStreamScoresResponse]: - """ - Stream Scores - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - group_by: Up to two dimensions to slice by; empty returns the headline score. `citation` - must be alone. - - limit: Rows per page; default 100. - - max_results: Stream only: cap rows returned. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return self._post( - "/v2/reports/factcheck/stream", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "limit": limit, - "max_results": max_results, - }, - factcheck_stream_scores_params.FactcheckStreamScoresParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, FactcheckStreamScoresResponse - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=Stream[FactcheckStreamScoresResponse], - ) - - -class AsyncFactcheckResource(AsyncAPIResource): - @cached_property - def claims(self) -> AsyncClaimsResource: - return AsyncClaimsResource(self._client) - - @cached_property - def with_raw_response(self) -> AsyncFactcheckResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return AsyncFactcheckResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncFactcheckResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return AsyncFactcheckResourceWithStreamingResponse(self) - - async def query_scores( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - filter: Optional[factcheck_query_scores_params.Filter] | Omit = omit, - group_by: List[Literal["date", "model", "region", "persona", "prompt", "topic", "tag", "citation", "theme"]] - | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> FactcheckQueryScoresResponse: - """ - Query Scores - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - group_by: Up to two dimensions to slice by; empty returns the headline score. `citation` - must be alone. - - limit: Rows per page; default 100. - - max_results: Stream only: cap rows returned. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v2/reports/factcheck", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "limit": limit, - "max_results": max_results, - }, - factcheck_query_scores_params.FactcheckQueryScoresParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=FactcheckQueryScoresResponse, - ) - - async def stream_scores( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - filter: Optional[factcheck_stream_scores_params.Filter] | Omit = omit, - group_by: List[Literal["date", "model", "region", "persona", "prompt", "topic", "tag", "citation", "theme"]] - | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncStream[FactcheckStreamScoresResponse]: - """ - Stream Scores - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - group_by: Up to two dimensions to slice by; empty returns the headline score. `citation` - must be alone. - - limit: Rows per page; default 100. - - max_results: Stream only: cap rows returned. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return await self._post( - "/v2/reports/factcheck/stream", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "limit": limit, - "max_results": max_results, - }, - factcheck_stream_scores_params.FactcheckStreamScoresParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, FactcheckStreamScoresResponse - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=AsyncStream[FactcheckStreamScoresResponse], - ) - - -class FactcheckResourceWithRawResponse: - def __init__(self, factcheck: FactcheckResource) -> None: - self._factcheck = factcheck - - self.query_scores = to_raw_response_wrapper( - factcheck.query_scores, - ) - self.stream_scores = to_raw_response_wrapper( - factcheck.stream_scores, - ) - - @cached_property - def claims(self) -> ClaimsResourceWithRawResponse: - return ClaimsResourceWithRawResponse(self._factcheck.claims) - - -class AsyncFactcheckResourceWithRawResponse: - def __init__(self, factcheck: AsyncFactcheckResource) -> None: - self._factcheck = factcheck - - self.query_scores = async_to_raw_response_wrapper( - factcheck.query_scores, - ) - self.stream_scores = async_to_raw_response_wrapper( - factcheck.stream_scores, - ) - - @cached_property - def claims(self) -> AsyncClaimsResourceWithRawResponse: - return AsyncClaimsResourceWithRawResponse(self._factcheck.claims) - - -class FactcheckResourceWithStreamingResponse: - def __init__(self, factcheck: FactcheckResource) -> None: - self._factcheck = factcheck - - self.query_scores = to_streamed_response_wrapper( - factcheck.query_scores, - ) - self.stream_scores = to_streamed_response_wrapper( - factcheck.stream_scores, - ) - - @cached_property - def claims(self) -> ClaimsResourceWithStreamingResponse: - return ClaimsResourceWithStreamingResponse(self._factcheck.claims) - - -class AsyncFactcheckResourceWithStreamingResponse: - def __init__(self, factcheck: AsyncFactcheckResource) -> None: - self._factcheck = factcheck - - self.query_scores = async_to_streamed_response_wrapper( - factcheck.query_scores, - ) - self.stream_scores = async_to_streamed_response_wrapper( - factcheck.stream_scores, - ) - - @cached_property - def claims(self) -> AsyncClaimsResourceWithStreamingResponse: - return AsyncClaimsResourceWithStreamingResponse(self._factcheck.claims) diff --git a/src/profound/resources/reports/reports.py b/src/profound/resources/reports/reports.py deleted file mode 100644 index c7e00832..00000000 --- a/src/profound/resources/reports/reports.py +++ /dev/null @@ -1,4083 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Any, Dict, List, Union, Iterable, Optional, cast -from datetime import datetime -from typing_extensions import Literal - -import httpx - -from ...types import ( - report_citations_params, - report_sentiment_params, - report_visibility_params, - report_sentiment_v2_params, - report_query_fanouts_params, - report_get_bots_report_params, - report_query_citations_params, - report_query_sentiment_params, - report_query_visibility_params, - report_stream_citations_params, - report_stream_sentiment_params, - report_stream_visibility_params, - report_get_bots_report_v2_params, - report_query_query_fanouts_params, - report_stream_citations_v2_params, - report_stream_sentiment_v2_params, - report_get_referrals_report_params, - report_stream_query_fanouts_params, - report_stream_visibility_v2_params, - report_get_referrals_report_v2_params, -) -from ..._types import Body, Omit, Query, Headers, NotGiven, SequenceNotStr, omit, not_given -from ..._utils import maybe_transform, async_maybe_transform -from .accuracy import ( - AccuracyResource, - AsyncAccuracyResource, - AccuracyResourceWithRawResponse, - AsyncAccuracyResourceWithRawResponse, - AccuracyResourceWithStreamingResponse, - AsyncAccuracyResourceWithStreamingResponse, -) -from .shopping import ( - ShoppingResource, - AsyncShoppingResource, - ShoppingResourceWithRawResponse, - AsyncShoppingResourceWithRawResponse, - ShoppingResourceWithStreamingResponse, - AsyncShoppingResourceWithStreamingResponse, -) -from ..._compat import cached_property -from ..._resource import SyncAPIResource, AsyncAPIResource -from ..._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from ..._streaming import Stream, AsyncStream -from .social.social import ( - SocialResource, - AsyncSocialResource, - SocialResourceWithRawResponse, - AsyncSocialResourceWithRawResponse, - SocialResourceWithStreamingResponse, - AsyncSocialResourceWithStreamingResponse, -) -from ..._base_client import make_request_options -from .web_search_results import ( - WebSearchResultsResource, - AsyncWebSearchResultsResource, - WebSearchResultsResourceWithRawResponse, - AsyncWebSearchResultsResourceWithRawResponse, - WebSearchResultsResourceWithStreamingResponse, - AsyncWebSearchResultsResourceWithStreamingResponse, -) -from .factcheck.factcheck import ( - FactcheckResource, - AsyncFactcheckResource, - FactcheckResourceWithRawResponse, - AsyncFactcheckResourceWithRawResponse, - FactcheckResourceWithStreamingResponse, - AsyncFactcheckResourceWithStreamingResponse, -) -from ...types.report_response import ReportResponse -from ...types.shared_params.pagination import Pagination -from ...types.report_citations_response import ReportCitationsResponse -from ...types.report_sentiment_v2_response import ReportSentimentV2Response -from ...types.report_query_citations_response import ReportQueryCitationsResponse -from ...types.report_query_sentiment_response import ReportQuerySentimentResponse -from ...types.report_query_visibility_response import ReportQueryVisibilityResponse -from ...types.report_stream_citations_response import ReportStreamCitationsResponse -from ...types.report_stream_sentiment_response import ReportStreamSentimentResponse -from ...types.report_stream_visibility_response import ReportStreamVisibilityResponse -from ...types.report_query_query_fanouts_response import ReportQueryQueryFanoutsResponse -from ...types.report_stream_citations_v2_response import ReportStreamCitationsV2Response -from ...types.report_stream_sentiment_v2_response import ReportStreamSentimentV2Response -from ...types.report_stream_query_fanouts_response import ReportStreamQueryFanoutsResponse -from ...types.report_stream_visibility_v2_response import ReportStreamVisibilityV2Response - -__all__ = ["ReportsResource", "AsyncReportsResource"] - - -class ReportsResource(SyncAPIResource): - @cached_property - def web_search_results(self) -> WebSearchResultsResource: - return WebSearchResultsResource(self._client) - - @cached_property - def shopping(self) -> ShoppingResource: - return ShoppingResource(self._client) - - @cached_property - def accuracy(self) -> AccuracyResource: - return AccuracyResource(self._client) - - @cached_property - def factcheck(self) -> FactcheckResource: - return FactcheckResource(self._client) - - @cached_property - def social(self) -> SocialResource: - return SocialResource(self._client) - - @cached_property - def with_raw_response(self) -> ReportsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return ReportsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> ReportsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return ReportsResourceWithStreamingResponse(self) - - def citations( - self, - *, - category_id: str, - end_date: Union[str, datetime], - metrics: List[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]], - start_date: Union[str, datetime], - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: List[ - Literal[ - "hostname", - "path", - "date", - "region", - "topic", - "topic_id", - "model", - "tag", - "prompt", - "prompt_id", - "url", - "root_domain", - "persona", - "citation_category", - ] - ] - | Omit = omit, - filters: Iterable[report_citations_params.Filter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportCitationsResponse: - """ - Get citations for a given category. - - The `mentioned` filter supports `is true` and `is false`. It uses the latest - page analysis available at or before `end_date`; pages without an analysis by - then are excluded from both values. `citation_share` keeps all otherwise - eligible citations in its denominator when this filter is used. - - Args: - end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full - ISO timestamp. - - metrics: Metrics to include. `share_of_voice` is deprecated, use `citation_share` - instead. - - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or - full ISO timestamp. - - date_interval: Date interval for the report. (only used with date dimension) - - dimensions: Dimensions to group the report by. - - filters: List of filters to apply to the citations report. - - order_by: Custom ordering of the report results. - - The order is a record of key-value pairs where: - - `key` is the field to order by, which can be a metric or dimension - - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. - - When not specified, the default order is the first metric in the query descending. - - pagination: Pagination settings for the report results. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v1/reports/citations", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "metrics": metrics, - "start_date": start_date, - "date_interval": date_interval, - "dimensions": dimensions, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - }, - report_citations_params.ReportCitationsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ReportCitationsResponse, - ) - - def get_bots_report( - self, - *, - domain: str, - metrics: List[Literal["count", "citations", "indexing", "training", "last_visit"]], - start_date: Union[str, datetime], - date_interval: Literal["hour", "day", "week", "month", "year", "relative_week"] | Omit = omit, - dimensions: List[Literal["date", "path", "bot_name", "bot_provider"]] | Omit = omit, - end_date: Union[str, datetime] | Omit = omit, - filters: Iterable[report_get_bots_report_params.Filter] | Omit = omit, - metric_filters: Iterable[report_get_bots_report_params.MetricFilter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - organization_id: Optional[str] | Omit = omit, - pagination: Pagination | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """ - Get bot traffic report from the daily aggregated materialized view. - - This endpoint queries pre-aggregated daily bot data, making it efficient for - large date ranges and high-traffic sites. - - Metrics: - - - count: unique bot visits - - citations: unique citation events - - indexing: unique indexing events - - training: unique training events - - last_visit: most recent visit timestamp - - Args: - domain: Domain to query logs for. - - start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, - or full ISO timestamp. - - date_interval: Date interval for the report. (only used with date dimension) - - dimensions: Dimensions to group the report by. - - end_date: End date for logs. Accepts same formats as start_date. Defaults to now if - omitted. - - filters: Filters for bots report. - - metric_filters: Numeric filters applied after report metrics are calculated. - - order_by: Custom ordering of the report results. - - The order is a record of key-value pairs where: - - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for - descending. - - When not specified, the default order is the first metric in the query - descending. - - pagination: Pagination settings for the report results. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v1/reports/bots", - body=maybe_transform( - { - "domain": domain, - "metrics": metrics, - "start_date": start_date, - "date_interval": date_interval, - "dimensions": dimensions, - "end_date": end_date, - "filters": filters, - "metric_filters": metric_filters, - "order_by": order_by, - "organization_id": organization_id, - "pagination": pagination, - }, - report_get_bots_report_params.ReportGetBotsReportParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ReportResponse, - ) - - def get_bots_report_v2( - self, - *, - domain: str, - metrics: List[Literal["count", "citations", "indexing", "training", "last_visit", "agents"]], - start_date: Union[str, datetime], - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: List[Literal["date", "hour", "path", "bot_name", "bot_provider", "bot_type"]] | Omit = omit, - domain_id: Optional[str] | Omit = omit, - end_date: Union[str, datetime] | Omit = omit, - filters: Iterable[report_get_bots_report_v2_params.Filter] | Omit = omit, - metric_filters: Iterable[report_get_bots_report_v2_params.MetricFilter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - organization_id: Optional[str] | Omit = omit, - pagination: Pagination | Omit = omit, - tags: SequenceNotStr[str] | Omit = omit, - timezone: str | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """ - Get bot traffic report from the hourly aggregated materialized view (UTC-based). - - Supports date_interval="hour", calendar intervals through "year", "quarter", and - "relative_week". - - Metrics: - - - count: unique bot visits - - citations: unique citation events (ai_assistant bot type) - - indexing: unique indexing events (index bot type) - - training: unique training events (ai_training bot type) - - last_visit: most recent visit timestamp - - Dimensions: - - - date, path, bot_name, bot_provider, bot_type - - Args: - domain: Domain to query logs for. - - start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, - or full ISO timestamp. - - date_interval: Date interval for the report. (only used with date dimension) - - dimensions: Dimensions to group the report by. - - domain_id: Domain UUID used for tag lookups. - - end_date: End date in UTC. Accepts same formats as start_date. Defaults to now UTC if - omitted. - - filters: Filters for bots report. - - metric_filters: Numeric filters applied after report metrics are calculated. - - order_by: Custom ordering of the report results. - - The order is a record of key-value pairs where: - - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for - descending. - - When not specified, the default order is the first metric in the query - descending. - - pagination: Pagination settings for the report results. - - timezone: IANA timezone name for date bucketing and filter boundaries. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v2/reports/bots", - body=maybe_transform( - { - "domain": domain, - "metrics": metrics, - "start_date": start_date, - "date_interval": date_interval, - "dimensions": dimensions, - "domain_id": domain_id, - "end_date": end_date, - "filters": filters, - "metric_filters": metric_filters, - "order_by": order_by, - "organization_id": organization_id, - "pagination": pagination, - "tags": tags, - "timezone": timezone, - }, - report_get_bots_report_v2_params.ReportGetBotsReportV2Params, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ReportResponse, - ) - - def get_referrals_report( - self, - *, - domain: str, - metrics: List[Literal["visits", "last_visit"]], - start_date: Union[str, datetime], - date_interval: Literal["hour", "day", "week", "month", "year", "relative_week"] | Omit = omit, - dimensions: List[Literal["date", "path", "referral_source"]] | Omit = omit, - end_date: Union[str, datetime] | Omit = omit, - filters: Iterable[report_get_referrals_report_params.Filter] | Omit = omit, - metric_filters: Iterable[report_get_referrals_report_params.MetricFilter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - organization_id: Optional[str] | Omit = omit, - pagination: Pagination | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """ - Get referral traffic report from the daily aggregated materialized view. - - This endpoint queries pre-aggregated daily referral data, making it efficient - for large date ranges and high-traffic sites. - - Args: - domain: Domain to query logs for. - - start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, - or full ISO timestamp. - - date_interval: Date interval for the report. (only used with date dimension) - - dimensions: Dimensions to group the report by. - - end_date: End date for logs. Accepts same formats as start_date. Defaults to now if - omitted. - - filters: Filters for referrals report. - - metric_filters: Numeric filters applied after report metrics are calculated. - - order_by: Custom ordering of the report results. - - The order is a record of key-value pairs where: - - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for - descending. - - When not specified, the default order is the first metric in the query - descending. - - pagination: Pagination settings for the report results. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v1/reports/referrals", - body=maybe_transform( - { - "domain": domain, - "metrics": metrics, - "start_date": start_date, - "date_interval": date_interval, - "dimensions": dimensions, - "end_date": end_date, - "filters": filters, - "metric_filters": metric_filters, - "order_by": order_by, - "organization_id": organization_id, - "pagination": pagination, - }, - report_get_referrals_report_params.ReportGetReferralsReportParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ReportResponse, - ) - - def get_referrals_report_v2( - self, - *, - domain: str, - metrics: List[Literal["visits", "last_visit"]], - start_date: Union[str, datetime], - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: List[Literal["date", "hour", "path", "referral_source", "referral_type"]] | Omit = omit, - end_date: Union[str, datetime] | Omit = omit, - filters: Iterable[report_get_referrals_report_v2_params.Filter] | Omit = omit, - metric_filters: Iterable[report_get_referrals_report_v2_params.MetricFilter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - organization_id: Optional[str] | Omit = omit, - pagination: Pagination | Omit = omit, - timezone: str | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """ - Get referral traffic report from the hourly aggregated materialized view - (UTC-based). - - Supports date_interval="hour", calendar intervals through "year", "quarter", and - "relative_week". - - Args: - domain: Domain to query logs for. - - start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, - or full ISO timestamp. - - date_interval: Date interval for the report. (only used with date dimension) - - dimensions: Dimensions to group the report by. - - end_date: End date in UTC. Accepts same formats as start_date. Defaults to now UTC if - omitted. - - filters: Filters for referrals report. - - metric_filters: Numeric filters applied after report metrics are calculated. - - order_by: Custom ordering of the report results. - - The order is a record of key-value pairs where: - - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for - descending. - - When not specified, the default order is the first metric in the query - descending. - - pagination: Pagination settings for the report results. - - timezone: IANA timezone name for date bucketing and filter boundaries. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v2/reports/referrals", - body=maybe_transform( - { - "domain": domain, - "metrics": metrics, - "start_date": start_date, - "date_interval": date_interval, - "dimensions": dimensions, - "end_date": end_date, - "filters": filters, - "metric_filters": metric_filters, - "order_by": order_by, - "organization_id": organization_id, - "pagination": pagination, - "timezone": timezone, - }, - report_get_referrals_report_v2_params.ReportGetReferralsReportV2Params, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ReportResponse, - ) - - def query_citations( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - entity: Literal["domain", "page", "citation_category"] | Omit = omit, - filter: Optional[report_query_citations_params.Filter] | Omit = omit, - group_by: List[Literal["page", "date", "model", "topic", "region", "persona", "prompt"]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[List[Literal["count", "citation_share", "rank", "first_cited_at"]]] | Omit = omit, - scope: Literal["all", "owned"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportQueryCitationsResponse: - """ - Query Citations V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - entity: What each row represents: `domain` (default), `page`, or `citation_category`. - Legacy: `group_by: ["page"]` (with `entity` omitted) is still accepted and is - equivalent to `entity: "page"`. `citation_category` uses the dashboard split - view: a citation counts under both its page-level and domain-level category, so - category shares can sum to more than 100%. - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - - scope: `all` (every cited domain) or `owned` (only your owned domains). Applies to - `entity=domain`. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v2/reports/citations", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "entity": entity, - "filter": filter, - "group_by": group_by, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - "scope": scope, - }, - report_query_citations_params.ReportQueryCitationsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ReportQueryCitationsResponse, - ) - - def query_fanouts( - self, - *, - category_id: str, - end_date: Union[str, datetime], - metrics: List[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]], - start_date: Union[str, datetime], - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: List[Literal["prompt", "query", "model", "region", "date"]] | Omit = omit, - filters: Iterable[report_query_fanouts_params.Filter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """Query Fanouts - - Args: - end_date: End date. - - Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. - - metrics: Metrics to return for each row. - - start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. - - date_interval: Date interval for the report. (only used with date dimension) - - dimensions: Dimensions to group the report by. - - filters: Filters to apply to the query fanout report. - - order_by: Custom ordering. Keys must be a requested metric or the `date` dimension. Values - are `asc` or `desc`. Defaults to first metric descending. - - pagination: Pagination settings for the report results. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v1/reports/query-fanouts", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "metrics": metrics, - "start_date": start_date, - "date_interval": date_interval, - "dimensions": dimensions, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - }, - report_query_fanouts_params.ReportQueryFanoutsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ReportResponse, - ) - - def query_query_fanouts( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - filter: Optional[report_query_query_fanouts_params.Filter] | Omit = omit, - group_by: List[Literal["date", "model", "region", "prompt", "query"]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[List[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]]] - | Omit = omit, - sort: Optional[report_query_query_fanouts_params.Sort] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportQueryQueryFanoutsResponse: - """ - Query Fanouts V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v2/reports/query-fanouts", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - "sort": sort, - }, - report_query_query_fanouts_params.ReportQueryQueryFanoutsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ReportQueryQueryFanoutsResponse, - ) - - def query_sentiment( - self, - *, - asset: str, - category_id: str, - end_date: str, - start_date: str, - comparison_end_date: Optional[str] | Omit = omit, - comparison_start_date: Optional[str] | Omit = omit, - cursor: Optional[str] | Omit = omit, - filter: Optional[report_query_sentiment_params.Filter] | Omit = omit, - group_by: List[ - Literal[ - "date", "model", "topic", "region", "prompt", "persona", "tag", "theme", "claim", "run", "competitor" - ] - ] - | Omit = omit, - include_cited_websites: bool | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[List[Literal["positive_sentiment", "negative_sentiment", "occurrence"]]] | Omit = omit, - sort: report_query_sentiment_params.Sort | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportQuerySentimentResponse: - """ - Query Sentiment V2 - - Args: - asset: The brand name to analyze (sentiment is extracted on name, not id). - - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - comparison_end_date: YYYY-MM-DD, ET, inclusive (with start). - - comparison_start_date: YYYY-MM-DD, ET, inclusive (with end). - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - include_cited_websites: Return cited websites per row (only when grouping by `theme`/`claim`). - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v2/reports/sentiment", - body=maybe_transform( - { - "asset": asset, - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "comparison_end_date": comparison_end_date, - "comparison_start_date": comparison_start_date, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "include_cited_websites": include_cited_websites, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - "sort": sort, - }, - report_query_sentiment_params.ReportQuerySentimentParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ReportQuerySentimentResponse, - ) - - def query_visibility( - self, - *, - category_id: str, - end_date: str, - start_date: str, - assets: Optional[report_query_visibility_params.Assets] | Omit = omit, - cursor: Optional[str] | Omit = omit, - filter: Optional[report_query_visibility_params.Filter] | Omit = omit, - group_by: List[Literal["date", "model", "topic", "region", "prompt", "persona"]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[List[Literal["visibility_score", "share_of_voice", "average_position"]]] | Omit = omit, - scope: Literal["owned", "all"] | Omit = omit, - sort: report_query_visibility_params.Sort | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportQueryVisibilityResponse: - """ - Query Visibility V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - assets: A name (`is`), a list (`in`), or {op,value} with op `is`/`in`/`not_in`. - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v2/reports/visibility", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "assets": assets, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - "scope": scope, - "sort": sort, - }, - report_query_visibility_params.ReportQueryVisibilityParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ReportQueryVisibilityResponse, - ) - - def sentiment( - self, - *, - category_id: str, - end_date: Union[str, datetime], - metrics: List[Literal["positive", "negative", "occurrences"]], - start_date: Union[str, datetime], - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: List[ - Literal[ - "theme", - "date", - "region", - "topic", - "topic_id", - "model", - "asset_id", - "asset_name", - "tag", - "prompt", - "prompt_id", - "sentiment_type", - "persona", - ] - ] - | Omit = omit, - filters: Iterable[report_sentiment_params.Filter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """Get citations for a given category. - - Args: - end_date: End date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full - ISO timestamp. - - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or - full ISO timestamp. - - date_interval: Date interval for the report. (only used with date dimension) - - dimensions: Dimensions to group the report by. - - filters: List of filters to apply to the sentiment report. - - order_by: Custom ordering of the report results. - - The order is a record of key-value pairs where: - - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for - descending. - - When not specified, the default order is the first metric in the query - descending. - - pagination: Pagination settings for the report results. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v1/reports/sentiment", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "metrics": metrics, - "start_date": start_date, - "date_interval": date_interval, - "dimensions": dimensions, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - }, - report_sentiment_params.ReportSentimentParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ReportResponse, - ) - - def sentiment_v2( - self, - *, - asset_name: str, - category_id: str, - end_date: Union[str, datetime], - metrics: List[Literal["sentiment", "occurrence"]], - start_date: Union[str, datetime], - comparison_end_date: Union[str, datetime, None] | Omit = omit, - comparison_start_date: Union[str, datetime, None] | Omit = omit, - date_bucket: Literal["day", "week", "month"] | Omit = omit, - dimensions: List[ - Literal[ - "date", "topic", "region", "model", "prompt", "persona", "tag", "theme", "claim", "run", "asset_name" - ] - ] - | Omit = omit, - filters: Iterable[report_sentiment_v2_params.Filter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportSentimentV2Response: - """Query Sentiment V2 - - Args: - end_date: End date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full - ISO timestamp. - - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or - full ISO timestamp. - - comparison_end_date: End of the previous period for delta computation. - - comparison_start_date: Start of the previous period for delta computation. - - date_bucket: Date bucket for the report. Only used when dimensions includes date. - - dimensions: Dimensions to group the report by. - - filters: List of filters to apply to the sentiment-v2 report. - - order_by: Custom ordering of report results. Dimension keys must also be present in - dimensions. The sentiment metric orders by positive_sentiment. - - pagination: Pagination settings for the report results. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v1/reports/sentiment-v2", - body=maybe_transform( - { - "asset_name": asset_name, - "category_id": category_id, - "end_date": end_date, - "metrics": metrics, - "start_date": start_date, - "comparison_end_date": comparison_end_date, - "comparison_start_date": comparison_start_date, - "date_bucket": date_bucket, - "dimensions": dimensions, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - }, - report_sentiment_v2_params.ReportSentimentV2Params, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ReportSentimentV2Response, - ) - - def stream_citations( - self, - *, - category_id: str, - end_date: Union[str, datetime], - metrics: List[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]], - start_date: Union[str, datetime], - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: List[ - Literal[ - "hostname", - "path", - "date", - "region", - "topic", - "topic_id", - "model", - "tag", - "prompt", - "prompt_id", - "url", - "root_domain", - "persona", - "citation_category", - ] - ] - | Omit = omit, - filters: Iterable[report_stream_citations_params.Filter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Optional[Pagination] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Stream[ReportStreamCitationsResponse]: - """ - Stream citations with the same filter semantics as the non-streaming route. - - Args: - end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full - ISO timestamp. - - metrics: Metrics to include. `share_of_voice` is deprecated, use `citation_share` - instead. - - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or - full ISO timestamp. - - date_interval: Date interval for the report. (only used with date dimension) - - dimensions: Dimensions to group the report by. - - filters: List of filters to apply to the citations report. - - order_by: Custom ordering of the report results. - - The order is a record of key-value pairs where: - - `key` is the field to order by, which can be a metric or dimension - - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. - - When not specified, the default order is the first metric in the query descending. - - pagination: Offset-based pagination parameters. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return self._post( - "/v1/reports/citations/stream", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "metrics": metrics, - "start_date": start_date, - "date_interval": date_interval, - "dimensions": dimensions, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - }, - report_stream_citations_params.ReportStreamCitationsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, ReportStreamCitationsResponse - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=Stream[ReportStreamCitationsResponse], - ) - - def stream_citations_v2( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - entity: Literal["domain", "page", "citation_category"] | Omit = omit, - filter: Optional[report_stream_citations_v2_params.Filter] | Omit = omit, - group_by: List[Literal["page", "date", "model", "topic", "region", "persona", "prompt"]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[List[Literal["count", "citation_share", "rank", "first_cited_at"]]] | Omit = omit, - scope: Literal["all", "owned"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Stream[ReportStreamCitationsV2Response]: - """ - Stream Citations V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - entity: What each row represents: `domain` (default), `page`, or `citation_category`. - Legacy: `group_by: ["page"]` (with `entity` omitted) is still accepted and is - equivalent to `entity: "page"`. `citation_category` uses the dashboard split - view: a citation counts under both its page-level and domain-level category, so - category shares can sum to more than 100%. - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - - scope: `all` (every cited domain) or `owned` (only your owned domains). Applies to - `entity=domain`. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return self._post( - "/v2/reports/citations/stream", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "entity": entity, - "filter": filter, - "group_by": group_by, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - "scope": scope, - }, - report_stream_citations_v2_params.ReportStreamCitationsV2Params, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, ReportStreamCitationsV2Response - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=Stream[ReportStreamCitationsV2Response], - ) - - def stream_query_fanouts( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - filter: Optional[report_stream_query_fanouts_params.Filter] | Omit = omit, - group_by: List[Literal["date", "model", "region", "prompt", "query"]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[List[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]]] - | Omit = omit, - sort: Optional[report_stream_query_fanouts_params.Sort] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Stream[ReportStreamQueryFanoutsResponse]: - """ - Stream Query Fanouts V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return self._post( - "/v2/reports/query-fanouts/stream", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - "sort": sort, - }, - report_stream_query_fanouts_params.ReportStreamQueryFanoutsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, ReportStreamQueryFanoutsResponse - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=Stream[ReportStreamQueryFanoutsResponse], - ) - - def stream_sentiment( - self, - *, - category_id: str, - end_date: Union[str, datetime], - metrics: List[Literal["positive", "negative", "occurrences"]], - start_date: Union[str, datetime], - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: List[ - Literal[ - "theme", - "date", - "region", - "topic", - "topic_id", - "model", - "asset_id", - "asset_name", - "tag", - "prompt", - "prompt_id", - "sentiment_type", - "persona", - ] - ] - | Omit = omit, - filters: Iterable[report_stream_sentiment_params.Filter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Optional[Pagination] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Stream[ReportStreamSentimentResponse]: - """Stream Sentiment - - Args: - end_date: End date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full - ISO timestamp. - - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or - full ISO timestamp. - - date_interval: Date interval for the report. (only used with date dimension) - - dimensions: Dimensions to group the report by. - - filters: List of filters to apply to the sentiment report. - - order_by: Custom ordering of the report results. - - The order is a record of key-value pairs where: - - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for - descending. - - When not specified, the default order is the first metric in the query - descending. - - pagination: Offset-based pagination parameters. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return self._post( - "/v1/reports/sentiment/stream", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "metrics": metrics, - "start_date": start_date, - "date_interval": date_interval, - "dimensions": dimensions, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - }, - report_stream_sentiment_params.ReportStreamSentimentParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, ReportStreamSentimentResponse - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=Stream[ReportStreamSentimentResponse], - ) - - def stream_sentiment_v2( - self, - *, - asset: str, - category_id: str, - end_date: str, - start_date: str, - comparison_end_date: Optional[str] | Omit = omit, - comparison_start_date: Optional[str] | Omit = omit, - cursor: Optional[str] | Omit = omit, - filter: Optional[report_stream_sentiment_v2_params.Filter] | Omit = omit, - group_by: List[ - Literal[ - "date", "model", "topic", "region", "prompt", "persona", "tag", "theme", "claim", "run", "competitor" - ] - ] - | Omit = omit, - include_cited_websites: bool | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[List[Literal["positive_sentiment", "negative_sentiment", "occurrence"]]] | Omit = omit, - sort: report_stream_sentiment_v2_params.Sort | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Stream[ReportStreamSentimentV2Response]: - """ - Stream Sentiment V2 - - Args: - asset: The brand name to analyze (sentiment is extracted on name, not id). - - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - comparison_end_date: YYYY-MM-DD, ET, inclusive (with start). - - comparison_start_date: YYYY-MM-DD, ET, inclusive (with end). - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - include_cited_websites: Return cited websites per row (only when grouping by `theme`/`claim`). - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return self._post( - "/v2/reports/sentiment/stream", - body=maybe_transform( - { - "asset": asset, - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "comparison_end_date": comparison_end_date, - "comparison_start_date": comparison_start_date, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "include_cited_websites": include_cited_websites, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - "sort": sort, - }, - report_stream_sentiment_v2_params.ReportStreamSentimentV2Params, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, ReportStreamSentimentV2Response - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=Stream[ReportStreamSentimentV2Response], - ) - - def stream_visibility( - self, - *, - category_id: str, - end_date: Union[str, datetime], - metrics: List[ - Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"] - ], - start_date: Union[str, datetime], - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: List[ - Literal[ - "date", - "region", - "topic", - "topic_id", - "model", - "asset_id", - "asset_name", - "prompt", - "prompt_id", - "tag", - "persona", - ] - ] - | Omit = omit, - filters: Iterable[report_stream_visibility_params.Filter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Optional[Pagination] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Stream[ReportStreamVisibilityResponse]: - """Stream Visibility - - Args: - end_date: End date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full - ISO timestamp. - - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or - full ISO timestamp. - - date_interval: Date interval for the report. (only used with date dimension) - - dimensions: Dimensions to group the report by. - - filters: List of filters to apply to the visibility report. - - order_by: Custom ordering of the report results. - - The order is a record of key-value pairs where: - - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for - descending. - - When not specified, the default order is the first metric in the query - descending. - - pagination: Offset-based pagination parameters. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return self._post( - "/v1/reports/visibility/stream", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "metrics": metrics, - "start_date": start_date, - "date_interval": date_interval, - "dimensions": dimensions, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - }, - report_stream_visibility_params.ReportStreamVisibilityParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, ReportStreamVisibilityResponse - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=Stream[ReportStreamVisibilityResponse], - ) - - def stream_visibility_v2( - self, - *, - category_id: str, - end_date: str, - start_date: str, - assets: Optional[report_stream_visibility_v2_params.Assets] | Omit = omit, - cursor: Optional[str] | Omit = omit, - filter: Optional[report_stream_visibility_v2_params.Filter] | Omit = omit, - group_by: List[Literal["date", "model", "topic", "region", "prompt", "persona"]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[List[Literal["visibility_score", "share_of_voice", "average_position"]]] | Omit = omit, - scope: Literal["owned", "all"] | Omit = omit, - sort: report_stream_visibility_v2_params.Sort | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Stream[ReportStreamVisibilityV2Response]: - """ - Stream Visibility V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - assets: A name (`is`), a list (`in`), or {op,value} with op `is`/`in`/`not_in`. - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return self._post( - "/v2/reports/visibility/stream", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "assets": assets, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - "scope": scope, - "sort": sort, - }, - report_stream_visibility_v2_params.ReportStreamVisibilityV2Params, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, ReportStreamVisibilityV2Response - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=Stream[ReportStreamVisibilityV2Response], - ) - - def visibility( - self, - *, - category_id: str, - end_date: Union[str, datetime], - metrics: List[ - Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"] - ], - start_date: Union[str, datetime], - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: List[ - Literal[ - "date", - "region", - "topic", - "topic_id", - "model", - "asset_id", - "asset_name", - "prompt", - "prompt_id", - "tag", - "persona", - ] - ] - | Omit = omit, - filters: Iterable[report_visibility_params.Filter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """Query visibility report. - - Args: - end_date: End date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full - ISO timestamp. - - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or - full ISO timestamp. - - date_interval: Date interval for the report. (only used with date dimension) - - dimensions: Dimensions to group the report by. - - filters: List of filters to apply to the visibility report. - - order_by: Custom ordering of the report results. - - The order is a record of key-value pairs where: - - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for - descending. - - When not specified, the default order is the first metric in the query - descending. - - pagination: Pagination settings for the report results. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v1/reports/visibility", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "metrics": metrics, - "start_date": start_date, - "date_interval": date_interval, - "dimensions": dimensions, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - }, - report_visibility_params.ReportVisibilityParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ReportResponse, - ) - - -class AsyncReportsResource(AsyncAPIResource): - @cached_property - def web_search_results(self) -> AsyncWebSearchResultsResource: - return AsyncWebSearchResultsResource(self._client) - - @cached_property - def shopping(self) -> AsyncShoppingResource: - return AsyncShoppingResource(self._client) - - @cached_property - def accuracy(self) -> AsyncAccuracyResource: - return AsyncAccuracyResource(self._client) - - @cached_property - def factcheck(self) -> AsyncFactcheckResource: - return AsyncFactcheckResource(self._client) - - @cached_property - def social(self) -> AsyncSocialResource: - return AsyncSocialResource(self._client) - - @cached_property - def with_raw_response(self) -> AsyncReportsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return AsyncReportsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncReportsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return AsyncReportsResourceWithStreamingResponse(self) - - async def citations( - self, - *, - category_id: str, - end_date: Union[str, datetime], - metrics: List[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]], - start_date: Union[str, datetime], - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: List[ - Literal[ - "hostname", - "path", - "date", - "region", - "topic", - "topic_id", - "model", - "tag", - "prompt", - "prompt_id", - "url", - "root_domain", - "persona", - "citation_category", - ] - ] - | Omit = omit, - filters: Iterable[report_citations_params.Filter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportCitationsResponse: - """ - Get citations for a given category. - - The `mentioned` filter supports `is true` and `is false`. It uses the latest - page analysis available at or before `end_date`; pages without an analysis by - then are excluded from both values. `citation_share` keeps all otherwise - eligible citations in its denominator when this filter is used. - - Args: - end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full - ISO timestamp. - - metrics: Metrics to include. `share_of_voice` is deprecated, use `citation_share` - instead. - - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or - full ISO timestamp. - - date_interval: Date interval for the report. (only used with date dimension) - - dimensions: Dimensions to group the report by. - - filters: List of filters to apply to the citations report. - - order_by: Custom ordering of the report results. - - The order is a record of key-value pairs where: - - `key` is the field to order by, which can be a metric or dimension - - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. - - When not specified, the default order is the first metric in the query descending. - - pagination: Pagination settings for the report results. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v1/reports/citations", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "metrics": metrics, - "start_date": start_date, - "date_interval": date_interval, - "dimensions": dimensions, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - }, - report_citations_params.ReportCitationsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ReportCitationsResponse, - ) - - async def get_bots_report( - self, - *, - domain: str, - metrics: List[Literal["count", "citations", "indexing", "training", "last_visit"]], - start_date: Union[str, datetime], - date_interval: Literal["hour", "day", "week", "month", "year", "relative_week"] | Omit = omit, - dimensions: List[Literal["date", "path", "bot_name", "bot_provider"]] | Omit = omit, - end_date: Union[str, datetime] | Omit = omit, - filters: Iterable[report_get_bots_report_params.Filter] | Omit = omit, - metric_filters: Iterable[report_get_bots_report_params.MetricFilter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - organization_id: Optional[str] | Omit = omit, - pagination: Pagination | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """ - Get bot traffic report from the daily aggregated materialized view. - - This endpoint queries pre-aggregated daily bot data, making it efficient for - large date ranges and high-traffic sites. - - Metrics: - - - count: unique bot visits - - citations: unique citation events - - indexing: unique indexing events - - training: unique training events - - last_visit: most recent visit timestamp - - Args: - domain: Domain to query logs for. - - start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, - or full ISO timestamp. - - date_interval: Date interval for the report. (only used with date dimension) - - dimensions: Dimensions to group the report by. - - end_date: End date for logs. Accepts same formats as start_date. Defaults to now if - omitted. - - filters: Filters for bots report. - - metric_filters: Numeric filters applied after report metrics are calculated. - - order_by: Custom ordering of the report results. - - The order is a record of key-value pairs where: - - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for - descending. - - When not specified, the default order is the first metric in the query - descending. - - pagination: Pagination settings for the report results. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v1/reports/bots", - body=await async_maybe_transform( - { - "domain": domain, - "metrics": metrics, - "start_date": start_date, - "date_interval": date_interval, - "dimensions": dimensions, - "end_date": end_date, - "filters": filters, - "metric_filters": metric_filters, - "order_by": order_by, - "organization_id": organization_id, - "pagination": pagination, - }, - report_get_bots_report_params.ReportGetBotsReportParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ReportResponse, - ) - - async def get_bots_report_v2( - self, - *, - domain: str, - metrics: List[Literal["count", "citations", "indexing", "training", "last_visit", "agents"]], - start_date: Union[str, datetime], - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: List[Literal["date", "hour", "path", "bot_name", "bot_provider", "bot_type"]] | Omit = omit, - domain_id: Optional[str] | Omit = omit, - end_date: Union[str, datetime] | Omit = omit, - filters: Iterable[report_get_bots_report_v2_params.Filter] | Omit = omit, - metric_filters: Iterable[report_get_bots_report_v2_params.MetricFilter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - organization_id: Optional[str] | Omit = omit, - pagination: Pagination | Omit = omit, - tags: SequenceNotStr[str] | Omit = omit, - timezone: str | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """ - Get bot traffic report from the hourly aggregated materialized view (UTC-based). - - Supports date_interval="hour", calendar intervals through "year", "quarter", and - "relative_week". - - Metrics: - - - count: unique bot visits - - citations: unique citation events (ai_assistant bot type) - - indexing: unique indexing events (index bot type) - - training: unique training events (ai_training bot type) - - last_visit: most recent visit timestamp - - Dimensions: - - - date, path, bot_name, bot_provider, bot_type - - Args: - domain: Domain to query logs for. - - start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, - or full ISO timestamp. - - date_interval: Date interval for the report. (only used with date dimension) - - dimensions: Dimensions to group the report by. - - domain_id: Domain UUID used for tag lookups. - - end_date: End date in UTC. Accepts same formats as start_date. Defaults to now UTC if - omitted. - - filters: Filters for bots report. - - metric_filters: Numeric filters applied after report metrics are calculated. - - order_by: Custom ordering of the report results. - - The order is a record of key-value pairs where: - - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for - descending. - - When not specified, the default order is the first metric in the query - descending. - - pagination: Pagination settings for the report results. - - timezone: IANA timezone name for date bucketing and filter boundaries. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v2/reports/bots", - body=await async_maybe_transform( - { - "domain": domain, - "metrics": metrics, - "start_date": start_date, - "date_interval": date_interval, - "dimensions": dimensions, - "domain_id": domain_id, - "end_date": end_date, - "filters": filters, - "metric_filters": metric_filters, - "order_by": order_by, - "organization_id": organization_id, - "pagination": pagination, - "tags": tags, - "timezone": timezone, - }, - report_get_bots_report_v2_params.ReportGetBotsReportV2Params, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ReportResponse, - ) - - async def get_referrals_report( - self, - *, - domain: str, - metrics: List[Literal["visits", "last_visit"]], - start_date: Union[str, datetime], - date_interval: Literal["hour", "day", "week", "month", "year", "relative_week"] | Omit = omit, - dimensions: List[Literal["date", "path", "referral_source"]] | Omit = omit, - end_date: Union[str, datetime] | Omit = omit, - filters: Iterable[report_get_referrals_report_params.Filter] | Omit = omit, - metric_filters: Iterable[report_get_referrals_report_params.MetricFilter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - organization_id: Optional[str] | Omit = omit, - pagination: Pagination | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """ - Get referral traffic report from the daily aggregated materialized view. - - This endpoint queries pre-aggregated daily referral data, making it efficient - for large date ranges and high-traffic sites. - - Args: - domain: Domain to query logs for. - - start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, - or full ISO timestamp. - - date_interval: Date interval for the report. (only used with date dimension) - - dimensions: Dimensions to group the report by. - - end_date: End date for logs. Accepts same formats as start_date. Defaults to now if - omitted. - - filters: Filters for referrals report. - - metric_filters: Numeric filters applied after report metrics are calculated. - - order_by: Custom ordering of the report results. - - The order is a record of key-value pairs where: - - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for - descending. - - When not specified, the default order is the first metric in the query - descending. - - pagination: Pagination settings for the report results. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v1/reports/referrals", - body=await async_maybe_transform( - { - "domain": domain, - "metrics": metrics, - "start_date": start_date, - "date_interval": date_interval, - "dimensions": dimensions, - "end_date": end_date, - "filters": filters, - "metric_filters": metric_filters, - "order_by": order_by, - "organization_id": organization_id, - "pagination": pagination, - }, - report_get_referrals_report_params.ReportGetReferralsReportParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ReportResponse, - ) - - async def get_referrals_report_v2( - self, - *, - domain: str, - metrics: List[Literal["visits", "last_visit"]], - start_date: Union[str, datetime], - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: List[Literal["date", "hour", "path", "referral_source", "referral_type"]] | Omit = omit, - end_date: Union[str, datetime] | Omit = omit, - filters: Iterable[report_get_referrals_report_v2_params.Filter] | Omit = omit, - metric_filters: Iterable[report_get_referrals_report_v2_params.MetricFilter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - organization_id: Optional[str] | Omit = omit, - pagination: Pagination | Omit = omit, - timezone: str | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """ - Get referral traffic report from the hourly aggregated materialized view - (UTC-based). - - Supports date_interval="hour", calendar intervals through "year", "quarter", and - "relative_week". - - Args: - domain: Domain to query logs for. - - start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, - or full ISO timestamp. - - date_interval: Date interval for the report. (only used with date dimension) - - dimensions: Dimensions to group the report by. - - end_date: End date in UTC. Accepts same formats as start_date. Defaults to now UTC if - omitted. - - filters: Filters for referrals report. - - metric_filters: Numeric filters applied after report metrics are calculated. - - order_by: Custom ordering of the report results. - - The order is a record of key-value pairs where: - - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for - descending. - - When not specified, the default order is the first metric in the query - descending. - - pagination: Pagination settings for the report results. - - timezone: IANA timezone name for date bucketing and filter boundaries. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v2/reports/referrals", - body=await async_maybe_transform( - { - "domain": domain, - "metrics": metrics, - "start_date": start_date, - "date_interval": date_interval, - "dimensions": dimensions, - "end_date": end_date, - "filters": filters, - "metric_filters": metric_filters, - "order_by": order_by, - "organization_id": organization_id, - "pagination": pagination, - "timezone": timezone, - }, - report_get_referrals_report_v2_params.ReportGetReferralsReportV2Params, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ReportResponse, - ) - - async def query_citations( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - entity: Literal["domain", "page", "citation_category"] | Omit = omit, - filter: Optional[report_query_citations_params.Filter] | Omit = omit, - group_by: List[Literal["page", "date", "model", "topic", "region", "persona", "prompt"]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[List[Literal["count", "citation_share", "rank", "first_cited_at"]]] | Omit = omit, - scope: Literal["all", "owned"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportQueryCitationsResponse: - """ - Query Citations V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - entity: What each row represents: `domain` (default), `page`, or `citation_category`. - Legacy: `group_by: ["page"]` (with `entity` omitted) is still accepted and is - equivalent to `entity: "page"`. `citation_category` uses the dashboard split - view: a citation counts under both its page-level and domain-level category, so - category shares can sum to more than 100%. - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - - scope: `all` (every cited domain) or `owned` (only your owned domains). Applies to - `entity=domain`. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v2/reports/citations", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "entity": entity, - "filter": filter, - "group_by": group_by, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - "scope": scope, - }, - report_query_citations_params.ReportQueryCitationsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ReportQueryCitationsResponse, - ) - - async def query_fanouts( - self, - *, - category_id: str, - end_date: Union[str, datetime], - metrics: List[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]], - start_date: Union[str, datetime], - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: List[Literal["prompt", "query", "model", "region", "date"]] | Omit = omit, - filters: Iterable[report_query_fanouts_params.Filter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """Query Fanouts - - Args: - end_date: End date. - - Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. - - metrics: Metrics to return for each row. - - start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. - - date_interval: Date interval for the report. (only used with date dimension) - - dimensions: Dimensions to group the report by. - - filters: Filters to apply to the query fanout report. - - order_by: Custom ordering. Keys must be a requested metric or the `date` dimension. Values - are `asc` or `desc`. Defaults to first metric descending. - - pagination: Pagination settings for the report results. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v1/reports/query-fanouts", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "metrics": metrics, - "start_date": start_date, - "date_interval": date_interval, - "dimensions": dimensions, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - }, - report_query_fanouts_params.ReportQueryFanoutsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ReportResponse, - ) - - async def query_query_fanouts( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - filter: Optional[report_query_query_fanouts_params.Filter] | Omit = omit, - group_by: List[Literal["date", "model", "region", "prompt", "query"]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[List[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]]] - | Omit = omit, - sort: Optional[report_query_query_fanouts_params.Sort] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportQueryQueryFanoutsResponse: - """ - Query Fanouts V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v2/reports/query-fanouts", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - "sort": sort, - }, - report_query_query_fanouts_params.ReportQueryQueryFanoutsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ReportQueryQueryFanoutsResponse, - ) - - async def query_sentiment( - self, - *, - asset: str, - category_id: str, - end_date: str, - start_date: str, - comparison_end_date: Optional[str] | Omit = omit, - comparison_start_date: Optional[str] | Omit = omit, - cursor: Optional[str] | Omit = omit, - filter: Optional[report_query_sentiment_params.Filter] | Omit = omit, - group_by: List[ - Literal[ - "date", "model", "topic", "region", "prompt", "persona", "tag", "theme", "claim", "run", "competitor" - ] - ] - | Omit = omit, - include_cited_websites: bool | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[List[Literal["positive_sentiment", "negative_sentiment", "occurrence"]]] | Omit = omit, - sort: report_query_sentiment_params.Sort | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportQuerySentimentResponse: - """ - Query Sentiment V2 - - Args: - asset: The brand name to analyze (sentiment is extracted on name, not id). - - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - comparison_end_date: YYYY-MM-DD, ET, inclusive (with start). - - comparison_start_date: YYYY-MM-DD, ET, inclusive (with end). - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - include_cited_websites: Return cited websites per row (only when grouping by `theme`/`claim`). - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v2/reports/sentiment", - body=await async_maybe_transform( - { - "asset": asset, - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "comparison_end_date": comparison_end_date, - "comparison_start_date": comparison_start_date, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "include_cited_websites": include_cited_websites, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - "sort": sort, - }, - report_query_sentiment_params.ReportQuerySentimentParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ReportQuerySentimentResponse, - ) - - async def query_visibility( - self, - *, - category_id: str, - end_date: str, - start_date: str, - assets: Optional[report_query_visibility_params.Assets] | Omit = omit, - cursor: Optional[str] | Omit = omit, - filter: Optional[report_query_visibility_params.Filter] | Omit = omit, - group_by: List[Literal["date", "model", "topic", "region", "prompt", "persona"]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[List[Literal["visibility_score", "share_of_voice", "average_position"]]] | Omit = omit, - scope: Literal["owned", "all"] | Omit = omit, - sort: report_query_visibility_params.Sort | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportQueryVisibilityResponse: - """ - Query Visibility V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - assets: A name (`is`), a list (`in`), or {op,value} with op `is`/`in`/`not_in`. - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v2/reports/visibility", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "assets": assets, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - "scope": scope, - "sort": sort, - }, - report_query_visibility_params.ReportQueryVisibilityParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ReportQueryVisibilityResponse, - ) - - async def sentiment( - self, - *, - category_id: str, - end_date: Union[str, datetime], - metrics: List[Literal["positive", "negative", "occurrences"]], - start_date: Union[str, datetime], - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: List[ - Literal[ - "theme", - "date", - "region", - "topic", - "topic_id", - "model", - "asset_id", - "asset_name", - "tag", - "prompt", - "prompt_id", - "sentiment_type", - "persona", - ] - ] - | Omit = omit, - filters: Iterable[report_sentiment_params.Filter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """Get citations for a given category. - - Args: - end_date: End date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full - ISO timestamp. - - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or - full ISO timestamp. - - date_interval: Date interval for the report. (only used with date dimension) - - dimensions: Dimensions to group the report by. - - filters: List of filters to apply to the sentiment report. - - order_by: Custom ordering of the report results. - - The order is a record of key-value pairs where: - - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for - descending. - - When not specified, the default order is the first metric in the query - descending. - - pagination: Pagination settings for the report results. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v1/reports/sentiment", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "metrics": metrics, - "start_date": start_date, - "date_interval": date_interval, - "dimensions": dimensions, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - }, - report_sentiment_params.ReportSentimentParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ReportResponse, - ) - - async def sentiment_v2( - self, - *, - asset_name: str, - category_id: str, - end_date: Union[str, datetime], - metrics: List[Literal["sentiment", "occurrence"]], - start_date: Union[str, datetime], - comparison_end_date: Union[str, datetime, None] | Omit = omit, - comparison_start_date: Union[str, datetime, None] | Omit = omit, - date_bucket: Literal["day", "week", "month"] | Omit = omit, - dimensions: List[ - Literal[ - "date", "topic", "region", "model", "prompt", "persona", "tag", "theme", "claim", "run", "asset_name" - ] - ] - | Omit = omit, - filters: Iterable[report_sentiment_v2_params.Filter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportSentimentV2Response: - """Query Sentiment V2 - - Args: - end_date: End date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full - ISO timestamp. - - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or - full ISO timestamp. - - comparison_end_date: End of the previous period for delta computation. - - comparison_start_date: Start of the previous period for delta computation. - - date_bucket: Date bucket for the report. Only used when dimensions includes date. - - dimensions: Dimensions to group the report by. - - filters: List of filters to apply to the sentiment-v2 report. - - order_by: Custom ordering of report results. Dimension keys must also be present in - dimensions. The sentiment metric orders by positive_sentiment. - - pagination: Pagination settings for the report results. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v1/reports/sentiment-v2", - body=await async_maybe_transform( - { - "asset_name": asset_name, - "category_id": category_id, - "end_date": end_date, - "metrics": metrics, - "start_date": start_date, - "comparison_end_date": comparison_end_date, - "comparison_start_date": comparison_start_date, - "date_bucket": date_bucket, - "dimensions": dimensions, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - }, - report_sentiment_v2_params.ReportSentimentV2Params, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ReportSentimentV2Response, - ) - - async def stream_citations( - self, - *, - category_id: str, - end_date: Union[str, datetime], - metrics: List[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]], - start_date: Union[str, datetime], - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: List[ - Literal[ - "hostname", - "path", - "date", - "region", - "topic", - "topic_id", - "model", - "tag", - "prompt", - "prompt_id", - "url", - "root_domain", - "persona", - "citation_category", - ] - ] - | Omit = omit, - filters: Iterable[report_stream_citations_params.Filter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Optional[Pagination] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncStream[ReportStreamCitationsResponse]: - """ - Stream citations with the same filter semantics as the non-streaming route. - - Args: - end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full - ISO timestamp. - - metrics: Metrics to include. `share_of_voice` is deprecated, use `citation_share` - instead. - - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or - full ISO timestamp. - - date_interval: Date interval for the report. (only used with date dimension) - - dimensions: Dimensions to group the report by. - - filters: List of filters to apply to the citations report. - - order_by: Custom ordering of the report results. - - The order is a record of key-value pairs where: - - `key` is the field to order by, which can be a metric or dimension - - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. - - When not specified, the default order is the first metric in the query descending. - - pagination: Offset-based pagination parameters. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return await self._post( - "/v1/reports/citations/stream", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "metrics": metrics, - "start_date": start_date, - "date_interval": date_interval, - "dimensions": dimensions, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - }, - report_stream_citations_params.ReportStreamCitationsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, ReportStreamCitationsResponse - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=AsyncStream[ReportStreamCitationsResponse], - ) - - async def stream_citations_v2( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - entity: Literal["domain", "page", "citation_category"] | Omit = omit, - filter: Optional[report_stream_citations_v2_params.Filter] | Omit = omit, - group_by: List[Literal["page", "date", "model", "topic", "region", "persona", "prompt"]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[List[Literal["count", "citation_share", "rank", "first_cited_at"]]] | Omit = omit, - scope: Literal["all", "owned"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncStream[ReportStreamCitationsV2Response]: - """ - Stream Citations V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - entity: What each row represents: `domain` (default), `page`, or `citation_category`. - Legacy: `group_by: ["page"]` (with `entity` omitted) is still accepted and is - equivalent to `entity: "page"`. `citation_category` uses the dashboard split - view: a citation counts under both its page-level and domain-level category, so - category shares can sum to more than 100%. - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - - scope: `all` (every cited domain) or `owned` (only your owned domains). Applies to - `entity=domain`. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return await self._post( - "/v2/reports/citations/stream", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "entity": entity, - "filter": filter, - "group_by": group_by, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - "scope": scope, - }, - report_stream_citations_v2_params.ReportStreamCitationsV2Params, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, ReportStreamCitationsV2Response - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=AsyncStream[ReportStreamCitationsV2Response], - ) - - async def stream_query_fanouts( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - filter: Optional[report_stream_query_fanouts_params.Filter] | Omit = omit, - group_by: List[Literal["date", "model", "region", "prompt", "query"]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[List[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]]] - | Omit = omit, - sort: Optional[report_stream_query_fanouts_params.Sort] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncStream[ReportStreamQueryFanoutsResponse]: - """ - Stream Query Fanouts V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return await self._post( - "/v2/reports/query-fanouts/stream", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - "sort": sort, - }, - report_stream_query_fanouts_params.ReportStreamQueryFanoutsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, ReportStreamQueryFanoutsResponse - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=AsyncStream[ReportStreamQueryFanoutsResponse], - ) - - async def stream_sentiment( - self, - *, - category_id: str, - end_date: Union[str, datetime], - metrics: List[Literal["positive", "negative", "occurrences"]], - start_date: Union[str, datetime], - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: List[ - Literal[ - "theme", - "date", - "region", - "topic", - "topic_id", - "model", - "asset_id", - "asset_name", - "tag", - "prompt", - "prompt_id", - "sentiment_type", - "persona", - ] - ] - | Omit = omit, - filters: Iterable[report_stream_sentiment_params.Filter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Optional[Pagination] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncStream[ReportStreamSentimentResponse]: - """Stream Sentiment - - Args: - end_date: End date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full - ISO timestamp. - - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or - full ISO timestamp. - - date_interval: Date interval for the report. (only used with date dimension) - - dimensions: Dimensions to group the report by. - - filters: List of filters to apply to the sentiment report. - - order_by: Custom ordering of the report results. - - The order is a record of key-value pairs where: - - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for - descending. - - When not specified, the default order is the first metric in the query - descending. - - pagination: Offset-based pagination parameters. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return await self._post( - "/v1/reports/sentiment/stream", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "metrics": metrics, - "start_date": start_date, - "date_interval": date_interval, - "dimensions": dimensions, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - }, - report_stream_sentiment_params.ReportStreamSentimentParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, ReportStreamSentimentResponse - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=AsyncStream[ReportStreamSentimentResponse], - ) - - async def stream_sentiment_v2( - self, - *, - asset: str, - category_id: str, - end_date: str, - start_date: str, - comparison_end_date: Optional[str] | Omit = omit, - comparison_start_date: Optional[str] | Omit = omit, - cursor: Optional[str] | Omit = omit, - filter: Optional[report_stream_sentiment_v2_params.Filter] | Omit = omit, - group_by: List[ - Literal[ - "date", "model", "topic", "region", "prompt", "persona", "tag", "theme", "claim", "run", "competitor" - ] - ] - | Omit = omit, - include_cited_websites: bool | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[List[Literal["positive_sentiment", "negative_sentiment", "occurrence"]]] | Omit = omit, - sort: report_stream_sentiment_v2_params.Sort | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncStream[ReportStreamSentimentV2Response]: - """ - Stream Sentiment V2 - - Args: - asset: The brand name to analyze (sentiment is extracted on name, not id). - - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - comparison_end_date: YYYY-MM-DD, ET, inclusive (with start). - - comparison_start_date: YYYY-MM-DD, ET, inclusive (with end). - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - include_cited_websites: Return cited websites per row (only when grouping by `theme`/`claim`). - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return await self._post( - "/v2/reports/sentiment/stream", - body=await async_maybe_transform( - { - "asset": asset, - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "comparison_end_date": comparison_end_date, - "comparison_start_date": comparison_start_date, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "include_cited_websites": include_cited_websites, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - "sort": sort, - }, - report_stream_sentiment_v2_params.ReportStreamSentimentV2Params, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, ReportStreamSentimentV2Response - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=AsyncStream[ReportStreamSentimentV2Response], - ) - - async def stream_visibility( - self, - *, - category_id: str, - end_date: Union[str, datetime], - metrics: List[ - Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"] - ], - start_date: Union[str, datetime], - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: List[ - Literal[ - "date", - "region", - "topic", - "topic_id", - "model", - "asset_id", - "asset_name", - "prompt", - "prompt_id", - "tag", - "persona", - ] - ] - | Omit = omit, - filters: Iterable[report_stream_visibility_params.Filter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Optional[Pagination] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncStream[ReportStreamVisibilityResponse]: - """Stream Visibility - - Args: - end_date: End date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full - ISO timestamp. - - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or - full ISO timestamp. - - date_interval: Date interval for the report. (only used with date dimension) - - dimensions: Dimensions to group the report by. - - filters: List of filters to apply to the visibility report. - - order_by: Custom ordering of the report results. - - The order is a record of key-value pairs where: - - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for - descending. - - When not specified, the default order is the first metric in the query - descending. - - pagination: Offset-based pagination parameters. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return await self._post( - "/v1/reports/visibility/stream", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "metrics": metrics, - "start_date": start_date, - "date_interval": date_interval, - "dimensions": dimensions, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - }, - report_stream_visibility_params.ReportStreamVisibilityParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, ReportStreamVisibilityResponse - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=AsyncStream[ReportStreamVisibilityResponse], - ) - - async def stream_visibility_v2( - self, - *, - category_id: str, - end_date: str, - start_date: str, - assets: Optional[report_stream_visibility_v2_params.Assets] | Omit = omit, - cursor: Optional[str] | Omit = omit, - filter: Optional[report_stream_visibility_v2_params.Filter] | Omit = omit, - group_by: List[Literal["date", "model", "topic", "region", "prompt", "persona"]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[List[Literal["visibility_score", "share_of_voice", "average_position"]]] | Omit = omit, - scope: Literal["owned", "all"] | Omit = omit, - sort: report_stream_visibility_v2_params.Sort | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncStream[ReportStreamVisibilityV2Response]: - """ - Stream Visibility V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - assets: A name (`is`), a list (`in`), or {op,value} with op `is`/`in`/`not_in`. - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return await self._post( - "/v2/reports/visibility/stream", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "assets": assets, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - "scope": scope, - "sort": sort, - }, - report_stream_visibility_v2_params.ReportStreamVisibilityV2Params, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, ReportStreamVisibilityV2Response - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=AsyncStream[ReportStreamVisibilityV2Response], - ) - - async def visibility( - self, - *, - category_id: str, - end_date: Union[str, datetime], - metrics: List[ - Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"] - ], - start_date: Union[str, datetime], - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: List[ - Literal[ - "date", - "region", - "topic", - "topic_id", - "model", - "asset_id", - "asset_name", - "prompt", - "prompt_id", - "tag", - "persona", - ] - ] - | Omit = omit, - filters: Iterable[report_visibility_params.Filter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """Query visibility report. - - Args: - end_date: End date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full - ISO timestamp. - - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or - full ISO timestamp. - - date_interval: Date interval for the report. (only used with date dimension) - - dimensions: Dimensions to group the report by. - - filters: List of filters to apply to the visibility report. - - order_by: Custom ordering of the report results. - - The order is a record of key-value pairs where: - - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for - descending. - - When not specified, the default order is the first metric in the query - descending. - - pagination: Pagination settings for the report results. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v1/reports/visibility", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "metrics": metrics, - "start_date": start_date, - "date_interval": date_interval, - "dimensions": dimensions, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - }, - report_visibility_params.ReportVisibilityParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ReportResponse, - ) - - -class ReportsResourceWithRawResponse: - def __init__(self, reports: ReportsResource) -> None: - self._reports = reports - - self.citations = to_raw_response_wrapper( - reports.citations, - ) - self.get_bots_report = to_raw_response_wrapper( - reports.get_bots_report, - ) - self.get_bots_report_v2 = to_raw_response_wrapper( - reports.get_bots_report_v2, - ) - self.get_referrals_report = to_raw_response_wrapper( - reports.get_referrals_report, - ) - self.get_referrals_report_v2 = to_raw_response_wrapper( - reports.get_referrals_report_v2, - ) - self.query_citations = to_raw_response_wrapper( - reports.query_citations, - ) - self.query_fanouts = to_raw_response_wrapper( - reports.query_fanouts, - ) - self.query_query_fanouts = to_raw_response_wrapper( - reports.query_query_fanouts, - ) - self.query_sentiment = to_raw_response_wrapper( - reports.query_sentiment, - ) - self.query_visibility = to_raw_response_wrapper( - reports.query_visibility, - ) - self.sentiment = to_raw_response_wrapper( - reports.sentiment, - ) - self.sentiment_v2 = to_raw_response_wrapper( - reports.sentiment_v2, - ) - self.stream_citations = to_raw_response_wrapper( - reports.stream_citations, - ) - self.stream_citations_v2 = to_raw_response_wrapper( - reports.stream_citations_v2, - ) - self.stream_query_fanouts = to_raw_response_wrapper( - reports.stream_query_fanouts, - ) - self.stream_sentiment = to_raw_response_wrapper( - reports.stream_sentiment, - ) - self.stream_sentiment_v2 = to_raw_response_wrapper( - reports.stream_sentiment_v2, - ) - self.stream_visibility = to_raw_response_wrapper( - reports.stream_visibility, - ) - self.stream_visibility_v2 = to_raw_response_wrapper( - reports.stream_visibility_v2, - ) - self.visibility = to_raw_response_wrapper( - reports.visibility, - ) - - @cached_property - def web_search_results(self) -> WebSearchResultsResourceWithRawResponse: - return WebSearchResultsResourceWithRawResponse(self._reports.web_search_results) - - @cached_property - def shopping(self) -> ShoppingResourceWithRawResponse: - return ShoppingResourceWithRawResponse(self._reports.shopping) - - @cached_property - def accuracy(self) -> AccuracyResourceWithRawResponse: - return AccuracyResourceWithRawResponse(self._reports.accuracy) - - @cached_property - def factcheck(self) -> FactcheckResourceWithRawResponse: - return FactcheckResourceWithRawResponse(self._reports.factcheck) - - @cached_property - def social(self) -> SocialResourceWithRawResponse: - return SocialResourceWithRawResponse(self._reports.social) - - -class AsyncReportsResourceWithRawResponse: - def __init__(self, reports: AsyncReportsResource) -> None: - self._reports = reports - - self.citations = async_to_raw_response_wrapper( - reports.citations, - ) - self.get_bots_report = async_to_raw_response_wrapper( - reports.get_bots_report, - ) - self.get_bots_report_v2 = async_to_raw_response_wrapper( - reports.get_bots_report_v2, - ) - self.get_referrals_report = async_to_raw_response_wrapper( - reports.get_referrals_report, - ) - self.get_referrals_report_v2 = async_to_raw_response_wrapper( - reports.get_referrals_report_v2, - ) - self.query_citations = async_to_raw_response_wrapper( - reports.query_citations, - ) - self.query_fanouts = async_to_raw_response_wrapper( - reports.query_fanouts, - ) - self.query_query_fanouts = async_to_raw_response_wrapper( - reports.query_query_fanouts, - ) - self.query_sentiment = async_to_raw_response_wrapper( - reports.query_sentiment, - ) - self.query_visibility = async_to_raw_response_wrapper( - reports.query_visibility, - ) - self.sentiment = async_to_raw_response_wrapper( - reports.sentiment, - ) - self.sentiment_v2 = async_to_raw_response_wrapper( - reports.sentiment_v2, - ) - self.stream_citations = async_to_raw_response_wrapper( - reports.stream_citations, - ) - self.stream_citations_v2 = async_to_raw_response_wrapper( - reports.stream_citations_v2, - ) - self.stream_query_fanouts = async_to_raw_response_wrapper( - reports.stream_query_fanouts, - ) - self.stream_sentiment = async_to_raw_response_wrapper( - reports.stream_sentiment, - ) - self.stream_sentiment_v2 = async_to_raw_response_wrapper( - reports.stream_sentiment_v2, - ) - self.stream_visibility = async_to_raw_response_wrapper( - reports.stream_visibility, - ) - self.stream_visibility_v2 = async_to_raw_response_wrapper( - reports.stream_visibility_v2, - ) - self.visibility = async_to_raw_response_wrapper( - reports.visibility, - ) - - @cached_property - def web_search_results(self) -> AsyncWebSearchResultsResourceWithRawResponse: - return AsyncWebSearchResultsResourceWithRawResponse(self._reports.web_search_results) - - @cached_property - def shopping(self) -> AsyncShoppingResourceWithRawResponse: - return AsyncShoppingResourceWithRawResponse(self._reports.shopping) - - @cached_property - def accuracy(self) -> AsyncAccuracyResourceWithRawResponse: - return AsyncAccuracyResourceWithRawResponse(self._reports.accuracy) - - @cached_property - def factcheck(self) -> AsyncFactcheckResourceWithRawResponse: - return AsyncFactcheckResourceWithRawResponse(self._reports.factcheck) - - @cached_property - def social(self) -> AsyncSocialResourceWithRawResponse: - return AsyncSocialResourceWithRawResponse(self._reports.social) - - -class ReportsResourceWithStreamingResponse: - def __init__(self, reports: ReportsResource) -> None: - self._reports = reports - - self.citations = to_streamed_response_wrapper( - reports.citations, - ) - self.get_bots_report = to_streamed_response_wrapper( - reports.get_bots_report, - ) - self.get_bots_report_v2 = to_streamed_response_wrapper( - reports.get_bots_report_v2, - ) - self.get_referrals_report = to_streamed_response_wrapper( - reports.get_referrals_report, - ) - self.get_referrals_report_v2 = to_streamed_response_wrapper( - reports.get_referrals_report_v2, - ) - self.query_citations = to_streamed_response_wrapper( - reports.query_citations, - ) - self.query_fanouts = to_streamed_response_wrapper( - reports.query_fanouts, - ) - self.query_query_fanouts = to_streamed_response_wrapper( - reports.query_query_fanouts, - ) - self.query_sentiment = to_streamed_response_wrapper( - reports.query_sentiment, - ) - self.query_visibility = to_streamed_response_wrapper( - reports.query_visibility, - ) - self.sentiment = to_streamed_response_wrapper( - reports.sentiment, - ) - self.sentiment_v2 = to_streamed_response_wrapper( - reports.sentiment_v2, - ) - self.stream_citations = to_streamed_response_wrapper( - reports.stream_citations, - ) - self.stream_citations_v2 = to_streamed_response_wrapper( - reports.stream_citations_v2, - ) - self.stream_query_fanouts = to_streamed_response_wrapper( - reports.stream_query_fanouts, - ) - self.stream_sentiment = to_streamed_response_wrapper( - reports.stream_sentiment, - ) - self.stream_sentiment_v2 = to_streamed_response_wrapper( - reports.stream_sentiment_v2, - ) - self.stream_visibility = to_streamed_response_wrapper( - reports.stream_visibility, - ) - self.stream_visibility_v2 = to_streamed_response_wrapper( - reports.stream_visibility_v2, - ) - self.visibility = to_streamed_response_wrapper( - reports.visibility, - ) - - @cached_property - def web_search_results(self) -> WebSearchResultsResourceWithStreamingResponse: - return WebSearchResultsResourceWithStreamingResponse(self._reports.web_search_results) - - @cached_property - def shopping(self) -> ShoppingResourceWithStreamingResponse: - return ShoppingResourceWithStreamingResponse(self._reports.shopping) - - @cached_property - def accuracy(self) -> AccuracyResourceWithStreamingResponse: - return AccuracyResourceWithStreamingResponse(self._reports.accuracy) - - @cached_property - def factcheck(self) -> FactcheckResourceWithStreamingResponse: - return FactcheckResourceWithStreamingResponse(self._reports.factcheck) - - @cached_property - def social(self) -> SocialResourceWithStreamingResponse: - return SocialResourceWithStreamingResponse(self._reports.social) - - -class AsyncReportsResourceWithStreamingResponse: - def __init__(self, reports: AsyncReportsResource) -> None: - self._reports = reports - - self.citations = async_to_streamed_response_wrapper( - reports.citations, - ) - self.get_bots_report = async_to_streamed_response_wrapper( - reports.get_bots_report, - ) - self.get_bots_report_v2 = async_to_streamed_response_wrapper( - reports.get_bots_report_v2, - ) - self.get_referrals_report = async_to_streamed_response_wrapper( - reports.get_referrals_report, - ) - self.get_referrals_report_v2 = async_to_streamed_response_wrapper( - reports.get_referrals_report_v2, - ) - self.query_citations = async_to_streamed_response_wrapper( - reports.query_citations, - ) - self.query_fanouts = async_to_streamed_response_wrapper( - reports.query_fanouts, - ) - self.query_query_fanouts = async_to_streamed_response_wrapper( - reports.query_query_fanouts, - ) - self.query_sentiment = async_to_streamed_response_wrapper( - reports.query_sentiment, - ) - self.query_visibility = async_to_streamed_response_wrapper( - reports.query_visibility, - ) - self.sentiment = async_to_streamed_response_wrapper( - reports.sentiment, - ) - self.sentiment_v2 = async_to_streamed_response_wrapper( - reports.sentiment_v2, - ) - self.stream_citations = async_to_streamed_response_wrapper( - reports.stream_citations, - ) - self.stream_citations_v2 = async_to_streamed_response_wrapper( - reports.stream_citations_v2, - ) - self.stream_query_fanouts = async_to_streamed_response_wrapper( - reports.stream_query_fanouts, - ) - self.stream_sentiment = async_to_streamed_response_wrapper( - reports.stream_sentiment, - ) - self.stream_sentiment_v2 = async_to_streamed_response_wrapper( - reports.stream_sentiment_v2, - ) - self.stream_visibility = async_to_streamed_response_wrapper( - reports.stream_visibility, - ) - self.stream_visibility_v2 = async_to_streamed_response_wrapper( - reports.stream_visibility_v2, - ) - self.visibility = async_to_streamed_response_wrapper( - reports.visibility, - ) - - @cached_property - def web_search_results(self) -> AsyncWebSearchResultsResourceWithStreamingResponse: - return AsyncWebSearchResultsResourceWithStreamingResponse(self._reports.web_search_results) - - @cached_property - def shopping(self) -> AsyncShoppingResourceWithStreamingResponse: - return AsyncShoppingResourceWithStreamingResponse(self._reports.shopping) - - @cached_property - def accuracy(self) -> AsyncAccuracyResourceWithStreamingResponse: - return AsyncAccuracyResourceWithStreamingResponse(self._reports.accuracy) - - @cached_property - def factcheck(self) -> AsyncFactcheckResourceWithStreamingResponse: - return AsyncFactcheckResourceWithStreamingResponse(self._reports.factcheck) - - @cached_property - def social(self) -> AsyncSocialResourceWithStreamingResponse: - return AsyncSocialResourceWithStreamingResponse(self._reports.social) diff --git a/src/profound/resources/reports/shopping.py b/src/profound/resources/reports/shopping.py deleted file mode 100644 index f7af32f9..00000000 --- a/src/profound/resources/reports/shopping.py +++ /dev/null @@ -1,1503 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Any, List, Union, Optional, cast -from typing_extensions import Literal - -import httpx - -from ..._types import Body, Omit, Query, Headers, NotGiven, SequenceNotStr, omit, not_given -from ..._utils import maybe_transform, async_maybe_transform -from ..._compat import cached_property -from ..._resource import SyncAPIResource, AsyncAPIResource -from ..._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from ..._streaming import Stream, AsyncStream -from ..._base_client import make_request_options -from ...types.reports import ( - shopping_brands_params, - shopping_products_params, - shopping_merchants_params, - shopping_trigger_rate_params, - shopping_stream_brands_params, - shopping_stream_products_params, - shopping_stream_merchants_params, - shopping_stream_trigger_rate_params, -) -from ...types.reports.shopping_brands_response import ShoppingBrandsResponse -from ...types.reports.shopping_products_response import ShoppingProductsResponse -from ...types.reports.shopping_merchants_response import ShoppingMerchantsResponse -from ...types.reports.shopping_trigger_rate_response import ShoppingTriggerRateResponse -from ...types.reports.shopping_stream_brands_response import ShoppingStreamBrandsResponse -from ...types.reports.shopping_stream_products_response import ShoppingStreamProductsResponse -from ...types.reports.shopping_stream_merchants_response import ShoppingStreamMerchantsResponse -from ...types.reports.shopping_stream_trigger_rate_response import ShoppingStreamTriggerRateResponse - -__all__ = ["ShoppingResource", "AsyncShoppingResource"] - - -class ShoppingResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> ShoppingResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return ShoppingResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> ShoppingResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return ShoppingResourceWithStreamingResponse(self) - - def brands( - self, - *, - category_id: str, - end_date: str, - start_date: str, - assets: Union[str, SequenceNotStr[str], None] | Omit = omit, - cursor: Optional[str] | Omit = omit, - filter: Optional[shopping_brands_params.Filter] | Omit = omit, - group_by: List[Literal["date", "topic", "region", "prompt"]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[List[Literal["visibility_score", "average_position", "visibility_rank"]]] | Omit = omit, - scope: Literal["owned", "all"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ShoppingBrandsResponse: - """ - Query Shopping Brands V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - assets: Restrict to these asset names (a name or list). Overrides `scope`. - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - limit: Page size for scope=all; default 10, max 50. - - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v2/reports/shopping/brands", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "assets": assets, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - "scope": scope, - }, - shopping_brands_params.ShoppingBrandsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ShoppingBrandsResponse, - ) - - def merchants( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - filter: Optional[shopping_merchants_params.Filter] | Omit = omit, - group_by: List[Literal["date", "brand", "product"]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[ - List[ - Literal[ - "merchant_share", - "merchant_share_rank", - "merchant_visibility", - "merchant_visibility_rank", - "visibility_rank", - "brand_share", - "product_visibility", - "product_rank", - ] - ] - ] - | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ShoppingMerchantsResponse: - """ - Query Shopping Merchants V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - group_by: `[]` = distribution; `[brand]` = brand share within each merchant; `[product]` = - top products per merchant. `date` (distribution only) adds a time series. - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap streamed rows. - - metrics: Defaults to the chosen view's metrics; must be valid for that view. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v2/reports/shopping/merchants", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - }, - shopping_merchants_params.ShoppingMerchantsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ShoppingMerchantsResponse, - ) - - def products( - self, - *, - category_id: str, - end_date: str, - start_date: str, - competitor_limit: int | Omit = omit, - cursor: Optional[str] | Omit = omit, - filter: Optional[shopping_products_params.Filter] | Omit = omit, - group_by: List[Literal["date", "topic", "prompt"]] | Omit = omit, - include_merchants: bool | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[ - List[ - Literal[ - "visibility_score", - "average_position", - "visibility_rank", - "position1_percentage", - "position2_percentage", - "position3_percentage", - "position_above3_percentage", - "product_rating", - "product_num_reviews", - ] - ] - ] - | Omit = omit, - target_product: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ShoppingProductsResponse: - """ - Query Shopping Products V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - competitor_limit: Competitors returned when `target_product` is set. - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - include_merchants: Include per-product merchant offers (names, prices, urls, images). - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap streamed rows. - - target_product: Return this product plus its top competitors (item view only). - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v2/reports/shopping/products", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "competitor_limit": competitor_limit, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "include_merchants": include_merchants, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - "target_product": target_product, - }, - shopping_products_params.ShoppingProductsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ShoppingProductsResponse, - ) - - def stream_brands( - self, - *, - category_id: str, - end_date: str, - start_date: str, - assets: Union[str, SequenceNotStr[str], None] | Omit = omit, - cursor: Optional[str] | Omit = omit, - filter: Optional[shopping_stream_brands_params.Filter] | Omit = omit, - group_by: List[Literal["date", "topic", "region", "prompt"]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[List[Literal["visibility_score", "average_position", "visibility_rank"]]] | Omit = omit, - scope: Literal["owned", "all"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Stream[ShoppingStreamBrandsResponse]: - """ - Stream Shopping Brands V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - assets: Restrict to these asset names (a name or list). Overrides `scope`. - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - limit: Page size for scope=all; default 10, max 50. - - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return self._post( - "/v2/reports/shopping/brands/stream", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "assets": assets, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - "scope": scope, - }, - shopping_stream_brands_params.ShoppingStreamBrandsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, ShoppingStreamBrandsResponse - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=Stream[ShoppingStreamBrandsResponse], - ) - - def stream_merchants( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - filter: Optional[shopping_stream_merchants_params.Filter] | Omit = omit, - group_by: List[Literal["date", "brand", "product"]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[ - List[ - Literal[ - "merchant_share", - "merchant_share_rank", - "merchant_visibility", - "merchant_visibility_rank", - "visibility_rank", - "brand_share", - "product_visibility", - "product_rank", - ] - ] - ] - | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Stream[ShoppingStreamMerchantsResponse]: - """ - Stream Shopping Merchants V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - group_by: `[]` = distribution; `[brand]` = brand share within each merchant; `[product]` = - top products per merchant. `date` (distribution only) adds a time series. - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap streamed rows. - - metrics: Defaults to the chosen view's metrics; must be valid for that view. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return self._post( - "/v2/reports/shopping/merchants/stream", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - }, - shopping_stream_merchants_params.ShoppingStreamMerchantsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, ShoppingStreamMerchantsResponse - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=Stream[ShoppingStreamMerchantsResponse], - ) - - def stream_products( - self, - *, - category_id: str, - end_date: str, - start_date: str, - competitor_limit: int | Omit = omit, - cursor: Optional[str] | Omit = omit, - filter: Optional[shopping_stream_products_params.Filter] | Omit = omit, - group_by: List[Literal["date", "topic", "prompt"]] | Omit = omit, - include_merchants: bool | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[ - List[ - Literal[ - "visibility_score", - "average_position", - "visibility_rank", - "position1_percentage", - "position2_percentage", - "position3_percentage", - "position_above3_percentage", - "product_rating", - "product_num_reviews", - ] - ] - ] - | Omit = omit, - target_product: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Stream[ShoppingStreamProductsResponse]: - """ - Stream Shopping Products V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - competitor_limit: Competitors returned when `target_product` is set. - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - include_merchants: Include per-product merchant offers (names, prices, urls, images). - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap streamed rows. - - target_product: Return this product plus its top competitors (item view only). - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return self._post( - "/v2/reports/shopping/products/stream", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "competitor_limit": competitor_limit, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "include_merchants": include_merchants, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - "target_product": target_product, - }, - shopping_stream_products_params.ShoppingStreamProductsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, ShoppingStreamProductsResponse - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=Stream[ShoppingStreamProductsResponse], - ) - - def stream_trigger_rate( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - filter: Optional[shopping_stream_trigger_rate_params.Filter] | Omit = omit, - group_by: List[Literal["date", "topic", "region", "persona", "prompt"]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[List[Literal["total_runs", "shopping_triggered_runs", "trigger_rate_percentage"]]] - | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Stream[ShoppingStreamTriggerRateResponse]: - """ - Stream Shopping Trigger Rate V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - group_by: Group by `prompt`/`topic` for the per-prompt/-topic trigger rate. - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap streamed rows. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return self._post( - "/v2/reports/shopping/trigger-rate/stream", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - }, - shopping_stream_trigger_rate_params.ShoppingStreamTriggerRateParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, ShoppingStreamTriggerRateResponse - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=Stream[ShoppingStreamTriggerRateResponse], - ) - - def trigger_rate( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - filter: Optional[shopping_trigger_rate_params.Filter] | Omit = omit, - group_by: List[Literal["date", "topic", "region", "persona", "prompt"]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[List[Literal["total_runs", "shopping_triggered_runs", "trigger_rate_percentage"]]] - | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ShoppingTriggerRateResponse: - """ - Query Shopping Trigger Rate V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - group_by: Group by `prompt`/`topic` for the per-prompt/-topic trigger rate. - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap streamed rows. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v2/reports/shopping/trigger-rate", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - }, - shopping_trigger_rate_params.ShoppingTriggerRateParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ShoppingTriggerRateResponse, - ) - - -class AsyncShoppingResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncShoppingResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return AsyncShoppingResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncShoppingResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return AsyncShoppingResourceWithStreamingResponse(self) - - async def brands( - self, - *, - category_id: str, - end_date: str, - start_date: str, - assets: Union[str, SequenceNotStr[str], None] | Omit = omit, - cursor: Optional[str] | Omit = omit, - filter: Optional[shopping_brands_params.Filter] | Omit = omit, - group_by: List[Literal["date", "topic", "region", "prompt"]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[List[Literal["visibility_score", "average_position", "visibility_rank"]]] | Omit = omit, - scope: Literal["owned", "all"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ShoppingBrandsResponse: - """ - Query Shopping Brands V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - assets: Restrict to these asset names (a name or list). Overrides `scope`. - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - limit: Page size for scope=all; default 10, max 50. - - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v2/reports/shopping/brands", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "assets": assets, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - "scope": scope, - }, - shopping_brands_params.ShoppingBrandsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ShoppingBrandsResponse, - ) - - async def merchants( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - filter: Optional[shopping_merchants_params.Filter] | Omit = omit, - group_by: List[Literal["date", "brand", "product"]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[ - List[ - Literal[ - "merchant_share", - "merchant_share_rank", - "merchant_visibility", - "merchant_visibility_rank", - "visibility_rank", - "brand_share", - "product_visibility", - "product_rank", - ] - ] - ] - | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ShoppingMerchantsResponse: - """ - Query Shopping Merchants V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - group_by: `[]` = distribution; `[brand]` = brand share within each merchant; `[product]` = - top products per merchant. `date` (distribution only) adds a time series. - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap streamed rows. - - metrics: Defaults to the chosen view's metrics; must be valid for that view. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v2/reports/shopping/merchants", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - }, - shopping_merchants_params.ShoppingMerchantsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ShoppingMerchantsResponse, - ) - - async def products( - self, - *, - category_id: str, - end_date: str, - start_date: str, - competitor_limit: int | Omit = omit, - cursor: Optional[str] | Omit = omit, - filter: Optional[shopping_products_params.Filter] | Omit = omit, - group_by: List[Literal["date", "topic", "prompt"]] | Omit = omit, - include_merchants: bool | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[ - List[ - Literal[ - "visibility_score", - "average_position", - "visibility_rank", - "position1_percentage", - "position2_percentage", - "position3_percentage", - "position_above3_percentage", - "product_rating", - "product_num_reviews", - ] - ] - ] - | Omit = omit, - target_product: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ShoppingProductsResponse: - """ - Query Shopping Products V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - competitor_limit: Competitors returned when `target_product` is set. - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - include_merchants: Include per-product merchant offers (names, prices, urls, images). - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap streamed rows. - - target_product: Return this product plus its top competitors (item view only). - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v2/reports/shopping/products", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "competitor_limit": competitor_limit, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "include_merchants": include_merchants, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - "target_product": target_product, - }, - shopping_products_params.ShoppingProductsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ShoppingProductsResponse, - ) - - async def stream_brands( - self, - *, - category_id: str, - end_date: str, - start_date: str, - assets: Union[str, SequenceNotStr[str], None] | Omit = omit, - cursor: Optional[str] | Omit = omit, - filter: Optional[shopping_stream_brands_params.Filter] | Omit = omit, - group_by: List[Literal["date", "topic", "region", "prompt"]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[List[Literal["visibility_score", "average_position", "visibility_rank"]]] | Omit = omit, - scope: Literal["owned", "all"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncStream[ShoppingStreamBrandsResponse]: - """ - Stream Shopping Brands V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - assets: Restrict to these asset names (a name or list). Overrides `scope`. - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - limit: Page size for scope=all; default 10, max 50. - - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return await self._post( - "/v2/reports/shopping/brands/stream", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "assets": assets, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - "scope": scope, - }, - shopping_stream_brands_params.ShoppingStreamBrandsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, ShoppingStreamBrandsResponse - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=AsyncStream[ShoppingStreamBrandsResponse], - ) - - async def stream_merchants( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - filter: Optional[shopping_stream_merchants_params.Filter] | Omit = omit, - group_by: List[Literal["date", "brand", "product"]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[ - List[ - Literal[ - "merchant_share", - "merchant_share_rank", - "merchant_visibility", - "merchant_visibility_rank", - "visibility_rank", - "brand_share", - "product_visibility", - "product_rank", - ] - ] - ] - | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncStream[ShoppingStreamMerchantsResponse]: - """ - Stream Shopping Merchants V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - group_by: `[]` = distribution; `[brand]` = brand share within each merchant; `[product]` = - top products per merchant. `date` (distribution only) adds a time series. - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap streamed rows. - - metrics: Defaults to the chosen view's metrics; must be valid for that view. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return await self._post( - "/v2/reports/shopping/merchants/stream", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - }, - shopping_stream_merchants_params.ShoppingStreamMerchantsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, ShoppingStreamMerchantsResponse - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=AsyncStream[ShoppingStreamMerchantsResponse], - ) - - async def stream_products( - self, - *, - category_id: str, - end_date: str, - start_date: str, - competitor_limit: int | Omit = omit, - cursor: Optional[str] | Omit = omit, - filter: Optional[shopping_stream_products_params.Filter] | Omit = omit, - group_by: List[Literal["date", "topic", "prompt"]] | Omit = omit, - include_merchants: bool | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[ - List[ - Literal[ - "visibility_score", - "average_position", - "visibility_rank", - "position1_percentage", - "position2_percentage", - "position3_percentage", - "position_above3_percentage", - "product_rating", - "product_num_reviews", - ] - ] - ] - | Omit = omit, - target_product: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncStream[ShoppingStreamProductsResponse]: - """ - Stream Shopping Products V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - competitor_limit: Competitors returned when `target_product` is set. - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - include_merchants: Include per-product merchant offers (names, prices, urls, images). - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap streamed rows. - - target_product: Return this product plus its top competitors (item view only). - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return await self._post( - "/v2/reports/shopping/products/stream", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "competitor_limit": competitor_limit, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "include_merchants": include_merchants, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - "target_product": target_product, - }, - shopping_stream_products_params.ShoppingStreamProductsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, ShoppingStreamProductsResponse - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=AsyncStream[ShoppingStreamProductsResponse], - ) - - async def stream_trigger_rate( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - filter: Optional[shopping_stream_trigger_rate_params.Filter] | Omit = omit, - group_by: List[Literal["date", "topic", "region", "persona", "prompt"]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[List[Literal["total_runs", "shopping_triggered_runs", "trigger_rate_percentage"]]] - | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncStream[ShoppingStreamTriggerRateResponse]: - """ - Stream Shopping Trigger Rate V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - group_by: Group by `prompt`/`topic` for the per-prompt/-topic trigger rate. - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap streamed rows. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return await self._post( - "/v2/reports/shopping/trigger-rate/stream", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - }, - shopping_stream_trigger_rate_params.ShoppingStreamTriggerRateParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, ShoppingStreamTriggerRateResponse - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=AsyncStream[ShoppingStreamTriggerRateResponse], - ) - - async def trigger_rate( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - filter: Optional[shopping_trigger_rate_params.Filter] | Omit = omit, - group_by: List[Literal["date", "topic", "region", "persona", "prompt"]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - metrics: Optional[List[Literal["total_runs", "shopping_triggered_runs", "trigger_rate_percentage"]]] - | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ShoppingTriggerRateResponse: - """ - Query Shopping Trigger Rate V2 - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - group_by: Group by `prompt`/`topic` for the per-prompt/-topic trigger rate. - - limit: Page size; default 10, max 50. - - max_results: Stream endpoint only: cap streamed rows. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v2/reports/shopping/trigger-rate", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "interval": interval, - "limit": limit, - "max_results": max_results, - "metrics": metrics, - }, - shopping_trigger_rate_params.ShoppingTriggerRateParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ShoppingTriggerRateResponse, - ) - - -class ShoppingResourceWithRawResponse: - def __init__(self, shopping: ShoppingResource) -> None: - self._shopping = shopping - - self.brands = to_raw_response_wrapper( - shopping.brands, - ) - self.merchants = to_raw_response_wrapper( - shopping.merchants, - ) - self.products = to_raw_response_wrapper( - shopping.products, - ) - self.stream_brands = to_raw_response_wrapper( - shopping.stream_brands, - ) - self.stream_merchants = to_raw_response_wrapper( - shopping.stream_merchants, - ) - self.stream_products = to_raw_response_wrapper( - shopping.stream_products, - ) - self.stream_trigger_rate = to_raw_response_wrapper( - shopping.stream_trigger_rate, - ) - self.trigger_rate = to_raw_response_wrapper( - shopping.trigger_rate, - ) - - -class AsyncShoppingResourceWithRawResponse: - def __init__(self, shopping: AsyncShoppingResource) -> None: - self._shopping = shopping - - self.brands = async_to_raw_response_wrapper( - shopping.brands, - ) - self.merchants = async_to_raw_response_wrapper( - shopping.merchants, - ) - self.products = async_to_raw_response_wrapper( - shopping.products, - ) - self.stream_brands = async_to_raw_response_wrapper( - shopping.stream_brands, - ) - self.stream_merchants = async_to_raw_response_wrapper( - shopping.stream_merchants, - ) - self.stream_products = async_to_raw_response_wrapper( - shopping.stream_products, - ) - self.stream_trigger_rate = async_to_raw_response_wrapper( - shopping.stream_trigger_rate, - ) - self.trigger_rate = async_to_raw_response_wrapper( - shopping.trigger_rate, - ) - - -class ShoppingResourceWithStreamingResponse: - def __init__(self, shopping: ShoppingResource) -> None: - self._shopping = shopping - - self.brands = to_streamed_response_wrapper( - shopping.brands, - ) - self.merchants = to_streamed_response_wrapper( - shopping.merchants, - ) - self.products = to_streamed_response_wrapper( - shopping.products, - ) - self.stream_brands = to_streamed_response_wrapper( - shopping.stream_brands, - ) - self.stream_merchants = to_streamed_response_wrapper( - shopping.stream_merchants, - ) - self.stream_products = to_streamed_response_wrapper( - shopping.stream_products, - ) - self.stream_trigger_rate = to_streamed_response_wrapper( - shopping.stream_trigger_rate, - ) - self.trigger_rate = to_streamed_response_wrapper( - shopping.trigger_rate, - ) - - -class AsyncShoppingResourceWithStreamingResponse: - def __init__(self, shopping: AsyncShoppingResource) -> None: - self._shopping = shopping - - self.brands = async_to_streamed_response_wrapper( - shopping.brands, - ) - self.merchants = async_to_streamed_response_wrapper( - shopping.merchants, - ) - self.products = async_to_streamed_response_wrapper( - shopping.products, - ) - self.stream_brands = async_to_streamed_response_wrapper( - shopping.stream_brands, - ) - self.stream_merchants = async_to_streamed_response_wrapper( - shopping.stream_merchants, - ) - self.stream_products = async_to_streamed_response_wrapper( - shopping.stream_products, - ) - self.stream_trigger_rate = async_to_streamed_response_wrapper( - shopping.stream_trigger_rate, - ) - self.trigger_rate = async_to_streamed_response_wrapper( - shopping.trigger_rate, - ) diff --git a/src/profound/resources/reports/social/__init__.py b/src/profound/resources/reports/social/__init__.py deleted file mode 100644 index 8e31b543..00000000 --- a/src/profound/resources/reports/social/__init__.py +++ /dev/null @@ -1,33 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from .social import ( - SocialResource, - AsyncSocialResource, - SocialResourceWithRawResponse, - AsyncSocialResourceWithRawResponse, - SocialResourceWithStreamingResponse, - AsyncSocialResourceWithStreamingResponse, -) -from .youtube import ( - YoutubeResource, - AsyncYoutubeResource, - YoutubeResourceWithRawResponse, - AsyncYoutubeResourceWithRawResponse, - YoutubeResourceWithStreamingResponse, - AsyncYoutubeResourceWithStreamingResponse, -) - -__all__ = [ - "YoutubeResource", - "AsyncYoutubeResource", - "YoutubeResourceWithRawResponse", - "AsyncYoutubeResourceWithRawResponse", - "YoutubeResourceWithStreamingResponse", - "AsyncYoutubeResourceWithStreamingResponse", - "SocialResource", - "AsyncSocialResource", - "SocialResourceWithRawResponse", - "AsyncSocialResourceWithRawResponse", - "SocialResourceWithStreamingResponse", - "AsyncSocialResourceWithStreamingResponse", -] diff --git a/src/profound/resources/reports/social/social.py b/src/profound/resources/reports/social/social.py deleted file mode 100644 index 365a3e1e..00000000 --- a/src/profound/resources/reports/social/social.py +++ /dev/null @@ -1,102 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from .youtube import ( - YoutubeResource, - AsyncYoutubeResource, - YoutubeResourceWithRawResponse, - AsyncYoutubeResourceWithRawResponse, - YoutubeResourceWithStreamingResponse, - AsyncYoutubeResourceWithStreamingResponse, -) -from ...._compat import cached_property -from ...._resource import SyncAPIResource, AsyncAPIResource - -__all__ = ["SocialResource", "AsyncSocialResource"] - - -class SocialResource(SyncAPIResource): - @cached_property - def youtube(self) -> YoutubeResource: - return YoutubeResource(self._client) - - @cached_property - def with_raw_response(self) -> SocialResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return SocialResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> SocialResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return SocialResourceWithStreamingResponse(self) - - -class AsyncSocialResource(AsyncAPIResource): - @cached_property - def youtube(self) -> AsyncYoutubeResource: - return AsyncYoutubeResource(self._client) - - @cached_property - def with_raw_response(self) -> AsyncSocialResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return AsyncSocialResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncSocialResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return AsyncSocialResourceWithStreamingResponse(self) - - -class SocialResourceWithRawResponse: - def __init__(self, social: SocialResource) -> None: - self._social = social - - @cached_property - def youtube(self) -> YoutubeResourceWithRawResponse: - return YoutubeResourceWithRawResponse(self._social.youtube) - - -class AsyncSocialResourceWithRawResponse: - def __init__(self, social: AsyncSocialResource) -> None: - self._social = social - - @cached_property - def youtube(self) -> AsyncYoutubeResourceWithRawResponse: - return AsyncYoutubeResourceWithRawResponse(self._social.youtube) - - -class SocialResourceWithStreamingResponse: - def __init__(self, social: SocialResource) -> None: - self._social = social - - @cached_property - def youtube(self) -> YoutubeResourceWithStreamingResponse: - return YoutubeResourceWithStreamingResponse(self._social.youtube) - - -class AsyncSocialResourceWithStreamingResponse: - def __init__(self, social: AsyncSocialResource) -> None: - self._social = social - - @cached_property - def youtube(self) -> AsyncYoutubeResourceWithStreamingResponse: - return AsyncYoutubeResourceWithStreamingResponse(self._social.youtube) diff --git a/src/profound/resources/reports/social/youtube.py b/src/profound/resources/reports/social/youtube.py deleted file mode 100644 index 7d5e9c42..00000000 --- a/src/profound/resources/reports/social/youtube.py +++ /dev/null @@ -1,510 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Optional -from typing_extensions import Literal - -import httpx - -from ...._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from ...._utils import maybe_transform, async_maybe_transform -from ...._compat import cached_property -from ...._resource import SyncAPIResource, AsyncAPIResource -from ...._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from ...._base_client import make_request_options -from ....types.reports.social import youtube_get_videos_params, youtube_get_summary_params, youtube_get_channels_params -from ....types.reports.social.youtube_get_videos_response import YoutubeGetVideosResponse -from ....types.reports.social.youtube_get_summary_response import YoutubeGetSummaryResponse -from ....types.reports.social.youtube_get_channels_response import YoutubeGetChannelsResponse - -__all__ = ["YoutubeResource", "AsyncYoutubeResource"] - - -class YoutubeResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> YoutubeResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return YoutubeResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> YoutubeResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return YoutubeResourceWithStreamingResponse(self) - - def get_channels( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - filter: Optional[youtube_get_channels_params.Filter] | Omit = omit, - group_by: List[Literal["channel", "video_category", "model", "source_type"]] | Omit = omit, - interval: Optional[Literal["day", "week", "month"]] | Omit = omit, - limit: Optional[int] | Omit = omit, - source_types: Optional[List[Literal["video", "short", "channel", "playlist", "other"]]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> YoutubeGetChannelsResponse: - """ - Rank the YouTube channels cited in a category, or the video categories they - publish in. - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - group_by: What each row represents. Empty or `["channel"]` ranks channels; - `["video_category"]` ranks content categories; `["source_type"]` ranks source - types; `["channel", "video_category"]`, `["channel", "source_type"]` and - `["channel", "model"]` return cross-tabs — a row per channel per category, or - per answer engine. `limit` counts channels in every case, so ten channels across - nine engines is ten channels and ninety rows. - - interval: Return a time series instead of window totals: one row per entity per period, - each carrying `date`. `citation_share` is then relative to that period, so the - series is comparable across periods. Omit for window totals. - - limit: Page size; default 10, max 50. - - source_types: Limit results to YouTube source types: `video`, `short`, `channel`, `playlist`, - or `other`. Omit to include every source type. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v2/reports/social/youtube/channels", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "interval": interval, - "limit": limit, - "source_types": source_types, - }, - youtube_get_channels_params.YoutubeGetChannelsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=YoutubeGetChannelsResponse, - ) - - def get_summary( - self, - *, - category_id: str, - end_date: str, - start_date: str, - filter: Optional[youtube_get_summary_params.Filter] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> YoutubeGetSummaryResponse: - """ - Report how much of youtube.com the channel and video rankings account for. - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v2/reports/social/youtube/summary", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "filter": filter, - }, - youtube_get_summary_params.YoutubeGetSummaryParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=YoutubeGetSummaryResponse, - ) - - def get_videos( - self, - *, - category_id: str, - end_date: str, - start_date: str, - attribution: Literal["attributed", "unattributed", "all"] | Omit = omit, - cursor: Optional[str] | Omit = omit, - filter: Optional[youtube_get_videos_params.Filter] | Omit = omit, - limit: Optional[int] | Omit = omit, - source_types: Optional[List[Literal["video", "short", "channel", "playlist", "other"]]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> YoutubeGetVideosResponse: - """ - Rank cited YouTube videos, for one channel or across all of them. - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - attribution: Choose attributed citations, unattributed citations, or all citations. An - unattributed row has no channel: `source_type` is `other` for a search or feed - URL that names no source, and any other type is a source we have no channel for. - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - limit: Page size; default 10, max 50. - - source_types: Limit results to YouTube source types: `video`, `short`, `channel`, `playlist`, - or `other`. Omit to include every source type. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v2/reports/social/youtube/videos", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "attribution": attribution, - "cursor": cursor, - "filter": filter, - "limit": limit, - "source_types": source_types, - }, - youtube_get_videos_params.YoutubeGetVideosParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=YoutubeGetVideosResponse, - ) - - -class AsyncYoutubeResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncYoutubeResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return AsyncYoutubeResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncYoutubeResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return AsyncYoutubeResourceWithStreamingResponse(self) - - async def get_channels( - self, - *, - category_id: str, - end_date: str, - start_date: str, - cursor: Optional[str] | Omit = omit, - filter: Optional[youtube_get_channels_params.Filter] | Omit = omit, - group_by: List[Literal["channel", "video_category", "model", "source_type"]] | Omit = omit, - interval: Optional[Literal["day", "week", "month"]] | Omit = omit, - limit: Optional[int] | Omit = omit, - source_types: Optional[List[Literal["video", "short", "channel", "playlist", "other"]]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> YoutubeGetChannelsResponse: - """ - Rank the YouTube channels cited in a category, or the video categories they - publish in. - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - group_by: What each row represents. Empty or `["channel"]` ranks channels; - `["video_category"]` ranks content categories; `["source_type"]` ranks source - types; `["channel", "video_category"]`, `["channel", "source_type"]` and - `["channel", "model"]` return cross-tabs — a row per channel per category, or - per answer engine. `limit` counts channels in every case, so ten channels across - nine engines is ten channels and ninety rows. - - interval: Return a time series instead of window totals: one row per entity per period, - each carrying `date`. `citation_share` is then relative to that period, so the - series is comparable across periods. Omit for window totals. - - limit: Page size; default 10, max 50. - - source_types: Limit results to YouTube source types: `video`, `short`, `channel`, `playlist`, - or `other`. Omit to include every source type. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v2/reports/social/youtube/channels", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "cursor": cursor, - "filter": filter, - "group_by": group_by, - "interval": interval, - "limit": limit, - "source_types": source_types, - }, - youtube_get_channels_params.YoutubeGetChannelsParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=YoutubeGetChannelsResponse, - ) - - async def get_summary( - self, - *, - category_id: str, - end_date: str, - start_date: str, - filter: Optional[youtube_get_summary_params.Filter] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> YoutubeGetSummaryResponse: - """ - Report how much of youtube.com the channel and video rankings account for. - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v2/reports/social/youtube/summary", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "filter": filter, - }, - youtube_get_summary_params.YoutubeGetSummaryParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=YoutubeGetSummaryResponse, - ) - - async def get_videos( - self, - *, - category_id: str, - end_date: str, - start_date: str, - attribution: Literal["attributed", "unattributed", "all"] | Omit = omit, - cursor: Optional[str] | Omit = omit, - filter: Optional[youtube_get_videos_params.Filter] | Omit = omit, - limit: Optional[int] | Omit = omit, - source_types: Optional[List[Literal["video", "short", "channel", "playlist", "other"]]] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> YoutubeGetVideosResponse: - """ - Rank cited YouTube videos, for one channel or across all of them. - - Args: - end_date: YYYY-MM-DD, ET, inclusive - - start_date: YYYY-MM-DD, ET, inclusive - - attribution: Choose attributed citations, unattributed citations, or all citations. An - unattributed row has no channel: `source_type` is `other` for a search or feed - URL that names no source, and any other type is a source we have no channel for. - - filter: A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group. - - limit: Page size; default 10, max 50. - - source_types: Limit results to YouTube source types: `video`, `short`, `channel`, `playlist`, - or `other`. Omit to include every source type. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v2/reports/social/youtube/videos", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "start_date": start_date, - "attribution": attribution, - "cursor": cursor, - "filter": filter, - "limit": limit, - "source_types": source_types, - }, - youtube_get_videos_params.YoutubeGetVideosParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=YoutubeGetVideosResponse, - ) - - -class YoutubeResourceWithRawResponse: - def __init__(self, youtube: YoutubeResource) -> None: - self._youtube = youtube - - self.get_channels = to_raw_response_wrapper( - youtube.get_channels, - ) - self.get_summary = to_raw_response_wrapper( - youtube.get_summary, - ) - self.get_videos = to_raw_response_wrapper( - youtube.get_videos, - ) - - -class AsyncYoutubeResourceWithRawResponse: - def __init__(self, youtube: AsyncYoutubeResource) -> None: - self._youtube = youtube - - self.get_channels = async_to_raw_response_wrapper( - youtube.get_channels, - ) - self.get_summary = async_to_raw_response_wrapper( - youtube.get_summary, - ) - self.get_videos = async_to_raw_response_wrapper( - youtube.get_videos, - ) - - -class YoutubeResourceWithStreamingResponse: - def __init__(self, youtube: YoutubeResource) -> None: - self._youtube = youtube - - self.get_channels = to_streamed_response_wrapper( - youtube.get_channels, - ) - self.get_summary = to_streamed_response_wrapper( - youtube.get_summary, - ) - self.get_videos = to_streamed_response_wrapper( - youtube.get_videos, - ) - - -class AsyncYoutubeResourceWithStreamingResponse: - def __init__(self, youtube: AsyncYoutubeResource) -> None: - self._youtube = youtube - - self.get_channels = async_to_streamed_response_wrapper( - youtube.get_channels, - ) - self.get_summary = async_to_streamed_response_wrapper( - youtube.get_summary, - ) - self.get_videos = async_to_streamed_response_wrapper( - youtube.get_videos, - ) diff --git a/src/profound/resources/reports/web_search_results.py b/src/profound/resources/reports/web_search_results.py deleted file mode 100644 index 3f36de7a..00000000 --- a/src/profound/resources/reports/web_search_results.py +++ /dev/null @@ -1,510 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Any, Dict, List, Union, Iterable, Optional, cast -from datetime import datetime -from typing_extensions import Literal - -import httpx - -from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from ..._utils import maybe_transform, async_maybe_transform -from ..._compat import cached_property -from ..._resource import SyncAPIResource, AsyncAPIResource -from ..._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from ..._streaming import Stream, AsyncStream -from ..._base_client import make_request_options -from ...types.reports import web_search_result_query_params, web_search_result_stream_params -from ...types.shared_params.pagination import Pagination -from ...types.reports.web_search_result_query_response import WebSearchResultQueryResponse -from ...types.reports.web_search_result_stream_response import WebSearchResultStreamResponse - -__all__ = ["WebSearchResultsResource", "AsyncWebSearchResultsResource"] - - -class WebSearchResultsResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> WebSearchResultsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return WebSearchResultsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> WebSearchResultsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return WebSearchResultsResourceWithStreamingResponse(self) - - def query( - self, - *, - category_id: str, - end_date: Union[str, datetime], - metrics: List[Literal["count", "search_share"]], - start_date: Union[str, datetime], - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: List[ - Literal[ - "hostname", - "path", - "url", - "root_domain", - "date", - "region", - "topic", - "topic_id", - "model", - "tag", - "prompt", - "prompt_id", - "persona", - "search_query", - ] - ] - | Omit = omit, - filters: Iterable[web_search_result_query_params.Filter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> WebSearchResultQueryResponse: - """ - Get web search results for a given category. - - Args: - end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full - ISO timestamp. - - metrics: Metrics to include. `search_share` is the per-prompt occurrence rate. - - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or - full ISO timestamp. - - date_interval: Date interval for the report. (only used with date dimension) - - dimensions: Dimensions to group the report by. - - filters: List of filters to apply to the web search results report. - - order_by: Custom ordering of the report results. - - The order is a record of key-value pairs where: - - `key` is the field to order by, which can be a metric or dimension - - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. - - When not specified, the default order is the first metric in the query descending. - - pagination: Pagination settings for the report results. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/v1/reports/web-search-results", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "metrics": metrics, - "start_date": start_date, - "date_interval": date_interval, - "dimensions": dimensions, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - }, - web_search_result_query_params.WebSearchResultQueryParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=WebSearchResultQueryResponse, - ) - - def stream( - self, - *, - category_id: str, - end_date: Union[str, datetime], - metrics: List[Literal["count", "search_share"]], - start_date: Union[str, datetime], - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: List[ - Literal[ - "hostname", - "path", - "url", - "root_domain", - "date", - "region", - "topic", - "topic_id", - "model", - "tag", - "prompt", - "prompt_id", - "persona", - "search_query", - ] - ] - | Omit = omit, - filters: Iterable[web_search_result_stream_params.Filter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Optional[Pagination] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Stream[WebSearchResultStreamResponse]: - """Stream Web Search Results - - Args: - end_date: End date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full - ISO timestamp. - - metrics: Metrics to include. `search_share` is the per-prompt occurrence rate. - - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or - full ISO timestamp. - - date_interval: Date interval for the report. (only used with date dimension) - - dimensions: Dimensions to group the report by. - - filters: List of filters to apply to the web search results report. - - order_by: Custom ordering of the report results. - - The order is a record of key-value pairs where: - - `key` is the field to order by, which can be a metric or dimension - - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. - - When not specified, the default order is the first metric in the query descending. - - pagination: Offset-based pagination parameters. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return self._post( - "/v1/reports/web-search-results/stream", - body=maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "metrics": metrics, - "start_date": start_date, - "date_interval": date_interval, - "dimensions": dimensions, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - }, - web_search_result_stream_params.WebSearchResultStreamParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, WebSearchResultStreamResponse - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=Stream[WebSearchResultStreamResponse], - ) - - -class AsyncWebSearchResultsResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncWebSearchResultsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ - return AsyncWebSearchResultsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncWebSearchResultsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ - return AsyncWebSearchResultsResourceWithStreamingResponse(self) - - async def query( - self, - *, - category_id: str, - end_date: Union[str, datetime], - metrics: List[Literal["count", "search_share"]], - start_date: Union[str, datetime], - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: List[ - Literal[ - "hostname", - "path", - "url", - "root_domain", - "date", - "region", - "topic", - "topic_id", - "model", - "tag", - "prompt", - "prompt_id", - "persona", - "search_query", - ] - ] - | Omit = omit, - filters: Iterable[web_search_result_query_params.Filter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> WebSearchResultQueryResponse: - """ - Get web search results for a given category. - - Args: - end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full - ISO timestamp. - - metrics: Metrics to include. `search_share` is the per-prompt occurrence rate. - - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or - full ISO timestamp. - - date_interval: Date interval for the report. (only used with date dimension) - - dimensions: Dimensions to group the report by. - - filters: List of filters to apply to the web search results report. - - order_by: Custom ordering of the report results. - - The order is a record of key-value pairs where: - - `key` is the field to order by, which can be a metric or dimension - - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. - - When not specified, the default order is the first metric in the query descending. - - pagination: Pagination settings for the report results. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/v1/reports/web-search-results", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "metrics": metrics, - "start_date": start_date, - "date_interval": date_interval, - "dimensions": dimensions, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - }, - web_search_result_query_params.WebSearchResultQueryParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=WebSearchResultQueryResponse, - ) - - async def stream( - self, - *, - category_id: str, - end_date: Union[str, datetime], - metrics: List[Literal["count", "search_share"]], - start_date: Union[str, datetime], - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: List[ - Literal[ - "hostname", - "path", - "url", - "root_domain", - "date", - "region", - "topic", - "topic_id", - "model", - "tag", - "prompt", - "prompt_id", - "persona", - "search_query", - ] - ] - | Omit = omit, - filters: Iterable[web_search_result_stream_params.Filter] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Optional[Pagination] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncStream[WebSearchResultStreamResponse]: - """Stream Web Search Results - - Args: - end_date: End date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full - ISO timestamp. - - metrics: Metrics to include. `search_share` is the per-prompt occurrence rate. - - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or - full ISO timestamp. - - date_interval: Date interval for the report. (only used with date dimension) - - dimensions: Dimensions to group the report by. - - filters: List of filters to apply to the web search results report. - - order_by: Custom ordering of the report results. - - The order is a record of key-value pairs where: - - `key` is the field to order by, which can be a metric or dimension - - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. - - When not specified, the default order is the first metric in the query descending. - - pagination: Offset-based pagination parameters. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return await self._post( - "/v1/reports/web-search-results/stream", - body=await async_maybe_transform( - { - "category_id": category_id, - "end_date": end_date, - "metrics": metrics, - "start_date": start_date, - "date_interval": date_interval, - "dimensions": dimensions, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - }, - web_search_result_stream_params.WebSearchResultStreamParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=cast( - Any, WebSearchResultStreamResponse - ), # Union types cannot be passed in as arguments in the type system - stream=True, - stream_cls=AsyncStream[WebSearchResultStreamResponse], - ) - - -class WebSearchResultsResourceWithRawResponse: - def __init__(self, web_search_results: WebSearchResultsResource) -> None: - self._web_search_results = web_search_results - - self.query = to_raw_response_wrapper( - web_search_results.query, - ) - self.stream = to_raw_response_wrapper( - web_search_results.stream, - ) - - -class AsyncWebSearchResultsResourceWithRawResponse: - def __init__(self, web_search_results: AsyncWebSearchResultsResource) -> None: - self._web_search_results = web_search_results - - self.query = async_to_raw_response_wrapper( - web_search_results.query, - ) - self.stream = async_to_raw_response_wrapper( - web_search_results.stream, - ) - - -class WebSearchResultsResourceWithStreamingResponse: - def __init__(self, web_search_results: WebSearchResultsResource) -> None: - self._web_search_results = web_search_results - - self.query = to_streamed_response_wrapper( - web_search_results.query, - ) - self.stream = to_streamed_response_wrapper( - web_search_results.stream, - ) - - -class AsyncWebSearchResultsResourceWithStreamingResponse: - def __init__(self, web_search_results: AsyncWebSearchResultsResource) -> None: - self._web_search_results = web_search_results - - self.query = async_to_streamed_response_wrapper( - web_search_results.query, - ) - self.stream = async_to_streamed_response_wrapper( - web_search_results.stream, - ) diff --git a/src/profound/types/__init__.py b/src/profound/types/__init__.py deleted file mode 100644 index fa2f3ce1..00000000 --- a/src/profound/types/__init__.py +++ /dev/null @@ -1,127 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from .shared import ( - Pagination as Pagination, - PathFilter as PathFilter, - TagIDFilter as TagIDFilter, - PromptFilter as PromptFilter, - AssetIDFilter as AssetIDFilter, - BotNameFilter as BotNameFilter, - ModelIDFilter as ModelIDFilter, - TopicIDFilter as TopicIDFilter, - RegionIDFilter as RegionIDFilter, - PersonaIDFilter as PersonaIDFilter, - CursorPagination as CursorPagination, - PromptTypeFilter as PromptTypeFilter, - RegionNameFilter as RegionNameFilter, - BotProviderFilter as BotProviderFilter, - AnalysisTypeFilter as AnalysisTypeFilter, -) -from .category import Category as Category -from .report_info import ReportInfo as ReportInfo -from .organization import Organization as Organization -from .report_result import ReportResult as ReportResult -from .named_resource import NamedResource as NamedResource -from .persona_profile import PersonaProfile as PersonaProfile -from .report_response import ReportResponse as ReportResponse -from .url_filter_param import URLFilterParam as URLFilterParam -from .agent_list_params import AgentListParams as AgentListParams -from .agent_create_params import AgentCreateParams as AgentCreateParams -from .agent_list_response import AgentListResponse as AgentListResponse -from .agent_update_params import AgentUpdateParams as AgentUpdateParams -from .project_list_params import ProjectListParams as ProjectListParams -from .document_list_params import DocumentListParams as DocumentListParams -from .agent_create_response import AgentCreateResponse as AgentCreateResponse -from .agent_retrieve_params import AgentRetrieveParams as AgentRetrieveParams -from .agent_update_response import AgentUpdateResponse as AgentUpdateResponse -from .hostname_filter_param import HostnameFilterParam as HostnameFilterParam -from .project_create_params import ProjectCreateParams as ProjectCreateParams -from .project_delete_params import ProjectDeleteParams as ProjectDeleteParams -from .project_list_response import ProjectListResponse as ProjectListResponse -from .prompt_answers_params import PromptAnswersParams as PromptAnswersParams -from .tag_name_filter_param import TagNameFilterParam as TagNameFilterParam -from .agent_publish_response import AgentPublishResponse as AgentPublishResponse -from .document_create_params import DocumentCreateParams as DocumentCreateParams -from .document_delete_params import DocumentDeleteParams as DocumentDeleteParams -from .document_list_response import DocumentListResponse as DocumentListResponse -from .document_update_params import DocumentUpdateParams as DocumentUpdateParams -from .project_archive_params import ProjectArchiveParams as ProjectArchiveParams -from .prompt_id_filter_param import PromptIDFilterParam as PromptIDFilterParam -from .agent_retrieve_response import AgentRetrieveResponse as AgentRetrieveResponse -from .integration_list_params import IntegrationListParams as IntegrationListParams -from .project_create_response import ProjectCreateResponse as ProjectCreateResponse -from .project_retrieve_params import ProjectRetrieveParams as ProjectRetrieveParams -from .prompt_answers_response import PromptAnswersResponse as PromptAnswersResponse -from .report_citations_params import ReportCitationsParams as ReportCitationsParams -from .report_sentiment_params import ReportSentimentParams as ReportSentimentParams -from .topic_name_filter_param import TopicNameFilterParam as TopicNameFilterParam -from .document_create_response import DocumentCreateResponse as DocumentCreateResponse -from .document_retrieve_params import DocumentRetrieveParams as DocumentRetrieveParams -from .document_update_response import DocumentUpdateResponse as DocumentUpdateResponse -from .persona_profile_behavior import PersonaProfileBehavior as PersonaProfileBehavior -from .project_archive_response import ProjectArchiveResponse as ProjectArchiveResponse -from .project_unarchive_params import ProjectUnarchiveParams as ProjectUnarchiveParams -from .prompt_answers_v2_params import PromptAnswersV2Params as PromptAnswersV2Params -from .report_visibility_params import ReportVisibilityParams as ReportVisibilityParams -from .root_domain_filter_param import RootDomainFilterParam as RootDomainFilterParam -from .integration_list_response import IntegrationListResponse as IntegrationListResponse -from .project_get_status_params import ProjectGetStatusParams as ProjectGetStatusParams -from .project_retrieve_response import ProjectRetrieveResponse as ProjectRetrieveResponse -from .report_citations_response import ReportCitationsResponse as ReportCitationsResponse -from .document_retrieve_response import DocumentRetrieveResponse as DocumentRetrieveResponse -from .knowledge_base_list_params import KnowledgeBaseListParams as KnowledgeBaseListParams -from .organization_list_response import OrganizationListResponse as OrganizationListResponse -from .persona_profile_employment import PersonaProfileEmployment as PersonaProfileEmployment -from .project_unarchive_response import ProjectUnarchiveResponse as ProjectUnarchiveResponse -from .prompt_answers_v2_response import PromptAnswersV2Response as PromptAnswersV2Response -from .report_sentiment_v2_params import ReportSentimentV2Params as ReportSentimentV2Params -from .agent_retrieve_graph_params import AgentRetrieveGraphParams as AgentRetrieveGraphParams -from .organization_domains_params import OrganizationDomainsParams as OrganizationDomainsParams -from .organization_regions_params import OrganizationRegionsParams as OrganizationRegionsParams -from .project_get_status_response import ProjectGetStatusResponse as ProjectGetStatusResponse -from .report_query_fanouts_params import ReportQueryFanoutsParams as ReportQueryFanoutsParams -from .knowledge_base_list_response import KnowledgeBaseListResponse as KnowledgeBaseListResponse -from .knowledge_base_search_params import KnowledgeBaseSearchParams as KnowledgeBaseSearchParams -from .organization_models_response import OrganizationModelsResponse as OrganizationModelsResponse -from .persona_profile_demographics import PersonaProfileDemographics as PersonaProfileDemographics -from .report_sentiment_v2_response import ReportSentimentV2Response as ReportSentimentV2Response -from .agent_retrieve_graph_response import AgentRetrieveGraphResponse as AgentRetrieveGraphResponse -from .organization_domains_response import OrganizationDomainsResponse as OrganizationDomainsResponse -from .organization_regions_response import OrganizationRegionsResponse as OrganizationRegionsResponse -from .report_get_bots_report_params import ReportGetBotsReportParams as ReportGetBotsReportParams -from .report_query_citations_params import ReportQueryCitationsParams as ReportQueryCitationsParams -from .report_query_sentiment_params import ReportQuerySentimentParams as ReportQuerySentimentParams -from .knowledge_base_search_response import KnowledgeBaseSearchResponse as KnowledgeBaseSearchResponse -from .report_query_visibility_params import ReportQueryVisibilityParams as ReportQueryVisibilityParams -from .report_stream_citations_params import ReportStreamCitationsParams as ReportStreamCitationsParams -from .report_stream_sentiment_params import ReportStreamSentimentParams as ReportStreamSentimentParams -from .document_replace_content_params import DocumentReplaceContentParams as DocumentReplaceContentParams -from .organization_list_assets_params import OrganizationListAssetsParams as OrganizationListAssetsParams -from .prompt_stream_answers_v2_params import PromptStreamAnswersV2Params as PromptStreamAnswersV2Params -from .report_query_citations_response import ReportQueryCitationsResponse as ReportQueryCitationsResponse -from .report_query_sentiment_response import ReportQuerySentimentResponse as ReportQuerySentimentResponse -from .report_stream_visibility_params import ReportStreamVisibilityParams as ReportStreamVisibilityParams -from .organization_get_personas_params import OrganizationGetPersonasParams as OrganizationGetPersonasParams -from .report_get_bots_report_v2_params import ReportGetBotsReportV2Params as ReportGetBotsReportV2Params -from .report_query_visibility_response import ReportQueryVisibilityResponse as ReportQueryVisibilityResponse -from .report_stream_citations_response import ReportStreamCitationsResponse as ReportStreamCitationsResponse -from .report_stream_sentiment_response import ReportStreamSentimentResponse as ReportStreamSentimentResponse -from .document_replace_content_response import DocumentReplaceContentResponse as DocumentReplaceContentResponse -from .organization_list_assets_response import OrganizationListAssetsResponse as OrganizationListAssetsResponse -from .prompt_stream_answers_v2_response import PromptStreamAnswersV2Response as PromptStreamAnswersV2Response -from .report_query_query_fanouts_params import ReportQueryQueryFanoutsParams as ReportQueryQueryFanoutsParams -from .report_stream_citations_v2_params import ReportStreamCitationsV2Params as ReportStreamCitationsV2Params -from .report_stream_sentiment_v2_params import ReportStreamSentimentV2Params as ReportStreamSentimentV2Params -from .report_stream_visibility_response import ReportStreamVisibilityResponse as ReportStreamVisibilityResponse -from .organization_get_personas_response import OrganizationGetPersonasResponse as OrganizationGetPersonasResponse -from .report_get_referrals_report_params import ReportGetReferralsReportParams as ReportGetReferralsReportParams -from .report_stream_query_fanouts_params import ReportStreamQueryFanoutsParams as ReportStreamQueryFanoutsParams -from .report_stream_visibility_v2_params import ReportStreamVisibilityV2Params as ReportStreamVisibilityV2Params -from .report_query_query_fanouts_response import ReportQueryQueryFanoutsResponse as ReportQueryQueryFanoutsResponse -from .report_stream_citations_v2_response import ReportStreamCitationsV2Response as ReportStreamCitationsV2Response -from .report_stream_sentiment_v2_response import ReportStreamSentimentV2Response as ReportStreamSentimentV2Response -from .report_stream_query_fanouts_response import ReportStreamQueryFanoutsResponse as ReportStreamQueryFanoutsResponse -from .report_stream_visibility_v2_response import ReportStreamVisibilityV2Response as ReportStreamVisibilityV2Response -from .report_get_referrals_report_v2_params import ReportGetReferralsReportV2Params as ReportGetReferralsReportV2Params diff --git a/src/profound/types/ads/__init__.py b/src/profound/types/ads/__init__.py deleted file mode 100644 index f8ee8b14..00000000 --- a/src/profound/types/ads/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations diff --git a/src/profound/types/ads/openai_ads/__init__.py b/src/profound/types/ads/openai_ads/__init__.py deleted file mode 100644 index c0aa321e..00000000 --- a/src/profound/types/ads/openai_ads/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from .ad_account_retrieve_insights_params import AdAccountRetrieveInsightsParams as AdAccountRetrieveInsightsParams -from .ad_account_retrieve_insights_response import ( - AdAccountRetrieveInsightsResponse as AdAccountRetrieveInsightsResponse, -) diff --git a/src/profound/types/ads/openai_ads/ad_account_retrieve_insights_params.py b/src/profound/types/ads/openai_ads/ad_account_retrieve_insights_params.py deleted file mode 100644 index e9315a3c..00000000 --- a/src/profound/types/ads/openai_ads/ad_account_retrieve_insights_params.py +++ /dev/null @@ -1,38 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import Literal, TypedDict - -from ...._types import SequenceNotStr - -__all__ = ["AdAccountRetrieveInsightsParams"] - - -class AdAccountRetrieveInsightsParams(TypedDict, total=False): - after: Optional[str] - """Return items after this ID (forward pagination).""" - - aggregation_level: Optional[Literal["ad_account", "campaign", "ad_group", "ad"]] - """Row entity for the insights breakdown. `campaign` returns one row per campaign.""" - - before: Optional[str] - """Return items before this ID (backward pagination).""" - - limit: Optional[int] - """Maximum rows to return.""" - - organization_id: Optional[str] - """Organization scope for API keys that can access multiple organizations.""" - - time_granularity: Optional[Literal["hourly", "daily", "monthly", "none"]] - """ - Time bucket for the rows; `none` or omitted returns totals over the whole range. - """ - - time_ranges: Optional[SequenceNotStr[str]] - """Time ranges as JSON objects, e.g. - - `{"type": "date_range", "since": "2026-07-01", "until": "2026-07-18"}`. - """ diff --git a/src/profound/types/ads/openai_ads/ad_account_retrieve_insights_response.py b/src/profound/types/ads/openai_ads/ad_account_retrieve_insights_response.py deleted file mode 100644 index c1536aa1..00000000 --- a/src/profound/types/ads/openai_ads/ad_account_retrieve_insights_response.py +++ /dev/null @@ -1,86 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Optional - -from ...._models import BaseModel - -__all__ = ["AdAccountRetrieveInsightsResponse", "Data"] - - -class Data(BaseModel): - """One insights row; the entity it describes follows `aggregation_level`. - - Time bounds are present when a `time_granularity` is requested (one row per - time bucket); the entity id/name fields (`campaign_*`, `ad_group_*`, `ad_*`) - are present when rows are broken down by that entity. - """ - - id: str - """Row ID.""" - - ad_group_id: Optional[str] = None - """Ad group ID for ad_group-level rows.""" - - ad_group_name: Optional[str] = None - """Ad group name for ad_group-level rows.""" - - ad_id: Optional[str] = None - """Ad ID for ad-level rows.""" - - ad_name: Optional[str] = None - """Ad name for ad-level rows.""" - - campaign_id: Optional[str] = None - """Campaign ID for campaign-level rows.""" - - campaign_name: Optional[str] = None - """Campaign name for campaign-level rows.""" - - clicks: Optional[int] = None - """Clicks.""" - - cpc: Optional[float] = None - """Cost per click.""" - - cpm: Optional[float] = None - """Cost per thousand impressions.""" - - ctr: Optional[float] = None - """Click-through rate.""" - - end_time: Optional[int] = None - """Bucket end (unix seconds).""" - - impressions: Optional[int] = None - """Impressions.""" - - readable_time: Optional[str] = None - """Human-readable time bucket.""" - - spend: Optional[float] = None - """Spend in the ad account's currency units.""" - - start_time: Optional[int] = None - """Bucket start (unix seconds).""" - - timezone: Optional[str] = None - """Timezone of the time bucket.""" - - -class AdAccountRetrieveInsightsResponse(BaseModel): - """Cursor-paginated insights, mirroring the OpenAI Ads insights envelope.""" - - data: List[Data] - """Insight rows.""" - - count: Optional[int] = None - """Total row count, when reported upstream.""" - - first_id: Optional[str] = None - """ID of the first item; pass as `before` to page back.""" - - has_more: Optional[bool] = None - """Whether more items are available.""" - - last_id: Optional[str] = None - """ID of the last item; pass as `after` to page forward.""" diff --git a/src/profound/types/agent_create_params.py b/src/profound/types/agent_create_params.py deleted file mode 100644 index c346ca93..00000000 --- a/src/profound/types/agent_create_params.py +++ /dev/null @@ -1,29 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Dict, Optional -from typing_extensions import Required, TypedDict - -__all__ = ["AgentCreateParams"] - - -class AgentCreateParams(TypedDict, total=False): - name: Required[str] - """Display name for the agent. Must be non-empty.""" - - organization_id: Required[str] - """ID of the organization that will own the agent. - - Required — Profound API keys are user-scoped, so the owning organization must be - chosen explicitly. The caller must be a member of this organization. - """ - - description: Optional[str] - """Short description of the agent.""" - - graph: Optional[Dict[str, object]] - """Initial workflow graph for the agent's draft version. - - Optional — an agent can be created empty and have its graph filled in later. - """ diff --git a/src/profound/types/agent_list_params.py b/src/profound/types/agent_list_params.py deleted file mode 100644 index 9e7d1fe7..00000000 --- a/src/profound/types/agent_list_params.py +++ /dev/null @@ -1,21 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Optional -from typing_extensions import Literal, TypedDict - -__all__ = ["AgentListParams"] - - -class AgentListParams(TypedDict, total=False): - limit: int - - next_cursor: Optional[str] - - statuses: Optional[List[Literal["published", "draft"]]] - """Optional status filter. - - Use `published` to list agents that have a live published version, or `draft` to - list agents that have not been published yet. Defaults to `published`. - """ diff --git a/src/profound/types/agent_retrieve_graph_params.py b/src/profound/types/agent_retrieve_graph_params.py deleted file mode 100644 index d18f76aa..00000000 --- a/src/profound/types/agent_retrieve_graph_params.py +++ /dev/null @@ -1,16 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing_extensions import Literal, TypedDict - -__all__ = ["AgentRetrieveGraphParams"] - - -class AgentRetrieveGraphParams(TypedDict, total=False): - version: Literal["published", "draft"] - """Version of the agent whose graph to retrieve. - - Use `published` for the live version, or `draft` for the latest unpublished - changes. Defaults to `published`. - """ diff --git a/src/profound/types/agent_retrieve_graph_response.py b/src/profound/types/agent_retrieve_graph_response.py deleted file mode 100644 index e25bfb0b..00000000 --- a/src/profound/types/agent_retrieve_graph_response.py +++ /dev/null @@ -1,26 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Dict -from typing_extensions import Literal - -from .._models import BaseModel - -__all__ = ["AgentRetrieveGraphResponse"] - - -class AgentRetrieveGraphResponse(BaseModel): - """An agent version's workflow graph in the canonical dialect.""" - - agent_id: str - """Unique ID of the agent the graph belongs to.""" - - graph: Dict[str, object] - """ - Workflow graph (`{nodes, edges}`) in the canonical dialect — the same shape - `create` and `update` accept. Treat it as an opaque object: it is returned - verbatim, so tool-backed nodes appear in their lowered `tool` form rather than - the friendly v1 node types. Read it back to copy and edit a known-good agent. - """ - - version: Literal["published", "draft"] - """Which version of the agent this graph is — `published` or `draft`.""" diff --git a/src/profound/types/agent_retrieve_params.py b/src/profound/types/agent_retrieve_params.py deleted file mode 100644 index 7899729d..00000000 --- a/src/profound/types/agent_retrieve_params.py +++ /dev/null @@ -1,16 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing_extensions import Literal, TypedDict - -__all__ = ["AgentRetrieveParams"] - - -class AgentRetrieveParams(TypedDict, total=False): - version: Literal["published", "draft"] - """Version of the agent to retrieve. - - Use `published` for the live version, or `draft` for the latest unpublished - changes for the same agent. Defaults to `published`. - """ diff --git a/src/profound/types/agent_update_params.py b/src/profound/types/agent_update_params.py deleted file mode 100644 index 0a4797de..00000000 --- a/src/profound/types/agent_update_params.py +++ /dev/null @@ -1,18 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Dict -from typing_extensions import Required, TypedDict - -__all__ = ["AgentUpdateParams"] - - -class AgentUpdateParams(TypedDict, total=False): - graph: Required[Dict[str, object]] - """New workflow graph for the agent's draft version. - - Replaces the current draft graph; the agent is iterated in place rather than - re-created, so its ID is stable. Required — a null graph is rejected as a 422 - here rather than as a relayed upstream error. - """ diff --git a/src/profound/types/agent_update_response.py b/src/profound/types/agent_update_response.py deleted file mode 100644 index e0ec7648..00000000 --- a/src/profound/types/agent_update_response.py +++ /dev/null @@ -1,98 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Dict, List, Optional -from datetime import datetime -from typing_extensions import Literal - -from pydantic import Field as FieldInfo - -from .._models import BaseModel - -__all__ = ["AgentUpdateResponse", "Schema", "Validation", "ValidationIssue"] - - -class Schema(BaseModel): - """Schema metadata for an agent.""" - - input: Dict[str, object] - """JSON Schema for the agent's `inputs` object. - - Use the top-level property keys as input field names when starting a run. - """ - - output: Dict[str, object] - """ - JSON Schema for the `outputs` object returned by - `GET /v1/agents/{agent_id}/runs/{run_id}`. - """ - - -class ValidationIssue(BaseModel): - """A single problem found while validating an agent's graph.""" - - code: str - """Stable machine-readable identifier for the kind of issue.""" - - message: str - """Human-readable description of the issue.""" - - field: Optional[str] = None - """Name of the offending field on the node, if field-specific.""" - - field_title: Optional[str] = None - """Display title of the affected field, if available.""" - - node_id: Optional[str] = None - """ID of the node the issue applies to, if node-specific.""" - - node_title: Optional[str] = None - """Display title of the affected node, if available.""" - - violation: Optional[str] = None - """The specific constraint that was violated, if available.""" - - -class Validation(BaseModel): - """Result of validating an agent's graph. - - Mirrors the report computed on every read, so callers can confirm a draft - is publishable before calling publish. - """ - - valid: bool - """Whether the agent's graph is valid and ready to publish.""" - - issues: Optional[List[ValidationIssue]] = None - """Problems found while validating the graph. Empty when `valid` is true.""" - - -class AgentUpdateResponse(BaseModel): - """Detailed information for an agent.""" - - id: str - """Unique ID for the agent.""" - - created_at: datetime - """When the agent was created.""" - - name: str - """Display name of the agent.""" - - organization_id: str - """Unique ID of the organization that owns the agent.""" - - status: Literal["draft", "published", "unknown"] - """Current status of the agent.""" - - description: Optional[str] = None - """Short description of the agent, if provided.""" - - schema_: Optional[Schema] = FieldInfo(alias="schema", default=None) - """Schema metadata for an agent.""" - - validation: Optional[Validation] = None - """Result of validating an agent's graph. - - Mirrors the report computed on every read, so callers can confirm a draft is - publishable before calling publish. - """ diff --git a/src/profound/types/agents/__init__.py b/src/profound/types/agents/__init__.py deleted file mode 100644 index 34ea2ed6..00000000 --- a/src/profound/types/agents/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from .run_create_params import RunCreateParams as RunCreateParams -from .run_create_response import RunCreateResponse as RunCreateResponse -from .run_retrieve_params import RunRetrieveParams as RunRetrieveParams -from .run_retrieve_response import RunRetrieveResponse as RunRetrieveResponse -from .node_type_list_response import NodeTypeListResponse as NodeTypeListResponse -from .node_type_retrieve_schema_response import NodeTypeRetrieveSchemaResponse as NodeTypeRetrieveSchemaResponse diff --git a/src/profound/types/agents/node_type_retrieve_schema_response.py b/src/profound/types/agents/node_type_retrieve_schema_response.py deleted file mode 100644 index cc85b6d9..00000000 --- a/src/profound/types/agents/node_type_retrieve_schema_response.py +++ /dev/null @@ -1,61 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Dict, List, Optional - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["NodeTypeRetrieveSchemaResponse"] - - -class NodeTypeRetrieveSchemaResponse(BaseModel): - """JSON schema for a single node type.""" - - node_type: str - """Stable identifier for the node type, e.g. `llm`.""" - - schema_: Dict[str, object] = FieldInfo(alias="schema") - """Opaque JSON Schema for the node's configuration. - - Treat this as an arbitrary object; its internal shape can change between - `schema_version` bumps. - """ - - schema_version: str - """Opaque version string for the node schema. - - Bumps whenever the underlying schema changes, so it can be used as a client-side - cache key. - """ - - description: Optional[str] = None - """Short description of what the node type does, if provided.""" - - docs_version: Optional[str] = None - """ - Opaque version string for `documentation`/`examples`, independent of - `schema_version`. Bumps when the authoring guidance changes even if the - underlying machine `schema` did not. When it trails the live `schema_version`, - treat `documentation`/`examples` as guidance that may be stale and validate - against the live `schema`. - """ - - documentation: Optional[Dict[str, object]] = None - """ - Opaque, human-oriented authoring guidance for the node type — purpose, - constraints, enum values, and variable-flow notes that the machine `schema` does - not always express (e.g. a conditional's else-branch rule, or an iteration's - sub-graph shape). Treat as an arbitrary object; use `docs_version` as its cache - key. - """ - - examples: Optional[List[Dict[str, object]]] = None - """Worked example configurations for the node type, in the canonical graph dialect. - - Curated authoring guidance, versioned by `docs_version` (NOT `schema_version`): - they illustrate a valid shape at curation time but are a starting point, not the - contract — they may lag the validator. The authoritative contract is `schema`, - and the only authoritative check that a graph is valid is publishing it (or the - agent-validation endpoint). Do not parse `examples` as the schema. - """ diff --git a/src/profound/types/agents/run_create_params.py b/src/profound/types/agents/run_create_params.py deleted file mode 100644 index 20004722..00000000 --- a/src/profound/types/agents/run_create_params.py +++ /dev/null @@ -1,17 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Dict -from typing_extensions import TypedDict - -__all__ = ["RunCreateParams"] - - -class RunCreateParams(TypedDict, total=False): - inputs: Dict[str, object] - """Input values for the run. - - Keys should match the property names defined in `schema.input`. Omit the request - body when the agent does not require inputs. - """ diff --git a/src/profound/types/agents/run_retrieve_params.py b/src/profound/types/agents/run_retrieve_params.py deleted file mode 100644 index 2a6c9179..00000000 --- a/src/profound/types/agents/run_retrieve_params.py +++ /dev/null @@ -1,15 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing_extensions import Required, TypedDict - -__all__ = ["RunRetrieveParams"] - - -class RunRetrieveParams(TypedDict, total=False): - agent_id: Required[str] - """The ID of the agent that owns the run.""" - - verbose: bool - """Include each step's raw `outputs` payload in the execution trace.""" diff --git a/src/profound/types/agents/run_retrieve_response.py b/src/profound/types/agents/run_retrieve_response.py deleted file mode 100644 index 915c7aec..00000000 --- a/src/profound/types/agents/run_retrieve_response.py +++ /dev/null @@ -1,80 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Dict, List, Optional -from datetime import datetime -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["RunRetrieveResponse", "Step"] - - -class Step(BaseModel): - """One executed node in a run's step trace, in execution order. - - The lightweight fields always ship; ``outputs`` is populated only when the - run-retrieve request asks for ``verbose``. - """ - - node_id: str - """ID of the node that ran, within its agent graph.""" - - node_type: str - """Kind of node, e.g. "profound_visibility", "llm", "conditional".""" - - status: str - """Terminal status of this node execution.""" - - title: str - """Human-readable title of the node.""" - - elapsed_time: Optional[float] = None - """Wall-clock seconds the node took, if recorded.""" - - error_message: Optional[str] = None - """Failure detail for this node, when it failed.""" - - finished_at: Optional[datetime] = None - """When the node finished, if it has.""" - - outputs: Optional[Dict[str, object]] = None - """Raw output payload this node produced. - - Included only when the request asks for `verbose`. - """ - - -class RunRetrieveResponse(BaseModel): - """Status and result details for an agent run.""" - - id: str - """Unique ID for the run.""" - - agent_id: str - """Unique ID of the agent for this run.""" - - status: Literal["queued", "running", "succeeded", "failed", "cancelled", "skipped", "unknown"] - """Current status of the run.""" - - error: Optional[Dict[str, object]] = None - """Error details, when the run fails and error information is available.""" - - finished_at: Optional[datetime] = None - """When the run finished, if it has completed.""" - - outputs: Optional[Dict[str, object]] = None - """Output values returned by the run, keyed by variable ID. - - This object conforms to `schema.output` from the agent detail response and is - empty when no outputs are available. - """ - - started_at: Optional[datetime] = None - """When the run started, if it has started.""" - - steps: Optional[List[Step]] = None - """ - Ordered step-by-step execution trace — one entry per node that ran, in execution - order. Always present once the run has executed a node; per-node `outputs` - inside each step are included only when the request asks for `verbose`. - """ diff --git a/src/profound/types/category.py b/src/profound/types/category.py deleted file mode 100644 index becc978e..00000000 --- a/src/profound/types/category.py +++ /dev/null @@ -1,15 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Optional - -from .._models import BaseModel - -__all__ = ["Category"] - - -class Category(BaseModel): - id: str - - name: str - - internal_name: Optional[str] = None diff --git a/src/profound/types/content/optimization_retrieve_response.py b/src/profound/types/content/optimization_retrieve_response.py deleted file mode 100644 index 9e61ccac..00000000 --- a/src/profound/types/content/optimization_retrieve_response.py +++ /dev/null @@ -1,121 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Dict, List, Union, Optional -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = [ - "OptimizationRetrieveResponse", - "Data", - "DataAeoContentScore", - "DataAeoContentScoreTargetZone", - "DataAnalysis", - "DataAnalysisBreakdown", - "DataContent", - "DataInputs", - "DataInputsPrompt", - "DataInputsTopic", - "DataInputsUser", - "DataRecommendation", - "DataRecommendationImpact", - "DataRecommendationSuggestion", -] - - -class DataAeoContentScoreTargetZone(BaseModel): - high: float - - low: float - - -class DataAeoContentScore(BaseModel): - target_zone: DataAeoContentScoreTargetZone - - value: float - - -class DataAnalysisBreakdown(BaseModel): - score: float - - title: str - - weight: float - - -class DataAnalysis(BaseModel): - breakdown: List[DataAnalysisBreakdown] - - -class DataContent(BaseModel): - format: Literal["markdown", "html"] - - value: str - - -class DataInputsPrompt(BaseModel): - id: str - - name: str - - -class DataInputsTopic(BaseModel): - id: str - - name: str - - -class DataInputsUser(BaseModel): - metadata: Dict[str, Union[int, str]] - - type: Literal["file", "text", "url"] - - value: str - - -class DataInputs(BaseModel): - prompt: Optional[DataInputsPrompt] = None - - top_citations: List[str] - - topic: Optional[DataInputsTopic] = None - - user: DataInputsUser - - -class DataRecommendationImpact(BaseModel): - score: float - - section: str - - -class DataRecommendationSuggestion(BaseModel): - rationale: str - - text: str - - -class DataRecommendation(BaseModel): - impact: Optional[DataRecommendationImpact] = None - - status: Literal["done", "pending"] - - suggestion: DataRecommendationSuggestion - - title: str - - -class Data(BaseModel): - aeo_content_score: Optional[DataAeoContentScore] = None - - analysis: DataAnalysis - - content: DataContent - - inputs: DataInputs - - recommendations: List[DataRecommendation] - - -class OptimizationRetrieveResponse(BaseModel): - data: Data diff --git a/src/profound/types/document_create_params.py b/src/profound/types/document_create_params.py deleted file mode 100644 index 7013a26e..00000000 --- a/src/profound/types/document_create_params.py +++ /dev/null @@ -1,34 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing_extensions import Required, TypedDict - -__all__ = ["DocumentCreateParams"] - - -class DocumentCreateParams(TypedDict, total=False): - id: Required[str] - """ID for the new document, chosen by you. - - Creation is idempotent on this ID: repeating a request with the same ID returns - the existing document instead of creating a second one, so a retry after a - network error is safe. - """ - - content_markdown: Required[str] - """Initial document body as markdown. - - Must be non-empty. Rendered into the collaborative editor, so the result is real - editable content, not a stored blob. - """ - - name: Required[str] - """Title for the document. Must be non-empty.""" - - organization_id: Required[str] - """ID of the organization that will own the document. - - Required — Profound API keys are user-scoped, so the owning organization must be - chosen explicitly. The caller must be a member of this organization. - """ diff --git a/src/profound/types/document_create_response.py b/src/profound/types/document_create_response.py deleted file mode 100644 index 76381fdd..00000000 --- a/src/profound/types/document_create_response.py +++ /dev/null @@ -1,80 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Optional -from datetime import datetime -from typing_extensions import Literal - -from .._models import BaseModel - -__all__ = ["DocumentCreateResponse"] - - -class DocumentCreateResponse(BaseModel): - """ - The document that was created, plus the change-detection token minted for this write. - """ - - id: str - """The document's ID.""" - - app_delegate: Optional[str] = None - """ - Which integration created the document, derived server-side from the credential - that authenticated the write. `null` for documents created outside any - integration. An open-ended value, not a fixed set — known values today include - `external-api` and `context-manager`, and more are added as new integrations - ship. - """ - - author_type: Literal["user", "agent"] - """Whether the document's owner is a person (`user`) or an agent (`agent`).""" - - category_name: Optional[str] = None - """Name of the brand category set on the document, if any. - - Paired with `company_name`; writable only on create. - """ - - company_name: Optional[str] = None - """Name of the brand/company set on the document, if any. - - Paired with `category_name`; writable only on create. - """ - - created_at: datetime - """When the document was created.""" - - name: str - """The document's title.""" - - owner_email: Optional[str] = None - """Email of the document's owner. - - `null` when the owning profile has been deleted or could not be resolved. - """ - - owner_user_id: str - """ID of the document's owner.""" - - updated_at: datetime - """When the document was last modified. - - Seeding the initial content counts, so a freshly created document is normally - modified a moment after it was created. - """ - - url: str - """Link to open the document in the Profound app.""" - - version_hash: Optional[str] = None - """Opaque token that changes whenever the document's content changes. - - `null` when this call found an existing document with the same id (idempotent - create) rather than creating one, or when the token could not be minted. Bare - hex, up to 128 characters, with no fixed prefix — treat it as opaque and do not - parse it. It detects change; it is not a precondition, and a matching token is - not licence to overwrite blindly. - """ - - visibility: Literal["invited_only", "organization"] - """General access scope. New documents are `invited_only`.""" diff --git a/src/profound/types/document_delete_params.py b/src/profound/types/document_delete_params.py deleted file mode 100644 index ca2d8787..00000000 --- a/src/profound/types/document_delete_params.py +++ /dev/null @@ -1,12 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing_extensions import Required, TypedDict - -__all__ = ["DocumentDeleteParams"] - - -class DocumentDeleteParams(TypedDict, total=False): - organization_id: Required[str] - """ID of the organization that owns the document. You must be a member of it.""" diff --git a/src/profound/types/document_list_params.py b/src/profound/types/document_list_params.py deleted file mode 100644 index e4966739..00000000 --- a/src/profound/types/document_list_params.py +++ /dev/null @@ -1,41 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import Required, TypedDict - -__all__ = ["DocumentListParams"] - - -class DocumentListParams(TypedDict, total=False): - organization_id: Required[str] - """ID of the organization whose documents to list. - - Required. The caller must be a member of this organization. - """ - - limit: int - - next_cursor: Optional[str] - - q: Optional[str] - """Filter to documents whose name contains this text, case-insensitively. - - Matches only the document's name, never its content — a query that finds nothing - does not mean the topic is unwritten, only that no title mentions it. Blank or - omitted returns every document. Ignored when sent alongside `next_cursor`, which - carries the filter the walk started with. Matching is name-only as of this - release; broader matching may follow if upstream changes how it indexes the name - column. - """ - - sort: Optional[str] - """ - Documents are always ordered newest-modified-first (`updated_at DESC`, then - `created_at DESC`, then `id DESC`); there is no parameter that changes this. - `recency` is the only accepted value, and passing it is a no-op that names the - guarantee rather than altering it — any other value is rejected outright rather - than silently ignored. Ordering is never re-applied to a returned page either: - that would only be consistent within the page, not across a paginated walk. - """ diff --git a/src/profound/types/document_list_response.py b/src/profound/types/document_list_response.py deleted file mode 100644 index 051db150..00000000 --- a/src/profound/types/document_list_response.py +++ /dev/null @@ -1,79 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Optional -from datetime import datetime -from typing_extensions import Literal - -from .._models import BaseModel -from .shared.cursor_pagination import CursorPagination - -__all__ = ["DocumentListResponse", "Data"] - - -class Data(BaseModel): - """A Profound document.""" - - id: str - """The document's ID.""" - - app_delegate: Optional[str] = None - """ - Which integration created the document, derived server-side from the credential - that authenticated the write. `null` for documents created outside any - integration. An open-ended value, not a fixed set — known values today include - `external-api` and `context-manager`, and more are added as new integrations - ship. - """ - - author_type: Literal["user", "agent"] - """Whether the document's owner is a person (`user`) or an agent (`agent`).""" - - category_name: Optional[str] = None - """Name of the brand category set on the document, if any. - - Paired with `company_name`; writable only on create. - """ - - company_name: Optional[str] = None - """Name of the brand/company set on the document, if any. - - Paired with `category_name`; writable only on create. - """ - - created_at: datetime - """When the document was created.""" - - name: str - """The document's title.""" - - owner_email: Optional[str] = None - """Email of the document's owner. - - `null` when the owning profile has been deleted or could not be resolved. - """ - - owner_user_id: str - """ID of the document's owner.""" - - updated_at: datetime - """When the document was last modified. - - Seeding the initial content counts, so a freshly created document is normally - modified a moment after it was created. - """ - - url: str - """Link to open the document in the Profound app.""" - - visibility: Literal["invited_only", "organization"] - """General access scope. New documents are `invited_only`.""" - - -class DocumentListResponse(BaseModel): - """A page of documents.""" - - data: List[Data] - """Documents on this page.""" - - pagination: CursorPagination - """Pagination state for fetching the next page.""" diff --git a/src/profound/types/document_replace_content_params.py b/src/profound/types/document_replace_content_params.py deleted file mode 100644 index 826864d0..00000000 --- a/src/profound/types/document_replace_content_params.py +++ /dev/null @@ -1,34 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing_extensions import Required, TypedDict - -__all__ = ["DocumentReplaceContentParams"] - - -class DocumentReplaceContentParams(TypedDict, total=False): - content_markdown: Required[str] - """New markdown body for the document, replacing everything it held before. - - An empty string is valid and clears the document — nothing else warns you before - that happens, so treat sending one as deliberate. Whole-body replace only: send - the complete new text, not just the part that changed. Capped at 1,000,000 - bytes; the upstream router separately caps the entire request at 2 MiB, so a - body near this cap can still be refused in transit rather than by this field. - """ - - organization_id: Required[str] - """ID of the organization that owns the document. - - Required — Profound API keys are user-scoped, so the owning organization must be - chosen explicitly. The caller must be a member of this organization. - """ - - skip_title_sync: bool - """ - Off by default, matching the Profound app: the document's title follows the new - content's first heading, so a replace silently renames the document whenever - that heading differs from the current title. Set true to keep the current title - regardless of what the new content's first heading says. - """ diff --git a/src/profound/types/document_replace_content_response.py b/src/profound/types/document_replace_content_response.py deleted file mode 100644 index 3975adb9..00000000 --- a/src/profound/types/document_replace_content_response.py +++ /dev/null @@ -1,90 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Optional -from datetime import datetime -from typing_extensions import Literal - -from .._models import BaseModel - -__all__ = ["DocumentReplaceContentResponse"] - - -class DocumentReplaceContentResponse(BaseModel): - """ - The document after its content was replaced, plus the change-detection token and how much landed. - """ - - id: str - """The document's ID.""" - - app_delegate: Optional[str] = None - """ - Which integration created the document, derived server-side from the credential - that authenticated the write. `null` for documents created outside any - integration. An open-ended value, not a fixed set — known values today include - `external-api` and `context-manager`, and more are added as new integrations - ship. - """ - - author_type: Literal["user", "agent"] - """Whether the document's owner is a person (`user`) or an agent (`agent`).""" - - category_name: Optional[str] = None - """Name of the brand category set on the document, if any. - - Paired with `company_name`; writable only on create. - """ - - company_name: Optional[str] = None - """Name of the brand/company set on the document, if any. - - Paired with `category_name`; writable only on create. - """ - - content_chars: int - """ - Character count of the markdown that landed — 0 when this call cleared the - document. The only confirmation of how much was written, on the most destructive - operation this surface exposes. - """ - - created_at: datetime - """When the document was created.""" - - name: str - """The document's title.""" - - owner_email: Optional[str] = None - """Email of the document's owner. - - `null` when the owning profile has been deleted or could not be resolved. - """ - - owner_user_id: str - """ID of the document's owner.""" - - updated_at: datetime - """When the document was last modified. - - Seeding the initial content counts, so a freshly created document is normally - modified a moment after it was created. - """ - - url: str - """Link to open the document in the Profound app.""" - - version_hash: Optional[str] = None - """ - Opaque token that changes whenever the document's collaborative-editing snapshot - changes — a digest over that snapshot, not over the markdown. It moves on a - comment reply, because a comment changes the snapshot, and it does not move on a - rename, because metadata sits outside the snapshot. Bare hex, up to 128 - characters, with no fixed prefix — treat it as opaque and do not parse it. - `null` when no token could be minted; never omitted. It is a change detector, - not a precondition: a caller must not treat a matching token as licence to - overwrite blindly, because it names the room at a moment cortex observed and not - the moment its own write lands. - """ - - visibility: Literal["invited_only", "organization"] - """General access scope. New documents are `invited_only`.""" diff --git a/src/profound/types/document_retrieve_params.py b/src/profound/types/document_retrieve_params.py deleted file mode 100644 index 4b4623c7..00000000 --- a/src/profound/types/document_retrieve_params.py +++ /dev/null @@ -1,44 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing_extensions import Required, TypedDict - -__all__ = ["DocumentRetrieveParams"] - - -class DocumentRetrieveParams(TypedDict, total=False): - organization_id: Required[str] - """ID of the organization that owns the document. - - Required — Profound API keys are user-scoped, so the owning organization must be - named explicitly. The caller must be a member of this organization. - """ - - include_comments: bool - """Include the document's review comments, each mapped to `{content, context}`. - - On by default — a comment is part of the document's review state, not an aside. - Turn it off to skip the comment-thread walk upstream; off, `comments` is omitted - from the response rather than returned as an empty list. - """ - - include_tabs: bool - """Include the document's other tabs. - - On by default — a tab body is part of the document, not an aside. Off, - `additional_tabs` is omitted from the response rather than returned as an empty - list. - """ - - preview: bool - """ - Bound every body in the response — `content_markdown` and each tab's — and set - `content_truncated` if any was cut. On by default. Upstream has no partial-read - of its own — every read is a full round trip through the collaborative editor — - so this saves your context, not upstream cost. A preview read also omits - `version_hash`, on purpose: a hash returned next to a body you have not fully - seen invites replacing content you never read. Pass `preview=false` before you - intend to write, to get the whole body, `content_truncated: false`, and the - hash. - """ diff --git a/src/profound/types/document_retrieve_response.py b/src/profound/types/document_retrieve_response.py deleted file mode 100644 index d9344127..00000000 --- a/src/profound/types/document_retrieve_response.py +++ /dev/null @@ -1,156 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Optional -from datetime import datetime -from typing_extensions import Literal - -from .._models import BaseModel - -__all__ = ["DocumentRetrieveResponse", "AdditionalTab", "Comment"] - - -class AdditionalTab(BaseModel): - """One of a document's tabs beyond the default one.""" - - content_markdown: str - """This tab's body as markdown.""" - - title: str - """The tab's title as authored. - - Not unique within a document, and a placeholder when the tab was never titled. - """ - - -class Comment(BaseModel): - """ - One review comment, mapped from upstream's open, unvalidated shape into a closed contract. - - Upstream's own comment schema — `body`, `quoted_text`, `author`, `replies`, `resolved` — is - documented as not a closed contract. Only `body` and `quoted_text` are mapped through, as - `content` and `context`; commenter identity, reply threads and resolution state are dropped - here, not relayed. - """ - - content: str - """The comment's text.""" - - context: Optional[str] = None - """Text the comment was left on. - - `null` for a comment on no specific text, never an empty string. - """ - - -class DocumentRetrieveResponse(BaseModel): - """ - A document's metadata, its default tab's body, its other tabs, its comments, and the - change-detection token for it. - """ - - id: str - """The document's ID.""" - - app_delegate: Optional[str] = None - """ - Which integration created the document, derived server-side from the credential - that authenticated the write. `null` for documents created outside any - integration. An open-ended value, not a fixed set — known values today include - `external-api` and `context-manager`, and more are added as new integrations - ship. - """ - - author_type: Literal["user", "agent"] - """Whether the document's owner is a person (`user`) or an agent (`agent`).""" - - category_name: Optional[str] = None - """Name of the brand category set on the document, if any. - - Paired with `company_name`; writable only on create. - """ - - company_name: Optional[str] = None - """Name of the brand/company set on the document, if any. - - Paired with `category_name`; writable only on create. - """ - - content_markdown: str - """The default tab's body as markdown. - - Empty string for a document with no content — never absent, so you can read it - without a presence check. - """ - - created_at: datetime - """When the document was created.""" - - name: str - """The document's title.""" - - owner_email: Optional[str] = None - """Email of the document's owner. - - `null` when the owning profile has been deleted or could not be resolved. - """ - - owner_user_id: str - """ID of the document's owner.""" - - updated_at: datetime - """When the document was last modified. - - Seeding the initial content counts, so a freshly created document is normally - modified a moment after it was created. - """ - - url: str - """Link to open the document in the Profound app.""" - - visibility: Literal["invited_only", "organization"] - """General access scope. New documents are `invited_only`.""" - - additional_tabs: Optional[List[AdditionalTab]] = None - """ - Every tab beyond the default one, in document order, each as - `{title, content_markdown}`. Upstream allows up to twenty. Omitted from the - response entirely when `include_tabs=false`; an empty list is a real answer - meaning this document has no other tabs, and the two are never confused. Tabs - are readable through this API but not writable: create cannot make one, and - replacing this document's content does not preserve them. - """ - - comments: Optional[List[Comment]] = None - """ - Review comments left on the document, each mapped to `{content, context}` — the - comment's text and, if any, the text it was left on. Omitted from the response - entirely when `include_comments=false`; an empty list is a real answer meaning - this document has no comments. Mapped from upstream's own open, unvalidated - shape — commenter identity, reply threads and resolution state are dropped, - never relayed. A comment whose shape this mapping cannot read is dropped from - the list rather than failing the read, so this list can be shorter than the - document's real thread count. - """ - - content_truncated: Optional[bool] = None - """ - Whether any body in this response was cut short — `content_markdown` or any - tab's. `true` only on a `preview=true` read where one of them exceeded the - preview length; a short document, or a `preview=false` read, always gets `false` - and every body whole. It does not say which one was cut. Preview truncation - saves your context, not upstream cost — the full round trip through the - collaborative editor happens either way. - """ - - version_hash: Optional[str] = None - """ - Opaque token that changes whenever the document's content changes, sampled - before this body was read — so it names this body or an older state, never a - newer one. `null` when the collaboration service could not be asked for it; the - read itself still succeeded, only the token is missing. Bare hex, up to 128 - characters, with no fixed prefix — treat it as opaque and do not parse it. It - detects change; it is not a precondition, and a matching token is not licence to - overwrite blindly. Omitted entirely — not `null` — on a `preview=true` read: a - hash next to a body you have not fully seen invites replacing content you never - read. Ask for `preview=false` before you intend to write. - """ diff --git a/src/profound/types/document_update_params.py b/src/profound/types/document_update_params.py deleted file mode 100644 index 39f3eca8..00000000 --- a/src/profound/types/document_update_params.py +++ /dev/null @@ -1,40 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import Literal, Required, TypedDict - -__all__ = ["DocumentUpdateParams"] - - -class DocumentUpdateParams(TypedDict, total=False): - organization_id: Required[str] - """ID of the organization that owns the document. - - Required — Profound API keys are user-scoped, so the owning organization must be - named explicitly. The caller must be a member of this organization. - """ - - name: Optional[str] - """New title for the document. - - Renaming sets a permanent lock: once a document is renamed through this route, - its title stops following the first heading of its content, for the rest of the - document's life, and no route can undo the lock. Omit to leave the title as it - is. - """ - - visibility: Optional[Literal["invited_only", "organization"]] - """ - New sharing scope: `invited_only` for only the people invited to the document, - or `organization` for everyone in the owning organization. Only the document's - creator can change this; omit to leave sharing as it is. Three things worth - knowing before you set it: `organization` visibility grants view only — there is - no value here that grants the organization edit access. Setting `invited_only` - removes the organization's access entirely. And re-asserting `organization` on a - document whose organization grant is already `edit` silently downgrades the - whole organization to view — upstream replays the access sync whenever this - field is sent, and that sync always upserts view, even when the value you sent - matches the one already stored. - """ diff --git a/src/profound/types/document_update_response.py b/src/profound/types/document_update_response.py deleted file mode 100644 index e9eb61b1..00000000 --- a/src/profound/types/document_update_response.py +++ /dev/null @@ -1,68 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Optional -from datetime import datetime -from typing_extensions import Literal - -from .._models import BaseModel - -__all__ = ["DocumentUpdateResponse"] - - -class DocumentUpdateResponse(BaseModel): - """A Profound document.""" - - id: str - """The document's ID.""" - - app_delegate: Optional[str] = None - """ - Which integration created the document, derived server-side from the credential - that authenticated the write. `null` for documents created outside any - integration. An open-ended value, not a fixed set — known values today include - `external-api` and `context-manager`, and more are added as new integrations - ship. - """ - - author_type: Literal["user", "agent"] - """Whether the document's owner is a person (`user`) or an agent (`agent`).""" - - category_name: Optional[str] = None - """Name of the brand category set on the document, if any. - - Paired with `company_name`; writable only on create. - """ - - company_name: Optional[str] = None - """Name of the brand/company set on the document, if any. - - Paired with `category_name`; writable only on create. - """ - - created_at: datetime - """When the document was created.""" - - name: str - """The document's title.""" - - owner_email: Optional[str] = None - """Email of the document's owner. - - `null` when the owning profile has been deleted or could not be resolved. - """ - - owner_user_id: str - """ID of the document's owner.""" - - updated_at: datetime - """When the document was last modified. - - Seeding the initial content counts, so a freshly created document is normally - modified a moment after it was created. - """ - - url: str - """Link to open the document in the Profound app.""" - - visibility: Literal["invited_only", "organization"] - """General access scope. New documents are `invited_only`.""" diff --git a/src/profound/types/hostname_filter_param.py b/src/profound/types/hostname_filter_param.py deleted file mode 100644 index ada06a14..00000000 --- a/src/profound/types/hostname_filter_param.py +++ /dev/null @@ -1,32 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Union -from typing_extensions import Literal, Required, TypedDict - -from .._types import SequenceNotStr - -__all__ = ["HostnameFilterParam"] - - -class HostnameFilterParam(TypedDict, total=False): - """Filter by hostname""" - - field: Required[Literal["hostname"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/integration_list_params.py b/src/profound/types/integration_list_params.py deleted file mode 100644 index 2d9e5b62..00000000 --- a/src/profound/types/integration_list_params.py +++ /dev/null @@ -1,19 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import Literal, TypedDict - -__all__ = ["IntegrationListParams"] - - -class IntegrationListParams(TypedDict, total=False): - organization_id: Optional[str] - """Organization scope for API keys that can access multiple organizations.""" - - provider: Optional[str] - """Filter to a single connector/provider id, e.g. `google_drive`.""" - - status_filter: Optional[Literal["active", "pending", "needs_reauth", "revoking", "revoked"]] - """Filter to one lifecycle status. Omitted returns all statuses.""" diff --git a/src/profound/types/integration_list_response.py b/src/profound/types/integration_list_response.py deleted file mode 100644 index 61788219..00000000 --- a/src/profound/types/integration_list_response.py +++ /dev/null @@ -1,42 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Optional -from typing_extensions import Literal - -from .._models import BaseModel - -__all__ = ["IntegrationListResponse", "Data"] - - -class Data(BaseModel): - """One connected integration installation visible to the caller.""" - - id: str - """Installation id to bind to a hub-backed node's `integration_id`.""" - - account: Optional[str] = None - """Connected account identity as the provider reports it, e.g. - - the Google account email or the WordPress site URL. This is what tells two - connections of the same provider apart; `label` often repeats across them. Null - when the provider reports no identity. - """ - - label: str - """Human-readable account label for the connection.""" - - level: Literal["org", "user"] - """Installation scope: shared across the org, or user-owned.""" - - provider: str - """Canonical connector id, matching node contracts.""" - - status: str - """Connection lifecycle status.""" - - -class IntegrationListResponse(BaseModel): - """Connected integrations visible to the caller's org/user context.""" - - data: List[Data] - """Connected integrations.""" diff --git a/src/profound/types/knowledge_base_search_response.py b/src/profound/types/knowledge_base_search_response.py deleted file mode 100644 index 23768c23..00000000 --- a/src/profound/types/knowledge_base_search_response.py +++ /dev/null @@ -1,30 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Dict, List, Optional - -from .._models import BaseModel -from .shared.cursor_pagination import CursorPagination - -__all__ = ["KnowledgeBaseSearchResponse", "Data"] - - -class Data(BaseModel): - id: str - """Document or chunk path.""" - - content: str - """Matched content.""" - - metadata: Dict[str, object] - """Result metadata, including folder path.""" - - score: float - """Relevance score.""" - - -class KnowledgeBaseSearchResponse(BaseModel): - data: List[Data] - """Knowledge base search results.""" - - pagination: Optional[CursorPagination] = None - """Pagination metadata.""" diff --git a/src/profound/types/logs/__init__.py b/src/profound/types/logs/__init__.py deleted file mode 100644 index f8ee8b14..00000000 --- a/src/profound/types/logs/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations diff --git a/src/profound/types/organization_domains_params.py b/src/profound/types/organization_domains_params.py deleted file mode 100644 index 5cba942d..00000000 --- a/src/profound/types/organization_domains_params.py +++ /dev/null @@ -1,20 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import TypedDict - -from .._types import SequenceNotStr - -__all__ = ["OrganizationDomainsParams"] - - -class OrganizationDomainsParams(TypedDict, total=False): - organization_ids: Optional[SequenceNotStr[str]] - """Restrict results to one or more organizations the caller belongs to. - - Repeat the parameter to target multiple orgs (e.g. - `?organization_ids=&organization_ids=`). Omit to return data from - every organization the caller has access to. - """ diff --git a/src/profound/types/organization_domains_response.py b/src/profound/types/organization_domains_response.py deleted file mode 100644 index 108a1421..00000000 --- a/src/profound/types/organization_domains_response.py +++ /dev/null @@ -1,25 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List -from datetime import datetime -from typing_extensions import TypeAlias - -from .._models import BaseModel -from .organization import Organization - -__all__ = ["OrganizationDomainsResponse", "OrganizationDomainsResponseItem"] - - -class OrganizationDomainsResponseItem(BaseModel): - """A domain paired with the organization edge it belongs to.""" - - id: str - - created_at: datetime - - name: str - - organization: Organization - - -OrganizationDomainsResponse: TypeAlias = List[OrganizationDomainsResponseItem] diff --git a/src/profound/types/organization_get_personas_params.py b/src/profound/types/organization_get_personas_params.py deleted file mode 100644 index 52aa2f7c..00000000 --- a/src/profound/types/organization_get_personas_params.py +++ /dev/null @@ -1,20 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import TypedDict - -from .._types import SequenceNotStr - -__all__ = ["OrganizationGetPersonasParams"] - - -class OrganizationGetPersonasParams(TypedDict, total=False): - organization_ids: Optional[SequenceNotStr[str]] - """Restrict results to one or more organizations the caller belongs to. - - Repeat the parameter to target multiple orgs (e.g. - `?organization_ids=&organization_ids=`). Omit to return data from - every organization the caller has access to. - """ diff --git a/src/profound/types/organization_list_assets_params.py b/src/profound/types/organization_list_assets_params.py deleted file mode 100644 index 463e88f2..00000000 --- a/src/profound/types/organization_list_assets_params.py +++ /dev/null @@ -1,20 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import TypedDict - -from .._types import SequenceNotStr - -__all__ = ["OrganizationListAssetsParams"] - - -class OrganizationListAssetsParams(TypedDict, total=False): - organization_ids: Optional[SequenceNotStr[str]] - """Restrict results to one or more organizations the caller belongs to. - - Repeat the parameter to target multiple orgs (e.g. - `?organization_ids=&organization_ids=`). Omit to return data from - every organization the caller has access to. - """ diff --git a/src/profound/types/organization_regions_params.py b/src/profound/types/organization_regions_params.py deleted file mode 100644 index 8dc00ceb..00000000 --- a/src/profound/types/organization_regions_params.py +++ /dev/null @@ -1,20 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import TypedDict - -from .._types import SequenceNotStr - -__all__ = ["OrganizationRegionsParams"] - - -class OrganizationRegionsParams(TypedDict, total=False): - organization_ids: Optional[SequenceNotStr[str]] - """Restrict results to one or more organizations the caller belongs to. - - Repeat the parameter to target multiple orgs (e.g. - `?organization_ids=&organization_ids=`). Omit to return data from - every organization the caller has access to. - """ diff --git a/src/profound/types/organizations/category_create_prompts_params.py b/src/profound/types/organizations/category_create_prompts_params.py deleted file mode 100644 index d5c5e2df..00000000 --- a/src/profound/types/organizations/category_create_prompts_params.py +++ /dev/null @@ -1,67 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Iterable, Optional -from typing_extensions import Literal, Required, TypedDict - -from .id_or_name_param import IDOrNameParam - -__all__ = ["CategoryCreatePromptsParams", "Prompt"] - - -class CategoryCreatePromptsParams(TypedDict, total=False): - prompts: Required[Iterable[Prompt]] - """List of prompts to create.""" - - dry_run: bool - """When true, validate and preview changes without persisting them.""" - - -class Prompt(TypedDict, total=False): - """A single prompt to create within a category.""" - - language: Required[str] - """Language code (e.g. 'en-US')""" - - platforms: Required[Iterable[IDOrNameParam]] - """AI platforms where the prompt will be collected.""" - - prompt: Required[str] - """The prompt text to be sent to AI platforms.""" - - regions: Required[Iterable[IDOrNameParam]] - """Regions where the prompt will be collected.""" - - topic: Required[IDOrNameParam] - """Topic to assign. A new topic is created if the name doesn't exist.""" - - id: Optional[str] - """Optional client-generated UUID for the prompt. - - When provided, creation is idempotent: retrying a request with the same id will - not create a duplicate prompt. Omit to have the server generate one - (non-idempotent). - """ - - analysis_types: Optional[List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]]] - """Analysis types: 'visibility', 'sentiment', 'accuracy'. - - Defaults to ['visibility']. - """ - - asset: Optional[IDOrNameParam] - """Reference by id, name, or both. - - Plain strings work too: UUIDs become id lookups, other strings become name - lookups. - """ - - personas: Iterable[IDOrNameParam] - """Personas to use when collecting. Omit for default (no persona).""" - - prompt_type: Optional[str] - """Deprecated. Use analysis_types instead. 'Visibility' or 'Sentiment'.""" - - tags: Iterable[IDOrNameParam] - """Tags to assign. New tags are created if names don't exist.""" diff --git a/src/profound/types/organizations/category_get_citation_categories_response.py b/src/profound/types/organizations/category_get_citation_categories_response.py deleted file mode 100644 index 739e0ab1..00000000 --- a/src/profound/types/organizations/category_get_citation_categories_response.py +++ /dev/null @@ -1,19 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List - -from ..._models import BaseModel - -__all__ = ["CategoryGetCitationCategoriesResponse", "Data"] - - -class Data(BaseModel): - name: str - """Display name.""" - - value: str - """Value to pass to the v2 citations `citation_category` filter.""" - - -class CategoryGetCitationCategoriesResponse(BaseModel): - data: List[Data] diff --git a/src/profound/types/organizations/category_list_params.py b/src/profound/types/organizations/category_list_params.py deleted file mode 100644 index e2e50928..00000000 --- a/src/profound/types/organizations/category_list_params.py +++ /dev/null @@ -1,20 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import TypedDict - -from ..._types import SequenceNotStr - -__all__ = ["CategoryListParams"] - - -class CategoryListParams(TypedDict, total=False): - organization_ids: Optional[SequenceNotStr[str]] - """Restrict results to one or more organizations the caller belongs to. - - Repeat the parameter to target multiple orgs (e.g. - `?organization_ids=&organization_ids=`). Omit to return data from - every organization the caller has access to. - """ diff --git a/src/profound/types/organizations/category_list_response.py b/src/profound/types/organizations/category_list_response.py deleted file mode 100644 index 61ed8ac0..00000000 --- a/src/profound/types/organizations/category_list_response.py +++ /dev/null @@ -1,24 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Optional -from typing_extensions import TypeAlias - -from ..._models import BaseModel -from ..organization import Organization - -__all__ = ["CategoryListResponse", "CategoryListResponseItem"] - - -class CategoryListResponseItem(BaseModel): - """A category annotated with the organization that owns it.""" - - id: str - - name: str - - organization: Organization - - internal_name: Optional[str] = None - - -CategoryListResponse: TypeAlias = List[CategoryListResponseItem] diff --git a/src/profound/types/organizations/category_retrieve_regions_response.py b/src/profound/types/organizations/category_retrieve_regions_response.py deleted file mode 100644 index 6988b749..00000000 --- a/src/profound/types/organizations/category_retrieve_regions_response.py +++ /dev/null @@ -1,10 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List -from typing_extensions import TypeAlias - -from ..named_resource import NamedResource - -__all__ = ["CategoryRetrieveRegionsResponse"] - -CategoryRetrieveRegionsResponse: TypeAlias = List[NamedResource] diff --git a/src/profound/types/organizations/category_tags_response.py b/src/profound/types/organizations/category_tags_response.py deleted file mode 100644 index 3058f73d..00000000 --- a/src/profound/types/organizations/category_tags_response.py +++ /dev/null @@ -1,17 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List -from typing_extensions import TypeAlias - -from ..._models import BaseModel - -__all__ = ["CategoryTagsResponse", "CategoryTagsResponseItem"] - - -class CategoryTagsResponseItem(BaseModel): - id: str - - name: str - - -CategoryTagsResponse: TypeAlias = List[CategoryTagsResponseItem] diff --git a/src/profound/types/organizations/category_topics_response.py b/src/profound/types/organizations/category_topics_response.py deleted file mode 100644 index a9fdbe0e..00000000 --- a/src/profound/types/organizations/category_topics_response.py +++ /dev/null @@ -1,19 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List -from typing_extensions import Literal, TypeAlias - -from ..._models import BaseModel - -__all__ = ["CategoryTopicsResponse", "CategoryTopicsResponseItem"] - - -class CategoryTopicsResponseItem(BaseModel): - id: str - - name: str - - status: Literal["active", "disabled"] - - -CategoryTopicsResponse: TypeAlias = List[CategoryTopicsResponseItem] diff --git a/src/profound/types/organizations/category_update_prompts_params.py b/src/profound/types/organizations/category_update_prompts_params.py deleted file mode 100644 index 2db0745b..00000000 --- a/src/profound/types/organizations/category_update_prompts_params.py +++ /dev/null @@ -1,69 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Iterable, Optional -from typing_extensions import Literal, Required, TypedDict - -from .id_or_name_param import IDOrNameParam - -__all__ = ["CategoryUpdatePromptsParams", "Prompt"] - - -class CategoryUpdatePromptsParams(TypedDict, total=False): - prompts: Required[Iterable[Prompt]] - """List of prompt updates. - - Each entry must include an `id` and at least one field to change. - """ - - dry_run: bool - """When true, validate and preview changes without persisting them.""" - - -class Prompt(TypedDict, total=False): - """Fields to update on an existing prompt. - - Only provided fields are changed; omitted fields are left unchanged. - """ - - id: Required[str] - """ID of the prompt to update.""" - - analysis_types: Optional[List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]]] - """New analysis types. Replaces all existing analysis types on the prompt.""" - - asset: Optional[IDOrNameParam] - """Reference by id, name, or both. - - Plain strings work too: UUIDs become id lookups, other strings become name - lookups. - """ - - language: Optional[str] - """New language code. Must be enabled for the organization.""" - - personas: Optional[Iterable[IDOrNameParam]] - """New persona set. Replaces all existing personas.""" - - platforms: Optional[Iterable[IDOrNameParam]] - """New platform set. Replaces all existing platforms.""" - - prompt: Optional[str] - """New prompt text.""" - - prompt_type: Optional[str] - """Deprecated. Use analysis_types instead.""" - - regions: Optional[Iterable[IDOrNameParam]] - """New region set. Replaces all existing regions.""" - - tags: Optional[Iterable[IDOrNameParam]] - """New tag set. Replaces all existing tags on the prompt.""" - - topic: Optional[IDOrNameParam] - """Reference by id, name, or both. - - Plain strings work too: UUIDs become id lookups, other strings become name - lookups. - """ diff --git a/src/profound/types/organizations/id_or_name_param.py b/src/profound/types/organizations/id_or_name_param.py deleted file mode 100644 index b39485d8..00000000 --- a/src/profound/types/organizations/id_or_name_param.py +++ /dev/null @@ -1,22 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import TypedDict - -__all__ = ["IDOrNameParam"] - - -class IDOrNameParam(TypedDict, total=False): - """Reference by id, name, or both. - - Plain strings work too: - UUIDs become id lookups, other strings become name lookups. - """ - - id: Optional[str] - """UUID of the resource.""" - - name: Optional[str] - """Display name of the resource.""" diff --git a/src/profound/types/project_archive_params.py b/src/profound/types/project_archive_params.py deleted file mode 100644 index 2014561a..00000000 --- a/src/profound/types/project_archive_params.py +++ /dev/null @@ -1,15 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import Required, TypedDict - -__all__ = ["ProjectArchiveParams"] - - -class ProjectArchiveParams(TypedDict, total=False): - category_id: Required[str] - """Category that owns the project.""" - - reason: Optional[str] diff --git a/src/profound/types/project_archive_response.py b/src/profound/types/project_archive_response.py deleted file mode 100644 index d21b63cc..00000000 --- a/src/profound/types/project_archive_response.py +++ /dev/null @@ -1,71 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Dict, List, Optional -from datetime import datetime -from typing_extensions import Literal - -from .._models import BaseModel - -__all__ = ["ProjectArchiveResponse", "Data", "DataLiveGeneration"] - - -class DataLiveGeneration(BaseModel): - run_id: str - - status: Literal["queued", "running", "completed", "failed"] - - error: Optional[str] = None - - finished_at: Optional[datetime] = None - - started_at: Optional[datetime] = None - - -class Data(BaseModel): - category_id: str - - project_id: str - - title: str - - created_at: Optional[datetime] = None - - initiated_by_user_id: Optional[str] = None - - latest_version_id: Optional[str] = None - - live_generation: Optional[DataLiveGeneration] = None - - measurement: Optional[Dict[str, object]] = None - - new_task_count: Optional[int] = None - - origin_run_id: Optional[str] = None - - prompts: Optional[List[str]] = None - - retired_at: Optional[datetime] = None - - retired_reason: Optional[str] = None - - source_kind: Optional[Literal["generate", "adhoc"]] = None - - source_prompt: Optional[str] = None - - status: Optional[Literal["suggested", "tracked", "retired"]] = None - - summary: Optional[str] = None - - task_count: Optional[int] = None - - topics: Optional[List[str]] = None - - updated_at: Optional[datetime] = None - - version_count: Optional[int] = None - - why: Optional[str] = None - - -class ProjectArchiveResponse(BaseModel): - data: Data diff --git a/src/profound/types/project_create_params.py b/src/profound/types/project_create_params.py deleted file mode 100644 index 0a694362..00000000 --- a/src/profound/types/project_create_params.py +++ /dev/null @@ -1,97 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Iterable, Optional -from typing_extensions import Literal, Required, Annotated, TypedDict - -from .._types import SequenceNotStr -from .._utils import PropertyInfo - -__all__ = [ - "ProjectCreateParams", - "Attachment", - "GenerationContext", - "GenerationContextDateRange", - "GenerationContextPlatform", - "GenerationContextRegion", - "GenerationContextTag", -] - - -class ProjectCreateParams(TypedDict, total=False): - category_id: Required[str] - - attachments: Iterable[Attachment] - - focus: Optional[str] - - generation_context: Optional[GenerationContext] - - project_name: Optional[str] - - title: Optional[str] - - topics: SequenceNotStr[str] - - -class Attachment(TypedDict, total=False): - id: Required[str] - - data_base64: Required[str] - - mime_type: Required[str] - - name: Required[str] - - size_bytes: Required[int] - - -class GenerationContextDateRange(TypedDict, total=False): - label: Required[str] - - preset: Required[str] - - end_date: Annotated[Optional[str], PropertyInfo(alias="endDate")] - - mode: Optional[Literal["custom", "relative"]] - - start_date: Annotated[Optional[str], PropertyInfo(alias="startDate")] - - -class GenerationContextPlatform(TypedDict, total=False): - id: Required[str] - - name: Required[str] - - slug: Optional[str] - - -class GenerationContextRegion(TypedDict, total=False): - id: Required[str] - - name: Required[str] - - slug: Optional[str] - - -class GenerationContextTag(TypedDict, total=False): - id: Required[str] - - name: Required[str] - - slug: Optional[str] - - -class GenerationContext(TypedDict, total=False): - date_range: Annotated[Optional[GenerationContextDateRange], PropertyInfo(alias="dateRange")] - - platforms: Iterable[GenerationContextPlatform] - - project_categories: Annotated[ - List[Literal["creative", "earned", "publish", "refresh", "social"]], PropertyInfo(alias="projectCategories") - ] - - regions: Iterable[GenerationContextRegion] - - tags: Iterable[GenerationContextTag] diff --git a/src/profound/types/project_create_response.py b/src/profound/types/project_create_response.py deleted file mode 100644 index 6840b911..00000000 --- a/src/profound/types/project_create_response.py +++ /dev/null @@ -1,20 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Optional -from typing_extensions import Literal - -from .._models import BaseModel - -__all__ = ["ProjectCreateResponse", "Data"] - - -class Data(BaseModel): - project_id: str - - run_id: str - - status: Optional[Literal["queued", "running"]] = None - - -class ProjectCreateResponse(BaseModel): - data: Data diff --git a/src/profound/types/project_delete_params.py b/src/profound/types/project_delete_params.py deleted file mode 100644 index e5cea4ba..00000000 --- a/src/profound/types/project_delete_params.py +++ /dev/null @@ -1,12 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing_extensions import Required, TypedDict - -__all__ = ["ProjectDeleteParams"] - - -class ProjectDeleteParams(TypedDict, total=False): - category_id: Required[str] - """Category that owns the project.""" diff --git a/src/profound/types/project_get_status_params.py b/src/profound/types/project_get_status_params.py deleted file mode 100644 index 65dd5935..00000000 --- a/src/profound/types/project_get_status_params.py +++ /dev/null @@ -1,12 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing_extensions import Required, TypedDict - -__all__ = ["ProjectGetStatusParams"] - - -class ProjectGetStatusParams(TypedDict, total=False): - category_id: Required[str] - """Category that owns the project.""" diff --git a/src/profound/types/project_get_status_response.py b/src/profound/types/project_get_status_response.py deleted file mode 100644 index 884304de..00000000 --- a/src/profound/types/project_get_status_response.py +++ /dev/null @@ -1,37 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Optional -from datetime import datetime -from typing_extensions import Literal - -from .._models import BaseModel - -__all__ = ["ProjectGetStatusResponse", "Data", "DataLiveGeneration"] - - -class DataLiveGeneration(BaseModel): - run_id: str - - status: Literal["queued", "running", "completed", "failed"] - - error: Optional[str] = None - - finished_at: Optional[datetime] = None - - started_at: Optional[datetime] = None - - -class Data(BaseModel): - category_id: str - - project_id: str - - status: Literal["suggested", "tracked", "retired"] - - live_generation: Optional[DataLiveGeneration] = None - - updated_at: Optional[datetime] = None - - -class ProjectGetStatusResponse(BaseModel): - data: Data diff --git a/src/profound/types/project_list_params.py b/src/profound/types/project_list_params.py deleted file mode 100644 index 6f786b75..00000000 --- a/src/profound/types/project_list_params.py +++ /dev/null @@ -1,20 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import Required, TypedDict - -__all__ = ["ProjectListParams"] - - -class ProjectListParams(TypedDict, total=False): - category_id: Required[str] - """Category that owns the project.""" - - limit: int - - offset: int - - status: Optional[str] - """Comma-separated project statuses: suggested, tracked, retired.""" diff --git a/src/profound/types/project_list_response.py b/src/profound/types/project_list_response.py deleted file mode 100644 index 0e8603a3..00000000 --- a/src/profound/types/project_list_response.py +++ /dev/null @@ -1,59 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Optional -from datetime import datetime -from typing_extensions import Literal - -from .._models import BaseModel -from .shared.pagination import Pagination - -__all__ = ["ProjectListResponse", "Data", "DataLiveGeneration"] - - -class DataLiveGeneration(BaseModel): - run_id: str - - status: Literal["queued", "running", "completed", "failed"] - - error: Optional[str] = None - - finished_at: Optional[datetime] = None - - started_at: Optional[datetime] = None - - -class Data(BaseModel): - category_id: str - - project_id: str - - title: str - - initiated_by_user_id: Optional[str] = None - - live_generation: Optional[DataLiveGeneration] = None - - new_task_count: Optional[int] = None - - retired_at: Optional[datetime] = None - - retired_reason: Optional[str] = None - - status: Optional[Literal["suggested", "tracked", "retired"]] = None - - summary: Optional[str] = None - - task_count: Optional[int] = None - - task_types: Optional[List[str]] = None - - topics: Optional[List[str]] = None - - updated_at: Optional[datetime] = None - - -class ProjectListResponse(BaseModel): - data: List[Data] - - pagination: Optional[Pagination] = None - """Offset-based pagination parameters.""" diff --git a/src/profound/types/project_retrieve_params.py b/src/profound/types/project_retrieve_params.py deleted file mode 100644 index 25e283bd..00000000 --- a/src/profound/types/project_retrieve_params.py +++ /dev/null @@ -1,12 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing_extensions import Required, TypedDict - -__all__ = ["ProjectRetrieveParams"] - - -class ProjectRetrieveParams(TypedDict, total=False): - category_id: Required[str] - """Category that owns the project.""" diff --git a/src/profound/types/project_retrieve_response.py b/src/profound/types/project_retrieve_response.py deleted file mode 100644 index 64379409..00000000 --- a/src/profound/types/project_retrieve_response.py +++ /dev/null @@ -1,105 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Dict, List, Optional -from datetime import datetime -from typing_extensions import Literal - -from .._models import BaseModel - -__all__ = ["ProjectRetrieveResponse", "Data", "DataLiveGeneration", "DataTask"] - - -class DataLiveGeneration(BaseModel): - run_id: str - - status: Literal["queued", "running", "completed", "failed"] - - error: Optional[str] = None - - finished_at: Optional[datetime] = None - - started_at: Optional[datetime] = None - - -class DataTask(BaseModel): - category_id: str - - project_id: str - - task_id: str - - title: str - - brief: Optional[str] = None - - created_at: Optional[datetime] = None - - impact: Optional[int] = None - - is_new: Optional[bool] = None - - reference_label: Optional[str] = None - - reference_url: Optional[str] = None - - status: Optional[Literal["not_started", "in_progress", "done", "abandoned"]] = None - - status_changed_at: Optional[datetime] = None - - summary: Optional[str] = None - - topic: Optional[str] = None - - type: Optional[str] = None - - -class Data(BaseModel): - category_id: str - - project_id: str - - title: str - - created_at: Optional[datetime] = None - - initiated_by_user_id: Optional[str] = None - - latest_version_id: Optional[str] = None - - live_generation: Optional[DataLiveGeneration] = None - - measurement: Optional[Dict[str, object]] = None - - new_task_count: Optional[int] = None - - origin_run_id: Optional[str] = None - - prompts: Optional[List[str]] = None - - retired_at: Optional[datetime] = None - - retired_reason: Optional[str] = None - - source_kind: Optional[Literal["generate", "adhoc"]] = None - - source_prompt: Optional[str] = None - - status: Optional[Literal["suggested", "tracked", "retired"]] = None - - summary: Optional[str] = None - - task_count: Optional[int] = None - - tasks: Optional[List[DataTask]] = None - - topics: Optional[List[str]] = None - - updated_at: Optional[datetime] = None - - version_count: Optional[int] = None - - why: Optional[str] = None - - -class ProjectRetrieveResponse(BaseModel): - data: Data diff --git a/src/profound/types/project_unarchive_params.py b/src/profound/types/project_unarchive_params.py deleted file mode 100644 index 5e62c428..00000000 --- a/src/profound/types/project_unarchive_params.py +++ /dev/null @@ -1,12 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing_extensions import Required, TypedDict - -__all__ = ["ProjectUnarchiveParams"] - - -class ProjectUnarchiveParams(TypedDict, total=False): - category_id: Required[str] - """Category that owns the project.""" diff --git a/src/profound/types/project_unarchive_response.py b/src/profound/types/project_unarchive_response.py deleted file mode 100644 index 6160639c..00000000 --- a/src/profound/types/project_unarchive_response.py +++ /dev/null @@ -1,71 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Dict, List, Optional -from datetime import datetime -from typing_extensions import Literal - -from .._models import BaseModel - -__all__ = ["ProjectUnarchiveResponse", "Data", "DataLiveGeneration"] - - -class DataLiveGeneration(BaseModel): - run_id: str - - status: Literal["queued", "running", "completed", "failed"] - - error: Optional[str] = None - - finished_at: Optional[datetime] = None - - started_at: Optional[datetime] = None - - -class Data(BaseModel): - category_id: str - - project_id: str - - title: str - - created_at: Optional[datetime] = None - - initiated_by_user_id: Optional[str] = None - - latest_version_id: Optional[str] = None - - live_generation: Optional[DataLiveGeneration] = None - - measurement: Optional[Dict[str, object]] = None - - new_task_count: Optional[int] = None - - origin_run_id: Optional[str] = None - - prompts: Optional[List[str]] = None - - retired_at: Optional[datetime] = None - - retired_reason: Optional[str] = None - - source_kind: Optional[Literal["generate", "adhoc"]] = None - - source_prompt: Optional[str] = None - - status: Optional[Literal["suggested", "tracked", "retired"]] = None - - summary: Optional[str] = None - - task_count: Optional[int] = None - - topics: Optional[List[str]] = None - - updated_at: Optional[datetime] = None - - version_count: Optional[int] = None - - why: Optional[str] = None - - -class ProjectUnarchiveResponse(BaseModel): - data: Data diff --git a/src/profound/types/projects/__init__.py b/src/profound/types/projects/__init__.py deleted file mode 100644 index f1647dfc..00000000 --- a/src/profound/types/projects/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from .task_list_params import TaskListParams as TaskListParams -from .task_create_params import TaskCreateParams as TaskCreateParams -from .task_delete_params import TaskDeleteParams as TaskDeleteParams -from .task_list_response import TaskListResponse as TaskListResponse -from .task_update_params import TaskUpdateParams as TaskUpdateParams -from .task_create_response import TaskCreateResponse as TaskCreateResponse -from .task_retrieve_params import TaskRetrieveParams as TaskRetrieveParams -from .task_update_response import TaskUpdateResponse as TaskUpdateResponse -from .generation_list_params import GenerationListParams as GenerationListParams -from .task_retrieve_response import TaskRetrieveResponse as TaskRetrieveResponse -from .generation_list_response import GenerationListResponse as GenerationListResponse -from .task_update_status_params import TaskUpdateStatusParams as TaskUpdateStatusParams -from .generation_retrieve_params import GenerationRetrieveParams as GenerationRetrieveParams -from .task_update_status_response import TaskUpdateStatusResponse as TaskUpdateStatusResponse -from .generation_retrieve_response import GenerationRetrieveResponse as GenerationRetrieveResponse diff --git a/src/profound/types/projects/generation_list_params.py b/src/profound/types/projects/generation_list_params.py deleted file mode 100644 index df73c0bb..00000000 --- a/src/profound/types/projects/generation_list_params.py +++ /dev/null @@ -1,20 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import Required, TypedDict - -__all__ = ["GenerationListParams"] - - -class GenerationListParams(TypedDict, total=False): - category_id: Required[str] - """Category that owns the project.""" - - limit: int - - offset: int - - status: Optional[str] - """Comma-separated generation statuses: queued, running, completed, failed.""" diff --git a/src/profound/types/projects/generation_list_response.py b/src/profound/types/projects/generation_list_response.py deleted file mode 100644 index 54aa01d3..00000000 --- a/src/profound/types/projects/generation_list_response.py +++ /dev/null @@ -1,35 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Optional -from datetime import datetime -from typing_extensions import Literal - -from ..._models import BaseModel -from ..shared.pagination import Pagination - -__all__ = ["GenerationListResponse", "Data"] - - -class Data(BaseModel): - category_id: str - - mode: Literal["generate", "adhoc"] - - run_id: str - - status: Literal["queued", "running", "completed", "failed"] - - error: Optional[str] = None - - finished_at: Optional[datetime] = None - - focus_prompt: Optional[str] = None - - started_at: Optional[datetime] = None - - -class GenerationListResponse(BaseModel): - data: List[Data] - - pagination: Optional[Pagination] = None - """Offset-based pagination parameters.""" diff --git a/src/profound/types/projects/generation_retrieve_params.py b/src/profound/types/projects/generation_retrieve_params.py deleted file mode 100644 index 09af77d6..00000000 --- a/src/profound/types/projects/generation_retrieve_params.py +++ /dev/null @@ -1,12 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing_extensions import Required, TypedDict - -__all__ = ["GenerationRetrieveParams"] - - -class GenerationRetrieveParams(TypedDict, total=False): - category_id: Required[str] - """Category that owns the project.""" diff --git a/src/profound/types/projects/generation_retrieve_response.py b/src/profound/types/projects/generation_retrieve_response.py deleted file mode 100644 index 4cd78766..00000000 --- a/src/profound/types/projects/generation_retrieve_response.py +++ /dev/null @@ -1,31 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Optional -from datetime import datetime -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["GenerationRetrieveResponse", "Data"] - - -class Data(BaseModel): - category_id: str - - mode: Literal["generate", "adhoc"] - - run_id: str - - status: Literal["queued", "running", "completed", "failed"] - - error: Optional[str] = None - - finished_at: Optional[datetime] = None - - focus_prompt: Optional[str] = None - - started_at: Optional[datetime] = None - - -class GenerationRetrieveResponse(BaseModel): - data: Data diff --git a/src/profound/types/projects/task_create_params.py b/src/profound/types/projects/task_create_params.py deleted file mode 100644 index dc565e34..00000000 --- a/src/profound/types/projects/task_create_params.py +++ /dev/null @@ -1,31 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import Required, TypedDict - -__all__ = ["TaskCreateParams"] - - -class TaskCreateParams(TypedDict, total=False): - category_id: Required[str] - """Category that owns the project.""" - - title: Required[str] - - brief: Optional[str] - - impact: Optional[int] - - position: Optional[int] - - reference_label: Optional[str] - - reference_url: Optional[str] - - summary: Optional[str] - - topic: Optional[str] - - type: Optional[str] diff --git a/src/profound/types/projects/task_create_response.py b/src/profound/types/projects/task_create_response.py deleted file mode 100644 index c88e003e..00000000 --- a/src/profound/types/projects/task_create_response.py +++ /dev/null @@ -1,45 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Optional -from datetime import datetime -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["TaskCreateResponse", "Data"] - - -class Data(BaseModel): - category_id: str - - project_id: str - - task_id: str - - title: str - - brief: Optional[str] = None - - created_at: Optional[datetime] = None - - impact: Optional[int] = None - - is_new: Optional[bool] = None - - reference_label: Optional[str] = None - - reference_url: Optional[str] = None - - status: Optional[Literal["not_started", "in_progress", "done", "abandoned"]] = None - - status_changed_at: Optional[datetime] = None - - summary: Optional[str] = None - - topic: Optional[str] = None - - type: Optional[str] = None - - -class TaskCreateResponse(BaseModel): - data: Data diff --git a/src/profound/types/projects/task_delete_params.py b/src/profound/types/projects/task_delete_params.py deleted file mode 100644 index 5a3af70b..00000000 --- a/src/profound/types/projects/task_delete_params.py +++ /dev/null @@ -1,15 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing_extensions import Required, TypedDict - -__all__ = ["TaskDeleteParams"] - - -class TaskDeleteParams(TypedDict, total=False): - project_id: Required[str] - """Unique project ID.""" - - category_id: Required[str] - """Category that owns the project.""" diff --git a/src/profound/types/projects/task_list_params.py b/src/profound/types/projects/task_list_params.py deleted file mode 100644 index 8624f54b..00000000 --- a/src/profound/types/projects/task_list_params.py +++ /dev/null @@ -1,12 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing_extensions import Required, TypedDict - -__all__ = ["TaskListParams"] - - -class TaskListParams(TypedDict, total=False): - category_id: Required[str] - """Category that owns the project.""" diff --git a/src/profound/types/projects/task_list_response.py b/src/profound/types/projects/task_list_response.py deleted file mode 100644 index 076245e4..00000000 --- a/src/profound/types/projects/task_list_response.py +++ /dev/null @@ -1,49 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Optional -from datetime import datetime -from typing_extensions import Literal - -from ..._models import BaseModel -from ..shared.pagination import Pagination - -__all__ = ["TaskListResponse", "Data"] - - -class Data(BaseModel): - category_id: str - - project_id: str - - task_id: str - - title: str - - brief: Optional[str] = None - - created_at: Optional[datetime] = None - - impact: Optional[int] = None - - is_new: Optional[bool] = None - - reference_label: Optional[str] = None - - reference_url: Optional[str] = None - - status: Optional[Literal["not_started", "in_progress", "done", "abandoned"]] = None - - status_changed_at: Optional[datetime] = None - - summary: Optional[str] = None - - topic: Optional[str] = None - - type: Optional[str] = None - - -class TaskListResponse(BaseModel): - data: List[Data] - - pagination: Optional[Pagination] = None - """Offset-based pagination parameters.""" diff --git a/src/profound/types/projects/task_retrieve_params.py b/src/profound/types/projects/task_retrieve_params.py deleted file mode 100644 index eff0a15b..00000000 --- a/src/profound/types/projects/task_retrieve_params.py +++ /dev/null @@ -1,15 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing_extensions import Required, TypedDict - -__all__ = ["TaskRetrieveParams"] - - -class TaskRetrieveParams(TypedDict, total=False): - project_id: Required[str] - """Unique project ID.""" - - category_id: Required[str] - """Category that owns the project.""" diff --git a/src/profound/types/projects/task_retrieve_response.py b/src/profound/types/projects/task_retrieve_response.py deleted file mode 100644 index 0658116d..00000000 --- a/src/profound/types/projects/task_retrieve_response.py +++ /dev/null @@ -1,47 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Optional -from datetime import datetime -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["TaskRetrieveResponse", "Data"] - - -class Data(BaseModel): - category_id: str - - project_id: str - - task_id: str - - title: str - - brief: Optional[str] = None - - created_at: Optional[datetime] = None - - impact: Optional[int] = None - - is_new: Optional[bool] = None - - project_title: Optional[str] = None - - reference_label: Optional[str] = None - - reference_url: Optional[str] = None - - status: Optional[Literal["not_started", "in_progress", "done", "abandoned"]] = None - - status_changed_at: Optional[datetime] = None - - summary: Optional[str] = None - - topic: Optional[str] = None - - type: Optional[str] = None - - -class TaskRetrieveResponse(BaseModel): - data: Data diff --git a/src/profound/types/projects/task_update_params.py b/src/profound/types/projects/task_update_params.py deleted file mode 100644 index b4b17004..00000000 --- a/src/profound/types/projects/task_update_params.py +++ /dev/null @@ -1,32 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import Required, TypedDict - -__all__ = ["TaskUpdateParams"] - - -class TaskUpdateParams(TypedDict, total=False): - project_id: Required[str] - """Unique project ID.""" - - category_id: Required[str] - """Category that owns the project.""" - - brief: Optional[str] - - impact: Optional[int] - - reference_label: Optional[str] - - reference_url: Optional[str] - - summary: Optional[str] - - title: Optional[str] - - topic: Optional[str] - - type: Optional[str] diff --git a/src/profound/types/projects/task_update_response.py b/src/profound/types/projects/task_update_response.py deleted file mode 100644 index 0acd0cfa..00000000 --- a/src/profound/types/projects/task_update_response.py +++ /dev/null @@ -1,45 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Optional -from datetime import datetime -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["TaskUpdateResponse", "Data"] - - -class Data(BaseModel): - category_id: str - - project_id: str - - task_id: str - - title: str - - brief: Optional[str] = None - - created_at: Optional[datetime] = None - - impact: Optional[int] = None - - is_new: Optional[bool] = None - - reference_label: Optional[str] = None - - reference_url: Optional[str] = None - - status: Optional[Literal["not_started", "in_progress", "done", "abandoned"]] = None - - status_changed_at: Optional[datetime] = None - - summary: Optional[str] = None - - topic: Optional[str] = None - - type: Optional[str] = None - - -class TaskUpdateResponse(BaseModel): - data: Data diff --git a/src/profound/types/projects/task_update_status_params.py b/src/profound/types/projects/task_update_status_params.py deleted file mode 100644 index c8948ed5..00000000 --- a/src/profound/types/projects/task_update_status_params.py +++ /dev/null @@ -1,20 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import Literal, Required, TypedDict - -__all__ = ["TaskUpdateStatusParams"] - - -class TaskUpdateStatusParams(TypedDict, total=False): - project_id: Required[str] - """Unique project ID.""" - - category_id: Required[str] - """Category that owns the project.""" - - status: Required[Literal["not_started", "in_progress", "done", "abandoned"]] - - note: Optional[str] diff --git a/src/profound/types/projects/task_update_status_response.py b/src/profound/types/projects/task_update_status_response.py deleted file mode 100644 index f9c57e94..00000000 --- a/src/profound/types/projects/task_update_status_response.py +++ /dev/null @@ -1,27 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Optional -from datetime import datetime -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["TaskUpdateStatusResponse", "Data"] - - -class Data(BaseModel): - changed_at: datetime - - project_id: str - - status: Literal["not_started", "in_progress", "done", "abandoned"] - - task_id: str - - changed_by: Optional[str] = None - - note: Optional[str] = None - - -class TaskUpdateStatusResponse(BaseModel): - data: Data diff --git a/src/profound/types/prompt_answers_params.py b/src/profound/types/prompt_answers_params.py deleted file mode 100644 index 28fad599..00000000 --- a/src/profound/types/prompt_answers_params.py +++ /dev/null @@ -1,128 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Union, Iterable -from datetime import datetime -from typing_extensions import Literal, Required, Annotated, TypeAlias, TypedDict - -from .._types import SequenceNotStr -from .._utils import PropertyInfo -from .shared_params.pagination import Pagination -from .shared_params.prompt_filter import PromptFilter -from .shared_params.tag_id_filter import TagIDFilter -from .shared_params.asset_id_filter import AssetIDFilter -from .shared_params.model_id_filter import ModelIDFilter -from .shared_params.topic_id_filter import TopicIDFilter -from .shared_params.region_id_filter import RegionIDFilter -from .shared_params.persona_id_filter import PersonaIDFilter -from .shared_params.prompt_type_filter import PromptTypeFilter -from .shared_params.region_name_filter import RegionNameFilter -from .shared_params.analysis_type_filter import AnalysisTypeFilter - -__all__ = ["PromptAnswersParams", "Filter", "FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter", "Include"] - - -class PromptAnswersParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] - - start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] - - filters: Iterable[Filter] - """List of filters to apply to the answers report.""" - - include: Include - - pagination: Pagination - """Pagination parameters for the results. Default is 10,000 rows with no offset.""" - - -class FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter(TypedDict, total=False): - """Filter by asset name""" - - field: Required[Literal["asset_name"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[Union[str, SequenceNotStr[str]]] - - -Filter: TypeAlias = Union[ - RegionIDFilter, - RegionNameFilter, - ModelIDFilter, - TagIDFilter, - AnalysisTypeFilter, - PromptTypeFilter, - PromptFilter, - PersonaIDFilter, - TopicIDFilter, - AssetIDFilter, - FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter, -] - - -class Include(TypedDict, total=False): - analysis_types: bool - - asset: bool - - asset_id: bool - - citation_details: bool - - citations: bool - - created_at: bool - - mentions: bool - - model: bool - - model_id: bool - - persona: bool - - prompt: bool - - prompt_id: bool - - prompt_type: bool - - region: bool - - response: bool - - run_id: bool - - search_queries: bool - - search_triggered: bool - - sentiment_themes: bool - """Uses legacy sentiment data.""" - - tags: bool - - themes: bool - """Use 'sentiment_themes' instead""" - - topic: bool - - topic_id: bool - - web_search_results: bool diff --git a/src/profound/types/prompt_answers_v2_params.py b/src/profound/types/prompt_answers_v2_params.py deleted file mode 100644 index a1712c52..00000000 --- a/src/profound/types/prompt_answers_v2_params.py +++ /dev/null @@ -1,81 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Iterable, Optional -from typing_extensions import Literal, Required, TypedDict - -__all__ = ["PromptAnswersV2Params", "Filter"] - - -class PromptAnswersV2Params(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - cursor: Optional[str] - - filter: Optional[Filter] - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - include: Optional[ - List[ - Literal[ - "run_id", - "date", - "model", - "topic", - "topic_id", - "persona", - "region", - "tags", - "prompt", - "prompt_id", - "response", - "mentions", - "citations", - "citation_details", - "search_queries", - "analysis_types", - "sentiment_claims", - ] - ] - ] - """ - Which row fields to return: `run_id`, `date`, `model`, `topic`, `topic_id`, - `region`, `persona`, `tags`, `prompt`, `prompt_id`, `response`, `mentions`, - `citations`, `citation_details`, `search_queries`, `analysis_types`, - `sentiment_claims`. Omit for all fields except `citation_details`, which must be - requested explicitly because it is expensive. - """ - - limit: Optional[int] - """Page size; default 10, max 200.""" - - max_results: Optional[int] - """Stream endpoint only: cap the number of streamed rows (default: all).""" - - -_FilterReservedKeywords = TypedDict( - "_FilterReservedKeywords", - { - "and": Optional[Iterable[object]], - "not": object, - "or": Optional[Iterable[object]], - }, - total=False, -) - - -class Filter(_FilterReservedKeywords, total=False): - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - field: Optional[str] - - op: Optional[str] - - value: object diff --git a/src/profound/types/prompt_answers_v2_response.py b/src/profound/types/prompt_answers_v2_response.py deleted file mode 100644 index 0b8bdda2..00000000 --- a/src/profound/types/prompt_answers_v2_response.py +++ /dev/null @@ -1,149 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import TYPE_CHECKING, Dict, List, Optional - -from pydantic import Field as FieldInfo - -from .._models import BaseModel - -__all__ = ["PromptAnswersV2Response", "Data", "DataCitationDetail", "DataCitationDetailGroup", "DataModel", "Info"] - - -class DataCitationDetailGroup(BaseModel): - group_id: int - - group_position: int - - -class DataCitationDetail(BaseModel): - clean_url: str - - hostname: str - - path: str - - title: str - - url: str - - citation_category: Optional[str] = None - - first_cited_at: Optional[str] = None - - groups: Optional[List[DataCitationDetailGroup]] = None - - positions: Optional[List[int]] = None - - text: Optional[str] = None - - -class DataModel(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class Data(BaseModel): - """One answer row. - - Present fields depend on `include`; `model` is an `{id, name}` reference. - """ - - analysis_types: Optional[List[str]] = None - - citation_details: Optional[List[DataCitationDetail]] = None - """Citation metadata. - - `positions` identify citation locations in the answer text. Each `groups` entry - represents a rendered citation pill; `group_position` is the source's position - within that pill. - """ - - citations: Optional[List[str]] = None - - date: Optional[str] = None - - mentions: Optional[List[str]] = None - - model: Optional[DataModel] = None - """An `{id, name}` reference for a grouped dimension value.""" - - persona: Optional[str] = None - - prompt: Optional[str] = None - - prompt_id: Optional[str] = None - - region: Optional[str] = None - - response: Optional[str] = None - - run_id: Optional[str] = None - - search_queries: Optional[List[str]] = None - - sentiment_claims: Optional[List[Dict[str, object]]] = None - - tags: Optional[List[str]] = None - - topic: Optional[str] = None - - topic_id: Optional[str] = None - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class Info(BaseModel): - count: int - """Number of rows returned in `data` for this page.""" - - end_date: str - """Echoed request end date (YYYY-MM-DD, ET).""" - - include: List[str] - """Row fields returned (echoes `include`, or all fields when omitted).""" - - models: List[str] - """Display names of the models the report covers.""" - - start_date: str - """Echoed request start date (YYYY-MM-DD, ET).""" - - filter: Optional[Dict[str, object]] = None - """Echoed normalized filter tree, or null when no filter was sent.""" - - next_cursor: Optional[str] = None - """Opaque cursor for the next page; null on the last page.""" - - total_results: Optional[int] = None - """Total rows matching the query before pagination (null when not computed).""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class PromptAnswersV2Response(BaseModel): - data: List[Data] - - info: Info diff --git a/src/profound/types/prompt_id_filter_param.py b/src/profound/types/prompt_id_filter_param.py deleted file mode 100644 index 54049926..00000000 --- a/src/profound/types/prompt_id_filter_param.py +++ /dev/null @@ -1,20 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Union -from typing_extensions import Literal, Required, TypedDict - -from .._types import SequenceNotStr - -__all__ = ["PromptIDFilterParam"] - - -class PromptIDFilterParam(TypedDict, total=False): - """Filter by prompt UUID.""" - - field: Required[Literal["prompt_id"]] - - operator: Required[Literal["is", "not_is", "in", "not_in"]] - - value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/prompt_stream_answers_v2_params.py b/src/profound/types/prompt_stream_answers_v2_params.py deleted file mode 100644 index 7c568deb..00000000 --- a/src/profound/types/prompt_stream_answers_v2_params.py +++ /dev/null @@ -1,81 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Iterable, Optional -from typing_extensions import Literal, Required, TypedDict - -__all__ = ["PromptStreamAnswersV2Params", "Filter"] - - -class PromptStreamAnswersV2Params(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - cursor: Optional[str] - - filter: Optional[Filter] - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - include: Optional[ - List[ - Literal[ - "run_id", - "date", - "model", - "topic", - "topic_id", - "persona", - "region", - "tags", - "prompt", - "prompt_id", - "response", - "mentions", - "citations", - "citation_details", - "search_queries", - "analysis_types", - "sentiment_claims", - ] - ] - ] - """ - Which row fields to return: `run_id`, `date`, `model`, `topic`, `topic_id`, - `region`, `persona`, `tags`, `prompt`, `prompt_id`, `response`, `mentions`, - `citations`, `citation_details`, `search_queries`, `analysis_types`, - `sentiment_claims`. Omit for all fields except `citation_details`, which must be - requested explicitly because it is expensive. - """ - - limit: Optional[int] - """Page size; default 10, max 200.""" - - max_results: Optional[int] - """Stream endpoint only: cap the number of streamed rows (default: all).""" - - -_FilterReservedKeywords = TypedDict( - "_FilterReservedKeywords", - { - "and": Optional[Iterable[object]], - "not": object, - "or": Optional[Iterable[object]], - }, - total=False, -) - - -class Filter(_FilterReservedKeywords, total=False): - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - field: Optional[str] - - op: Optional[str] - - value: object diff --git a/src/profound/types/prompt_stream_answers_v2_response.py b/src/profound/types/prompt_stream_answers_v2_response.py deleted file mode 100644 index 17565563..00000000 --- a/src/profound/types/prompt_stream_answers_v2_response.py +++ /dev/null @@ -1,153 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import TYPE_CHECKING, Dict, List, Union, Optional -from typing_extensions import TypeAlias - -from pydantic import Field as FieldInfo - -from .._models import BaseModel - -__all__ = [ - "PromptStreamAnswersV2Response", - "AnswersV2Info", - "AnswerRow", - "AnswerRowCitationDetail", - "AnswerRowCitationDetailGroup", - "AnswerRowModel", -] - - -class AnswersV2Info(BaseModel): - """`summary` event payload (the report `info` block).""" - - count: int - """Number of rows returned in `data` for this page.""" - - end_date: str - """Echoed request end date (YYYY-MM-DD, ET).""" - - include: List[str] - """Row fields returned (echoes `include`, or all fields when omitted).""" - - models: List[str] - """Display names of the models the report covers.""" - - start_date: str - """Echoed request start date (YYYY-MM-DD, ET).""" - - filter: Optional[Dict[str, object]] = None - """Echoed normalized filter tree, or null when no filter was sent.""" - - next_cursor: Optional[str] = None - """Opaque cursor for the next page; null on the last page.""" - - total_results: Optional[int] = None - """Total rows matching the query before pagination (null when not computed).""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class AnswerRowCitationDetailGroup(BaseModel): - group_id: int - - group_position: int - - -class AnswerRowCitationDetail(BaseModel): - clean_url: str - - hostname: str - - path: str - - title: str - - url: str - - citation_category: Optional[str] = None - - first_cited_at: Optional[str] = None - - groups: Optional[List[AnswerRowCitationDetailGroup]] = None - - positions: Optional[List[int]] = None - - text: Optional[str] = None - - -class AnswerRowModel(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class AnswerRow(BaseModel): - """`result` event payload — one answer row.""" - - analysis_types: Optional[List[str]] = None - - citation_details: Optional[List[AnswerRowCitationDetail]] = None - """Citation metadata. - - `positions` identify citation locations in the answer text. Each `groups` entry - represents a rendered citation pill; `group_position` is the source's position - within that pill. - """ - - citations: Optional[List[str]] = None - - date: Optional[str] = None - - mentions: Optional[List[str]] = None - - model: Optional[AnswerRowModel] = None - """An `{id, name}` reference for a grouped dimension value.""" - - persona: Optional[str] = None - - prompt: Optional[str] = None - - prompt_id: Optional[str] = None - - region: Optional[str] = None - - response: Optional[str] = None - - run_id: Optional[str] = None - - search_queries: Optional[List[str]] = None - - sentiment_claims: Optional[List[Dict[str, object]]] = None - - tags: Optional[List[str]] = None - - topic: Optional[str] = None - - topic_id: Optional[str] = None - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -PromptStreamAnswersV2Response: TypeAlias = Union[AnswersV2Info, AnswerRow] diff --git a/src/profound/types/report_citations_params.py b/src/profound/types/report_citations_params.py deleted file mode 100644 index 3f8e9cf8..00000000 --- a/src/profound/types/report_citations_params.py +++ /dev/null @@ -1,144 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Dict, List, Union, Iterable -from datetime import datetime -from typing_extensions import Literal, Required, Annotated, TypeAlias, TypedDict - -from .._types import SequenceNotStr -from .._utils import PropertyInfo -from .url_filter_param import URLFilterParam -from .hostname_filter_param import HostnameFilterParam -from .tag_name_filter_param import TagNameFilterParam -from .prompt_id_filter_param import PromptIDFilterParam -from .topic_name_filter_param import TopicNameFilterParam -from .root_domain_filter_param import RootDomainFilterParam -from .shared_params.pagination import Pagination -from .shared_params.path_filter import PathFilter -from .shared_params.prompt_filter import PromptFilter -from .shared_params.tag_id_filter import TagIDFilter -from .shared_params.model_id_filter import ModelIDFilter -from .shared_params.topic_id_filter import TopicIDFilter -from .shared_params.region_id_filter import RegionIDFilter -from .shared_params.persona_id_filter import PersonaIDFilter -from .shared_params.prompt_type_filter import PromptTypeFilter -from .shared_params.region_name_filter import RegionNameFilter -from .shared_params.analysis_type_filter import AnalysisTypeFilter - -__all__ = ["ReportCitationsParams", "Filter", "FilterCitationCategoryFilter", "FilterMentionedFilter"] - - -class ReportCitationsParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] - """End date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - """ - - metrics: Required[List[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]]] - """Metrics to include. - - `share_of_voice` is deprecated, use `citation_share` instead. - """ - - start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] - """Start date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - """ - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - """Date interval for the report. (only used with date dimension)""" - - dimensions: List[ - Literal[ - "hostname", - "path", - "date", - "region", - "topic", - "topic_id", - "model", - "tag", - "prompt", - "prompt_id", - "url", - "root_domain", - "persona", - "citation_category", - ] - ] - """Dimensions to group the report by.""" - - filters: Iterable[Filter] - """List of filters to apply to the citations report.""" - - order_by: Dict[str, Literal["asc", "desc"]] - """Custom ordering of the report results. - - The order is a record of key-value pairs where: - - `key` is the field to order by, which can be a metric or dimension - - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. - - When not specified, the default order is the first metric in the query descending. - """ - - pagination: Pagination - """Pagination settings for the report results.""" - - -class FilterCitationCategoryFilter(TypedDict, total=False): - """Filter by citation category""" - - field: Required[Literal["citation_category"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[Union[str, SequenceNotStr[str]]] - - -class FilterMentionedFilter(TypedDict, total=False): - """Filter citation pages by whether they mention an owned category asset.""" - - field: Required[Literal["mentioned"]] - - operator: Required[Literal["is"]] - - value: Required[Union[bool, Iterable[bool]]] - - -Filter: TypeAlias = Union[ - HostnameFilterParam, - PathFilter, - RegionIDFilter, - RegionNameFilter, - TopicIDFilter, - TopicNameFilterParam, - ModelIDFilter, - TagIDFilter, - TagNameFilterParam, - URLFilterParam, - RootDomainFilterParam, - AnalysisTypeFilter, - PromptTypeFilter, - PersonaIDFilter, - FilterCitationCategoryFilter, - PromptFilter, - PromptIDFilterParam, - FilterMentionedFilter, -] diff --git a/src/profound/types/report_citations_response.py b/src/profound/types/report_citations_response.py deleted file mode 100644 index f0ec4432..00000000 --- a/src/profound/types/report_citations_response.py +++ /dev/null @@ -1,21 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Union - -from .._models import BaseModel -from .report_info import ReportInfo - -__all__ = ["ReportCitationsResponse", "Data"] - - -class Data(BaseModel): - dimensions: List[str] - - metrics: List[Union[float, str, None]] - - -class ReportCitationsResponse(BaseModel): - data: List[Data] - - info: ReportInfo - """Base model for report information.""" diff --git a/src/profound/types/report_get_bots_report_params.py b/src/profound/types/report_get_bots_report_params.py deleted file mode 100644 index d446f13a..00000000 --- a/src/profound/types/report_get_bots_report_params.py +++ /dev/null @@ -1,76 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Dict, List, Union, Iterable, Optional -from datetime import datetime -from typing_extensions import Literal, Required, Annotated, TypeAlias, TypedDict - -from .._utils import PropertyInfo -from .shared_params.pagination import Pagination -from .shared_params.path_filter import PathFilter -from .shared_params.bot_name_filter import BotNameFilter -from .shared_params.bot_provider_filter import BotProviderFilter - -__all__ = ["ReportGetBotsReportParams", "Filter", "MetricFilter"] - - -class ReportGetBotsReportParams(TypedDict, total=False): - domain: Required[str] - """Domain to query logs for.""" - - metrics: Required[List[Literal["count", "citations", "indexing", "training", "last_visit"]]] - - start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] - """Start date for logs. - - Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO - timestamp. - """ - - date_interval: Literal["hour", "day", "week", "month", "year", "relative_week"] - """Date interval for the report. (only used with date dimension)""" - - dimensions: List[Literal["date", "path", "bot_name", "bot_provider"]] - """Dimensions to group the report by.""" - - end_date: Annotated[Union[str, datetime], PropertyInfo(format="iso8601")] - """End date for logs. - - Accepts same formats as start_date. Defaults to now if omitted. - """ - - filters: Iterable[Filter] - """Filters for bots report.""" - - metric_filters: Iterable[MetricFilter] - """Numeric filters applied after report metrics are calculated.""" - - order_by: Dict[str, Literal["asc", "desc"]] - """Custom ordering of the report results. - - The order is a record of key-value pairs where: - - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for - descending. - - When not specified, the default order is the first metric in the query - descending. - """ - - organization_id: Optional[str] - - pagination: Pagination - """Pagination settings for the report results.""" - - -Filter: TypeAlias = Union[PathFilter, BotNameFilter, BotProviderFilter] - - -class MetricFilter(TypedDict, total=False): - field: Required[str] - - operator: Required[Literal[">", ">=", "<", "<=", "=", "==", "!="]] - - value: Required[float] diff --git a/src/profound/types/report_get_bots_report_v2_params.py b/src/profound/types/report_get_bots_report_v2_params.py deleted file mode 100644 index b7b601a0..00000000 --- a/src/profound/types/report_get_bots_report_v2_params.py +++ /dev/null @@ -1,112 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Dict, List, Union, Iterable, Optional -from datetime import datetime -from typing_extensions import Literal, Required, Annotated, TypeAlias, TypedDict - -from .._types import SequenceNotStr -from .._utils import PropertyInfo -from .shared_params.pagination import Pagination -from .shared_params.path_filter import PathFilter -from .shared_params.bot_name_filter import BotNameFilter -from .shared_params.bot_provider_filter import BotProviderFilter - -__all__ = ["ReportGetBotsReportV2Params", "Filter", "FilterBotTypeFilter", "MetricFilter"] - - -class ReportGetBotsReportV2Params(TypedDict, total=False): - domain: Required[str] - """Domain to query logs for.""" - - metrics: Required[List[Literal["count", "citations", "indexing", "training", "last_visit", "agents"]]] - - start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] - """Start date for logs. - - Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO - timestamp. - """ - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - """Date interval for the report. (only used with date dimension)""" - - dimensions: List[Literal["date", "hour", "path", "bot_name", "bot_provider", "bot_type"]] - """Dimensions to group the report by.""" - - domain_id: Optional[str] - """Domain UUID used for tag lookups.""" - - end_date: Annotated[Union[str, datetime], PropertyInfo(format="iso8601")] - """End date in UTC. - - Accepts same formats as start_date. Defaults to now UTC if omitted. - """ - - filters: Iterable[Filter] - """Filters for bots report.""" - - metric_filters: Iterable[MetricFilter] - """Numeric filters applied after report metrics are calculated.""" - - order_by: Dict[str, Literal["asc", "desc"]] - """Custom ordering of the report results. - - The order is a record of key-value pairs where: - - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for - descending. - - When not specified, the default order is the first metric in the query - descending. - """ - - organization_id: Optional[str] - - pagination: Pagination - """Pagination settings for the report results.""" - - tags: SequenceNotStr[str] - - timezone: str - """IANA timezone name for date bucketing and filter boundaries.""" - - -class FilterBotTypeFilter(TypedDict, total=False): - """Filter by bot_type column (v2 hourly table only)""" - - field: Required[Literal["bot_type"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[ - Union[ - Literal["ai_assistant", "ai_training", "index", "ai_agent"], - List[Literal["ai_assistant", "ai_training", "index", "ai_agent"]], - ] - ] - - -Filter: TypeAlias = Union[PathFilter, BotNameFilter, BotProviderFilter, FilterBotTypeFilter] - - -class MetricFilter(TypedDict, total=False): - field: Required[str] - - operator: Required[Literal[">", ">=", "<", "<=", "=", "==", "!="]] - - value: Required[float] diff --git a/src/profound/types/report_get_referrals_report_params.py b/src/profound/types/report_get_referrals_report_params.py deleted file mode 100644 index fe899e15..00000000 --- a/src/profound/types/report_get_referrals_report_params.py +++ /dev/null @@ -1,101 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Dict, List, Union, Iterable, Optional -from datetime import datetime -from typing_extensions import Literal, Required, Annotated, TypeAlias, TypedDict - -from .._types import SequenceNotStr -from .._utils import PropertyInfo -from .shared_params.pagination import Pagination -from .shared_params.path_filter import PathFilter - -__all__ = ["ReportGetReferralsReportParams", "Filter", "FilterReferralSourceFilter", "MetricFilter"] - - -class ReportGetReferralsReportParams(TypedDict, total=False): - domain: Required[str] - """Domain to query logs for.""" - - metrics: Required[List[Literal["visits", "last_visit"]]] - - start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] - """Start date for logs. - - Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO - timestamp. - """ - - date_interval: Literal["hour", "day", "week", "month", "year", "relative_week"] - """Date interval for the report. (only used with date dimension)""" - - dimensions: List[Literal["date", "path", "referral_source"]] - """Dimensions to group the report by.""" - - end_date: Annotated[Union[str, datetime], PropertyInfo(format="iso8601")] - """End date for logs. - - Accepts same formats as start_date. Defaults to now if omitted. - """ - - filters: Iterable[Filter] - """Filters for referrals report.""" - - metric_filters: Iterable[MetricFilter] - """Numeric filters applied after report metrics are calculated.""" - - order_by: Dict[str, Literal["asc", "desc"]] - """Custom ordering of the report results. - - The order is a record of key-value pairs where: - - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for - descending. - - When not specified, the default order is the first metric in the query - descending. - """ - - organization_id: Optional[str] - - pagination: Pagination - """Pagination settings for the report results.""" - - -class FilterReferralSourceFilter(TypedDict, total=False): - """Filter by referral source. - - Values are not enum-constrained so the platform's shared - provider filter can pass through IDs that have bot data but no referral data. - """ - - field: Required[Literal["referral_source"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[Union[str, SequenceNotStr[str]]] - - -Filter: TypeAlias = Union[PathFilter, FilterReferralSourceFilter] - - -class MetricFilter(TypedDict, total=False): - field: Required[str] - - operator: Required[Literal[">", ">=", "<", "<=", "=", "==", "!="]] - - value: Required[float] diff --git a/src/profound/types/report_get_referrals_report_v2_params.py b/src/profound/types/report_get_referrals_report_v2_params.py deleted file mode 100644 index 6c545e99..00000000 --- a/src/profound/types/report_get_referrals_report_v2_params.py +++ /dev/null @@ -1,134 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Dict, List, Union, Iterable, Optional -from datetime import datetime -from typing_extensions import Literal, Required, Annotated, TypeAlias, TypedDict - -from .._types import SequenceNotStr -from .._utils import PropertyInfo -from .shared_params.pagination import Pagination -from .shared_params.path_filter import PathFilter - -__all__ = [ - "ReportGetReferralsReportV2Params", - "Filter", - "FilterReferralSourceFilter", - "FilterReferralTypeFilter", - "MetricFilter", -] - - -class ReportGetReferralsReportV2Params(TypedDict, total=False): - domain: Required[str] - """Domain to query logs for.""" - - metrics: Required[List[Literal["visits", "last_visit"]]] - - start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] - """Start date for logs. - - Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO - timestamp. - """ - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - """Date interval for the report. (only used with date dimension)""" - - dimensions: List[Literal["date", "hour", "path", "referral_source", "referral_type"]] - """Dimensions to group the report by.""" - - end_date: Annotated[Union[str, datetime], PropertyInfo(format="iso8601")] - """End date in UTC. - - Accepts same formats as start_date. Defaults to now UTC if omitted. - """ - - filters: Iterable[Filter] - """Filters for referrals report.""" - - metric_filters: Iterable[MetricFilter] - """Numeric filters applied after report metrics are calculated.""" - - order_by: Dict[str, Literal["asc", "desc"]] - """Custom ordering of the report results. - - The order is a record of key-value pairs where: - - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for - descending. - - When not specified, the default order is the first metric in the query - descending. - """ - - organization_id: Optional[str] - - pagination: Pagination - """Pagination settings for the report results.""" - - timezone: str - """IANA timezone name for date bucketing and filter boundaries.""" - - -class FilterReferralSourceFilter(TypedDict, total=False): - """Filter by referral source. - - Values are not enum-constrained so the platform's shared - provider filter can pass through IDs that have bot data but no referral data. - """ - - field: Required[Literal["referral_source"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[Union[str, SequenceNotStr[str]]] - - -class FilterReferralTypeFilter(TypedDict, total=False): - """Filter by referral type""" - - field: Required[Literal["referral_type"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[ - Union[Literal["internal", "referer", "utm", "none"], List[Literal["internal", "referer", "utm", "none"]]] - ] - - -Filter: TypeAlias = Union[PathFilter, FilterReferralSourceFilter, FilterReferralTypeFilter] - - -class MetricFilter(TypedDict, total=False): - field: Required[str] - - operator: Required[Literal[">", ">=", "<", "<=", "=", "==", "!="]] - - value: Required[float] diff --git a/src/profound/types/report_info.py b/src/profound/types/report_info.py deleted file mode 100644 index 950fe361..00000000 --- a/src/profound/types/report_info.py +++ /dev/null @@ -1,15 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Dict, Optional - -from .._models import BaseModel - -__all__ = ["ReportInfo"] - - -class ReportInfo(BaseModel): - """Base model for report information.""" - - total_rows: int - - query: Optional[Dict[str, object]] = None diff --git a/src/profound/types/report_query_citations_params.py b/src/profound/types/report_query_citations_params.py deleted file mode 100644 index 778fdf1f..00000000 --- a/src/profound/types/report_query_citations_params.py +++ /dev/null @@ -1,71 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Iterable, Optional -from typing_extensions import Literal, Required, TypedDict - -__all__ = ["ReportQueryCitationsParams", "Filter"] - - -class ReportQueryCitationsParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - cursor: Optional[str] - - entity: Literal["domain", "page", "citation_category"] - """What each row represents: `domain` (default), `page`, or `citation_category`. - - Legacy: `group_by: ["page"]` (with `entity` omitted) is still accepted and is - equivalent to `entity: "page"`. `citation_category` uses the dashboard split - view: a citation counts under both its page-level and domain-level category, so - category shares can sum to more than 100%. - """ - - filter: Optional[Filter] - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - group_by: List[Literal["page", "date", "model", "topic", "region", "persona", "prompt"]] - - interval: Literal["day", "week", "month"] - - limit: Optional[int] - """Page size; default 10, max 50.""" - - max_results: Optional[int] - """Stream endpoint only: cap the number of streamed rows (default: all).""" - - metrics: Optional[List[Literal["count", "citation_share", "rank", "first_cited_at"]]] - - scope: Literal["all", "owned"] - """`all` (every cited domain) or `owned` (only your owned domains). - - Applies to `entity=domain`. - """ - - -_FilterReservedKeywords = TypedDict( - "_FilterReservedKeywords", - { - "and": Optional[Iterable[object]], - "not": object, - "or": Optional[Iterable[object]], - }, - total=False, -) - - -class Filter(_FilterReservedKeywords, total=False): - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - field: Optional[str] - - op: Optional[str] - - value: object diff --git a/src/profound/types/report_query_citations_response.py b/src/profound/types/report_query_citations_response.py deleted file mode 100644 index 794f2124..00000000 --- a/src/profound/types/report_query_citations_response.py +++ /dev/null @@ -1,157 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import TYPE_CHECKING, Dict, List, Optional - -from pydantic import Field as FieldInfo - -from .._models import BaseModel - -__all__ = [ - "ReportQueryCitationsResponse", - "Data", - "DataModel", - "DataPersona", - "DataPrompt", - "DataRegion", - "DataTopic", - "Info", -] - - -class DataModel(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataPersona(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataPrompt(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataRegion(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataTopic(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class Data(BaseModel): - """One (source x group) row. - - Each row carries `domain` or `page`; group dims/metrics vary. - """ - - citation_share: Optional[float] = None - - count: Optional[int] = None - - date: Optional[str] = None - - domain: Optional[str] = None - - first_cited_at: Optional[str] = None - """Pages only.""" - - model: Optional[DataModel] = None - """An `{id, name}` reference for a grouped dimension value.""" - - page: Optional[str] = None - - persona: Optional[DataPersona] = None - """An `{id, name}` reference for a grouped dimension value.""" - - prompt: Optional[DataPrompt] = None - """An `{id, name}` reference for a grouped dimension value.""" - - rank: Optional[int] = None - - region: Optional[DataRegion] = None - """An `{id, name}` reference for a grouped dimension value.""" - - topic: Optional[DataTopic] = None - """An `{id, name}` reference for a grouped dimension value.""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class Info(BaseModel): - analysis_types: List[str] - """Analysis types the citations were drawn from.""" - - count: int - """Number of rows returned in `data` for this page.""" - - end_date: str - """Echoed request end date (YYYY-MM-DD, ET).""" - - metrics: List[str] - """Metrics returned per row.""" - - models: List[str] - """Display names of the models the report covers.""" - - scope: str - """Citation scope: `all` or `owned`.""" - - start_date: str - """Echoed request start date (YYYY-MM-DD, ET).""" - - filter: Optional[Dict[str, object]] = None - """Echoed normalized filter tree, or null when no filter was sent.""" - - next_cursor: Optional[str] = None - """Opaque cursor for the next page; null on the last page.""" - - total_results: Optional[int] = None - """Total rows matching the query before pagination (null when not computed).""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class ReportQueryCitationsResponse(BaseModel): - data: List[Data] - - info: Info diff --git a/src/profound/types/report_query_fanouts_params.py b/src/profound/types/report_query_fanouts_params.py deleted file mode 100644 index 26c07b50..00000000 --- a/src/profound/types/report_query_fanouts_params.py +++ /dev/null @@ -1,66 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Dict, List, Union, Iterable -from datetime import datetime -from typing_extensions import Literal, Required, Annotated, TypeAlias, TypedDict - -from .._utils import PropertyInfo -from .prompt_id_filter_param import PromptIDFilterParam -from .shared_params.pagination import Pagination -from .shared_params.tag_id_filter import TagIDFilter -from .shared_params.model_id_filter import ModelIDFilter -from .shared_params.topic_id_filter import TopicIDFilter -from .shared_params.region_id_filter import RegionIDFilter -from .shared_params.persona_id_filter import PersonaIDFilter -from .shared_params.prompt_type_filter import PromptTypeFilter -from .shared_params.region_name_filter import RegionNameFilter -from .shared_params.analysis_type_filter import AnalysisTypeFilter - -__all__ = ["ReportQueryFanoutsParams", "Filter"] - - -class ReportQueryFanoutsParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] - """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - metrics: Required[List[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]]] - """Metrics to return for each row.""" - - start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] - """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - """Date interval for the report. (only used with date dimension)""" - - dimensions: List[Literal["prompt", "query", "model", "region", "date"]] - """Dimensions to group the report by.""" - - filters: Iterable[Filter] - """Filters to apply to the query fanout report.""" - - order_by: Dict[str, Literal["asc", "desc"]] - """Custom ordering. - - Keys must be a requested metric or the `date` dimension. Values are `asc` or - `desc`. Defaults to first metric descending. - """ - - pagination: Pagination - """Pagination settings for the report results.""" - - -Filter: TypeAlias = Union[ - RegionIDFilter, - RegionNameFilter, - ModelIDFilter, - TopicIDFilter, - TagIDFilter, - PromptIDFilterParam, - PersonaIDFilter, - AnalysisTypeFilter, - PromptTypeFilter, -] diff --git a/src/profound/types/report_query_query_fanouts_params.py b/src/profound/types/report_query_query_fanouts_params.py deleted file mode 100644 index e6ad776b..00000000 --- a/src/profound/types/report_query_query_fanouts_params.py +++ /dev/null @@ -1,64 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Iterable, Optional -from typing_extensions import Literal, Required, TypedDict - -__all__ = ["ReportQueryQueryFanoutsParams", "Filter", "Sort"] - - -class ReportQueryQueryFanoutsParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - cursor: Optional[str] - - filter: Optional[Filter] - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - group_by: List[Literal["date", "model", "region", "prompt", "query"]] - - interval: Literal["day", "week", "month"] - - limit: Optional[int] - """Page size; default 10, max 50.""" - - max_results: Optional[int] - """Stream endpoint only: cap the number of streamed rows (default: all).""" - - metrics: Optional[List[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]]] - - sort: Optional[Sort] - - -_FilterReservedKeywords = TypedDict( - "_FilterReservedKeywords", - { - "and": Optional[Iterable[object]], - "not": object, - "or": Optional[Iterable[object]], - }, - total=False, -) - - -class Filter(_FilterReservedKeywords, total=False): - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - field: Optional[str] - - op: Optional[str] - - value: object - - -class Sort(TypedDict, total=False): - field: Required[str] - - dir: Literal["asc", "desc"] diff --git a/src/profound/types/report_query_query_fanouts_response.py b/src/profound/types/report_query_query_fanouts_response.py deleted file mode 100644 index 793cf301..00000000 --- a/src/profound/types/report_query_query_fanouts_response.py +++ /dev/null @@ -1,95 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import TYPE_CHECKING, Dict, List, Optional - -from pydantic import Field as FieldInfo - -from .._models import BaseModel - -__all__ = ["ReportQueryQueryFanoutsResponse", "Data", "Info"] - - -class Data(BaseModel): - """One row. - - Group dimensions are plain values (not `{id, name}`); metrics present depend on `metrics`. - """ - - date: Optional[str] = None - - fanouts_per_execution: Optional[float] = None - - model: Optional[str] = None - - prompt: Optional[str] = None - - query: Optional[str] = None - - query_variations: Optional[int] = None - - rank: Optional[int] = None - - region: Optional[str] = None - - share: Optional[float] = None - - total_fanouts: Optional[float] = None - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class Info(BaseModel): - count: int - """Number of rows returned in `data` for this page.""" - - coverage_note: str - """Caveat about which runs the fanout metrics cover.""" - - end_date: str - """Echoed request end date (YYYY-MM-DD, ET).""" - - metrics: List[str] - """Fanout metrics returned per row.""" - - models: List[str] - """Display names of the models the report covers.""" - - start_date: str - """Echoed request start date (YYYY-MM-DD, ET).""" - - filter: Optional[Dict[str, object]] = None - """Echoed normalized filter tree, or null when no filter was sent.""" - - next_cursor: Optional[str] = None - """Opaque cursor for the next page; null on the last page.""" - - total_results: Optional[int] = None - """Total rows matching the query before pagination (null when not computed).""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class ReportQueryQueryFanoutsResponse(BaseModel): - data: List[Data] - - info: Info diff --git a/src/profound/types/report_query_sentiment_params.py b/src/profound/types/report_query_sentiment_params.py deleted file mode 100644 index a0c25205..00000000 --- a/src/profound/types/report_query_sentiment_params.py +++ /dev/null @@ -1,78 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Iterable, Optional -from typing_extensions import Literal, Required, TypedDict - -__all__ = ["ReportQuerySentimentParams", "Filter", "Sort"] - - -class ReportQuerySentimentParams(TypedDict, total=False): - asset: Required[str] - """The brand name to analyze (sentiment is extracted on name, not id).""" - - category_id: Required[str] - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - comparison_end_date: Optional[str] - """YYYY-MM-DD, ET, inclusive (with start).""" - - comparison_start_date: Optional[str] - """YYYY-MM-DD, ET, inclusive (with end).""" - - cursor: Optional[str] - - filter: Optional[Filter] - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - group_by: List[ - Literal["date", "model", "topic", "region", "prompt", "persona", "tag", "theme", "claim", "run", "competitor"] - ] - - include_cited_websites: bool - """Return cited websites per row (only when grouping by `theme`/`claim`).""" - - interval: Literal["day", "week", "month"] - - limit: Optional[int] - """Page size; default 10, max 50.""" - - max_results: Optional[int] - """Stream endpoint only: cap the number of streamed rows (default: all).""" - - metrics: Optional[List[Literal["positive_sentiment", "negative_sentiment", "occurrence"]]] - - sort: Sort - - -_FilterReservedKeywords = TypedDict( - "_FilterReservedKeywords", - { - "and": Optional[Iterable[object]], - "not": object, - "or": Optional[Iterable[object]], - }, - total=False, -) - - -class Filter(_FilterReservedKeywords, total=False): - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - field: Optional[str] - - op: Optional[str] - - value: object - - -class Sort(TypedDict, total=False): - dir: Literal["asc", "desc"] - - field: Literal["occurrence", "positive_sentiment", "negative_sentiment"] diff --git a/src/profound/types/report_query_sentiment_response.py b/src/profound/types/report_query_sentiment_response.py deleted file mode 100644 index e0828b6b..00000000 --- a/src/profound/types/report_query_sentiment_response.py +++ /dev/null @@ -1,245 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import TYPE_CHECKING, Dict, List, Optional - -from pydantic import Field as FieldInfo - -from .._models import BaseModel - -__all__ = [ - "ReportQuerySentimentResponse", - "Data", - "DataClaim", - "DataCompetitor", - "DataModel", - "DataPersona", - "DataPrevious", - "DataPrompt", - "DataRegion", - "DataRun", - "DataTag", - "DataTheme", - "DataTopic", - "Info", -] - - -class DataClaim(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataCompetitor(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataModel(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataPersona(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataPrevious(BaseModel): - """Comparison-window metrics (when requested).""" - - negative_sentiment: Optional[float] = None - - occurrence: Optional[float] = None - - positive_sentiment: Optional[float] = None - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class DataPrompt(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataRegion(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataRun(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataTag(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataTheme(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataTopic(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class Data(BaseModel): - """One group-combination row. - - Group dims and metrics present depend on `group_by`/`metrics`. - """ - - cited_websites: Optional[List[str]] = None - - claim: Optional[DataClaim] = None - """An `{id, name}` reference for a grouped dimension value.""" - - competitor: Optional[DataCompetitor] = None - """An `{id, name}` reference for a grouped dimension value.""" - - date: Optional[str] = None - - model: Optional[DataModel] = None - """An `{id, name}` reference for a grouped dimension value.""" - - negative_sentiment: Optional[float] = None - - occurrence: Optional[float] = None - - persona: Optional[DataPersona] = None - """An `{id, name}` reference for a grouped dimension value.""" - - positive_sentiment: Optional[float] = None - - prev_date: Optional[str] = None - - previous: Optional[DataPrevious] = None - """Comparison-window metrics (when requested).""" - - prompt: Optional[DataPrompt] = None - """An `{id, name}` reference for a grouped dimension value.""" - - rank: Optional[int] = None - - region: Optional[DataRegion] = None - """An `{id, name}` reference for a grouped dimension value.""" - - run: Optional[DataRun] = None - """An `{id, name}` reference for a grouped dimension value.""" - - tag: Optional[DataTag] = None - """An `{id, name}` reference for a grouped dimension value.""" - - theme: Optional[DataTheme] = None - """An `{id, name}` reference for a grouped dimension value.""" - - topic: Optional[DataTopic] = None - """An `{id, name}` reference for a grouped dimension value.""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class Info(BaseModel): - asset: str - """The analyzed brand name.""" - - count: int - """Number of rows returned in `data` for this page.""" - - end_date: str - """Echoed request end date (YYYY-MM-DD, ET).""" - - metrics: List[str] - """Sentiment metrics returned per row.""" - - models: List[str] - """Display names of the models the report covers.""" - - start_date: str - """Echoed request start date (YYYY-MM-DD, ET).""" - - comparison_end_date: Optional[str] = None - """Comparison-window end (when requested).""" - - comparison_start_date: Optional[str] = None - """Comparison-window start (when requested).""" - - filter: Optional[Dict[str, object]] = None - """Echoed normalized filter tree, or null when no filter was sent.""" - - next_cursor: Optional[str] = None - """Opaque cursor for the next page; null on the last page.""" - - total_results: Optional[int] = None - """Total rows matching the query before pagination (null when not computed).""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class ReportQuerySentimentResponse(BaseModel): - data: List[Data] - - info: Info diff --git a/src/profound/types/report_query_visibility_params.py b/src/profound/types/report_query_visibility_params.py deleted file mode 100644 index 700534ae..00000000 --- a/src/profound/types/report_query_visibility_params.py +++ /dev/null @@ -1,91 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Union, Iterable, Optional -from typing_extensions import Literal, Required, TypeAlias, TypedDict - -from .._types import SequenceNotStr - -__all__ = ["ReportQueryVisibilityParams", "Assets", "AssetsEntityFilterClause", "Filter", "Sort"] - - -class ReportQueryVisibilityParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - assets: Optional[Assets] - """A name (`is`), a list (`in`), or {op,value} with op `is`/`in`/`not_in`.""" - - cursor: Optional[str] - - filter: Optional[Filter] - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - group_by: List[Literal["date", "model", "topic", "region", "prompt", "persona"]] - - interval: Literal["day", "week", "month"] - - limit: Optional[int] - """Page size; default 10, max 50.""" - - max_results: Optional[int] - """Stream endpoint only: cap the number of streamed rows (default: all).""" - - metrics: Optional[List[Literal["visibility_score", "share_of_voice", "average_position"]]] - - scope: Literal["owned", "all"] - - sort: Sort - - -class AssetsEntityFilterClause(TypedDict, total=False): - """Select/exclude the entity, applied outside the data `filter` tree.""" - - op: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[Union[str, SequenceNotStr[str]]] - - -Assets: TypeAlias = Union[str, SequenceNotStr[str], AssetsEntityFilterClause] - -_FilterReservedKeywords = TypedDict( - "_FilterReservedKeywords", - { - "and": Optional[Iterable[object]], - "not": object, - "or": Optional[Iterable[object]], - }, - total=False, -) - - -class Filter(_FilterReservedKeywords, total=False): - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - field: Optional[str] - - op: Optional[str] - - value: object - - -class Sort(TypedDict, total=False): - field: Literal["visibility_score", "share_of_voice", "average_position"] diff --git a/src/profound/types/report_query_visibility_response.py b/src/profound/types/report_query_visibility_response.py deleted file mode 100644 index fbdc3047..00000000 --- a/src/profound/types/report_query_visibility_response.py +++ /dev/null @@ -1,160 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import TYPE_CHECKING, Dict, List, Union, Optional - -from pydantic import Field as FieldInfo - -from .._models import BaseModel - -__all__ = [ - "ReportQueryVisibilityResponse", - "Data", - "DataAsset", - "DataModel", - "DataPersona", - "DataPrompt", - "DataRegion", - "DataTopic", - "Info", -] - - -class DataAsset(BaseModel): - name: Optional[str] = None - - owned: Optional[bool] = None - """Whether the asset is owned by the category.""" - - -class DataModel(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataPersona(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataPrompt(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataRegion(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataTopic(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class Data(BaseModel): - """One (asset x group) row. - - Group dimensions and metrics present depend on `group_by`/`metrics`. - """ - - asset: Optional[DataAsset] = None - - average_position: Optional[float] = None - - date: Optional[str] = None - - model: Optional[DataModel] = None - """An `{id, name}` reference for a grouped dimension value.""" - - persona: Optional[DataPersona] = None - """An `{id, name}` reference for a grouped dimension value.""" - - prompt: Optional[DataPrompt] = None - """An `{id, name}` reference for a grouped dimension value.""" - - rank: Optional[int] = None - """Asset rank (only when not grouped).""" - - region: Optional[DataRegion] = None - """An `{id, name}` reference for a grouped dimension value.""" - - share_of_voice: Optional[float] = None - - topic: Optional[DataTopic] = None - """An `{id, name}` reference for a grouped dimension value.""" - - visibility_score: Optional[float] = None - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class Info(BaseModel): - count: int - """Number of rows returned in `data` for this page.""" - - end_date: str - """Echoed request end date (YYYY-MM-DD, ET).""" - - models: List[str] - """Display names of the models the report covers.""" - - scope: str - """Asset scope: `all` or `owned`.""" - - start_date: str - """Echoed request start date (YYYY-MM-DD, ET).""" - - asset_filter: Union[Dict[str, object], List[str], str, None] = None - """Echoed `assets` selection (filter clause, name, or list), or null.""" - - filter: Optional[Dict[str, object]] = None - """Echoed normalized filter tree, or null when no filter was sent.""" - - next_cursor: Optional[str] = None - """Opaque cursor for the next page; null on the last page.""" - - total_results: Optional[int] = None - """Total rows matching the query before pagination (null when not computed).""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class ReportQueryVisibilityResponse(BaseModel): - data: List[Data] - - info: Info diff --git a/src/profound/types/report_sentiment_params.py b/src/profound/types/report_sentiment_params.py deleted file mode 100644 index 465e3556..00000000 --- a/src/profound/types/report_sentiment_params.py +++ /dev/null @@ -1,147 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Dict, List, Union, Iterable -from datetime import datetime -from typing_extensions import Literal, Required, Annotated, TypeAlias, TypedDict - -from .._types import SequenceNotStr -from .._utils import PropertyInfo -from .tag_name_filter_param import TagNameFilterParam -from .topic_name_filter_param import TopicNameFilterParam -from .shared_params.pagination import Pagination -from .shared_params.prompt_filter import PromptFilter -from .shared_params.tag_id_filter import TagIDFilter -from .shared_params.asset_id_filter import AssetIDFilter -from .shared_params.model_id_filter import ModelIDFilter -from .shared_params.topic_id_filter import TopicIDFilter -from .shared_params.region_id_filter import RegionIDFilter -from .shared_params.persona_id_filter import PersonaIDFilter -from .shared_params.region_name_filter import RegionNameFilter - -__all__ = [ - "ReportSentimentParams", - "Filter", - "FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter", - "FilterThemeFilter", -] - - -class ReportSentimentParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] - """End date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - """ - - metrics: Required[List[Literal["positive", "negative", "occurrences"]]] - - start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] - """Start date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - """ - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - """Date interval for the report. (only used with date dimension)""" - - dimensions: List[ - Literal[ - "theme", - "date", - "region", - "topic", - "topic_id", - "model", - "asset_id", - "asset_name", - "tag", - "prompt", - "prompt_id", - "sentiment_type", - "persona", - ] - ] - """Dimensions to group the report by.""" - - filters: Iterable[Filter] - """List of filters to apply to the sentiment report.""" - - order_by: Dict[str, Literal["asc", "desc"]] - """Custom ordering of the report results. - - The order is a record of key-value pairs where: - - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for - descending. - - When not specified, the default order is the first metric in the query - descending. - """ - - pagination: Pagination - """Pagination settings for the report results.""" - - -class FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter(TypedDict, total=False): - """Filter by asset name""" - - field: Required[Literal["asset_name"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[Union[str, SequenceNotStr[str]]] - - -class FilterThemeFilter(TypedDict, total=False): - """Filter by theme""" - - field: Required[Literal["theme"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[Union[str, SequenceNotStr[str]]] - - -Filter: TypeAlias = Union[ - AssetIDFilter, - FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter, - FilterThemeFilter, - RegionIDFilter, - RegionNameFilter, - TopicIDFilter, - TopicNameFilterParam, - ModelIDFilter, - TagIDFilter, - TagNameFilterParam, - PromptFilter, - PersonaIDFilter, -] diff --git a/src/profound/types/report_sentiment_v2_params.py b/src/profound/types/report_sentiment_v2_params.py deleted file mode 100644 index 9e802c2c..00000000 --- a/src/profound/types/report_sentiment_v2_params.py +++ /dev/null @@ -1,211 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Dict, List, Union, Iterable -from datetime import datetime -from typing_extensions import Literal, Required, Annotated, TypeAlias, TypedDict - -from .._types import SequenceNotStr -from .._utils import PropertyInfo -from .shared_params.pagination import Pagination - -__all__ = [ - "ReportSentimentV2Params", - "Filter", - "FilterSentimentV2ModelIDFilter", - "FilterSentimentV2RegionIDFilter", - "FilterSentimentV2TopicIDFilter", - "FilterSentimentV2PromptIDFilter", - "FilterSentimentV2PersonaIDFilter", - "FilterSentimentV2TagIDFilter", - "FilterSentimentV2RunIDFilter", - "FilterSentimentV2ThemeFilter", - "FilterSentimentV2ClaimFilter", - "FilterSentimentV2ThemeIDFilter", - "FilterSentimentV2ClaimIDFilter", - "FilterSentimentV2SentimentFilter", -] - - -class ReportSentimentV2Params(TypedDict, total=False): - asset_name: Required[str] - - category_id: Required[str] - - end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] - """End date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - """ - - metrics: Required[List[Literal["sentiment", "occurrence"]]] - - start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] - """Start date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - """ - - comparison_end_date: Annotated[Union[str, datetime, None], PropertyInfo(format="iso8601")] - """End of the previous period for delta computation.""" - - comparison_start_date: Annotated[Union[str, datetime, None], PropertyInfo(format="iso8601")] - """Start of the previous period for delta computation.""" - - date_bucket: Literal["day", "week", "month"] - """Date bucket for the report. Only used when dimensions includes date.""" - - dimensions: List[ - Literal["date", "topic", "region", "model", "prompt", "persona", "tag", "theme", "claim", "run", "asset_name"] - ] - """Dimensions to group the report by.""" - - filters: Iterable[Filter] - """List of filters to apply to the sentiment-v2 report.""" - - order_by: Dict[str, Literal["asc", "desc"]] - """Custom ordering of report results. - - Dimension keys must also be present in dimensions. The sentiment metric orders - by positive_sentiment. - """ - - pagination: Pagination - """Pagination settings for the report results.""" - - -class FilterSentimentV2ModelIDFilter(TypedDict, total=False): - field: Required[Literal["model_id"]] - - operator: Required[Literal["is", "not_is", "in", "not_in"]] - - value: Required[Union[str, SequenceNotStr[str]]] - - -class FilterSentimentV2RegionIDFilter(TypedDict, total=False): - field: Required[Literal["region_id"]] - - operator: Required[Literal["is", "not_is", "in", "not_in"]] - - value: Required[Union[str, SequenceNotStr[str]]] - - -class FilterSentimentV2TopicIDFilter(TypedDict, total=False): - field: Required[Literal["topic_id"]] - - operator: Required[Literal["is", "not_is", "in", "not_in"]] - - value: Required[Union[str, SequenceNotStr[str]]] - - -class FilterSentimentV2PromptIDFilter(TypedDict, total=False): - field: Required[Literal["prompt_id"]] - - operator: Required[Literal["is", "not_is", "in", "not_in"]] - - value: Required[Union[str, SequenceNotStr[str]]] - - -class FilterSentimentV2PersonaIDFilter(TypedDict, total=False): - field: Required[Literal["persona_id"]] - - operator: Required[Literal["is", "not_is", "in", "not_in"]] - - value: Required[Union[str, SequenceNotStr[str]]] - - -class FilterSentimentV2TagIDFilter(TypedDict, total=False): - field: Required[Literal["tag_id"]] - - operator: Required[Literal["is", "not_is", "in", "not_in"]] - - value: Required[Union[str, SequenceNotStr[str]]] - - -class FilterSentimentV2RunIDFilter(TypedDict, total=False): - field: Required[Literal["run_id"]] - - operator: Required[Literal["is", "not_is", "in", "not_in"]] - - value: Required[Union[str, SequenceNotStr[str]]] - - -class FilterSentimentV2ThemeFilter(TypedDict, total=False): - field: Required[Literal["theme"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[Union[str, SequenceNotStr[str]]] - - -class FilterSentimentV2ClaimFilter(TypedDict, total=False): - field: Required[Literal["claim"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[Union[str, SequenceNotStr[str]]] - - -class FilterSentimentV2ThemeIDFilter(TypedDict, total=False): - field: Required[Literal["theme_id"]] - - operator: Required[Literal["is", "not_is", "in", "not_in"]] - - value: Required[Union[str, SequenceNotStr[str]]] - - -class FilterSentimentV2ClaimIDFilter(TypedDict, total=False): - field: Required[Literal["claim_id"]] - - operator: Required[Literal["is", "not_is", "in", "not_in"]] - - value: Required[Union[str, SequenceNotStr[str]]] - - -class FilterSentimentV2SentimentFilter(TypedDict, total=False): - field: Required[Literal["sentiment"]] - - operator: Required[Literal["is", "not_is", "in", "not_in"]] - - value: Required[Union[Literal["positive", "negative"], List[Literal["positive", "negative"]]]] - - -Filter: TypeAlias = Union[ - FilterSentimentV2ModelIDFilter, - FilterSentimentV2RegionIDFilter, - FilterSentimentV2TopicIDFilter, - FilterSentimentV2PromptIDFilter, - FilterSentimentV2PersonaIDFilter, - FilterSentimentV2TagIDFilter, - FilterSentimentV2RunIDFilter, - FilterSentimentV2ThemeFilter, - FilterSentimentV2ClaimFilter, - FilterSentimentV2ThemeIDFilter, - FilterSentimentV2ClaimIDFilter, - FilterSentimentV2SentimentFilter, -] diff --git a/src/profound/types/report_stream_citations_params.py b/src/profound/types/report_stream_citations_params.py deleted file mode 100644 index dec5d957..00000000 --- a/src/profound/types/report_stream_citations_params.py +++ /dev/null @@ -1,144 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Dict, List, Union, Iterable, Optional -from datetime import datetime -from typing_extensions import Literal, Required, Annotated, TypeAlias, TypedDict - -from .._types import SequenceNotStr -from .._utils import PropertyInfo -from .url_filter_param import URLFilterParam -from .hostname_filter_param import HostnameFilterParam -from .tag_name_filter_param import TagNameFilterParam -from .prompt_id_filter_param import PromptIDFilterParam -from .topic_name_filter_param import TopicNameFilterParam -from .root_domain_filter_param import RootDomainFilterParam -from .shared_params.pagination import Pagination -from .shared_params.path_filter import PathFilter -from .shared_params.prompt_filter import PromptFilter -from .shared_params.tag_id_filter import TagIDFilter -from .shared_params.model_id_filter import ModelIDFilter -from .shared_params.topic_id_filter import TopicIDFilter -from .shared_params.region_id_filter import RegionIDFilter -from .shared_params.persona_id_filter import PersonaIDFilter -from .shared_params.prompt_type_filter import PromptTypeFilter -from .shared_params.region_name_filter import RegionNameFilter -from .shared_params.analysis_type_filter import AnalysisTypeFilter - -__all__ = ["ReportStreamCitationsParams", "Filter", "FilterCitationCategoryFilter", "FilterMentionedFilter"] - - -class ReportStreamCitationsParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] - """End date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - """ - - metrics: Required[List[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]]] - """Metrics to include. - - `share_of_voice` is deprecated, use `citation_share` instead. - """ - - start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] - """Start date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - """ - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - """Date interval for the report. (only used with date dimension)""" - - dimensions: List[ - Literal[ - "hostname", - "path", - "date", - "region", - "topic", - "topic_id", - "model", - "tag", - "prompt", - "prompt_id", - "url", - "root_domain", - "persona", - "citation_category", - ] - ] - """Dimensions to group the report by.""" - - filters: Iterable[Filter] - """List of filters to apply to the citations report.""" - - order_by: Dict[str, Literal["asc", "desc"]] - """Custom ordering of the report results. - - The order is a record of key-value pairs where: - - `key` is the field to order by, which can be a metric or dimension - - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. - - When not specified, the default order is the first metric in the query descending. - """ - - pagination: Optional[Pagination] - """Offset-based pagination parameters.""" - - -class FilterCitationCategoryFilter(TypedDict, total=False): - """Filter by citation category""" - - field: Required[Literal["citation_category"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[Union[str, SequenceNotStr[str]]] - - -class FilterMentionedFilter(TypedDict, total=False): - """Filter citation pages by whether they mention an owned category asset.""" - - field: Required[Literal["mentioned"]] - - operator: Required[Literal["is"]] - - value: Required[Union[bool, Iterable[bool]]] - - -Filter: TypeAlias = Union[ - HostnameFilterParam, - PathFilter, - RegionIDFilter, - RegionNameFilter, - TopicIDFilter, - TopicNameFilterParam, - ModelIDFilter, - TagIDFilter, - TagNameFilterParam, - URLFilterParam, - RootDomainFilterParam, - AnalysisTypeFilter, - PromptTypeFilter, - PersonaIDFilter, - FilterCitationCategoryFilter, - PromptFilter, - PromptIDFilterParam, - FilterMentionedFilter, -] diff --git a/src/profound/types/report_stream_citations_response.py b/src/profound/types/report_stream_citations_response.py deleted file mode 100644 index 00e4cae6..00000000 --- a/src/profound/types/report_stream_citations_response.py +++ /dev/null @@ -1,19 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Dict, Union -from typing_extensions import TypeAlias - -from .._models import BaseModel - -__all__ = ["ReportStreamCitationsResponse", "SseSummaryEventData"] - - -class SseSummaryEventData(BaseModel): - query: Dict[str, object] - """The normalized query used to build the stream.""" - - total_rows: int - """Total number of rows available before pagination is applied.""" - - -ReportStreamCitationsResponse: TypeAlias = Union[SseSummaryEventData, Dict[str, object]] diff --git a/src/profound/types/report_stream_citations_v2_params.py b/src/profound/types/report_stream_citations_v2_params.py deleted file mode 100644 index 4cb19270..00000000 --- a/src/profound/types/report_stream_citations_v2_params.py +++ /dev/null @@ -1,71 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Iterable, Optional -from typing_extensions import Literal, Required, TypedDict - -__all__ = ["ReportStreamCitationsV2Params", "Filter"] - - -class ReportStreamCitationsV2Params(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - cursor: Optional[str] - - entity: Literal["domain", "page", "citation_category"] - """What each row represents: `domain` (default), `page`, or `citation_category`. - - Legacy: `group_by: ["page"]` (with `entity` omitted) is still accepted and is - equivalent to `entity: "page"`. `citation_category` uses the dashboard split - view: a citation counts under both its page-level and domain-level category, so - category shares can sum to more than 100%. - """ - - filter: Optional[Filter] - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - group_by: List[Literal["page", "date", "model", "topic", "region", "persona", "prompt"]] - - interval: Literal["day", "week", "month"] - - limit: Optional[int] - """Page size; default 10, max 50.""" - - max_results: Optional[int] - """Stream endpoint only: cap the number of streamed rows (default: all).""" - - metrics: Optional[List[Literal["count", "citation_share", "rank", "first_cited_at"]]] - - scope: Literal["all", "owned"] - """`all` (every cited domain) or `owned` (only your owned domains). - - Applies to `entity=domain`. - """ - - -_FilterReservedKeywords = TypedDict( - "_FilterReservedKeywords", - { - "and": Optional[Iterable[object]], - "not": object, - "or": Optional[Iterable[object]], - }, - total=False, -) - - -class Filter(_FilterReservedKeywords, total=False): - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - field: Optional[str] - - op: Optional[str] - - value: object diff --git a/src/profound/types/report_stream_citations_v2_response.py b/src/profound/types/report_stream_citations_v2_response.py deleted file mode 100644 index 470b72bd..00000000 --- a/src/profound/types/report_stream_citations_v2_response.py +++ /dev/null @@ -1,154 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import TYPE_CHECKING, Dict, List, Union, Optional -from typing_extensions import TypeAlias - -from pydantic import Field as FieldInfo - -from .._models import BaseModel - -__all__ = [ - "ReportStreamCitationsV2Response", - "CitationsV2Info", - "CitationRow", - "CitationRowModel", - "CitationRowPersona", - "CitationRowPrompt", - "CitationRowRegion", - "CitationRowTopic", -] - - -class CitationsV2Info(BaseModel): - """`summary` event payload (the report `info` block).""" - - analysis_types: List[str] - """Analysis types the citations were drawn from.""" - - count: int - """Number of rows returned in `data` for this page.""" - - end_date: str - """Echoed request end date (YYYY-MM-DD, ET).""" - - metrics: List[str] - """Metrics returned per row.""" - - models: List[str] - """Display names of the models the report covers.""" - - scope: str - """Citation scope: `all` or `owned`.""" - - start_date: str - """Echoed request start date (YYYY-MM-DD, ET).""" - - filter: Optional[Dict[str, object]] = None - """Echoed normalized filter tree, or null when no filter was sent.""" - - next_cursor: Optional[str] = None - """Opaque cursor for the next page; null on the last page.""" - - total_results: Optional[int] = None - """Total rows matching the query before pagination (null when not computed).""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class CitationRowModel(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class CitationRowPersona(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class CitationRowPrompt(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class CitationRowRegion(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class CitationRowTopic(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class CitationRow(BaseModel): - """`result` event payload — one citation row.""" - - citation_share: Optional[float] = None - - count: Optional[int] = None - - date: Optional[str] = None - - domain: Optional[str] = None - - first_cited_at: Optional[str] = None - """Pages only.""" - - model: Optional[CitationRowModel] = None - """An `{id, name}` reference for a grouped dimension value.""" - - page: Optional[str] = None - - persona: Optional[CitationRowPersona] = None - """An `{id, name}` reference for a grouped dimension value.""" - - prompt: Optional[CitationRowPrompt] = None - """An `{id, name}` reference for a grouped dimension value.""" - - rank: Optional[int] = None - - region: Optional[CitationRowRegion] = None - """An `{id, name}` reference for a grouped dimension value.""" - - topic: Optional[CitationRowTopic] = None - """An `{id, name}` reference for a grouped dimension value.""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -ReportStreamCitationsV2Response: TypeAlias = Union[CitationsV2Info, CitationRow] diff --git a/src/profound/types/report_stream_query_fanouts_params.py b/src/profound/types/report_stream_query_fanouts_params.py deleted file mode 100644 index 989e98e6..00000000 --- a/src/profound/types/report_stream_query_fanouts_params.py +++ /dev/null @@ -1,64 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Iterable, Optional -from typing_extensions import Literal, Required, TypedDict - -__all__ = ["ReportStreamQueryFanoutsParams", "Filter", "Sort"] - - -class ReportStreamQueryFanoutsParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - cursor: Optional[str] - - filter: Optional[Filter] - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - group_by: List[Literal["date", "model", "region", "prompt", "query"]] - - interval: Literal["day", "week", "month"] - - limit: Optional[int] - """Page size; default 10, max 50.""" - - max_results: Optional[int] - """Stream endpoint only: cap the number of streamed rows (default: all).""" - - metrics: Optional[List[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]]] - - sort: Optional[Sort] - - -_FilterReservedKeywords = TypedDict( - "_FilterReservedKeywords", - { - "and": Optional[Iterable[object]], - "not": object, - "or": Optional[Iterable[object]], - }, - total=False, -) - - -class Filter(_FilterReservedKeywords, total=False): - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - field: Optional[str] - - op: Optional[str] - - value: object - - -class Sort(TypedDict, total=False): - field: Required[str] - - dir: Literal["asc", "desc"] diff --git a/src/profound/types/report_stream_query_fanouts_response.py b/src/profound/types/report_stream_query_fanouts_response.py deleted file mode 100644 index 054beb8a..00000000 --- a/src/profound/types/report_stream_query_fanouts_response.py +++ /dev/null @@ -1,92 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import TYPE_CHECKING, Dict, List, Union, Optional -from typing_extensions import TypeAlias - -from pydantic import Field as FieldInfo - -from .._models import BaseModel - -__all__ = ["ReportStreamQueryFanoutsResponse", "QueryFanoutsV2Info", "QueryFanoutRow"] - - -class QueryFanoutsV2Info(BaseModel): - """`summary` event payload (the report `info` block).""" - - count: int - """Number of rows returned in `data` for this page.""" - - coverage_note: str - """Caveat about which runs the fanout metrics cover.""" - - end_date: str - """Echoed request end date (YYYY-MM-DD, ET).""" - - metrics: List[str] - """Fanout metrics returned per row.""" - - models: List[str] - """Display names of the models the report covers.""" - - start_date: str - """Echoed request start date (YYYY-MM-DD, ET).""" - - filter: Optional[Dict[str, object]] = None - """Echoed normalized filter tree, or null when no filter was sent.""" - - next_cursor: Optional[str] = None - """Opaque cursor for the next page; null on the last page.""" - - total_results: Optional[int] = None - """Total rows matching the query before pagination (null when not computed).""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class QueryFanoutRow(BaseModel): - """`result` event payload — one query-fanout row.""" - - date: Optional[str] = None - - fanouts_per_execution: Optional[float] = None - - model: Optional[str] = None - - prompt: Optional[str] = None - - query: Optional[str] = None - - query_variations: Optional[int] = None - - rank: Optional[int] = None - - region: Optional[str] = None - - share: Optional[float] = None - - total_fanouts: Optional[float] = None - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -ReportStreamQueryFanoutsResponse: TypeAlias = Union[QueryFanoutsV2Info, QueryFanoutRow] diff --git a/src/profound/types/report_stream_sentiment_params.py b/src/profound/types/report_stream_sentiment_params.py deleted file mode 100644 index 45c4e506..00000000 --- a/src/profound/types/report_stream_sentiment_params.py +++ /dev/null @@ -1,147 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Dict, List, Union, Iterable, Optional -from datetime import datetime -from typing_extensions import Literal, Required, Annotated, TypeAlias, TypedDict - -from .._types import SequenceNotStr -from .._utils import PropertyInfo -from .tag_name_filter_param import TagNameFilterParam -from .topic_name_filter_param import TopicNameFilterParam -from .shared_params.pagination import Pagination -from .shared_params.prompt_filter import PromptFilter -from .shared_params.tag_id_filter import TagIDFilter -from .shared_params.asset_id_filter import AssetIDFilter -from .shared_params.model_id_filter import ModelIDFilter -from .shared_params.topic_id_filter import TopicIDFilter -from .shared_params.region_id_filter import RegionIDFilter -from .shared_params.persona_id_filter import PersonaIDFilter -from .shared_params.region_name_filter import RegionNameFilter - -__all__ = [ - "ReportStreamSentimentParams", - "Filter", - "FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter", - "FilterThemeFilter", -] - - -class ReportStreamSentimentParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] - """End date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - """ - - metrics: Required[List[Literal["positive", "negative", "occurrences"]]] - - start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] - """Start date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - """ - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - """Date interval for the report. (only used with date dimension)""" - - dimensions: List[ - Literal[ - "theme", - "date", - "region", - "topic", - "topic_id", - "model", - "asset_id", - "asset_name", - "tag", - "prompt", - "prompt_id", - "sentiment_type", - "persona", - ] - ] - """Dimensions to group the report by.""" - - filters: Iterable[Filter] - """List of filters to apply to the sentiment report.""" - - order_by: Dict[str, Literal["asc", "desc"]] - """Custom ordering of the report results. - - The order is a record of key-value pairs where: - - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for - descending. - - When not specified, the default order is the first metric in the query - descending. - """ - - pagination: Optional[Pagination] - """Offset-based pagination parameters.""" - - -class FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter(TypedDict, total=False): - """Filter by asset name""" - - field: Required[Literal["asset_name"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[Union[str, SequenceNotStr[str]]] - - -class FilterThemeFilter(TypedDict, total=False): - """Filter by theme""" - - field: Required[Literal["theme"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[Union[str, SequenceNotStr[str]]] - - -Filter: TypeAlias = Union[ - AssetIDFilter, - FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter, - FilterThemeFilter, - RegionIDFilter, - RegionNameFilter, - TopicIDFilter, - TopicNameFilterParam, - ModelIDFilter, - TagIDFilter, - TagNameFilterParam, - PromptFilter, - PersonaIDFilter, -] diff --git a/src/profound/types/report_stream_sentiment_response.py b/src/profound/types/report_stream_sentiment_response.py deleted file mode 100644 index 959f89bf..00000000 --- a/src/profound/types/report_stream_sentiment_response.py +++ /dev/null @@ -1,19 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Dict, Union -from typing_extensions import TypeAlias - -from .._models import BaseModel - -__all__ = ["ReportStreamSentimentResponse", "SseSummaryEventData"] - - -class SseSummaryEventData(BaseModel): - query: Dict[str, object] - """The normalized query used to build the stream.""" - - total_rows: int - """Total number of rows available before pagination is applied.""" - - -ReportStreamSentimentResponse: TypeAlias = Union[SseSummaryEventData, Dict[str, object]] diff --git a/src/profound/types/report_stream_sentiment_v2_params.py b/src/profound/types/report_stream_sentiment_v2_params.py deleted file mode 100644 index 7d38da56..00000000 --- a/src/profound/types/report_stream_sentiment_v2_params.py +++ /dev/null @@ -1,78 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Iterable, Optional -from typing_extensions import Literal, Required, TypedDict - -__all__ = ["ReportStreamSentimentV2Params", "Filter", "Sort"] - - -class ReportStreamSentimentV2Params(TypedDict, total=False): - asset: Required[str] - """The brand name to analyze (sentiment is extracted on name, not id).""" - - category_id: Required[str] - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - comparison_end_date: Optional[str] - """YYYY-MM-DD, ET, inclusive (with start).""" - - comparison_start_date: Optional[str] - """YYYY-MM-DD, ET, inclusive (with end).""" - - cursor: Optional[str] - - filter: Optional[Filter] - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - group_by: List[ - Literal["date", "model", "topic", "region", "prompt", "persona", "tag", "theme", "claim", "run", "competitor"] - ] - - include_cited_websites: bool - """Return cited websites per row (only when grouping by `theme`/`claim`).""" - - interval: Literal["day", "week", "month"] - - limit: Optional[int] - """Page size; default 10, max 50.""" - - max_results: Optional[int] - """Stream endpoint only: cap the number of streamed rows (default: all).""" - - metrics: Optional[List[Literal["positive_sentiment", "negative_sentiment", "occurrence"]]] - - sort: Sort - - -_FilterReservedKeywords = TypedDict( - "_FilterReservedKeywords", - { - "and": Optional[Iterable[object]], - "not": object, - "or": Optional[Iterable[object]], - }, - total=False, -) - - -class Filter(_FilterReservedKeywords, total=False): - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - field: Optional[str] - - op: Optional[str] - - value: object - - -class Sort(TypedDict, total=False): - dir: Literal["asc", "desc"] - - field: Literal["occurrence", "positive_sentiment", "negative_sentiment"] diff --git a/src/profound/types/report_stream_sentiment_v2_response.py b/src/profound/types/report_stream_sentiment_v2_response.py deleted file mode 100644 index 9ca39f8d..00000000 --- a/src/profound/types/report_stream_sentiment_v2_response.py +++ /dev/null @@ -1,242 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import TYPE_CHECKING, Dict, List, Union, Optional -from typing_extensions import TypeAlias - -from pydantic import Field as FieldInfo - -from .._models import BaseModel - -__all__ = [ - "ReportStreamSentimentV2Response", - "SentimentV2Info", - "SentimentRow", - "SentimentRowClaim", - "SentimentRowCompetitor", - "SentimentRowModel", - "SentimentRowPersona", - "SentimentRowPrevious", - "SentimentRowPrompt", - "SentimentRowRegion", - "SentimentRowRun", - "SentimentRowTag", - "SentimentRowTheme", - "SentimentRowTopic", -] - - -class SentimentV2Info(BaseModel): - """`summary` event payload (the report `info` block).""" - - asset: str - """The analyzed brand name.""" - - count: int - """Number of rows returned in `data` for this page.""" - - end_date: str - """Echoed request end date (YYYY-MM-DD, ET).""" - - metrics: List[str] - """Sentiment metrics returned per row.""" - - models: List[str] - """Display names of the models the report covers.""" - - start_date: str - """Echoed request start date (YYYY-MM-DD, ET).""" - - comparison_end_date: Optional[str] = None - """Comparison-window end (when requested).""" - - comparison_start_date: Optional[str] = None - """Comparison-window start (when requested).""" - - filter: Optional[Dict[str, object]] = None - """Echoed normalized filter tree, or null when no filter was sent.""" - - next_cursor: Optional[str] = None - """Opaque cursor for the next page; null on the last page.""" - - total_results: Optional[int] = None - """Total rows matching the query before pagination (null when not computed).""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class SentimentRowClaim(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class SentimentRowCompetitor(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class SentimentRowModel(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class SentimentRowPersona(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class SentimentRowPrevious(BaseModel): - """Comparison-window metrics (when requested).""" - - negative_sentiment: Optional[float] = None - - occurrence: Optional[float] = None - - positive_sentiment: Optional[float] = None - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class SentimentRowPrompt(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class SentimentRowRegion(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class SentimentRowRun(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class SentimentRowTag(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class SentimentRowTheme(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class SentimentRowTopic(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class SentimentRow(BaseModel): - """`result` event payload — one sentiment row.""" - - cited_websites: Optional[List[str]] = None - - claim: Optional[SentimentRowClaim] = None - """An `{id, name}` reference for a grouped dimension value.""" - - competitor: Optional[SentimentRowCompetitor] = None - """An `{id, name}` reference for a grouped dimension value.""" - - date: Optional[str] = None - - model: Optional[SentimentRowModel] = None - """An `{id, name}` reference for a grouped dimension value.""" - - negative_sentiment: Optional[float] = None - - occurrence: Optional[float] = None - - persona: Optional[SentimentRowPersona] = None - """An `{id, name}` reference for a grouped dimension value.""" - - positive_sentiment: Optional[float] = None - - prev_date: Optional[str] = None - - previous: Optional[SentimentRowPrevious] = None - """Comparison-window metrics (when requested).""" - - prompt: Optional[SentimentRowPrompt] = None - """An `{id, name}` reference for a grouped dimension value.""" - - rank: Optional[int] = None - - region: Optional[SentimentRowRegion] = None - """An `{id, name}` reference for a grouped dimension value.""" - - run: Optional[SentimentRowRun] = None - """An `{id, name}` reference for a grouped dimension value.""" - - tag: Optional[SentimentRowTag] = None - """An `{id, name}` reference for a grouped dimension value.""" - - theme: Optional[SentimentRowTheme] = None - """An `{id, name}` reference for a grouped dimension value.""" - - topic: Optional[SentimentRowTopic] = None - """An `{id, name}` reference for a grouped dimension value.""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -ReportStreamSentimentV2Response: TypeAlias = Union[SentimentV2Info, SentimentRow] diff --git a/src/profound/types/report_stream_visibility_params.py b/src/profound/types/report_stream_visibility_params.py deleted file mode 100644 index 2986050e..00000000 --- a/src/profound/types/report_stream_visibility_params.py +++ /dev/null @@ -1,119 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Dict, List, Union, Iterable, Optional -from datetime import datetime -from typing_extensions import Literal, Required, Annotated, TypeAlias, TypedDict - -from .._types import SequenceNotStr -from .._utils import PropertyInfo -from .tag_name_filter_param import TagNameFilterParam -from .prompt_id_filter_param import PromptIDFilterParam -from .topic_name_filter_param import TopicNameFilterParam -from .shared_params.pagination import Pagination -from .shared_params.prompt_filter import PromptFilter -from .shared_params.tag_id_filter import TagIDFilter -from .shared_params.model_id_filter import ModelIDFilter -from .shared_params.topic_id_filter import TopicIDFilter -from .shared_params.region_id_filter import RegionIDFilter -from .shared_params.persona_id_filter import PersonaIDFilter -from .shared_params.region_name_filter import RegionNameFilter - -__all__ = ["ReportStreamVisibilityParams", "Filter", "FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter"] - - -class ReportStreamVisibilityParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] - """End date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - """ - - metrics: Required[ - List[Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"]] - ] - - start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] - """Start date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - """ - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - """Date interval for the report. (only used with date dimension)""" - - dimensions: List[ - Literal[ - "date", - "region", - "topic", - "topic_id", - "model", - "asset_id", - "asset_name", - "prompt", - "prompt_id", - "tag", - "persona", - ] - ] - """Dimensions to group the report by.""" - - filters: Iterable[Filter] - """List of filters to apply to the visibility report.""" - - order_by: Dict[str, Literal["asc", "desc"]] - """Custom ordering of the report results. - - The order is a record of key-value pairs where: - - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for - descending. - - When not specified, the default order is the first metric in the query - descending. - """ - - pagination: Optional[Pagination] - """Offset-based pagination parameters.""" - - -class FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter(TypedDict, total=False): - """Filter by asset name""" - - field: Required[Literal["asset_name"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[Union[str, SequenceNotStr[str]]] - - -Filter: TypeAlias = Union[ - RegionIDFilter, - RegionNameFilter, - ModelIDFilter, - TopicIDFilter, - TopicNameFilterParam, - FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter, - TagIDFilter, - TagNameFilterParam, - PromptIDFilterParam, - PromptFilter, - PersonaIDFilter, -] diff --git a/src/profound/types/report_stream_visibility_response.py b/src/profound/types/report_stream_visibility_response.py deleted file mode 100644 index c6a9566e..00000000 --- a/src/profound/types/report_stream_visibility_response.py +++ /dev/null @@ -1,19 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Dict, Union -from typing_extensions import TypeAlias - -from .._models import BaseModel - -__all__ = ["ReportStreamVisibilityResponse", "SseSummaryEventData"] - - -class SseSummaryEventData(BaseModel): - query: Dict[str, object] - """The normalized query used to build the stream.""" - - total_rows: int - """Total number of rows available before pagination is applied.""" - - -ReportStreamVisibilityResponse: TypeAlias = Union[SseSummaryEventData, Dict[str, object]] diff --git a/src/profound/types/report_stream_visibility_v2_params.py b/src/profound/types/report_stream_visibility_v2_params.py deleted file mode 100644 index 5f955fcb..00000000 --- a/src/profound/types/report_stream_visibility_v2_params.py +++ /dev/null @@ -1,91 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Union, Iterable, Optional -from typing_extensions import Literal, Required, TypeAlias, TypedDict - -from .._types import SequenceNotStr - -__all__ = ["ReportStreamVisibilityV2Params", "Assets", "AssetsEntityFilterClause", "Filter", "Sort"] - - -class ReportStreamVisibilityV2Params(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - assets: Optional[Assets] - """A name (`is`), a list (`in`), or {op,value} with op `is`/`in`/`not_in`.""" - - cursor: Optional[str] - - filter: Optional[Filter] - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - group_by: List[Literal["date", "model", "topic", "region", "prompt", "persona"]] - - interval: Literal["day", "week", "month"] - - limit: Optional[int] - """Page size; default 10, max 50.""" - - max_results: Optional[int] - """Stream endpoint only: cap the number of streamed rows (default: all).""" - - metrics: Optional[List[Literal["visibility_score", "share_of_voice", "average_position"]]] - - scope: Literal["owned", "all"] - - sort: Sort - - -class AssetsEntityFilterClause(TypedDict, total=False): - """Select/exclude the entity, applied outside the data `filter` tree.""" - - op: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[Union[str, SequenceNotStr[str]]] - - -Assets: TypeAlias = Union[str, SequenceNotStr[str], AssetsEntityFilterClause] - -_FilterReservedKeywords = TypedDict( - "_FilterReservedKeywords", - { - "and": Optional[Iterable[object]], - "not": object, - "or": Optional[Iterable[object]], - }, - total=False, -) - - -class Filter(_FilterReservedKeywords, total=False): - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - field: Optional[str] - - op: Optional[str] - - value: object - - -class Sort(TypedDict, total=False): - field: Literal["visibility_score", "share_of_voice", "average_position"] diff --git a/src/profound/types/report_stream_visibility_v2_response.py b/src/profound/types/report_stream_visibility_v2_response.py deleted file mode 100644 index 714a8a56..00000000 --- a/src/profound/types/report_stream_visibility_v2_response.py +++ /dev/null @@ -1,157 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import TYPE_CHECKING, Dict, List, Union, Optional -from typing_extensions import TypeAlias - -from pydantic import Field as FieldInfo - -from .._models import BaseModel - -__all__ = [ - "ReportStreamVisibilityV2Response", - "VisibilityV2Info", - "VisibilityRow", - "VisibilityRowAsset", - "VisibilityRowModel", - "VisibilityRowPersona", - "VisibilityRowPrompt", - "VisibilityRowRegion", - "VisibilityRowTopic", -] - - -class VisibilityV2Info(BaseModel): - """`summary` event payload (the report `info` block).""" - - count: int - """Number of rows returned in `data` for this page.""" - - end_date: str - """Echoed request end date (YYYY-MM-DD, ET).""" - - models: List[str] - """Display names of the models the report covers.""" - - scope: str - """Asset scope: `all` or `owned`.""" - - start_date: str - """Echoed request start date (YYYY-MM-DD, ET).""" - - asset_filter: Union[Dict[str, object], List[str], str, None] = None - """Echoed `assets` selection (filter clause, name, or list), or null.""" - - filter: Optional[Dict[str, object]] = None - """Echoed normalized filter tree, or null when no filter was sent.""" - - next_cursor: Optional[str] = None - """Opaque cursor for the next page; null on the last page.""" - - total_results: Optional[int] = None - """Total rows matching the query before pagination (null when not computed).""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class VisibilityRowAsset(BaseModel): - name: Optional[str] = None - - owned: Optional[bool] = None - """Whether the asset is owned by the category.""" - - -class VisibilityRowModel(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class VisibilityRowPersona(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class VisibilityRowPrompt(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class VisibilityRowRegion(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class VisibilityRowTopic(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class VisibilityRow(BaseModel): - """`result` event payload — one visibility row.""" - - asset: Optional[VisibilityRowAsset] = None - - average_position: Optional[float] = None - - date: Optional[str] = None - - model: Optional[VisibilityRowModel] = None - """An `{id, name}` reference for a grouped dimension value.""" - - persona: Optional[VisibilityRowPersona] = None - """An `{id, name}` reference for a grouped dimension value.""" - - prompt: Optional[VisibilityRowPrompt] = None - """An `{id, name}` reference for a grouped dimension value.""" - - rank: Optional[int] = None - """Asset rank (only when not grouped).""" - - region: Optional[VisibilityRowRegion] = None - """An `{id, name}` reference for a grouped dimension value.""" - - share_of_voice: Optional[float] = None - - topic: Optional[VisibilityRowTopic] = None - """An `{id, name}` reference for a grouped dimension value.""" - - visibility_score: Optional[float] = None - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -ReportStreamVisibilityV2Response: TypeAlias = Union[VisibilityV2Info, VisibilityRow] diff --git a/src/profound/types/report_visibility_params.py b/src/profound/types/report_visibility_params.py deleted file mode 100644 index a59419bf..00000000 --- a/src/profound/types/report_visibility_params.py +++ /dev/null @@ -1,119 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Dict, List, Union, Iterable -from datetime import datetime -from typing_extensions import Literal, Required, Annotated, TypeAlias, TypedDict - -from .._types import SequenceNotStr -from .._utils import PropertyInfo -from .tag_name_filter_param import TagNameFilterParam -from .prompt_id_filter_param import PromptIDFilterParam -from .topic_name_filter_param import TopicNameFilterParam -from .shared_params.pagination import Pagination -from .shared_params.prompt_filter import PromptFilter -from .shared_params.tag_id_filter import TagIDFilter -from .shared_params.model_id_filter import ModelIDFilter -from .shared_params.topic_id_filter import TopicIDFilter -from .shared_params.region_id_filter import RegionIDFilter -from .shared_params.persona_id_filter import PersonaIDFilter -from .shared_params.region_name_filter import RegionNameFilter - -__all__ = ["ReportVisibilityParams", "Filter", "FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter"] - - -class ReportVisibilityParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] - """End date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - """ - - metrics: Required[ - List[Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"]] - ] - - start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] - """Start date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - """ - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - """Date interval for the report. (only used with date dimension)""" - - dimensions: List[ - Literal[ - "date", - "region", - "topic", - "topic_id", - "model", - "asset_id", - "asset_name", - "prompt", - "prompt_id", - "tag", - "persona", - ] - ] - """Dimensions to group the report by.""" - - filters: Iterable[Filter] - """List of filters to apply to the visibility report.""" - - order_by: Dict[str, Literal["asc", "desc"]] - """Custom ordering of the report results. - - The order is a record of key-value pairs where: - - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for - descending. - - When not specified, the default order is the first metric in the query - descending. - """ - - pagination: Pagination - """Pagination settings for the report results.""" - - -class FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter(TypedDict, total=False): - """Filter by asset name""" - - field: Required[Literal["asset_name"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[Union[str, SequenceNotStr[str]]] - - -Filter: TypeAlias = Union[ - RegionIDFilter, - RegionNameFilter, - ModelIDFilter, - TopicIDFilter, - TopicNameFilterParam, - FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter, - TagIDFilter, - TagNameFilterParam, - PromptIDFilterParam, - PromptFilter, - PersonaIDFilter, -] diff --git a/src/profound/types/reports/__init__.py b/src/profound/types/reports/__init__.py deleted file mode 100644 index 38d21899..00000000 --- a/src/profound/types/reports/__init__.py +++ /dev/null @@ -1,96 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from .shopping_brands_params import ShoppingBrandsParams as ShoppingBrandsParams -from .shopping_brands_response import ShoppingBrandsResponse as ShoppingBrandsResponse -from .shopping_products_params import ShoppingProductsParams as ShoppingProductsParams -from .shopping_merchants_params import ShoppingMerchantsParams as ShoppingMerchantsParams -from .shopping_products_response import ShoppingProductsResponse as ShoppingProductsResponse -from .shopping_merchants_response import ShoppingMerchantsResponse as ShoppingMerchantsResponse -from .shopping_trigger_rate_params import ShoppingTriggerRateParams as ShoppingTriggerRateParams -from .factcheck_query_scores_params import FactcheckQueryScoresParams as FactcheckQueryScoresParams -from .shopping_stream_brands_params import ShoppingStreamBrandsParams as ShoppingStreamBrandsParams -from .factcheck_stream_scores_params import FactcheckStreamScoresParams as FactcheckStreamScoresParams -from .shopping_trigger_rate_response import ShoppingTriggerRateResponse as ShoppingTriggerRateResponse -from .web_search_result_query_params import WebSearchResultQueryParams as WebSearchResultQueryParams -from .accuracy_create_overview_params import AccuracyCreateOverviewParams as AccuracyCreateOverviewParams -from .factcheck_query_scores_response import FactcheckQueryScoresResponse as FactcheckQueryScoresResponse -from .shopping_stream_brands_response import ShoppingStreamBrandsResponse as ShoppingStreamBrandsResponse -from .shopping_stream_products_params import ShoppingStreamProductsParams as ShoppingStreamProductsParams -from .web_search_result_stream_params import WebSearchResultStreamParams as WebSearchResultStreamParams -from .accuracy_create_breakdown_params import AccuracyCreateBreakdownParams as AccuracyCreateBreakdownParams -from .accuracy_create_topic_ids_params import AccuracyCreateTopicIDsParams as AccuracyCreateTopicIDsParams -from .factcheck_stream_scores_response import FactcheckStreamScoresResponse as FactcheckStreamScoresResponse -from .shopping_stream_merchants_params import ShoppingStreamMerchantsParams as ShoppingStreamMerchantsParams -from .web_search_result_query_response import WebSearchResultQueryResponse as WebSearchResultQueryResponse -from .accuracy_create_overview_response import AccuracyCreateOverviewResponse as AccuracyCreateOverviewResponse -from .shopping_stream_products_response import ShoppingStreamProductsResponse as ShoppingStreamProductsResponse -from .web_search_result_stream_response import WebSearchResultStreamResponse as WebSearchResultStreamResponse -from .accuracy_create_breakdown_response import AccuracyCreateBreakdownResponse as AccuracyCreateBreakdownResponse -from .accuracy_create_topic_ids_response import AccuracyCreateTopicIDsResponse as AccuracyCreateTopicIDsResponse -from .shopping_stream_merchants_response import ShoppingStreamMerchantsResponse as ShoppingStreamMerchantsResponse -from .shopping_stream_trigger_rate_params import ShoppingStreamTriggerRateParams as ShoppingStreamTriggerRateParams -from .shopping_stream_trigger_rate_response import ( - ShoppingStreamTriggerRateResponse as ShoppingStreamTriggerRateResponse, -) -from .accuracy_create_claim_breakdown_params import ( - AccuracyCreateClaimBreakdownParams as AccuracyCreateClaimBreakdownParams, -) -from .accuracy_create_claim_citations_params import ( - AccuracyCreateClaimCitationsParams as AccuracyCreateClaimCitationsParams, -) -from .accuracy_create_citation_analysis_params import ( - AccuracyCreateCitationAnalysisParams as AccuracyCreateCitationAnalysisParams, -) -from .accuracy_create_claim_breakdown_response import ( - AccuracyCreateClaimBreakdownResponse as AccuracyCreateClaimBreakdownResponse, -) -from .accuracy_create_claim_citations_response import ( - AccuracyCreateClaimCitationsResponse as AccuracyCreateClaimCitationsResponse, -) -from .accuracy_create_inaccurate_themes_params import ( - AccuracyCreateInaccurateThemesParams as AccuracyCreateInaccurateThemesParams, -) -from .accuracy_create_inaccuracy_drivers_params import ( - AccuracyCreateInaccuracyDriversParams as AccuracyCreateInaccuracyDriversParams, -) -from .accuracy_create_citation_analysis_response import ( - AccuracyCreateCitationAnalysisResponse as AccuracyCreateCitationAnalysisResponse, -) -from .accuracy_create_inaccurate_clusters_params import ( - AccuracyCreateInaccurateClustersParams as AccuracyCreateInaccurateClustersParams, -) -from .accuracy_create_inaccurate_themes_response import ( - AccuracyCreateInaccurateThemesResponse as AccuracyCreateInaccurateThemesResponse, -) -from .accuracy_create_cluster_example_runs_params import ( - AccuracyCreateClusterExampleRunsParams as AccuracyCreateClusterExampleRunsParams, -) -from .accuracy_create_inaccuracy_drivers_response import ( - AccuracyCreateInaccuracyDriversResponse as AccuracyCreateInaccuracyDriversResponse, -) -from .accuracy_create_inaccurate_clusters_response import ( - AccuracyCreateInaccurateClustersResponse as AccuracyCreateInaccurateClustersResponse, -) -from .accuracy_create_top_inaccurate_claims_params import ( - AccuracyCreateTopInaccurateClaimsParams as AccuracyCreateTopInaccurateClaimsParams, -) -from .accuracy_create_cluster_example_runs_response import ( - AccuracyCreateClusterExampleRunsResponse as AccuracyCreateClusterExampleRunsResponse, -) -from .accuracy_create_factcheck_setup_status_params import ( - AccuracyCreateFactcheckSetupStatusParams as AccuracyCreateFactcheckSetupStatusParams, -) -from .accuracy_create_top_inaccurate_claims_response import ( - AccuracyCreateTopInaccurateClaimsResponse as AccuracyCreateTopInaccurateClaimsResponse, -) -from .accuracy_create_factcheck_setup_status_response import ( - AccuracyCreateFactcheckSetupStatusResponse as AccuracyCreateFactcheckSetupStatusResponse, -) -from .accuracy_create_cluster_verification_pairs_params import ( - AccuracyCreateClusterVerificationPairsParams as AccuracyCreateClusterVerificationPairsParams, -) -from .accuracy_create_cluster_verification_pairs_response import ( - AccuracyCreateClusterVerificationPairsResponse as AccuracyCreateClusterVerificationPairsResponse, -) diff --git a/src/profound/types/reports/accuracy_create_breakdown_params.py b/src/profound/types/reports/accuracy_create_breakdown_params.py deleted file mode 100644 index 001ff645..00000000 --- a/src/profound/types/reports/accuracy_create_breakdown_params.py +++ /dev/null @@ -1,75 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Optional -from typing_extensions import Literal, Required, TypedDict - -from ..._types import SequenceNotStr - -__all__ = ["AccuracyCreateBreakdownParams", "Pagination"] - - -class AccuracyCreateBreakdownParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] - - start_date: Required[str] - - breakdown_by: Literal["citation", "platform", "topic", "prompt", "tag", "region", "persona", "theme"] - - citation_categories: Optional[SequenceNotStr[str]] - - comparison_end_date: Optional[str] - - comparison_start_date: Optional[str] - - date_bucket: Optional[str] - - exclude_topic_ids: bool - - group_by: Optional[List[Literal["platform", "topic", "prompt", "tag", "region", "persona", "theme", "date"]]] - - include_no_persona: bool - - include_no_tag: bool - - limit: int - - offset: int - - pagination: Optional[Pagination] - """Canonical grouped pagination plan for Accuracy Breakdown rows.""" - - persona_ids: Optional[SequenceNotStr[str]] - - platform_ids: Optional[SequenceNotStr[str]] - - prompt_ids: Optional[SequenceNotStr[str]] - - region_ids: Optional[SequenceNotStr[str]] - - search_query: Optional[str] - - sort_by: Literal["citationShare", "accuracy"] - - sort_order: Literal["asc", "desc"] - - tag_filter_type: Literal["all", "any"] - - tag_ids: Optional[SequenceNotStr[str]] - - topic_ids: Optional[SequenceNotStr[str]] - - -class Pagination(TypedDict, total=False): - """Canonical grouped pagination plan for Accuracy Breakdown rows.""" - - dimension: Literal["group"] - - direction: Optional[Literal["asc", "desc"]] - - metric: Literal["accuracy", "inaccurate_claims"] - - mode: Literal["current", "delta"] diff --git a/src/profound/types/reports/accuracy_create_breakdown_response.py b/src/profound/types/reports/accuracy_create_breakdown_response.py deleted file mode 100644 index c4d1440a..00000000 --- a/src/profound/types/reports/accuracy_create_breakdown_response.py +++ /dev/null @@ -1,45 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Dict, List, Optional - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["AccuracyCreateBreakdownResponse", "Data"] - - -class Data(BaseModel): - id: str - - inaccurate_count: int = FieldInfo(alias="inaccurateCount") - - name: str - - response_accuracy: float = FieldInfo(alias="responseAccuracy") - - share: float - - accuracy_change: Optional[float] = FieldInfo(alias="accuracyChange", default=None) - - accurate_count: Optional[int] = FieldInfo(alias="accurateCount", default=None) - - citation_category: Optional[str] = FieldInfo(alias="citationCategory", default=None) - - group_ids: Optional[Dict[str, str]] = FieldInfo(alias="groupIds", default=None) - - group_names: Optional[Dict[str, str]] = FieldInfo(alias="groupNames", default=None) - - has_score: Optional[bool] = FieldInfo(alias="hasScore", default=None) - - inaccurate_count_change: Optional[int] = FieldInfo(alias="inaccurateCountChange", default=None) - - prompt_count: Optional[int] = FieldInfo(alias="promptCount", default=None) - - share_change: Optional[float] = FieldInfo(alias="shareChange", default=None) - - -class AccuracyCreateBreakdownResponse(BaseModel): - data: List[Data] - - total_count: int = FieldInfo(alias="totalCount") diff --git a/src/profound/types/reports/accuracy_create_citation_analysis_params.py b/src/profound/types/reports/accuracy_create_citation_analysis_params.py deleted file mode 100644 index a4d7a4e7..00000000 --- a/src/profound/types/reports/accuracy_create_citation_analysis_params.py +++ /dev/null @@ -1,17 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing_extensions import Required, TypedDict - -__all__ = ["AccuracyCreateCitationAnalysisParams"] - - -class AccuracyCreateCitationAnalysisParams(TypedDict, total=False): - category_id: Required[str] - - clean_href: Required[str] - - end_date: Required[str] - - start_date: Required[str] diff --git a/src/profound/types/reports/accuracy_create_citation_analysis_response.py b/src/profound/types/reports/accuracy_create_citation_analysis_response.py deleted file mode 100644 index 231ebdfc..00000000 --- a/src/profound/types/reports/accuracy_create_citation_analysis_response.py +++ /dev/null @@ -1,75 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Optional -from typing_extensions import Literal - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["AccuracyCreateCitationAnalysisResponse", "Claim", "ClaimEvidence"] - - -class ClaimEvidence(BaseModel): - """A single knowledge-base ground-truth snippet that refutes a claim's cluster. - - ``kb_name`` is the official knowledge base name; ``kb_path`` is the document - path within that knowledge base. ``kb_name`` is populated by the external API - layer (which can reach the knowledge-base service) and defaults to ``""`` - elsewhere. - """ - - kb_name: Optional[str] = FieldInfo(alias="kbName", default=None) - - kb_path: Optional[str] = FieldInfo(alias="kbPath", default=None) - - kb_snippet: Optional[str] = FieldInfo(alias="kbSnippet", default=None) - - -class Claim(BaseModel): - """A single inaccurate claim mapped to a cluster, surfaced on a cited page. - - ``attribute`` carries the cluster's canonical claim so the drawer can group - claims the same way it groups sentiment attributes. - - ``reasoning`` and ``evidence`` mirror the cluster's FactCheck verdict: the - "why it's inaccurate" explanation plus the refuting knowledge-base snippets - surfaced in the Claim Analysis drawer. ``kb_path``/``kb_snippet`` are retained - as the cluster's single representative snippet for backward compatibility. - """ - - attribute: str - - attribute_id: str = FieldInfo(alias="attributeId") - - claim: str - - claim_id: str = FieldInfo(alias="claimId") - - neutral_theme: str = FieldInfo(alias="neutralTheme") - - neutral_theme_id: str = FieldInfo(alias="neutralThemeId") - - snippet: str - - evidence: Optional[List[ClaimEvidence]] = None - - kb_path: Optional[str] = FieldInfo(alias="kbPath", default=None) - - kb_snippet: Optional[str] = FieldInfo(alias="kbSnippet", default=None) - - polarity: Optional[Literal["positive", "negative"]] = None - - reasoning: Optional[str] = None - - -class AccuracyCreateCitationAnalysisResponse(BaseModel): - domain: str - - href: str - - markdown_content: str = FieldInfo(alias="markdownContent") - - page_title: str = FieldInfo(alias="pageTitle") - - claims: Optional[List[Claim]] = None diff --git a/src/profound/types/reports/accuracy_create_claim_breakdown_response.py b/src/profound/types/reports/accuracy_create_claim_breakdown_response.py deleted file mode 100644 index 494117ca..00000000 --- a/src/profound/types/reports/accuracy_create_claim_breakdown_response.py +++ /dev/null @@ -1,59 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Optional - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["AccuracyCreateClaimBreakdownResponse", "Platform", "Prompt"] - - -class Platform(BaseModel): - id: str - - label: str - - prev_response_count: int = FieldInfo(alias="prevResponseCount") - - prev_total_response_count: int = FieldInfo(alias="prevTotalResponseCount") - - response_count: int = FieldInfo(alias="responseCount") - - response_share: float = FieldInfo(alias="responseShare") - - total_response_count: int = FieldInfo(alias="totalResponseCount") - - response_share_delta: Optional[float] = FieldInfo(alias="responseShareDelta", default=None) - - -class Prompt(BaseModel): - id: str - - has_current: bool = FieldInfo(alias="hasCurrent") - - label: str - - prev_response_count: int = FieldInfo(alias="prevResponseCount") - - prev_total_response_count: int = FieldInfo(alias="prevTotalResponseCount") - - prompt_id: str = FieldInfo(alias="promptId") - - prompt_text: str = FieldInfo(alias="promptText") - - response_count: int = FieldInfo(alias="responseCount") - - response_share: float = FieldInfo(alias="responseShare") - - topic_id: str = FieldInfo(alias="topicId") - - total_response_count: int = FieldInfo(alias="totalResponseCount") - - response_share_delta: Optional[float] = FieldInfo(alias="responseShareDelta", default=None) - - -class AccuracyCreateClaimBreakdownResponse(BaseModel): - platform: List[Platform] - - prompt: List[Prompt] diff --git a/src/profound/types/reports/accuracy_create_claim_citations_response.py b/src/profound/types/reports/accuracy_create_claim_citations_response.py deleted file mode 100644 index c7fbc20a..00000000 --- a/src/profound/types/reports/accuracy_create_claim_citations_response.py +++ /dev/null @@ -1,35 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Optional - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["AccuracyCreateClaimCitationsResponse", "Data"] - - -class Data(BaseModel): - citation_category: str = FieldInfo(alias="citationCategory") - - citation_count: float = FieldInfo(alias="citationCount") - - citation_share: float = FieldInfo(alias="citationShare") - - domain_category: str = FieldInfo(alias="domainCategory") - - hostname: str - - href: str - - path: str - - snippet: str - - citation_share_delta: Optional[float] = FieldInfo(alias="citationShareDelta", default=None) - - -class AccuracyCreateClaimCitationsResponse(BaseModel): - data: List[Data] - - total_count: int = FieldInfo(alias="totalCount") diff --git a/src/profound/types/reports/accuracy_create_cluster_example_runs_params.py b/src/profound/types/reports/accuracy_create_cluster_example_runs_params.py deleted file mode 100644 index ef7071ee..00000000 --- a/src/profound/types/reports/accuracy_create_cluster_example_runs_params.py +++ /dev/null @@ -1,50 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import Literal, Required, TypedDict - -from ..._types import SequenceNotStr - -__all__ = ["AccuracyCreateClusterExampleRunsParams"] - - -class AccuracyCreateClusterExampleRunsParams(TypedDict, total=False): - category_id: Required[str] - - cluster_id: Required[str] - - end_date: Required[str] - - start_date: Required[str] - - citation_categories: Optional[SequenceNotStr[str]] - - comparison_end_date: Optional[str] - - comparison_start_date: Optional[str] - - exclude_topic_ids: bool - - include_no_persona: bool - - include_no_tag: bool - - limit: int - - offset: int - - persona_ids: Optional[SequenceNotStr[str]] - - platform_ids: Optional[SequenceNotStr[str]] - - prompt_ids: Optional[SequenceNotStr[str]] - - region_ids: Optional[SequenceNotStr[str]] - - tag_filter_type: Literal["all", "any"] - - tag_ids: Optional[SequenceNotStr[str]] - - topic_ids: Optional[SequenceNotStr[str]] diff --git a/src/profound/types/reports/accuracy_create_cluster_example_runs_response.py b/src/profound/types/reports/accuracy_create_cluster_example_runs_response.py deleted file mode 100644 index d2fc06b1..00000000 --- a/src/profound/types/reports/accuracy_create_cluster_example_runs_response.py +++ /dev/null @@ -1,29 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["AccuracyCreateClusterExampleRunsResponse", "Data"] - - -class Data(BaseModel): - claim: str - - created_at: str = FieldInfo(alias="createdAt") - - api_model_id: str = FieldInfo(alias="modelId") - - region_id: str = FieldInfo(alias="regionId") - - response_snippet: str = FieldInfo(alias="responseSnippet") - - run_id: str = FieldInfo(alias="runId") - - -class AccuracyCreateClusterExampleRunsResponse(BaseModel): - data: List[Data] - - total_count: int = FieldInfo(alias="totalCount") diff --git a/src/profound/types/reports/accuracy_create_cluster_verification_pairs_params.py b/src/profound/types/reports/accuracy_create_cluster_verification_pairs_params.py deleted file mode 100644 index 0bc65495..00000000 --- a/src/profound/types/reports/accuracy_create_cluster_verification_pairs_params.py +++ /dev/null @@ -1,13 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing_extensions import Required, TypedDict - -__all__ = ["AccuracyCreateClusterVerificationPairsParams"] - - -class AccuracyCreateClusterVerificationPairsParams(TypedDict, total=False): - category_id: Required[str] - - cluster_id: Required[str] diff --git a/src/profound/types/reports/accuracy_create_cluster_verification_pairs_response.py b/src/profound/types/reports/accuracy_create_cluster_verification_pairs_response.py deleted file mode 100644 index bee2fbed..00000000 --- a/src/profound/types/reports/accuracy_create_cluster_verification_pairs_response.py +++ /dev/null @@ -1,29 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Optional - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["AccuracyCreateClusterVerificationPairsResponse", "Data"] - - -class Data(BaseModel): - kb_path: str = FieldInfo(alias="kbPath") - - pair_id: str = FieldInfo(alias="pairId") - - quote: str - - reasoning: str - - snippet_idx: int = FieldInfo(alias="snippetIdx") - - source_updated_at: Optional[str] = FieldInfo(alias="sourceUpdatedAt", default=None) - - -class AccuracyCreateClusterVerificationPairsResponse(BaseModel): - data: List[Data] - - cluster_reasoning: Optional[str] = FieldInfo(alias="clusterReasoning", default=None) diff --git a/src/profound/types/reports/accuracy_create_factcheck_setup_status_params.py b/src/profound/types/reports/accuracy_create_factcheck_setup_status_params.py deleted file mode 100644 index 6480782a..00000000 --- a/src/profound/types/reports/accuracy_create_factcheck_setup_status_params.py +++ /dev/null @@ -1,11 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing_extensions import Required, TypedDict - -__all__ = ["AccuracyCreateFactcheckSetupStatusParams"] - - -class AccuracyCreateFactcheckSetupStatusParams(TypedDict, total=False): - category_id: Required[str] diff --git a/src/profound/types/reports/accuracy_create_inaccuracy_drivers_params.py b/src/profound/types/reports/accuracy_create_inaccuracy_drivers_params.py deleted file mode 100644 index d300e6b1..00000000 --- a/src/profound/types/reports/accuracy_create_inaccuracy_drivers_params.py +++ /dev/null @@ -1,46 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import Literal, Required, TypedDict - -from ..._types import SequenceNotStr - -__all__ = ["AccuracyCreateInaccuracyDriversParams"] - - -class AccuracyCreateInaccuracyDriversParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] - - start_date: Required[str] - - citation_categories: Optional[SequenceNotStr[str]] - - comparison_end_date: Optional[str] - - comparison_start_date: Optional[str] - - exclude_topic_ids: bool - - include_no_persona: bool - - include_no_tag: bool - - limit: int - - persona_ids: Optional[SequenceNotStr[str]] - - platform_ids: Optional[SequenceNotStr[str]] - - prompt_ids: Optional[SequenceNotStr[str]] - - region_ids: Optional[SequenceNotStr[str]] - - tag_filter_type: Literal["all", "any"] - - tag_ids: Optional[SequenceNotStr[str]] - - topic_ids: Optional[SequenceNotStr[str]] diff --git a/src/profound/types/reports/accuracy_create_inaccuracy_drivers_response.py b/src/profound/types/reports/accuracy_create_inaccuracy_drivers_response.py deleted file mode 100644 index 3e92e15c..00000000 --- a/src/profound/types/reports/accuracy_create_inaccuracy_drivers_response.py +++ /dev/null @@ -1,39 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Optional - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["AccuracyCreateInaccuracyDriversResponse", "Data"] - - -class Data(BaseModel): - """A top inaccurate claim paired with one of its most-cited pages.""" - - canonical_claim: str = FieldInfo(alias="canonicalClaim") - - citation_category: str = FieldInfo(alias="citationCategory") - - citation_count: int = FieldInfo(alias="citationCount") - - claim_occurrence: float = FieldInfo(alias="claimOccurrence") - - cluster_id: str = FieldInfo(alias="clusterId") - - domain_category: str = FieldInfo(alias="domainCategory") - - href: str - - row_id: str = FieldInfo(alias="rowId") - - snippet: str - - snippet_claim_id: str = FieldInfo(alias="snippetClaimId") - - claim_occurrence_delta: Optional[float] = FieldInfo(alias="claimOccurrenceDelta", default=None) - - -class AccuracyCreateInaccuracyDriversResponse(BaseModel): - data: List[Data] diff --git a/src/profound/types/reports/accuracy_create_inaccurate_clusters_response.py b/src/profound/types/reports/accuracy_create_inaccurate_clusters_response.py deleted file mode 100644 index 96c7a11d..00000000 --- a/src/profound/types/reports/accuracy_create_inaccurate_clusters_response.py +++ /dev/null @@ -1,51 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Optional - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["AccuracyCreateInaccurateClustersResponse", "Data", "DataModel"] - - -class DataModel(BaseModel): - api_model_id: str = FieldInfo(alias="modelId") - - occurrence: float - - -class Data(BaseModel): - canonical_claim: str = FieldInfo(alias="canonicalClaim") - - citation_hostnames: List[str] = FieldInfo(alias="citationHostnames") - - claim_count: int = FieldInfo(alias="claimCount") - - cluster_id: str = FieldInfo(alias="clusterId") - - kb_path: str = FieldInfo(alias="kbPath") - - kb_snippet: str = FieldInfo(alias="kbSnippet") - - reasoning: str - - response_count: int = FieldInfo(alias="responseCount") - - response_share: float = FieldInfo(alias="responseShare") - - total_response_count: int = FieldInfo(alias="totalResponseCount") - - description: Optional[str] = None - - models: Optional[List[DataModel]] = None - - neutral_theme: Optional[str] = FieldInfo(alias="neutralTheme", default=None) - - response_share_delta: Optional[float] = FieldInfo(alias="responseShareDelta", default=None) - - -class AccuracyCreateInaccurateClustersResponse(BaseModel): - data: List[Data] - - total_count: int = FieldInfo(alias="totalCount") diff --git a/src/profound/types/reports/accuracy_create_inaccurate_themes_response.py b/src/profound/types/reports/accuracy_create_inaccurate_themes_response.py deleted file mode 100644 index 67ed51c4..00000000 --- a/src/profound/types/reports/accuracy_create_inaccurate_themes_response.py +++ /dev/null @@ -1,39 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Optional - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["AccuracyCreateInaccurateThemesResponse", "Data"] - - -class Data(BaseModel): - inaccurate_claim_count: int = FieldInfo(alias="inaccurateClaimCount") - - inaccurate_cluster_count: int = FieldInfo(alias="inaccurateClusterCount") - - neutral_theme: str = FieldInfo(alias="neutralTheme") - - response_count: int = FieldInfo(alias="responseCount") - - response_share: float = FieldInfo(alias="responseShare") - - theme_id: str = FieldInfo(alias="themeId") - - total_claim_count: int = FieldInfo(alias="totalClaimCount") - - total_cluster_count: int = FieldInfo(alias="totalClusterCount") - - total_response_count: int = FieldInfo(alias="totalResponseCount") - - description: Optional[str] = None - - response_share_delta: Optional[float] = FieldInfo(alias="responseShareDelta", default=None) - - -class AccuracyCreateInaccurateThemesResponse(BaseModel): - data: List[Data] - - total_count: int = FieldInfo(alias="totalCount") diff --git a/src/profound/types/reports/accuracy_create_overview_response.py b/src/profound/types/reports/accuracy_create_overview_response.py deleted file mode 100644 index 4e6d43f7..00000000 --- a/src/profound/types/reports/accuracy_create_overview_response.py +++ /dev/null @@ -1,82 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Optional - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = [ - "AccuracyCreateOverviewResponse", - "ScoreBreakdown", - "TrendByPeriod", - "AvailableSeries", - "ThemeTrend", - "ThemeTrendData", -] - - -class ScoreBreakdown(BaseModel): - count: int - - share: float - - status: str - - count_change: Optional[int] = FieldInfo(alias="countChange", default=None) - - share_change: Optional[float] = FieldInfo(alias="shareChange", default=None) - - -class TrendByPeriod(BaseModel): - accurate: int - - date: str - - ratio: float - - total: int - - prev_period_data: Optional[object] = FieldInfo(alias="prevPeriodData", default=None) - - verified: Optional[int] = None - - -class AvailableSeries(BaseModel): - id: str - - label: str - - total: int - - -class ThemeTrendData(BaseModel): - accurate: int - - date: str - - ratio: float - - total: int - - -class ThemeTrend(BaseModel): - id: str - - data: List[ThemeTrendData] - - label: str - - -class AccuracyCreateOverviewResponse(BaseModel): - overall_accuracy: float = FieldInfo(alias="overallAccuracy") - - score_breakdown: List[ScoreBreakdown] = FieldInfo(alias="scoreBreakdown") - - trend_by_period: List[TrendByPeriod] = FieldInfo(alias="trendByPeriod") - - accuracy_change: Optional[float] = FieldInfo(alias="accuracyChange", default=None) - - available_series: Optional[List[AvailableSeries]] = FieldInfo(alias="availableSeries", default=None) - - theme_trend: Optional[List[ThemeTrend]] = FieldInfo(alias="themeTrend", default=None) diff --git a/src/profound/types/reports/accuracy_create_top_inaccurate_claims_params.py b/src/profound/types/reports/accuracy_create_top_inaccurate_claims_params.py deleted file mode 100644 index ab32110f..00000000 --- a/src/profound/types/reports/accuracy_create_top_inaccurate_claims_params.py +++ /dev/null @@ -1,46 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import Literal, Required, TypedDict - -from ..._types import SequenceNotStr - -__all__ = ["AccuracyCreateTopInaccurateClaimsParams"] - - -class AccuracyCreateTopInaccurateClaimsParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] - - start_date: Required[str] - - citation_categories: Optional[SequenceNotStr[str]] - - comparison_end_date: Optional[str] - - comparison_start_date: Optional[str] - - exclude_topic_ids: bool - - include_no_persona: bool - - include_no_tag: bool - - limit: int - - persona_ids: Optional[SequenceNotStr[str]] - - platform_ids: Optional[SequenceNotStr[str]] - - prompt_ids: Optional[SequenceNotStr[str]] - - region_ids: Optional[SequenceNotStr[str]] - - tag_filter_type: Literal["all", "any"] - - tag_ids: Optional[SequenceNotStr[str]] - - topic_ids: Optional[SequenceNotStr[str]] diff --git a/src/profound/types/reports/accuracy_create_top_inaccurate_claims_response.py b/src/profound/types/reports/accuracy_create_top_inaccurate_claims_response.py deleted file mode 100644 index 5228de2e..00000000 --- a/src/profound/types/reports/accuracy_create_top_inaccurate_claims_response.py +++ /dev/null @@ -1,23 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Optional - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["AccuracyCreateTopInaccurateClaimsResponse", "Data"] - - -class Data(BaseModel): - canonical_claim: str = FieldInfo(alias="canonicalClaim") - - claim_occurrence: float = FieldInfo(alias="claimOccurrence") - - cluster_id: str = FieldInfo(alias="clusterId") - - claim_occurrence_delta: Optional[float] = FieldInfo(alias="claimOccurrenceDelta", default=None) - - -class AccuracyCreateTopInaccurateClaimsResponse(BaseModel): - data: List[Data] diff --git a/src/profound/types/reports/accuracy_create_topic_ids_params.py b/src/profound/types/reports/accuracy_create_topic_ids_params.py deleted file mode 100644 index e7742231..00000000 --- a/src/profound/types/reports/accuracy_create_topic_ids_params.py +++ /dev/null @@ -1,15 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing_extensions import Required, TypedDict - -__all__ = ["AccuracyCreateTopicIDsParams"] - - -class AccuracyCreateTopicIDsParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] - - start_date: Required[str] diff --git a/src/profound/types/reports/accuracy_create_topic_ids_response.py b/src/profound/types/reports/accuracy_create_topic_ids_response.py deleted file mode 100644 index 2702e6f1..00000000 --- a/src/profound/types/reports/accuracy_create_topic_ids_response.py +++ /dev/null @@ -1,8 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List -from typing_extensions import TypeAlias - -__all__ = ["AccuracyCreateTopicIDsResponse"] - -AccuracyCreateTopicIDsResponse: TypeAlias = List[str] diff --git a/src/profound/types/reports/factcheck/__init__.py b/src/profound/types/reports/factcheck/__init__.py deleted file mode 100644 index 0285e14a..00000000 --- a/src/profound/types/reports/factcheck/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from .claim_query_claims_params import ClaimQueryClaimsParams as ClaimQueryClaimsParams -from .claim_stream_claims_params import ClaimStreamClaimsParams as ClaimStreamClaimsParams -from .claim_query_claims_response import ClaimQueryClaimsResponse as ClaimQueryClaimsResponse -from .claim_stream_claims_response import ClaimStreamClaimsResponse as ClaimStreamClaimsResponse diff --git a/src/profound/types/reports/factcheck/claim_query_claims_params.py b/src/profound/types/reports/factcheck/claim_query_claims_params.py deleted file mode 100644 index 9c3c679f..00000000 --- a/src/profound/types/reports/factcheck/claim_query_claims_params.py +++ /dev/null @@ -1,59 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Iterable, Optional -from typing_extensions import Literal, Required, TypedDict - -__all__ = ["ClaimQueryClaimsParams", "Filter"] - - -class ClaimQueryClaimsParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - cursor: Optional[str] - - filter: Optional[Filter] - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - group_by: List[Literal["model", "region", "persona", "prompt", "topic", "tag", "theme"]] - """Optional single dim to section the claims (e.g. - - per model). Empty → one flat claim list. - """ - - include: Optional[List[Literal["theme", "reasoning", "models", "evidence", "citation_sources"]]] - """Optional per-claim detail fields to add to each claim (see options).""" - - limit: Optional[int] - """Claims (or sections) per page; default 25.""" - - max_results: Optional[int] - """Stream only: cap entries returned.""" - - -_FilterReservedKeywords = TypedDict( - "_FilterReservedKeywords", - { - "and": Optional[Iterable[object]], - "not": object, - "or": Optional[Iterable[object]], - }, - total=False, -) - - -class Filter(_FilterReservedKeywords, total=False): - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - field: Optional[str] - - op: Optional[str] - - value: object diff --git a/src/profound/types/reports/factcheck/claim_query_claims_response.py b/src/profound/types/reports/factcheck/claim_query_claims_response.py deleted file mode 100644 index b813bb18..00000000 --- a/src/profound/types/reports/factcheck/claim_query_claims_response.py +++ /dev/null @@ -1,290 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import TYPE_CHECKING, Dict, List, Union, Optional -from typing_extensions import TypeAlias - -from pydantic import Field as FieldInfo - -from ...._models import BaseModel - -__all__ = [ - "ClaimQueryClaimsResponse", - "Data", - "DataCitationSource", - "DataClaim", - "DataClaimCitationSource", - "DataClaimEvidence", - "DataClaimModel", - "DataEvidence", - "DataModel", - "DataPersona", - "DataPrompt", - "DataRegion", - "DataTag", - "DataTheme", - "DataThemeDimensionRef", - "DataTopic", - "Info", -] - - -class DataCitationSource(BaseModel): - citation_category: Optional[str] = None - - citation_share: Optional[float] = None - - domain_category: Optional[str] = None - - hostname: Optional[str] = None - - href: Optional[str] = None - - snippet: Optional[str] = None - - -class DataClaimCitationSource(BaseModel): - citation_category: Optional[str] = None - - citation_share: Optional[float] = None - - domain_category: Optional[str] = None - - hostname: Optional[str] = None - - href: Optional[str] = None - - snippet: Optional[str] = None - - -class DataClaimEvidence(BaseModel): - id: Optional[str] = None - - kb_path: Optional[str] = None - - kb_snippet: Optional[str] = None - - source_updated_at: Optional[str] = None - - -class DataClaimModel(BaseModel): - id: Optional[str] = None - - name: Optional[str] = None - - occurrence: Optional[float] = None - - -class DataClaim(BaseModel): - """One inaccurate claim. - - `theme`/`reasoning`/`models`/`evidence`/`citation_sources` follow `include`. - """ - - citation_sources: Optional[List[DataClaimCitationSource]] = None - - claim: Optional[str] = None - - cluster_id: Optional[str] = None - - evidence: Optional[List[DataClaimEvidence]] = None - - models: Optional[List[DataClaimModel]] = None - - occurrence: Optional[float] = None - - reasoning: Optional[str] = None - - theme: Optional[str] = None - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class DataEvidence(BaseModel): - id: Optional[str] = None - - kb_path: Optional[str] = None - - kb_snippet: Optional[str] = None - - source_updated_at: Optional[str] = None - - -class DataModel(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataPersona(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataPrompt(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataRegion(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataTag(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataThemeDimensionRef(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -DataTheme: TypeAlias = Union[str, DataThemeDimensionRef, None] - - -class DataTopic(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class Data(BaseModel): - """ - A flat claim, or (with `group_by`) a section: a dimension + accuracy rollup + its `claims`. - - Present fields depend on `group_by`/`include`. - """ - - accuracy: Optional[float] = None - - accurate: Optional[int] = None - - citation_sources: Optional[List[DataCitationSource]] = None - - claim: Optional[str] = None - - claims: Optional[List[DataClaim]] = None - - cluster_id: Optional[str] = None - - evidence: Optional[List[DataEvidence]] = None - - inaccurate: Optional[int] = None - - model: Optional[DataModel] = None - """An `{id, name}` reference for a grouped dimension value.""" - - models: Optional[List[DataModel]] = None - - occurrence: Optional[float] = None - - persona: Optional[DataPersona] = None - """An `{id, name}` reference for a grouped dimension value.""" - - prompt: Optional[DataPrompt] = None - """An `{id, name}` reference for a grouped dimension value.""" - - reasoning: Optional[str] = None - - region: Optional[DataRegion] = None - """An `{id, name}` reference for a grouped dimension value.""" - - tag: Optional[DataTag] = None - """An `{id, name}` reference for a grouped dimension value.""" - - theme: Optional[DataTheme] = None - """Claim theme (string), or an `{id, name}` ref when sectioning by `theme`.""" - - topic: Optional[DataTopic] = None - """An `{id, name}` reference for a grouped dimension value.""" - - total_claims: Optional[int] = None - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class Info(BaseModel): - count: int - """Number of rows returned in `data` for this page.""" - - end_date: str - """Echoed request end date (YYYY-MM-DD, ET).""" - - group_by: List[str] - """Dimension the claims are sectioned by (empty → one flat list).""" - - models: List[str] - """Display names of the models the report covers.""" - - start_date: str - """Echoed request start date (YYYY-MM-DD, ET).""" - - filter: Optional[Dict[str, object]] = None - """Echoed normalized filter tree, or null when no filter was sent.""" - - include: Optional[List[str]] = None - """Per-claim detail fields requested.""" - - next_cursor: Optional[str] = None - """Opaque cursor for the next page; null on the last page.""" - - total_results: Optional[int] = None - """Total rows matching the query before pagination (null when not computed).""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class ClaimQueryClaimsResponse(BaseModel): - data: List[Data] - - info: Info diff --git a/src/profound/types/reports/factcheck/claim_stream_claims_params.py b/src/profound/types/reports/factcheck/claim_stream_claims_params.py deleted file mode 100644 index f2d6e520..00000000 --- a/src/profound/types/reports/factcheck/claim_stream_claims_params.py +++ /dev/null @@ -1,59 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Iterable, Optional -from typing_extensions import Literal, Required, TypedDict - -__all__ = ["ClaimStreamClaimsParams", "Filter"] - - -class ClaimStreamClaimsParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - cursor: Optional[str] - - filter: Optional[Filter] - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - group_by: List[Literal["model", "region", "persona", "prompt", "topic", "tag", "theme"]] - """Optional single dim to section the claims (e.g. - - per model). Empty → one flat claim list. - """ - - include: Optional[List[Literal["theme", "reasoning", "models", "evidence", "citation_sources"]]] - """Optional per-claim detail fields to add to each claim (see options).""" - - limit: Optional[int] - """Claims (or sections) per page; default 25.""" - - max_results: Optional[int] - """Stream only: cap entries returned.""" - - -_FilterReservedKeywords = TypedDict( - "_FilterReservedKeywords", - { - "and": Optional[Iterable[object]], - "not": object, - "or": Optional[Iterable[object]], - }, - total=False, -) - - -class Filter(_FilterReservedKeywords, total=False): - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - field: Optional[str] - - op: Optional[str] - - value: object diff --git a/src/profound/types/reports/factcheck/claim_stream_claims_response.py b/src/profound/types/reports/factcheck/claim_stream_claims_response.py deleted file mode 100644 index 9d71dc29..00000000 --- a/src/profound/types/reports/factcheck/claim_stream_claims_response.py +++ /dev/null @@ -1,285 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import TYPE_CHECKING, Dict, List, Union, Optional -from typing_extensions import TypeAlias - -from pydantic import Field as FieldInfo - -from ...._models import BaseModel - -__all__ = [ - "ClaimStreamClaimsResponse", - "FactcheckClaimsInfo", - "FactcheckClaimsRow", - "FactcheckClaimsRowCitationSource", - "FactcheckClaimsRowClaim", - "FactcheckClaimsRowClaimCitationSource", - "FactcheckClaimsRowClaimEvidence", - "FactcheckClaimsRowClaimModel", - "FactcheckClaimsRowEvidence", - "FactcheckClaimsRowModel", - "FactcheckClaimsRowPersona", - "FactcheckClaimsRowPrompt", - "FactcheckClaimsRowRegion", - "FactcheckClaimsRowTag", - "FactcheckClaimsRowTheme", - "FactcheckClaimsRowThemeDimensionRef", - "FactcheckClaimsRowTopic", -] - - -class FactcheckClaimsInfo(BaseModel): - """`summary` event payload (the report `info` block).""" - - count: int - """Number of rows returned in `data` for this page.""" - - end_date: str - """Echoed request end date (YYYY-MM-DD, ET).""" - - group_by: List[str] - """Dimension the claims are sectioned by (empty → one flat list).""" - - models: List[str] - """Display names of the models the report covers.""" - - start_date: str - """Echoed request start date (YYYY-MM-DD, ET).""" - - filter: Optional[Dict[str, object]] = None - """Echoed normalized filter tree, or null when no filter was sent.""" - - include: Optional[List[str]] = None - """Per-claim detail fields requested.""" - - next_cursor: Optional[str] = None - """Opaque cursor for the next page; null on the last page.""" - - total_results: Optional[int] = None - """Total rows matching the query before pagination (null when not computed).""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class FactcheckClaimsRowCitationSource(BaseModel): - citation_category: Optional[str] = None - - citation_share: Optional[float] = None - - domain_category: Optional[str] = None - - hostname: Optional[str] = None - - href: Optional[str] = None - - snippet: Optional[str] = None - - -class FactcheckClaimsRowClaimCitationSource(BaseModel): - citation_category: Optional[str] = None - - citation_share: Optional[float] = None - - domain_category: Optional[str] = None - - hostname: Optional[str] = None - - href: Optional[str] = None - - snippet: Optional[str] = None - - -class FactcheckClaimsRowClaimEvidence(BaseModel): - id: Optional[str] = None - - kb_path: Optional[str] = None - - kb_snippet: Optional[str] = None - - source_updated_at: Optional[str] = None - - -class FactcheckClaimsRowClaimModel(BaseModel): - id: Optional[str] = None - - name: Optional[str] = None - - occurrence: Optional[float] = None - - -class FactcheckClaimsRowClaim(BaseModel): - """One inaccurate claim. - - `theme`/`reasoning`/`models`/`evidence`/`citation_sources` follow `include`. - """ - - citation_sources: Optional[List[FactcheckClaimsRowClaimCitationSource]] = None - - claim: Optional[str] = None - - cluster_id: Optional[str] = None - - evidence: Optional[List[FactcheckClaimsRowClaimEvidence]] = None - - models: Optional[List[FactcheckClaimsRowClaimModel]] = None - - occurrence: Optional[float] = None - - reasoning: Optional[str] = None - - theme: Optional[str] = None - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class FactcheckClaimsRowEvidence(BaseModel): - id: Optional[str] = None - - kb_path: Optional[str] = None - - kb_snippet: Optional[str] = None - - source_updated_at: Optional[str] = None - - -class FactcheckClaimsRowModel(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class FactcheckClaimsRowPersona(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class FactcheckClaimsRowPrompt(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class FactcheckClaimsRowRegion(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class FactcheckClaimsRowTag(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class FactcheckClaimsRowThemeDimensionRef(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -FactcheckClaimsRowTheme: TypeAlias = Union[str, FactcheckClaimsRowThemeDimensionRef, None] - - -class FactcheckClaimsRowTopic(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class FactcheckClaimsRow(BaseModel): - """`result` event payload — one inaccurate claim.""" - - accuracy: Optional[float] = None - - accurate: Optional[int] = None - - citation_sources: Optional[List[FactcheckClaimsRowCitationSource]] = None - - claim: Optional[str] = None - - claims: Optional[List[FactcheckClaimsRowClaim]] = None - - cluster_id: Optional[str] = None - - evidence: Optional[List[FactcheckClaimsRowEvidence]] = None - - inaccurate: Optional[int] = None - - model: Optional[FactcheckClaimsRowModel] = None - """An `{id, name}` reference for a grouped dimension value.""" - - models: Optional[List[FactcheckClaimsRowModel]] = None - - occurrence: Optional[float] = None - - persona: Optional[FactcheckClaimsRowPersona] = None - """An `{id, name}` reference for a grouped dimension value.""" - - prompt: Optional[FactcheckClaimsRowPrompt] = None - """An `{id, name}` reference for a grouped dimension value.""" - - reasoning: Optional[str] = None - - region: Optional[FactcheckClaimsRowRegion] = None - """An `{id, name}` reference for a grouped dimension value.""" - - tag: Optional[FactcheckClaimsRowTag] = None - """An `{id, name}` reference for a grouped dimension value.""" - - theme: Optional[FactcheckClaimsRowTheme] = None - """Claim theme (string), or an `{id, name}` ref when sectioning by `theme`.""" - - topic: Optional[FactcheckClaimsRowTopic] = None - """An `{id, name}` reference for a grouped dimension value.""" - - total_claims: Optional[int] = None - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -ClaimStreamClaimsResponse: TypeAlias = Union[FactcheckClaimsInfo, FactcheckClaimsRow] diff --git a/src/profound/types/reports/factcheck_query_scores_params.py b/src/profound/types/reports/factcheck_query_scores_params.py deleted file mode 100644 index 03f9b888..00000000 --- a/src/profound/types/reports/factcheck_query_scores_params.py +++ /dev/null @@ -1,56 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Iterable, Optional -from typing_extensions import Literal, Required, TypedDict - -__all__ = ["FactcheckQueryScoresParams", "Filter"] - - -class FactcheckQueryScoresParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - cursor: Optional[str] - - filter: Optional[Filter] - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - group_by: List[Literal["date", "model", "region", "persona", "prompt", "topic", "tag", "citation", "theme"]] - """Up to two dimensions to slice by; empty returns the headline score. - - `citation` must be alone. - """ - - limit: Optional[int] - """Rows per page; default 100.""" - - max_results: Optional[int] - """Stream only: cap rows returned.""" - - -_FilterReservedKeywords = TypedDict( - "_FilterReservedKeywords", - { - "and": Optional[Iterable[object]], - "not": object, - "or": Optional[Iterable[object]], - }, - total=False, -) - - -class Filter(_FilterReservedKeywords, total=False): - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - field: Optional[str] - - op: Optional[str] - - value: object diff --git a/src/profound/types/reports/factcheck_query_scores_response.py b/src/profound/types/reports/factcheck_query_scores_response.py deleted file mode 100644 index 889bc9b7..00000000 --- a/src/profound/types/reports/factcheck_query_scores_response.py +++ /dev/null @@ -1,176 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import TYPE_CHECKING, Dict, List, Optional - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = [ - "FactcheckQueryScoresResponse", - "Data", - "DataCitation", - "DataModel", - "DataPersona", - "DataPrompt", - "DataRegion", - "DataTag", - "DataTheme", - "DataTopic", - "Info", -] - - -class DataCitation(BaseModel): - citation_category: Optional[str] = None - - url: Optional[str] = None - - -class DataModel(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataPersona(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataPrompt(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataRegion(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataTag(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataTheme(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataTopic(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class Data(BaseModel): - """ - An accuracy score row: the headline (no dims), a daily point, or a per-dimension breakdown. - """ - - accuracy: Optional[float] = None - - accurate: Optional[int] = None - - citation: Optional[DataCitation] = None - - date: Optional[str] = None - - inaccurate: Optional[int] = None - - model: Optional[DataModel] = None - """An `{id, name}` reference for a grouped dimension value.""" - - persona: Optional[DataPersona] = None - """An `{id, name}` reference for a grouped dimension value.""" - - prompt: Optional[DataPrompt] = None - """An `{id, name}` reference for a grouped dimension value.""" - - region: Optional[DataRegion] = None - """An `{id, name}` reference for a grouped dimension value.""" - - tag: Optional[DataTag] = None - """An `{id, name}` reference for a grouped dimension value.""" - - theme: Optional[DataTheme] = None - """An `{id, name}` reference for a grouped dimension value.""" - - topic: Optional[DataTopic] = None - """An `{id, name}` reference for a grouped dimension value.""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class Info(BaseModel): - count: int - """Number of rows returned in `data` for this page.""" - - end_date: str - """Echoed request end date (YYYY-MM-DD, ET).""" - - group_by: List[str] - """Dimensions the scores are sliced by (empty → headline).""" - - models: List[str] - """Display names of the models the report covers.""" - - start_date: str - """Echoed request start date (YYYY-MM-DD, ET).""" - - filter: Optional[Dict[str, object]] = None - """Echoed normalized filter tree, or null when no filter was sent.""" - - next_cursor: Optional[str] = None - """Opaque cursor for the next page; null on the last page.""" - - total_results: Optional[int] = None - """Total rows matching the query before pagination (null when not computed).""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class FactcheckQueryScoresResponse(BaseModel): - data: List[Data] - - info: Info diff --git a/src/profound/types/reports/factcheck_stream_scores_params.py b/src/profound/types/reports/factcheck_stream_scores_params.py deleted file mode 100644 index 7d093fc5..00000000 --- a/src/profound/types/reports/factcheck_stream_scores_params.py +++ /dev/null @@ -1,56 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Iterable, Optional -from typing_extensions import Literal, Required, TypedDict - -__all__ = ["FactcheckStreamScoresParams", "Filter"] - - -class FactcheckStreamScoresParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - cursor: Optional[str] - - filter: Optional[Filter] - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - group_by: List[Literal["date", "model", "region", "persona", "prompt", "topic", "tag", "citation", "theme"]] - """Up to two dimensions to slice by; empty returns the headline score. - - `citation` must be alone. - """ - - limit: Optional[int] - """Rows per page; default 100.""" - - max_results: Optional[int] - """Stream only: cap rows returned.""" - - -_FilterReservedKeywords = TypedDict( - "_FilterReservedKeywords", - { - "and": Optional[Iterable[object]], - "not": object, - "or": Optional[Iterable[object]], - }, - total=False, -) - - -class Filter(_FilterReservedKeywords, total=False): - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - field: Optional[str] - - op: Optional[str] - - value: object diff --git a/src/profound/types/reports/factcheck_stream_scores_response.py b/src/profound/types/reports/factcheck_stream_scores_response.py deleted file mode 100644 index 1a1bd2db..00000000 --- a/src/profound/types/reports/factcheck_stream_scores_response.py +++ /dev/null @@ -1,174 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import TYPE_CHECKING, Dict, List, Union, Optional -from typing_extensions import TypeAlias - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = [ - "FactcheckStreamScoresResponse", - "FactcheckScoresInfo", - "FactcheckScoreRow", - "FactcheckScoreRowCitation", - "FactcheckScoreRowModel", - "FactcheckScoreRowPersona", - "FactcheckScoreRowPrompt", - "FactcheckScoreRowRegion", - "FactcheckScoreRowTag", - "FactcheckScoreRowTheme", - "FactcheckScoreRowTopic", -] - - -class FactcheckScoresInfo(BaseModel): - """`summary` event payload (the report `info` block).""" - - count: int - """Number of rows returned in `data` for this page.""" - - end_date: str - """Echoed request end date (YYYY-MM-DD, ET).""" - - group_by: List[str] - """Dimensions the scores are sliced by (empty → headline).""" - - models: List[str] - """Display names of the models the report covers.""" - - start_date: str - """Echoed request start date (YYYY-MM-DD, ET).""" - - filter: Optional[Dict[str, object]] = None - """Echoed normalized filter tree, or null when no filter was sent.""" - - next_cursor: Optional[str] = None - """Opaque cursor for the next page; null on the last page.""" - - total_results: Optional[int] = None - """Total rows matching the query before pagination (null when not computed).""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class FactcheckScoreRowCitation(BaseModel): - citation_category: Optional[str] = None - - url: Optional[str] = None - - -class FactcheckScoreRowModel(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class FactcheckScoreRowPersona(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class FactcheckScoreRowPrompt(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class FactcheckScoreRowRegion(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class FactcheckScoreRowTag(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class FactcheckScoreRowTheme(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class FactcheckScoreRowTopic(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class FactcheckScoreRow(BaseModel): - """`result` event payload — one accuracy score row.""" - - accuracy: Optional[float] = None - - accurate: Optional[int] = None - - citation: Optional[FactcheckScoreRowCitation] = None - - date: Optional[str] = None - - inaccurate: Optional[int] = None - - model: Optional[FactcheckScoreRowModel] = None - """An `{id, name}` reference for a grouped dimension value.""" - - persona: Optional[FactcheckScoreRowPersona] = None - """An `{id, name}` reference for a grouped dimension value.""" - - prompt: Optional[FactcheckScoreRowPrompt] = None - """An `{id, name}` reference for a grouped dimension value.""" - - region: Optional[FactcheckScoreRowRegion] = None - """An `{id, name}` reference for a grouped dimension value.""" - - tag: Optional[FactcheckScoreRowTag] = None - """An `{id, name}` reference for a grouped dimension value.""" - - theme: Optional[FactcheckScoreRowTheme] = None - """An `{id, name}` reference for a grouped dimension value.""" - - topic: Optional[FactcheckScoreRowTopic] = None - """An `{id, name}` reference for a grouped dimension value.""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -FactcheckStreamScoresResponse: TypeAlias = Union[FactcheckScoresInfo, FactcheckScoreRow] diff --git a/src/profound/types/reports/shopping_brands_params.py b/src/profound/types/reports/shopping_brands_params.py deleted file mode 100644 index 475b17b5..00000000 --- a/src/profound/types/reports/shopping_brands_params.py +++ /dev/null @@ -1,63 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Union, Iterable, Optional -from typing_extensions import Literal, Required, TypedDict - -from ..._types import SequenceNotStr - -__all__ = ["ShoppingBrandsParams", "Filter"] - - -class ShoppingBrandsParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - assets: Union[str, SequenceNotStr[str], None] - """Restrict to these asset names (a name or list). Overrides `scope`.""" - - cursor: Optional[str] - - filter: Optional[Filter] - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - group_by: List[Literal["date", "topic", "region", "prompt"]] - - interval: Literal["day", "week", "month"] - - limit: Optional[int] - """Page size for scope=all; default 10, max 50.""" - - max_results: Optional[int] - """Stream endpoint only: cap the number of streamed rows (default: all).""" - - metrics: Optional[List[Literal["visibility_score", "average_position", "visibility_rank"]]] - - scope: Literal["owned", "all"] - - -_FilterReservedKeywords = TypedDict( - "_FilterReservedKeywords", - { - "and": Optional[Iterable[object]], - "not": object, - "or": Optional[Iterable[object]], - }, - total=False, -) - - -class Filter(_FilterReservedKeywords, total=False): - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - field: Optional[str] - - op: Optional[str] - - value: object diff --git a/src/profound/types/reports/shopping_brands_response.py b/src/profound/types/reports/shopping_brands_response.py deleted file mode 100644 index 0f1eb41e..00000000 --- a/src/profound/types/reports/shopping_brands_response.py +++ /dev/null @@ -1,129 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import TYPE_CHECKING, Dict, List, Union, Optional - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["ShoppingBrandsResponse", "Data", "DataPrompt", "DataRegion", "DataTopic", "Info"] - - -class DataPrompt(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataRegion(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataTopic(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class Data(BaseModel): - """One (asset x group) row. - - Group dims/metrics present depend on `group_by`/`metrics`. - """ - - asset: Optional[Dict[str, object]] = None - - average_position: Optional[float] = None - - date: Optional[str] = None - - prompt: Optional[DataPrompt] = None - """An `{id, name}` reference for a grouped dimension value.""" - - rank: Optional[int] = None - """Asset visibility rank as a top-level field (ungrouped only).""" - - region: Optional[DataRegion] = None - """An `{id, name}` reference for a grouped dimension value.""" - - topic: Optional[DataTopic] = None - """An `{id, name}` reference for a grouped dimension value.""" - - visibility_rank: Optional[int] = None - """Asset visibility rank (present on grouped rows).""" - - visibility_score: Optional[float] = None - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class Info(BaseModel): - count: int - """Number of assets on this page. - - When grouped by `date`, `data` holds one row per asset x bucket, so `len(data)` - can exceed `count`. - """ - - end_date: str - """Echoed request end date (YYYY-MM-DD, ET).""" - - metrics: List[str] - """Metrics returned per row.""" - - models: List[str] - """Display names of the models the report covers.""" - - scope: str - """Asset scope: `all`, `owned`, or `custom` when `assets` was given.""" - - start_date: str - """Echoed request start date (YYYY-MM-DD, ET).""" - - assets: Union[str, List[str], None] = None - """Echoed `assets` selection; when set it overrides `scope`.""" - - filter: Optional[Dict[str, object]] = None - """Echoed normalized filter tree, or null when no filter was sent.""" - - next_cursor: Optional[str] = None - """Opaque cursor for the next page; null on the last page.""" - - total_results: Optional[int] = None - """Total assets matching the query before pagination.""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class ShoppingBrandsResponse(BaseModel): - data: List[Data] - - info: Info diff --git a/src/profound/types/reports/shopping_merchants_params.py b/src/profound/types/reports/shopping_merchants_params.py deleted file mode 100644 index 741b4d50..00000000 --- a/src/profound/types/reports/shopping_merchants_params.py +++ /dev/null @@ -1,74 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Iterable, Optional -from typing_extensions import Literal, Required, TypedDict - -__all__ = ["ShoppingMerchantsParams", "Filter"] - - -class ShoppingMerchantsParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - cursor: Optional[str] - - filter: Optional[Filter] - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - group_by: List[Literal["date", "brand", "product"]] - """ - `[]` = distribution; `[brand]` = brand share within each merchant; `[product]` = - top products per merchant. `date` (distribution only) adds a time series. - """ - - interval: Literal["day", "week", "month"] - - limit: Optional[int] - """Page size; default 10, max 50.""" - - max_results: Optional[int] - """Stream endpoint only: cap streamed rows.""" - - metrics: Optional[ - List[ - Literal[ - "merchant_share", - "merchant_share_rank", - "merchant_visibility", - "merchant_visibility_rank", - "visibility_rank", - "brand_share", - "product_visibility", - "product_rank", - ] - ] - ] - """Defaults to the chosen view's metrics; must be valid for that view.""" - - -_FilterReservedKeywords = TypedDict( - "_FilterReservedKeywords", - { - "and": Optional[Iterable[object]], - "not": object, - "or": Optional[Iterable[object]], - }, - total=False, -) - - -class Filter(_FilterReservedKeywords, total=False): - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - field: Optional[str] - - op: Optional[str] - - value: object diff --git a/src/profound/types/reports/shopping_merchants_response.py b/src/profound/types/reports/shopping_merchants_response.py deleted file mode 100644 index 18759a17..00000000 --- a/src/profound/types/reports/shopping_merchants_response.py +++ /dev/null @@ -1,100 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import TYPE_CHECKING, Dict, List, Optional - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["ShoppingMerchantsResponse", "Data", "Info"] - - -class Data(BaseModel): - """One merchant row. - - `brand_name`/`brand_share` appear in the brand-share view; `product`/product - metrics in the top-products view; metrics vary by view. - """ - - brand_name: Optional[str] = None - - brand_share: Optional[float] = None - - date: Optional[str] = None - - merchant_name: Optional[str] = None - - merchant_share: Optional[float] = None - - merchant_share_rank: Optional[int] = None - - merchant_visibility: Optional[float] = None - - merchant_visibility_rank: Optional[int] = None - - product: Optional[Dict[str, object]] = None - - product_rank: Optional[int] = None - - product_visibility: Optional[float] = None - - visibility_rank: Optional[int] = None - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class Info(BaseModel): - count: int - """Number of rows returned in `data` for this page.""" - - end_date: str - """Echoed request end date (YYYY-MM-DD, ET).""" - - metrics: List[str] - """Metrics returned per row.""" - - models: List[str] - """Display names of the models the report covers.""" - - start_date: str - """Echoed request start date (YYYY-MM-DD, ET).""" - - view: str - """`distribution`, `brand_share`, or `top_products`.""" - - filter: Optional[Dict[str, object]] = None - """Echoed normalized filter tree, or null when no filter was sent.""" - - next_cursor: Optional[str] = None - """Opaque cursor for the next page; null on the last page.""" - - total_results: Optional[int] = None - """Total rows matching the query before pagination (null when not computed).""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class ShoppingMerchantsResponse(BaseModel): - data: List[Data] - - info: Info diff --git a/src/profound/types/reports/shopping_products_params.py b/src/profound/types/reports/shopping_products_params.py deleted file mode 100644 index b26007a0..00000000 --- a/src/profound/types/reports/shopping_products_params.py +++ /dev/null @@ -1,79 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Iterable, Optional -from typing_extensions import Literal, Required, TypedDict - -__all__ = ["ShoppingProductsParams", "Filter"] - - -class ShoppingProductsParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - competitor_limit: int - """Competitors returned when `target_product` is set.""" - - cursor: Optional[str] - - filter: Optional[Filter] - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - group_by: List[Literal["date", "topic", "prompt"]] - - include_merchants: bool - """Include per-product merchant offers (names, prices, urls, images).""" - - interval: Literal["day", "week", "month"] - - limit: Optional[int] - """Page size; default 10, max 50.""" - - max_results: Optional[int] - """Stream endpoint only: cap streamed rows.""" - - metrics: Optional[ - List[ - Literal[ - "visibility_score", - "average_position", - "visibility_rank", - "position1_percentage", - "position2_percentage", - "position3_percentage", - "position_above3_percentage", - "product_rating", - "product_num_reviews", - ] - ] - ] - - target_product: Optional[str] - """Return this product plus its top competitors (item view only).""" - - -_FilterReservedKeywords = TypedDict( - "_FilterReservedKeywords", - { - "and": Optional[Iterable[object]], - "not": object, - "or": Optional[Iterable[object]], - }, - total=False, -) - - -class Filter(_FilterReservedKeywords, total=False): - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - field: Optional[str] - - op: Optional[str] - - value: object diff --git a/src/profound/types/reports/shopping_products_response.py b/src/profound/types/reports/shopping_products_response.py deleted file mode 100644 index 3ca3091b..00000000 --- a/src/profound/types/reports/shopping_products_response.py +++ /dev/null @@ -1,127 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import TYPE_CHECKING, Dict, List, Optional - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["ShoppingProductsResponse", "Data", "DataPrompt", "DataTopic", "Info"] - - -class DataPrompt(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataTopic(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class Data(BaseModel): - """One product row. Merchant fields present only when `include_merchants` is true.""" - - average_position: Optional[float] = None - - date: Optional[str] = None - - merchants: Optional[List[Dict[str, object]]] = None - """Per-product merchant offers `{name, price}` (only with `include_merchants`).""" - - position_above3_percentage: Optional[float] = None - - position1_percentage: Optional[float] = None - - position2_percentage: Optional[float] = None - - position3_percentage: Optional[float] = None - - product: Optional[Dict[str, object]] = None - - product_image_urls: Optional[List[str]] = None - - product_num_reviews: Optional[int] = None - - product_rating: Optional[float] = None - - product_url: Optional[str] = None - - prompt: Optional[DataPrompt] = None - """An `{id, name}` reference for a grouped dimension value.""" - - topic: Optional[DataTopic] = None - """An `{id, name}` reference for a grouped dimension value.""" - - visibility_rank: Optional[int] = None - - visibility_score: Optional[float] = None - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class Info(BaseModel): - count: int - """Number of products on this page. - - When grouped by `date`/`topic`/`prompt`, `data` holds one row per product x - bucket, so `len(data)` can exceed `count`. - """ - - end_date: str - """Echoed request end date (YYYY-MM-DD, ET).""" - - include_merchants: bool - """Whether merchant offers are included in each row.""" - - metrics: List[str] - """Metrics returned per row.""" - - models: List[str] - """Display names of the models the report covers.""" - - start_date: str - """Echoed request start date (YYYY-MM-DD, ET).""" - - filter: Optional[Dict[str, object]] = None - """Echoed normalized filter tree, or null when no filter was sent.""" - - next_cursor: Optional[str] = None - """Opaque cursor for the next page; null on the last page.""" - - total_results: Optional[int] = None - """Total products matching the query before pagination.""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class ShoppingProductsResponse(BaseModel): - data: List[Data] - - info: Info diff --git a/src/profound/types/reports/shopping_stream_brands_params.py b/src/profound/types/reports/shopping_stream_brands_params.py deleted file mode 100644 index a0ae59b9..00000000 --- a/src/profound/types/reports/shopping_stream_brands_params.py +++ /dev/null @@ -1,63 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Union, Iterable, Optional -from typing_extensions import Literal, Required, TypedDict - -from ..._types import SequenceNotStr - -__all__ = ["ShoppingStreamBrandsParams", "Filter"] - - -class ShoppingStreamBrandsParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - assets: Union[str, SequenceNotStr[str], None] - """Restrict to these asset names (a name or list). Overrides `scope`.""" - - cursor: Optional[str] - - filter: Optional[Filter] - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - group_by: List[Literal["date", "topic", "region", "prompt"]] - - interval: Literal["day", "week", "month"] - - limit: Optional[int] - """Page size for scope=all; default 10, max 50.""" - - max_results: Optional[int] - """Stream endpoint only: cap the number of streamed rows (default: all).""" - - metrics: Optional[List[Literal["visibility_score", "average_position", "visibility_rank"]]] - - scope: Literal["owned", "all"] - - -_FilterReservedKeywords = TypedDict( - "_FilterReservedKeywords", - { - "and": Optional[Iterable[object]], - "not": object, - "or": Optional[Iterable[object]], - }, - total=False, -) - - -class Filter(_FilterReservedKeywords, total=False): - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - field: Optional[str] - - op: Optional[str] - - value: object diff --git a/src/profound/types/reports/shopping_stream_brands_response.py b/src/profound/types/reports/shopping_stream_brands_response.py deleted file mode 100644 index c0ac8a88..00000000 --- a/src/profound/types/reports/shopping_stream_brands_response.py +++ /dev/null @@ -1,133 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import TYPE_CHECKING, Dict, List, Union, Optional -from typing_extensions import TypeAlias - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = [ - "ShoppingStreamBrandsResponse", - "ShoppingBrandsV2Info", - "ShoppingBrandRow", - "ShoppingBrandRowPrompt", - "ShoppingBrandRowRegion", - "ShoppingBrandRowTopic", -] - - -class ShoppingBrandsV2Info(BaseModel): - """`summary` event payload (the report `info` block).""" - - count: int - """Number of assets on this page. - - When grouped by `date`, `data` holds one row per asset x bucket, so `len(data)` - can exceed `count`. - """ - - end_date: str - """Echoed request end date (YYYY-MM-DD, ET).""" - - metrics: List[str] - """Metrics returned per row.""" - - models: List[str] - """Display names of the models the report covers.""" - - scope: str - """Asset scope: `all`, `owned`, or `custom` when `assets` was given.""" - - start_date: str - """Echoed request start date (YYYY-MM-DD, ET).""" - - assets: Union[str, List[str], None] = None - """Echoed `assets` selection; when set it overrides `scope`.""" - - filter: Optional[Dict[str, object]] = None - """Echoed normalized filter tree, or null when no filter was sent.""" - - next_cursor: Optional[str] = None - """Opaque cursor for the next page; null on the last page.""" - - total_results: Optional[int] = None - """Total assets matching the query before pagination.""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class ShoppingBrandRowPrompt(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class ShoppingBrandRowRegion(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class ShoppingBrandRowTopic(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class ShoppingBrandRow(BaseModel): - """`result` event payload — one visibility row.""" - - asset: Optional[Dict[str, object]] = None - - average_position: Optional[float] = None - - date: Optional[str] = None - - prompt: Optional[ShoppingBrandRowPrompt] = None - """An `{id, name}` reference for a grouped dimension value.""" - - rank: Optional[int] = None - """Asset visibility rank as a top-level field (ungrouped only).""" - - region: Optional[ShoppingBrandRowRegion] = None - """An `{id, name}` reference for a grouped dimension value.""" - - topic: Optional[ShoppingBrandRowTopic] = None - """An `{id, name}` reference for a grouped dimension value.""" - - visibility_rank: Optional[int] = None - """Asset visibility rank (present on grouped rows).""" - - visibility_score: Optional[float] = None - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -ShoppingStreamBrandsResponse: TypeAlias = Union[ShoppingBrandsV2Info, ShoppingBrandRow] diff --git a/src/profound/types/reports/shopping_stream_merchants_params.py b/src/profound/types/reports/shopping_stream_merchants_params.py deleted file mode 100644 index f1a4a117..00000000 --- a/src/profound/types/reports/shopping_stream_merchants_params.py +++ /dev/null @@ -1,74 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Iterable, Optional -from typing_extensions import Literal, Required, TypedDict - -__all__ = ["ShoppingStreamMerchantsParams", "Filter"] - - -class ShoppingStreamMerchantsParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - cursor: Optional[str] - - filter: Optional[Filter] - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - group_by: List[Literal["date", "brand", "product"]] - """ - `[]` = distribution; `[brand]` = brand share within each merchant; `[product]` = - top products per merchant. `date` (distribution only) adds a time series. - """ - - interval: Literal["day", "week", "month"] - - limit: Optional[int] - """Page size; default 10, max 50.""" - - max_results: Optional[int] - """Stream endpoint only: cap streamed rows.""" - - metrics: Optional[ - List[ - Literal[ - "merchant_share", - "merchant_share_rank", - "merchant_visibility", - "merchant_visibility_rank", - "visibility_rank", - "brand_share", - "product_visibility", - "product_rank", - ] - ] - ] - """Defaults to the chosen view's metrics; must be valid for that view.""" - - -_FilterReservedKeywords = TypedDict( - "_FilterReservedKeywords", - { - "and": Optional[Iterable[object]], - "not": object, - "or": Optional[Iterable[object]], - }, - total=False, -) - - -class Filter(_FilterReservedKeywords, total=False): - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - field: Optional[str] - - op: Optional[str] - - value: object diff --git a/src/profound/types/reports/shopping_stream_merchants_response.py b/src/profound/types/reports/shopping_stream_merchants_response.py deleted file mode 100644 index e1263b06..00000000 --- a/src/profound/types/reports/shopping_stream_merchants_response.py +++ /dev/null @@ -1,96 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import TYPE_CHECKING, Dict, List, Union, Optional -from typing_extensions import TypeAlias - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["ShoppingStreamMerchantsResponse", "ShoppingMerchantsV2Info", "ShoppingMerchantRow"] - - -class ShoppingMerchantsV2Info(BaseModel): - """`summary` event payload (the report `info` block).""" - - count: int - """Number of rows returned in `data` for this page.""" - - end_date: str - """Echoed request end date (YYYY-MM-DD, ET).""" - - metrics: List[str] - """Metrics returned per row.""" - - models: List[str] - """Display names of the models the report covers.""" - - start_date: str - """Echoed request start date (YYYY-MM-DD, ET).""" - - view: str - """`distribution`, `brand_share`, or `top_products`.""" - - filter: Optional[Dict[str, object]] = None - """Echoed normalized filter tree, or null when no filter was sent.""" - - next_cursor: Optional[str] = None - """Opaque cursor for the next page; null on the last page.""" - - total_results: Optional[int] = None - """Total rows matching the query before pagination (null when not computed).""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class ShoppingMerchantRow(BaseModel): - """`result` event payload — one merchant row.""" - - brand_name: Optional[str] = None - - brand_share: Optional[float] = None - - date: Optional[str] = None - - merchant_name: Optional[str] = None - - merchant_share: Optional[float] = None - - merchant_share_rank: Optional[int] = None - - merchant_visibility: Optional[float] = None - - merchant_visibility_rank: Optional[int] = None - - product: Optional[Dict[str, object]] = None - - product_rank: Optional[int] = None - - product_visibility: Optional[float] = None - - visibility_rank: Optional[int] = None - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -ShoppingStreamMerchantsResponse: TypeAlias = Union[ShoppingMerchantsV2Info, ShoppingMerchantRow] diff --git a/src/profound/types/reports/shopping_stream_products_params.py b/src/profound/types/reports/shopping_stream_products_params.py deleted file mode 100644 index daa77060..00000000 --- a/src/profound/types/reports/shopping_stream_products_params.py +++ /dev/null @@ -1,79 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Iterable, Optional -from typing_extensions import Literal, Required, TypedDict - -__all__ = ["ShoppingStreamProductsParams", "Filter"] - - -class ShoppingStreamProductsParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - competitor_limit: int - """Competitors returned when `target_product` is set.""" - - cursor: Optional[str] - - filter: Optional[Filter] - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - group_by: List[Literal["date", "topic", "prompt"]] - - include_merchants: bool - """Include per-product merchant offers (names, prices, urls, images).""" - - interval: Literal["day", "week", "month"] - - limit: Optional[int] - """Page size; default 10, max 50.""" - - max_results: Optional[int] - """Stream endpoint only: cap streamed rows.""" - - metrics: Optional[ - List[ - Literal[ - "visibility_score", - "average_position", - "visibility_rank", - "position1_percentage", - "position2_percentage", - "position3_percentage", - "position_above3_percentage", - "product_rating", - "product_num_reviews", - ] - ] - ] - - target_product: Optional[str] - """Return this product plus its top competitors (item view only).""" - - -_FilterReservedKeywords = TypedDict( - "_FilterReservedKeywords", - { - "and": Optional[Iterable[object]], - "not": object, - "or": Optional[Iterable[object]], - }, - total=False, -) - - -class Filter(_FilterReservedKeywords, total=False): - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - field: Optional[str] - - op: Optional[str] - - value: object diff --git a/src/profound/types/reports/shopping_stream_products_response.py b/src/profound/types/reports/shopping_stream_products_response.py deleted file mode 100644 index 2353b023..00000000 --- a/src/profound/types/reports/shopping_stream_products_response.py +++ /dev/null @@ -1,133 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import TYPE_CHECKING, Dict, List, Union, Optional -from typing_extensions import TypeAlias - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = [ - "ShoppingStreamProductsResponse", - "ShoppingProductsV2Info", - "ShoppingProductRow", - "ShoppingProductRowPrompt", - "ShoppingProductRowTopic", -] - - -class ShoppingProductsV2Info(BaseModel): - """`summary` event payload (the report `info` block).""" - - count: int - """Number of products on this page. - - When grouped by `date`/`topic`/`prompt`, `data` holds one row per product x - bucket, so `len(data)` can exceed `count`. - """ - - end_date: str - """Echoed request end date (YYYY-MM-DD, ET).""" - - include_merchants: bool - """Whether merchant offers are included in each row.""" - - metrics: List[str] - """Metrics returned per row.""" - - models: List[str] - """Display names of the models the report covers.""" - - start_date: str - """Echoed request start date (YYYY-MM-DD, ET).""" - - filter: Optional[Dict[str, object]] = None - """Echoed normalized filter tree, or null when no filter was sent.""" - - next_cursor: Optional[str] = None - """Opaque cursor for the next page; null on the last page.""" - - total_results: Optional[int] = None - """Total products matching the query before pagination.""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class ShoppingProductRowPrompt(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class ShoppingProductRowTopic(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class ShoppingProductRow(BaseModel): - """`result` event payload — one product row.""" - - average_position: Optional[float] = None - - date: Optional[str] = None - - merchants: Optional[List[Dict[str, object]]] = None - """Per-product merchant offers `{name, price}` (only with `include_merchants`).""" - - position_above3_percentage: Optional[float] = None - - position1_percentage: Optional[float] = None - - position2_percentage: Optional[float] = None - - position3_percentage: Optional[float] = None - - product: Optional[Dict[str, object]] = None - - product_image_urls: Optional[List[str]] = None - - product_num_reviews: Optional[int] = None - - product_rating: Optional[float] = None - - product_url: Optional[str] = None - - prompt: Optional[ShoppingProductRowPrompt] = None - """An `{id, name}` reference for a grouped dimension value.""" - - topic: Optional[ShoppingProductRowTopic] = None - """An `{id, name}` reference for a grouped dimension value.""" - - visibility_rank: Optional[int] = None - - visibility_score: Optional[float] = None - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -ShoppingStreamProductsResponse: TypeAlias = Union[ShoppingProductsV2Info, ShoppingProductRow] diff --git a/src/profound/types/reports/shopping_stream_trigger_rate_params.py b/src/profound/types/reports/shopping_stream_trigger_rate_params.py deleted file mode 100644 index 61dc49c2..00000000 --- a/src/profound/types/reports/shopping_stream_trigger_rate_params.py +++ /dev/null @@ -1,57 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Iterable, Optional -from typing_extensions import Literal, Required, TypedDict - -__all__ = ["ShoppingStreamTriggerRateParams", "Filter"] - - -class ShoppingStreamTriggerRateParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - cursor: Optional[str] - - filter: Optional[Filter] - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - group_by: List[Literal["date", "topic", "region", "persona", "prompt"]] - """Group by `prompt`/`topic` for the per-prompt/-topic trigger rate.""" - - interval: Literal["day", "week", "month"] - - limit: Optional[int] - """Page size; default 10, max 50.""" - - max_results: Optional[int] - """Stream endpoint only: cap streamed rows.""" - - metrics: Optional[List[Literal["total_runs", "shopping_triggered_runs", "trigger_rate_percentage"]]] - - -_FilterReservedKeywords = TypedDict( - "_FilterReservedKeywords", - { - "and": Optional[Iterable[object]], - "not": object, - "or": Optional[Iterable[object]], - }, - total=False, -) - - -class Filter(_FilterReservedKeywords, total=False): - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - field: Optional[str] - - op: Optional[str] - - value: object diff --git a/src/profound/types/reports/shopping_stream_trigger_rate_response.py b/src/profound/types/reports/shopping_stream_trigger_rate_response.py deleted file mode 100644 index 2c6de9cb..00000000 --- a/src/profound/types/reports/shopping_stream_trigger_rate_response.py +++ /dev/null @@ -1,129 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import TYPE_CHECKING, Dict, List, Union, Optional -from typing_extensions import TypeAlias - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = [ - "ShoppingStreamTriggerRateResponse", - "ShoppingTriggerRateV2Info", - "ShoppingTriggerRateRow", - "ShoppingTriggerRateRowPersona", - "ShoppingTriggerRateRowPrompt", - "ShoppingTriggerRateRowRegion", - "ShoppingTriggerRateRowTopic", -] - - -class ShoppingTriggerRateV2Info(BaseModel): - """`summary` event payload (the report `info` block).""" - - count: int - """Number of rows returned in `data` for this page.""" - - end_date: str - """Echoed request end date (YYYY-MM-DD, ET).""" - - metrics: List[str] - """Metrics returned per row.""" - - models: List[str] - """Display names of the models the report covers.""" - - start_date: str - """Echoed request start date (YYYY-MM-DD, ET).""" - - filter: Optional[Dict[str, object]] = None - """Echoed normalized filter tree, or null when no filter was sent.""" - - next_cursor: Optional[str] = None - """Opaque cursor for the next page; null on the last page.""" - - total_results: Optional[int] = None - """Total rows matching the query before pagination (null when not computed).""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class ShoppingTriggerRateRowPersona(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class ShoppingTriggerRateRowPrompt(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class ShoppingTriggerRateRowRegion(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class ShoppingTriggerRateRowTopic(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class ShoppingTriggerRateRow(BaseModel): - """`result` event payload — one trigger row.""" - - date: Optional[str] = None - - persona: Optional[ShoppingTriggerRateRowPersona] = None - """An `{id, name}` reference for a grouped dimension value.""" - - prompt: Optional[ShoppingTriggerRateRowPrompt] = None - """An `{id, name}` reference for a grouped dimension value.""" - - region: Optional[ShoppingTriggerRateRowRegion] = None - """An `{id, name}` reference for a grouped dimension value.""" - - shopping_triggered_runs: Optional[int] = None - - topic: Optional[ShoppingTriggerRateRowTopic] = None - """An `{id, name}` reference for a grouped dimension value.""" - - total_runs: Optional[int] = None - - trigger_rate_percentage: Optional[float] = None - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -ShoppingStreamTriggerRateResponse: TypeAlias = Union[ShoppingTriggerRateV2Info, ShoppingTriggerRateRow] diff --git a/src/profound/types/reports/shopping_trigger_rate_params.py b/src/profound/types/reports/shopping_trigger_rate_params.py deleted file mode 100644 index 919c4a0b..00000000 --- a/src/profound/types/reports/shopping_trigger_rate_params.py +++ /dev/null @@ -1,57 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Iterable, Optional -from typing_extensions import Literal, Required, TypedDict - -__all__ = ["ShoppingTriggerRateParams", "Filter"] - - -class ShoppingTriggerRateParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - cursor: Optional[str] - - filter: Optional[Filter] - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - group_by: List[Literal["date", "topic", "region", "persona", "prompt"]] - """Group by `prompt`/`topic` for the per-prompt/-topic trigger rate.""" - - interval: Literal["day", "week", "month"] - - limit: Optional[int] - """Page size; default 10, max 50.""" - - max_results: Optional[int] - """Stream endpoint only: cap streamed rows.""" - - metrics: Optional[List[Literal["total_runs", "shopping_triggered_runs", "trigger_rate_percentage"]]] - - -_FilterReservedKeywords = TypedDict( - "_FilterReservedKeywords", - { - "and": Optional[Iterable[object]], - "not": object, - "or": Optional[Iterable[object]], - }, - total=False, -) - - -class Filter(_FilterReservedKeywords, total=False): - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - field: Optional[str] - - op: Optional[str] - - value: object diff --git a/src/profound/types/reports/shopping_trigger_rate_response.py b/src/profound/types/reports/shopping_trigger_rate_response.py deleted file mode 100644 index 91ac2a94..00000000 --- a/src/profound/types/reports/shopping_trigger_rate_response.py +++ /dev/null @@ -1,121 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import TYPE_CHECKING, Dict, List, Optional - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["ShoppingTriggerRateResponse", "Data", "DataPersona", "DataPrompt", "DataRegion", "DataTopic", "Info"] - - -class DataPersona(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataPrompt(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataRegion(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class DataTopic(BaseModel): - """An ``{id, name}`` reference for a grouped dimension value.""" - - id: Optional[str] = None - - name: Optional[str] = None - - -class Data(BaseModel): - """One trigger-rate row. Group dims present depend on `group_by`.""" - - date: Optional[str] = None - - persona: Optional[DataPersona] = None - """An `{id, name}` reference for a grouped dimension value.""" - - prompt: Optional[DataPrompt] = None - """An `{id, name}` reference for a grouped dimension value.""" - - region: Optional[DataRegion] = None - """An `{id, name}` reference for a grouped dimension value.""" - - shopping_triggered_runs: Optional[int] = None - - topic: Optional[DataTopic] = None - """An `{id, name}` reference for a grouped dimension value.""" - - total_runs: Optional[int] = None - - trigger_rate_percentage: Optional[float] = None - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class Info(BaseModel): - count: int - """Number of rows returned in `data` for this page.""" - - end_date: str - """Echoed request end date (YYYY-MM-DD, ET).""" - - metrics: List[str] - """Metrics returned per row.""" - - models: List[str] - """Display names of the models the report covers.""" - - start_date: str - """Echoed request start date (YYYY-MM-DD, ET).""" - - filter: Optional[Dict[str, object]] = None - """Echoed normalized filter tree, or null when no filter was sent.""" - - next_cursor: Optional[str] = None - """Opaque cursor for the next page; null on the last page.""" - - total_results: Optional[int] = None - """Total rows matching the query before pagination (null when not computed).""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class ShoppingTriggerRateResponse(BaseModel): - data: List[Data] - - info: Info diff --git a/src/profound/types/reports/social/__init__.py b/src/profound/types/reports/social/__init__.py deleted file mode 100644 index 90f171b4..00000000 --- a/src/profound/types/reports/social/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from .youtube_get_videos_params import YoutubeGetVideosParams as YoutubeGetVideosParams -from .youtube_get_summary_params import YoutubeGetSummaryParams as YoutubeGetSummaryParams -from .youtube_get_channels_params import YoutubeGetChannelsParams as YoutubeGetChannelsParams -from .youtube_get_videos_response import YoutubeGetVideosResponse as YoutubeGetVideosResponse -from .youtube_get_summary_response import YoutubeGetSummaryResponse as YoutubeGetSummaryResponse -from .youtube_get_channels_response import YoutubeGetChannelsResponse as YoutubeGetChannelsResponse diff --git a/src/profound/types/reports/social/youtube_get_channels_params.py b/src/profound/types/reports/social/youtube_get_channels_params.py deleted file mode 100644 index bc510b27..00000000 --- a/src/profound/types/reports/social/youtube_get_channels_params.py +++ /dev/null @@ -1,71 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Iterable, Optional -from typing_extensions import Literal, Required, TypedDict - -__all__ = ["YoutubeGetChannelsParams", "Filter"] - - -class YoutubeGetChannelsParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - cursor: Optional[str] - - filter: Optional[Filter] - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - group_by: List[Literal["channel", "video_category", "model", "source_type"]] - """What each row represents. - - Empty or `["channel"]` ranks channels; `["video_category"]` ranks content - categories; `["source_type"]` ranks source types; - `["channel", "video_category"]`, `["channel", "source_type"]` and - `["channel", "model"]` return cross-tabs — a row per channel per category, or - per answer engine. `limit` counts channels in every case, so ten channels across - nine engines is ten channels and ninety rows. - """ - - interval: Optional[Literal["day", "week", "month"]] - """ - Return a time series instead of window totals: one row per entity per period, - each carrying `date`. `citation_share` is then relative to that period, so the - series is comparable across periods. Omit for window totals. - """ - - limit: Optional[int] - """Page size; default 10, max 50.""" - - source_types: Optional[List[Literal["video", "short", "channel", "playlist", "other"]]] - """ - Limit results to YouTube source types: `video`, `short`, `channel`, `playlist`, - or `other`. Omit to include every source type. - """ - - -_FilterReservedKeywords = TypedDict( - "_FilterReservedKeywords", - { - "and": Optional[Iterable[object]], - "not": object, - "or": Optional[Iterable[object]], - }, - total=False, -) - - -class Filter(_FilterReservedKeywords, total=False): - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - field: Optional[str] - - op: Optional[str] - - value: object diff --git a/src/profound/types/reports/social/youtube_get_channels_response.py b/src/profound/types/reports/social/youtube_get_channels_response.py deleted file mode 100644 index 79b3d390..00000000 --- a/src/profound/types/reports/social/youtube_get_channels_response.py +++ /dev/null @@ -1,13 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Dict, List - -from ...._models import BaseModel - -__all__ = ["YoutubeGetChannelsResponse"] - - -class YoutubeGetChannelsResponse(BaseModel): - data: List[Dict[str, object]] - - info: Dict[str, object] diff --git a/src/profound/types/reports/social/youtube_get_summary_params.py b/src/profound/types/reports/social/youtube_get_summary_params.py deleted file mode 100644 index 7024b60f..00000000 --- a/src/profound/types/reports/social/youtube_get_summary_params.py +++ /dev/null @@ -1,42 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Iterable, Optional -from typing_extensions import Required, TypedDict - -__all__ = ["YoutubeGetSummaryParams", "Filter"] - - -class YoutubeGetSummaryParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - filter: Optional[Filter] - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - -_FilterReservedKeywords = TypedDict( - "_FilterReservedKeywords", - { - "and": Optional[Iterable[object]], - "not": object, - "or": Optional[Iterable[object]], - }, - total=False, -) - - -class Filter(_FilterReservedKeywords, total=False): - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - field: Optional[str] - - op: Optional[str] - - value: object diff --git a/src/profound/types/reports/social/youtube_get_summary_response.py b/src/profound/types/reports/social/youtube_get_summary_response.py deleted file mode 100644 index f2e21339..00000000 --- a/src/profound/types/reports/social/youtube_get_summary_response.py +++ /dev/null @@ -1,54 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Dict, Optional - -from ...._models import BaseModel - -__all__ = ["YoutubeGetSummaryResponse", "Data"] - - -class Data(BaseModel): - """How much of youtube.com the rollups can speak for.""" - - attributed_citations: Optional[int] = None - """Citations that resolve to a channel; the ranking denominator.""" - - citations_channel: Optional[int] = None - """Citations pointing at a channel page rather than a video.""" - - citations_other: Optional[int] = None - """Search, feed, and homepage URLs. Never attributable.""" - - citations_playlist: Optional[int] = None - """Citations pointing at a playlist.""" - - citations_short: Optional[int] = None - """Citations pointing at Shorts.""" - - citations_video: Optional[int] = None - """Citations pointing at long-form videos.""" - - distinct_channels: Optional[int] = None - """Distinct channels cited.""" - - distinct_shorts: Optional[int] = None - """Distinct Shorts cited.""" - - distinct_videos: Optional[int] = None - """Distinct long-form videos cited.""" - - total_youtube_citations: Optional[int] = None - """Every YouTube citation in the window.""" - - unattributed_citations: Optional[int] = None - """ - Citations with no channel: search and feed URLs, deleted sources, or not yet - resolved. - """ - - -class YoutubeGetSummaryResponse(BaseModel): - data: Data - """How much of youtube.com the rollups can speak for.""" - - info: Dict[str, object] diff --git a/src/profound/types/reports/social/youtube_get_videos_params.py b/src/profound/types/reports/social/youtube_get_videos_params.py deleted file mode 100644 index 3de5a41b..00000000 --- a/src/profound/types/reports/social/youtube_get_videos_params.py +++ /dev/null @@ -1,61 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Iterable, Optional -from typing_extensions import Literal, Required, TypedDict - -__all__ = ["YoutubeGetVideosParams", "Filter"] - - -class YoutubeGetVideosParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - attribution: Literal["attributed", "unattributed", "all"] - """Choose attributed citations, unattributed citations, or all citations. - - An unattributed row has no channel: `source_type` is `other` for a search or - feed URL that names no source, and any other type is a source we have no channel - for. - """ - - cursor: Optional[str] - - filter: Optional[Filter] - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - limit: Optional[int] - """Page size; default 10, max 50.""" - - source_types: Optional[List[Literal["video", "short", "channel", "playlist", "other"]]] - """ - Limit results to YouTube source types: `video`, `short`, `channel`, `playlist`, - or `other`. Omit to include every source type. - """ - - -_FilterReservedKeywords = TypedDict( - "_FilterReservedKeywords", - { - "and": Optional[Iterable[object]], - "not": object, - "or": Optional[Iterable[object]], - }, - total=False, -) - - -class Filter(_FilterReservedKeywords, total=False): - """A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group.""" - - field: Optional[str] - - op: Optional[str] - - value: object diff --git a/src/profound/types/reports/social/youtube_get_videos_response.py b/src/profound/types/reports/social/youtube_get_videos_response.py deleted file mode 100644 index 1cae3b51..00000000 --- a/src/profound/types/reports/social/youtube_get_videos_response.py +++ /dev/null @@ -1,69 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import TYPE_CHECKING, Dict, List, Optional -from typing_extensions import Literal - -from pydantic import Field as FieldInfo - -from ...._models import BaseModel - -__all__ = ["YoutubeGetVideosResponse", "Data"] - - -class Data(BaseModel): - citation_share: float - """Share of attributed YouTube citations in the window.""" - - count: int - """Citations attributed to this video.""" - - rank: int - """1-based position in the full ranked set, continuing across pages.""" - - source_type: Literal["video", "short", "channel", "playlist", "other"] - """YouTube source type: `video`, `short`, `channel`, `playlist` or `other`.""" - - video_id: str - """YouTube video id, as in the watch URL.""" - - channel_handle: Optional[str] = None - """Handle of the publishing channel; select it with a `channel` filter of `in`.""" - - channel_title: Optional[str] = None - """Publishing channel title, or null when unknown.""" - - channel_url: Optional[str] = None - """Openable URL for the publishing channel.""" - - duration_seconds: Optional[int] = None - """Length, or null when unknown.""" - - published_at: Optional[str] = None - """Upload date, or null when unknown.""" - - title: Optional[str] = None - """Resolved title, or null when unavailable.""" - - url: Optional[str] = None - """Openable video URL.""" - - video_category: Optional[str] = None - """YouTube content category, or null when unknown.""" - - if TYPE_CHECKING: - # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a - # value to this field, so for compatibility we avoid doing it at runtime. - __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - # Stub to indicate that arbitrary properties are accepted. - # To access properties that are not valid identifiers you can use `getattr`, e.g. - # `getattr(obj, '$type')` - def __getattr__(self, attr: str) -> object: ... - else: - __pydantic_extra__: Dict[str, object] - - -class YoutubeGetVideosResponse(BaseModel): - data: List[Data] - - info: Dict[str, object] diff --git a/src/profound/types/reports/web_search_result_query_params.py b/src/profound/types/reports/web_search_result_query_params.py deleted file mode 100644 index d727fc53..00000000 --- a/src/profound/types/reports/web_search_result_query_params.py +++ /dev/null @@ -1,120 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Dict, List, Union, Iterable -from datetime import datetime -from typing_extensions import Literal, Required, Annotated, TypeAlias, TypedDict - -from ..._types import SequenceNotStr -from ..._utils import PropertyInfo -from ..url_filter_param import URLFilterParam -from ..hostname_filter_param import HostnameFilterParam -from ..prompt_id_filter_param import PromptIDFilterParam -from ..root_domain_filter_param import RootDomainFilterParam -from ..shared_params.pagination import Pagination -from ..shared_params.path_filter import PathFilter -from ..shared_params.prompt_filter import PromptFilter -from ..shared_params.tag_id_filter import TagIDFilter -from ..shared_params.model_id_filter import ModelIDFilter -from ..shared_params.topic_id_filter import TopicIDFilter -from ..shared_params.region_id_filter import RegionIDFilter -from ..shared_params.persona_id_filter import PersonaIDFilter - -__all__ = ["WebSearchResultQueryParams", "Filter", "FilterSearchQueryFilter"] - - -class WebSearchResultQueryParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] - """End date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - """ - - metrics: Required[List[Literal["count", "search_share"]]] - """Metrics to include. `search_share` is the per-prompt occurrence rate.""" - - start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] - """Start date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - """ - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - """Date interval for the report. (only used with date dimension)""" - - dimensions: List[ - Literal[ - "hostname", - "path", - "url", - "root_domain", - "date", - "region", - "topic", - "topic_id", - "model", - "tag", - "prompt", - "prompt_id", - "persona", - "search_query", - ] - ] - """Dimensions to group the report by.""" - - filters: Iterable[Filter] - """List of filters to apply to the web search results report.""" - - order_by: Dict[str, Literal["asc", "desc"]] - """Custom ordering of the report results. - - The order is a record of key-value pairs where: - - `key` is the field to order by, which can be a metric or dimension - - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. - - When not specified, the default order is the first metric in the query descending. - """ - - pagination: Pagination - """Pagination settings for the report results.""" - - -class FilterSearchQueryFilter(TypedDict, total=False): - """Filter by web-search query string.""" - - field: Required[Literal["search_query"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[Union[str, SequenceNotStr[str]]] - - -Filter: TypeAlias = Union[ - HostnameFilterParam, - PathFilter, - RegionIDFilter, - TopicIDFilter, - ModelIDFilter, - TagIDFilter, - URLFilterParam, - RootDomainFilterParam, - PersonaIDFilter, - PromptFilter, - PromptIDFilterParam, - FilterSearchQueryFilter, -] diff --git a/src/profound/types/reports/web_search_result_query_response.py b/src/profound/types/reports/web_search_result_query_response.py deleted file mode 100644 index c6dcd239..00000000 --- a/src/profound/types/reports/web_search_result_query_response.py +++ /dev/null @@ -1,21 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Union, Optional - -from ..._models import BaseModel -from ..report_info import ReportInfo - -__all__ = ["WebSearchResultQueryResponse", "Data"] - - -class Data(BaseModel): - dimensions: List[Optional[str]] - - metrics: List[Union[float, str]] - - -class WebSearchResultQueryResponse(BaseModel): - data: List[Data] - - info: ReportInfo - """Base model for report information.""" diff --git a/src/profound/types/reports/web_search_result_stream_params.py b/src/profound/types/reports/web_search_result_stream_params.py deleted file mode 100644 index 4999d9d9..00000000 --- a/src/profound/types/reports/web_search_result_stream_params.py +++ /dev/null @@ -1,120 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Dict, List, Union, Iterable, Optional -from datetime import datetime -from typing_extensions import Literal, Required, Annotated, TypeAlias, TypedDict - -from ..._types import SequenceNotStr -from ..._utils import PropertyInfo -from ..url_filter_param import URLFilterParam -from ..hostname_filter_param import HostnameFilterParam -from ..prompt_id_filter_param import PromptIDFilterParam -from ..root_domain_filter_param import RootDomainFilterParam -from ..shared_params.pagination import Pagination -from ..shared_params.path_filter import PathFilter -from ..shared_params.prompt_filter import PromptFilter -from ..shared_params.tag_id_filter import TagIDFilter -from ..shared_params.model_id_filter import ModelIDFilter -from ..shared_params.topic_id_filter import TopicIDFilter -from ..shared_params.region_id_filter import RegionIDFilter -from ..shared_params.persona_id_filter import PersonaIDFilter - -__all__ = ["WebSearchResultStreamParams", "Filter", "FilterSearchQueryFilter"] - - -class WebSearchResultStreamParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] - """End date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - """ - - metrics: Required[List[Literal["count", "search_share"]]] - """Metrics to include. `search_share` is the per-prompt occurrence rate.""" - - start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] - """Start date for the report. - - Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - """ - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - """Date interval for the report. (only used with date dimension)""" - - dimensions: List[ - Literal[ - "hostname", - "path", - "url", - "root_domain", - "date", - "region", - "topic", - "topic_id", - "model", - "tag", - "prompt", - "prompt_id", - "persona", - "search_query", - ] - ] - """Dimensions to group the report by.""" - - filters: Iterable[Filter] - """List of filters to apply to the web search results report.""" - - order_by: Dict[str, Literal["asc", "desc"]] - """Custom ordering of the report results. - - The order is a record of key-value pairs where: - - `key` is the field to order by, which can be a metric or dimension - - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. - - When not specified, the default order is the first metric in the query descending. - """ - - pagination: Optional[Pagination] - """Offset-based pagination parameters.""" - - -class FilterSearchQueryFilter(TypedDict, total=False): - """Filter by web-search query string.""" - - field: Required[Literal["search_query"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[Union[str, SequenceNotStr[str]]] - - -Filter: TypeAlias = Union[ - HostnameFilterParam, - PathFilter, - RegionIDFilter, - TopicIDFilter, - ModelIDFilter, - TagIDFilter, - URLFilterParam, - RootDomainFilterParam, - PersonaIDFilter, - PromptFilter, - PromptIDFilterParam, - FilterSearchQueryFilter, -] diff --git a/src/profound/types/reports/web_search_result_stream_response.py b/src/profound/types/reports/web_search_result_stream_response.py deleted file mode 100644 index 39af580a..00000000 --- a/src/profound/types/reports/web_search_result_stream_response.py +++ /dev/null @@ -1,19 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import Dict, Union -from typing_extensions import TypeAlias - -from ..._models import BaseModel - -__all__ = ["WebSearchResultStreamResponse", "SseSummaryEventData"] - - -class SseSummaryEventData(BaseModel): - query: Dict[str, object] - """The normalized query used to build the stream.""" - - total_rows: int - """Total number of rows available before pagination is applied.""" - - -WebSearchResultStreamResponse: TypeAlias = Union[SseSummaryEventData, Dict[str, object]] diff --git a/src/profound/types/root_domain_filter_param.py b/src/profound/types/root_domain_filter_param.py deleted file mode 100644 index 18a5d5ab..00000000 --- a/src/profound/types/root_domain_filter_param.py +++ /dev/null @@ -1,32 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Union -from typing_extensions import Literal, Required, TypedDict - -from .._types import SequenceNotStr - -__all__ = ["RootDomainFilterParam"] - - -class RootDomainFilterParam(TypedDict, total=False): - """Filter by root domain""" - - field: Required[Literal["root_domain"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/shared/__init__.py b/src/profound/types/shared/__init__.py deleted file mode 100644 index 36c6accd..00000000 --- a/src/profound/types/shared/__init__.py +++ /dev/null @@ -1,17 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from .pagination import Pagination as Pagination -from .path_filter import PathFilter as PathFilter -from .prompt_filter import PromptFilter as PromptFilter -from .tag_id_filter import TagIDFilter as TagIDFilter -from .asset_id_filter import AssetIDFilter as AssetIDFilter -from .bot_name_filter import BotNameFilter as BotNameFilter -from .model_id_filter import ModelIDFilter as ModelIDFilter -from .topic_id_filter import TopicIDFilter as TopicIDFilter -from .region_id_filter import RegionIDFilter as RegionIDFilter -from .cursor_pagination import CursorPagination as CursorPagination -from .persona_id_filter import PersonaIDFilter as PersonaIDFilter -from .prompt_type_filter import PromptTypeFilter as PromptTypeFilter -from .region_name_filter import RegionNameFilter as RegionNameFilter -from .bot_provider_filter import BotProviderFilter as BotProviderFilter -from .analysis_type_filter import AnalysisTypeFilter as AnalysisTypeFilter diff --git a/src/profound/types/shared/analysis_type_filter.py b/src/profound/types/shared/analysis_type_filter.py deleted file mode 100644 index 664d2f41..00000000 --- a/src/profound/types/shared/analysis_type_filter.py +++ /dev/null @@ -1,31 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Union -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["AnalysisTypeFilter"] - - -class AnalysisTypeFilter(BaseModel): - """Filter by analysis type (visibility, sentiment, or accuracy).""" - - field: Literal["analysis_type"] - - operator: Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - - value: Union[ - Literal["visibility", "sentiment", "sentiment_v2", "accuracy"], - List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]], - ] diff --git a/src/profound/types/shared/bot_name_filter.py b/src/profound/types/shared/bot_name_filter.py deleted file mode 100644 index 84088df2..00000000 --- a/src/profound/types/shared/bot_name_filter.py +++ /dev/null @@ -1,32 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Union -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["BotNameFilter"] - - -class BotNameFilter(BaseModel): - """Filter by bot name (user agent). - - Values come from analytics data and should - not be enum-constrained because web-v2 may send newly cataloged user-agent names. - """ - - field: Literal["bot_name"] - - operator: Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - - value: Union[str, List[str]] diff --git a/src/profound/types/shared/bot_provider_filter.py b/src/profound/types/shared/bot_provider_filter.py deleted file mode 100644 index 9168234a..00000000 --- a/src/profound/types/shared/bot_provider_filter.py +++ /dev/null @@ -1,83 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Union -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["BotProviderFilter"] - - -class BotProviderFilter(BaseModel): - """Filter by bot provider""" - - field: Literal["bot_provider"] - - operator: Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - - value: Union[ - Literal[ - "openai", - "anthropic", - "chatgpt", - "deepseek", - "google", - "microsoft", - "perplexity", - "apple", - "bytedance", - "amazon", - "meta", - "duckduckgo", - "you", - "you.com", - "xai", - "grok", - "gemini", - "mistral", - "huawei", - "yandex", - "baidu", - "yahoo", - "commoncrawl", - "openclaw", - ], - List[ - Literal[ - "openai", - "anthropic", - "chatgpt", - "deepseek", - "google", - "microsoft", - "perplexity", - "apple", - "bytedance", - "amazon", - "meta", - "duckduckgo", - "you", - "you.com", - "xai", - "grok", - "gemini", - "mistral", - "huawei", - "yandex", - "baidu", - "yahoo", - "commoncrawl", - "openclaw", - ] - ], - ] diff --git a/src/profound/types/shared/model_id_filter.py b/src/profound/types/shared/model_id_filter.py deleted file mode 100644 index 9733591d..00000000 --- a/src/profound/types/shared/model_id_filter.py +++ /dev/null @@ -1,19 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Union -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["ModelIDFilter"] - - -class ModelIDFilter(BaseModel): - """Filter by AI model/platform UUID.""" - - field: Literal["model_id", "model"] - """- `model` - Deprecated""" - - operator: Literal["is", "not_is", "in", "not_in"] - - value: Union[str, List[str]] diff --git a/src/profound/types/shared/path_filter.py b/src/profound/types/shared/path_filter.py deleted file mode 100644 index 29574b57..00000000 --- a/src/profound/types/shared/path_filter.py +++ /dev/null @@ -1,28 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Union -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["PathFilter"] - - -class PathFilter(BaseModel): - """Filter by request path""" - - field: Literal["path"] - - operator: Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - - value: Union[str, List[str]] diff --git a/src/profound/types/shared/prompt_filter.py b/src/profound/types/shared/prompt_filter.py deleted file mode 100644 index ab62b22f..00000000 --- a/src/profound/types/shared/prompt_filter.py +++ /dev/null @@ -1,28 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Union -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["PromptFilter"] - - -class PromptFilter(BaseModel): - """Filter by prompt text""" - - field: Literal["prompt"] - - operator: Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - - value: Union[str, List[str]] diff --git a/src/profound/types/shared/region_id_filter.py b/src/profound/types/shared/region_id_filter.py deleted file mode 100644 index 3a99cb62..00000000 --- a/src/profound/types/shared/region_id_filter.py +++ /dev/null @@ -1,19 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Union -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["RegionIDFilter"] - - -class RegionIDFilter(BaseModel): - """Filter by region UUID.""" - - field: Literal["region_id", "region"] - """- `region` - Deprecated""" - - operator: Literal["is", "not_is", "in", "not_in"] - - value: Union[str, List[str]] diff --git a/src/profound/types/shared/region_name_filter.py b/src/profound/types/shared/region_name_filter.py deleted file mode 100644 index 4a0f637d..00000000 --- a/src/profound/types/shared/region_name_filter.py +++ /dev/null @@ -1,28 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Union -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["RegionNameFilter"] - - -class RegionNameFilter(BaseModel): - """Filter by region name.""" - - field: Literal["region_name"] - - operator: Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - - value: Union[str, List[str]] diff --git a/src/profound/types/shared/tag_id_filter.py b/src/profound/types/shared/tag_id_filter.py deleted file mode 100644 index 0c4fa0c0..00000000 --- a/src/profound/types/shared/tag_id_filter.py +++ /dev/null @@ -1,19 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Union -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["TagIDFilter"] - - -class TagIDFilter(BaseModel): - """Filter by tag (prompt group) UUID.""" - - field: Literal["tag_id", "tag"] - """- `tag` - Deprecated""" - - operator: Literal["is", "not_is", "in", "not_in"] - - value: Union[str, List[str]] diff --git a/src/profound/types/shared/topic_id_filter.py b/src/profound/types/shared/topic_id_filter.py deleted file mode 100644 index 873034c0..00000000 --- a/src/profound/types/shared/topic_id_filter.py +++ /dev/null @@ -1,19 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing import List, Union -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["TopicIDFilter"] - - -class TopicIDFilter(BaseModel): - """Filter by topic UUID.""" - - field: Literal["topic_id", "topic"] - """- `topic` - Deprecated""" - - operator: Literal["is", "not_is", "in", "not_in"] - - value: Union[str, List[str]] diff --git a/src/profound/types/shared_params/__init__.py b/src/profound/types/shared_params/__init__.py deleted file mode 100644 index 7b4aff02..00000000 --- a/src/profound/types/shared_params/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from .pagination import Pagination as Pagination -from .path_filter import PathFilter as PathFilter -from .prompt_filter import PromptFilter as PromptFilter -from .tag_id_filter import TagIDFilter as TagIDFilter -from .asset_id_filter import AssetIDFilter as AssetIDFilter -from .bot_name_filter import BotNameFilter as BotNameFilter -from .model_id_filter import ModelIDFilter as ModelIDFilter -from .topic_id_filter import TopicIDFilter as TopicIDFilter -from .region_id_filter import RegionIDFilter as RegionIDFilter -from .persona_id_filter import PersonaIDFilter as PersonaIDFilter -from .prompt_type_filter import PromptTypeFilter as PromptTypeFilter -from .region_name_filter import RegionNameFilter as RegionNameFilter -from .bot_provider_filter import BotProviderFilter as BotProviderFilter -from .analysis_type_filter import AnalysisTypeFilter as AnalysisTypeFilter diff --git a/src/profound/types/shared_params/analysis_type_filter.py b/src/profound/types/shared_params/analysis_type_filter.py deleted file mode 100644 index fdc872ed..00000000 --- a/src/profound/types/shared_params/analysis_type_filter.py +++ /dev/null @@ -1,35 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Union -from typing_extensions import Literal, Required, TypedDict - -__all__ = ["AnalysisTypeFilter"] - - -class AnalysisTypeFilter(TypedDict, total=False): - """Filter by analysis type (visibility, sentiment, or accuracy).""" - - field: Required[Literal["analysis_type"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[ - Union[ - Literal["visibility", "sentiment", "sentiment_v2", "accuracy"], - List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]], - ] - ] diff --git a/src/profound/types/shared_params/asset_id_filter.py b/src/profound/types/shared_params/asset_id_filter.py deleted file mode 100644 index f8a44460..00000000 --- a/src/profound/types/shared_params/asset_id_filter.py +++ /dev/null @@ -1,18 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Union -from typing_extensions import Literal, Required, TypedDict - -from ..._types import SequenceNotStr - -__all__ = ["AssetIDFilter"] - - -class AssetIDFilter(TypedDict, total=False): - field: Required[Literal["asset_id"]] - - operator: Required[Literal["is", "not_is", "in", "not_in"]] - - value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/shared_params/bot_name_filter.py b/src/profound/types/shared_params/bot_name_filter.py deleted file mode 100644 index 81450d87..00000000 --- a/src/profound/types/shared_params/bot_name_filter.py +++ /dev/null @@ -1,36 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Union -from typing_extensions import Literal, Required, TypedDict - -from ..._types import SequenceNotStr - -__all__ = ["BotNameFilter"] - - -class BotNameFilter(TypedDict, total=False): - """Filter by bot name (user agent). - - Values come from analytics data and should - not be enum-constrained because web-v2 may send newly cataloged user-agent names. - """ - - field: Required[Literal["bot_name"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/shared_params/bot_provider_filter.py b/src/profound/types/shared_params/bot_provider_filter.py deleted file mode 100644 index 1861cf75..00000000 --- a/src/profound/types/shared_params/bot_provider_filter.py +++ /dev/null @@ -1,87 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Union -from typing_extensions import Literal, Required, TypedDict - -__all__ = ["BotProviderFilter"] - - -class BotProviderFilter(TypedDict, total=False): - """Filter by bot provider""" - - field: Required[Literal["bot_provider"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[ - Union[ - Literal[ - "openai", - "anthropic", - "chatgpt", - "deepseek", - "google", - "microsoft", - "perplexity", - "apple", - "bytedance", - "amazon", - "meta", - "duckduckgo", - "you", - "you.com", - "xai", - "grok", - "gemini", - "mistral", - "huawei", - "yandex", - "baidu", - "yahoo", - "commoncrawl", - "openclaw", - ], - List[ - Literal[ - "openai", - "anthropic", - "chatgpt", - "deepseek", - "google", - "microsoft", - "perplexity", - "apple", - "bytedance", - "amazon", - "meta", - "duckduckgo", - "you", - "you.com", - "xai", - "grok", - "gemini", - "mistral", - "huawei", - "yandex", - "baidu", - "yahoo", - "commoncrawl", - "openclaw", - ] - ], - ] - ] diff --git a/src/profound/types/shared_params/model_id_filter.py b/src/profound/types/shared_params/model_id_filter.py deleted file mode 100644 index 64afe814..00000000 --- a/src/profound/types/shared_params/model_id_filter.py +++ /dev/null @@ -1,21 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Union -from typing_extensions import Literal, Required, TypedDict - -from ..._types import SequenceNotStr - -__all__ = ["ModelIDFilter"] - - -class ModelIDFilter(TypedDict, total=False): - """Filter by AI model/platform UUID.""" - - field: Required[Literal["model_id", "model"]] - """- `model` - Deprecated""" - - operator: Required[Literal["is", "not_is", "in", "not_in"]] - - value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/shared_params/pagination.py b/src/profound/types/shared_params/pagination.py deleted file mode 100644 index c41d5cdb..00000000 --- a/src/profound/types/shared_params/pagination.py +++ /dev/null @@ -1,17 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing_extensions import TypedDict - -__all__ = ["Pagination"] - - -class Pagination(TypedDict, total=False): - """Offset-based pagination parameters.""" - - limit: int - """Maximum number of results to return. Default is 10,000, maximum is 50,000.""" - - offset: int - """Offset for the results. Used for pagination.""" diff --git a/src/profound/types/shared_params/path_filter.py b/src/profound/types/shared_params/path_filter.py deleted file mode 100644 index 17f04786..00000000 --- a/src/profound/types/shared_params/path_filter.py +++ /dev/null @@ -1,32 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Union -from typing_extensions import Literal, Required, TypedDict - -from ..._types import SequenceNotStr - -__all__ = ["PathFilter"] - - -class PathFilter(TypedDict, total=False): - """Filter by request path""" - - field: Required[Literal["path"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/shared_params/persona_id_filter.py b/src/profound/types/shared_params/persona_id_filter.py deleted file mode 100644 index 71f5ebd0..00000000 --- a/src/profound/types/shared_params/persona_id_filter.py +++ /dev/null @@ -1,20 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Union -from typing_extensions import Literal, Required, TypedDict - -from ..._types import SequenceNotStr - -__all__ = ["PersonaIDFilter"] - - -class PersonaIDFilter(TypedDict, total=False): - """Filter by persona UUID.""" - - field: Required[Literal["persona_id"]] - - operator: Required[Literal["is", "not_is", "in", "not_in"]] - - value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/shared_params/prompt_filter.py b/src/profound/types/shared_params/prompt_filter.py deleted file mode 100644 index 590f96ff..00000000 --- a/src/profound/types/shared_params/prompt_filter.py +++ /dev/null @@ -1,32 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Union -from typing_extensions import Literal, Required, TypedDict - -from ..._types import SequenceNotStr - -__all__ = ["PromptFilter"] - - -class PromptFilter(TypedDict, total=False): - """Filter by prompt text""" - - field: Required[Literal["prompt"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/shared_params/prompt_type_filter.py b/src/profound/types/shared_params/prompt_type_filter.py deleted file mode 100644 index 9194813e..00000000 --- a/src/profound/types/shared_params/prompt_type_filter.py +++ /dev/null @@ -1,35 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import List, Union -from typing_extensions import Literal, Required, TypedDict - -__all__ = ["PromptTypeFilter"] - - -class PromptTypeFilter(TypedDict, total=False): - """Filter by prompt type (visibility or sentiment). - - .. deprecated:: - Use :class:`AnalysisTypeFilter` instead. ``prompt_type`` is normalised - to ``analysis_type`` at parse time. - """ - - field: Required[Literal["prompt_type"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[Union[Literal["visibility", "sentiment"], List[Literal["visibility", "sentiment"]]]] diff --git a/src/profound/types/shared_params/region_id_filter.py b/src/profound/types/shared_params/region_id_filter.py deleted file mode 100644 index 238ff37e..00000000 --- a/src/profound/types/shared_params/region_id_filter.py +++ /dev/null @@ -1,21 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Union -from typing_extensions import Literal, Required, TypedDict - -from ..._types import SequenceNotStr - -__all__ = ["RegionIDFilter"] - - -class RegionIDFilter(TypedDict, total=False): - """Filter by region UUID.""" - - field: Required[Literal["region_id", "region"]] - """- `region` - Deprecated""" - - operator: Required[Literal["is", "not_is", "in", "not_in"]] - - value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/shared_params/region_name_filter.py b/src/profound/types/shared_params/region_name_filter.py deleted file mode 100644 index ee37e7e1..00000000 --- a/src/profound/types/shared_params/region_name_filter.py +++ /dev/null @@ -1,32 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Union -from typing_extensions import Literal, Required, TypedDict - -from ..._types import SequenceNotStr - -__all__ = ["RegionNameFilter"] - - -class RegionNameFilter(TypedDict, total=False): - """Filter by region name.""" - - field: Required[Literal["region_name"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/shared_params/tag_id_filter.py b/src/profound/types/shared_params/tag_id_filter.py deleted file mode 100644 index cb71c204..00000000 --- a/src/profound/types/shared_params/tag_id_filter.py +++ /dev/null @@ -1,21 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Union -from typing_extensions import Literal, Required, TypedDict - -from ..._types import SequenceNotStr - -__all__ = ["TagIDFilter"] - - -class TagIDFilter(TypedDict, total=False): - """Filter by tag (prompt group) UUID.""" - - field: Required[Literal["tag_id", "tag"]] - """- `tag` - Deprecated""" - - operator: Required[Literal["is", "not_is", "in", "not_in"]] - - value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/shared_params/topic_id_filter.py b/src/profound/types/shared_params/topic_id_filter.py deleted file mode 100644 index 9d62235e..00000000 --- a/src/profound/types/shared_params/topic_id_filter.py +++ /dev/null @@ -1,21 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Union -from typing_extensions import Literal, Required, TypedDict - -from ..._types import SequenceNotStr - -__all__ = ["TopicIDFilter"] - - -class TopicIDFilter(TypedDict, total=False): - """Filter by topic UUID.""" - - field: Required[Literal["topic_id", "topic"]] - """- `topic` - Deprecated""" - - operator: Required[Literal["is", "not_is", "in", "not_in"]] - - value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/tag_name_filter_param.py b/src/profound/types/tag_name_filter_param.py deleted file mode 100644 index 02deb4ab..00000000 --- a/src/profound/types/tag_name_filter_param.py +++ /dev/null @@ -1,32 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Union -from typing_extensions import Literal, Required, TypedDict - -from .._types import SequenceNotStr - -__all__ = ["TagNameFilterParam"] - - -class TagNameFilterParam(TypedDict, total=False): - """Filter by tag name.""" - - field: Required[Literal["tag_name"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/topic_name_filter_param.py b/src/profound/types/topic_name_filter_param.py deleted file mode 100644 index 59ea0db1..00000000 --- a/src/profound/types/topic_name_filter_param.py +++ /dev/null @@ -1,32 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Union -from typing_extensions import Literal, Required, TypedDict - -from .._types import SequenceNotStr - -__all__ = ["TopicNameFilterParam"] - - -class TopicNameFilterParam(TypedDict, total=False): - """Filter by topic name""" - - field: Required[Literal["topic_name"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/url_filter_param.py b/src/profound/types/url_filter_param.py deleted file mode 100644 index 9fefb857..00000000 --- a/src/profound/types/url_filter_param.py +++ /dev/null @@ -1,32 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Union -from typing_extensions import Literal, Required, TypedDict - -from .._types import SequenceNotStr - -__all__ = ["URLFilterParam"] - - -class URLFilterParam(TypedDict, total=False): - """Filter by URL""" - - field: Required[Literal["url"]] - - operator: Required[ - Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] - ] - - value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/py.typed b/src/py.typed similarity index 100% rename from src/profound/py.typed rename to src/py.typed diff --git a/src/profound/resources/__init__.py b/src/resources/__init__.py similarity index 59% rename from src/profound/resources/__init__.py rename to src/resources/__init__.py index 43029334..6434619f 100644 --- a/src/profound/resources/__init__.py +++ b/src/resources/__init__.py @@ -1,28 +1,12 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. -from .ads import ( - AdsResource, - AsyncAdsResource, - AdsResourceWithRawResponse, - AsyncAdsResourceWithRawResponse, - AdsResourceWithStreamingResponse, - AsyncAdsResourceWithStreamingResponse, -) -from .agents import ( - AgentsResource, - AsyncAgentsResource, - AgentsResourceWithRawResponse, - AsyncAgentsResourceWithRawResponse, - AgentsResourceWithStreamingResponse, - AsyncAgentsResourceWithStreamingResponse, -) -from .content import ( - ContentResource, - AsyncContentResource, - ContentResourceWithRawResponse, - AsyncContentResourceWithRawResponse, - ContentResourceWithStreamingResponse, - AsyncContentResourceWithStreamingResponse, +from .organization import ( + OrganizationResource, + AsyncOrganizationResource, + OrganizationResourceWithRawResponse, + AsyncOrganizationResourceWithRawResponse, + OrganizationResourceWithStreamingResponse, + AsyncOrganizationResourceWithStreamingResponse, ) from .prompts import ( PromptsResource, @@ -40,29 +24,29 @@ ReportsResourceWithStreamingResponse, AsyncReportsResourceWithStreamingResponse, ) -from .projects import ( - ProjectsResource, - AsyncProjectsResource, - ProjectsResourceWithRawResponse, - AsyncProjectsResourceWithRawResponse, - ProjectsResourceWithStreamingResponse, - AsyncProjectsResourceWithStreamingResponse, +from .content import ( + ContentResource, + AsyncContentResource, + ContentResourceWithRawResponse, + AsyncContentResourceWithRawResponse, + ContentResourceWithStreamingResponse, + AsyncContentResourceWithStreamingResponse, ) -from .documents import ( - DocumentsResource, - AsyncDocumentsResource, - DocumentsResourceWithRawResponse, - AsyncDocumentsResourceWithRawResponse, - DocumentsResourceWithStreamingResponse, - AsyncDocumentsResourceWithStreamingResponse, +from .knowledge_bases import ( + KnowledgeBasesResource, + AsyncKnowledgeBasesResource, + KnowledgeBasesResourceWithRawResponse, + AsyncKnowledgeBasesResourceWithRawResponse, + KnowledgeBasesResourceWithStreamingResponse, + AsyncKnowledgeBasesResourceWithStreamingResponse, ) -from .integrations import ( - IntegrationsResource, - AsyncIntegrationsResource, - IntegrationsResourceWithRawResponse, - AsyncIntegrationsResourceWithRawResponse, - IntegrationsResourceWithStreamingResponse, - AsyncIntegrationsResourceWithStreamingResponse, +from .agents import ( + AgentsResource, + AsyncAgentsResource, + AgentsResourceWithRawResponse, + AsyncAgentsResourceWithRawResponse, + AgentsResourceWithStreamingResponse, + AsyncAgentsResourceWithStreamingResponse, ) from .organizations import ( OrganizationsResource, @@ -72,22 +56,14 @@ OrganizationsResourceWithStreamingResponse, AsyncOrganizationsResourceWithStreamingResponse, ) -from .knowledge_bases import ( - KnowledgeBasesResource, - AsyncKnowledgeBasesResource, - KnowledgeBasesResourceWithRawResponse, - AsyncKnowledgeBasesResourceWithRawResponse, - KnowledgeBasesResourceWithStreamingResponse, - AsyncKnowledgeBasesResourceWithStreamingResponse, -) __all__ = [ - "OrganizationsResource", - "AsyncOrganizationsResource", - "OrganizationsResourceWithRawResponse", - "AsyncOrganizationsResourceWithRawResponse", - "OrganizationsResourceWithStreamingResponse", - "AsyncOrganizationsResourceWithStreamingResponse", + "OrganizationResource", + "AsyncOrganizationResource", + "OrganizationResourceWithRawResponse", + "AsyncOrganizationResourceWithRawResponse", + "OrganizationResourceWithStreamingResponse", + "AsyncOrganizationResourceWithStreamingResponse", "PromptsResource", "AsyncPromptsResource", "PromptsResourceWithRawResponse", @@ -106,40 +82,22 @@ "AsyncContentResourceWithRawResponse", "ContentResourceWithStreamingResponse", "AsyncContentResourceWithStreamingResponse", - "AgentsResource", - "AsyncAgentsResource", - "AgentsResourceWithRawResponse", - "AsyncAgentsResourceWithRawResponse", - "AgentsResourceWithStreamingResponse", - "AsyncAgentsResourceWithStreamingResponse", "KnowledgeBasesResource", "AsyncKnowledgeBasesResource", "KnowledgeBasesResourceWithRawResponse", "AsyncKnowledgeBasesResourceWithRawResponse", "KnowledgeBasesResourceWithStreamingResponse", "AsyncKnowledgeBasesResourceWithStreamingResponse", - "ProjectsResource", - "AsyncProjectsResource", - "ProjectsResourceWithRawResponse", - "AsyncProjectsResourceWithRawResponse", - "ProjectsResourceWithStreamingResponse", - "AsyncProjectsResourceWithStreamingResponse", - "IntegrationsResource", - "AsyncIntegrationsResource", - "IntegrationsResourceWithRawResponse", - "AsyncIntegrationsResourceWithRawResponse", - "IntegrationsResourceWithStreamingResponse", - "AsyncIntegrationsResourceWithStreamingResponse", - "DocumentsResource", - "AsyncDocumentsResource", - "DocumentsResourceWithRawResponse", - "AsyncDocumentsResourceWithRawResponse", - "DocumentsResourceWithStreamingResponse", - "AsyncDocumentsResourceWithStreamingResponse", - "AdsResource", - "AsyncAdsResource", - "AdsResourceWithRawResponse", - "AsyncAdsResourceWithRawResponse", - "AdsResourceWithStreamingResponse", - "AsyncAdsResourceWithStreamingResponse", + "AgentsResource", + "AsyncAgentsResource", + "AgentsResourceWithRawResponse", + "AsyncAgentsResourceWithRawResponse", + "AgentsResourceWithStreamingResponse", + "AsyncAgentsResourceWithStreamingResponse", + "OrganizationsResource", + "AsyncOrganizationsResource", + "OrganizationsResourceWithRawResponse", + "AsyncOrganizationsResourceWithRawResponse", + "OrganizationsResourceWithStreamingResponse", + "AsyncOrganizationsResourceWithStreamingResponse", ] diff --git a/src/profound/resources/agents/__init__.py b/src/resources/agents/__init__.py similarity index 94% rename from src/profound/resources/agents/__init__.py rename to src/resources/agents/__init__.py index e05b3a9c..1b3286ea 100644 --- a/src/profound/resources/agents/__init__.py +++ b/src/resources/agents/__init__.py @@ -1,13 +1,5 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. -from .runs import ( - RunsResource, - AsyncRunsResource, - RunsResourceWithRawResponse, - AsyncRunsResourceWithRawResponse, - RunsResourceWithStreamingResponse, - AsyncRunsResourceWithStreamingResponse, -) from .agents import ( AgentsResource, AsyncAgentsResource, @@ -24,24 +16,32 @@ NodeTypesResourceWithStreamingResponse, AsyncNodeTypesResourceWithStreamingResponse, ) +from .runs import ( + RunsResource, + AsyncRunsResource, + RunsResourceWithRawResponse, + AsyncRunsResourceWithRawResponse, + RunsResourceWithStreamingResponse, + AsyncRunsResourceWithStreamingResponse, +) __all__ = [ - "RunsResource", - "AsyncRunsResource", - "RunsResourceWithRawResponse", - "AsyncRunsResourceWithRawResponse", - "RunsResourceWithStreamingResponse", - "AsyncRunsResourceWithStreamingResponse", - "NodeTypesResource", - "AsyncNodeTypesResource", - "NodeTypesResourceWithRawResponse", - "AsyncNodeTypesResourceWithRawResponse", - "NodeTypesResourceWithStreamingResponse", - "AsyncNodeTypesResourceWithStreamingResponse", "AgentsResource", "AsyncAgentsResource", "AgentsResourceWithRawResponse", "AsyncAgentsResourceWithRawResponse", "AgentsResourceWithStreamingResponse", "AsyncAgentsResourceWithStreamingResponse", + "NodeTypesResource", + "AsyncNodeTypesResource", + "NodeTypesResourceWithRawResponse", + "AsyncNodeTypesResourceWithRawResponse", + "NodeTypesResourceWithStreamingResponse", + "AsyncNodeTypesResourceWithStreamingResponse", + "RunsResource", + "AsyncRunsResource", + "RunsResourceWithRawResponse", + "AsyncRunsResourceWithRawResponse", + "RunsResourceWithStreamingResponse", + "AsyncRunsResourceWithStreamingResponse", ] diff --git a/src/resources/agents/agents.py b/src/resources/agents/agents.py new file mode 100644 index 00000000..68ae62cc --- /dev/null +++ b/src/resources/agents/agents.py @@ -0,0 +1,789 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +import httpx + +from typing import Iterable, Optional +from typing_extensions import Literal + +from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given +from ..._utils import path_template, maybe_transform, async_maybe_transform +from ..._compat import cached_property +from ..._resource import SyncAPIResource, AsyncAPIResource +from ..._response import ( + to_raw_response_wrapper, + to_streamed_response_wrapper, + async_to_raw_response_wrapper, + async_to_streamed_response_wrapper, +) +from ..._base_client import make_request_options +from .node_types import ( + NodeTypesResource, + AsyncNodeTypesResource, + NodeTypesResourceWithRawResponse, + AsyncNodeTypesResourceWithRawResponse, + NodeTypesResourceWithStreamingResponse, + AsyncNodeTypesResourceWithStreamingResponse, +) +from .runs import ( + RunsResource, + AsyncRunsResource, + RunsResourceWithRawResponse, + AsyncRunsResourceWithRawResponse, + RunsResourceWithStreamingResponse, + AsyncRunsResourceWithStreamingResponse, +) +from ...types.agent_list_response import AgentListResponse, Agent +from ...types import agent_list_params +from ...types.agent_create_v1_post_response import AgentCreateV1PostResponse +from ...types import agent_create_v1_post_params +from ...types.agent_publish_v1_id_publish_post_response import AgentPublishV1IdPublishPostResponse +from ...types.agent_retrieve_response import AgentRetrieveResponse, AgentSchema, Input, Output, AgentValidation, AgentValidationIssue +from ...types import agent_retrieve_params +from ...types.agent_update_v1_id_patch_response import AgentUpdateV1IdPatchResponse, AgentSchema, Input, Output, AgentValidation, AgentValidationIssue +from ...types import agent_update_v1_id_patch_params +from ...types.agent_list_graph_v1_graph_get_response import AgentListGraphV1GraphGetResponse, Graph +from ...types import agent_list_graph_v1_graph_get_params + +__all__ = ["AgentsResource", "AsyncAgentsResource"] + + +class AgentsResource(SyncAPIResource): + + @cached_property + def node_types(self) -> NodeTypesResource: + return NodeTypesResource(self._client) + + @cached_property + def runs(self) -> RunsResource: + return RunsResource(self._client) + + @cached_property + def with_raw_response(self) -> AgentsResourceWithRawResponse: + return AgentsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AgentsResourceWithStreamingResponse: + return AgentsResourceWithStreamingResponse(self) + + def list( + self, + *, + statuses: Optional[Iterable[Literal["published", "draft"]]] | Omit = omit, + limit: int | Omit = omit, + next_cursor: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AgentListResponse: + """ + List agents available to your organization. + + Agent status reflects whether an agent has ever been published. `published` + agents have a live published version. `draft` agents have not been + published yet. + + Args: + statuses: Optional status filter. Use `published` to list agents that have a live published version, or `draft` to list agents that have not been published yet. Defaults to `published`. + limit: Query parameter. + next_cursor: Query parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AgentListResponse: Successful Response + + Example: + ```python + agent = client.agents.list( + limit=100, + ) + ``` + """ + return self._get( + "/v1/agents", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"statuses": statuses, "limit": limit, "next_cursor": next_cursor}, agent_list_params.AgentListParams)), + cast_to=AgentListResponse, + ) + + def create_v1_post( + self, + *, + organization_id: str, + name: str, + description: Optional[str] | Omit = omit, + graph: Optional[agent_create_v1_post_params.Graph] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AgentCreateV1PostResponse: + """ + Create a new draft agent owned by the given organization. + + `organization_id` is required and you must be a member of it. The agent is created + as a `draft`; publish it with `POST /v1/agents/{agent_id}/publish` once its graph + is ready. + + Args: + organization_id: ID of the organization that will own the agent. Required — Profound API keys are user-scoped, so the owning organization must be chosen explicitly. The caller must be a member of this organization. + name: Display name for the agent. Must be non-empty. + description: Short description of the agent. + graph: Initial workflow graph for the agent's draft version. Optional — an agent can be created empty and have its graph filled in later. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AgentCreateV1PostResponse: Successful Response + + Example: + ```python + agent = client.agents.create_v1_post( + organization_id="", + name="", + ) + ``` + """ + return self._post( + "/v1/agents", + body=maybe_transform( + { + "organization_id": organization_id, + "name": name, + "description": description, + "graph": graph, + }, + agent_create_v1_post_params.AgentCreateV1PostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AgentCreateV1PostResponse, + ) + + def publish_v1_id_publish_post( + self, + agent_id: str, + *, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AgentPublishV1IdPublishPostResponse: + """ + Publish an agent's latest draft as its live published version. + + You must be a member of the agent's organization. Publishing promotes the current + draft graph to a new published version. A draft that cannot produce its declared + input/output contract is rejected with `422` and is not published. + + Args: + agent_id: The ID of the agent to publish. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AgentPublishV1IdPublishPostResponse: Successful Response + + Example: + ```python + agent = client.agents.publish_v1_id_publish_post( + agent_id="agentId", + ) + ``` + """ + if agent_id is None or (isinstance(agent_id, str) and not agent_id): + raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") + return self._post( + path_template("/v1/agents/{agent_id}/publish", **{"agent_id": agent_id}), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AgentPublishV1IdPublishPostResponse, + ) + + def retrieve( + self, + agent_id: str, + *, + version: Literal["published", "draft"] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AgentRetrieveResponse: + """ + Retrieve an agent and its schema details. + + Agents can have both a live published version and a draft version with newer + unpublished changes. Use the `version` parameter to choose which state to return. + + Args: + agent_id: The ID of the agent to retrieve. + version: Version of the agent to retrieve. Use `published` for the live version, or `draft` for the latest unpublished changes for the same agent. Defaults to `published`. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AgentRetrieveResponse: Successful Response + + Example: + ```python + agent = client.agents.retrieve( + agent_id="agentId", + ) + ``` + """ + if agent_id is None or (isinstance(agent_id, str) and not agent_id): + raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") + return self._get( + path_template("/v1/agents/{agent_id}", **{"agent_id": agent_id}), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"version": version}, agent_retrieve_params.AgentRetrieveParams)), + cast_to=AgentRetrieveResponse, + ) + + def update_v1_id_patch( + self, + agent_id: str, + *, + graph: agent_update_v1_id_patch_params.Graph, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AgentUpdateV1IdPatchResponse: + """ + Update an agent's draft graph in place. + + You must be a member of the agent's organization. The agent's draft is replaced with the + supplied graph and re-validated, so you can iterate one draft — create, then update per + fix — instead of creating a new agent on every change. The response carries the updated + `validation`; publish with `POST /v1/agents/{agent_id}/publish` once `validation.valid`. + + Args: + agent_id: The ID of the agent to update. + graph: New workflow graph for the agent's draft version. Replaces the current draft graph; the agent is iterated in place rather than re-created, so its ID is stable. Required — a null graph is rejected as a 422 here rather than as a relayed upstream error. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AgentUpdateV1IdPatchResponse: Successful Response + + Example: + ```python + agent = client.agents.update_v1_id_patch( + agent_id="agentId", + graph={}, + ) + ``` + """ + if agent_id is None or (isinstance(agent_id, str) and not agent_id): + raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") + return self._patch( + path_template("/v1/agents/{agent_id}", **{"agent_id": agent_id}), + body=maybe_transform( + {"graph": graph}, + agent_update_v1_id_patch_params.AgentUpdateV1IdPatchParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AgentUpdateV1IdPatchResponse, + ) + + def list_graph_v1_graph_get( + self, + agent_id: str, + *, + version: Literal["published", "draft"] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AgentListGraphV1GraphGetResponse: + """ + Retrieve an agent's full workflow graph (`{nodes, edges}`). + + The graph is returned verbatim in the canonical dialect — the same shape `POST /v1/agents` + and `PATCH /v1/agents/{agent_id}` accept — so a known-good agent can be read back, copied, + and edited. Tool-backed nodes appear in their lowered `tool` form rather than the friendly + v1 node types. A `draft` is visible only to its creator; the `published` version is visible + across its organization. + + Args: + agent_id: The ID of the agent whose graph to retrieve. + version: Version of the agent whose graph to retrieve. Use `published` for the live version, or `draft` for the latest unpublished changes. Defaults to `published`. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AgentListGraphV1GraphGetResponse: Successful Response + + Example: + ```python + agent = client.agents.list_graph_v1_graph_get( + agent_id="agentId", + ) + ``` + """ + if agent_id is None or (isinstance(agent_id, str) and not agent_id): + raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") + return self._get( + path_template("/v1/agents/{agent_id}/graph", **{"agent_id": agent_id}), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"version": version}, agent_list_graph_v1_graph_get_params.AgentListGraphV1GraphGetParams)), + cast_to=AgentListGraphV1GraphGetResponse, + ) + + +class AsyncAgentsResource(AsyncAPIResource): + + @cached_property + def node_types(self) -> AsyncNodeTypesResource: + return AsyncNodeTypesResource(self._client) + + @cached_property + def runs(self) -> AsyncRunsResource: + return AsyncRunsResource(self._client) + + @cached_property + def with_raw_response(self) -> AsyncAgentsResourceWithRawResponse: + return AsyncAgentsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncAgentsResourceWithStreamingResponse: + return AsyncAgentsResourceWithStreamingResponse(self) + + async def list( + self, + *, + statuses: Optional[Iterable[Literal["published", "draft"]]] | Omit = omit, + limit: int | Omit = omit, + next_cursor: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AgentListResponse: + """ + List agents available to your organization. + + Agent status reflects whether an agent has ever been published. `published` + agents have a live published version. `draft` agents have not been + published yet. + + Args: + statuses: Optional status filter. Use `published` to list agents that have a live published version, or `draft` to list agents that have not been published yet. Defaults to `published`. + limit: Query parameter. + next_cursor: Query parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AgentListResponse: Successful Response + + Example: + ```python + agent = await client.agents.list( + limit=100, + ) + ``` + """ + return await self._get( + "/v1/agents", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"statuses": statuses, "limit": limit, "next_cursor": next_cursor}, agent_list_params.AgentListParams)), + cast_to=AgentListResponse, + ) + + async def create_v1_post( + self, + *, + organization_id: str, + name: str, + description: Optional[str] | Omit = omit, + graph: Optional[agent_create_v1_post_params.Graph] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AgentCreateV1PostResponse: + """ + Create a new draft agent owned by the given organization. + + `organization_id` is required and you must be a member of it. The agent is created + as a `draft`; publish it with `POST /v1/agents/{agent_id}/publish` once its graph + is ready. + + Args: + organization_id: ID of the organization that will own the agent. Required — Profound API keys are user-scoped, so the owning organization must be chosen explicitly. The caller must be a member of this organization. + name: Display name for the agent. Must be non-empty. + description: Short description of the agent. + graph: Initial workflow graph for the agent's draft version. Optional — an agent can be created empty and have its graph filled in later. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AgentCreateV1PostResponse: Successful Response + + Example: + ```python + agent = await client.agents.create_v1_post( + organization_id="", + name="", + ) + ``` + """ + return await self._post( + "/v1/agents", + body=await async_maybe_transform( + { + "organization_id": organization_id, + "name": name, + "description": description, + "graph": graph, + }, + agent_create_v1_post_params.AgentCreateV1PostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AgentCreateV1PostResponse, + ) + + async def publish_v1_id_publish_post( + self, + agent_id: str, + *, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AgentPublishV1IdPublishPostResponse: + """ + Publish an agent's latest draft as its live published version. + + You must be a member of the agent's organization. Publishing promotes the current + draft graph to a new published version. A draft that cannot produce its declared + input/output contract is rejected with `422` and is not published. + + Args: + agent_id: The ID of the agent to publish. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AgentPublishV1IdPublishPostResponse: Successful Response + + Example: + ```python + agent = await client.agents.publish_v1_id_publish_post( + agent_id="agentId", + ) + ``` + """ + if agent_id is None or (isinstance(agent_id, str) and not agent_id): + raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") + return await self._post( + path_template("/v1/agents/{agent_id}/publish", **{"agent_id": agent_id}), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AgentPublishV1IdPublishPostResponse, + ) + + async def retrieve( + self, + agent_id: str, + *, + version: Literal["published", "draft"] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AgentRetrieveResponse: + """ + Retrieve an agent and its schema details. + + Agents can have both a live published version and a draft version with newer + unpublished changes. Use the `version` parameter to choose which state to return. + + Args: + agent_id: The ID of the agent to retrieve. + version: Version of the agent to retrieve. Use `published` for the live version, or `draft` for the latest unpublished changes for the same agent. Defaults to `published`. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AgentRetrieveResponse: Successful Response + + Example: + ```python + agent = await client.agents.retrieve( + agent_id="agentId", + ) + ``` + """ + if agent_id is None or (isinstance(agent_id, str) and not agent_id): + raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") + return await self._get( + path_template("/v1/agents/{agent_id}", **{"agent_id": agent_id}), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"version": version}, agent_retrieve_params.AgentRetrieveParams)), + cast_to=AgentRetrieveResponse, + ) + + async def update_v1_id_patch( + self, + agent_id: str, + *, + graph: agent_update_v1_id_patch_params.Graph, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AgentUpdateV1IdPatchResponse: + """ + Update an agent's draft graph in place. + + You must be a member of the agent's organization. The agent's draft is replaced with the + supplied graph and re-validated, so you can iterate one draft — create, then update per + fix — instead of creating a new agent on every change. The response carries the updated + `validation`; publish with `POST /v1/agents/{agent_id}/publish` once `validation.valid`. + + Args: + agent_id: The ID of the agent to update. + graph: New workflow graph for the agent's draft version. Replaces the current draft graph; the agent is iterated in place rather than re-created, so its ID is stable. Required — a null graph is rejected as a 422 here rather than as a relayed upstream error. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AgentUpdateV1IdPatchResponse: Successful Response + + Example: + ```python + agent = await client.agents.update_v1_id_patch( + agent_id="agentId", + graph={}, + ) + ``` + """ + if agent_id is None or (isinstance(agent_id, str) and not agent_id): + raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") + return await self._patch( + path_template("/v1/agents/{agent_id}", **{"agent_id": agent_id}), + body=await async_maybe_transform( + {"graph": graph}, + agent_update_v1_id_patch_params.AgentUpdateV1IdPatchParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AgentUpdateV1IdPatchResponse, + ) + + async def list_graph_v1_graph_get( + self, + agent_id: str, + *, + version: Literal["published", "draft"] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AgentListGraphV1GraphGetResponse: + """ + Retrieve an agent's full workflow graph (`{nodes, edges}`). + + The graph is returned verbatim in the canonical dialect — the same shape `POST /v1/agents` + and `PATCH /v1/agents/{agent_id}` accept — so a known-good agent can be read back, copied, + and edited. Tool-backed nodes appear in their lowered `tool` form rather than the friendly + v1 node types. A `draft` is visible only to its creator; the `published` version is visible + across its organization. + + Args: + agent_id: The ID of the agent whose graph to retrieve. + version: Version of the agent whose graph to retrieve. Use `published` for the live version, or `draft` for the latest unpublished changes. Defaults to `published`. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AgentListGraphV1GraphGetResponse: Successful Response + + Example: + ```python + agent = await client.agents.list_graph_v1_graph_get( + agent_id="agentId", + ) + ``` + """ + if agent_id is None or (isinstance(agent_id, str) and not agent_id): + raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") + return await self._get( + path_template("/v1/agents/{agent_id}/graph", **{"agent_id": agent_id}), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"version": version}, agent_list_graph_v1_graph_get_params.AgentListGraphV1GraphGetParams)), + cast_to=AgentListGraphV1GraphGetResponse, + ) + + +class AgentsResourceWithRawResponse: + def __init__(self, agents: AgentsResource) -> None: + self._agents = agents + + self.list = to_raw_response_wrapper( + agents.list, + ) + self.create_v1_post = to_raw_response_wrapper( + agents.create_v1_post, + ) + self.publish_v1_id_publish_post = to_raw_response_wrapper( + agents.publish_v1_id_publish_post, + ) + self.retrieve = to_raw_response_wrapper( + agents.retrieve, + ) + self.update_v1_id_patch = to_raw_response_wrapper( + agents.update_v1_id_patch, + ) + self.list_graph_v1_graph_get = to_raw_response_wrapper( + agents.list_graph_v1_graph_get, + ) + + @cached_property + def node_types(self) -> NodeTypesResourceWithRawResponse: + return NodeTypesResourceWithRawResponse(self._agents.node_types) + + @cached_property + def runs(self) -> RunsResourceWithRawResponse: + return RunsResourceWithRawResponse(self._agents.runs) + + +class AsyncAgentsResourceWithRawResponse: + def __init__(self, agents: AsyncAgentsResource) -> None: + self._agents = agents + + self.list = async_to_raw_response_wrapper( + agents.list, + ) + self.create_v1_post = async_to_raw_response_wrapper( + agents.create_v1_post, + ) + self.publish_v1_id_publish_post = async_to_raw_response_wrapper( + agents.publish_v1_id_publish_post, + ) + self.retrieve = async_to_raw_response_wrapper( + agents.retrieve, + ) + self.update_v1_id_patch = async_to_raw_response_wrapper( + agents.update_v1_id_patch, + ) + self.list_graph_v1_graph_get = async_to_raw_response_wrapper( + agents.list_graph_v1_graph_get, + ) + + @cached_property + def node_types(self) -> AsyncNodeTypesResourceWithRawResponse: + return AsyncNodeTypesResourceWithRawResponse(self._agents.node_types) + + @cached_property + def runs(self) -> AsyncRunsResourceWithRawResponse: + return AsyncRunsResourceWithRawResponse(self._agents.runs) + + +class AgentsResourceWithStreamingResponse: + def __init__(self, agents: AgentsResource) -> None: + self._agents = agents + + self.list = to_streamed_response_wrapper( + agents.list, + ) + self.create_v1_post = to_streamed_response_wrapper( + agents.create_v1_post, + ) + self.publish_v1_id_publish_post = to_streamed_response_wrapper( + agents.publish_v1_id_publish_post, + ) + self.retrieve = to_streamed_response_wrapper( + agents.retrieve, + ) + self.update_v1_id_patch = to_streamed_response_wrapper( + agents.update_v1_id_patch, + ) + self.list_graph_v1_graph_get = to_streamed_response_wrapper( + agents.list_graph_v1_graph_get, + ) + + @cached_property + def node_types(self) -> NodeTypesResourceWithStreamingResponse: + return NodeTypesResourceWithStreamingResponse(self._agents.node_types) + + @cached_property + def runs(self) -> RunsResourceWithStreamingResponse: + return RunsResourceWithStreamingResponse(self._agents.runs) + + +class AsyncAgentsResourceWithStreamingResponse: + def __init__(self, agents: AsyncAgentsResource) -> None: + self._agents = agents + + self.list = async_to_streamed_response_wrapper( + agents.list, + ) + self.create_v1_post = async_to_streamed_response_wrapper( + agents.create_v1_post, + ) + self.publish_v1_id_publish_post = async_to_streamed_response_wrapper( + agents.publish_v1_id_publish_post, + ) + self.retrieve = async_to_streamed_response_wrapper( + agents.retrieve, + ) + self.update_v1_id_patch = async_to_streamed_response_wrapper( + agents.update_v1_id_patch, + ) + self.list_graph_v1_graph_get = async_to_streamed_response_wrapper( + agents.list_graph_v1_graph_get, + ) + + @cached_property + def node_types(self) -> AsyncNodeTypesResourceWithStreamingResponse: + return AsyncNodeTypesResourceWithStreamingResponse(self._agents.node_types) + + @cached_property + def runs(self) -> AsyncRunsResourceWithStreamingResponse: + return AsyncRunsResourceWithStreamingResponse(self._agents.runs) diff --git a/src/resources/agents/node_types.py b/src/resources/agents/node_types.py new file mode 100644 index 00000000..52dec50d --- /dev/null +++ b/src/resources/agents/node_types.py @@ -0,0 +1,249 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +import httpx + +from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given +from ..._utils import path_template, maybe_transform, async_maybe_transform +from ..._compat import cached_property +from ..._resource import SyncAPIResource, AsyncAPIResource +from ..._response import ( + to_raw_response_wrapper, + to_streamed_response_wrapper, + async_to_raw_response_wrapper, + async_to_streamed_response_wrapper, +) +from ..._base_client import make_request_options +from ...types.agents.node_type_list_v1_agents_get_response import NodeTypeListV1AgentsGetResponse, NodeTypeSummary +from ...types.agents.node_type_list_schema_v1_agents_schema_get_response import NodeTypeListSchemaV1AgentsSchemaGetResponse, Schema, Example, Documentation + +__all__ = ["NodeTypesResource", "AsyncNodeTypesResource"] + + +class NodeTypesResource(SyncAPIResource): + + @cached_property + def with_raw_response(self) -> NodeTypesResourceWithRawResponse: + return NodeTypesResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> NodeTypesResourceWithStreamingResponse: + return NodeTypesResourceWithStreamingResponse(self) + + def list_v1_agents_get( + self, + *, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> NodeTypeListV1AgentsGetResponse: + """ + List the node types available for building agents. + + The set is deterministic and does not depend on the caller, so the response + is safe to cache across sessions. Integration-dependent and dynamic-schema + node types are intentionally excluded in v1. + + Args: + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + NodeTypeListV1AgentsGetResponse: Successful Response + + Example: + ```python + node_type = client.agents.node_types.list_v1_agents_get() + ``` + """ + return self._get( + "/v1/agents/node-types", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=NodeTypeListV1AgentsGetResponse, + ) + + def list_schema_v1_agents_schema_get( + self, + node_type: str, + *, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> NodeTypeListSchemaV1AgentsSchemaGetResponse: + """ + Retrieve the JSON schema and worked examples for a single node type. + + The `schema` field is an opaque JSON Schema for the node's configuration. + Use `schema_version` as a cache key — it bumps whenever the schema changes. + + Args: + node_type: The node type to fetch the schema for, e.g. `llm`. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + NodeTypeListSchemaV1AgentsSchemaGetResponse: Successful Response + + Example: + ```python + node_type = client.agents.node_types.list_schema_v1_agents_schema_get( + node_type="nodeType", + ) + ``` + """ + if node_type is None or (isinstance(node_type, str) and not node_type): + raise ValueError(f"Expected a non-empty value for `node_type` but received {node_type!r}") + return self._get( + path_template("/v1/agents/node-types/{node_type}/schema", **{"node_type": node_type}), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=NodeTypeListSchemaV1AgentsSchemaGetResponse, + ) + + +class AsyncNodeTypesResource(AsyncAPIResource): + + @cached_property + def with_raw_response(self) -> AsyncNodeTypesResourceWithRawResponse: + return AsyncNodeTypesResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncNodeTypesResourceWithStreamingResponse: + return AsyncNodeTypesResourceWithStreamingResponse(self) + + async def list_v1_agents_get( + self, + *, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> NodeTypeListV1AgentsGetResponse: + """ + List the node types available for building agents. + + The set is deterministic and does not depend on the caller, so the response + is safe to cache across sessions. Integration-dependent and dynamic-schema + node types are intentionally excluded in v1. + + Args: + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + NodeTypeListV1AgentsGetResponse: Successful Response + + Example: + ```python + node_type = await client.agents.node_types.list_v1_agents_get() + ``` + """ + return await self._get( + "/v1/agents/node-types", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=NodeTypeListV1AgentsGetResponse, + ) + + async def list_schema_v1_agents_schema_get( + self, + node_type: str, + *, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> NodeTypeListSchemaV1AgentsSchemaGetResponse: + """ + Retrieve the JSON schema and worked examples for a single node type. + + The `schema` field is an opaque JSON Schema for the node's configuration. + Use `schema_version` as a cache key — it bumps whenever the schema changes. + + Args: + node_type: The node type to fetch the schema for, e.g. `llm`. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + NodeTypeListSchemaV1AgentsSchemaGetResponse: Successful Response + + Example: + ```python + node_type = await client.agents.node_types.list_schema_v1_agents_schema_get( + node_type="nodeType", + ) + ``` + """ + if node_type is None or (isinstance(node_type, str) and not node_type): + raise ValueError(f"Expected a non-empty value for `node_type` but received {node_type!r}") + return await self._get( + path_template("/v1/agents/node-types/{node_type}/schema", **{"node_type": node_type}), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=NodeTypeListSchemaV1AgentsSchemaGetResponse, + ) + + +class NodeTypesResourceWithRawResponse: + def __init__(self, node_types: NodeTypesResource) -> None: + self._node_types = node_types + + self.list_v1_agents_get = to_raw_response_wrapper( + node_types.list_v1_agents_get, + ) + self.list_schema_v1_agents_schema_get = to_raw_response_wrapper( + node_types.list_schema_v1_agents_schema_get, + ) + + +class AsyncNodeTypesResourceWithRawResponse: + def __init__(self, node_types: AsyncNodeTypesResource) -> None: + self._node_types = node_types + + self.list_v1_agents_get = async_to_raw_response_wrapper( + node_types.list_v1_agents_get, + ) + self.list_schema_v1_agents_schema_get = async_to_raw_response_wrapper( + node_types.list_schema_v1_agents_schema_get, + ) + + +class NodeTypesResourceWithStreamingResponse: + def __init__(self, node_types: NodeTypesResource) -> None: + self._node_types = node_types + + self.list_v1_agents_get = to_streamed_response_wrapper( + node_types.list_v1_agents_get, + ) + self.list_schema_v1_agents_schema_get = to_streamed_response_wrapper( + node_types.list_schema_v1_agents_schema_get, + ) + + +class AsyncNodeTypesResourceWithStreamingResponse: + def __init__(self, node_types: AsyncNodeTypesResource) -> None: + self._node_types = node_types + + self.list_v1_agents_get = async_to_streamed_response_wrapper( + node_types.list_v1_agents_get, + ) + self.list_schema_v1_agents_schema_get = async_to_streamed_response_wrapper( + node_types.list_schema_v1_agents_schema_get, + ) diff --git a/src/profound/resources/agents/runs.py b/src/resources/agents/runs.py similarity index 56% rename from src/profound/resources/agents/runs.py rename to src/resources/agents/runs.py index f50ca1b1..e226b6c8 100644 --- a/src/profound/resources/agents/runs.py +++ b/src/resources/agents/runs.py @@ -1,9 +1,7 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from __future__ import annotations -from typing import Dict - import httpx from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given @@ -17,38 +15,28 @@ async_to_streamed_response_wrapper, ) from ..._base_client import make_request_options -from ...types.agents import run_create_params, run_retrieve_params from ...types.agents.run_create_response import RunCreateResponse -from ...types.agents.run_retrieve_response import RunRetrieveResponse +from ...types.agents import run_create_params +from ...types.agents.run_retrieve_response import RunRetrieveResponse, Error, Outputs __all__ = ["RunsResource", "AsyncRunsResource"] class RunsResource(SyncAPIResource): + @cached_property def with_raw_response(self) -> RunsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ return RunsResourceWithRawResponse(self) @cached_property def with_streaming_response(self) -> RunsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ return RunsResourceWithStreamingResponse(self) def create( self, agent_id: str, *, - inputs: Dict[str, object] | Omit = omit, + inputs: run_create_params.Inputs | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -58,33 +46,38 @@ def create( ) -> RunCreateResponse: """ Start a new run for an agent. - + Runs always execute the agent's live published version, so the agent must be published first with `POST /v1/agents/{agent_id}/publish`. Unpublished drafts cannot be run. - + Args: - agent_id: The ID of the agent to run. - - inputs: Input values for the run. Keys should match the property names defined in - `schema.input`. Omit the request body when the agent does not require inputs. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds + agent_id: The ID of the agent to run. + inputs: Input values for the run. Keys should match the property names defined in `schema.input`. Omit the request body when the agent does not require inputs. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + RunCreateResponse: Successful Response + + Example: + ```python + run = client.agents.runs.create( + agent_id="agentId", + ) + ``` """ - if not agent_id: + if agent_id is None or (isinstance(agent_id, str) and not agent_id): raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") return self._post( - path_template("/v1/agents/{agent_id}/runs", agent_id=agent_id), - body=maybe_transform({"inputs": inputs}, run_create_params.RunCreateParams), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), + path_template("/v1/agents/{agent_id}/runs", **{"agent_id": agent_id}), + body=maybe_transform( + {"inputs": inputs}, + run_create_params.RunCreateParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), cast_to=RunCreateResponse, ) @@ -93,7 +86,6 @@ def retrieve( run_id: str, *, agent_id: str, - verbose: bool | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -103,64 +95,52 @@ def retrieve( ) -> RunRetrieveResponse: """ Retrieve the current status and result details for an agent run. - + Args: - agent_id: The ID of the agent that owns the run. - - run_id: The ID of the run to retrieve. - - verbose: Include each step's raw `outputs` payload in the execution trace. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds + run_id: The ID of the run to retrieve. + agent_id: The ID of the agent that owns the run. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + RunRetrieveResponse: Successful Response + + Example: + ```python + run = client.agents.runs.retrieve( + agent_id="agentId", + run_id="runId", + ) + ``` """ - if not agent_id: + if agent_id is None or (isinstance(agent_id, str) and not agent_id): raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") - if not run_id: + if run_id is None or (isinstance(run_id, str) and not run_id): raise ValueError(f"Expected a non-empty value for `run_id` but received {run_id!r}") return self._get( - path_template("/v1/agents/{agent_id}/runs/{run_id}", agent_id=agent_id, run_id=run_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform({"verbose": verbose}, run_retrieve_params.RunRetrieveParams), - ), + path_template("/v1/agents/{agent_id}/runs/{run_id}", **{"agent_id": agent_id, "run_id": run_id}), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), cast_to=RunRetrieveResponse, ) class AsyncRunsResource(AsyncAPIResource): + @cached_property def with_raw_response(self) -> AsyncRunsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ return AsyncRunsResourceWithRawResponse(self) @cached_property def with_streaming_response(self) -> AsyncRunsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ return AsyncRunsResourceWithStreamingResponse(self) async def create( self, agent_id: str, *, - inputs: Dict[str, object] | Omit = omit, + inputs: run_create_params.Inputs | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -170,33 +150,38 @@ async def create( ) -> RunCreateResponse: """ Start a new run for an agent. - + Runs always execute the agent's live published version, so the agent must be published first with `POST /v1/agents/{agent_id}/publish`. Unpublished drafts cannot be run. - + Args: - agent_id: The ID of the agent to run. - - inputs: Input values for the run. Keys should match the property names defined in - `schema.input`. Omit the request body when the agent does not require inputs. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds + agent_id: The ID of the agent to run. + inputs: Input values for the run. Keys should match the property names defined in `schema.input`. Omit the request body when the agent does not require inputs. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + RunCreateResponse: Successful Response + + Example: + ```python + run = await client.agents.runs.create( + agent_id="agentId", + ) + ``` """ - if not agent_id: + if agent_id is None or (isinstance(agent_id, str) and not agent_id): raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") return await self._post( - path_template("/v1/agents/{agent_id}/runs", agent_id=agent_id), - body=await async_maybe_transform({"inputs": inputs}, run_create_params.RunCreateParams), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), + path_template("/v1/agents/{agent_id}/runs", **{"agent_id": agent_id}), + body=await async_maybe_transform( + {"inputs": inputs}, + run_create_params.RunCreateParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), cast_to=RunCreateResponse, ) @@ -205,7 +190,6 @@ async def retrieve( run_id: str, *, agent_id: str, - verbose: bool | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -215,35 +199,33 @@ async def retrieve( ) -> RunRetrieveResponse: """ Retrieve the current status and result details for an agent run. - + Args: - agent_id: The ID of the agent that owns the run. - - run_id: The ID of the run to retrieve. - - verbose: Include each step's raw `outputs` payload in the execution trace. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds + run_id: The ID of the run to retrieve. + agent_id: The ID of the agent that owns the run. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + RunRetrieveResponse: Successful Response + + Example: + ```python + run = await client.agents.runs.retrieve( + agent_id="agentId", + run_id="runId", + ) + ``` """ - if not agent_id: + if agent_id is None or (isinstance(agent_id, str) and not agent_id): raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") - if not run_id: + if run_id is None or (isinstance(run_id, str) and not run_id): raise ValueError(f"Expected a non-empty value for `run_id` but received {run_id!r}") return await self._get( - path_template("/v1/agents/{agent_id}/runs/{run_id}", agent_id=agent_id, run_id=run_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform({"verbose": verbose}, run_retrieve_params.RunRetrieveParams), - ), + path_template("/v1/agents/{agent_id}/runs/{run_id}", **{"agent_id": agent_id, "run_id": run_id}), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), cast_to=RunRetrieveResponse, ) diff --git a/src/profound/resources/content/__init__.py b/src/resources/content/__init__.py similarity index 92% rename from src/profound/resources/content/__init__.py rename to src/resources/content/__init__.py index e5edda4e..a1aea607 100644 --- a/src/profound/resources/content/__init__.py +++ b/src/resources/content/__init__.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from .content import ( ContentResource, @@ -18,16 +18,16 @@ ) __all__ = [ - "OptimizationResource", - "AsyncOptimizationResource", - "OptimizationResourceWithRawResponse", - "AsyncOptimizationResourceWithRawResponse", - "OptimizationResourceWithStreamingResponse", - "AsyncOptimizationResourceWithStreamingResponse", "ContentResource", "AsyncContentResource", "ContentResourceWithRawResponse", "AsyncContentResourceWithRawResponse", "ContentResourceWithStreamingResponse", "AsyncContentResourceWithStreamingResponse", + "OptimizationResource", + "AsyncOptimizationResource", + "OptimizationResourceWithRawResponse", + "AsyncOptimizationResourceWithRawResponse", + "OptimizationResourceWithStreamingResponse", + "AsyncOptimizationResourceWithStreamingResponse", ] diff --git a/src/profound/resources/content/content.py b/src/resources/content/content.py similarity index 69% rename from src/profound/resources/content/content.py rename to src/resources/content/content.py index 40d572e2..67d8914e 100644 --- a/src/profound/resources/content/content.py +++ b/src/resources/content/content.py @@ -1,9 +1,20 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from __future__ import annotations +import httpx + +from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given +from ..._utils import path_template, maybe_transform, async_maybe_transform from ..._compat import cached_property from ..._resource import SyncAPIResource, AsyncAPIResource +from ..._response import ( + to_raw_response_wrapper, + to_streamed_response_wrapper, + async_to_raw_response_wrapper, + async_to_streamed_response_wrapper, +) +from ..._base_client import make_request_options from .optimization import ( OptimizationResource, AsyncOptimizationResource, @@ -17,52 +28,32 @@ class ContentResource(SyncAPIResource): + @cached_property def optimization(self) -> OptimizationResource: return OptimizationResource(self._client) @cached_property def with_raw_response(self) -> ContentResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ return ContentResourceWithRawResponse(self) @cached_property def with_streaming_response(self) -> ContentResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ return ContentResourceWithStreamingResponse(self) class AsyncContentResource(AsyncAPIResource): + @cached_property def optimization(self) -> AsyncOptimizationResource: return AsyncOptimizationResource(self._client) @cached_property def with_raw_response(self) -> AsyncContentResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ return AsyncContentResourceWithRawResponse(self) @cached_property def with_streaming_response(self) -> AsyncContentResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ return AsyncContentResourceWithStreamingResponse(self) @@ -70,6 +61,7 @@ class ContentResourceWithRawResponse: def __init__(self, content: ContentResource) -> None: self._content = content + @cached_property def optimization(self) -> OptimizationResourceWithRawResponse: return OptimizationResourceWithRawResponse(self._content.optimization) @@ -79,6 +71,7 @@ class AsyncContentResourceWithRawResponse: def __init__(self, content: AsyncContentResource) -> None: self._content = content + @cached_property def optimization(self) -> AsyncOptimizationResourceWithRawResponse: return AsyncOptimizationResourceWithRawResponse(self._content.optimization) @@ -88,6 +81,7 @@ class ContentResourceWithStreamingResponse: def __init__(self, content: ContentResource) -> None: self._content = content + @cached_property def optimization(self) -> OptimizationResourceWithStreamingResponse: return OptimizationResourceWithStreamingResponse(self._content.optimization) @@ -97,6 +91,7 @@ class AsyncContentResourceWithStreamingResponse: def __init__(self, content: AsyncContentResource) -> None: self._content = content + @cached_property def optimization(self) -> AsyncOptimizationResourceWithStreamingResponse: return AsyncOptimizationResourceWithStreamingResponse(self._content.optimization) diff --git a/src/profound/resources/content/optimization.py b/src/resources/content/optimization.py similarity index 58% rename from src/profound/resources/content/optimization.py rename to src/resources/content/optimization.py index 6a173d99..a978df67 100644 --- a/src/profound/resources/content/optimization.py +++ b/src/resources/content/optimization.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from __future__ import annotations @@ -15,222 +15,210 @@ async_to_streamed_response_wrapper, ) from ..._base_client import make_request_options +from ...types.content.optimization_list_response import OptimizationListResponse, ContentOptimizationResponseInfo, OptimizationQuery, ContentOptimization from ...types.content import optimization_list_params -from ...types.content.optimization_list_response import OptimizationListResponse -from ...types.content.optimization_retrieve_response import OptimizationRetrieveResponse +from ...types.content.optimization_retrieve_response import OptimizationRetrieveResponse, ContentAnalysis, DocumentContent, AeoScore, AeoScoreTargetZone, AnalysisSummary, AnalysisBreakdown, Recommendation, RecommendationImpact, RecommendationSuggestion, AnalysisInputs, TopicInput, PromptInput, UserInput __all__ = ["OptimizationResource", "AsyncOptimizationResource"] class OptimizationResource(SyncAPIResource): + @cached_property def with_raw_response(self) -> OptimizationResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ return OptimizationResourceWithRawResponse(self) @cached_property def with_streaming_response(self) -> OptimizationResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ return OptimizationResourceWithStreamingResponse(self) - def retrieve( + def list( self, - content_id: str, - *, asset_id: str, + *, + limit: int | Omit = omit, + offset: int | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> OptimizationRetrieveResponse: + ) -> OptimizationListResponse: """ - Optimization Analysis - + Optimization List + Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds + asset_id: Path parameter. + limit: Maximum number of results to return + offset: Offset for pagination + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + OptimizationListResponse: Successful Response + + Example: + ```python + optimization = client.content.optimization.list( + asset_id="assetId", + limit=10000, + offset=0, + ) + ``` """ - if not asset_id: + if asset_id is None or (isinstance(asset_id, str) and not asset_id): raise ValueError(f"Expected a non-empty value for `asset_id` but received {asset_id!r}") - if not content_id: - raise ValueError(f"Expected a non-empty value for `content_id` but received {content_id!r}") return self._get( - path_template("/v1/content/{asset_id}/optimization/{content_id}", asset_id=asset_id, content_id=content_id), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=OptimizationRetrieveResponse, + path_template("/v1/content/{asset_id}/optimization", **{"asset_id": asset_id}), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"limit": limit, "offset": offset}, optimization_list_params.OptimizationListParams)), + cast_to=OptimizationListResponse, ) - def list( + def retrieve( self, - asset_id: str, + content_id: str, *, - limit: int | Omit = omit, - offset: int | Omit = omit, + asset_id: str, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> OptimizationListResponse: + ) -> OptimizationRetrieveResponse: """ - Optimization List - + Optimization Analysis + Args: - limit: Maximum number of results to return - - offset: Offset for pagination - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds + content_id: Path parameter. + asset_id: Path parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + OptimizationRetrieveResponse: Successful Response + + Example: + ```python + optimization = client.content.optimization.retrieve( + asset_id="assetId", + content_id="contentId", + ) + ``` """ - if not asset_id: + if asset_id is None or (isinstance(asset_id, str) and not asset_id): raise ValueError(f"Expected a non-empty value for `asset_id` but received {asset_id!r}") + if content_id is None or (isinstance(content_id, str) and not content_id): + raise ValueError(f"Expected a non-empty value for `content_id` but received {content_id!r}") return self._get( - path_template("/v1/content/{asset_id}/optimization", asset_id=asset_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "limit": limit, - "offset": offset, - }, - optimization_list_params.OptimizationListParams, - ), - ), - cast_to=OptimizationListResponse, + path_template("/v1/content/{asset_id}/optimization/{content_id}", **{"asset_id": asset_id, "content_id": content_id}), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=OptimizationRetrieveResponse, ) class AsyncOptimizationResource(AsyncAPIResource): + @cached_property def with_raw_response(self) -> AsyncOptimizationResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ return AsyncOptimizationResourceWithRawResponse(self) @cached_property def with_streaming_response(self) -> AsyncOptimizationResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ return AsyncOptimizationResourceWithStreamingResponse(self) - async def retrieve( + async def list( self, - content_id: str, - *, asset_id: str, + *, + limit: int | Omit = omit, + offset: int | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> OptimizationRetrieveResponse: + ) -> OptimizationListResponse: """ - Optimization Analysis - + Optimization List + Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds + asset_id: Path parameter. + limit: Maximum number of results to return + offset: Offset for pagination + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + OptimizationListResponse: Successful Response + + Example: + ```python + optimization = await client.content.optimization.list( + asset_id="assetId", + limit=10000, + offset=0, + ) + ``` """ - if not asset_id: + if asset_id is None or (isinstance(asset_id, str) and not asset_id): raise ValueError(f"Expected a non-empty value for `asset_id` but received {asset_id!r}") - if not content_id: - raise ValueError(f"Expected a non-empty value for `content_id` but received {content_id!r}") return await self._get( - path_template("/v1/content/{asset_id}/optimization/{content_id}", asset_id=asset_id, content_id=content_id), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=OptimizationRetrieveResponse, + path_template("/v1/content/{asset_id}/optimization", **{"asset_id": asset_id}), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"limit": limit, "offset": offset}, optimization_list_params.OptimizationListParams)), + cast_to=OptimizationListResponse, ) - async def list( + async def retrieve( self, - asset_id: str, + content_id: str, *, - limit: int | Omit = omit, - offset: int | Omit = omit, + asset_id: str, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> OptimizationListResponse: + ) -> OptimizationRetrieveResponse: """ - Optimization List - + Optimization Analysis + Args: - limit: Maximum number of results to return - - offset: Offset for pagination - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds + content_id: Path parameter. + asset_id: Path parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + OptimizationRetrieveResponse: Successful Response + + Example: + ```python + optimization = await client.content.optimization.retrieve( + asset_id="assetId", + content_id="contentId", + ) + ``` """ - if not asset_id: + if asset_id is None or (isinstance(asset_id, str) and not asset_id): raise ValueError(f"Expected a non-empty value for `asset_id` but received {asset_id!r}") + if content_id is None or (isinstance(content_id, str) and not content_id): + raise ValueError(f"Expected a non-empty value for `content_id` but received {content_id!r}") return await self._get( - path_template("/v1/content/{asset_id}/optimization", asset_id=asset_id), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - { - "limit": limit, - "offset": offset, - }, - optimization_list_params.OptimizationListParams, - ), - ), - cast_to=OptimizationListResponse, + path_template("/v1/content/{asset_id}/optimization/{content_id}", **{"asset_id": asset_id, "content_id": content_id}), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=OptimizationRetrieveResponse, ) @@ -238,45 +226,45 @@ class OptimizationResourceWithRawResponse: def __init__(self, optimization: OptimizationResource) -> None: self._optimization = optimization - self.retrieve = to_raw_response_wrapper( - optimization.retrieve, - ) self.list = to_raw_response_wrapper( optimization.list, ) + self.retrieve = to_raw_response_wrapper( + optimization.retrieve, + ) class AsyncOptimizationResourceWithRawResponse: def __init__(self, optimization: AsyncOptimizationResource) -> None: self._optimization = optimization - self.retrieve = async_to_raw_response_wrapper( - optimization.retrieve, - ) self.list = async_to_raw_response_wrapper( optimization.list, ) + self.retrieve = async_to_raw_response_wrapper( + optimization.retrieve, + ) class OptimizationResourceWithStreamingResponse: def __init__(self, optimization: OptimizationResource) -> None: self._optimization = optimization - self.retrieve = to_streamed_response_wrapper( - optimization.retrieve, - ) self.list = to_streamed_response_wrapper( optimization.list, ) + self.retrieve = to_streamed_response_wrapper( + optimization.retrieve, + ) class AsyncOptimizationResourceWithStreamingResponse: def __init__(self, optimization: AsyncOptimizationResource) -> None: self._optimization = optimization - self.retrieve = async_to_streamed_response_wrapper( - optimization.retrieve, - ) self.list = async_to_streamed_response_wrapper( optimization.list, ) + self.retrieve = async_to_streamed_response_wrapper( + optimization.retrieve, + ) diff --git a/src/profound/resources/knowledge_bases/__init__.py b/src/resources/knowledge_bases/__init__.py similarity index 94% rename from src/profound/resources/knowledge_bases/__init__.py rename to src/resources/knowledge_bases/__init__.py index 83c37efa..43a90220 100644 --- a/src/profound/resources/knowledge_bases/__init__.py +++ b/src/resources/knowledge_bases/__init__.py @@ -1,12 +1,12 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. -from .folders import ( - FoldersResource, - AsyncFoldersResource, - FoldersResourceWithRawResponse, - AsyncFoldersResourceWithRawResponse, - FoldersResourceWithStreamingResponse, - AsyncFoldersResourceWithStreamingResponse, +from .knowledge_bases import ( + KnowledgeBasesResource, + AsyncKnowledgeBasesResource, + KnowledgeBasesResourceWithRawResponse, + AsyncKnowledgeBasesResourceWithRawResponse, + KnowledgeBasesResourceWithStreamingResponse, + AsyncKnowledgeBasesResourceWithStreamingResponse, ) from .documents import ( DocumentsResource, @@ -16,16 +16,22 @@ DocumentsResourceWithStreamingResponse, AsyncDocumentsResourceWithStreamingResponse, ) -from .knowledge_bases import ( - KnowledgeBasesResource, - AsyncKnowledgeBasesResource, - KnowledgeBasesResourceWithRawResponse, - AsyncKnowledgeBasesResourceWithRawResponse, - KnowledgeBasesResourceWithStreamingResponse, - AsyncKnowledgeBasesResourceWithStreamingResponse, +from .folders import ( + FoldersResource, + AsyncFoldersResource, + FoldersResourceWithRawResponse, + AsyncFoldersResourceWithRawResponse, + FoldersResourceWithStreamingResponse, + AsyncFoldersResourceWithStreamingResponse, ) __all__ = [ + "KnowledgeBasesResource", + "AsyncKnowledgeBasesResource", + "KnowledgeBasesResourceWithRawResponse", + "AsyncKnowledgeBasesResourceWithRawResponse", + "KnowledgeBasesResourceWithStreamingResponse", + "AsyncKnowledgeBasesResourceWithStreamingResponse", "DocumentsResource", "AsyncDocumentsResource", "DocumentsResourceWithRawResponse", @@ -38,10 +44,4 @@ "AsyncFoldersResourceWithRawResponse", "FoldersResourceWithStreamingResponse", "AsyncFoldersResourceWithStreamingResponse", - "KnowledgeBasesResource", - "AsyncKnowledgeBasesResource", - "KnowledgeBasesResourceWithRawResponse", - "AsyncKnowledgeBasesResourceWithRawResponse", - "KnowledgeBasesResourceWithStreamingResponse", - "AsyncKnowledgeBasesResourceWithStreamingResponse", ] diff --git a/src/resources/knowledge_bases/documents.py b/src/resources/knowledge_bases/documents.py new file mode 100644 index 00000000..cd63a876 --- /dev/null +++ b/src/resources/knowledge_bases/documents.py @@ -0,0 +1,433 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +import httpx + +from typing import Optional + +from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given +from ..._utils import path_template, maybe_transform, async_maybe_transform +from ..._compat import cached_property +from ..._resource import SyncAPIResource, AsyncAPIResource +from ..._response import ( + to_raw_response_wrapper, + to_streamed_response_wrapper, + async_to_raw_response_wrapper, + async_to_streamed_response_wrapper, +) +from ..._base_client import make_request_options +from ...types.knowledge_bases.document_create_response import DocumentCreateResponse +from ...types.knowledge_bases import document_create_params +from ...types.knowledge_bases.document_update_response import DocumentUpdateResponse +from ...types.knowledge_bases import document_update_params +from ...types.knowledge_bases.document_delete_response import DocumentDeleteResponse +from ...types.knowledge_bases import document_delete_params + +__all__ = ["DocumentsResource", "AsyncDocumentsResource"] + + +class DocumentsResource(SyncAPIResource): + + @cached_property + def with_raw_response(self) -> DocumentsResourceWithRawResponse: + return DocumentsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> DocumentsResourceWithStreamingResponse: + return DocumentsResourceWithStreamingResponse(self) + + def create( + self, + knowledge_base_id: str, + *, + name: str, + text: str, + folder: Optional[str] | Omit = omit, + organization_id: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> DocumentCreateResponse: + """ + Add a document to a knowledge base using JSON text or multipart file upload. + + Args: + knowledge_base_id: Unique knowledge base ID. + name: Unique document name. + text: Text content to add to the document. + folder: Folder path to add the document under. + organization_id: Organization scope for API keys that can access multiple organizations. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + DocumentCreateResponse: Successful Response + + Example: + ```python + document = client.knowledge_bases.documents.create( + knowledge_base_id="knowledgeBaseId", + name="", + text="", + ) + ``` + """ + if knowledge_base_id is None or (isinstance(knowledge_base_id, str) and not knowledge_base_id): + raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") + return self._post( + path_template("/v1/knowledge-bases/{knowledge_base_id}/documents", **{"knowledge_base_id": knowledge_base_id}), + body=maybe_transform( + { + "name": name, + "text": text, + "folder": folder, + }, + document_create_params.DocumentCreateParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"organization_id": organization_id}, document_create_params.DocumentCreateParams)), + cast_to=DocumentCreateResponse, + ) + + def update( + self, + knowledge_base_id: str, + *, + name: str, + text: str, + folder: Optional[str] | Omit = omit, + organization_id: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> DocumentUpdateResponse: + """ + Overwrite a knowledge base document using JSON text or multipart file upload. + + Args: + knowledge_base_id: Unique knowledge base ID. + name: Document name or path to update. + text: Replacement text content for the document. + folder: Folder path containing the document. + organization_id: Organization scope for API keys that can access multiple organizations. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + DocumentUpdateResponse: Successful Response + + Example: + ```python + document = client.knowledge_bases.documents.update( + knowledge_base_id="knowledgeBaseId", + name="", + text="", + ) + ``` + """ + if knowledge_base_id is None or (isinstance(knowledge_base_id, str) and not knowledge_base_id): + raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") + return self._put( + path_template("/v1/knowledge-bases/{knowledge_base_id}/documents", **{"knowledge_base_id": knowledge_base_id}), + body=maybe_transform( + { + "name": name, + "text": text, + "folder": folder, + }, + document_update_params.DocumentUpdateParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"organization_id": organization_id}, document_update_params.DocumentUpdateParams)), + cast_to=DocumentUpdateResponse, + ) + + def delete( + self, + knowledge_base_id: str, + *, + name: str, + organization_id: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> DocumentDeleteResponse: + """ + Delete an existing document from a knowledge base. + + Args: + knowledge_base_id: Unique knowledge base ID. + name: Document path to delete. + organization_id: Organization scope for API keys that can access multiple organizations. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + DocumentDeleteResponse: Successful Response + + Example: + ```python + document = client.knowledge_bases.documents.delete( + knowledge_base_id="knowledgeBaseId", + name="", + ) + ``` + """ + if knowledge_base_id is None or (isinstance(knowledge_base_id, str) and not knowledge_base_id): + raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") + return self._delete( + path_template("/v1/knowledge-bases/{knowledge_base_id}/documents", **{"knowledge_base_id": knowledge_base_id}), + body=maybe_transform( + {"name": name}, + document_delete_params.DocumentDeleteParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"organization_id": organization_id}, document_delete_params.DocumentDeleteParams)), + cast_to=DocumentDeleteResponse, + ) + + +class AsyncDocumentsResource(AsyncAPIResource): + + @cached_property + def with_raw_response(self) -> AsyncDocumentsResourceWithRawResponse: + return AsyncDocumentsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncDocumentsResourceWithStreamingResponse: + return AsyncDocumentsResourceWithStreamingResponse(self) + + async def create( + self, + knowledge_base_id: str, + *, + name: str, + text: str, + folder: Optional[str] | Omit = omit, + organization_id: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> DocumentCreateResponse: + """ + Add a document to a knowledge base using JSON text or multipart file upload. + + Args: + knowledge_base_id: Unique knowledge base ID. + name: Unique document name. + text: Text content to add to the document. + folder: Folder path to add the document under. + organization_id: Organization scope for API keys that can access multiple organizations. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + DocumentCreateResponse: Successful Response + + Example: + ```python + document = await client.knowledge_bases.documents.create( + knowledge_base_id="knowledgeBaseId", + name="", + text="", + ) + ``` + """ + if knowledge_base_id is None or (isinstance(knowledge_base_id, str) and not knowledge_base_id): + raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") + return await self._post( + path_template("/v1/knowledge-bases/{knowledge_base_id}/documents", **{"knowledge_base_id": knowledge_base_id}), + body=await async_maybe_transform( + { + "name": name, + "text": text, + "folder": folder, + }, + document_create_params.DocumentCreateParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"organization_id": organization_id}, document_create_params.DocumentCreateParams)), + cast_to=DocumentCreateResponse, + ) + + async def update( + self, + knowledge_base_id: str, + *, + name: str, + text: str, + folder: Optional[str] | Omit = omit, + organization_id: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> DocumentUpdateResponse: + """ + Overwrite a knowledge base document using JSON text or multipart file upload. + + Args: + knowledge_base_id: Unique knowledge base ID. + name: Document name or path to update. + text: Replacement text content for the document. + folder: Folder path containing the document. + organization_id: Organization scope for API keys that can access multiple organizations. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + DocumentUpdateResponse: Successful Response + + Example: + ```python + document = await client.knowledge_bases.documents.update( + knowledge_base_id="knowledgeBaseId", + name="", + text="", + ) + ``` + """ + if knowledge_base_id is None or (isinstance(knowledge_base_id, str) and not knowledge_base_id): + raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") + return await self._put( + path_template("/v1/knowledge-bases/{knowledge_base_id}/documents", **{"knowledge_base_id": knowledge_base_id}), + body=await async_maybe_transform( + { + "name": name, + "text": text, + "folder": folder, + }, + document_update_params.DocumentUpdateParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"organization_id": organization_id}, document_update_params.DocumentUpdateParams)), + cast_to=DocumentUpdateResponse, + ) + + async def delete( + self, + knowledge_base_id: str, + *, + name: str, + organization_id: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> DocumentDeleteResponse: + """ + Delete an existing document from a knowledge base. + + Args: + knowledge_base_id: Unique knowledge base ID. + name: Document path to delete. + organization_id: Organization scope for API keys that can access multiple organizations. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + DocumentDeleteResponse: Successful Response + + Example: + ```python + document = await client.knowledge_bases.documents.delete( + knowledge_base_id="knowledgeBaseId", + name="", + ) + ``` + """ + if knowledge_base_id is None or (isinstance(knowledge_base_id, str) and not knowledge_base_id): + raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") + return await self._delete( + path_template("/v1/knowledge-bases/{knowledge_base_id}/documents", **{"knowledge_base_id": knowledge_base_id}), + body=await async_maybe_transform( + {"name": name}, + document_delete_params.DocumentDeleteParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"organization_id": organization_id}, document_delete_params.DocumentDeleteParams)), + cast_to=DocumentDeleteResponse, + ) + + +class DocumentsResourceWithRawResponse: + def __init__(self, documents: DocumentsResource) -> None: + self._documents = documents + + self.create = to_raw_response_wrapper( + documents.create, + ) + self.update = to_raw_response_wrapper( + documents.update, + ) + self.delete = to_raw_response_wrapper( + documents.delete, + ) + + +class AsyncDocumentsResourceWithRawResponse: + def __init__(self, documents: AsyncDocumentsResource) -> None: + self._documents = documents + + self.create = async_to_raw_response_wrapper( + documents.create, + ) + self.update = async_to_raw_response_wrapper( + documents.update, + ) + self.delete = async_to_raw_response_wrapper( + documents.delete, + ) + + +class DocumentsResourceWithStreamingResponse: + def __init__(self, documents: DocumentsResource) -> None: + self._documents = documents + + self.create = to_streamed_response_wrapper( + documents.create, + ) + self.update = to_streamed_response_wrapper( + documents.update, + ) + self.delete = to_streamed_response_wrapper( + documents.delete, + ) + + +class AsyncDocumentsResourceWithStreamingResponse: + def __init__(self, documents: AsyncDocumentsResource) -> None: + self._documents = documents + + self.create = async_to_streamed_response_wrapper( + documents.create, + ) + self.update = async_to_streamed_response_wrapper( + documents.update, + ) + self.delete = async_to_streamed_response_wrapper( + documents.delete, + ) diff --git a/src/profound/resources/knowledge_bases/folders.py b/src/resources/knowledge_bases/folders.py similarity index 52% rename from src/profound/resources/knowledge_bases/folders.py rename to src/resources/knowledge_bases/folders.py index 73a0f095..ff004480 100644 --- a/src/profound/resources/knowledge_bases/folders.py +++ b/src/resources/knowledge_bases/folders.py @@ -1,11 +1,11 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from __future__ import annotations -from typing import Optional - import httpx +from typing import Optional + from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given from ..._utils import path_template, maybe_transform, async_maybe_transform from ..._compat import cached_property @@ -17,31 +17,22 @@ async_to_streamed_response_wrapper, ) from ..._base_client import make_request_options -from ...types.knowledge_bases import folder_create_params, folder_delete_params from ...types.knowledge_bases.folder_create_response import FolderCreateResponse +from ...types.knowledge_bases import folder_create_params from ...types.knowledge_bases.folder_delete_response import FolderDeleteResponse +from ...types.knowledge_bases import folder_delete_params __all__ = ["FoldersResource", "AsyncFoldersResource"] class FoldersResource(SyncAPIResource): + @cached_property def with_raw_response(self) -> FoldersResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ return FoldersResourceWithRawResponse(self) @cached_property def with_streaming_response(self) -> FoldersResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ return FoldersResourceWithStreamingResponse(self) def create( @@ -59,34 +50,36 @@ def create( ) -> FolderCreateResponse: """ Create an empty folder at the requested knowledge base path. - + Args: - knowledge_base_id: Unique knowledge base ID. - - path: Folder path to create. - - organization_id: Organization scope for API keys that can access multiple organizations. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds + knowledge_base_id: Unique knowledge base ID. + path: Folder path to create. + organization_id: Organization scope for API keys that can access multiple organizations. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + FolderCreateResponse: Successful Response + + Example: + ```python + folder = client.knowledge_bases.folders.create( + knowledge_base_id="knowledgeBaseId", + path="", + ) + ``` """ - if not knowledge_base_id: + if knowledge_base_id is None or (isinstance(knowledge_base_id, str) and not knowledge_base_id): raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") return self._post( - path_template("/v1/knowledge-bases/{knowledge_base_id}/folders", knowledge_base_id=knowledge_base_id), - body=maybe_transform({"path": path}, folder_create_params.FolderCreateParams), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform({"organization_id": organization_id}, folder_create_params.FolderCreateParams), - ), + path_template("/v1/knowledge-bases/{knowledge_base_id}/folders", **{"knowledge_base_id": knowledge_base_id}), + body=maybe_transform( + {"path": path}, + folder_create_params.FolderCreateParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"organization_id": organization_id}, folder_create_params.FolderCreateParams)), cast_to=FolderCreateResponse, ) @@ -95,8 +88,8 @@ def delete( knowledge_base_id: str, *, path: str, - organization_id: Optional[str] | Omit = omit, recursive: bool | Omit = omit, + organization_id: Optional[str] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -104,69 +97,55 @@ def delete( extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, ) -> FolderDeleteResponse: - """Delete a folder. - - With recursive=false, non-empty folders return 409 and no - contents are deleted. - + """ + Delete a folder. With recursive=false, non-empty folders return 409 and no contents are deleted. + Args: - knowledge_base_id: Unique knowledge base ID. - - path: Folder path to delete. - - organization_id: Organization scope for API keys that can access multiple organizations. - - recursive: When false, only empty folders are deleted and non-empty folders return a - conflict. When true, the folder and all contents are deleted. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds + knowledge_base_id: Unique knowledge base ID. + path: Folder path to delete. + recursive: When false, only empty folders are deleted and non-empty folders return a conflict. When true, the folder and all contents are deleted. + organization_id: Organization scope for API keys that can access multiple organizations. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + FolderDeleteResponse: Successful Response + + Example: + ```python + folder = client.knowledge_bases.folders.delete( + knowledge_base_id="knowledgeBaseId", + path="", + recursive=False, + ) + ``` """ - if not knowledge_base_id: + if knowledge_base_id is None or (isinstance(knowledge_base_id, str) and not knowledge_base_id): raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") return self._delete( - path_template("/v1/knowledge-bases/{knowledge_base_id}/folders", knowledge_base_id=knowledge_base_id), + path_template("/v1/knowledge-bases/{knowledge_base_id}/folders", **{"knowledge_base_id": knowledge_base_id}), body=maybe_transform( - { - "path": path, - "recursive": recursive, - }, - folder_delete_params.FolderDeleteParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform({"organization_id": organization_id}, folder_delete_params.FolderDeleteParams), - ), + { + "path": path, + "recursive": recursive, + }, + folder_delete_params.FolderDeleteParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"organization_id": organization_id}, folder_delete_params.FolderDeleteParams)), cast_to=FolderDeleteResponse, ) class AsyncFoldersResource(AsyncAPIResource): + @cached_property def with_raw_response(self) -> AsyncFoldersResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ return AsyncFoldersResourceWithRawResponse(self) @cached_property def with_streaming_response(self) -> AsyncFoldersResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ return AsyncFoldersResourceWithStreamingResponse(self) async def create( @@ -184,36 +163,36 @@ async def create( ) -> FolderCreateResponse: """ Create an empty folder at the requested knowledge base path. - + Args: - knowledge_base_id: Unique knowledge base ID. - - path: Folder path to create. - - organization_id: Organization scope for API keys that can access multiple organizations. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds + knowledge_base_id: Unique knowledge base ID. + path: Folder path to create. + organization_id: Organization scope for API keys that can access multiple organizations. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + FolderCreateResponse: Successful Response + + Example: + ```python + folder = await client.knowledge_bases.folders.create( + knowledge_base_id="knowledgeBaseId", + path="", + ) + ``` """ - if not knowledge_base_id: + if knowledge_base_id is None or (isinstance(knowledge_base_id, str) and not knowledge_base_id): raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") return await self._post( - path_template("/v1/knowledge-bases/{knowledge_base_id}/folders", knowledge_base_id=knowledge_base_id), - body=await async_maybe_transform({"path": path}, folder_create_params.FolderCreateParams), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - {"organization_id": organization_id}, folder_create_params.FolderCreateParams - ), - ), + path_template("/v1/knowledge-bases/{knowledge_base_id}/folders", **{"knowledge_base_id": knowledge_base_id}), + body=await async_maybe_transform( + {"path": path}, + folder_create_params.FolderCreateParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"organization_id": organization_id}, folder_create_params.FolderCreateParams)), cast_to=FolderCreateResponse, ) @@ -222,8 +201,8 @@ async def delete( knowledge_base_id: str, *, path: str, - organization_id: Optional[str] | Omit = omit, recursive: bool | Omit = omit, + organization_id: Optional[str] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -231,49 +210,43 @@ async def delete( extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, ) -> FolderDeleteResponse: - """Delete a folder. - - With recursive=false, non-empty folders return 409 and no - contents are deleted. - + """ + Delete a folder. With recursive=false, non-empty folders return 409 and no contents are deleted. + Args: - knowledge_base_id: Unique knowledge base ID. - - path: Folder path to delete. - - organization_id: Organization scope for API keys that can access multiple organizations. - - recursive: When false, only empty folders are deleted and non-empty folders return a - conflict. When true, the folder and all contents are deleted. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds + knowledge_base_id: Unique knowledge base ID. + path: Folder path to delete. + recursive: When false, only empty folders are deleted and non-empty folders return a conflict. When true, the folder and all contents are deleted. + organization_id: Organization scope for API keys that can access multiple organizations. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + FolderDeleteResponse: Successful Response + + Example: + ```python + folder = await client.knowledge_bases.folders.delete( + knowledge_base_id="knowledgeBaseId", + path="", + recursive=False, + ) + ``` """ - if not knowledge_base_id: + if knowledge_base_id is None or (isinstance(knowledge_base_id, str) and not knowledge_base_id): raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") return await self._delete( - path_template("/v1/knowledge-bases/{knowledge_base_id}/folders", knowledge_base_id=knowledge_base_id), + path_template("/v1/knowledge-bases/{knowledge_base_id}/folders", **{"knowledge_base_id": knowledge_base_id}), body=await async_maybe_transform( - { - "path": path, - "recursive": recursive, - }, - folder_delete_params.FolderDeleteParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - {"organization_id": organization_id}, folder_delete_params.FolderDeleteParams - ), - ), + { + "path": path, + "recursive": recursive, + }, + folder_delete_params.FolderDeleteParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"organization_id": organization_id}, folder_delete_params.FolderDeleteParams)), cast_to=FolderDeleteResponse, ) diff --git a/src/profound/resources/knowledge_bases/knowledge_bases.py b/src/resources/knowledge_bases/knowledge_bases.py similarity index 62% rename from src/profound/resources/knowledge_bases/knowledge_bases.py rename to src/resources/knowledge_bases/knowledge_bases.py index 984a1c31..79eba3c0 100644 --- a/src/profound/resources/knowledge_bases/knowledge_bases.py +++ b/src/resources/knowledge_bases/knowledge_bases.py @@ -1,23 +1,22 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from __future__ import annotations -from typing import Optional - import httpx -from ...types import knowledge_base_list_params, knowledge_base_search_params -from .folders import ( - FoldersResource, - AsyncFoldersResource, - FoldersResourceWithRawResponse, - AsyncFoldersResourceWithRawResponse, - FoldersResourceWithStreamingResponse, - AsyncFoldersResourceWithStreamingResponse, -) +from typing import Optional + from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given from ..._utils import path_template, maybe_transform, async_maybe_transform from ..._compat import cached_property +from ..._resource import SyncAPIResource, AsyncAPIResource +from ..._response import ( + to_raw_response_wrapper, + to_streamed_response_wrapper, + async_to_raw_response_wrapper, + async_to_streamed_response_wrapper, +) +from ..._base_client import make_request_options from .documents import ( DocumentsResource, AsyncDocumentsResource, @@ -26,21 +25,24 @@ DocumentsResourceWithStreamingResponse, AsyncDocumentsResourceWithStreamingResponse, ) -from ..._resource import SyncAPIResource, AsyncAPIResource -from ..._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, +from .folders import ( + FoldersResource, + AsyncFoldersResource, + FoldersResourceWithRawResponse, + AsyncFoldersResourceWithRawResponse, + FoldersResourceWithStreamingResponse, + AsyncFoldersResourceWithStreamingResponse, ) -from ..._base_client import make_request_options -from ...types.knowledge_base_list_response import KnowledgeBaseListResponse -from ...types.knowledge_base_search_response import KnowledgeBaseSearchResponse +from ...types.knowledge_base_list_response import KnowledgeBaseListResponse, KnowledgeBaseItem +from ...types import knowledge_base_list_params +from ...types.knowledge_base_search_response import KnowledgeBaseSearchResponse, KnowledgeBaseSearchResult, Metadata +from ...types import knowledge_base_search_params __all__ = ["KnowledgeBasesResource", "AsyncKnowledgeBasesResource"] class KnowledgeBasesResource(SyncAPIResource): + @cached_property def documents(self) -> DocumentsResource: return DocumentsResource(self._client) @@ -51,21 +53,10 @@ def folders(self) -> FoldersResource: @cached_property def with_raw_response(self) -> KnowledgeBasesResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ return KnowledgeBasesResourceWithRawResponse(self) @cached_property def with_streaming_response(self) -> KnowledgeBasesResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ return KnowledgeBasesResourceWithStreamingResponse(self) def list( @@ -81,29 +72,25 @@ def list( ) -> KnowledgeBaseListResponse: """ List knowledge bases accessible to the API key. - + Args: - organization_id: Organization scope for API keys that can access multiple organizations. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds + organization_id: Organization scope for API keys that can access multiple organizations. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + KnowledgeBaseListResponse: Successful Response + + Example: + ```python + knowledge_base = client.knowledge_bases.list() + ``` """ return self._get( "/v1/knowledge-bases", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - {"organization_id": organization_id}, knowledge_base_list_params.KnowledgeBaseListParams - ), - ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"organization_id": organization_id}, knowledge_base_list_params.KnowledgeBaseListParams)), cast_to=KnowledgeBaseListResponse, ) @@ -113,9 +100,9 @@ def search( *, query: str, top_k: int, - organization_id: Optional[str] | Omit = omit, - filters: Optional[knowledge_base_search_params.Filters] | Omit = omit, return_full_page: bool | Omit = omit, + filters: Optional[knowledge_base_search_params.Filters] | Omit = omit, + organization_id: Optional[str] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -125,55 +112,52 @@ def search( ) -> KnowledgeBaseSearchResponse: """ Search a knowledge base and return matching snippets or pages. - + Args: - knowledge_base_id: Unique knowledge base ID. - - query: Search query. - - top_k: Maximum number of results to return. - - organization_id: Organization scope for API keys that can access multiple organizations. - - filters: Optional search filters. - - return_full_page: Return full page content instead of snippets. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds + knowledge_base_id: Unique knowledge base ID. + query: Search query. + top_k: Maximum number of results to return. + return_full_page: Return full page content instead of snippets. + filters: Optional search filters. + organization_id: Organization scope for API keys that can access multiple organizations. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + KnowledgeBaseSearchResponse: Successful Response + + Example: + ```python + knowledge_base = client.knowledge_bases.search( + knowledge_base_id="knowledgeBaseId", + query="", + top_k=0, + return_full_page=False, + ) + ``` """ - if not knowledge_base_id: + if knowledge_base_id is None or (isinstance(knowledge_base_id, str) and not knowledge_base_id): raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") return self._post( - path_template("/v1/knowledge-bases/{knowledge_base_id}/search", knowledge_base_id=knowledge_base_id), + path_template("/v1/knowledge-bases/{knowledge_base_id}/search", **{"knowledge_base_id": knowledge_base_id}), body=maybe_transform( - { - "query": query, - "top_k": top_k, - "filters": filters, - "return_full_page": return_full_page, - }, - knowledge_base_search_params.KnowledgeBaseSearchParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - {"organization_id": organization_id}, knowledge_base_search_params.KnowledgeBaseSearchParams - ), - ), + { + "query": query, + "top_k": top_k, + "return_full_page": return_full_page, + "filters": filters, + }, + knowledge_base_search_params.KnowledgeBaseSearchParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"organization_id": organization_id}, knowledge_base_search_params.KnowledgeBaseSearchParams)), cast_to=KnowledgeBaseSearchResponse, ) class AsyncKnowledgeBasesResource(AsyncAPIResource): + @cached_property def documents(self) -> AsyncDocumentsResource: return AsyncDocumentsResource(self._client) @@ -184,21 +168,10 @@ def folders(self) -> AsyncFoldersResource: @cached_property def with_raw_response(self) -> AsyncKnowledgeBasesResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ return AsyncKnowledgeBasesResourceWithRawResponse(self) @cached_property def with_streaming_response(self) -> AsyncKnowledgeBasesResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ return AsyncKnowledgeBasesResourceWithStreamingResponse(self) async def list( @@ -214,29 +187,25 @@ async def list( ) -> KnowledgeBaseListResponse: """ List knowledge bases accessible to the API key. - + Args: - organization_id: Organization scope for API keys that can access multiple organizations. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds + organization_id: Organization scope for API keys that can access multiple organizations. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + KnowledgeBaseListResponse: Successful Response + + Example: + ```python + knowledge_base = await client.knowledge_bases.list() + ``` """ return await self._get( "/v1/knowledge-bases", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - {"organization_id": organization_id}, knowledge_base_list_params.KnowledgeBaseListParams - ), - ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"organization_id": organization_id}, knowledge_base_list_params.KnowledgeBaseListParams)), cast_to=KnowledgeBaseListResponse, ) @@ -246,9 +215,9 @@ async def search( *, query: str, top_k: int, - organization_id: Optional[str] | Omit = omit, - filters: Optional[knowledge_base_search_params.Filters] | Omit = omit, return_full_page: bool | Omit = omit, + filters: Optional[knowledge_base_search_params.Filters] | Omit = omit, + organization_id: Optional[str] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -258,50 +227,46 @@ async def search( ) -> KnowledgeBaseSearchResponse: """ Search a knowledge base and return matching snippets or pages. - + Args: - knowledge_base_id: Unique knowledge base ID. - - query: Search query. - - top_k: Maximum number of results to return. - - organization_id: Organization scope for API keys that can access multiple organizations. - - filters: Optional search filters. - - return_full_page: Return full page content instead of snippets. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds + knowledge_base_id: Unique knowledge base ID. + query: Search query. + top_k: Maximum number of results to return. + return_full_page: Return full page content instead of snippets. + filters: Optional search filters. + organization_id: Organization scope for API keys that can access multiple organizations. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + KnowledgeBaseSearchResponse: Successful Response + + Example: + ```python + knowledge_base = await client.knowledge_bases.search( + knowledge_base_id="knowledgeBaseId", + query="", + top_k=0, + return_full_page=False, + ) + ``` """ - if not knowledge_base_id: + if knowledge_base_id is None or (isinstance(knowledge_base_id, str) and not knowledge_base_id): raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") return await self._post( - path_template("/v1/knowledge-bases/{knowledge_base_id}/search", knowledge_base_id=knowledge_base_id), + path_template("/v1/knowledge-bases/{knowledge_base_id}/search", **{"knowledge_base_id": knowledge_base_id}), body=await async_maybe_transform( - { - "query": query, - "top_k": top_k, - "filters": filters, - "return_full_page": return_full_page, - }, - knowledge_base_search_params.KnowledgeBaseSearchParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - {"organization_id": organization_id}, knowledge_base_search_params.KnowledgeBaseSearchParams - ), - ), + { + "query": query, + "top_k": top_k, + "return_full_page": return_full_page, + "filters": filters, + }, + knowledge_base_search_params.KnowledgeBaseSearchParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"organization_id": organization_id}, knowledge_base_search_params.KnowledgeBaseSearchParams)), cast_to=KnowledgeBaseSearchResponse, ) diff --git a/src/resources/organization.py b/src/resources/organization.py new file mode 100644 index 00000000..a17c16eb --- /dev/null +++ b/src/resources/organization.py @@ -0,0 +1,156 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +import httpx + +from .._types import Body, Omit, Query, Headers, NotGiven, omit, not_given +from .._utils import path_template, maybe_transform, async_maybe_transform +from .._compat import cached_property +from .._resource import SyncAPIResource, AsyncAPIResource +from .._response import ( + to_raw_response_wrapper, + to_streamed_response_wrapper, + async_to_raw_response_wrapper, + async_to_streamed_response_wrapper, +) +from .._base_client import make_request_options +from ..types.organization_list_category_regions_v1_org_categories_category_regions_get_response import OrganizationListCategoryRegionsV1OrgCategoriesCategoryRegionsGetResponse + +__all__ = ["OrganizationResource", "AsyncOrganizationResource"] + + +class OrganizationResource(SyncAPIResource): + + @cached_property + def with_raw_response(self) -> OrganizationResourceWithRawResponse: + return OrganizationResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> OrganizationResourceWithStreamingResponse: + return OrganizationResourceWithStreamingResponse(self) + + def list_category_regions_v1_org_categories_category_regions_get( + self, + category_id: str, + *, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> OrganizationListCategoryRegionsV1OrgCategoriesCategoryRegionsGetResponse: + """ + Get the regions for a specific category. + + Args: + category_id: Path parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + OrganizationListCategoryRegionsV1OrgCategoriesCategoryRegionsGetResponse: Successful Response + + Example: + ```python + organization = client.organization.list_category_regions_v1_org_categories_category_regions_get( + category_id="categoryId", + ) + ``` + """ + if category_id is None or (isinstance(category_id, str) and not category_id): + raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") + return self._get( + path_template("/v1/org/categories/{category_id}/regions", **{"category_id": category_id}), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=OrganizationListCategoryRegionsV1OrgCategoriesCategoryRegionsGetResponse, + ) + + +class AsyncOrganizationResource(AsyncAPIResource): + + @cached_property + def with_raw_response(self) -> AsyncOrganizationResourceWithRawResponse: + return AsyncOrganizationResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncOrganizationResourceWithStreamingResponse: + return AsyncOrganizationResourceWithStreamingResponse(self) + + async def list_category_regions_v1_org_categories_category_regions_get( + self, + category_id: str, + *, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> OrganizationListCategoryRegionsV1OrgCategoriesCategoryRegionsGetResponse: + """ + Get the regions for a specific category. + + Args: + category_id: Path parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + OrganizationListCategoryRegionsV1OrgCategoriesCategoryRegionsGetResponse: Successful Response + + Example: + ```python + organization = await client.organization.list_category_regions_v1_org_categories_category_regions_get( + category_id="categoryId", + ) + ``` + """ + if category_id is None or (isinstance(category_id, str) and not category_id): + raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") + return await self._get( + path_template("/v1/org/categories/{category_id}/regions", **{"category_id": category_id}), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=OrganizationListCategoryRegionsV1OrgCategoriesCategoryRegionsGetResponse, + ) + + +class OrganizationResourceWithRawResponse: + def __init__(self, organization: OrganizationResource) -> None: + self._organization = organization + + self.list_category_regions_v1_org_categories_category_regions_get = to_raw_response_wrapper( + organization.list_category_regions_v1_org_categories_category_regions_get, + ) + + +class AsyncOrganizationResourceWithRawResponse: + def __init__(self, organization: AsyncOrganizationResource) -> None: + self._organization = organization + + self.list_category_regions_v1_org_categories_category_regions_get = async_to_raw_response_wrapper( + organization.list_category_regions_v1_org_categories_category_regions_get, + ) + + +class OrganizationResourceWithStreamingResponse: + def __init__(self, organization: OrganizationResource) -> None: + self._organization = organization + + self.list_category_regions_v1_org_categories_category_regions_get = to_streamed_response_wrapper( + organization.list_category_regions_v1_org_categories_category_regions_get, + ) + + +class AsyncOrganizationResourceWithStreamingResponse: + def __init__(self, organization: AsyncOrganizationResource) -> None: + self._organization = organization + + self.list_category_regions_v1_org_categories_category_regions_get = async_to_streamed_response_wrapper( + organization.list_category_regions_v1_org_categories_category_regions_get, + ) diff --git a/src/profound/resources/organizations/__init__.py b/src/resources/organizations/__init__.py similarity index 92% rename from src/profound/resources/organizations/__init__.py rename to src/resources/organizations/__init__.py index cea9aefb..5a4ec716 100644 --- a/src/profound/resources/organizations/__init__.py +++ b/src/resources/organizations/__init__.py @@ -1,13 +1,5 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. -from .categories import ( - CategoriesResource, - AsyncCategoriesResource, - CategoriesResourceWithRawResponse, - AsyncCategoriesResourceWithRawResponse, - CategoriesResourceWithStreamingResponse, - AsyncCategoriesResourceWithStreamingResponse, -) from .organizations import ( OrganizationsResource, AsyncOrganizationsResource, @@ -16,18 +8,26 @@ OrganizationsResourceWithStreamingResponse, AsyncOrganizationsResourceWithStreamingResponse, ) +from .categories import ( + CategoriesResource, + AsyncCategoriesResource, + CategoriesResourceWithRawResponse, + AsyncCategoriesResourceWithRawResponse, + CategoriesResourceWithStreamingResponse, + AsyncCategoriesResourceWithStreamingResponse, +) __all__ = [ - "CategoriesResource", - "AsyncCategoriesResource", - "CategoriesResourceWithRawResponse", - "AsyncCategoriesResourceWithRawResponse", - "CategoriesResourceWithStreamingResponse", - "AsyncCategoriesResourceWithStreamingResponse", "OrganizationsResource", "AsyncOrganizationsResource", "OrganizationsResourceWithRawResponse", "AsyncOrganizationsResourceWithRawResponse", "OrganizationsResourceWithStreamingResponse", "AsyncOrganizationsResourceWithStreamingResponse", + "CategoriesResource", + "AsyncCategoriesResource", + "CategoriesResourceWithRawResponse", + "AsyncCategoriesResourceWithRawResponse", + "CategoriesResourceWithStreamingResponse", + "AsyncCategoriesResourceWithStreamingResponse", ] diff --git a/src/resources/organizations/categories.py b/src/resources/organizations/categories.py new file mode 100644 index 00000000..b883a445 --- /dev/null +++ b/src/resources/organizations/categories.py @@ -0,0 +1,1028 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +import httpx + +from typing import Iterable, Optional +from typing_extensions import Literal + +from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given +from ..._utils import path_template, maybe_transform, async_maybe_transform +from ..._compat import cached_property +from ..._resource import SyncAPIResource, AsyncAPIResource +from ..._response import ( + to_raw_response_wrapper, + to_streamed_response_wrapper, + async_to_raw_response_wrapper, + async_to_streamed_response_wrapper, +) +from ..._base_client import make_request_options +from ...types.organizations.category_list_response import CategoryListResponse, CategoryWithOrganization +from ...types.organizations import category_list_params +from ...types.organizations.category_topics_response import CategoryTopicsResponse, Topic +from ...types.organizations.category_tags_response import CategoryTagsResponse, Tag +from ...types.organizations.category_prompts_response import CategoryPromptsResponse, PaginationInfo, Prompt +from ...types.organizations import category_prompts_params +from ...types.organizations.category_create_prompts_response import CategoryCreatePromptsResponse, PromptPreview +from ...types.organizations import category_create_prompts_params +from ...types.organizations.category_update_prompts_response import CategoryUpdatePromptsResponse, PromptUpdatePreview +from ...types.organizations import category_update_prompts_params +from ...types.organizations.category_update_prompt_status_response import CategoryUpdatePromptStatusResponse +from ...types.organizations import category_update_prompt_status_params +from ...types.organizations.category_assets_response import CategoryAssetsResponse, CategoryAsset +from ...types.organizations.category_get_category_personas_response import CategoryGetCategoryPersonasResponse, CategoryPersona + +__all__ = ["CategoriesResource", "AsyncCategoriesResource"] + + +class CategoriesResource(SyncAPIResource): + + @cached_property + def with_raw_response(self) -> CategoriesResourceWithRawResponse: + return CategoriesResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> CategoriesResourceWithStreamingResponse: + return CategoriesResourceWithStreamingResponse(self) + + def list( + self, + *, + organization_ids: Optional[Iterable[str]] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> CategoryListResponse: + """ + Get the organization categories, one row per (category, organization) pair. + + Args: + organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + CategoryListResponse: Successful Response + + Example: + ```python + category = client.organizations.categories.list() + ``` + """ + return self._get( + "/v1/org/categories", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"organization_ids": organization_ids}, category_list_params.CategoryListParams)), + cast_to=CategoryListResponse, + ) + + def topics( + self, + category_id: str, + *, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> CategoryTopicsResponse: + """ + Get the topics for a specific category. + + Args: + category_id: Path parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + CategoryTopicsResponse: Successful Response + + Example: + ```python + category = client.organizations.categories.topics( + category_id="categoryId", + ) + ``` + """ + if category_id is None or (isinstance(category_id, str) and not category_id): + raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") + return self._get( + path_template("/v1/org/categories/{category_id}/topics", **{"category_id": category_id}), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=CategoryTopicsResponse, + ) + + def tags( + self, + category_id: str, + *, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> CategoryTagsResponse: + """ + Get the tags for a specific category. + + Args: + category_id: Path parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + CategoryTagsResponse: Successful Response + + Example: + ```python + category = client.organizations.categories.tags( + category_id="categoryId", + ) + ``` + """ + if category_id is None or (isinstance(category_id, str) and not category_id): + raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") + return self._get( + path_template("/v1/org/categories/{category_id}/tags", **{"category_id": category_id}), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=CategoryTagsResponse, + ) + + def prompts( + self, + category_id: str, + *, + limit: int | Omit = omit, + cursor: Optional[str] | Omit = omit, + order_dir: Literal["asc", "desc"] | Omit = omit, + analysis_type: Iterable[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]] | Omit = omit, + prompt_type: Iterable[Literal["visibility", "sentiment"]] | Omit = omit, + status: Iterable[Literal["active", "disabled"]] | Omit = omit, + topic_id: Iterable[str] | Omit = omit, + tag_id: Iterable[str] | Omit = omit, + region_id: Iterable[str] | Omit = omit, + platform_id: Iterable[str] | Omit = omit, + persona_id: Iterable[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> CategoryPromptsResponse: + """ + Retrieve prompts in a category with optional filtering by type, topic, tag, region, platform, or persona. Supports cursor-based pagination. + + Args: + category_id: Path parameter. + limit: Maximum number of prompts to return. + cursor: Pagination cursor from a previous response. + order_dir: Sort direction by creation date. + analysis_type: Filter by analysis type (visibility, sentiment, accuracy). + prompt_type: Deprecated. Use analysis_type instead. + status: Filter by prompt status. Defaults to `active` only. + topic_id: Filter by topic IDs. + tag_id: Filter by tag IDs. + region_id: Filter by region IDs. + platform_id: Filter by platform IDs. + persona_id: Filter by persona IDs. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + CategoryPromptsResponse: Successful Response + + Example: + ```python + category = client.organizations.categories.prompts( + category_id="categoryId", + limit=10000, + status=["active"], + ) + ``` + """ + if category_id is None or (isinstance(category_id, str) and not category_id): + raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") + return self._get( + path_template("/v1/org/categories/{category_id}/prompts", **{"category_id": category_id}), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"limit": limit, "cursor": cursor, "order_dir": order_dir, "analysis_type": analysis_type, "prompt_type": prompt_type, "status": status, "topic_id": topic_id, "tag_id": tag_id, "region_id": region_id, "platform_id": platform_id, "persona_id": persona_id}, category_prompts_params.CategoryPromptsParams)), + cast_to=CategoryPromptsResponse, + ) + + def create_prompts( + self, + category_id: str, + *, + prompts: Iterable[category_create_prompts_params.Prompt], + dry_run: bool | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> CategoryCreatePromptsResponse: + """ + Create one or more prompts in a category. Topics and tags are auto-created if referenced by name and not yet existing. Use dry_run to preview without persisting. + + Args: + category_id: Path parameter. + prompts: List of prompts to create. + dry_run: When true, validate and preview changes without persisting them. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + CategoryCreatePromptsResponse: Successful Response + + Example: + ```python + category = client.organizations.categories.create_prompts( + category_id="categoryId", + prompts=[], + dry_run=False, + ) + ``` + """ + if category_id is None or (isinstance(category_id, str) and not category_id): + raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") + return self._post( + path_template("/v1/org/categories/{category_id}/prompts", **{"category_id": category_id}), + body=maybe_transform( + { + "prompts": prompts, + "dry_run": dry_run, + }, + category_create_prompts_params.CategoryCreatePromptsParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=CategoryCreatePromptsResponse, + ) + + def update_prompts( + self, + category_id: str, + *, + prompts: Iterable[category_update_prompts_params.Prompt], + dry_run: bool | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> CategoryUpdatePromptsResponse: + """ + Update one or more existing prompts. Only provided fields are changed. Dimension fields (regions, platforms, personas, tags) replace the full set when provided. Use dry_run to preview without persisting. + + Args: + category_id: Path parameter. + prompts: List of prompt updates. Each entry must include an `id` and at least one field to change. + dry_run: When true, validate and preview changes without persisting them. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + CategoryUpdatePromptsResponse: Successful Response + + Example: + ```python + category = client.organizations.categories.update_prompts( + category_id="categoryId", + prompts=[], + dry_run=False, + ) + ``` + """ + if category_id is None or (isinstance(category_id, str) and not category_id): + raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") + return self._patch( + path_template("/v1/org/categories/{category_id}/prompts", **{"category_id": category_id}), + body=maybe_transform( + { + "prompts": prompts, + "dry_run": dry_run, + }, + category_update_prompts_params.CategoryUpdatePromptsParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=CategoryUpdatePromptsResponse, + ) + + def update_prompt_status( + self, + category_id: str, + *, + prompt_ids: Iterable[str], + status: Literal["active", "disabled", "deleted"], + dry_run: bool | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> CategoryUpdatePromptStatusResponse: + """ + Bulk-update the status of one or more prompts. Prompts already in the target status are skipped. Use dry_run to preview without persisting. + + Status options: + - 'active': Prompts will run daily. + - 'disabled': Prompts will not run moving forward, but historical data is preserved. + - 'deleted': Prompts are deleted along with historical data + + Args: + category_id: Path parameter. + prompt_ids: IDs of the prompts to update. + status: Target status: 'active', 'disabled', or 'deleted'. + dry_run: When true, validate and preview changes without persisting them. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + CategoryUpdatePromptStatusResponse: Successful Response + + Example: + ```python + category = client.organizations.categories.update_prompt_status( + category_id="categoryId", + prompt_ids=[], + status="active", + dry_run=False, + ) + ``` + """ + if category_id is None or (isinstance(category_id, str) and not category_id): + raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") + return self._patch( + path_template("/v1/org/categories/{category_id}/prompts/status", **{"category_id": category_id}), + body=maybe_transform( + { + "prompt_ids": prompt_ids, + "status": status, + "dry_run": dry_run, + }, + category_update_prompt_status_params.CategoryUpdatePromptStatusParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=CategoryUpdatePromptStatusResponse, + ) + + def assets( + self, + category_id: str, + *, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> CategoryAssetsResponse: + """ + Get Category Assets + + Args: + category_id: Path parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + CategoryAssetsResponse: Successful Response + + Example: + ```python + category = client.organizations.categories.assets( + category_id="categoryId", + ) + ``` + """ + if category_id is None or (isinstance(category_id, str) and not category_id): + raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") + return self._get( + path_template("/v1/org/categories/{category_id}/assets", **{"category_id": category_id}), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=CategoryAssetsResponse, + ) + + def get_category_personas( + self, + category_id: str, + *, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> CategoryGetCategoryPersonasResponse: + """ + Get Category Personas + + Args: + category_id: Path parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + CategoryGetCategoryPersonasResponse: Successful Response + + Example: + ```python + category = client.organizations.categories.get_category_personas( + category_id="categoryId", + ) + ``` + """ + if category_id is None or (isinstance(category_id, str) and not category_id): + raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") + return self._get( + path_template("/v1/org/categories/{category_id}/personas", **{"category_id": category_id}), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=CategoryGetCategoryPersonasResponse, + ) + + +class AsyncCategoriesResource(AsyncAPIResource): + + @cached_property + def with_raw_response(self) -> AsyncCategoriesResourceWithRawResponse: + return AsyncCategoriesResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncCategoriesResourceWithStreamingResponse: + return AsyncCategoriesResourceWithStreamingResponse(self) + + async def list( + self, + *, + organization_ids: Optional[Iterable[str]] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> CategoryListResponse: + """ + Get the organization categories, one row per (category, organization) pair. + + Args: + organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + CategoryListResponse: Successful Response + + Example: + ```python + category = await client.organizations.categories.list() + ``` + """ + return await self._get( + "/v1/org/categories", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"organization_ids": organization_ids}, category_list_params.CategoryListParams)), + cast_to=CategoryListResponse, + ) + + async def topics( + self, + category_id: str, + *, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> CategoryTopicsResponse: + """ + Get the topics for a specific category. + + Args: + category_id: Path parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + CategoryTopicsResponse: Successful Response + + Example: + ```python + category = await client.organizations.categories.topics( + category_id="categoryId", + ) + ``` + """ + if category_id is None or (isinstance(category_id, str) and not category_id): + raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") + return await self._get( + path_template("/v1/org/categories/{category_id}/topics", **{"category_id": category_id}), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=CategoryTopicsResponse, + ) + + async def tags( + self, + category_id: str, + *, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> CategoryTagsResponse: + """ + Get the tags for a specific category. + + Args: + category_id: Path parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + CategoryTagsResponse: Successful Response + + Example: + ```python + category = await client.organizations.categories.tags( + category_id="categoryId", + ) + ``` + """ + if category_id is None or (isinstance(category_id, str) and not category_id): + raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") + return await self._get( + path_template("/v1/org/categories/{category_id}/tags", **{"category_id": category_id}), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=CategoryTagsResponse, + ) + + async def prompts( + self, + category_id: str, + *, + limit: int | Omit = omit, + cursor: Optional[str] | Omit = omit, + order_dir: Literal["asc", "desc"] | Omit = omit, + analysis_type: Iterable[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]] | Omit = omit, + prompt_type: Iterable[Literal["visibility", "sentiment"]] | Omit = omit, + status: Iterable[Literal["active", "disabled"]] | Omit = omit, + topic_id: Iterable[str] | Omit = omit, + tag_id: Iterable[str] | Omit = omit, + region_id: Iterable[str] | Omit = omit, + platform_id: Iterable[str] | Omit = omit, + persona_id: Iterable[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> CategoryPromptsResponse: + """ + Retrieve prompts in a category with optional filtering by type, topic, tag, region, platform, or persona. Supports cursor-based pagination. + + Args: + category_id: Path parameter. + limit: Maximum number of prompts to return. + cursor: Pagination cursor from a previous response. + order_dir: Sort direction by creation date. + analysis_type: Filter by analysis type (visibility, sentiment, accuracy). + prompt_type: Deprecated. Use analysis_type instead. + status: Filter by prompt status. Defaults to `active` only. + topic_id: Filter by topic IDs. + tag_id: Filter by tag IDs. + region_id: Filter by region IDs. + platform_id: Filter by platform IDs. + persona_id: Filter by persona IDs. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + CategoryPromptsResponse: Successful Response + + Example: + ```python + category = await client.organizations.categories.prompts( + category_id="categoryId", + limit=10000, + status=["active"], + ) + ``` + """ + if category_id is None or (isinstance(category_id, str) and not category_id): + raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") + return await self._get( + path_template("/v1/org/categories/{category_id}/prompts", **{"category_id": category_id}), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"limit": limit, "cursor": cursor, "order_dir": order_dir, "analysis_type": analysis_type, "prompt_type": prompt_type, "status": status, "topic_id": topic_id, "tag_id": tag_id, "region_id": region_id, "platform_id": platform_id, "persona_id": persona_id}, category_prompts_params.CategoryPromptsParams)), + cast_to=CategoryPromptsResponse, + ) + + async def create_prompts( + self, + category_id: str, + *, + prompts: Iterable[category_create_prompts_params.Prompt], + dry_run: bool | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> CategoryCreatePromptsResponse: + """ + Create one or more prompts in a category. Topics and tags are auto-created if referenced by name and not yet existing. Use dry_run to preview without persisting. + + Args: + category_id: Path parameter. + prompts: List of prompts to create. + dry_run: When true, validate and preview changes without persisting them. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + CategoryCreatePromptsResponse: Successful Response + + Example: + ```python + category = await client.organizations.categories.create_prompts( + category_id="categoryId", + prompts=[], + dry_run=False, + ) + ``` + """ + if category_id is None or (isinstance(category_id, str) and not category_id): + raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") + return await self._post( + path_template("/v1/org/categories/{category_id}/prompts", **{"category_id": category_id}), + body=await async_maybe_transform( + { + "prompts": prompts, + "dry_run": dry_run, + }, + category_create_prompts_params.CategoryCreatePromptsParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=CategoryCreatePromptsResponse, + ) + + async def update_prompts( + self, + category_id: str, + *, + prompts: Iterable[category_update_prompts_params.Prompt], + dry_run: bool | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> CategoryUpdatePromptsResponse: + """ + Update one or more existing prompts. Only provided fields are changed. Dimension fields (regions, platforms, personas, tags) replace the full set when provided. Use dry_run to preview without persisting. + + Args: + category_id: Path parameter. + prompts: List of prompt updates. Each entry must include an `id` and at least one field to change. + dry_run: When true, validate and preview changes without persisting them. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + CategoryUpdatePromptsResponse: Successful Response + + Example: + ```python + category = await client.organizations.categories.update_prompts( + category_id="categoryId", + prompts=[], + dry_run=False, + ) + ``` + """ + if category_id is None or (isinstance(category_id, str) and not category_id): + raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") + return await self._patch( + path_template("/v1/org/categories/{category_id}/prompts", **{"category_id": category_id}), + body=await async_maybe_transform( + { + "prompts": prompts, + "dry_run": dry_run, + }, + category_update_prompts_params.CategoryUpdatePromptsParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=CategoryUpdatePromptsResponse, + ) + + async def update_prompt_status( + self, + category_id: str, + *, + prompt_ids: Iterable[str], + status: Literal["active", "disabled", "deleted"], + dry_run: bool | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> CategoryUpdatePromptStatusResponse: + """ + Bulk-update the status of one or more prompts. Prompts already in the target status are skipped. Use dry_run to preview without persisting. + + Status options: + - 'active': Prompts will run daily. + - 'disabled': Prompts will not run moving forward, but historical data is preserved. + - 'deleted': Prompts are deleted along with historical data + + Args: + category_id: Path parameter. + prompt_ids: IDs of the prompts to update. + status: Target status: 'active', 'disabled', or 'deleted'. + dry_run: When true, validate and preview changes without persisting them. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + CategoryUpdatePromptStatusResponse: Successful Response + + Example: + ```python + category = await client.organizations.categories.update_prompt_status( + category_id="categoryId", + prompt_ids=[], + status="active", + dry_run=False, + ) + ``` + """ + if category_id is None or (isinstance(category_id, str) and not category_id): + raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") + return await self._patch( + path_template("/v1/org/categories/{category_id}/prompts/status", **{"category_id": category_id}), + body=await async_maybe_transform( + { + "prompt_ids": prompt_ids, + "status": status, + "dry_run": dry_run, + }, + category_update_prompt_status_params.CategoryUpdatePromptStatusParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=CategoryUpdatePromptStatusResponse, + ) + + async def assets( + self, + category_id: str, + *, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> CategoryAssetsResponse: + """ + Get Category Assets + + Args: + category_id: Path parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + CategoryAssetsResponse: Successful Response + + Example: + ```python + category = await client.organizations.categories.assets( + category_id="categoryId", + ) + ``` + """ + if category_id is None or (isinstance(category_id, str) and not category_id): + raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") + return await self._get( + path_template("/v1/org/categories/{category_id}/assets", **{"category_id": category_id}), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=CategoryAssetsResponse, + ) + + async def get_category_personas( + self, + category_id: str, + *, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> CategoryGetCategoryPersonasResponse: + """ + Get Category Personas + + Args: + category_id: Path parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + CategoryGetCategoryPersonasResponse: Successful Response + + Example: + ```python + category = await client.organizations.categories.get_category_personas( + category_id="categoryId", + ) + ``` + """ + if category_id is None or (isinstance(category_id, str) and not category_id): + raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") + return await self._get( + path_template("/v1/org/categories/{category_id}/personas", **{"category_id": category_id}), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=CategoryGetCategoryPersonasResponse, + ) + + +class CategoriesResourceWithRawResponse: + def __init__(self, categories: CategoriesResource) -> None: + self._categories = categories + + self.list = to_raw_response_wrapper( + categories.list, + ) + self.topics = to_raw_response_wrapper( + categories.topics, + ) + self.tags = to_raw_response_wrapper( + categories.tags, + ) + self.prompts = to_raw_response_wrapper( + categories.prompts, + ) + self.create_prompts = to_raw_response_wrapper( + categories.create_prompts, + ) + self.update_prompts = to_raw_response_wrapper( + categories.update_prompts, + ) + self.update_prompt_status = to_raw_response_wrapper( + categories.update_prompt_status, + ) + self.assets = to_raw_response_wrapper( + categories.assets, + ) + self.get_category_personas = to_raw_response_wrapper( + categories.get_category_personas, + ) + + +class AsyncCategoriesResourceWithRawResponse: + def __init__(self, categories: AsyncCategoriesResource) -> None: + self._categories = categories + + self.list = async_to_raw_response_wrapper( + categories.list, + ) + self.topics = async_to_raw_response_wrapper( + categories.topics, + ) + self.tags = async_to_raw_response_wrapper( + categories.tags, + ) + self.prompts = async_to_raw_response_wrapper( + categories.prompts, + ) + self.create_prompts = async_to_raw_response_wrapper( + categories.create_prompts, + ) + self.update_prompts = async_to_raw_response_wrapper( + categories.update_prompts, + ) + self.update_prompt_status = async_to_raw_response_wrapper( + categories.update_prompt_status, + ) + self.assets = async_to_raw_response_wrapper( + categories.assets, + ) + self.get_category_personas = async_to_raw_response_wrapper( + categories.get_category_personas, + ) + + +class CategoriesResourceWithStreamingResponse: + def __init__(self, categories: CategoriesResource) -> None: + self._categories = categories + + self.list = to_streamed_response_wrapper( + categories.list, + ) + self.topics = to_streamed_response_wrapper( + categories.topics, + ) + self.tags = to_streamed_response_wrapper( + categories.tags, + ) + self.prompts = to_streamed_response_wrapper( + categories.prompts, + ) + self.create_prompts = to_streamed_response_wrapper( + categories.create_prompts, + ) + self.update_prompts = to_streamed_response_wrapper( + categories.update_prompts, + ) + self.update_prompt_status = to_streamed_response_wrapper( + categories.update_prompt_status, + ) + self.assets = to_streamed_response_wrapper( + categories.assets, + ) + self.get_category_personas = to_streamed_response_wrapper( + categories.get_category_personas, + ) + + +class AsyncCategoriesResourceWithStreamingResponse: + def __init__(self, categories: AsyncCategoriesResource) -> None: + self._categories = categories + + self.list = async_to_streamed_response_wrapper( + categories.list, + ) + self.topics = async_to_streamed_response_wrapper( + categories.topics, + ) + self.tags = async_to_streamed_response_wrapper( + categories.tags, + ) + self.prompts = async_to_streamed_response_wrapper( + categories.prompts, + ) + self.create_prompts = async_to_streamed_response_wrapper( + categories.create_prompts, + ) + self.update_prompts = async_to_streamed_response_wrapper( + categories.update_prompts, + ) + self.update_prompt_status = async_to_streamed_response_wrapper( + categories.update_prompt_status, + ) + self.assets = async_to_streamed_response_wrapper( + categories.assets, + ) + self.get_category_personas = async_to_streamed_response_wrapper( + categories.get_category_personas, + ) diff --git a/src/profound/resources/organizations/organizations.py b/src/resources/organizations/organizations.py similarity index 53% rename from src/profound/resources/organizations/organizations.py rename to src/resources/organizations/organizations.py index ab7abfaf..9996bf8b 100644 --- a/src/profound/resources/organizations/organizations.py +++ b/src/resources/organizations/organizations.py @@ -1,28 +1,14 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from __future__ import annotations -from typing import Optional - import httpx -from ...types import ( - organization_domains_params, - organization_regions_params, - organization_list_assets_params, - organization_get_personas_params, -) -from ..._types import Body, Omit, Query, Headers, NotGiven, SequenceNotStr, omit, not_given -from ..._utils import maybe_transform, async_maybe_transform +from typing import Iterable, Optional + +from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given +from ..._utils import path_template, maybe_transform, async_maybe_transform from ..._compat import cached_property -from .categories import ( - CategoriesResource, - AsyncCategoriesResource, - CategoriesResourceWithRawResponse, - AsyncCategoriesResourceWithRawResponse, - CategoriesResourceWithStreamingResponse, - AsyncCategoriesResourceWithStreamingResponse, -) from ..._resource import SyncAPIResource, AsyncAPIResource from ..._response import ( to_raw_response_wrapper, @@ -31,38 +17,40 @@ async_to_streamed_response_wrapper, ) from ..._base_client import make_request_options +from .categories import ( + CategoriesResource, + AsyncCategoriesResource, + CategoriesResourceWithRawResponse, + AsyncCategoriesResourceWithRawResponse, + CategoriesResourceWithStreamingResponse, + AsyncCategoriesResourceWithStreamingResponse, +) from ...types.organization_list_response import OrganizationListResponse -from ...types.organization_models_response import OrganizationModelsResponse -from ...types.organization_domains_response import OrganizationDomainsResponse from ...types.organization_regions_response import OrganizationRegionsResponse -from ...types.organization_list_assets_response import OrganizationListAssetsResponse -from ...types.organization_get_personas_response import OrganizationGetPersonasResponse +from ...types import organization_regions_params +from ...types.organization_models_response import OrganizationModelsResponse +from ...types.organization_domains_response import OrganizationDomainsResponse, DomainWithOrganization +from ...types import organization_domains_params +from ...types.organization_list_assets_response import OrganizationListAssetsResponse, CategoryAssetWithCategory +from ...types import organization_list_assets_params +from ...types.organization_get_personas_response import OrganizationGetPersonasResponse, OrganizationPersonasWithCategory +from ...types import organization_get_personas_params __all__ = ["OrganizationsResource", "AsyncOrganizationsResource"] class OrganizationsResource(SyncAPIResource): + @cached_property def categories(self) -> CategoriesResource: return CategoriesResource(self._client) @cached_property def with_raw_response(self) -> OrganizationsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ return OrganizationsResourceWithRawResponse(self) @cached_property def with_streaming_response(self) -> OrganizationsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ return OrganizationsResourceWithStreamingResponse(self) def list( @@ -75,238 +63,222 @@ def list( extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, ) -> OrganizationListResponse: - """Return every organization the caller's API key grants access to. - - Use this to - discover organization IDs before calling endpoints that accept an - `organization_id` filter. + """ + Return every organization the caller's API key grants access to. Use this to discover organization IDs before calling endpoints that accept an `organization_id` filter. + + Args: + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + OrganizationListResponse: Successful Response + + Example: + ```python + organization = client.organizations.list() + ``` """ return self._get( "/v1/org", - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), cast_to=OrganizationListResponse, ) - def domains( + def regions( self, *, - organization_ids: Optional[SequenceNotStr[str]] | Omit = omit, + organization_ids: Optional[Iterable[str]] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> OrganizationDomainsResponse: + ) -> OrganizationRegionsResponse: """ - Get the organization domains. - + Get the organization regions. + Args: - organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the - parameter to target multiple orgs (e.g. - `?organization_ids=&organization_ids=`). Omit to return data from - every organization the caller has access to. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds + organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + OrganizationRegionsResponse: Successful Response + + Example: + ```python + organization = client.organizations.regions() + ``` """ return self._get( - "/v1/org/domains", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - {"organization_ids": organization_ids}, organization_domains_params.OrganizationDomainsParams - ), - ), - cast_to=OrganizationDomainsResponse, + "/v1/org/regions", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"organization_ids": organization_ids}, organization_regions_params.OrganizationRegionsParams)), + cast_to=OrganizationRegionsResponse, ) - def get_personas( + def models( self, *, - organization_ids: Optional[SequenceNotStr[str]] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> OrganizationGetPersonasResponse: + ) -> OrganizationModelsResponse: """ - Get the organization personas, one row per (persona, organization) pair. - - Same (item, org) fan-out as `get_assets`: a persona's category can be owned by - multiple orgs, and each owning org gets its own row so no association is - silently dropped. - + Get the organization models. + Args: - organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the - parameter to target multiple orgs (e.g. - `?organization_ids=&organization_ids=`). Omit to return data from - every organization the caller has access to. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + OrganizationModelsResponse: Successful Response + + Example: + ```python + organization = client.organizations.models() + ``` """ return self._get( - "/v1/org/personas", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - {"organization_ids": organization_ids}, - organization_get_personas_params.OrganizationGetPersonasParams, - ), - ), - cast_to=OrganizationGetPersonasResponse, + "/v1/org/models", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=OrganizationModelsResponse, ) - def list_assets( + def domains( self, *, - organization_ids: Optional[SequenceNotStr[str]] | Omit = omit, + organization_ids: Optional[Iterable[str]] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> OrganizationListAssetsResponse: + ) -> OrganizationDomainsResponse: """ - Get the organization assets, one row per (asset, organization) pair. - - An asset's category can belong to multiple organizations; one asset row is - emitted per owning org so no association is silently dropped. - + Get the organization domains. + Args: - organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the - parameter to target multiple orgs (e.g. - `?organization_ids=&organization_ids=`). Omit to return data from - every organization the caller has access to. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds + organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + OrganizationDomainsResponse: Successful Response + + Example: + ```python + organization = client.organizations.domains() + ``` """ return self._get( - "/v1/org/assets", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - {"organization_ids": organization_ids}, organization_list_assets_params.OrganizationListAssetsParams - ), - ), - cast_to=OrganizationListAssetsResponse, + "/v1/org/domains", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"organization_ids": organization_ids}, organization_domains_params.OrganizationDomainsParams)), + cast_to=OrganizationDomainsResponse, ) - def models( + def list_assets( self, *, + organization_ids: Optional[Iterable[str]] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> OrganizationModelsResponse: - """Get the organization models.""" + ) -> OrganizationListAssetsResponse: + """ + Get the organization assets, one row per (asset, organization) pair. + + An asset's category can belong to multiple organizations; one asset row is + emitted per owning org so no association is silently dropped. + + Args: + organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + OrganizationListAssetsResponse: Successful Response + + Example: + ```python + organization = client.organizations.list_assets() + ``` + """ return self._get( - "/v1/org/models", - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=OrganizationModelsResponse, + "/v1/org/assets", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"organization_ids": organization_ids}, organization_list_assets_params.OrganizationListAssetsParams)), + cast_to=OrganizationListAssetsResponse, ) - def regions( + def get_personas( self, *, - organization_ids: Optional[SequenceNotStr[str]] | Omit = omit, + organization_ids: Optional[Iterable[str]] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> OrganizationRegionsResponse: + ) -> OrganizationGetPersonasResponse: """ - Get the organization regions. - + Get the organization personas, one row per (persona, organization) pair. + + Same (item, org) fan-out as ``get_assets``: a persona's category can be + owned by multiple orgs, and each owning org gets its own row so no + association is silently dropped. + Args: - organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the - parameter to target multiple orgs (e.g. - `?organization_ids=&organization_ids=`). Omit to return data from - every organization the caller has access to. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds + organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + OrganizationGetPersonasResponse: Successful Response + + Example: + ```python + organization = client.organizations.get_personas() + ``` """ return self._get( - "/v1/org/regions", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - {"organization_ids": organization_ids}, organization_regions_params.OrganizationRegionsParams - ), - ), - cast_to=OrganizationRegionsResponse, + "/v1/org/personas", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"organization_ids": organization_ids}, organization_get_personas_params.OrganizationGetPersonasParams)), + cast_to=OrganizationGetPersonasResponse, ) class AsyncOrganizationsResource(AsyncAPIResource): + @cached_property def categories(self) -> AsyncCategoriesResource: return AsyncCategoriesResource(self._client) @cached_property def with_raw_response(self) -> AsyncOrganizationsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#accessing-raw-response-data-eg-headers - """ return AsyncOrganizationsResourceWithRawResponse(self) @cached_property def with_streaming_response(self) -> AsyncOrganizationsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cooper-square-technologies/profound-python-sdk#with_streaming_response - """ return AsyncOrganizationsResourceWithStreamingResponse(self) async def list( @@ -319,213 +291,207 @@ async def list( extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, ) -> OrganizationListResponse: - """Return every organization the caller's API key grants access to. - - Use this to - discover organization IDs before calling endpoints that accept an - `organization_id` filter. + """ + Return every organization the caller's API key grants access to. Use this to discover organization IDs before calling endpoints that accept an `organization_id` filter. + + Args: + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + OrganizationListResponse: Successful Response + + Example: + ```python + organization = await client.organizations.list() + ``` """ return await self._get( "/v1/org", - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), cast_to=OrganizationListResponse, ) - async def domains( + async def regions( self, *, - organization_ids: Optional[SequenceNotStr[str]] | Omit = omit, + organization_ids: Optional[Iterable[str]] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> OrganizationDomainsResponse: + ) -> OrganizationRegionsResponse: """ - Get the organization domains. - + Get the organization regions. + Args: - organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the - parameter to target multiple orgs (e.g. - `?organization_ids=&organization_ids=`). Omit to return data from - every organization the caller has access to. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds + organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + OrganizationRegionsResponse: Successful Response + + Example: + ```python + organization = await client.organizations.regions() + ``` """ return await self._get( - "/v1/org/domains", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - {"organization_ids": organization_ids}, organization_domains_params.OrganizationDomainsParams - ), - ), - cast_to=OrganizationDomainsResponse, + "/v1/org/regions", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"organization_ids": organization_ids}, organization_regions_params.OrganizationRegionsParams)), + cast_to=OrganizationRegionsResponse, ) - async def get_personas( + async def models( self, *, - organization_ids: Optional[SequenceNotStr[str]] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> OrganizationGetPersonasResponse: + ) -> OrganizationModelsResponse: """ - Get the organization personas, one row per (persona, organization) pair. - - Same (item, org) fan-out as `get_assets`: a persona's category can be owned by - multiple orgs, and each owning org gets its own row so no association is - silently dropped. - + Get the organization models. + Args: - organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the - parameter to target multiple orgs (e.g. - `?organization_ids=&organization_ids=`). Omit to return data from - every organization the caller has access to. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + OrganizationModelsResponse: Successful Response + + Example: + ```python + organization = await client.organizations.models() + ``` """ return await self._get( - "/v1/org/personas", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - {"organization_ids": organization_ids}, - organization_get_personas_params.OrganizationGetPersonasParams, - ), - ), - cast_to=OrganizationGetPersonasResponse, + "/v1/org/models", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=OrganizationModelsResponse, ) - async def list_assets( + async def domains( self, *, - organization_ids: Optional[SequenceNotStr[str]] | Omit = omit, + organization_ids: Optional[Iterable[str]] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> OrganizationListAssetsResponse: + ) -> OrganizationDomainsResponse: """ - Get the organization assets, one row per (asset, organization) pair. - - An asset's category can belong to multiple organizations; one asset row is - emitted per owning org so no association is silently dropped. - + Get the organization domains. + Args: - organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the - parameter to target multiple orgs (e.g. - `?organization_ids=&organization_ids=`). Omit to return data from - every organization the caller has access to. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds + organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + OrganizationDomainsResponse: Successful Response + + Example: + ```python + organization = await client.organizations.domains() + ``` """ return await self._get( - "/v1/org/assets", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - {"organization_ids": organization_ids}, organization_list_assets_params.OrganizationListAssetsParams - ), - ), - cast_to=OrganizationListAssetsResponse, + "/v1/org/domains", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"organization_ids": organization_ids}, organization_domains_params.OrganizationDomainsParams)), + cast_to=OrganizationDomainsResponse, ) - async def models( + async def list_assets( self, *, + organization_ids: Optional[Iterable[str]] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> OrganizationModelsResponse: - """Get the organization models.""" + ) -> OrganizationListAssetsResponse: + """ + Get the organization assets, one row per (asset, organization) pair. + + An asset's category can belong to multiple organizations; one asset row is + emitted per owning org so no association is silently dropped. + + Args: + organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + OrganizationListAssetsResponse: Successful Response + + Example: + ```python + organization = await client.organizations.list_assets() + ``` + """ return await self._get( - "/v1/org/models", - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=OrganizationModelsResponse, + "/v1/org/assets", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"organization_ids": organization_ids}, organization_list_assets_params.OrganizationListAssetsParams)), + cast_to=OrganizationListAssetsResponse, ) - async def regions( + async def get_personas( self, *, - organization_ids: Optional[SequenceNotStr[str]] | Omit = omit, + organization_ids: Optional[Iterable[str]] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> OrganizationRegionsResponse: + ) -> OrganizationGetPersonasResponse: """ - Get the organization regions. - + Get the organization personas, one row per (persona, organization) pair. + + Same (item, org) fan-out as ``get_assets``: a persona's category can be + owned by multiple orgs, and each owning org gets its own row so no + association is silently dropped. + Args: - organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the - parameter to target multiple orgs (e.g. - `?organization_ids=&organization_ids=`). Omit to return data from - every organization the caller has access to. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds + organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + OrganizationGetPersonasResponse: Successful Response + + Example: + ```python + organization = await client.organizations.get_personas() + ``` """ return await self._get( - "/v1/org/regions", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - {"organization_ids": organization_ids}, organization_regions_params.OrganizationRegionsParams - ), - ), - cast_to=OrganizationRegionsResponse, + "/v1/org/personas", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"organization_ids": organization_ids}, organization_get_personas_params.OrganizationGetPersonasParams)), + cast_to=OrganizationGetPersonasResponse, ) @@ -536,20 +502,20 @@ def __init__(self, organizations: OrganizationsResource) -> None: self.list = to_raw_response_wrapper( organizations.list, ) + self.regions = to_raw_response_wrapper( + organizations.regions, + ) + self.models = to_raw_response_wrapper( + organizations.models, + ) self.domains = to_raw_response_wrapper( organizations.domains, ) - self.get_personas = to_raw_response_wrapper( - organizations.get_personas, - ) self.list_assets = to_raw_response_wrapper( organizations.list_assets, ) - self.models = to_raw_response_wrapper( - organizations.models, - ) - self.regions = to_raw_response_wrapper( - organizations.regions, + self.get_personas = to_raw_response_wrapper( + organizations.get_personas, ) @cached_property @@ -564,20 +530,20 @@ def __init__(self, organizations: AsyncOrganizationsResource) -> None: self.list = async_to_raw_response_wrapper( organizations.list, ) + self.regions = async_to_raw_response_wrapper( + organizations.regions, + ) + self.models = async_to_raw_response_wrapper( + organizations.models, + ) self.domains = async_to_raw_response_wrapper( organizations.domains, ) - self.get_personas = async_to_raw_response_wrapper( - organizations.get_personas, - ) self.list_assets = async_to_raw_response_wrapper( organizations.list_assets, ) - self.models = async_to_raw_response_wrapper( - organizations.models, - ) - self.regions = async_to_raw_response_wrapper( - organizations.regions, + self.get_personas = async_to_raw_response_wrapper( + organizations.get_personas, ) @cached_property @@ -592,20 +558,20 @@ def __init__(self, organizations: OrganizationsResource) -> None: self.list = to_streamed_response_wrapper( organizations.list, ) + self.regions = to_streamed_response_wrapper( + organizations.regions, + ) + self.models = to_streamed_response_wrapper( + organizations.models, + ) self.domains = to_streamed_response_wrapper( organizations.domains, ) - self.get_personas = to_streamed_response_wrapper( - organizations.get_personas, - ) self.list_assets = to_streamed_response_wrapper( organizations.list_assets, ) - self.models = to_streamed_response_wrapper( - organizations.models, - ) - self.regions = to_streamed_response_wrapper( - organizations.regions, + self.get_personas = to_streamed_response_wrapper( + organizations.get_personas, ) @cached_property @@ -620,20 +586,20 @@ def __init__(self, organizations: AsyncOrganizationsResource) -> None: self.list = async_to_streamed_response_wrapper( organizations.list, ) + self.regions = async_to_streamed_response_wrapper( + organizations.regions, + ) + self.models = async_to_streamed_response_wrapper( + organizations.models, + ) self.domains = async_to_streamed_response_wrapper( organizations.domains, ) - self.get_personas = async_to_streamed_response_wrapper( - organizations.get_personas, - ) self.list_assets = async_to_streamed_response_wrapper( organizations.list_assets, ) - self.models = async_to_streamed_response_wrapper( - organizations.models, - ) - self.regions = async_to_streamed_response_wrapper( - organizations.regions, + self.get_personas = async_to_streamed_response_wrapper( + organizations.get_personas, ) @cached_property diff --git a/src/resources/prompts/__init__.py b/src/resources/prompts/__init__.py new file mode 100644 index 00000000..c7f30219 --- /dev/null +++ b/src/resources/prompts/__init__.py @@ -0,0 +1,33 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from .prompts import ( + PromptsResource, + AsyncPromptsResource, + PromptsResourceWithRawResponse, + AsyncPromptsResourceWithRawResponse, + PromptsResourceWithStreamingResponse, + AsyncPromptsResourceWithStreamingResponse, +) +from .answers import ( + AnswersResource, + AsyncAnswersResource, + AnswersResourceWithRawResponse, + AsyncAnswersResourceWithRawResponse, + AnswersResourceWithStreamingResponse, + AsyncAnswersResourceWithStreamingResponse, +) + +__all__ = [ + "PromptsResource", + "AsyncPromptsResource", + "PromptsResourceWithRawResponse", + "AsyncPromptsResourceWithRawResponse", + "PromptsResourceWithStreamingResponse", + "AsyncPromptsResourceWithStreamingResponse", + "AnswersResource", + "AsyncAnswersResource", + "AnswersResourceWithRawResponse", + "AsyncAnswersResourceWithRawResponse", + "AnswersResourceWithStreamingResponse", + "AsyncAnswersResourceWithStreamingResponse", +] diff --git a/src/resources/prompts/answers.py b/src/resources/prompts/answers.py new file mode 100644 index 00000000..c9d41b78 --- /dev/null +++ b/src/resources/prompts/answers.py @@ -0,0 +1,490 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +import httpx + +from typing import Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Literal + +from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given +from ..._utils import path_template, maybe_transform, async_maybe_transform +from ..._compat import cached_property +from ..._resource import SyncAPIResource, AsyncAPIResource +from ..._response import ( + to_raw_response_wrapper, + to_streamed_response_wrapper, + async_to_raw_response_wrapper, + async_to_streamed_response_wrapper, +) +from ..._base_client import make_request_options +from ..._streaming import Stream, AsyncStream +from ...types.prompts.answer_create_v1_prompts_post_response import AnswerCreateV1PromptsPostResponse, AnswersResponseInfo, AnswersRawData, CitationDetail, CitationDetailGroup, SentimentTheme +from ...types.pagination import Pagination +from ...types.region_id_filter import RegionIdFilter +from ...types.region_name_filter import RegionNameFilter +from ...types.model_id_filter import ModelIdFilter +from ...types.tag_id_filter import TagIdFilter +from ...types.analysis_type_filter import AnalysisTypeFilter +from ...types.prompt_type_filter import PromptTypeFilter +from ...types.prompt_filter import PromptFilter +from ...types.persona_id_filter import PersonaIdFilter +from ...types.topic_id_filter import TopicIdFilter +from ...types.asset_id_filter import AssetIdFilter +from ...types.prompts import answer_create_v1_prompts_post_params +from ...types.prompts.answer_query_v2_v2_prompts_post_response import AnswerQueryV2V2PromptsPostResponse +from ...types.prompts import answer_query_v2_v2_prompts_post_params +from ...types.prompts import answer_stream_v2_v2_prompts_stream_post_params + +__all__ = ["AnswersResource", "AsyncAnswersResource"] + + +class AnswersResource(SyncAPIResource): + + @cached_property + def with_raw_response(self) -> AnswersResourceWithRawResponse: + return AnswersResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AnswersResourceWithStreamingResponse: + return AnswersResourceWithStreamingResponse(self) + + def create_v1_prompts_post( + self, + *, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + pagination: Pagination | Omit = omit, + filters: Iterable[object] | Omit = omit, + include: answer_create_v1_prompts_post_params.Include | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AnswerCreateV1PromptsPostResponse: + """ + Get Answers + + Args: + category_id: Body parameter. + start_date: Body parameter. + end_date: Body parameter. + pagination: Pagination parameters for the results. Default is 10,000 rows with no offset. + filters: List of filters to apply to the answers report. + include: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AnswerCreateV1PromptsPostResponse: Successful Response + + Example: + ```python + answer = client.prompts.answers.create_v1_prompts_post( + category_id="", + start_date="", + end_date="", + ) + ``` + """ + return self._post( + "/v1/prompts/answers", + body=maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "pagination": pagination, + "filters": filters, + "include": include, + }, + answer_create_v1_prompts_post_params.AnswerCreateV1PromptsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AnswerCreateV1PromptsPostResponse, + ) + + def query_v2_v2_prompts_post( + self, + *, + category_id: str, + start_date: str, + end_date: str, + include: Optional[Iterable[Literal["run_id", "date", "model", "topic", "topic_id", "persona", "region", "tags", "prompt", "prompt_id", "response", "mentions", "citations", "search_queries", "analysis_types", "sentiment_claims"]]] | Omit = omit, + filter: Optional[answer_query_v2_v2_prompts_post_params.Filter] | Omit = omit, + limit: Optional[int] | Omit = omit, + max_results: Optional[int] | Omit = omit, + cursor: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AnswerQueryV2V2PromptsPostResponse: + """ + Query Answers V2 + + Args: + category_id: Body parameter. + start_date: YYYY-MM-DD, ET, inclusive + end_date: YYYY-MM-DD, ET, inclusive + include: Which row fields to return: `run_id`, `date`, `model`, `topic`, `topic_id`, `region`, `persona`, `tags`, `prompt`, `prompt_id`, `response`, `mentions`, `citations`, `search_queries`, `analysis_types`, `sentiment_claims`. Omit for all of them. + filter: and/or/not tree over `model`, `topic`, `region`, `persona`, `prompt`, `tag`, `analysis_type` (visibility/sentiment/factcheck); plus top-level `and` leaves `domain` or `page` (`is` one value, or `in` a list). Substring-search the prompt with `{"field": "prompt", "op": "contains", "value": "…"}`. + limit: Page size; default 10, max 50. + max_results: Stream endpoint only: cap the number of streamed rows (default: all). + cursor: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AnswerQueryV2V2PromptsPostResponse: Successful Response + + Example: + ```python + answer = client.prompts.answers.query_v2_v2_prompts_post( + category_id="", + start_date="", + end_date="", + ) + ``` + """ + return self._post( + "/v2/prompts/answers", + body=maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "include": include, + "filter": filter, + "limit": limit, + "max_results": max_results, + "cursor": cursor, + }, + answer_query_v2_v2_prompts_post_params.AnswerQueryV2V2PromptsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AnswerQueryV2V2PromptsPostResponse, + ) + + def stream_v2_v2_prompts_stream_post( + self, + *, + category_id: str, + start_date: str, + end_date: str, + include: Optional[Iterable[Literal["run_id", "date", "model", "topic", "topic_id", "persona", "region", "tags", "prompt", "prompt_id", "response", "mentions", "citations", "search_queries", "analysis_types", "sentiment_claims"]]] | Omit = omit, + filter: Optional[answer_stream_v2_v2_prompts_stream_post_params.Filter] | Omit = omit, + limit: Optional[int] | Omit = omit, + max_results: Optional[int] | Omit = omit, + cursor: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Stream[str]: + """ + Stream Answers V2 + + Args: + category_id: Body parameter. + start_date: YYYY-MM-DD, ET, inclusive + end_date: YYYY-MM-DD, ET, inclusive + include: Which row fields to return: `run_id`, `date`, `model`, `topic`, `topic_id`, `region`, `persona`, `tags`, `prompt`, `prompt_id`, `response`, `mentions`, `citations`, `search_queries`, `analysis_types`, `sentiment_claims`. Omit for all of them. + filter: and/or/not tree over `model`, `topic`, `region`, `persona`, `prompt`, `tag`, `analysis_type` (visibility/sentiment/factcheck); plus top-level `and` leaves `domain` or `page` (`is` one value, or `in` a list). Substring-search the prompt with `{"field": "prompt", "op": "contains", "value": "…"}`. + limit: Page size; default 10, max 50. + max_results: Stream endpoint only: cap the number of streamed rows (default: all). + cursor: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + Stream[str]: Successful Response + + Example: + ```python + stream = client.prompts.answers.stream_v2_v2_prompts_stream_post( + category_id="", + start_date="", + end_date="", + ) + for event in stream: + print(event) + ``` + """ + extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} + return self._post( + "/v2/prompts/answers/stream", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=str, + stream=True, + stream_cls=Stream[str], + ) + + +class AsyncAnswersResource(AsyncAPIResource): + + @cached_property + def with_raw_response(self) -> AsyncAnswersResourceWithRawResponse: + return AsyncAnswersResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncAnswersResourceWithStreamingResponse: + return AsyncAnswersResourceWithStreamingResponse(self) + + async def create_v1_prompts_post( + self, + *, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + pagination: Pagination | Omit = omit, + filters: Iterable[object] | Omit = omit, + include: answer_create_v1_prompts_post_params.Include | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AnswerCreateV1PromptsPostResponse: + """ + Get Answers + + Args: + category_id: Body parameter. + start_date: Body parameter. + end_date: Body parameter. + pagination: Pagination parameters for the results. Default is 10,000 rows with no offset. + filters: List of filters to apply to the answers report. + include: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AnswerCreateV1PromptsPostResponse: Successful Response + + Example: + ```python + answer = await client.prompts.answers.create_v1_prompts_post( + category_id="", + start_date="", + end_date="", + ) + ``` + """ + return await self._post( + "/v1/prompts/answers", + body=await async_maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "pagination": pagination, + "filters": filters, + "include": include, + }, + answer_create_v1_prompts_post_params.AnswerCreateV1PromptsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AnswerCreateV1PromptsPostResponse, + ) + + async def query_v2_v2_prompts_post( + self, + *, + category_id: str, + start_date: str, + end_date: str, + include: Optional[Iterable[Literal["run_id", "date", "model", "topic", "topic_id", "persona", "region", "tags", "prompt", "prompt_id", "response", "mentions", "citations", "search_queries", "analysis_types", "sentiment_claims"]]] | Omit = omit, + filter: Optional[answer_query_v2_v2_prompts_post_params.Filter] | Omit = omit, + limit: Optional[int] | Omit = omit, + max_results: Optional[int] | Omit = omit, + cursor: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AnswerQueryV2V2PromptsPostResponse: + """ + Query Answers V2 + + Args: + category_id: Body parameter. + start_date: YYYY-MM-DD, ET, inclusive + end_date: YYYY-MM-DD, ET, inclusive + include: Which row fields to return: `run_id`, `date`, `model`, `topic`, `topic_id`, `region`, `persona`, `tags`, `prompt`, `prompt_id`, `response`, `mentions`, `citations`, `search_queries`, `analysis_types`, `sentiment_claims`. Omit for all of them. + filter: and/or/not tree over `model`, `topic`, `region`, `persona`, `prompt`, `tag`, `analysis_type` (visibility/sentiment/factcheck); plus top-level `and` leaves `domain` or `page` (`is` one value, or `in` a list). Substring-search the prompt with `{"field": "prompt", "op": "contains", "value": "…"}`. + limit: Page size; default 10, max 50. + max_results: Stream endpoint only: cap the number of streamed rows (default: all). + cursor: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AnswerQueryV2V2PromptsPostResponse: Successful Response + + Example: + ```python + answer = await client.prompts.answers.query_v2_v2_prompts_post( + category_id="", + start_date="", + end_date="", + ) + ``` + """ + return await self._post( + "/v2/prompts/answers", + body=await async_maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "include": include, + "filter": filter, + "limit": limit, + "max_results": max_results, + "cursor": cursor, + }, + answer_query_v2_v2_prompts_post_params.AnswerQueryV2V2PromptsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AnswerQueryV2V2PromptsPostResponse, + ) + + async def stream_v2_v2_prompts_stream_post( + self, + *, + category_id: str, + start_date: str, + end_date: str, + include: Optional[Iterable[Literal["run_id", "date", "model", "topic", "topic_id", "persona", "region", "tags", "prompt", "prompt_id", "response", "mentions", "citations", "search_queries", "analysis_types", "sentiment_claims"]]] | Omit = omit, + filter: Optional[answer_stream_v2_v2_prompts_stream_post_params.Filter] | Omit = omit, + limit: Optional[int] | Omit = omit, + max_results: Optional[int] | Omit = omit, + cursor: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AsyncStream[str]: + """ + Stream Answers V2 + + Args: + category_id: Body parameter. + start_date: YYYY-MM-DD, ET, inclusive + end_date: YYYY-MM-DD, ET, inclusive + include: Which row fields to return: `run_id`, `date`, `model`, `topic`, `topic_id`, `region`, `persona`, `tags`, `prompt`, `prompt_id`, `response`, `mentions`, `citations`, `search_queries`, `analysis_types`, `sentiment_claims`. Omit for all of them. + filter: and/or/not tree over `model`, `topic`, `region`, `persona`, `prompt`, `tag`, `analysis_type` (visibility/sentiment/factcheck); plus top-level `and` leaves `domain` or `page` (`is` one value, or `in` a list). Substring-search the prompt with `{"field": "prompt", "op": "contains", "value": "…"}`. + limit: Page size; default 10, max 50. + max_results: Stream endpoint only: cap the number of streamed rows (default: all). + cursor: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AsyncStream[str]: Successful Response + + Example: + ```python + stream = await client.prompts.answers.stream_v2_v2_prompts_stream_post( + category_id="", + start_date="", + end_date="", + ) + async for event in stream: + print(event) + ``` + """ + extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} + return await self._post( + "/v2/prompts/answers/stream", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=str, + stream=True, + stream_cls=AsyncStream[str], + ) + + +class AnswersResourceWithRawResponse: + def __init__(self, answers: AnswersResource) -> None: + self._answers = answers + + self.create_v1_prompts_post = to_raw_response_wrapper( + answers.create_v1_prompts_post, + ) + self.query_v2_v2_prompts_post = to_raw_response_wrapper( + answers.query_v2_v2_prompts_post, + ) + self.stream_v2_v2_prompts_stream_post = to_raw_response_wrapper( + answers.stream_v2_v2_prompts_stream_post, + ) + + +class AsyncAnswersResourceWithRawResponse: + def __init__(self, answers: AsyncAnswersResource) -> None: + self._answers = answers + + self.create_v1_prompts_post = async_to_raw_response_wrapper( + answers.create_v1_prompts_post, + ) + self.query_v2_v2_prompts_post = async_to_raw_response_wrapper( + answers.query_v2_v2_prompts_post, + ) + self.stream_v2_v2_prompts_stream_post = async_to_raw_response_wrapper( + answers.stream_v2_v2_prompts_stream_post, + ) + + +class AnswersResourceWithStreamingResponse: + def __init__(self, answers: AnswersResource) -> None: + self._answers = answers + + self.create_v1_prompts_post = to_streamed_response_wrapper( + answers.create_v1_prompts_post, + ) + self.query_v2_v2_prompts_post = to_streamed_response_wrapper( + answers.query_v2_v2_prompts_post, + ) + self.stream_v2_v2_prompts_stream_post = to_streamed_response_wrapper( + answers.stream_v2_v2_prompts_stream_post, + ) + + +class AsyncAnswersResourceWithStreamingResponse: + def __init__(self, answers: AsyncAnswersResource) -> None: + self._answers = answers + + self.create_v1_prompts_post = async_to_streamed_response_wrapper( + answers.create_v1_prompts_post, + ) + self.query_v2_v2_prompts_post = async_to_streamed_response_wrapper( + answers.query_v2_v2_prompts_post, + ) + self.stream_v2_v2_prompts_stream_post = async_to_streamed_response_wrapper( + answers.stream_v2_v2_prompts_stream_post, + ) diff --git a/src/resources/prompts/prompts.py b/src/resources/prompts/prompts.py new file mode 100644 index 00000000..75247298 --- /dev/null +++ b/src/resources/prompts/prompts.py @@ -0,0 +1,97 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +import httpx + +from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given +from ..._utils import path_template, maybe_transform, async_maybe_transform +from ..._compat import cached_property +from ..._resource import SyncAPIResource, AsyncAPIResource +from ..._response import ( + to_raw_response_wrapper, + to_streamed_response_wrapper, + async_to_raw_response_wrapper, + async_to_streamed_response_wrapper, +) +from ..._base_client import make_request_options +from .answers import ( + AnswersResource, + AsyncAnswersResource, + AnswersResourceWithRawResponse, + AsyncAnswersResourceWithRawResponse, + AnswersResourceWithStreamingResponse, + AsyncAnswersResourceWithStreamingResponse, +) + +__all__ = ["PromptsResource", "AsyncPromptsResource"] + + +class PromptsResource(SyncAPIResource): + + @cached_property + def answers(self) -> AnswersResource: + return AnswersResource(self._client) + + @cached_property + def with_raw_response(self) -> PromptsResourceWithRawResponse: + return PromptsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> PromptsResourceWithStreamingResponse: + return PromptsResourceWithStreamingResponse(self) + + +class AsyncPromptsResource(AsyncAPIResource): + + @cached_property + def answers(self) -> AsyncAnswersResource: + return AsyncAnswersResource(self._client) + + @cached_property + def with_raw_response(self) -> AsyncPromptsResourceWithRawResponse: + return AsyncPromptsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncPromptsResourceWithStreamingResponse: + return AsyncPromptsResourceWithStreamingResponse(self) + + +class PromptsResourceWithRawResponse: + def __init__(self, prompts: PromptsResource) -> None: + self._prompts = prompts + + + @cached_property + def answers(self) -> AnswersResourceWithRawResponse: + return AnswersResourceWithRawResponse(self._prompts.answers) + + +class AsyncPromptsResourceWithRawResponse: + def __init__(self, prompts: AsyncPromptsResource) -> None: + self._prompts = prompts + + + @cached_property + def answers(self) -> AsyncAnswersResourceWithRawResponse: + return AsyncAnswersResourceWithRawResponse(self._prompts.answers) + + +class PromptsResourceWithStreamingResponse: + def __init__(self, prompts: PromptsResource) -> None: + self._prompts = prompts + + + @cached_property + def answers(self) -> AnswersResourceWithStreamingResponse: + return AnswersResourceWithStreamingResponse(self._prompts.answers) + + +class AsyncPromptsResourceWithStreamingResponse: + def __init__(self, prompts: AsyncPromptsResource) -> None: + self._prompts = prompts + + + @cached_property + def answers(self) -> AsyncAnswersResourceWithStreamingResponse: + return AsyncAnswersResourceWithStreamingResponse(self._prompts.answers) diff --git a/src/resources/reports/__init__.py b/src/resources/reports/__init__.py new file mode 100644 index 00000000..2c6c7c40 --- /dev/null +++ b/src/resources/reports/__init__.py @@ -0,0 +1,145 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from .reports import ( + ReportsResource, + AsyncReportsResource, + ReportsResourceWithRawResponse, + AsyncReportsResourceWithRawResponse, + ReportsResourceWithStreamingResponse, + AsyncReportsResourceWithStreamingResponse, +) +from .citations import ( + CitationsResource, + AsyncCitationsResource, + CitationsResourceWithRawResponse, + AsyncCitationsResourceWithRawResponse, + CitationsResourceWithStreamingResponse, + AsyncCitationsResourceWithStreamingResponse, +) +from .visibility import ( + VisibilityResource, + AsyncVisibilityResource, + VisibilityResourceWithRawResponse, + AsyncVisibilityResourceWithRawResponse, + VisibilityResourceWithStreamingResponse, + AsyncVisibilityResourceWithStreamingResponse, +) +from .sentiment import ( + SentimentResource, + AsyncSentimentResource, + SentimentResourceWithRawResponse, + AsyncSentimentResourceWithRawResponse, + SentimentResourceWithStreamingResponse, + AsyncSentimentResourceWithStreamingResponse, +) +from .web_search_results import ( + WebSearchResultsResource, + AsyncWebSearchResultsResource, + WebSearchResultsResourceWithRawResponse, + AsyncWebSearchResultsResourceWithRawResponse, + WebSearchResultsResourceWithStreamingResponse, + AsyncWebSearchResultsResourceWithStreamingResponse, +) +from .referrals import ( + ReferralsResource, + AsyncReferralsResource, + ReferralsResourceWithRawResponse, + AsyncReferralsResourceWithRawResponse, + ReferralsResourceWithStreamingResponse, + AsyncReferralsResourceWithStreamingResponse, +) +from .bots import ( + BotsResource, + AsyncBotsResource, + BotsResourceWithRawResponse, + AsyncBotsResourceWithRawResponse, + BotsResourceWithStreamingResponse, + AsyncBotsResourceWithStreamingResponse, +) +from .query_fanouts import ( + QueryFanoutsResource, + AsyncQueryFanoutsResource, + QueryFanoutsResourceWithRawResponse, + AsyncQueryFanoutsResourceWithRawResponse, + QueryFanoutsResourceWithStreamingResponse, + AsyncQueryFanoutsResourceWithStreamingResponse, +) +from .shopping import ( + ShoppingResource, + AsyncShoppingResource, + ShoppingResourceWithRawResponse, + AsyncShoppingResourceWithRawResponse, + ShoppingResourceWithStreamingResponse, + AsyncShoppingResourceWithStreamingResponse, +) +from .accuracy import ( + AccuracyResource, + AsyncAccuracyResource, + AccuracyResourceWithRawResponse, + AsyncAccuracyResourceWithRawResponse, + AccuracyResourceWithStreamingResponse, + AsyncAccuracyResourceWithStreamingResponse, +) + +__all__ = [ + "ReportsResource", + "AsyncReportsResource", + "ReportsResourceWithRawResponse", + "AsyncReportsResourceWithRawResponse", + "ReportsResourceWithStreamingResponse", + "AsyncReportsResourceWithStreamingResponse", + "CitationsResource", + "AsyncCitationsResource", + "CitationsResourceWithRawResponse", + "AsyncCitationsResourceWithRawResponse", + "CitationsResourceWithStreamingResponse", + "AsyncCitationsResourceWithStreamingResponse", + "VisibilityResource", + "AsyncVisibilityResource", + "VisibilityResourceWithRawResponse", + "AsyncVisibilityResourceWithRawResponse", + "VisibilityResourceWithStreamingResponse", + "AsyncVisibilityResourceWithStreamingResponse", + "SentimentResource", + "AsyncSentimentResource", + "SentimentResourceWithRawResponse", + "AsyncSentimentResourceWithRawResponse", + "SentimentResourceWithStreamingResponse", + "AsyncSentimentResourceWithStreamingResponse", + "WebSearchResultsResource", + "AsyncWebSearchResultsResource", + "WebSearchResultsResourceWithRawResponse", + "AsyncWebSearchResultsResourceWithRawResponse", + "WebSearchResultsResourceWithStreamingResponse", + "AsyncWebSearchResultsResourceWithStreamingResponse", + "ReferralsResource", + "AsyncReferralsResource", + "ReferralsResourceWithRawResponse", + "AsyncReferralsResourceWithRawResponse", + "ReferralsResourceWithStreamingResponse", + "AsyncReferralsResourceWithStreamingResponse", + "BotsResource", + "AsyncBotsResource", + "BotsResourceWithRawResponse", + "AsyncBotsResourceWithRawResponse", + "BotsResourceWithStreamingResponse", + "AsyncBotsResourceWithStreamingResponse", + "QueryFanoutsResource", + "AsyncQueryFanoutsResource", + "QueryFanoutsResourceWithRawResponse", + "AsyncQueryFanoutsResourceWithRawResponse", + "QueryFanoutsResourceWithStreamingResponse", + "AsyncQueryFanoutsResourceWithStreamingResponse", + "ShoppingResource", + "AsyncShoppingResource", + "ShoppingResourceWithRawResponse", + "AsyncShoppingResourceWithRawResponse", + "ShoppingResourceWithStreamingResponse", + "AsyncShoppingResourceWithStreamingResponse", + "AccuracyResource", + "AsyncAccuracyResource", + "AccuracyResourceWithRawResponse", + "AsyncAccuracyResourceWithRawResponse", + "AccuracyResourceWithStreamingResponse", + "AsyncAccuracyResourceWithStreamingResponse", +] diff --git a/src/resources/reports/accuracy.py b/src/resources/reports/accuracy.py new file mode 100644 index 00000000..b836411f --- /dev/null +++ b/src/resources/reports/accuracy.py @@ -0,0 +1,2459 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +import httpx + +from typing import Iterable, Optional +from typing_extensions import Literal +from ..._types import SequenceNotStr + +from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given +from ..._utils import path_template, maybe_transform, async_maybe_transform +from ..._compat import cached_property +from ..._resource import SyncAPIResource, AsyncAPIResource +from ..._response import ( + to_raw_response_wrapper, + to_streamed_response_wrapper, + async_to_raw_response_wrapper, + async_to_streamed_response_wrapper, +) +from ..._base_client import make_request_options +from ...types.reports.accuracy_overview_v1_reports_overview_post_response import AccuracyOverviewV1ReportsOverviewPostResponse, AccuracyTrendPoint, AccuracyScoreBreakdown, AccuracyThemeTrendSeries, AccuracyThemeTrendPoint, AccuracyTrendSeriesMeta +from ...types.reports import accuracy_overview_v1_reports_overview_post_params +from ...types.reports.accuracy_breakdown_v1_reports_breakdown_post_response import AccuracyBreakdownV1ReportsBreakdownPostResponse, AccuracyBreakdownRow +from ...types.reports import accuracy_breakdown_v1_reports_breakdown_post_params +from ...types.reports.accuracy_citation_analysis_v1_reports_citation_analysis_post_response import AccuracyCitationAnalysisV1ReportsCitationAnalysisPostResponse, AccuracyCitationClaim, AccuracyCitationEvidence +from ...types.reports import accuracy_citation_analysis_v1_reports_citation_analysis_post_params +from ...types.reports.accuracy_topic_ids_v1_reports_topic_ids_post_response import AccuracyTopicIdsV1ReportsTopicIdsPostResponse +from ...types.reports import accuracy_topic_ids_v1_reports_topic_ids_post_params +from ...types.reports.accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_response import AccuracyInaccurateThemesV1ReportsInaccurateThemesPostResponse, InaccurateThemeRow +from ...types.reports import accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_params +from ...types.reports.accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_response import AccuracyInaccurateClustersV1ReportsInaccurateClustersPostResponse, InaccurateClusterRow +from ...types.reports import accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_params +from ...types.reports.accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_response import AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostResponse, InaccuracyDriverRow +from ...types.reports import accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_params +from ...types.reports.accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_response import AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostResponse, TopInaccurateClaimRow +from ...types.reports import accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_params +from ...types.reports.accuracy_claim_breakdown_v1_reports_claim_breakdown_post_response import AccuracyClaimBreakdownV1ReportsClaimBreakdownPostResponse, ClaimBreakdownRow, ClaimPromptBreakdownRow +from ...types.reports import accuracy_claim_breakdown_v1_reports_claim_breakdown_post_params +from ...types.reports.accuracy_claim_citations_v1_reports_claim_citations_post_response import AccuracyClaimCitationsV1ReportsClaimCitationsPostResponse, ClaimCitationRow +from ...types.reports import accuracy_claim_citations_v1_reports_claim_citations_post_params +from ...types.reports.accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_response import AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostResponse, ClusterExampleRun +from ...types.reports import accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_params +from ...types.reports.accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_response import AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostResponse, ClusterVerificationPair +from ...types.reports import accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_params +from ...types.reports.accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_response import AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostResponse +from ...types.reports import accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_params + +__all__ = ["AccuracyResource", "AsyncAccuracyResource"] + + +class AccuracyResource(SyncAPIResource): + + @cached_property + def with_raw_response(self) -> AccuracyResourceWithRawResponse: + return AccuracyResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AccuracyResourceWithStreamingResponse: + return AccuracyResourceWithStreamingResponse(self) + + def overview_v1_reports_overview_post( + self, + *, + start_date: str, + end_date: str, + comparison_start_date: Optional[str] | Omit = omit, + comparison_end_date: Optional[str] | Omit = omit, + category_id: str, + topic_ids: Optional[Iterable[str]] | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + tag_ids: Optional[Iterable[str]] | Omit = omit, + tag_filter_type: Literal["all", "any"] | Omit = omit, + include_no_tag: bool | Omit = omit, + region_ids: Optional[Iterable[str]] | Omit = omit, + platform_ids: Optional[Iterable[str]] | Omit = omit, + persona_ids: Optional[Iterable[str]] | Omit = omit, + include_no_persona: bool | Omit = omit, + prompt_ids: Optional[Iterable[str]] | Omit = omit, + citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, + date_bucket: Optional[str] | Omit = omit, + group_by: Literal["period", "theme"] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AccuracyOverviewV1ReportsOverviewPostResponse: + """ + Accuracy Overview + + Args: + start_date: Body parameter. + end_date: Body parameter. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + category_id: Body parameter. + topic_ids: Body parameter. + exclude_topic_ids: Body parameter. + tag_ids: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + region_ids: Body parameter. + platform_ids: Body parameter. + persona_ids: Body parameter. + include_no_persona: Body parameter. + prompt_ids: Body parameter. + citation_categories: Body parameter. + date_bucket: Body parameter. + group_by: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AccuracyOverviewV1ReportsOverviewPostResponse: Successful Response + + Example: + ```python + accuracy = client.reports.accuracy.overview_v1_reports_overview_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + group_by="period", + ) + ``` + """ + return self._post( + "/v1/reports/accuracy/overview", + body=maybe_transform( + { + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "category_id": category_id, + "topic_ids": topic_ids, + "exclude_topic_ids": exclude_topic_ids, + "tag_ids": tag_ids, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "region_ids": region_ids, + "platform_ids": platform_ids, + "persona_ids": persona_ids, + "include_no_persona": include_no_persona, + "prompt_ids": prompt_ids, + "citation_categories": citation_categories, + "date_bucket": date_bucket, + "group_by": group_by, + }, + accuracy_overview_v1_reports_overview_post_params.AccuracyOverviewV1ReportsOverviewPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AccuracyOverviewV1ReportsOverviewPostResponse, + ) + + def breakdown_v1_reports_breakdown_post( + self, + *, + start_date: str, + end_date: str, + comparison_start_date: Optional[str] | Omit = omit, + comparison_end_date: Optional[str] | Omit = omit, + category_id: str, + topic_ids: Optional[Iterable[str]] | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + tag_ids: Optional[Iterable[str]] | Omit = omit, + tag_filter_type: Literal["all", "any"] | Omit = omit, + include_no_tag: bool | Omit = omit, + region_ids: Optional[Iterable[str]] | Omit = omit, + platform_ids: Optional[Iterable[str]] | Omit = omit, + persona_ids: Optional[Iterable[str]] | Omit = omit, + include_no_persona: bool | Omit = omit, + prompt_ids: Optional[Iterable[str]] | Omit = omit, + citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, + breakdown_by: Literal["citation", "platform", "topic", "prompt", "tag", "region", "persona"] | Omit = omit, + limit: int | Omit = omit, + offset: int | Omit = omit, + search_query: Optional[str] | Omit = omit, + sort_by: Literal["citationShare", "accuracy"] | Omit = omit, + sort_order: Literal["asc", "desc"] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AccuracyBreakdownV1ReportsBreakdownPostResponse: + """ + Accuracy Breakdown + + Args: + start_date: Body parameter. + end_date: Body parameter. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + category_id: Body parameter. + topic_ids: Body parameter. + exclude_topic_ids: Body parameter. + tag_ids: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + region_ids: Body parameter. + platform_ids: Body parameter. + persona_ids: Body parameter. + include_no_persona: Body parameter. + prompt_ids: Body parameter. + citation_categories: Body parameter. + breakdown_by: Body parameter. + limit: Body parameter. + offset: Body parameter. + search_query: Body parameter. + sort_by: Body parameter. + sort_order: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AccuracyBreakdownV1ReportsBreakdownPostResponse: Successful Response + + Example: + ```python + accuracy = client.reports.accuracy.breakdown_v1_reports_breakdown_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + breakdown_by="citation", + limit=10, + offset=0, + sort_by="citationShare", + sort_order="desc", + ) + ``` + """ + return self._post( + "/v1/reports/accuracy/breakdown", + body=maybe_transform( + { + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "category_id": category_id, + "topic_ids": topic_ids, + "exclude_topic_ids": exclude_topic_ids, + "tag_ids": tag_ids, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "region_ids": region_ids, + "platform_ids": platform_ids, + "persona_ids": persona_ids, + "include_no_persona": include_no_persona, + "prompt_ids": prompt_ids, + "citation_categories": citation_categories, + "breakdown_by": breakdown_by, + "limit": limit, + "offset": offset, + "search_query": search_query, + "sort_by": sort_by, + "sort_order": sort_order, + }, + accuracy_breakdown_v1_reports_breakdown_post_params.AccuracyBreakdownV1ReportsBreakdownPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AccuracyBreakdownV1ReportsBreakdownPostResponse, + ) + + def citation_analysis_v1_reports_citation_analysis_post( + self, + *, + category_id: str, + clean_href: str, + start_date: str, + end_date: str, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AccuracyCitationAnalysisV1ReportsCitationAnalysisPostResponse: + """ + Accuracy Citation Analysis + + Args: + category_id: Body parameter. + clean_href: Body parameter. + start_date: Body parameter. + end_date: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AccuracyCitationAnalysisV1ReportsCitationAnalysisPostResponse: Successful Response + + Example: + ```python + accuracy = client.reports.accuracy.citation_analysis_v1_reports_citation_analysis_post( + category_id="", + clean_href="", + start_date="", + end_date="", + ) + ``` + """ + return self._post( + "/v1/reports/accuracy/citation-analysis", + body=maybe_transform( + { + "category_id": category_id, + "clean_href": clean_href, + "start_date": start_date, + "end_date": end_date, + }, + accuracy_citation_analysis_v1_reports_citation_analysis_post_params.AccuracyCitationAnalysisV1ReportsCitationAnalysisPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AccuracyCitationAnalysisV1ReportsCitationAnalysisPostResponse, + ) + + def topic_ids_v1_reports_topic_ids_post( + self, + *, + category_id: str, + start_date: str, + end_date: str, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AccuracyTopicIdsV1ReportsTopicIdsPostResponse: + """ + Accuracy Topic Ids + + Args: + category_id: Body parameter. + start_date: Body parameter. + end_date: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AccuracyTopicIdsV1ReportsTopicIdsPostResponse: Successful Response + + Example: + ```python + accuracy = client.reports.accuracy.topic_ids_v1_reports_topic_ids_post( + category_id="", + start_date="", + end_date="", + ) + ``` + """ + return self._post( + "/v1/reports/accuracy/topic-ids", + body=maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + }, + accuracy_topic_ids_v1_reports_topic_ids_post_params.AccuracyTopicIdsV1ReportsTopicIdsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AccuracyTopicIdsV1ReportsTopicIdsPostResponse, + ) + + def inaccurate_themes_v1_reports_inaccurate_themes_post( + self, + *, + start_date: str, + end_date: str, + comparison_start_date: Optional[str] | Omit = omit, + comparison_end_date: Optional[str] | Omit = omit, + category_id: str, + topic_ids: Optional[Iterable[str]] | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + tag_ids: Optional[Iterable[str]] | Omit = omit, + tag_filter_type: Literal["all", "any"] | Omit = omit, + include_no_tag: bool | Omit = omit, + region_ids: Optional[Iterable[str]] | Omit = omit, + platform_ids: Optional[Iterable[str]] | Omit = omit, + persona_ids: Optional[Iterable[str]] | Omit = omit, + include_no_persona: bool | Omit = omit, + prompt_ids: Optional[Iterable[str]] | Omit = omit, + citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, + limit: int | Omit = omit, + offset: int | Omit = omit, + sort_by: Literal["response_share"] | Omit = omit, + sort_order: Literal["asc", "desc"] | Omit = omit, + search_query: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AccuracyInaccurateThemesV1ReportsInaccurateThemesPostResponse: + """ + Accuracy Inaccurate Themes + + Args: + start_date: Body parameter. + end_date: Body parameter. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + category_id: Body parameter. + topic_ids: Body parameter. + exclude_topic_ids: Body parameter. + tag_ids: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + region_ids: Body parameter. + platform_ids: Body parameter. + persona_ids: Body parameter. + include_no_persona: Body parameter. + prompt_ids: Body parameter. + citation_categories: Body parameter. + limit: Body parameter. + offset: Body parameter. + sort_by: Body parameter. + sort_order: Body parameter. + search_query: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AccuracyInaccurateThemesV1ReportsInaccurateThemesPostResponse: Successful Response + + Example: + ```python + accuracy = client.reports.accuracy.inaccurate_themes_v1_reports_inaccurate_themes_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + limit=10, + offset=0, + sort_by="response_share", + sort_order="desc", + ) + ``` + """ + return self._post( + "/v1/reports/accuracy/inaccurate-themes", + body=maybe_transform( + { + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "category_id": category_id, + "topic_ids": topic_ids, + "exclude_topic_ids": exclude_topic_ids, + "tag_ids": tag_ids, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "region_ids": region_ids, + "platform_ids": platform_ids, + "persona_ids": persona_ids, + "include_no_persona": include_no_persona, + "prompt_ids": prompt_ids, + "citation_categories": citation_categories, + "limit": limit, + "offset": offset, + "sort_by": sort_by, + "sort_order": sort_order, + "search_query": search_query, + }, + accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_params.AccuracyInaccurateThemesV1ReportsInaccurateThemesPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AccuracyInaccurateThemesV1ReportsInaccurateThemesPostResponse, + ) + + def inaccurate_clusters_v1_reports_inaccurate_clusters_post( + self, + *, + start_date: str, + end_date: str, + comparison_start_date: Optional[str] | Omit = omit, + comparison_end_date: Optional[str] | Omit = omit, + category_id: str, + topic_ids: Optional[Iterable[str]] | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + tag_ids: Optional[Iterable[str]] | Omit = omit, + tag_filter_type: Literal["all", "any"] | Omit = omit, + include_no_tag: bool | Omit = omit, + region_ids: Optional[Iterable[str]] | Omit = omit, + platform_ids: Optional[Iterable[str]] | Omit = omit, + persona_ids: Optional[Iterable[str]] | Omit = omit, + include_no_persona: bool | Omit = omit, + prompt_ids: Optional[Iterable[str]] | Omit = omit, + citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, + theme_id: str, + limit: int | Omit = omit, + offset: int | Omit = omit, + search_query: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AccuracyInaccurateClustersV1ReportsInaccurateClustersPostResponse: + """ + Accuracy Inaccurate Clusters + + Args: + start_date: Body parameter. + end_date: Body parameter. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + category_id: Body parameter. + topic_ids: Body parameter. + exclude_topic_ids: Body parameter. + tag_ids: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + region_ids: Body parameter. + platform_ids: Body parameter. + persona_ids: Body parameter. + include_no_persona: Body parameter. + prompt_ids: Body parameter. + citation_categories: Body parameter. + theme_id: Body parameter. + limit: Body parameter. + offset: Body parameter. + search_query: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AccuracyInaccurateClustersV1ReportsInaccurateClustersPostResponse: Successful Response + + Example: + ```python + accuracy = client.reports.accuracy.inaccurate_clusters_v1_reports_inaccurate_clusters_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + theme_id="", + limit=5000, + offset=0, + ) + ``` + """ + return self._post( + "/v1/reports/accuracy/inaccurate-clusters", + body=maybe_transform( + { + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "category_id": category_id, + "topic_ids": topic_ids, + "exclude_topic_ids": exclude_topic_ids, + "tag_ids": tag_ids, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "region_ids": region_ids, + "platform_ids": platform_ids, + "persona_ids": persona_ids, + "include_no_persona": include_no_persona, + "prompt_ids": prompt_ids, + "citation_categories": citation_categories, + "theme_id": theme_id, + "limit": limit, + "offset": offset, + "search_query": search_query, + }, + accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_params.AccuracyInaccurateClustersV1ReportsInaccurateClustersPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AccuracyInaccurateClustersV1ReportsInaccurateClustersPostResponse, + ) + + def inaccuracy_drivers_v1_reports_inaccuracy_drivers_post( + self, + *, + start_date: str, + end_date: str, + comparison_start_date: Optional[str] | Omit = omit, + comparison_end_date: Optional[str] | Omit = omit, + category_id: str, + topic_ids: Optional[Iterable[str]] | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + tag_ids: Optional[Iterable[str]] | Omit = omit, + tag_filter_type: Literal["all", "any"] | Omit = omit, + include_no_tag: bool | Omit = omit, + region_ids: Optional[Iterable[str]] | Omit = omit, + platform_ids: Optional[Iterable[str]] | Omit = omit, + persona_ids: Optional[Iterable[str]] | Omit = omit, + include_no_persona: bool | Omit = omit, + prompt_ids: Optional[Iterable[str]] | Omit = omit, + citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, + limit: int | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostResponse: + """ + Accuracy Inaccuracy Drivers + + Args: + start_date: Body parameter. + end_date: Body parameter. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + category_id: Body parameter. + topic_ids: Body parameter. + exclude_topic_ids: Body parameter. + tag_ids: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + region_ids: Body parameter. + platform_ids: Body parameter. + persona_ids: Body parameter. + include_no_persona: Body parameter. + prompt_ids: Body parameter. + citation_categories: Body parameter. + limit: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostResponse: Successful Response + + Example: + ```python + accuracy = client.reports.accuracy.inaccuracy_drivers_v1_reports_inaccuracy_drivers_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + limit=5, + ) + ``` + """ + return self._post( + "/v1/reports/accuracy/inaccuracy-drivers", + body=maybe_transform( + { + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "category_id": category_id, + "topic_ids": topic_ids, + "exclude_topic_ids": exclude_topic_ids, + "tag_ids": tag_ids, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "region_ids": region_ids, + "platform_ids": platform_ids, + "persona_ids": persona_ids, + "include_no_persona": include_no_persona, + "prompt_ids": prompt_ids, + "citation_categories": citation_categories, + "limit": limit, + }, + accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_params.AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostResponse, + ) + + def top_inaccurate_claims_v1_reports_top_inaccurate_claims_post( + self, + *, + start_date: str, + end_date: str, + comparison_start_date: Optional[str] | Omit = omit, + comparison_end_date: Optional[str] | Omit = omit, + category_id: str, + topic_ids: Optional[Iterable[str]] | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + tag_ids: Optional[Iterable[str]] | Omit = omit, + tag_filter_type: Literal["all", "any"] | Omit = omit, + include_no_tag: bool | Omit = omit, + region_ids: Optional[Iterable[str]] | Omit = omit, + platform_ids: Optional[Iterable[str]] | Omit = omit, + persona_ids: Optional[Iterable[str]] | Omit = omit, + include_no_persona: bool | Omit = omit, + prompt_ids: Optional[Iterable[str]] | Omit = omit, + citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, + limit: int | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostResponse: + """ + Accuracy Top Inaccurate Claims + + Args: + start_date: Body parameter. + end_date: Body parameter. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + category_id: Body parameter. + topic_ids: Body parameter. + exclude_topic_ids: Body parameter. + tag_ids: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + region_ids: Body parameter. + platform_ids: Body parameter. + persona_ids: Body parameter. + include_no_persona: Body parameter. + prompt_ids: Body parameter. + citation_categories: Body parameter. + limit: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostResponse: Successful Response + + Example: + ```python + accuracy = client.reports.accuracy.top_inaccurate_claims_v1_reports_top_inaccurate_claims_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + limit=5, + ) + ``` + """ + return self._post( + "/v1/reports/accuracy/top-inaccurate-claims", + body=maybe_transform( + { + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "category_id": category_id, + "topic_ids": topic_ids, + "exclude_topic_ids": exclude_topic_ids, + "tag_ids": tag_ids, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "region_ids": region_ids, + "platform_ids": platform_ids, + "persona_ids": persona_ids, + "include_no_persona": include_no_persona, + "prompt_ids": prompt_ids, + "citation_categories": citation_categories, + "limit": limit, + }, + accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_params.AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostResponse, + ) + + def claim_breakdown_v1_reports_claim_breakdown_post( + self, + *, + start_date: str, + end_date: str, + comparison_start_date: Optional[str] | Omit = omit, + comparison_end_date: Optional[str] | Omit = omit, + category_id: str, + topic_ids: Optional[Iterable[str]] | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + tag_ids: Optional[Iterable[str]] | Omit = omit, + tag_filter_type: Literal["all", "any"] | Omit = omit, + include_no_tag: bool | Omit = omit, + region_ids: Optional[Iterable[str]] | Omit = omit, + platform_ids: Optional[Iterable[str]] | Omit = omit, + persona_ids: Optional[Iterable[str]] | Omit = omit, + include_no_persona: bool | Omit = omit, + prompt_ids: Optional[Iterable[str]] | Omit = omit, + citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, + cluster_id: str, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AccuracyClaimBreakdownV1ReportsClaimBreakdownPostResponse: + """ + Accuracy Claim Breakdown + + Args: + start_date: Body parameter. + end_date: Body parameter. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + category_id: Body parameter. + topic_ids: Body parameter. + exclude_topic_ids: Body parameter. + tag_ids: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + region_ids: Body parameter. + platform_ids: Body parameter. + persona_ids: Body parameter. + include_no_persona: Body parameter. + prompt_ids: Body parameter. + citation_categories: Body parameter. + cluster_id: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AccuracyClaimBreakdownV1ReportsClaimBreakdownPostResponse: Successful Response + + Example: + ```python + accuracy = client.reports.accuracy.claim_breakdown_v1_reports_claim_breakdown_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + cluster_id="", + ) + ``` + """ + return self._post( + "/v1/reports/accuracy/claim-breakdown", + body=maybe_transform( + { + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "category_id": category_id, + "topic_ids": topic_ids, + "exclude_topic_ids": exclude_topic_ids, + "tag_ids": tag_ids, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "region_ids": region_ids, + "platform_ids": platform_ids, + "persona_ids": persona_ids, + "include_no_persona": include_no_persona, + "prompt_ids": prompt_ids, + "citation_categories": citation_categories, + "cluster_id": cluster_id, + }, + accuracy_claim_breakdown_v1_reports_claim_breakdown_post_params.AccuracyClaimBreakdownV1ReportsClaimBreakdownPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AccuracyClaimBreakdownV1ReportsClaimBreakdownPostResponse, + ) + + def claim_citations_v1_reports_claim_citations_post( + self, + *, + start_date: str, + end_date: str, + comparison_start_date: Optional[str] | Omit = omit, + comparison_end_date: Optional[str] | Omit = omit, + category_id: str, + topic_ids: Optional[Iterable[str]] | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + tag_ids: Optional[Iterable[str]] | Omit = omit, + tag_filter_type: Literal["all", "any"] | Omit = omit, + include_no_tag: bool | Omit = omit, + region_ids: Optional[Iterable[str]] | Omit = omit, + platform_ids: Optional[Iterable[str]] | Omit = omit, + persona_ids: Optional[Iterable[str]] | Omit = omit, + include_no_persona: bool | Omit = omit, + prompt_ids: Optional[Iterable[str]] | Omit = omit, + citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, + cluster_id: str, + limit: int | Omit = omit, + offset: int | Omit = omit, + search_query: Optional[str] | Omit = omit, + sort_order: Literal["asc", "desc"] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AccuracyClaimCitationsV1ReportsClaimCitationsPostResponse: + """ + Accuracy Claim Citations + + Args: + start_date: Body parameter. + end_date: Body parameter. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + category_id: Body parameter. + topic_ids: Body parameter. + exclude_topic_ids: Body parameter. + tag_ids: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + region_ids: Body parameter. + platform_ids: Body parameter. + persona_ids: Body parameter. + include_no_persona: Body parameter. + prompt_ids: Body parameter. + citation_categories: Body parameter. + cluster_id: Body parameter. + limit: Body parameter. + offset: Body parameter. + search_query: Body parameter. + sort_order: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AccuracyClaimCitationsV1ReportsClaimCitationsPostResponse: Successful Response + + Example: + ```python + accuracy = client.reports.accuracy.claim_citations_v1_reports_claim_citations_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + cluster_id="", + limit=10, + offset=0, + sort_order="desc", + ) + ``` + """ + return self._post( + "/v1/reports/accuracy/claim-citations", + body=maybe_transform( + { + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "category_id": category_id, + "topic_ids": topic_ids, + "exclude_topic_ids": exclude_topic_ids, + "tag_ids": tag_ids, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "region_ids": region_ids, + "platform_ids": platform_ids, + "persona_ids": persona_ids, + "include_no_persona": include_no_persona, + "prompt_ids": prompt_ids, + "citation_categories": citation_categories, + "cluster_id": cluster_id, + "limit": limit, + "offset": offset, + "search_query": search_query, + "sort_order": sort_order, + }, + accuracy_claim_citations_v1_reports_claim_citations_post_params.AccuracyClaimCitationsV1ReportsClaimCitationsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AccuracyClaimCitationsV1ReportsClaimCitationsPostResponse, + ) + + def cluster_example_runs_v1_reports_cluster_example_runs_post( + self, + *, + category_id: str, + cluster_id: str, + start_date: str, + end_date: str, + limit: int | Omit = omit, + offset: int | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostResponse: + """ + Accuracy Cluster Example Runs + + Args: + category_id: Body parameter. + cluster_id: Body parameter. + start_date: Body parameter. + end_date: Body parameter. + limit: Body parameter. + offset: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostResponse: Successful Response + + Example: + ```python + accuracy = client.reports.accuracy.cluster_example_runs_v1_reports_cluster_example_runs_post( + category_id="", + cluster_id="", + start_date="", + end_date="", + limit=20, + offset=0, + ) + ``` + """ + return self._post( + "/v1/reports/accuracy/cluster-example-runs", + body=maybe_transform( + { + "category_id": category_id, + "cluster_id": cluster_id, + "start_date": start_date, + "end_date": end_date, + "limit": limit, + "offset": offset, + }, + accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_params.AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostResponse, + ) + + def cluster_verification_pairs_v1_reports_cluster_verification_pairs_post( + self, + *, + category_id: str, + cluster_id: str, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostResponse: + """ + Accuracy Cluster Verification Pairs + + Args: + category_id: Body parameter. + cluster_id: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostResponse: Successful Response + + Example: + ```python + accuracy = client.reports.accuracy.cluster_verification_pairs_v1_reports_cluster_verification_pairs_post( + category_id="", + cluster_id="", + ) + ``` + """ + return self._post( + "/v1/reports/accuracy/cluster-verification-pairs", + body=maybe_transform( + { + "category_id": category_id, + "cluster_id": cluster_id, + }, + accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_params.AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostResponse, + ) + + def factcheck_setup_status_v1_reports_factcheck_setup_status_post( + self, + *, + category_id: str, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostResponse: + """ + Accuracy Factcheck Setup Status + + Args: + category_id: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostResponse: Successful Response + + Example: + ```python + accuracy = client.reports.accuracy.factcheck_setup_status_v1_reports_factcheck_setup_status_post( + category_id="", + ) + ``` + """ + return self._post( + "/v1/reports/accuracy/factcheck-setup-status", + body=maybe_transform( + {"category_id": category_id}, + accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_params.AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostResponse, + ) + + +class AsyncAccuracyResource(AsyncAPIResource): + + @cached_property + def with_raw_response(self) -> AsyncAccuracyResourceWithRawResponse: + return AsyncAccuracyResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncAccuracyResourceWithStreamingResponse: + return AsyncAccuracyResourceWithStreamingResponse(self) + + async def overview_v1_reports_overview_post( + self, + *, + start_date: str, + end_date: str, + comparison_start_date: Optional[str] | Omit = omit, + comparison_end_date: Optional[str] | Omit = omit, + category_id: str, + topic_ids: Optional[Iterable[str]] | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + tag_ids: Optional[Iterable[str]] | Omit = omit, + tag_filter_type: Literal["all", "any"] | Omit = omit, + include_no_tag: bool | Omit = omit, + region_ids: Optional[Iterable[str]] | Omit = omit, + platform_ids: Optional[Iterable[str]] | Omit = omit, + persona_ids: Optional[Iterable[str]] | Omit = omit, + include_no_persona: bool | Omit = omit, + prompt_ids: Optional[Iterable[str]] | Omit = omit, + citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, + date_bucket: Optional[str] | Omit = omit, + group_by: Literal["period", "theme"] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AccuracyOverviewV1ReportsOverviewPostResponse: + """ + Accuracy Overview + + Args: + start_date: Body parameter. + end_date: Body parameter. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + category_id: Body parameter. + topic_ids: Body parameter. + exclude_topic_ids: Body parameter. + tag_ids: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + region_ids: Body parameter. + platform_ids: Body parameter. + persona_ids: Body parameter. + include_no_persona: Body parameter. + prompt_ids: Body parameter. + citation_categories: Body parameter. + date_bucket: Body parameter. + group_by: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AccuracyOverviewV1ReportsOverviewPostResponse: Successful Response + + Example: + ```python + accuracy = await client.reports.accuracy.overview_v1_reports_overview_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + group_by="period", + ) + ``` + """ + return await self._post( + "/v1/reports/accuracy/overview", + body=await async_maybe_transform( + { + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "category_id": category_id, + "topic_ids": topic_ids, + "exclude_topic_ids": exclude_topic_ids, + "tag_ids": tag_ids, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "region_ids": region_ids, + "platform_ids": platform_ids, + "persona_ids": persona_ids, + "include_no_persona": include_no_persona, + "prompt_ids": prompt_ids, + "citation_categories": citation_categories, + "date_bucket": date_bucket, + "group_by": group_by, + }, + accuracy_overview_v1_reports_overview_post_params.AccuracyOverviewV1ReportsOverviewPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AccuracyOverviewV1ReportsOverviewPostResponse, + ) + + async def breakdown_v1_reports_breakdown_post( + self, + *, + start_date: str, + end_date: str, + comparison_start_date: Optional[str] | Omit = omit, + comparison_end_date: Optional[str] | Omit = omit, + category_id: str, + topic_ids: Optional[Iterable[str]] | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + tag_ids: Optional[Iterable[str]] | Omit = omit, + tag_filter_type: Literal["all", "any"] | Omit = omit, + include_no_tag: bool | Omit = omit, + region_ids: Optional[Iterable[str]] | Omit = omit, + platform_ids: Optional[Iterable[str]] | Omit = omit, + persona_ids: Optional[Iterable[str]] | Omit = omit, + include_no_persona: bool | Omit = omit, + prompt_ids: Optional[Iterable[str]] | Omit = omit, + citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, + breakdown_by: Literal["citation", "platform", "topic", "prompt", "tag", "region", "persona"] | Omit = omit, + limit: int | Omit = omit, + offset: int | Omit = omit, + search_query: Optional[str] | Omit = omit, + sort_by: Literal["citationShare", "accuracy"] | Omit = omit, + sort_order: Literal["asc", "desc"] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AccuracyBreakdownV1ReportsBreakdownPostResponse: + """ + Accuracy Breakdown + + Args: + start_date: Body parameter. + end_date: Body parameter. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + category_id: Body parameter. + topic_ids: Body parameter. + exclude_topic_ids: Body parameter. + tag_ids: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + region_ids: Body parameter. + platform_ids: Body parameter. + persona_ids: Body parameter. + include_no_persona: Body parameter. + prompt_ids: Body parameter. + citation_categories: Body parameter. + breakdown_by: Body parameter. + limit: Body parameter. + offset: Body parameter. + search_query: Body parameter. + sort_by: Body parameter. + sort_order: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AccuracyBreakdownV1ReportsBreakdownPostResponse: Successful Response + + Example: + ```python + accuracy = await client.reports.accuracy.breakdown_v1_reports_breakdown_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + breakdown_by="citation", + limit=10, + offset=0, + sort_by="citationShare", + sort_order="desc", + ) + ``` + """ + return await self._post( + "/v1/reports/accuracy/breakdown", + body=await async_maybe_transform( + { + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "category_id": category_id, + "topic_ids": topic_ids, + "exclude_topic_ids": exclude_topic_ids, + "tag_ids": tag_ids, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "region_ids": region_ids, + "platform_ids": platform_ids, + "persona_ids": persona_ids, + "include_no_persona": include_no_persona, + "prompt_ids": prompt_ids, + "citation_categories": citation_categories, + "breakdown_by": breakdown_by, + "limit": limit, + "offset": offset, + "search_query": search_query, + "sort_by": sort_by, + "sort_order": sort_order, + }, + accuracy_breakdown_v1_reports_breakdown_post_params.AccuracyBreakdownV1ReportsBreakdownPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AccuracyBreakdownV1ReportsBreakdownPostResponse, + ) + + async def citation_analysis_v1_reports_citation_analysis_post( + self, + *, + category_id: str, + clean_href: str, + start_date: str, + end_date: str, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AccuracyCitationAnalysisV1ReportsCitationAnalysisPostResponse: + """ + Accuracy Citation Analysis + + Args: + category_id: Body parameter. + clean_href: Body parameter. + start_date: Body parameter. + end_date: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AccuracyCitationAnalysisV1ReportsCitationAnalysisPostResponse: Successful Response + + Example: + ```python + accuracy = await client.reports.accuracy.citation_analysis_v1_reports_citation_analysis_post( + category_id="", + clean_href="", + start_date="", + end_date="", + ) + ``` + """ + return await self._post( + "/v1/reports/accuracy/citation-analysis", + body=await async_maybe_transform( + { + "category_id": category_id, + "clean_href": clean_href, + "start_date": start_date, + "end_date": end_date, + }, + accuracy_citation_analysis_v1_reports_citation_analysis_post_params.AccuracyCitationAnalysisV1ReportsCitationAnalysisPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AccuracyCitationAnalysisV1ReportsCitationAnalysisPostResponse, + ) + + async def topic_ids_v1_reports_topic_ids_post( + self, + *, + category_id: str, + start_date: str, + end_date: str, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AccuracyTopicIdsV1ReportsTopicIdsPostResponse: + """ + Accuracy Topic Ids + + Args: + category_id: Body parameter. + start_date: Body parameter. + end_date: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AccuracyTopicIdsV1ReportsTopicIdsPostResponse: Successful Response + + Example: + ```python + accuracy = await client.reports.accuracy.topic_ids_v1_reports_topic_ids_post( + category_id="", + start_date="", + end_date="", + ) + ``` + """ + return await self._post( + "/v1/reports/accuracy/topic-ids", + body=await async_maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + }, + accuracy_topic_ids_v1_reports_topic_ids_post_params.AccuracyTopicIdsV1ReportsTopicIdsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AccuracyTopicIdsV1ReportsTopicIdsPostResponse, + ) + + async def inaccurate_themes_v1_reports_inaccurate_themes_post( + self, + *, + start_date: str, + end_date: str, + comparison_start_date: Optional[str] | Omit = omit, + comparison_end_date: Optional[str] | Omit = omit, + category_id: str, + topic_ids: Optional[Iterable[str]] | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + tag_ids: Optional[Iterable[str]] | Omit = omit, + tag_filter_type: Literal["all", "any"] | Omit = omit, + include_no_tag: bool | Omit = omit, + region_ids: Optional[Iterable[str]] | Omit = omit, + platform_ids: Optional[Iterable[str]] | Omit = omit, + persona_ids: Optional[Iterable[str]] | Omit = omit, + include_no_persona: bool | Omit = omit, + prompt_ids: Optional[Iterable[str]] | Omit = omit, + citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, + limit: int | Omit = omit, + offset: int | Omit = omit, + sort_by: Literal["response_share"] | Omit = omit, + sort_order: Literal["asc", "desc"] | Omit = omit, + search_query: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AccuracyInaccurateThemesV1ReportsInaccurateThemesPostResponse: + """ + Accuracy Inaccurate Themes + + Args: + start_date: Body parameter. + end_date: Body parameter. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + category_id: Body parameter. + topic_ids: Body parameter. + exclude_topic_ids: Body parameter. + tag_ids: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + region_ids: Body parameter. + platform_ids: Body parameter. + persona_ids: Body parameter. + include_no_persona: Body parameter. + prompt_ids: Body parameter. + citation_categories: Body parameter. + limit: Body parameter. + offset: Body parameter. + sort_by: Body parameter. + sort_order: Body parameter. + search_query: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AccuracyInaccurateThemesV1ReportsInaccurateThemesPostResponse: Successful Response + + Example: + ```python + accuracy = await client.reports.accuracy.inaccurate_themes_v1_reports_inaccurate_themes_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + limit=10, + offset=0, + sort_by="response_share", + sort_order="desc", + ) + ``` + """ + return await self._post( + "/v1/reports/accuracy/inaccurate-themes", + body=await async_maybe_transform( + { + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "category_id": category_id, + "topic_ids": topic_ids, + "exclude_topic_ids": exclude_topic_ids, + "tag_ids": tag_ids, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "region_ids": region_ids, + "platform_ids": platform_ids, + "persona_ids": persona_ids, + "include_no_persona": include_no_persona, + "prompt_ids": prompt_ids, + "citation_categories": citation_categories, + "limit": limit, + "offset": offset, + "sort_by": sort_by, + "sort_order": sort_order, + "search_query": search_query, + }, + accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_params.AccuracyInaccurateThemesV1ReportsInaccurateThemesPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AccuracyInaccurateThemesV1ReportsInaccurateThemesPostResponse, + ) + + async def inaccurate_clusters_v1_reports_inaccurate_clusters_post( + self, + *, + start_date: str, + end_date: str, + comparison_start_date: Optional[str] | Omit = omit, + comparison_end_date: Optional[str] | Omit = omit, + category_id: str, + topic_ids: Optional[Iterable[str]] | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + tag_ids: Optional[Iterable[str]] | Omit = omit, + tag_filter_type: Literal["all", "any"] | Omit = omit, + include_no_tag: bool | Omit = omit, + region_ids: Optional[Iterable[str]] | Omit = omit, + platform_ids: Optional[Iterable[str]] | Omit = omit, + persona_ids: Optional[Iterable[str]] | Omit = omit, + include_no_persona: bool | Omit = omit, + prompt_ids: Optional[Iterable[str]] | Omit = omit, + citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, + theme_id: str, + limit: int | Omit = omit, + offset: int | Omit = omit, + search_query: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AccuracyInaccurateClustersV1ReportsInaccurateClustersPostResponse: + """ + Accuracy Inaccurate Clusters + + Args: + start_date: Body parameter. + end_date: Body parameter. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + category_id: Body parameter. + topic_ids: Body parameter. + exclude_topic_ids: Body parameter. + tag_ids: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + region_ids: Body parameter. + platform_ids: Body parameter. + persona_ids: Body parameter. + include_no_persona: Body parameter. + prompt_ids: Body parameter. + citation_categories: Body parameter. + theme_id: Body parameter. + limit: Body parameter. + offset: Body parameter. + search_query: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AccuracyInaccurateClustersV1ReportsInaccurateClustersPostResponse: Successful Response + + Example: + ```python + accuracy = await client.reports.accuracy.inaccurate_clusters_v1_reports_inaccurate_clusters_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + theme_id="", + limit=5000, + offset=0, + ) + ``` + """ + return await self._post( + "/v1/reports/accuracy/inaccurate-clusters", + body=await async_maybe_transform( + { + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "category_id": category_id, + "topic_ids": topic_ids, + "exclude_topic_ids": exclude_topic_ids, + "tag_ids": tag_ids, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "region_ids": region_ids, + "platform_ids": platform_ids, + "persona_ids": persona_ids, + "include_no_persona": include_no_persona, + "prompt_ids": prompt_ids, + "citation_categories": citation_categories, + "theme_id": theme_id, + "limit": limit, + "offset": offset, + "search_query": search_query, + }, + accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_params.AccuracyInaccurateClustersV1ReportsInaccurateClustersPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AccuracyInaccurateClustersV1ReportsInaccurateClustersPostResponse, + ) + + async def inaccuracy_drivers_v1_reports_inaccuracy_drivers_post( + self, + *, + start_date: str, + end_date: str, + comparison_start_date: Optional[str] | Omit = omit, + comparison_end_date: Optional[str] | Omit = omit, + category_id: str, + topic_ids: Optional[Iterable[str]] | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + tag_ids: Optional[Iterable[str]] | Omit = omit, + tag_filter_type: Literal["all", "any"] | Omit = omit, + include_no_tag: bool | Omit = omit, + region_ids: Optional[Iterable[str]] | Omit = omit, + platform_ids: Optional[Iterable[str]] | Omit = omit, + persona_ids: Optional[Iterable[str]] | Omit = omit, + include_no_persona: bool | Omit = omit, + prompt_ids: Optional[Iterable[str]] | Omit = omit, + citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, + limit: int | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostResponse: + """ + Accuracy Inaccuracy Drivers + + Args: + start_date: Body parameter. + end_date: Body parameter. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + category_id: Body parameter. + topic_ids: Body parameter. + exclude_topic_ids: Body parameter. + tag_ids: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + region_ids: Body parameter. + platform_ids: Body parameter. + persona_ids: Body parameter. + include_no_persona: Body parameter. + prompt_ids: Body parameter. + citation_categories: Body parameter. + limit: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostResponse: Successful Response + + Example: + ```python + accuracy = await client.reports.accuracy.inaccuracy_drivers_v1_reports_inaccuracy_drivers_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + limit=5, + ) + ``` + """ + return await self._post( + "/v1/reports/accuracy/inaccuracy-drivers", + body=await async_maybe_transform( + { + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "category_id": category_id, + "topic_ids": topic_ids, + "exclude_topic_ids": exclude_topic_ids, + "tag_ids": tag_ids, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "region_ids": region_ids, + "platform_ids": platform_ids, + "persona_ids": persona_ids, + "include_no_persona": include_no_persona, + "prompt_ids": prompt_ids, + "citation_categories": citation_categories, + "limit": limit, + }, + accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_params.AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostResponse, + ) + + async def top_inaccurate_claims_v1_reports_top_inaccurate_claims_post( + self, + *, + start_date: str, + end_date: str, + comparison_start_date: Optional[str] | Omit = omit, + comparison_end_date: Optional[str] | Omit = omit, + category_id: str, + topic_ids: Optional[Iterable[str]] | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + tag_ids: Optional[Iterable[str]] | Omit = omit, + tag_filter_type: Literal["all", "any"] | Omit = omit, + include_no_tag: bool | Omit = omit, + region_ids: Optional[Iterable[str]] | Omit = omit, + platform_ids: Optional[Iterable[str]] | Omit = omit, + persona_ids: Optional[Iterable[str]] | Omit = omit, + include_no_persona: bool | Omit = omit, + prompt_ids: Optional[Iterable[str]] | Omit = omit, + citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, + limit: int | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostResponse: + """ + Accuracy Top Inaccurate Claims + + Args: + start_date: Body parameter. + end_date: Body parameter. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + category_id: Body parameter. + topic_ids: Body parameter. + exclude_topic_ids: Body parameter. + tag_ids: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + region_ids: Body parameter. + platform_ids: Body parameter. + persona_ids: Body parameter. + include_no_persona: Body parameter. + prompt_ids: Body parameter. + citation_categories: Body parameter. + limit: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostResponse: Successful Response + + Example: + ```python + accuracy = await client.reports.accuracy.top_inaccurate_claims_v1_reports_top_inaccurate_claims_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + limit=5, + ) + ``` + """ + return await self._post( + "/v1/reports/accuracy/top-inaccurate-claims", + body=await async_maybe_transform( + { + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "category_id": category_id, + "topic_ids": topic_ids, + "exclude_topic_ids": exclude_topic_ids, + "tag_ids": tag_ids, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "region_ids": region_ids, + "platform_ids": platform_ids, + "persona_ids": persona_ids, + "include_no_persona": include_no_persona, + "prompt_ids": prompt_ids, + "citation_categories": citation_categories, + "limit": limit, + }, + accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_params.AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostResponse, + ) + + async def claim_breakdown_v1_reports_claim_breakdown_post( + self, + *, + start_date: str, + end_date: str, + comparison_start_date: Optional[str] | Omit = omit, + comparison_end_date: Optional[str] | Omit = omit, + category_id: str, + topic_ids: Optional[Iterable[str]] | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + tag_ids: Optional[Iterable[str]] | Omit = omit, + tag_filter_type: Literal["all", "any"] | Omit = omit, + include_no_tag: bool | Omit = omit, + region_ids: Optional[Iterable[str]] | Omit = omit, + platform_ids: Optional[Iterable[str]] | Omit = omit, + persona_ids: Optional[Iterable[str]] | Omit = omit, + include_no_persona: bool | Omit = omit, + prompt_ids: Optional[Iterable[str]] | Omit = omit, + citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, + cluster_id: str, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AccuracyClaimBreakdownV1ReportsClaimBreakdownPostResponse: + """ + Accuracy Claim Breakdown + + Args: + start_date: Body parameter. + end_date: Body parameter. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + category_id: Body parameter. + topic_ids: Body parameter. + exclude_topic_ids: Body parameter. + tag_ids: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + region_ids: Body parameter. + platform_ids: Body parameter. + persona_ids: Body parameter. + include_no_persona: Body parameter. + prompt_ids: Body parameter. + citation_categories: Body parameter. + cluster_id: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AccuracyClaimBreakdownV1ReportsClaimBreakdownPostResponse: Successful Response + + Example: + ```python + accuracy = await client.reports.accuracy.claim_breakdown_v1_reports_claim_breakdown_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + cluster_id="", + ) + ``` + """ + return await self._post( + "/v1/reports/accuracy/claim-breakdown", + body=await async_maybe_transform( + { + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "category_id": category_id, + "topic_ids": topic_ids, + "exclude_topic_ids": exclude_topic_ids, + "tag_ids": tag_ids, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "region_ids": region_ids, + "platform_ids": platform_ids, + "persona_ids": persona_ids, + "include_no_persona": include_no_persona, + "prompt_ids": prompt_ids, + "citation_categories": citation_categories, + "cluster_id": cluster_id, + }, + accuracy_claim_breakdown_v1_reports_claim_breakdown_post_params.AccuracyClaimBreakdownV1ReportsClaimBreakdownPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AccuracyClaimBreakdownV1ReportsClaimBreakdownPostResponse, + ) + + async def claim_citations_v1_reports_claim_citations_post( + self, + *, + start_date: str, + end_date: str, + comparison_start_date: Optional[str] | Omit = omit, + comparison_end_date: Optional[str] | Omit = omit, + category_id: str, + topic_ids: Optional[Iterable[str]] | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + tag_ids: Optional[Iterable[str]] | Omit = omit, + tag_filter_type: Literal["all", "any"] | Omit = omit, + include_no_tag: bool | Omit = omit, + region_ids: Optional[Iterable[str]] | Omit = omit, + platform_ids: Optional[Iterable[str]] | Omit = omit, + persona_ids: Optional[Iterable[str]] | Omit = omit, + include_no_persona: bool | Omit = omit, + prompt_ids: Optional[Iterable[str]] | Omit = omit, + citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, + cluster_id: str, + limit: int | Omit = omit, + offset: int | Omit = omit, + search_query: Optional[str] | Omit = omit, + sort_order: Literal["asc", "desc"] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AccuracyClaimCitationsV1ReportsClaimCitationsPostResponse: + """ + Accuracy Claim Citations + + Args: + start_date: Body parameter. + end_date: Body parameter. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + category_id: Body parameter. + topic_ids: Body parameter. + exclude_topic_ids: Body parameter. + tag_ids: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + region_ids: Body parameter. + platform_ids: Body parameter. + persona_ids: Body parameter. + include_no_persona: Body parameter. + prompt_ids: Body parameter. + citation_categories: Body parameter. + cluster_id: Body parameter. + limit: Body parameter. + offset: Body parameter. + search_query: Body parameter. + sort_order: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AccuracyClaimCitationsV1ReportsClaimCitationsPostResponse: Successful Response + + Example: + ```python + accuracy = await client.reports.accuracy.claim_citations_v1_reports_claim_citations_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + cluster_id="", + limit=10, + offset=0, + sort_order="desc", + ) + ``` + """ + return await self._post( + "/v1/reports/accuracy/claim-citations", + body=await async_maybe_transform( + { + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "category_id": category_id, + "topic_ids": topic_ids, + "exclude_topic_ids": exclude_topic_ids, + "tag_ids": tag_ids, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "region_ids": region_ids, + "platform_ids": platform_ids, + "persona_ids": persona_ids, + "include_no_persona": include_no_persona, + "prompt_ids": prompt_ids, + "citation_categories": citation_categories, + "cluster_id": cluster_id, + "limit": limit, + "offset": offset, + "search_query": search_query, + "sort_order": sort_order, + }, + accuracy_claim_citations_v1_reports_claim_citations_post_params.AccuracyClaimCitationsV1ReportsClaimCitationsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AccuracyClaimCitationsV1ReportsClaimCitationsPostResponse, + ) + + async def cluster_example_runs_v1_reports_cluster_example_runs_post( + self, + *, + category_id: str, + cluster_id: str, + start_date: str, + end_date: str, + limit: int | Omit = omit, + offset: int | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostResponse: + """ + Accuracy Cluster Example Runs + + Args: + category_id: Body parameter. + cluster_id: Body parameter. + start_date: Body parameter. + end_date: Body parameter. + limit: Body parameter. + offset: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostResponse: Successful Response + + Example: + ```python + accuracy = await client.reports.accuracy.cluster_example_runs_v1_reports_cluster_example_runs_post( + category_id="", + cluster_id="", + start_date="", + end_date="", + limit=20, + offset=0, + ) + ``` + """ + return await self._post( + "/v1/reports/accuracy/cluster-example-runs", + body=await async_maybe_transform( + { + "category_id": category_id, + "cluster_id": cluster_id, + "start_date": start_date, + "end_date": end_date, + "limit": limit, + "offset": offset, + }, + accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_params.AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostResponse, + ) + + async def cluster_verification_pairs_v1_reports_cluster_verification_pairs_post( + self, + *, + category_id: str, + cluster_id: str, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostResponse: + """ + Accuracy Cluster Verification Pairs + + Args: + category_id: Body parameter. + cluster_id: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostResponse: Successful Response + + Example: + ```python + accuracy = await client.reports.accuracy.cluster_verification_pairs_v1_reports_cluster_verification_pairs_post( + category_id="", + cluster_id="", + ) + ``` + """ + return await self._post( + "/v1/reports/accuracy/cluster-verification-pairs", + body=await async_maybe_transform( + { + "category_id": category_id, + "cluster_id": cluster_id, + }, + accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_params.AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostResponse, + ) + + async def factcheck_setup_status_v1_reports_factcheck_setup_status_post( + self, + *, + category_id: str, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostResponse: + """ + Accuracy Factcheck Setup Status + + Args: + category_id: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostResponse: Successful Response + + Example: + ```python + accuracy = await client.reports.accuracy.factcheck_setup_status_v1_reports_factcheck_setup_status_post( + category_id="", + ) + ``` + """ + return await self._post( + "/v1/reports/accuracy/factcheck-setup-status", + body=await async_maybe_transform( + {"category_id": category_id}, + accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_params.AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostResponse, + ) + + +class AccuracyResourceWithRawResponse: + def __init__(self, accuracy: AccuracyResource) -> None: + self._accuracy = accuracy + + self.overview_v1_reports_overview_post = to_raw_response_wrapper( + accuracy.overview_v1_reports_overview_post, + ) + self.breakdown_v1_reports_breakdown_post = to_raw_response_wrapper( + accuracy.breakdown_v1_reports_breakdown_post, + ) + self.citation_analysis_v1_reports_citation_analysis_post = to_raw_response_wrapper( + accuracy.citation_analysis_v1_reports_citation_analysis_post, + ) + self.topic_ids_v1_reports_topic_ids_post = to_raw_response_wrapper( + accuracy.topic_ids_v1_reports_topic_ids_post, + ) + self.inaccurate_themes_v1_reports_inaccurate_themes_post = to_raw_response_wrapper( + accuracy.inaccurate_themes_v1_reports_inaccurate_themes_post, + ) + self.inaccurate_clusters_v1_reports_inaccurate_clusters_post = to_raw_response_wrapper( + accuracy.inaccurate_clusters_v1_reports_inaccurate_clusters_post, + ) + self.inaccuracy_drivers_v1_reports_inaccuracy_drivers_post = to_raw_response_wrapper( + accuracy.inaccuracy_drivers_v1_reports_inaccuracy_drivers_post, + ) + self.top_inaccurate_claims_v1_reports_top_inaccurate_claims_post = to_raw_response_wrapper( + accuracy.top_inaccurate_claims_v1_reports_top_inaccurate_claims_post, + ) + self.claim_breakdown_v1_reports_claim_breakdown_post = to_raw_response_wrapper( + accuracy.claim_breakdown_v1_reports_claim_breakdown_post, + ) + self.claim_citations_v1_reports_claim_citations_post = to_raw_response_wrapper( + accuracy.claim_citations_v1_reports_claim_citations_post, + ) + self.cluster_example_runs_v1_reports_cluster_example_runs_post = to_raw_response_wrapper( + accuracy.cluster_example_runs_v1_reports_cluster_example_runs_post, + ) + self.cluster_verification_pairs_v1_reports_cluster_verification_pairs_post = to_raw_response_wrapper( + accuracy.cluster_verification_pairs_v1_reports_cluster_verification_pairs_post, + ) + self.factcheck_setup_status_v1_reports_factcheck_setup_status_post = to_raw_response_wrapper( + accuracy.factcheck_setup_status_v1_reports_factcheck_setup_status_post, + ) + + +class AsyncAccuracyResourceWithRawResponse: + def __init__(self, accuracy: AsyncAccuracyResource) -> None: + self._accuracy = accuracy + + self.overview_v1_reports_overview_post = async_to_raw_response_wrapper( + accuracy.overview_v1_reports_overview_post, + ) + self.breakdown_v1_reports_breakdown_post = async_to_raw_response_wrapper( + accuracy.breakdown_v1_reports_breakdown_post, + ) + self.citation_analysis_v1_reports_citation_analysis_post = async_to_raw_response_wrapper( + accuracy.citation_analysis_v1_reports_citation_analysis_post, + ) + self.topic_ids_v1_reports_topic_ids_post = async_to_raw_response_wrapper( + accuracy.topic_ids_v1_reports_topic_ids_post, + ) + self.inaccurate_themes_v1_reports_inaccurate_themes_post = async_to_raw_response_wrapper( + accuracy.inaccurate_themes_v1_reports_inaccurate_themes_post, + ) + self.inaccurate_clusters_v1_reports_inaccurate_clusters_post = async_to_raw_response_wrapper( + accuracy.inaccurate_clusters_v1_reports_inaccurate_clusters_post, + ) + self.inaccuracy_drivers_v1_reports_inaccuracy_drivers_post = async_to_raw_response_wrapper( + accuracy.inaccuracy_drivers_v1_reports_inaccuracy_drivers_post, + ) + self.top_inaccurate_claims_v1_reports_top_inaccurate_claims_post = async_to_raw_response_wrapper( + accuracy.top_inaccurate_claims_v1_reports_top_inaccurate_claims_post, + ) + self.claim_breakdown_v1_reports_claim_breakdown_post = async_to_raw_response_wrapper( + accuracy.claim_breakdown_v1_reports_claim_breakdown_post, + ) + self.claim_citations_v1_reports_claim_citations_post = async_to_raw_response_wrapper( + accuracy.claim_citations_v1_reports_claim_citations_post, + ) + self.cluster_example_runs_v1_reports_cluster_example_runs_post = async_to_raw_response_wrapper( + accuracy.cluster_example_runs_v1_reports_cluster_example_runs_post, + ) + self.cluster_verification_pairs_v1_reports_cluster_verification_pairs_post = async_to_raw_response_wrapper( + accuracy.cluster_verification_pairs_v1_reports_cluster_verification_pairs_post, + ) + self.factcheck_setup_status_v1_reports_factcheck_setup_status_post = async_to_raw_response_wrapper( + accuracy.factcheck_setup_status_v1_reports_factcheck_setup_status_post, + ) + + +class AccuracyResourceWithStreamingResponse: + def __init__(self, accuracy: AccuracyResource) -> None: + self._accuracy = accuracy + + self.overview_v1_reports_overview_post = to_streamed_response_wrapper( + accuracy.overview_v1_reports_overview_post, + ) + self.breakdown_v1_reports_breakdown_post = to_streamed_response_wrapper( + accuracy.breakdown_v1_reports_breakdown_post, + ) + self.citation_analysis_v1_reports_citation_analysis_post = to_streamed_response_wrapper( + accuracy.citation_analysis_v1_reports_citation_analysis_post, + ) + self.topic_ids_v1_reports_topic_ids_post = to_streamed_response_wrapper( + accuracy.topic_ids_v1_reports_topic_ids_post, + ) + self.inaccurate_themes_v1_reports_inaccurate_themes_post = to_streamed_response_wrapper( + accuracy.inaccurate_themes_v1_reports_inaccurate_themes_post, + ) + self.inaccurate_clusters_v1_reports_inaccurate_clusters_post = to_streamed_response_wrapper( + accuracy.inaccurate_clusters_v1_reports_inaccurate_clusters_post, + ) + self.inaccuracy_drivers_v1_reports_inaccuracy_drivers_post = to_streamed_response_wrapper( + accuracy.inaccuracy_drivers_v1_reports_inaccuracy_drivers_post, + ) + self.top_inaccurate_claims_v1_reports_top_inaccurate_claims_post = to_streamed_response_wrapper( + accuracy.top_inaccurate_claims_v1_reports_top_inaccurate_claims_post, + ) + self.claim_breakdown_v1_reports_claim_breakdown_post = to_streamed_response_wrapper( + accuracy.claim_breakdown_v1_reports_claim_breakdown_post, + ) + self.claim_citations_v1_reports_claim_citations_post = to_streamed_response_wrapper( + accuracy.claim_citations_v1_reports_claim_citations_post, + ) + self.cluster_example_runs_v1_reports_cluster_example_runs_post = to_streamed_response_wrapper( + accuracy.cluster_example_runs_v1_reports_cluster_example_runs_post, + ) + self.cluster_verification_pairs_v1_reports_cluster_verification_pairs_post = to_streamed_response_wrapper( + accuracy.cluster_verification_pairs_v1_reports_cluster_verification_pairs_post, + ) + self.factcheck_setup_status_v1_reports_factcheck_setup_status_post = to_streamed_response_wrapper( + accuracy.factcheck_setup_status_v1_reports_factcheck_setup_status_post, + ) + + +class AsyncAccuracyResourceWithStreamingResponse: + def __init__(self, accuracy: AsyncAccuracyResource) -> None: + self._accuracy = accuracy + + self.overview_v1_reports_overview_post = async_to_streamed_response_wrapper( + accuracy.overview_v1_reports_overview_post, + ) + self.breakdown_v1_reports_breakdown_post = async_to_streamed_response_wrapper( + accuracy.breakdown_v1_reports_breakdown_post, + ) + self.citation_analysis_v1_reports_citation_analysis_post = async_to_streamed_response_wrapper( + accuracy.citation_analysis_v1_reports_citation_analysis_post, + ) + self.topic_ids_v1_reports_topic_ids_post = async_to_streamed_response_wrapper( + accuracy.topic_ids_v1_reports_topic_ids_post, + ) + self.inaccurate_themes_v1_reports_inaccurate_themes_post = async_to_streamed_response_wrapper( + accuracy.inaccurate_themes_v1_reports_inaccurate_themes_post, + ) + self.inaccurate_clusters_v1_reports_inaccurate_clusters_post = async_to_streamed_response_wrapper( + accuracy.inaccurate_clusters_v1_reports_inaccurate_clusters_post, + ) + self.inaccuracy_drivers_v1_reports_inaccuracy_drivers_post = async_to_streamed_response_wrapper( + accuracy.inaccuracy_drivers_v1_reports_inaccuracy_drivers_post, + ) + self.top_inaccurate_claims_v1_reports_top_inaccurate_claims_post = async_to_streamed_response_wrapper( + accuracy.top_inaccurate_claims_v1_reports_top_inaccurate_claims_post, + ) + self.claim_breakdown_v1_reports_claim_breakdown_post = async_to_streamed_response_wrapper( + accuracy.claim_breakdown_v1_reports_claim_breakdown_post, + ) + self.claim_citations_v1_reports_claim_citations_post = async_to_streamed_response_wrapper( + accuracy.claim_citations_v1_reports_claim_citations_post, + ) + self.cluster_example_runs_v1_reports_cluster_example_runs_post = async_to_streamed_response_wrapper( + accuracy.cluster_example_runs_v1_reports_cluster_example_runs_post, + ) + self.cluster_verification_pairs_v1_reports_cluster_verification_pairs_post = async_to_streamed_response_wrapper( + accuracy.cluster_verification_pairs_v1_reports_cluster_verification_pairs_post, + ) + self.factcheck_setup_status_v1_reports_factcheck_setup_status_post = async_to_streamed_response_wrapper( + accuracy.factcheck_setup_status_v1_reports_factcheck_setup_status_post, + ) diff --git a/src/resources/reports/bots.py b/src/resources/reports/bots.py new file mode 100644 index 00000000..b4f2bc52 --- /dev/null +++ b/src/resources/reports/bots.py @@ -0,0 +1,461 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +import httpx + +from typing import Dict, Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Literal + +from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given +from ..._utils import path_template, maybe_transform, async_maybe_transform +from ..._compat import cached_property +from ..._resource import SyncAPIResource, AsyncAPIResource +from ..._response import ( + to_raw_response_wrapper, + to_streamed_response_wrapper, + async_to_raw_response_wrapper, + async_to_streamed_response_wrapper, +) +from ..._base_client import make_request_options +from ...types.report_response import ReportResponse +from ...types.pagination import Pagination +from ...types.path_filter import PathFilter +from ...types.bot_name_filter import BotNameFilter +from ...types.bot_provider_filter import BotProviderFilter +from ...types.reports import bot_create_report_v1_v1_reports_post_params +from ...types.report_response import ReportResponse +from ...types.pagination import Pagination +from ...types.path_filter import PathFilter +from ...types.bot_name_filter import BotNameFilter +from ...types.bot_provider_filter import BotProviderFilter +from ...types.reports import bot_create_report_v2_v2_reports_post_params + +__all__ = ["BotsResource", "AsyncBotsResource"] + + +class BotsResource(SyncAPIResource): + + @cached_property + def with_raw_response(self) -> BotsResourceWithRawResponse: + return BotsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> BotsResourceWithStreamingResponse: + return BotsResourceWithStreamingResponse(self) + + def create_report_v1_v1_reports_post( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["date", "path", "bot_name", "bot_provider"]] | Omit = omit, + metrics: Iterable[Literal["count", "citations", "indexing", "training", "last_visit"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + domain: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime] | Omit = omit, + organization_id: Optional[str] | Omit = omit, + metric_filters: Iterable[bot_create_report_v1_v1_reports_post_params.MetricFilter] | Omit = omit, + filters: Iterable[object] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Get bot traffic report from the daily aggregated materialized view. + + This endpoint queries pre-aggregated daily bot data, making it efficient + for large date ranges and high-traffic sites. + + Metrics: + - count: unique bot visits + - citations: unique citation events + - indexing: unique indexing events + - training: unique training events + - last_visit: most recent visit timestamp + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + domain: Domain to query logs for. + start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp. + end_date: End date for logs. Accepts same formats as start_date. Defaults to now if omitted. + organization_id: Body parameter. + metric_filters: Numeric filters applied after report metrics are calculated. + filters: Filters for bots report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + bot = client.reports.bots.create_report_v1_v1_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + domain="", + start_date="", + ) + ``` + """ + return self._post( + "/v1/reports/bots", + body=maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "domain": domain, + "start_date": start_date, + "end_date": end_date, + "organization_id": organization_id, + "metric_filters": metric_filters, + "filters": filters, + }, + bot_create_report_v1_v1_reports_post_params.BotCreateReportV1V1ReportsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ReportResponse, + ) + + def create_report_v2_v2_reports_post( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["date", "hour", "path", "bot_name", "bot_provider", "bot_type"]] | Omit = omit, + metrics: Iterable[Literal["count", "citations", "indexing", "training", "last_visit"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + domain: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime] | Omit = omit, + organization_id: Optional[str] | Omit = omit, + metric_filters: Iterable[bot_create_report_v2_v2_reports_post_params.MetricFilter] | Omit = omit, + filters: Iterable[object] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Get bot traffic report from the hourly aggregated materialized view (UTC-based). + + Supports date_interval="hour", calendar intervals through "year", "quarter", and "relative_week". + + Metrics: + - count: unique bot visits + - citations: unique citation events (ai_assistant bot type) + - indexing: unique indexing events (index bot type) + - training: unique training events (ai_training bot type) + - last_visit: most recent visit timestamp + + Dimensions: + - date, path, bot_name, bot_provider, bot_type + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + domain: Domain to query logs for. + start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp. + end_date: End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted. + organization_id: Body parameter. + metric_filters: Numeric filters applied after report metrics are calculated. + filters: Filters for bots report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + bot = client.reports.bots.create_report_v2_v2_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + domain="", + start_date="", + ) + ``` + """ + return self._post( + "/v2/reports/bots", + body=maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "domain": domain, + "start_date": start_date, + "end_date": end_date, + "organization_id": organization_id, + "metric_filters": metric_filters, + "filters": filters, + }, + bot_create_report_v2_v2_reports_post_params.BotCreateReportV2V2ReportsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ReportResponse, + ) + + +class AsyncBotsResource(AsyncAPIResource): + + @cached_property + def with_raw_response(self) -> AsyncBotsResourceWithRawResponse: + return AsyncBotsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncBotsResourceWithStreamingResponse: + return AsyncBotsResourceWithStreamingResponse(self) + + async def create_report_v1_v1_reports_post( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["date", "path", "bot_name", "bot_provider"]] | Omit = omit, + metrics: Iterable[Literal["count", "citations", "indexing", "training", "last_visit"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + domain: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime] | Omit = omit, + organization_id: Optional[str] | Omit = omit, + metric_filters: Iterable[bot_create_report_v1_v1_reports_post_params.MetricFilter] | Omit = omit, + filters: Iterable[object] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Get bot traffic report from the daily aggregated materialized view. + + This endpoint queries pre-aggregated daily bot data, making it efficient + for large date ranges and high-traffic sites. + + Metrics: + - count: unique bot visits + - citations: unique citation events + - indexing: unique indexing events + - training: unique training events + - last_visit: most recent visit timestamp + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + domain: Domain to query logs for. + start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp. + end_date: End date for logs. Accepts same formats as start_date. Defaults to now if omitted. + organization_id: Body parameter. + metric_filters: Numeric filters applied after report metrics are calculated. + filters: Filters for bots report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + bot = await client.reports.bots.create_report_v1_v1_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + domain="", + start_date="", + ) + ``` + """ + return await self._post( + "/v1/reports/bots", + body=await async_maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "domain": domain, + "start_date": start_date, + "end_date": end_date, + "organization_id": organization_id, + "metric_filters": metric_filters, + "filters": filters, + }, + bot_create_report_v1_v1_reports_post_params.BotCreateReportV1V1ReportsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ReportResponse, + ) + + async def create_report_v2_v2_reports_post( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["date", "hour", "path", "bot_name", "bot_provider", "bot_type"]] | Omit = omit, + metrics: Iterable[Literal["count", "citations", "indexing", "training", "last_visit"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + domain: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime] | Omit = omit, + organization_id: Optional[str] | Omit = omit, + metric_filters: Iterable[bot_create_report_v2_v2_reports_post_params.MetricFilter] | Omit = omit, + filters: Iterable[object] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Get bot traffic report from the hourly aggregated materialized view (UTC-based). + + Supports date_interval="hour", calendar intervals through "year", "quarter", and "relative_week". + + Metrics: + - count: unique bot visits + - citations: unique citation events (ai_assistant bot type) + - indexing: unique indexing events (index bot type) + - training: unique training events (ai_training bot type) + - last_visit: most recent visit timestamp + + Dimensions: + - date, path, bot_name, bot_provider, bot_type + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + domain: Domain to query logs for. + start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp. + end_date: End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted. + organization_id: Body parameter. + metric_filters: Numeric filters applied after report metrics are calculated. + filters: Filters for bots report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + bot = await client.reports.bots.create_report_v2_v2_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + domain="", + start_date="", + ) + ``` + """ + return await self._post( + "/v2/reports/bots", + body=await async_maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "domain": domain, + "start_date": start_date, + "end_date": end_date, + "organization_id": organization_id, + "metric_filters": metric_filters, + "filters": filters, + }, + bot_create_report_v2_v2_reports_post_params.BotCreateReportV2V2ReportsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ReportResponse, + ) + + +class BotsResourceWithRawResponse: + def __init__(self, bots: BotsResource) -> None: + self._bots = bots + + self.create_report_v1_v1_reports_post = to_raw_response_wrapper( + bots.create_report_v1_v1_reports_post, + ) + self.create_report_v2_v2_reports_post = to_raw_response_wrapper( + bots.create_report_v2_v2_reports_post, + ) + + +class AsyncBotsResourceWithRawResponse: + def __init__(self, bots: AsyncBotsResource) -> None: + self._bots = bots + + self.create_report_v1_v1_reports_post = async_to_raw_response_wrapper( + bots.create_report_v1_v1_reports_post, + ) + self.create_report_v2_v2_reports_post = async_to_raw_response_wrapper( + bots.create_report_v2_v2_reports_post, + ) + + +class BotsResourceWithStreamingResponse: + def __init__(self, bots: BotsResource) -> None: + self._bots = bots + + self.create_report_v1_v1_reports_post = to_streamed_response_wrapper( + bots.create_report_v1_v1_reports_post, + ) + self.create_report_v2_v2_reports_post = to_streamed_response_wrapper( + bots.create_report_v2_v2_reports_post, + ) + + +class AsyncBotsResourceWithStreamingResponse: + def __init__(self, bots: AsyncBotsResource) -> None: + self._bots = bots + + self.create_report_v1_v1_reports_post = async_to_streamed_response_wrapper( + bots.create_report_v1_v1_reports_post, + ) + self.create_report_v2_v2_reports_post = async_to_streamed_response_wrapper( + bots.create_report_v2_v2_reports_post, + ) diff --git a/src/resources/reports/citations.py b/src/resources/reports/citations.py new file mode 100644 index 00000000..1a2339cf --- /dev/null +++ b/src/resources/reports/citations.py @@ -0,0 +1,719 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +import httpx + +from typing import Dict, Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Literal + +from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given +from ..._utils import path_template, maybe_transform, async_maybe_transform +from ..._compat import cached_property +from ..._resource import SyncAPIResource, AsyncAPIResource +from ..._response import ( + to_raw_response_wrapper, + to_streamed_response_wrapper, + async_to_raw_response_wrapper, + async_to_streamed_response_wrapper, +) +from ..._base_client import make_request_options +from ..._streaming import Stream, AsyncStream +from ...types.reports.citation_query_v1_reports_post_response import CitationQueryV1ReportsPostResponse, CitationsResult +from ...types.pagination import Pagination +from ...types.hostname_filter import HostnameFilter +from ...types.path_filter import PathFilter +from ...types.region_id_filter import RegionIdFilter +from ...types.region_name_filter import RegionNameFilter +from ...types.topic_id_filter import TopicIdFilter +from ...types.topic_name_filter import TopicNameFilter +from ...types.model_id_filter import ModelIdFilter +from ...types.tag_id_filter import TagIdFilter +from ...types.tag_name_filter import TagNameFilter +from ...types.url_filter import UrlFilter +from ...types.root_domain_filter import RootDomainFilter +from ...types.analysis_type_filter import AnalysisTypeFilter +from ...types.prompt_type_filter import PromptTypeFilter +from ...types.persona_id_filter import PersonaIdFilter +from ...types.prompt_filter import PromptFilter +from ...types.prompt_id_filter import PromptIdFilter +from ...types.reports import citation_query_v1_reports_post_params +from ...types.reports.citation_stream_v1_reports_stream_post_response import CitationStreamV1ReportsStreamPostResponse, Query, CitationStreamV1ReportsStreamPostResponse2 +from ...types.pagination import Pagination +from ...types.hostname_filter import HostnameFilter +from ...types.path_filter import PathFilter +from ...types.region_id_filter import RegionIdFilter +from ...types.region_name_filter import RegionNameFilter +from ...types.topic_id_filter import TopicIdFilter +from ...types.topic_name_filter import TopicNameFilter +from ...types.model_id_filter import ModelIdFilter +from ...types.tag_id_filter import TagIdFilter +from ...types.tag_name_filter import TagNameFilter +from ...types.url_filter import UrlFilter +from ...types.root_domain_filter import RootDomainFilter +from ...types.analysis_type_filter import AnalysisTypeFilter +from ...types.prompt_type_filter import PromptTypeFilter +from ...types.persona_id_filter import PersonaIdFilter +from ...types.prompt_filter import PromptFilter +from ...types.prompt_id_filter import PromptIdFilter +from ...types.reports import citation_stream_v1_reports_stream_post_params +from ...types.reports.citation_query_v2_v2_reports_post_response import CitationQueryV2V2ReportsPostResponse +from ...types.reports import citation_query_v2_v2_reports_post_params +from ...types.reports import citation_stream_v2_v2_reports_stream_post_params + +__all__ = ["CitationsResource", "AsyncCitationsResource"] + + +class CitationsResource(SyncAPIResource): + + @cached_property + def with_raw_response(self) -> CitationsResourceWithRawResponse: + return CitationsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> CitationsResourceWithStreamingResponse: + return CitationsResourceWithStreamingResponse(self) + + def query_v1_reports_post( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["hostname", "path", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "url", "root_domain", "persona", "citation_category"]] | Omit = omit, + metrics: Iterable[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[object] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> CitationQueryV1ReportsPostResponse: + """ + Get citations for a given category. + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the citations report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + CitationQueryV1ReportsPostResponse: Successful Response + + Example: + ```python + citation = client.reports.citations.query_v1_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", + ) + ``` + """ + return self._post( + "/v1/reports/citations", + body=maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + citation_query_v1_reports_post_params.CitationQueryV1ReportsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=CitationQueryV1ReportsPostResponse, + ) + + def stream_v1_reports_stream_post( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["hostname", "path", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "url", "root_domain", "persona", "citation_category"]] | Omit = omit, + metrics: Iterable[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[object] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Stream[CitationStreamV1ReportsStreamPostResponse]: + """ + Stream Citations + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead. + order_by: Custom ordering of the report results. + pagination: Body parameter. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the citations report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + Stream[CitationStreamV1ReportsStreamPostResponse]: Server-sent events stream. Emits a `summary` event first, then one `row` event per streamed row. + + Example: + ```python + stream = client.reports.citations.stream_v1_reports_stream_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", + ) + for event in stream: + print(event) + ``` + """ + extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} + return self._post( + "/v1/reports/citations/stream", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=CitationStreamV1ReportsStreamPostResponse, + stream=True, + stream_cls=Stream[CitationStreamV1ReportsStreamPostResponse], + ) + + def query_v2_v2_reports_post( + self, + *, + category_id: str, + start_date: str, + end_date: str, + group_by: Iterable[Literal["page", "date", "model", "topic", "region", "persona", "prompt"]] | Omit = omit, + metrics: Optional[Iterable[Literal["count", "citation_share", "rank", "first_cited_at"]]] | Omit = omit, + interval: Literal["day", "week", "month"] | Omit = omit, + scope: Literal["all", "owned"] | Omit = omit, + filter: Optional[citation_query_v2_v2_reports_post_params.Filter] | Omit = omit, + limit: Optional[int] | Omit = omit, + max_results: Optional[int] | Omit = omit, + cursor: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> CitationQueryV2V2ReportsPostResponse: + """ + Query Citations V2 + + Args: + category_id: Body parameter. + start_date: YYYY-MM-DD, ET, inclusive + end_date: YYYY-MM-DD, ET, inclusive + group_by: Body parameter. + metrics: Body parameter. + interval: Body parameter. + scope: `all` (every cited domain) or `owned` (only your owned domains, for easy client-side totals). + filter: Body parameter. + limit: Page size; default 10, max 50. + max_results: Stream endpoint only: cap the number of streamed rows (default: all). + cursor: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + CitationQueryV2V2ReportsPostResponse: Successful Response + + Example: + ```python + citation = client.reports.citations.query_v2_v2_reports_post( + category_id="", + start_date="", + end_date="", + interval="day", + scope="all", + ) + ``` + """ + return self._post( + "/v2/reports/citations", + body=maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "group_by": group_by, + "metrics": metrics, + "interval": interval, + "scope": scope, + "filter": filter, + "limit": limit, + "max_results": max_results, + "cursor": cursor, + }, + citation_query_v2_v2_reports_post_params.CitationQueryV2V2ReportsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=CitationQueryV2V2ReportsPostResponse, + ) + + def stream_v2_v2_reports_stream_post( + self, + *, + category_id: str, + start_date: str, + end_date: str, + group_by: Iterable[Literal["page", "date", "model", "topic", "region", "persona", "prompt"]] | Omit = omit, + metrics: Optional[Iterable[Literal["count", "citation_share", "rank", "first_cited_at"]]] | Omit = omit, + interval: Literal["day", "week", "month"] | Omit = omit, + scope: Literal["all", "owned"] | Omit = omit, + filter: Optional[citation_stream_v2_v2_reports_stream_post_params.Filter] | Omit = omit, + limit: Optional[int] | Omit = omit, + max_results: Optional[int] | Omit = omit, + cursor: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Stream[str]: + """ + Stream Citations V2 + + Args: + category_id: Body parameter. + start_date: YYYY-MM-DD, ET, inclusive + end_date: YYYY-MM-DD, ET, inclusive + group_by: Body parameter. + metrics: Body parameter. + interval: Body parameter. + scope: `all` (every cited domain) or `owned` (only your owned domains, for easy client-side totals). + filter: Body parameter. + limit: Page size; default 10, max 50. + max_results: Stream endpoint only: cap the number of streamed rows (default: all). + cursor: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + Stream[str]: Successful Response + + Example: + ```python + stream = client.reports.citations.stream_v2_v2_reports_stream_post( + category_id="", + start_date="", + end_date="", + interval="day", + scope="all", + ) + for event in stream: + print(event) + ``` + """ + extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} + return self._post( + "/v2/reports/citations/stream", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=str, + stream=True, + stream_cls=Stream[str], + ) + + +class AsyncCitationsResource(AsyncAPIResource): + + @cached_property + def with_raw_response(self) -> AsyncCitationsResourceWithRawResponse: + return AsyncCitationsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncCitationsResourceWithStreamingResponse: + return AsyncCitationsResourceWithStreamingResponse(self) + + async def query_v1_reports_post( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["hostname", "path", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "url", "root_domain", "persona", "citation_category"]] | Omit = omit, + metrics: Iterable[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[object] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> CitationQueryV1ReportsPostResponse: + """ + Get citations for a given category. + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the citations report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + CitationQueryV1ReportsPostResponse: Successful Response + + Example: + ```python + citation = await client.reports.citations.query_v1_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", + ) + ``` + """ + return await self._post( + "/v1/reports/citations", + body=await async_maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + citation_query_v1_reports_post_params.CitationQueryV1ReportsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=CitationQueryV1ReportsPostResponse, + ) + + async def stream_v1_reports_stream_post( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["hostname", "path", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "url", "root_domain", "persona", "citation_category"]] | Omit = omit, + metrics: Iterable[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[object] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AsyncStream[CitationStreamV1ReportsStreamPostResponse]: + """ + Stream Citations + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead. + order_by: Custom ordering of the report results. + pagination: Body parameter. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the citations report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AsyncStream[CitationStreamV1ReportsStreamPostResponse]: Server-sent events stream. Emits a `summary` event first, then one `row` event per streamed row. + + Example: + ```python + stream = await client.reports.citations.stream_v1_reports_stream_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", + ) + async for event in stream: + print(event) + ``` + """ + extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} + return await self._post( + "/v1/reports/citations/stream", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=CitationStreamV1ReportsStreamPostResponse, + stream=True, + stream_cls=AsyncStream[CitationStreamV1ReportsStreamPostResponse], + ) + + async def query_v2_v2_reports_post( + self, + *, + category_id: str, + start_date: str, + end_date: str, + group_by: Iterable[Literal["page", "date", "model", "topic", "region", "persona", "prompt"]] | Omit = omit, + metrics: Optional[Iterable[Literal["count", "citation_share", "rank", "first_cited_at"]]] | Omit = omit, + interval: Literal["day", "week", "month"] | Omit = omit, + scope: Literal["all", "owned"] | Omit = omit, + filter: Optional[citation_query_v2_v2_reports_post_params.Filter] | Omit = omit, + limit: Optional[int] | Omit = omit, + max_results: Optional[int] | Omit = omit, + cursor: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> CitationQueryV2V2ReportsPostResponse: + """ + Query Citations V2 + + Args: + category_id: Body parameter. + start_date: YYYY-MM-DD, ET, inclusive + end_date: YYYY-MM-DD, ET, inclusive + group_by: Body parameter. + metrics: Body parameter. + interval: Body parameter. + scope: `all` (every cited domain) or `owned` (only your owned domains, for easy client-side totals). + filter: Body parameter. + limit: Page size; default 10, max 50. + max_results: Stream endpoint only: cap the number of streamed rows (default: all). + cursor: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + CitationQueryV2V2ReportsPostResponse: Successful Response + + Example: + ```python + citation = await client.reports.citations.query_v2_v2_reports_post( + category_id="", + start_date="", + end_date="", + interval="day", + scope="all", + ) + ``` + """ + return await self._post( + "/v2/reports/citations", + body=await async_maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "group_by": group_by, + "metrics": metrics, + "interval": interval, + "scope": scope, + "filter": filter, + "limit": limit, + "max_results": max_results, + "cursor": cursor, + }, + citation_query_v2_v2_reports_post_params.CitationQueryV2V2ReportsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=CitationQueryV2V2ReportsPostResponse, + ) + + async def stream_v2_v2_reports_stream_post( + self, + *, + category_id: str, + start_date: str, + end_date: str, + group_by: Iterable[Literal["page", "date", "model", "topic", "region", "persona", "prompt"]] | Omit = omit, + metrics: Optional[Iterable[Literal["count", "citation_share", "rank", "first_cited_at"]]] | Omit = omit, + interval: Literal["day", "week", "month"] | Omit = omit, + scope: Literal["all", "owned"] | Omit = omit, + filter: Optional[citation_stream_v2_v2_reports_stream_post_params.Filter] | Omit = omit, + limit: Optional[int] | Omit = omit, + max_results: Optional[int] | Omit = omit, + cursor: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AsyncStream[str]: + """ + Stream Citations V2 + + Args: + category_id: Body parameter. + start_date: YYYY-MM-DD, ET, inclusive + end_date: YYYY-MM-DD, ET, inclusive + group_by: Body parameter. + metrics: Body parameter. + interval: Body parameter. + scope: `all` (every cited domain) or `owned` (only your owned domains, for easy client-side totals). + filter: Body parameter. + limit: Page size; default 10, max 50. + max_results: Stream endpoint only: cap the number of streamed rows (default: all). + cursor: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AsyncStream[str]: Successful Response + + Example: + ```python + stream = await client.reports.citations.stream_v2_v2_reports_stream_post( + category_id="", + start_date="", + end_date="", + interval="day", + scope="all", + ) + async for event in stream: + print(event) + ``` + """ + extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} + return await self._post( + "/v2/reports/citations/stream", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=str, + stream=True, + stream_cls=AsyncStream[str], + ) + + +class CitationsResourceWithRawResponse: + def __init__(self, citations: CitationsResource) -> None: + self._citations = citations + + self.query_v1_reports_post = to_raw_response_wrapper( + citations.query_v1_reports_post, + ) + self.stream_v1_reports_stream_post = to_raw_response_wrapper( + citations.stream_v1_reports_stream_post, + ) + self.query_v2_v2_reports_post = to_raw_response_wrapper( + citations.query_v2_v2_reports_post, + ) + self.stream_v2_v2_reports_stream_post = to_raw_response_wrapper( + citations.stream_v2_v2_reports_stream_post, + ) + + +class AsyncCitationsResourceWithRawResponse: + def __init__(self, citations: AsyncCitationsResource) -> None: + self._citations = citations + + self.query_v1_reports_post = async_to_raw_response_wrapper( + citations.query_v1_reports_post, + ) + self.stream_v1_reports_stream_post = async_to_raw_response_wrapper( + citations.stream_v1_reports_stream_post, + ) + self.query_v2_v2_reports_post = async_to_raw_response_wrapper( + citations.query_v2_v2_reports_post, + ) + self.stream_v2_v2_reports_stream_post = async_to_raw_response_wrapper( + citations.stream_v2_v2_reports_stream_post, + ) + + +class CitationsResourceWithStreamingResponse: + def __init__(self, citations: CitationsResource) -> None: + self._citations = citations + + self.query_v1_reports_post = to_streamed_response_wrapper( + citations.query_v1_reports_post, + ) + self.stream_v1_reports_stream_post = to_streamed_response_wrapper( + citations.stream_v1_reports_stream_post, + ) + self.query_v2_v2_reports_post = to_streamed_response_wrapper( + citations.query_v2_v2_reports_post, + ) + self.stream_v2_v2_reports_stream_post = to_streamed_response_wrapper( + citations.stream_v2_v2_reports_stream_post, + ) + + +class AsyncCitationsResourceWithStreamingResponse: + def __init__(self, citations: AsyncCitationsResource) -> None: + self._citations = citations + + self.query_v1_reports_post = async_to_streamed_response_wrapper( + citations.query_v1_reports_post, + ) + self.stream_v1_reports_stream_post = async_to_streamed_response_wrapper( + citations.stream_v1_reports_stream_post, + ) + self.query_v2_v2_reports_post = async_to_streamed_response_wrapper( + citations.query_v2_v2_reports_post, + ) + self.stream_v2_v2_reports_stream_post = async_to_streamed_response_wrapper( + citations.stream_v2_v2_reports_stream_post, + ) diff --git a/src/resources/reports/query_fanouts.py b/src/resources/reports/query_fanouts.py new file mode 100644 index 00000000..92a8af6f --- /dev/null +++ b/src/resources/reports/query_fanouts.py @@ -0,0 +1,549 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +import httpx + +from typing import Dict, Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Literal + +from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given +from ..._utils import path_template, maybe_transform, async_maybe_transform +from ..._compat import cached_property +from ..._resource import SyncAPIResource, AsyncAPIResource +from ..._response import ( + to_raw_response_wrapper, + to_streamed_response_wrapper, + async_to_raw_response_wrapper, + async_to_streamed_response_wrapper, +) +from ..._base_client import make_request_options +from ..._streaming import Stream, AsyncStream +from ...types.report_response import ReportResponse +from ...types.pagination import Pagination +from ...types.region_id_filter import RegionIdFilter +from ...types.region_name_filter import RegionNameFilter +from ...types.model_id_filter import ModelIdFilter +from ...types.topic_id_filter import TopicIdFilter +from ...types.tag_id_filter import TagIdFilter +from ...types.prompt_id_filter import PromptIdFilter +from ...types.persona_id_filter import PersonaIdFilter +from ...types.analysis_type_filter import AnalysisTypeFilter +from ...types.prompt_type_filter import PromptTypeFilter +from ...types.reports import query_fanout_v1_reports_post_params +from ...types.reports.query_fanout_v2_v2_reports_post_response import QueryFanoutV2V2ReportsPostResponse +from ...types.reports import query_fanout_v2_v2_reports_post_params +from ...types.reports import query_fanout_stream_v2_v2_reports_stream_post_params + +__all__ = ["QueryFanoutsResource", "AsyncQueryFanoutsResource"] + + +class QueryFanoutsResource(SyncAPIResource): + + @cached_property + def with_raw_response(self) -> QueryFanoutsResourceWithRawResponse: + return QueryFanoutsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> QueryFanoutsResourceWithStreamingResponse: + return QueryFanoutsResourceWithStreamingResponse(self) + + def v1_reports_post( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["prompt", "query", "model", "region", "date"]] | Omit = omit, + metrics: Iterable[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[object] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Query Fanouts + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering. Keys must be a requested metric or the ``date`` dimension. Values are ``asc`` or ``desc``. Defaults to first metric descending. + pagination: Pagination settings for the report results. + category_id: Body parameter. + start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + end_date: End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + filters: Filters to apply to the query fanout report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + query_fanout = client.reports.query_fanouts.v1_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", + ) + ``` + """ + return self._post( + "/v1/reports/query-fanouts", + body=maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + query_fanout_v1_reports_post_params.QueryFanoutV1ReportsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ReportResponse, + ) + + def v2_v2_reports_post( + self, + *, + category_id: str, + start_date: str, + end_date: str, + group_by: Iterable[Literal["date", "model", "region", "prompt", "query"]] | Omit = omit, + metrics: Optional[Iterable[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]]] | Omit = omit, + interval: Literal["day", "week", "month"] | Omit = omit, + filter: Optional[query_fanout_v2_v2_reports_post_params.Filter] | Omit = omit, + sort: Optional[query_fanout_v2_v2_reports_post_params.Sort] | Omit = omit, + limit: Optional[int] | Omit = omit, + max_results: Optional[int] | Omit = omit, + cursor: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> QueryFanoutV2V2ReportsPostResponse: + """ + Query Fanouts V2 + + Args: + category_id: Body parameter. + start_date: YYYY-MM-DD, ET, inclusive + end_date: YYYY-MM-DD, ET, inclusive + group_by: Body parameter. + metrics: Body parameter. + interval: Body parameter. + filter: Body parameter. + sort: Body parameter. + limit: Page size; default 10, max 50. + max_results: Stream endpoint only: cap the number of streamed rows (default: all). + cursor: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + QueryFanoutV2V2ReportsPostResponse: Successful Response + + Example: + ```python + query_fanout = client.reports.query_fanouts.v2_v2_reports_post( + category_id="", + start_date="", + end_date="", + interval="day", + ) + ``` + """ + return self._post( + "/v2/reports/query-fanouts", + body=maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "group_by": group_by, + "metrics": metrics, + "interval": interval, + "filter": filter, + "sort": sort, + "limit": limit, + "max_results": max_results, + "cursor": cursor, + }, + query_fanout_v2_v2_reports_post_params.QueryFanoutV2V2ReportsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=QueryFanoutV2V2ReportsPostResponse, + ) + + def stream_v2_v2_reports_stream_post( + self, + *, + category_id: str, + start_date: str, + end_date: str, + group_by: Iterable[Literal["date", "model", "region", "prompt", "query"]] | Omit = omit, + metrics: Optional[Iterable[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]]] | Omit = omit, + interval: Literal["day", "week", "month"] | Omit = omit, + filter: Optional[query_fanout_stream_v2_v2_reports_stream_post_params.Filter] | Omit = omit, + sort: Optional[query_fanout_stream_v2_v2_reports_stream_post_params.Sort] | Omit = omit, + limit: Optional[int] | Omit = omit, + max_results: Optional[int] | Omit = omit, + cursor: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Stream[str]: + """ + Stream Query Fanouts V2 + + Args: + category_id: Body parameter. + start_date: YYYY-MM-DD, ET, inclusive + end_date: YYYY-MM-DD, ET, inclusive + group_by: Body parameter. + metrics: Body parameter. + interval: Body parameter. + filter: Body parameter. + sort: Body parameter. + limit: Page size; default 10, max 50. + max_results: Stream endpoint only: cap the number of streamed rows (default: all). + cursor: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + Stream[str]: Successful Response + + Example: + ```python + stream = client.reports.query_fanouts.stream_v2_v2_reports_stream_post( + category_id="", + start_date="", + end_date="", + interval="day", + ) + for event in stream: + print(event) + ``` + """ + extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} + return self._post( + "/v2/reports/query-fanouts/stream", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=str, + stream=True, + stream_cls=Stream[str], + ) + + +class AsyncQueryFanoutsResource(AsyncAPIResource): + + @cached_property + def with_raw_response(self) -> AsyncQueryFanoutsResourceWithRawResponse: + return AsyncQueryFanoutsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncQueryFanoutsResourceWithStreamingResponse: + return AsyncQueryFanoutsResourceWithStreamingResponse(self) + + async def v1_reports_post( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["prompt", "query", "model", "region", "date"]] | Omit = omit, + metrics: Iterable[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[object] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Query Fanouts + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering. Keys must be a requested metric or the ``date`` dimension. Values are ``asc`` or ``desc``. Defaults to first metric descending. + pagination: Pagination settings for the report results. + category_id: Body parameter. + start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + end_date: End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + filters: Filters to apply to the query fanout report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + query_fanout = await client.reports.query_fanouts.v1_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", + ) + ``` + """ + return await self._post( + "/v1/reports/query-fanouts", + body=await async_maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + query_fanout_v1_reports_post_params.QueryFanoutV1ReportsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ReportResponse, + ) + + async def v2_v2_reports_post( + self, + *, + category_id: str, + start_date: str, + end_date: str, + group_by: Iterable[Literal["date", "model", "region", "prompt", "query"]] | Omit = omit, + metrics: Optional[Iterable[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]]] | Omit = omit, + interval: Literal["day", "week", "month"] | Omit = omit, + filter: Optional[query_fanout_v2_v2_reports_post_params.Filter] | Omit = omit, + sort: Optional[query_fanout_v2_v2_reports_post_params.Sort] | Omit = omit, + limit: Optional[int] | Omit = omit, + max_results: Optional[int] | Omit = omit, + cursor: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> QueryFanoutV2V2ReportsPostResponse: + """ + Query Fanouts V2 + + Args: + category_id: Body parameter. + start_date: YYYY-MM-DD, ET, inclusive + end_date: YYYY-MM-DD, ET, inclusive + group_by: Body parameter. + metrics: Body parameter. + interval: Body parameter. + filter: Body parameter. + sort: Body parameter. + limit: Page size; default 10, max 50. + max_results: Stream endpoint only: cap the number of streamed rows (default: all). + cursor: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + QueryFanoutV2V2ReportsPostResponse: Successful Response + + Example: + ```python + query_fanout = await client.reports.query_fanouts.v2_v2_reports_post( + category_id="", + start_date="", + end_date="", + interval="day", + ) + ``` + """ + return await self._post( + "/v2/reports/query-fanouts", + body=await async_maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "group_by": group_by, + "metrics": metrics, + "interval": interval, + "filter": filter, + "sort": sort, + "limit": limit, + "max_results": max_results, + "cursor": cursor, + }, + query_fanout_v2_v2_reports_post_params.QueryFanoutV2V2ReportsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=QueryFanoutV2V2ReportsPostResponse, + ) + + async def stream_v2_v2_reports_stream_post( + self, + *, + category_id: str, + start_date: str, + end_date: str, + group_by: Iterable[Literal["date", "model", "region", "prompt", "query"]] | Omit = omit, + metrics: Optional[Iterable[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]]] | Omit = omit, + interval: Literal["day", "week", "month"] | Omit = omit, + filter: Optional[query_fanout_stream_v2_v2_reports_stream_post_params.Filter] | Omit = omit, + sort: Optional[query_fanout_stream_v2_v2_reports_stream_post_params.Sort] | Omit = omit, + limit: Optional[int] | Omit = omit, + max_results: Optional[int] | Omit = omit, + cursor: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AsyncStream[str]: + """ + Stream Query Fanouts V2 + + Args: + category_id: Body parameter. + start_date: YYYY-MM-DD, ET, inclusive + end_date: YYYY-MM-DD, ET, inclusive + group_by: Body parameter. + metrics: Body parameter. + interval: Body parameter. + filter: Body parameter. + sort: Body parameter. + limit: Page size; default 10, max 50. + max_results: Stream endpoint only: cap the number of streamed rows (default: all). + cursor: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AsyncStream[str]: Successful Response + + Example: + ```python + stream = await client.reports.query_fanouts.stream_v2_v2_reports_stream_post( + category_id="", + start_date="", + end_date="", + interval="day", + ) + async for event in stream: + print(event) + ``` + """ + extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} + return await self._post( + "/v2/reports/query-fanouts/stream", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=str, + stream=True, + stream_cls=AsyncStream[str], + ) + + +class QueryFanoutsResourceWithRawResponse: + def __init__(self, query_fanouts: QueryFanoutsResource) -> None: + self._query_fanouts = query_fanouts + + self.v1_reports_post = to_raw_response_wrapper( + query_fanouts.v1_reports_post, + ) + self.v2_v2_reports_post = to_raw_response_wrapper( + query_fanouts.v2_v2_reports_post, + ) + self.stream_v2_v2_reports_stream_post = to_raw_response_wrapper( + query_fanouts.stream_v2_v2_reports_stream_post, + ) + + +class AsyncQueryFanoutsResourceWithRawResponse: + def __init__(self, query_fanouts: AsyncQueryFanoutsResource) -> None: + self._query_fanouts = query_fanouts + + self.v1_reports_post = async_to_raw_response_wrapper( + query_fanouts.v1_reports_post, + ) + self.v2_v2_reports_post = async_to_raw_response_wrapper( + query_fanouts.v2_v2_reports_post, + ) + self.stream_v2_v2_reports_stream_post = async_to_raw_response_wrapper( + query_fanouts.stream_v2_v2_reports_stream_post, + ) + + +class QueryFanoutsResourceWithStreamingResponse: + def __init__(self, query_fanouts: QueryFanoutsResource) -> None: + self._query_fanouts = query_fanouts + + self.v1_reports_post = to_streamed_response_wrapper( + query_fanouts.v1_reports_post, + ) + self.v2_v2_reports_post = to_streamed_response_wrapper( + query_fanouts.v2_v2_reports_post, + ) + self.stream_v2_v2_reports_stream_post = to_streamed_response_wrapper( + query_fanouts.stream_v2_v2_reports_stream_post, + ) + + +class AsyncQueryFanoutsResourceWithStreamingResponse: + def __init__(self, query_fanouts: AsyncQueryFanoutsResource) -> None: + self._query_fanouts = query_fanouts + + self.v1_reports_post = async_to_streamed_response_wrapper( + query_fanouts.v1_reports_post, + ) + self.v2_v2_reports_post = async_to_streamed_response_wrapper( + query_fanouts.v2_v2_reports_post, + ) + self.stream_v2_v2_reports_stream_post = async_to_streamed_response_wrapper( + query_fanouts.stream_v2_v2_reports_stream_post, + ) diff --git a/src/resources/reports/referrals.py b/src/resources/reports/referrals.py new file mode 100644 index 00000000..b1b7e678 --- /dev/null +++ b/src/resources/reports/referrals.py @@ -0,0 +1,423 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +import httpx + +from typing import Dict, Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Literal + +from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given +from ..._utils import path_template, maybe_transform, async_maybe_transform +from ..._compat import cached_property +from ..._resource import SyncAPIResource, AsyncAPIResource +from ..._response import ( + to_raw_response_wrapper, + to_streamed_response_wrapper, + async_to_raw_response_wrapper, + async_to_streamed_response_wrapper, +) +from ..._base_client import make_request_options +from ...types.report_response import ReportResponse +from ...types.pagination import Pagination +from ...types.path_filter import PathFilter +from ...types.reports import referral_create_report_v1_v1_reports_post_params +from ...types.report_response import ReportResponse +from ...types.pagination import Pagination +from ...types.path_filter import PathFilter +from ...types.reports import referral_create_report_v2_v2_reports_post_params + +__all__ = ["ReferralsResource", "AsyncReferralsResource"] + + +class ReferralsResource(SyncAPIResource): + + @cached_property + def with_raw_response(self) -> ReferralsResourceWithRawResponse: + return ReferralsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> ReferralsResourceWithStreamingResponse: + return ReferralsResourceWithStreamingResponse(self) + + def create_report_v1_v1_reports_post( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["date", "path", "referral_source"]] | Omit = omit, + metrics: Iterable[Literal["visits", "last_visit"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + domain: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime] | Omit = omit, + organization_id: Optional[str] | Omit = omit, + metric_filters: Iterable[referral_create_report_v1_v1_reports_post_params.MetricFilter] | Omit = omit, + filters: Iterable[object] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Get referral traffic report from the daily aggregated materialized view. + + This endpoint queries pre-aggregated daily referral data, making it efficient + for large date ranges and high-traffic sites. + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + domain: Domain to query logs for. + start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp. + end_date: End date for logs. Accepts same formats as start_date. Defaults to now if omitted. + organization_id: Body parameter. + metric_filters: Numeric filters applied after report metrics are calculated. + filters: Filters for referrals report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + referral = client.reports.referrals.create_report_v1_v1_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + domain="", + start_date="", + ) + ``` + """ + return self._post( + "/v1/reports/referrals", + body=maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "domain": domain, + "start_date": start_date, + "end_date": end_date, + "organization_id": organization_id, + "metric_filters": metric_filters, + "filters": filters, + }, + referral_create_report_v1_v1_reports_post_params.ReferralCreateReportV1V1ReportsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ReportResponse, + ) + + def create_report_v2_v2_reports_post( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["date", "hour", "path", "referral_source", "referral_type"]] | Omit = omit, + metrics: Iterable[Literal["visits", "last_visit"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + domain: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime] | Omit = omit, + organization_id: Optional[str] | Omit = omit, + metric_filters: Iterable[referral_create_report_v2_v2_reports_post_params.MetricFilter] | Omit = omit, + filters: Iterable[object] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Get referral traffic report from the hourly aggregated materialized view (UTC-based). + + Supports date_interval="hour", calendar intervals through "year", "quarter", and "relative_week". + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + domain: Domain to query logs for. + start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp. + end_date: End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted. + organization_id: Body parameter. + metric_filters: Numeric filters applied after report metrics are calculated. + filters: Filters for referrals report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + referral = client.reports.referrals.create_report_v2_v2_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + domain="", + start_date="", + ) + ``` + """ + return self._post( + "/v2/reports/referrals", + body=maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "domain": domain, + "start_date": start_date, + "end_date": end_date, + "organization_id": organization_id, + "metric_filters": metric_filters, + "filters": filters, + }, + referral_create_report_v2_v2_reports_post_params.ReferralCreateReportV2V2ReportsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ReportResponse, + ) + + +class AsyncReferralsResource(AsyncAPIResource): + + @cached_property + def with_raw_response(self) -> AsyncReferralsResourceWithRawResponse: + return AsyncReferralsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncReferralsResourceWithStreamingResponse: + return AsyncReferralsResourceWithStreamingResponse(self) + + async def create_report_v1_v1_reports_post( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["date", "path", "referral_source"]] | Omit = omit, + metrics: Iterable[Literal["visits", "last_visit"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + domain: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime] | Omit = omit, + organization_id: Optional[str] | Omit = omit, + metric_filters: Iterable[referral_create_report_v1_v1_reports_post_params.MetricFilter] | Omit = omit, + filters: Iterable[object] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Get referral traffic report from the daily aggregated materialized view. + + This endpoint queries pre-aggregated daily referral data, making it efficient + for large date ranges and high-traffic sites. + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + domain: Domain to query logs for. + start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp. + end_date: End date for logs. Accepts same formats as start_date. Defaults to now if omitted. + organization_id: Body parameter. + metric_filters: Numeric filters applied after report metrics are calculated. + filters: Filters for referrals report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + referral = await client.reports.referrals.create_report_v1_v1_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + domain="", + start_date="", + ) + ``` + """ + return await self._post( + "/v1/reports/referrals", + body=await async_maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "domain": domain, + "start_date": start_date, + "end_date": end_date, + "organization_id": organization_id, + "metric_filters": metric_filters, + "filters": filters, + }, + referral_create_report_v1_v1_reports_post_params.ReferralCreateReportV1V1ReportsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ReportResponse, + ) + + async def create_report_v2_v2_reports_post( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["date", "hour", "path", "referral_source", "referral_type"]] | Omit = omit, + metrics: Iterable[Literal["visits", "last_visit"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + domain: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime] | Omit = omit, + organization_id: Optional[str] | Omit = omit, + metric_filters: Iterable[referral_create_report_v2_v2_reports_post_params.MetricFilter] | Omit = omit, + filters: Iterable[object] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Get referral traffic report from the hourly aggregated materialized view (UTC-based). + + Supports date_interval="hour", calendar intervals through "year", "quarter", and "relative_week". + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + domain: Domain to query logs for. + start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp. + end_date: End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted. + organization_id: Body parameter. + metric_filters: Numeric filters applied after report metrics are calculated. + filters: Filters for referrals report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + referral = await client.reports.referrals.create_report_v2_v2_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + domain="", + start_date="", + ) + ``` + """ + return await self._post( + "/v2/reports/referrals", + body=await async_maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "domain": domain, + "start_date": start_date, + "end_date": end_date, + "organization_id": organization_id, + "metric_filters": metric_filters, + "filters": filters, + }, + referral_create_report_v2_v2_reports_post_params.ReferralCreateReportV2V2ReportsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ReportResponse, + ) + + +class ReferralsResourceWithRawResponse: + def __init__(self, referrals: ReferralsResource) -> None: + self._referrals = referrals + + self.create_report_v1_v1_reports_post = to_raw_response_wrapper( + referrals.create_report_v1_v1_reports_post, + ) + self.create_report_v2_v2_reports_post = to_raw_response_wrapper( + referrals.create_report_v2_v2_reports_post, + ) + + +class AsyncReferralsResourceWithRawResponse: + def __init__(self, referrals: AsyncReferralsResource) -> None: + self._referrals = referrals + + self.create_report_v1_v1_reports_post = async_to_raw_response_wrapper( + referrals.create_report_v1_v1_reports_post, + ) + self.create_report_v2_v2_reports_post = async_to_raw_response_wrapper( + referrals.create_report_v2_v2_reports_post, + ) + + +class ReferralsResourceWithStreamingResponse: + def __init__(self, referrals: ReferralsResource) -> None: + self._referrals = referrals + + self.create_report_v1_v1_reports_post = to_streamed_response_wrapper( + referrals.create_report_v1_v1_reports_post, + ) + self.create_report_v2_v2_reports_post = to_streamed_response_wrapper( + referrals.create_report_v2_v2_reports_post, + ) + + +class AsyncReferralsResourceWithStreamingResponse: + def __init__(self, referrals: AsyncReferralsResource) -> None: + self._referrals = referrals + + self.create_report_v1_v1_reports_post = async_to_streamed_response_wrapper( + referrals.create_report_v1_v1_reports_post, + ) + self.create_report_v2_v2_reports_post = async_to_streamed_response_wrapper( + referrals.create_report_v2_v2_reports_post, + ) diff --git a/src/resources/reports/reports.py b/src/resources/reports/reports.py new file mode 100644 index 00000000..d748c8ee --- /dev/null +++ b/src/resources/reports/reports.py @@ -0,0 +1,534 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +import httpx + +from typing import Dict, Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Literal + +from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given +from ..._utils import path_template, maybe_transform, async_maybe_transform +from ..._compat import cached_property +from ..._resource import SyncAPIResource, AsyncAPIResource +from ..._response import ( + to_raw_response_wrapper, + to_streamed_response_wrapper, + async_to_raw_response_wrapper, + async_to_streamed_response_wrapper, +) +from ..._base_client import make_request_options +from .citations import ( + CitationsResource, + AsyncCitationsResource, + CitationsResourceWithRawResponse, + AsyncCitationsResourceWithRawResponse, + CitationsResourceWithStreamingResponse, + AsyncCitationsResourceWithStreamingResponse, +) +from .visibility import ( + VisibilityResource, + AsyncVisibilityResource, + VisibilityResourceWithRawResponse, + AsyncVisibilityResourceWithRawResponse, + VisibilityResourceWithStreamingResponse, + AsyncVisibilityResourceWithStreamingResponse, +) +from .sentiment import ( + SentimentResource, + AsyncSentimentResource, + SentimentResourceWithRawResponse, + AsyncSentimentResourceWithRawResponse, + SentimentResourceWithStreamingResponse, + AsyncSentimentResourceWithStreamingResponse, +) +from .web_search_results import ( + WebSearchResultsResource, + AsyncWebSearchResultsResource, + WebSearchResultsResourceWithRawResponse, + AsyncWebSearchResultsResourceWithRawResponse, + WebSearchResultsResourceWithStreamingResponse, + AsyncWebSearchResultsResourceWithStreamingResponse, +) +from .referrals import ( + ReferralsResource, + AsyncReferralsResource, + ReferralsResourceWithRawResponse, + AsyncReferralsResourceWithRawResponse, + ReferralsResourceWithStreamingResponse, + AsyncReferralsResourceWithStreamingResponse, +) +from .bots import ( + BotsResource, + AsyncBotsResource, + BotsResourceWithRawResponse, + AsyncBotsResourceWithRawResponse, + BotsResourceWithStreamingResponse, + AsyncBotsResourceWithStreamingResponse, +) +from .query_fanouts import ( + QueryFanoutsResource, + AsyncQueryFanoutsResource, + QueryFanoutsResourceWithRawResponse, + AsyncQueryFanoutsResourceWithRawResponse, + QueryFanoutsResourceWithStreamingResponse, + AsyncQueryFanoutsResourceWithStreamingResponse, +) +from .shopping import ( + ShoppingResource, + AsyncShoppingResource, + ShoppingResourceWithRawResponse, + AsyncShoppingResourceWithRawResponse, + ShoppingResourceWithStreamingResponse, + AsyncShoppingResourceWithStreamingResponse, +) +from .accuracy import ( + AccuracyResource, + AsyncAccuracyResource, + AccuracyResourceWithRawResponse, + AsyncAccuracyResourceWithRawResponse, + AccuracyResourceWithStreamingResponse, + AsyncAccuracyResourceWithStreamingResponse, +) +from ...types.report_query_sentiment_v2_v1_sentiment_v2_post_response import ReportQuerySentimentV2V1SentimentV2PostResponse, SentimentV2ReportInfo, Query, SentimentDataPoint, SentimentPeriodScores, SentimentScores, SentimentGroupMetadata +from ...types.pagination import Pagination +from ...types import report_query_sentiment_v2_v1_sentiment_v2_post_params + +__all__ = ["ReportsResource", "AsyncReportsResource"] + + +class ReportsResource(SyncAPIResource): + + @cached_property + def citations(self) -> CitationsResource: + return CitationsResource(self._client) + + @cached_property + def visibility(self) -> VisibilityResource: + return VisibilityResource(self._client) + + @cached_property + def sentiment(self) -> SentimentResource: + return SentimentResource(self._client) + + @cached_property + def web_search_results(self) -> WebSearchResultsResource: + return WebSearchResultsResource(self._client) + + @cached_property + def referrals(self) -> ReferralsResource: + return ReferralsResource(self._client) + + @cached_property + def bots(self) -> BotsResource: + return BotsResource(self._client) + + @cached_property + def query_fanouts(self) -> QueryFanoutsResource: + return QueryFanoutsResource(self._client) + + @cached_property + def shopping(self) -> ShoppingResource: + return ShoppingResource(self._client) + + @cached_property + def accuracy(self) -> AccuracyResource: + return AccuracyResource(self._client) + + @cached_property + def with_raw_response(self) -> ReportsResourceWithRawResponse: + return ReportsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> ReportsResourceWithStreamingResponse: + return ReportsResourceWithStreamingResponse(self) + + def query_sentiment_v2_v1_sentiment_v2_post( + self, + *, + category_id: str, + asset_name: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, + comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["date", "topic", "region", "model", "prompt", "persona", "tag", "theme", "claim", "run", "asset_name"]] | Omit = omit, + metrics: Iterable[Literal["sentiment", "occurrence"]], + filters: Iterable[object] | Omit = omit, + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportQuerySentimentV2V1SentimentV2PostResponse: + """ + Query Sentiment V2 + + Args: + category_id: Body parameter. + asset_name: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + comparison_start_date: Start of the previous period for delta computation. + comparison_end_date: End of the previous period for delta computation. + date_interval: Date interval for the report. Only used when dimensions includes date. + dimensions: Dimensions to group the report by. + metrics: Body parameter. + filters: List of filters to apply to the sentiment-v2 report. + order_by: Custom ordering of report results. Dimension keys must also be present in dimensions. The sentiment metric orders by positive_sentiment. + pagination: Pagination settings for the report results. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportQuerySentimentV2V1SentimentV2PostResponse: Successful Response + + Example: + ```python + report = client.reports.query_sentiment_v2_v1_sentiment_v2_post( + category_id="", + asset_name="", + start_date="", + end_date="", + date_interval="day", + metrics=[], + ) + ``` + """ + return self._post( + "/v1/reports/sentiment-v2", + body=maybe_transform( + { + "category_id": category_id, + "asset_name": asset_name, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + }, + report_query_sentiment_v2_v1_sentiment_v2_post_params.ReportQuerySentimentV2V1SentimentV2PostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ReportQuerySentimentV2V1SentimentV2PostResponse, + ) + + +class AsyncReportsResource(AsyncAPIResource): + + @cached_property + def citations(self) -> AsyncCitationsResource: + return AsyncCitationsResource(self._client) + + @cached_property + def visibility(self) -> AsyncVisibilityResource: + return AsyncVisibilityResource(self._client) + + @cached_property + def sentiment(self) -> AsyncSentimentResource: + return AsyncSentimentResource(self._client) + + @cached_property + def web_search_results(self) -> AsyncWebSearchResultsResource: + return AsyncWebSearchResultsResource(self._client) + + @cached_property + def referrals(self) -> AsyncReferralsResource: + return AsyncReferralsResource(self._client) + + @cached_property + def bots(self) -> AsyncBotsResource: + return AsyncBotsResource(self._client) + + @cached_property + def query_fanouts(self) -> AsyncQueryFanoutsResource: + return AsyncQueryFanoutsResource(self._client) + + @cached_property + def shopping(self) -> AsyncShoppingResource: + return AsyncShoppingResource(self._client) + + @cached_property + def accuracy(self) -> AsyncAccuracyResource: + return AsyncAccuracyResource(self._client) + + @cached_property + def with_raw_response(self) -> AsyncReportsResourceWithRawResponse: + return AsyncReportsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncReportsResourceWithStreamingResponse: + return AsyncReportsResourceWithStreamingResponse(self) + + async def query_sentiment_v2_v1_sentiment_v2_post( + self, + *, + category_id: str, + asset_name: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, + comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["date", "topic", "region", "model", "prompt", "persona", "tag", "theme", "claim", "run", "asset_name"]] | Omit = omit, + metrics: Iterable[Literal["sentiment", "occurrence"]], + filters: Iterable[object] | Omit = omit, + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportQuerySentimentV2V1SentimentV2PostResponse: + """ + Query Sentiment V2 + + Args: + category_id: Body parameter. + asset_name: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + comparison_start_date: Start of the previous period for delta computation. + comparison_end_date: End of the previous period for delta computation. + date_interval: Date interval for the report. Only used when dimensions includes date. + dimensions: Dimensions to group the report by. + metrics: Body parameter. + filters: List of filters to apply to the sentiment-v2 report. + order_by: Custom ordering of report results. Dimension keys must also be present in dimensions. The sentiment metric orders by positive_sentiment. + pagination: Pagination settings for the report results. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportQuerySentimentV2V1SentimentV2PostResponse: Successful Response + + Example: + ```python + report = await client.reports.query_sentiment_v2_v1_sentiment_v2_post( + category_id="", + asset_name="", + start_date="", + end_date="", + date_interval="day", + metrics=[], + ) + ``` + """ + return await self._post( + "/v1/reports/sentiment-v2", + body=await async_maybe_transform( + { + "category_id": category_id, + "asset_name": asset_name, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + }, + report_query_sentiment_v2_v1_sentiment_v2_post_params.ReportQuerySentimentV2V1SentimentV2PostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ReportQuerySentimentV2V1SentimentV2PostResponse, + ) + + +class ReportsResourceWithRawResponse: + def __init__(self, reports: ReportsResource) -> None: + self._reports = reports + + self.query_sentiment_v2_v1_sentiment_v2_post = to_raw_response_wrapper( + reports.query_sentiment_v2_v1_sentiment_v2_post, + ) + + @cached_property + def citations(self) -> CitationsResourceWithRawResponse: + return CitationsResourceWithRawResponse(self._reports.citations) + + @cached_property + def visibility(self) -> VisibilityResourceWithRawResponse: + return VisibilityResourceWithRawResponse(self._reports.visibility) + + @cached_property + def sentiment(self) -> SentimentResourceWithRawResponse: + return SentimentResourceWithRawResponse(self._reports.sentiment) + + @cached_property + def web_search_results(self) -> WebSearchResultsResourceWithRawResponse: + return WebSearchResultsResourceWithRawResponse(self._reports.web_search_results) + + @cached_property + def referrals(self) -> ReferralsResourceWithRawResponse: + return ReferralsResourceWithRawResponse(self._reports.referrals) + + @cached_property + def bots(self) -> BotsResourceWithRawResponse: + return BotsResourceWithRawResponse(self._reports.bots) + + @cached_property + def query_fanouts(self) -> QueryFanoutsResourceWithRawResponse: + return QueryFanoutsResourceWithRawResponse(self._reports.query_fanouts) + + @cached_property + def shopping(self) -> ShoppingResourceWithRawResponse: + return ShoppingResourceWithRawResponse(self._reports.shopping) + + @cached_property + def accuracy(self) -> AccuracyResourceWithRawResponse: + return AccuracyResourceWithRawResponse(self._reports.accuracy) + + +class AsyncReportsResourceWithRawResponse: + def __init__(self, reports: AsyncReportsResource) -> None: + self._reports = reports + + self.query_sentiment_v2_v1_sentiment_v2_post = async_to_raw_response_wrapper( + reports.query_sentiment_v2_v1_sentiment_v2_post, + ) + + @cached_property + def citations(self) -> AsyncCitationsResourceWithRawResponse: + return AsyncCitationsResourceWithRawResponse(self._reports.citations) + + @cached_property + def visibility(self) -> AsyncVisibilityResourceWithRawResponse: + return AsyncVisibilityResourceWithRawResponse(self._reports.visibility) + + @cached_property + def sentiment(self) -> AsyncSentimentResourceWithRawResponse: + return AsyncSentimentResourceWithRawResponse(self._reports.sentiment) + + @cached_property + def web_search_results(self) -> AsyncWebSearchResultsResourceWithRawResponse: + return AsyncWebSearchResultsResourceWithRawResponse(self._reports.web_search_results) + + @cached_property + def referrals(self) -> AsyncReferralsResourceWithRawResponse: + return AsyncReferralsResourceWithRawResponse(self._reports.referrals) + + @cached_property + def bots(self) -> AsyncBotsResourceWithRawResponse: + return AsyncBotsResourceWithRawResponse(self._reports.bots) + + @cached_property + def query_fanouts(self) -> AsyncQueryFanoutsResourceWithRawResponse: + return AsyncQueryFanoutsResourceWithRawResponse(self._reports.query_fanouts) + + @cached_property + def shopping(self) -> AsyncShoppingResourceWithRawResponse: + return AsyncShoppingResourceWithRawResponse(self._reports.shopping) + + @cached_property + def accuracy(self) -> AsyncAccuracyResourceWithRawResponse: + return AsyncAccuracyResourceWithRawResponse(self._reports.accuracy) + + +class ReportsResourceWithStreamingResponse: + def __init__(self, reports: ReportsResource) -> None: + self._reports = reports + + self.query_sentiment_v2_v1_sentiment_v2_post = to_streamed_response_wrapper( + reports.query_sentiment_v2_v1_sentiment_v2_post, + ) + + @cached_property + def citations(self) -> CitationsResourceWithStreamingResponse: + return CitationsResourceWithStreamingResponse(self._reports.citations) + + @cached_property + def visibility(self) -> VisibilityResourceWithStreamingResponse: + return VisibilityResourceWithStreamingResponse(self._reports.visibility) + + @cached_property + def sentiment(self) -> SentimentResourceWithStreamingResponse: + return SentimentResourceWithStreamingResponse(self._reports.sentiment) + + @cached_property + def web_search_results(self) -> WebSearchResultsResourceWithStreamingResponse: + return WebSearchResultsResourceWithStreamingResponse(self._reports.web_search_results) + + @cached_property + def referrals(self) -> ReferralsResourceWithStreamingResponse: + return ReferralsResourceWithStreamingResponse(self._reports.referrals) + + @cached_property + def bots(self) -> BotsResourceWithStreamingResponse: + return BotsResourceWithStreamingResponse(self._reports.bots) + + @cached_property + def query_fanouts(self) -> QueryFanoutsResourceWithStreamingResponse: + return QueryFanoutsResourceWithStreamingResponse(self._reports.query_fanouts) + + @cached_property + def shopping(self) -> ShoppingResourceWithStreamingResponse: + return ShoppingResourceWithStreamingResponse(self._reports.shopping) + + @cached_property + def accuracy(self) -> AccuracyResourceWithStreamingResponse: + return AccuracyResourceWithStreamingResponse(self._reports.accuracy) + + +class AsyncReportsResourceWithStreamingResponse: + def __init__(self, reports: AsyncReportsResource) -> None: + self._reports = reports + + self.query_sentiment_v2_v1_sentiment_v2_post = async_to_streamed_response_wrapper( + reports.query_sentiment_v2_v1_sentiment_v2_post, + ) + + @cached_property + def citations(self) -> AsyncCitationsResourceWithStreamingResponse: + return AsyncCitationsResourceWithStreamingResponse(self._reports.citations) + + @cached_property + def visibility(self) -> AsyncVisibilityResourceWithStreamingResponse: + return AsyncVisibilityResourceWithStreamingResponse(self._reports.visibility) + + @cached_property + def sentiment(self) -> AsyncSentimentResourceWithStreamingResponse: + return AsyncSentimentResourceWithStreamingResponse(self._reports.sentiment) + + @cached_property + def web_search_results(self) -> AsyncWebSearchResultsResourceWithStreamingResponse: + return AsyncWebSearchResultsResourceWithStreamingResponse(self._reports.web_search_results) + + @cached_property + def referrals(self) -> AsyncReferralsResourceWithStreamingResponse: + return AsyncReferralsResourceWithStreamingResponse(self._reports.referrals) + + @cached_property + def bots(self) -> AsyncBotsResourceWithStreamingResponse: + return AsyncBotsResourceWithStreamingResponse(self._reports.bots) + + @cached_property + def query_fanouts(self) -> AsyncQueryFanoutsResourceWithStreamingResponse: + return AsyncQueryFanoutsResourceWithStreamingResponse(self._reports.query_fanouts) + + @cached_property + def shopping(self) -> AsyncShoppingResourceWithStreamingResponse: + return AsyncShoppingResourceWithStreamingResponse(self._reports.shopping) + + @cached_property + def accuracy(self) -> AsyncAccuracyResourceWithStreamingResponse: + return AsyncAccuracyResourceWithStreamingResponse(self._reports.accuracy) diff --git a/src/resources/reports/sentiment.py b/src/resources/reports/sentiment.py new file mode 100644 index 00000000..2e3bbbeb --- /dev/null +++ b/src/resources/reports/sentiment.py @@ -0,0 +1,751 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +import httpx + +from typing import Dict, Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Literal + +from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given +from ..._utils import path_template, maybe_transform, async_maybe_transform +from ..._compat import cached_property +from ..._resource import SyncAPIResource, AsyncAPIResource +from ..._response import ( + to_raw_response_wrapper, + to_streamed_response_wrapper, + async_to_raw_response_wrapper, + async_to_streamed_response_wrapper, +) +from ..._base_client import make_request_options +from ..._streaming import Stream, AsyncStream +from ...types.report_response import ReportResponse +from ...types.pagination import Pagination +from ...types.asset_id_filter import AssetIdFilter +from ...types.region_id_filter import RegionIdFilter +from ...types.region_name_filter import RegionNameFilter +from ...types.topic_id_filter import TopicIdFilter +from ...types.topic_name_filter import TopicNameFilter +from ...types.model_id_filter import ModelIdFilter +from ...types.tag_id_filter import TagIdFilter +from ...types.tag_name_filter import TagNameFilter +from ...types.prompt_filter import PromptFilter +from ...types.persona_id_filter import PersonaIdFilter +from ...types.reports import sentiment_query_v1_reports_post_params +from ...types.reports.sentiment_stream_v1_reports_stream_post_response import SentimentStreamV1ReportsStreamPostResponse, Query, SentimentStreamV1ReportsStreamPostResponse2 +from ...types.pagination import Pagination +from ...types.asset_id_filter import AssetIdFilter +from ...types.region_id_filter import RegionIdFilter +from ...types.region_name_filter import RegionNameFilter +from ...types.topic_id_filter import TopicIdFilter +from ...types.topic_name_filter import TopicNameFilter +from ...types.model_id_filter import ModelIdFilter +from ...types.tag_id_filter import TagIdFilter +from ...types.tag_name_filter import TagNameFilter +from ...types.prompt_filter import PromptFilter +from ...types.persona_id_filter import PersonaIdFilter +from ...types.reports import sentiment_stream_v1_reports_stream_post_params +from ...types.reports.sentiment_query_v2_v2_reports_post_response import SentimentQueryV2V2ReportsPostResponse +from ...types.reports import sentiment_query_v2_v2_reports_post_params +from ...types.reports import sentiment_stream_v2_v2_reports_stream_post_params + +__all__ = ["SentimentResource", "AsyncSentimentResource"] + + +class SentimentResource(SyncAPIResource): + + @cached_property + def with_raw_response(self) -> SentimentResourceWithRawResponse: + return SentimentResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> SentimentResourceWithStreamingResponse: + return SentimentResourceWithStreamingResponse(self) + + def query_v1_reports_post( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["theme", "date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "tag", "prompt", "prompt_id", "sentiment_type", "persona"]] | Omit = omit, + metrics: Iterable[Literal["positive", "negative", "occurrences"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[object] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Get citations for a given category. + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the sentiment report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + sentiment = client.reports.sentiment.query_v1_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", + ) + ``` + """ + return self._post( + "/v1/reports/sentiment", + body=maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + sentiment_query_v1_reports_post_params.SentimentQueryV1ReportsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ReportResponse, + ) + + def stream_v1_reports_stream_post( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["theme", "date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "tag", "prompt", "prompt_id", "sentiment_type", "persona"]] | Omit = omit, + metrics: Iterable[Literal["positive", "negative", "occurrences"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[object] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Stream[SentimentStreamV1ReportsStreamPostResponse]: + """ + Stream Sentiment + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Body parameter. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the sentiment report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + Stream[SentimentStreamV1ReportsStreamPostResponse]: Server-sent events stream. Emits a `summary` event first, then one `row` event per streamed row. + + Example: + ```python + stream = client.reports.sentiment.stream_v1_reports_stream_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", + ) + for event in stream: + print(event) + ``` + """ + extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} + return self._post( + "/v1/reports/sentiment/stream", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=SentimentStreamV1ReportsStreamPostResponse, + stream=True, + stream_cls=Stream[SentimentStreamV1ReportsStreamPostResponse], + ) + + def query_v2_v2_reports_post( + self, + *, + category_id: str, + asset: str, + start_date: str, + end_date: str, + comparison_start_date: Optional[str] | Omit = omit, + comparison_end_date: Optional[str] | Omit = omit, + group_by: Iterable[Literal["date", "model", "topic", "region", "prompt", "persona", "tag", "theme", "claim", "run", "competitor"]] | Omit = omit, + metrics: Optional[Iterable[Literal["positive_sentiment", "negative_sentiment", "occurrence"]]] | Omit = omit, + interval: Literal["day", "week", "month"] | Omit = omit, + filter: Optional[sentiment_query_v2_v2_reports_post_params.Filter] | Omit = omit, + sort: sentiment_query_v2_v2_reports_post_params.Sort | Omit = omit, + include_cited_websites: bool | Omit = omit, + limit: Optional[int] | Omit = omit, + max_results: Optional[int] | Omit = omit, + cursor: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> SentimentQueryV2V2ReportsPostResponse: + """ + Query Sentiment V2 + + Args: + category_id: Body parameter. + asset: The brand name to analyze (sentiment is extracted on name, not id). + start_date: YYYY-MM-DD, ET, inclusive + end_date: YYYY-MM-DD, ET, inclusive + comparison_start_date: YYYY-MM-DD, ET, inclusive (with end). + comparison_end_date: YYYY-MM-DD, ET, inclusive (with start). + group_by: Body parameter. + metrics: Body parameter. + interval: Body parameter. + filter: Body parameter. + sort: Body parameter. + include_cited_websites: Return cited websites per row (only when grouping by `theme`/`claim`). + limit: Page size; default 10, max 50. + max_results: Stream endpoint only: cap the number of streamed rows (default: all). + cursor: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + SentimentQueryV2V2ReportsPostResponse: Successful Response + + Example: + ```python + sentiment = client.reports.sentiment.query_v2_v2_reports_post( + category_id="", + asset="", + start_date="", + end_date="", + interval="day", + include_cited_websites=False, + ) + ``` + """ + return self._post( + "/v2/reports/sentiment", + body=maybe_transform( + { + "category_id": category_id, + "asset": asset, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "group_by": group_by, + "metrics": metrics, + "interval": interval, + "filter": filter, + "sort": sort, + "include_cited_websites": include_cited_websites, + "limit": limit, + "max_results": max_results, + "cursor": cursor, + }, + sentiment_query_v2_v2_reports_post_params.SentimentQueryV2V2ReportsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=SentimentQueryV2V2ReportsPostResponse, + ) + + def stream_v2_v2_reports_stream_post( + self, + *, + category_id: str, + asset: str, + start_date: str, + end_date: str, + comparison_start_date: Optional[str] | Omit = omit, + comparison_end_date: Optional[str] | Omit = omit, + group_by: Iterable[Literal["date", "model", "topic", "region", "prompt", "persona", "tag", "theme", "claim", "run", "competitor"]] | Omit = omit, + metrics: Optional[Iterable[Literal["positive_sentiment", "negative_sentiment", "occurrence"]]] | Omit = omit, + interval: Literal["day", "week", "month"] | Omit = omit, + filter: Optional[sentiment_stream_v2_v2_reports_stream_post_params.Filter] | Omit = omit, + sort: sentiment_stream_v2_v2_reports_stream_post_params.Sort | Omit = omit, + include_cited_websites: bool | Omit = omit, + limit: Optional[int] | Omit = omit, + max_results: Optional[int] | Omit = omit, + cursor: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Stream[str]: + """ + Stream Sentiment V2 + + Args: + category_id: Body parameter. + asset: The brand name to analyze (sentiment is extracted on name, not id). + start_date: YYYY-MM-DD, ET, inclusive + end_date: YYYY-MM-DD, ET, inclusive + comparison_start_date: YYYY-MM-DD, ET, inclusive (with end). + comparison_end_date: YYYY-MM-DD, ET, inclusive (with start). + group_by: Body parameter. + metrics: Body parameter. + interval: Body parameter. + filter: Body parameter. + sort: Body parameter. + include_cited_websites: Return cited websites per row (only when grouping by `theme`/`claim`). + limit: Page size; default 10, max 50. + max_results: Stream endpoint only: cap the number of streamed rows (default: all). + cursor: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + Stream[str]: Successful Response + + Example: + ```python + stream = client.reports.sentiment.stream_v2_v2_reports_stream_post( + category_id="", + asset="", + start_date="", + end_date="", + interval="day", + include_cited_websites=False, + ) + for event in stream: + print(event) + ``` + """ + extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} + return self._post( + "/v2/reports/sentiment/stream", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=str, + stream=True, + stream_cls=Stream[str], + ) + + +class AsyncSentimentResource(AsyncAPIResource): + + @cached_property + def with_raw_response(self) -> AsyncSentimentResourceWithRawResponse: + return AsyncSentimentResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncSentimentResourceWithStreamingResponse: + return AsyncSentimentResourceWithStreamingResponse(self) + + async def query_v1_reports_post( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["theme", "date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "tag", "prompt", "prompt_id", "sentiment_type", "persona"]] | Omit = omit, + metrics: Iterable[Literal["positive", "negative", "occurrences"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[object] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Get citations for a given category. + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the sentiment report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + sentiment = await client.reports.sentiment.query_v1_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", + ) + ``` + """ + return await self._post( + "/v1/reports/sentiment", + body=await async_maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + sentiment_query_v1_reports_post_params.SentimentQueryV1ReportsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ReportResponse, + ) + + async def stream_v1_reports_stream_post( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["theme", "date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "tag", "prompt", "prompt_id", "sentiment_type", "persona"]] | Omit = omit, + metrics: Iterable[Literal["positive", "negative", "occurrences"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[object] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AsyncStream[SentimentStreamV1ReportsStreamPostResponse]: + """ + Stream Sentiment + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Body parameter. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the sentiment report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AsyncStream[SentimentStreamV1ReportsStreamPostResponse]: Server-sent events stream. Emits a `summary` event first, then one `row` event per streamed row. + + Example: + ```python + stream = await client.reports.sentiment.stream_v1_reports_stream_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", + ) + async for event in stream: + print(event) + ``` + """ + extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} + return await self._post( + "/v1/reports/sentiment/stream", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=SentimentStreamV1ReportsStreamPostResponse, + stream=True, + stream_cls=AsyncStream[SentimentStreamV1ReportsStreamPostResponse], + ) + + async def query_v2_v2_reports_post( + self, + *, + category_id: str, + asset: str, + start_date: str, + end_date: str, + comparison_start_date: Optional[str] | Omit = omit, + comparison_end_date: Optional[str] | Omit = omit, + group_by: Iterable[Literal["date", "model", "topic", "region", "prompt", "persona", "tag", "theme", "claim", "run", "competitor"]] | Omit = omit, + metrics: Optional[Iterable[Literal["positive_sentiment", "negative_sentiment", "occurrence"]]] | Omit = omit, + interval: Literal["day", "week", "month"] | Omit = omit, + filter: Optional[sentiment_query_v2_v2_reports_post_params.Filter] | Omit = omit, + sort: sentiment_query_v2_v2_reports_post_params.Sort | Omit = omit, + include_cited_websites: bool | Omit = omit, + limit: Optional[int] | Omit = omit, + max_results: Optional[int] | Omit = omit, + cursor: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> SentimentQueryV2V2ReportsPostResponse: + """ + Query Sentiment V2 + + Args: + category_id: Body parameter. + asset: The brand name to analyze (sentiment is extracted on name, not id). + start_date: YYYY-MM-DD, ET, inclusive + end_date: YYYY-MM-DD, ET, inclusive + comparison_start_date: YYYY-MM-DD, ET, inclusive (with end). + comparison_end_date: YYYY-MM-DD, ET, inclusive (with start). + group_by: Body parameter. + metrics: Body parameter. + interval: Body parameter. + filter: Body parameter. + sort: Body parameter. + include_cited_websites: Return cited websites per row (only when grouping by `theme`/`claim`). + limit: Page size; default 10, max 50. + max_results: Stream endpoint only: cap the number of streamed rows (default: all). + cursor: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + SentimentQueryV2V2ReportsPostResponse: Successful Response + + Example: + ```python + sentiment = await client.reports.sentiment.query_v2_v2_reports_post( + category_id="", + asset="", + start_date="", + end_date="", + interval="day", + include_cited_websites=False, + ) + ``` + """ + return await self._post( + "/v2/reports/sentiment", + body=await async_maybe_transform( + { + "category_id": category_id, + "asset": asset, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "group_by": group_by, + "metrics": metrics, + "interval": interval, + "filter": filter, + "sort": sort, + "include_cited_websites": include_cited_websites, + "limit": limit, + "max_results": max_results, + "cursor": cursor, + }, + sentiment_query_v2_v2_reports_post_params.SentimentQueryV2V2ReportsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=SentimentQueryV2V2ReportsPostResponse, + ) + + async def stream_v2_v2_reports_stream_post( + self, + *, + category_id: str, + asset: str, + start_date: str, + end_date: str, + comparison_start_date: Optional[str] | Omit = omit, + comparison_end_date: Optional[str] | Omit = omit, + group_by: Iterable[Literal["date", "model", "topic", "region", "prompt", "persona", "tag", "theme", "claim", "run", "competitor"]] | Omit = omit, + metrics: Optional[Iterable[Literal["positive_sentiment", "negative_sentiment", "occurrence"]]] | Omit = omit, + interval: Literal["day", "week", "month"] | Omit = omit, + filter: Optional[sentiment_stream_v2_v2_reports_stream_post_params.Filter] | Omit = omit, + sort: sentiment_stream_v2_v2_reports_stream_post_params.Sort | Omit = omit, + include_cited_websites: bool | Omit = omit, + limit: Optional[int] | Omit = omit, + max_results: Optional[int] | Omit = omit, + cursor: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AsyncStream[str]: + """ + Stream Sentiment V2 + + Args: + category_id: Body parameter. + asset: The brand name to analyze (sentiment is extracted on name, not id). + start_date: YYYY-MM-DD, ET, inclusive + end_date: YYYY-MM-DD, ET, inclusive + comparison_start_date: YYYY-MM-DD, ET, inclusive (with end). + comparison_end_date: YYYY-MM-DD, ET, inclusive (with start). + group_by: Body parameter. + metrics: Body parameter. + interval: Body parameter. + filter: Body parameter. + sort: Body parameter. + include_cited_websites: Return cited websites per row (only when grouping by `theme`/`claim`). + limit: Page size; default 10, max 50. + max_results: Stream endpoint only: cap the number of streamed rows (default: all). + cursor: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AsyncStream[str]: Successful Response + + Example: + ```python + stream = await client.reports.sentiment.stream_v2_v2_reports_stream_post( + category_id="", + asset="", + start_date="", + end_date="", + interval="day", + include_cited_websites=False, + ) + async for event in stream: + print(event) + ``` + """ + extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} + return await self._post( + "/v2/reports/sentiment/stream", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=str, + stream=True, + stream_cls=AsyncStream[str], + ) + + +class SentimentResourceWithRawResponse: + def __init__(self, sentiment: SentimentResource) -> None: + self._sentiment = sentiment + + self.query_v1_reports_post = to_raw_response_wrapper( + sentiment.query_v1_reports_post, + ) + self.stream_v1_reports_stream_post = to_raw_response_wrapper( + sentiment.stream_v1_reports_stream_post, + ) + self.query_v2_v2_reports_post = to_raw_response_wrapper( + sentiment.query_v2_v2_reports_post, + ) + self.stream_v2_v2_reports_stream_post = to_raw_response_wrapper( + sentiment.stream_v2_v2_reports_stream_post, + ) + + +class AsyncSentimentResourceWithRawResponse: + def __init__(self, sentiment: AsyncSentimentResource) -> None: + self._sentiment = sentiment + + self.query_v1_reports_post = async_to_raw_response_wrapper( + sentiment.query_v1_reports_post, + ) + self.stream_v1_reports_stream_post = async_to_raw_response_wrapper( + sentiment.stream_v1_reports_stream_post, + ) + self.query_v2_v2_reports_post = async_to_raw_response_wrapper( + sentiment.query_v2_v2_reports_post, + ) + self.stream_v2_v2_reports_stream_post = async_to_raw_response_wrapper( + sentiment.stream_v2_v2_reports_stream_post, + ) + + +class SentimentResourceWithStreamingResponse: + def __init__(self, sentiment: SentimentResource) -> None: + self._sentiment = sentiment + + self.query_v1_reports_post = to_streamed_response_wrapper( + sentiment.query_v1_reports_post, + ) + self.stream_v1_reports_stream_post = to_streamed_response_wrapper( + sentiment.stream_v1_reports_stream_post, + ) + self.query_v2_v2_reports_post = to_streamed_response_wrapper( + sentiment.query_v2_v2_reports_post, + ) + self.stream_v2_v2_reports_stream_post = to_streamed_response_wrapper( + sentiment.stream_v2_v2_reports_stream_post, + ) + + +class AsyncSentimentResourceWithStreamingResponse: + def __init__(self, sentiment: AsyncSentimentResource) -> None: + self._sentiment = sentiment + + self.query_v1_reports_post = async_to_streamed_response_wrapper( + sentiment.query_v1_reports_post, + ) + self.stream_v1_reports_stream_post = async_to_streamed_response_wrapper( + sentiment.stream_v1_reports_stream_post, + ) + self.query_v2_v2_reports_post = async_to_streamed_response_wrapper( + sentiment.query_v2_v2_reports_post, + ) + self.stream_v2_v2_reports_stream_post = async_to_streamed_response_wrapper( + sentiment.stream_v2_v2_reports_stream_post, + ) diff --git a/src/resources/reports/shopping.py b/src/resources/reports/shopping.py new file mode 100644 index 00000000..5865a7e0 --- /dev/null +++ b/src/resources/reports/shopping.py @@ -0,0 +1,2276 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +import httpx + +from typing import Dict, Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Literal +from ..._types import SequenceNotStr + +from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given +from ..._utils import path_template, maybe_transform, async_maybe_transform +from ..._compat import cached_property +from ..._resource import SyncAPIResource, AsyncAPIResource +from ..._response import ( + to_raw_response_wrapper, + to_streamed_response_wrapper, + async_to_raw_response_wrapper, + async_to_streamed_response_wrapper, +) +from ..._base_client import make_request_options +from ...types.reports.shopping_visibility_response import ShoppingVisibilityResponse, Data +from ...types.region_id_filter import RegionIdFilter +from ...types.model_id_filter import ModelIdFilter +from ...types.topic_id_filter import TopicIdFilter +from ...types.tag_id_filter import TagIdFilter +from ...types.prompt_id_filter import PromptIdFilter +from ...types.persona_id_filter import PersonaIdFilter +from ...types.reports.brand_name_filter import BrandNameFilter +from ...types.reports.merchant_name_filter import MerchantNameFilter +from ...types.reports.product_name_filter import ProductNameFilter +from ...types.pagination import Pagination +from ...types.reports import shopping_visibility_params +from ...types.reports.shopping_item_visibility_response import ShoppingItemVisibilityResponse, Data +from ...types.region_id_filter import RegionIdFilter +from ...types.model_id_filter import ModelIdFilter +from ...types.topic_id_filter import TopicIdFilter +from ...types.tag_id_filter import TagIdFilter +from ...types.prompt_id_filter import PromptIdFilter +from ...types.persona_id_filter import PersonaIdFilter +from ...types.reports.brand_name_filter import BrandNameFilter +from ...types.reports.merchant_name_filter import MerchantNameFilter +from ...types.reports.product_name_filter import ProductNameFilter +from ...types.pagination import Pagination +from ...types.reports import shopping_item_visibility_params +from ...types.reports.shopping_merchant_distribution_response import ShoppingMerchantDistributionResponse, Data +from ...types.region_id_filter import RegionIdFilter +from ...types.model_id_filter import ModelIdFilter +from ...types.topic_id_filter import TopicIdFilter +from ...types.tag_id_filter import TagIdFilter +from ...types.prompt_id_filter import PromptIdFilter +from ...types.persona_id_filter import PersonaIdFilter +from ...types.reports.brand_name_filter import BrandNameFilter +from ...types.reports.merchant_name_filter import MerchantNameFilter +from ...types.reports.product_name_filter import ProductNameFilter +from ...types.pagination import Pagination +from ...types.reports import shopping_merchant_distribution_params +from ...types.reports.shopping_merchant_visibility_by_brand_response import ShoppingMerchantVisibilityByBrandResponse, Data +from ...types.region_id_filter import RegionIdFilter +from ...types.model_id_filter import ModelIdFilter +from ...types.topic_id_filter import TopicIdFilter +from ...types.tag_id_filter import TagIdFilter +from ...types.prompt_id_filter import PromptIdFilter +from ...types.persona_id_filter import PersonaIdFilter +from ...types.reports.brand_name_filter import BrandNameFilter +from ...types.reports.merchant_name_filter import MerchantNameFilter +from ...types.reports.product_name_filter import ProductNameFilter +from ...types.pagination import Pagination +from ...types.reports import shopping_merchant_visibility_by_brand_params +from ...types.reports.shopping_merchant_by_items_response import ShoppingMerchantByItemsResponse, Data +from ...types.region_id_filter import RegionIdFilter +from ...types.model_id_filter import ModelIdFilter +from ...types.topic_id_filter import TopicIdFilter +from ...types.tag_id_filter import TagIdFilter +from ...types.prompt_id_filter import PromptIdFilter +from ...types.persona_id_filter import PersonaIdFilter +from ...types.reports.brand_name_filter import BrandNameFilter +from ...types.reports.merchant_name_filter import MerchantNameFilter +from ...types.reports.product_name_filter import ProductNameFilter +from ...types.pagination import Pagination +from ...types.reports import shopping_merchant_by_items_params +from ...types.reports.shopping_all_items_with_merchants_response import ShoppingAllItemsWithMerchantsResponse, Data +from ...types.region_id_filter import RegionIdFilter +from ...types.model_id_filter import ModelIdFilter +from ...types.topic_id_filter import TopicIdFilter +from ...types.tag_id_filter import TagIdFilter +from ...types.prompt_id_filter import PromptIdFilter +from ...types.persona_id_filter import PersonaIdFilter +from ...types.reports.brand_name_filter import BrandNameFilter +from ...types.reports.merchant_name_filter import MerchantNameFilter +from ...types.reports.product_name_filter import ProductNameFilter +from ...types.pagination import Pagination +from ...types.reports import shopping_all_items_with_merchants_params +from ...types.reports.shopping_trigger_rate_response import ShoppingTriggerRateResponse, Data +from ...types.region_id_filter import RegionIdFilter +from ...types.model_id_filter import ModelIdFilter +from ...types.topic_id_filter import TopicIdFilter +from ...types.tag_id_filter import TagIdFilter +from ...types.prompt_id_filter import PromptIdFilter +from ...types.persona_id_filter import PersonaIdFilter +from ...types.reports.brand_name_filter import BrandNameFilter +from ...types.reports.merchant_name_filter import MerchantNameFilter +from ...types.reports.product_name_filter import ProductNameFilter +from ...types.pagination import Pagination +from ...types.reports import shopping_trigger_rate_params +from ...types.reports.shopping_merchant_share_response import ShoppingMerchantShareResponse, Data +from ...types.region_id_filter import RegionIdFilter +from ...types.model_id_filter import ModelIdFilter +from ...types.topic_id_filter import TopicIdFilter +from ...types.tag_id_filter import TagIdFilter +from ...types.prompt_id_filter import PromptIdFilter +from ...types.persona_id_filter import PersonaIdFilter +from ...types.reports.brand_name_filter import BrandNameFilter +from ...types.reports.merchant_name_filter import MerchantNameFilter +from ...types.reports.product_name_filter import ProductNameFilter +from ...types.pagination import Pagination +from ...types.reports import shopping_merchant_share_params +from ...types.reports.shopping_product_merchant_urls_response import ShoppingProductMerchantUrlsResponse, Data +from ...types.reports import shopping_product_merchant_urls_params +from ...types.reports.shopping_executions_response import ShoppingExecutionsResponse, Data +from ...types.region_id_filter import RegionIdFilter +from ...types.model_id_filter import ModelIdFilter +from ...types.topic_id_filter import TopicIdFilter +from ...types.tag_id_filter import TagIdFilter +from ...types.prompt_id_filter import PromptIdFilter +from ...types.persona_id_filter import PersonaIdFilter +from ...types.reports.brand_name_filter import BrandNameFilter +from ...types.reports.merchant_name_filter import MerchantNameFilter +from ...types.reports.product_name_filter import ProductNameFilter +from ...types.pagination import Pagination +from ...types.reports import shopping_executions_params + +__all__ = ["ShoppingResource", "AsyncShoppingResource"] + + +class ShoppingResource(SyncAPIResource): + + @cached_property + def with_raw_response(self) -> ShoppingResourceWithRawResponse: + return ShoppingResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> ShoppingResourceWithStreamingResponse: + return ShoppingResourceWithStreamingResponse(self) + + def visibility( + self, + *, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, + comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + filters: Iterable[object] | Omit = omit, + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + include_count: bool | Omit = omit, + tag_filter_type: Literal["any", "all"] | Omit = omit, + include_no_tag: bool | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + dimensions: Iterable[Literal["period", "asset_name", "date", "model_id", "topic_id", "region_id", "prompt_id", "prompt"]] | Omit = omit, + metrics: Iterable[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "average_position_rank", "position1_percentage", "position2_percentage", "position3_percentage", "position_above3_percentage", "total_count"]] | Omit = omit, + owned_asset_names: SequenceNotStr[str] | Omit = omit, + search_asset: Optional[str] | Omit = omit, + include_asset: Optional[str] | Omit = omit, + include_asset_only: bool | Omit = omit, + include_assets_only: SequenceNotStr[str] | Omit = omit, + rank_by: Literal["visibility_score", "average_position"] | Omit = omit, + include_position_frequency: bool | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ShoppingVisibilityResponse: + """ + Shopping Visibility + + Args: + category_id: Body parameter. + start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + end_date: End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + date_interval: Body parameter. + filters: Body parameter. + order_by: Body parameter. + pagination: Body parameter. + include_count: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + exclude_topic_ids: Body parameter. + dimensions: Body parameter. + metrics: Body parameter. + owned_asset_names: Body parameter. + search_asset: Body parameter. + include_asset: Body parameter. + include_asset_only: Body parameter. + include_assets_only: Body parameter. + rank_by: Body parameter. + include_position_frequency: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ShoppingVisibilityResponse: Successful Response + + Example: + ```python + shopping = client.reports.shopping.visibility( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + include_asset_only=False, + rank_by="visibility_score", + include_position_frequency=False, + ) + ``` + """ + return self._post( + "/v1/reports/shopping/visibility", + body=maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "owned_asset_names": owned_asset_names, + "search_asset": search_asset, + "include_asset": include_asset, + "include_asset_only": include_asset_only, + "include_assets_only": include_assets_only, + "rank_by": rank_by, + "include_position_frequency": include_position_frequency, + }, + shopping_visibility_params.ShoppingVisibilityParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ShoppingVisibilityResponse, + ) + + def item_visibility( + self, + *, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, + comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + filters: Iterable[object] | Omit = omit, + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + include_count: bool | Omit = omit, + tag_filter_type: Literal["any", "all"] | Omit = omit, + include_no_tag: bool | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + dimensions: Iterable[Literal["period", "product_name", "brand_name", "date", "topic_id", "prompt_id", "prompt", "product_url", "product_image_urls", "product_price"]] | Omit = omit, + metrics: Iterable[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "position1_percentage", "position2_percentage", "position3_percentage", "position_above3_percentage", "product_rating", "product_num_reviews", "total_count"]] | Omit = omit, + owned_asset_names: SequenceNotStr[str] | Omit = omit, + include_items: SequenceNotStr[str] | Omit = omit, + search_item: Optional[str] | Omit = omit, + merchant_filter_type: Literal["any", "all"] | Omit = omit, + include_competitors: bool | Omit = omit, + target_product: Optional[str] | Omit = omit, + competitor_limit: int | Omit = omit, + include_position_frequency: bool | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ShoppingItemVisibilityResponse: + """ + Shopping Item Visibility + + Args: + category_id: Body parameter. + start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + end_date: End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + date_interval: Body parameter. + filters: Body parameter. + order_by: Body parameter. + pagination: Body parameter. + include_count: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + exclude_topic_ids: Body parameter. + dimensions: Body parameter. + metrics: Body parameter. + owned_asset_names: Body parameter. + include_items: Body parameter. + search_item: Body parameter. + merchant_filter_type: Body parameter. + include_competitors: Body parameter. + target_product: Body parameter. + competitor_limit: Body parameter. + include_position_frequency: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ShoppingItemVisibilityResponse: Successful Response + + Example: + ```python + shopping = client.reports.shopping.item_visibility( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + merchant_filter_type="any", + include_competitors=False, + competitor_limit=5, + include_position_frequency=False, + ) + ``` + """ + return self._post( + "/v1/reports/shopping/item-visibility", + body=maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "owned_asset_names": owned_asset_names, + "include_items": include_items, + "search_item": search_item, + "merchant_filter_type": merchant_filter_type, + "include_competitors": include_competitors, + "target_product": target_product, + "competitor_limit": competitor_limit, + "include_position_frequency": include_position_frequency, + }, + shopping_item_visibility_params.ShoppingItemVisibilityParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ShoppingItemVisibilityResponse, + ) + + def merchant_distribution( + self, + *, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, + comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + filters: Iterable[object] | Omit = omit, + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + include_count: bool | Omit = omit, + tag_filter_type: Literal["any", "all"] | Omit = omit, + include_no_tag: bool | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + dimensions: Iterable[Literal["period", "merchant_name", "date", "owned_asset_name"]] | Omit = omit, + metrics: Iterable[Literal["offer_count", "product_count", "average_rank", "share_of_offers", "visibility_rank", "total_count"]] | Omit = omit, + owned_asset_names: SequenceNotStr[str] | Omit = omit, + search_merchant: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ShoppingMerchantDistributionResponse: + """ + Shopping Merchant Distribution + + Args: + category_id: Body parameter. + start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + end_date: End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + date_interval: Body parameter. + filters: Body parameter. + order_by: Body parameter. + pagination: Body parameter. + include_count: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + exclude_topic_ids: Body parameter. + dimensions: Body parameter. + metrics: Body parameter. + owned_asset_names: Body parameter. + search_merchant: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ShoppingMerchantDistributionResponse: Successful Response + + Example: + ```python + shopping = client.reports.shopping.merchant_distribution( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + ) + ``` + """ + return self._post( + "/v1/reports/shopping/merchant-distribution", + body=maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "owned_asset_names": owned_asset_names, + "search_merchant": search_merchant, + }, + shopping_merchant_distribution_params.ShoppingMerchantDistributionParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ShoppingMerchantDistributionResponse, + ) + + def merchant_visibility_by_brand( + self, + *, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, + comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + filters: Iterable[object] | Omit = omit, + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + include_count: bool | Omit = omit, + tag_filter_type: Literal["any", "all"] | Omit = omit, + include_no_tag: bool | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + dimensions: Iterable[Literal["period", "merchant_name", "brand_name"]] | Omit = omit, + metrics: Iterable[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "total_count"]] | Omit = omit, + owned_asset_names: SequenceNotStr[str] | Omit = omit, + search_brand: Optional[str] | Omit = omit, + include_brand: Optional[str] | Omit = omit, + include_brand_only: bool | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ShoppingMerchantVisibilityByBrandResponse: + """ + Shopping Merchant Visibility By Brand + + Args: + category_id: Body parameter. + start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + end_date: End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + date_interval: Body parameter. + filters: Body parameter. + order_by: Body parameter. + pagination: Body parameter. + include_count: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + exclude_topic_ids: Body parameter. + dimensions: Body parameter. + metrics: Body parameter. + owned_asset_names: Body parameter. + search_brand: Body parameter. + include_brand: Body parameter. + include_brand_only: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ShoppingMerchantVisibilityByBrandResponse: Successful Response + + Example: + ```python + shopping = client.reports.shopping.merchant_visibility_by_brand( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + include_brand_only=False, + ) + ``` + """ + return self._post( + "/v1/reports/shopping/merchant-visibility-by-brand", + body=maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "owned_asset_names": owned_asset_names, + "search_brand": search_brand, + "include_brand": include_brand, + "include_brand_only": include_brand_only, + }, + shopping_merchant_visibility_by_brand_params.ShoppingMerchantVisibilityByBrandParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ShoppingMerchantVisibilityByBrandResponse, + ) + + def merchant_by_items( + self, + *, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, + comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + filters: Iterable[object] | Omit = omit, + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + include_count: bool | Omit = omit, + tag_filter_type: Literal["any", "all"] | Omit = omit, + include_no_tag: bool | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + dimensions: Iterable[Literal["period", "merchant_name", "product_name", "brand_name", "product_image_urls", "product_price", "merchant_prices", "has_instant_checkout", "delivery_options", "merchant_url"]] | Omit = omit, + metrics: Iterable[Literal["merchant_visibility", "product_visibility", "product_rank", "avg_position", "total_count"]] | Omit = omit, + product_name: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ShoppingMerchantByItemsResponse: + """ + Shopping Merchant By Items + + Args: + category_id: Body parameter. + start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + end_date: End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + date_interval: Body parameter. + filters: Body parameter. + order_by: Body parameter. + pagination: Body parameter. + include_count: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + exclude_topic_ids: Body parameter. + dimensions: Body parameter. + metrics: Body parameter. + product_name: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ShoppingMerchantByItemsResponse: Successful Response + + Example: + ```python + shopping = client.reports.shopping.merchant_by_items( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + ) + ``` + """ + return self._post( + "/v1/reports/shopping/merchant-by-items", + body=maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "product_name": product_name, + }, + shopping_merchant_by_items_params.ShoppingMerchantByItemsParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ShoppingMerchantByItemsResponse, + ) + + def all_items_with_merchants( + self, + *, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, + comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + filters: Iterable[object] | Omit = omit, + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + include_count: bool | Omit = omit, + tag_filter_type: Literal["any", "all"] | Omit = omit, + include_no_tag: bool | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + dimensions: Iterable[Literal["period", "product_name", "brand_name", "product_url", "product_image_urls", "product_price", "merchant_names", "merchant_prices"]] | Omit = omit, + metrics: Iterable[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "product_rating", "product_num_reviews", "total_count"]] | Omit = omit, + owned_asset_names: SequenceNotStr[str] | Omit = omit, + include_items: SequenceNotStr[str] | Omit = omit, + search_item: Optional[str] | Omit = omit, + merchant_filter_type: Literal["any", "all"] | Omit = omit, + rank_by: Literal["visibility", "average_position", "name"] | Omit = omit, + sort_order: Literal["asc", "desc"] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ShoppingAllItemsWithMerchantsResponse: + """ + Shopping All Items With Merchants + + Args: + category_id: Body parameter. + start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + end_date: End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + date_interval: Body parameter. + filters: Body parameter. + order_by: Body parameter. + pagination: Body parameter. + include_count: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + exclude_topic_ids: Body parameter. + dimensions: Body parameter. + metrics: Body parameter. + owned_asset_names: Body parameter. + include_items: Body parameter. + search_item: Body parameter. + merchant_filter_type: Body parameter. + rank_by: Body parameter. + sort_order: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ShoppingAllItemsWithMerchantsResponse: Successful Response + + Example: + ```python + shopping = client.reports.shopping.all_items_with_merchants( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + merchant_filter_type="any", + rank_by="visibility", + sort_order="desc", + ) + ``` + """ + return self._post( + "/v1/reports/shopping/all-items-with-merchants", + body=maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "owned_asset_names": owned_asset_names, + "include_items": include_items, + "search_item": search_item, + "merchant_filter_type": merchant_filter_type, + "rank_by": rank_by, + "sort_order": sort_order, + }, + shopping_all_items_with_merchants_params.ShoppingAllItemsWithMerchantsParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ShoppingAllItemsWithMerchantsResponse, + ) + + def trigger_rate( + self, + *, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, + comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + filters: Iterable[object] | Omit = omit, + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + include_count: bool | Omit = omit, + tag_filter_type: Literal["any", "all"] | Omit = omit, + include_no_tag: bool | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + dimensions: Iterable[Literal["period", "date", "model_id", "topic_id", "region_id", "persona_id", "prompt_id", "prompt"]] | Omit = omit, + metrics: Iterable[Literal["total_runs", "shopping_triggered_runs", "trigger_rate_percentage"]] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ShoppingTriggerRateResponse: + """ + Shopping Trigger Rate + + Args: + category_id: Body parameter. + start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + end_date: End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + date_interval: Body parameter. + filters: Body parameter. + order_by: Body parameter. + pagination: Body parameter. + include_count: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + exclude_topic_ids: Body parameter. + dimensions: Body parameter. + metrics: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ShoppingTriggerRateResponse: Successful Response + + Example: + ```python + shopping = client.reports.shopping.trigger_rate( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + ) + ``` + """ + return self._post( + "/v1/reports/shopping/trigger-rate", + body=maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + }, + shopping_trigger_rate_params.ShoppingTriggerRateParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ShoppingTriggerRateResponse, + ) + + def merchant_share( + self, + *, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, + comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + filters: Iterable[object] | Omit = omit, + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + include_count: bool | Omit = omit, + tag_filter_type: Literal["any", "all"] | Omit = omit, + include_no_tag: bool | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + dimensions: Iterable[Literal["period", "topic_id", "prompt_id"]] | Omit = omit, + metrics: Iterable[Literal["merchant_share"]] | Omit = omit, + target_asset_names: SequenceNotStr[str] | Omit = omit, + owned_asset_names: SequenceNotStr[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ShoppingMerchantShareResponse: + """ + Shopping Merchant Share + + Args: + category_id: Body parameter. + start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + end_date: End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + date_interval: Body parameter. + filters: Body parameter. + order_by: Body parameter. + pagination: Body parameter. + include_count: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + exclude_topic_ids: Body parameter. + dimensions: Body parameter. + metrics: Body parameter. + target_asset_names: Body parameter. + owned_asset_names: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ShoppingMerchantShareResponse: Successful Response + + Example: + ```python + shopping = client.reports.shopping.merchant_share( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + ) + ``` + """ + return self._post( + "/v1/reports/shopping/merchant-share", + body=maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "target_asset_names": target_asset_names, + "owned_asset_names": owned_asset_names, + }, + shopping_merchant_share_params.ShoppingMerchantShareParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ShoppingMerchantShareResponse, + ) + + def product_merchant_urls( + self, + *, + category_id: str, + product_names: SequenceNotStr[str], + start_date: Union[str, datetime], + end_date: Union[str, datetime], + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ShoppingProductMerchantUrlsResponse: + """ + Shopping Product Merchant Urls + + Args: + category_id: Body parameter. + product_names: Body parameter. + start_date: Body parameter. + end_date: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ShoppingProductMerchantUrlsResponse: Successful Response + + Example: + ```python + shopping = client.reports.shopping.product_merchant_urls( + category_id="", + product_names=[], + start_date="", + end_date="", + ) + ``` + """ + return self._post( + "/v1/reports/shopping/product-merchant-urls", + body=maybe_transform( + { + "category_id": category_id, + "product_names": product_names, + "start_date": start_date, + "end_date": end_date, + }, + shopping_product_merchant_urls_params.ShoppingProductMerchantUrlsParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ShoppingProductMerchantUrlsResponse, + ) + + def executions( + self, + *, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, + comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + filters: Iterable[object] | Omit = omit, + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + include_count: bool | Omit = omit, + tag_filter_type: Literal["any", "all"] | Omit = omit, + include_no_tag: bool | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + analysis_types: Iterable[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]] | Omit = omit, + analysis_filter_type: Literal["any", "all"] | Omit = omit, + owned_asset_names: SequenceNotStr[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ShoppingExecutionsResponse: + """ + Shopping Executions + + Args: + category_id: Body parameter. + start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + end_date: End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + date_interval: Body parameter. + filters: Body parameter. + order_by: Body parameter. + pagination: Body parameter. + include_count: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + exclude_topic_ids: Body parameter. + analysis_types: Body parameter. + analysis_filter_type: Body parameter. + owned_asset_names: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ShoppingExecutionsResponse: Successful Response + + Example: + ```python + shopping = client.reports.shopping.executions( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + analysis_filter_type="any", + ) + ``` + """ + return self._post( + "/v1/reports/shopping/executions", + body=maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "analysis_types": analysis_types, + "analysis_filter_type": analysis_filter_type, + "owned_asset_names": owned_asset_names, + }, + shopping_executions_params.ShoppingExecutionsParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ShoppingExecutionsResponse, + ) + + +class AsyncShoppingResource(AsyncAPIResource): + + @cached_property + def with_raw_response(self) -> AsyncShoppingResourceWithRawResponse: + return AsyncShoppingResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncShoppingResourceWithStreamingResponse: + return AsyncShoppingResourceWithStreamingResponse(self) + + async def visibility( + self, + *, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, + comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + filters: Iterable[object] | Omit = omit, + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + include_count: bool | Omit = omit, + tag_filter_type: Literal["any", "all"] | Omit = omit, + include_no_tag: bool | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + dimensions: Iterable[Literal["period", "asset_name", "date", "model_id", "topic_id", "region_id", "prompt_id", "prompt"]] | Omit = omit, + metrics: Iterable[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "average_position_rank", "position1_percentage", "position2_percentage", "position3_percentage", "position_above3_percentage", "total_count"]] | Omit = omit, + owned_asset_names: SequenceNotStr[str] | Omit = omit, + search_asset: Optional[str] | Omit = omit, + include_asset: Optional[str] | Omit = omit, + include_asset_only: bool | Omit = omit, + include_assets_only: SequenceNotStr[str] | Omit = omit, + rank_by: Literal["visibility_score", "average_position"] | Omit = omit, + include_position_frequency: bool | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ShoppingVisibilityResponse: + """ + Shopping Visibility + + Args: + category_id: Body parameter. + start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + end_date: End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + date_interval: Body parameter. + filters: Body parameter. + order_by: Body parameter. + pagination: Body parameter. + include_count: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + exclude_topic_ids: Body parameter. + dimensions: Body parameter. + metrics: Body parameter. + owned_asset_names: Body parameter. + search_asset: Body parameter. + include_asset: Body parameter. + include_asset_only: Body parameter. + include_assets_only: Body parameter. + rank_by: Body parameter. + include_position_frequency: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ShoppingVisibilityResponse: Successful Response + + Example: + ```python + shopping = await client.reports.shopping.visibility( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + include_asset_only=False, + rank_by="visibility_score", + include_position_frequency=False, + ) + ``` + """ + return await self._post( + "/v1/reports/shopping/visibility", + body=await async_maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "owned_asset_names": owned_asset_names, + "search_asset": search_asset, + "include_asset": include_asset, + "include_asset_only": include_asset_only, + "include_assets_only": include_assets_only, + "rank_by": rank_by, + "include_position_frequency": include_position_frequency, + }, + shopping_visibility_params.ShoppingVisibilityParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ShoppingVisibilityResponse, + ) + + async def item_visibility( + self, + *, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, + comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + filters: Iterable[object] | Omit = omit, + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + include_count: bool | Omit = omit, + tag_filter_type: Literal["any", "all"] | Omit = omit, + include_no_tag: bool | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + dimensions: Iterable[Literal["period", "product_name", "brand_name", "date", "topic_id", "prompt_id", "prompt", "product_url", "product_image_urls", "product_price"]] | Omit = omit, + metrics: Iterable[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "position1_percentage", "position2_percentage", "position3_percentage", "position_above3_percentage", "product_rating", "product_num_reviews", "total_count"]] | Omit = omit, + owned_asset_names: SequenceNotStr[str] | Omit = omit, + include_items: SequenceNotStr[str] | Omit = omit, + search_item: Optional[str] | Omit = omit, + merchant_filter_type: Literal["any", "all"] | Omit = omit, + include_competitors: bool | Omit = omit, + target_product: Optional[str] | Omit = omit, + competitor_limit: int | Omit = omit, + include_position_frequency: bool | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ShoppingItemVisibilityResponse: + """ + Shopping Item Visibility + + Args: + category_id: Body parameter. + start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + end_date: End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + date_interval: Body parameter. + filters: Body parameter. + order_by: Body parameter. + pagination: Body parameter. + include_count: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + exclude_topic_ids: Body parameter. + dimensions: Body parameter. + metrics: Body parameter. + owned_asset_names: Body parameter. + include_items: Body parameter. + search_item: Body parameter. + merchant_filter_type: Body parameter. + include_competitors: Body parameter. + target_product: Body parameter. + competitor_limit: Body parameter. + include_position_frequency: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ShoppingItemVisibilityResponse: Successful Response + + Example: + ```python + shopping = await client.reports.shopping.item_visibility( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + merchant_filter_type="any", + include_competitors=False, + competitor_limit=5, + include_position_frequency=False, + ) + ``` + """ + return await self._post( + "/v1/reports/shopping/item-visibility", + body=await async_maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "owned_asset_names": owned_asset_names, + "include_items": include_items, + "search_item": search_item, + "merchant_filter_type": merchant_filter_type, + "include_competitors": include_competitors, + "target_product": target_product, + "competitor_limit": competitor_limit, + "include_position_frequency": include_position_frequency, + }, + shopping_item_visibility_params.ShoppingItemVisibilityParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ShoppingItemVisibilityResponse, + ) + + async def merchant_distribution( + self, + *, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, + comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + filters: Iterable[object] | Omit = omit, + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + include_count: bool | Omit = omit, + tag_filter_type: Literal["any", "all"] | Omit = omit, + include_no_tag: bool | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + dimensions: Iterable[Literal["period", "merchant_name", "date", "owned_asset_name"]] | Omit = omit, + metrics: Iterable[Literal["offer_count", "product_count", "average_rank", "share_of_offers", "visibility_rank", "total_count"]] | Omit = omit, + owned_asset_names: SequenceNotStr[str] | Omit = omit, + search_merchant: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ShoppingMerchantDistributionResponse: + """ + Shopping Merchant Distribution + + Args: + category_id: Body parameter. + start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + end_date: End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + date_interval: Body parameter. + filters: Body parameter. + order_by: Body parameter. + pagination: Body parameter. + include_count: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + exclude_topic_ids: Body parameter. + dimensions: Body parameter. + metrics: Body parameter. + owned_asset_names: Body parameter. + search_merchant: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ShoppingMerchantDistributionResponse: Successful Response + + Example: + ```python + shopping = await client.reports.shopping.merchant_distribution( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + ) + ``` + """ + return await self._post( + "/v1/reports/shopping/merchant-distribution", + body=await async_maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "owned_asset_names": owned_asset_names, + "search_merchant": search_merchant, + }, + shopping_merchant_distribution_params.ShoppingMerchantDistributionParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ShoppingMerchantDistributionResponse, + ) + + async def merchant_visibility_by_brand( + self, + *, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, + comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + filters: Iterable[object] | Omit = omit, + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + include_count: bool | Omit = omit, + tag_filter_type: Literal["any", "all"] | Omit = omit, + include_no_tag: bool | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + dimensions: Iterable[Literal["period", "merchant_name", "brand_name"]] | Omit = omit, + metrics: Iterable[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "total_count"]] | Omit = omit, + owned_asset_names: SequenceNotStr[str] | Omit = omit, + search_brand: Optional[str] | Omit = omit, + include_brand: Optional[str] | Omit = omit, + include_brand_only: bool | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ShoppingMerchantVisibilityByBrandResponse: + """ + Shopping Merchant Visibility By Brand + + Args: + category_id: Body parameter. + start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + end_date: End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + date_interval: Body parameter. + filters: Body parameter. + order_by: Body parameter. + pagination: Body parameter. + include_count: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + exclude_topic_ids: Body parameter. + dimensions: Body parameter. + metrics: Body parameter. + owned_asset_names: Body parameter. + search_brand: Body parameter. + include_brand: Body parameter. + include_brand_only: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ShoppingMerchantVisibilityByBrandResponse: Successful Response + + Example: + ```python + shopping = await client.reports.shopping.merchant_visibility_by_brand( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + include_brand_only=False, + ) + ``` + """ + return await self._post( + "/v1/reports/shopping/merchant-visibility-by-brand", + body=await async_maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "owned_asset_names": owned_asset_names, + "search_brand": search_brand, + "include_brand": include_brand, + "include_brand_only": include_brand_only, + }, + shopping_merchant_visibility_by_brand_params.ShoppingMerchantVisibilityByBrandParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ShoppingMerchantVisibilityByBrandResponse, + ) + + async def merchant_by_items( + self, + *, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, + comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + filters: Iterable[object] | Omit = omit, + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + include_count: bool | Omit = omit, + tag_filter_type: Literal["any", "all"] | Omit = omit, + include_no_tag: bool | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + dimensions: Iterable[Literal["period", "merchant_name", "product_name", "brand_name", "product_image_urls", "product_price", "merchant_prices", "has_instant_checkout", "delivery_options", "merchant_url"]] | Omit = omit, + metrics: Iterable[Literal["merchant_visibility", "product_visibility", "product_rank", "avg_position", "total_count"]] | Omit = omit, + product_name: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ShoppingMerchantByItemsResponse: + """ + Shopping Merchant By Items + + Args: + category_id: Body parameter. + start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + end_date: End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + date_interval: Body parameter. + filters: Body parameter. + order_by: Body parameter. + pagination: Body parameter. + include_count: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + exclude_topic_ids: Body parameter. + dimensions: Body parameter. + metrics: Body parameter. + product_name: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ShoppingMerchantByItemsResponse: Successful Response + + Example: + ```python + shopping = await client.reports.shopping.merchant_by_items( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + ) + ``` + """ + return await self._post( + "/v1/reports/shopping/merchant-by-items", + body=await async_maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "product_name": product_name, + }, + shopping_merchant_by_items_params.ShoppingMerchantByItemsParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ShoppingMerchantByItemsResponse, + ) + + async def all_items_with_merchants( + self, + *, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, + comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + filters: Iterable[object] | Omit = omit, + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + include_count: bool | Omit = omit, + tag_filter_type: Literal["any", "all"] | Omit = omit, + include_no_tag: bool | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + dimensions: Iterable[Literal["period", "product_name", "brand_name", "product_url", "product_image_urls", "product_price", "merchant_names", "merchant_prices"]] | Omit = omit, + metrics: Iterable[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "product_rating", "product_num_reviews", "total_count"]] | Omit = omit, + owned_asset_names: SequenceNotStr[str] | Omit = omit, + include_items: SequenceNotStr[str] | Omit = omit, + search_item: Optional[str] | Omit = omit, + merchant_filter_type: Literal["any", "all"] | Omit = omit, + rank_by: Literal["visibility", "average_position", "name"] | Omit = omit, + sort_order: Literal["asc", "desc"] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ShoppingAllItemsWithMerchantsResponse: + """ + Shopping All Items With Merchants + + Args: + category_id: Body parameter. + start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + end_date: End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + date_interval: Body parameter. + filters: Body parameter. + order_by: Body parameter. + pagination: Body parameter. + include_count: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + exclude_topic_ids: Body parameter. + dimensions: Body parameter. + metrics: Body parameter. + owned_asset_names: Body parameter. + include_items: Body parameter. + search_item: Body parameter. + merchant_filter_type: Body parameter. + rank_by: Body parameter. + sort_order: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ShoppingAllItemsWithMerchantsResponse: Successful Response + + Example: + ```python + shopping = await client.reports.shopping.all_items_with_merchants( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + merchant_filter_type="any", + rank_by="visibility", + sort_order="desc", + ) + ``` + """ + return await self._post( + "/v1/reports/shopping/all-items-with-merchants", + body=await async_maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "owned_asset_names": owned_asset_names, + "include_items": include_items, + "search_item": search_item, + "merchant_filter_type": merchant_filter_type, + "rank_by": rank_by, + "sort_order": sort_order, + }, + shopping_all_items_with_merchants_params.ShoppingAllItemsWithMerchantsParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ShoppingAllItemsWithMerchantsResponse, + ) + + async def trigger_rate( + self, + *, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, + comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + filters: Iterable[object] | Omit = omit, + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + include_count: bool | Omit = omit, + tag_filter_type: Literal["any", "all"] | Omit = omit, + include_no_tag: bool | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + dimensions: Iterable[Literal["period", "date", "model_id", "topic_id", "region_id", "persona_id", "prompt_id", "prompt"]] | Omit = omit, + metrics: Iterable[Literal["total_runs", "shopping_triggered_runs", "trigger_rate_percentage"]] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ShoppingTriggerRateResponse: + """ + Shopping Trigger Rate + + Args: + category_id: Body parameter. + start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + end_date: End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + date_interval: Body parameter. + filters: Body parameter. + order_by: Body parameter. + pagination: Body parameter. + include_count: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + exclude_topic_ids: Body parameter. + dimensions: Body parameter. + metrics: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ShoppingTriggerRateResponse: Successful Response + + Example: + ```python + shopping = await client.reports.shopping.trigger_rate( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + ) + ``` + """ + return await self._post( + "/v1/reports/shopping/trigger-rate", + body=await async_maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + }, + shopping_trigger_rate_params.ShoppingTriggerRateParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ShoppingTriggerRateResponse, + ) + + async def merchant_share( + self, + *, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, + comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + filters: Iterable[object] | Omit = omit, + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + include_count: bool | Omit = omit, + tag_filter_type: Literal["any", "all"] | Omit = omit, + include_no_tag: bool | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + dimensions: Iterable[Literal["period", "topic_id", "prompt_id"]] | Omit = omit, + metrics: Iterable[Literal["merchant_share"]] | Omit = omit, + target_asset_names: SequenceNotStr[str] | Omit = omit, + owned_asset_names: SequenceNotStr[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ShoppingMerchantShareResponse: + """ + Shopping Merchant Share + + Args: + category_id: Body parameter. + start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + end_date: End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + date_interval: Body parameter. + filters: Body parameter. + order_by: Body parameter. + pagination: Body parameter. + include_count: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + exclude_topic_ids: Body parameter. + dimensions: Body parameter. + metrics: Body parameter. + target_asset_names: Body parameter. + owned_asset_names: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ShoppingMerchantShareResponse: Successful Response + + Example: + ```python + shopping = await client.reports.shopping.merchant_share( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + ) + ``` + """ + return await self._post( + "/v1/reports/shopping/merchant-share", + body=await async_maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "target_asset_names": target_asset_names, + "owned_asset_names": owned_asset_names, + }, + shopping_merchant_share_params.ShoppingMerchantShareParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ShoppingMerchantShareResponse, + ) + + async def product_merchant_urls( + self, + *, + category_id: str, + product_names: SequenceNotStr[str], + start_date: Union[str, datetime], + end_date: Union[str, datetime], + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ShoppingProductMerchantUrlsResponse: + """ + Shopping Product Merchant Urls + + Args: + category_id: Body parameter. + product_names: Body parameter. + start_date: Body parameter. + end_date: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ShoppingProductMerchantUrlsResponse: Successful Response + + Example: + ```python + shopping = await client.reports.shopping.product_merchant_urls( + category_id="", + product_names=[], + start_date="", + end_date="", + ) + ``` + """ + return await self._post( + "/v1/reports/shopping/product-merchant-urls", + body=await async_maybe_transform( + { + "category_id": category_id, + "product_names": product_names, + "start_date": start_date, + "end_date": end_date, + }, + shopping_product_merchant_urls_params.ShoppingProductMerchantUrlsParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ShoppingProductMerchantUrlsResponse, + ) + + async def executions( + self, + *, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, + comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + filters: Iterable[object] | Omit = omit, + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + include_count: bool | Omit = omit, + tag_filter_type: Literal["any", "all"] | Omit = omit, + include_no_tag: bool | Omit = omit, + exclude_topic_ids: bool | Omit = omit, + analysis_types: Iterable[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]] | Omit = omit, + analysis_filter_type: Literal["any", "all"] | Omit = omit, + owned_asset_names: SequenceNotStr[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ShoppingExecutionsResponse: + """ + Shopping Executions + + Args: + category_id: Body parameter. + start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + end_date: End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + comparison_start_date: Body parameter. + comparison_end_date: Body parameter. + date_interval: Body parameter. + filters: Body parameter. + order_by: Body parameter. + pagination: Body parameter. + include_count: Body parameter. + tag_filter_type: Body parameter. + include_no_tag: Body parameter. + exclude_topic_ids: Body parameter. + analysis_types: Body parameter. + analysis_filter_type: Body parameter. + owned_asset_names: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ShoppingExecutionsResponse: Successful Response + + Example: + ```python + shopping = await client.reports.shopping.executions( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + analysis_filter_type="any", + ) + ``` + """ + return await self._post( + "/v1/reports/shopping/executions", + body=await async_maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "analysis_types": analysis_types, + "analysis_filter_type": analysis_filter_type, + "owned_asset_names": owned_asset_names, + }, + shopping_executions_params.ShoppingExecutionsParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ShoppingExecutionsResponse, + ) + + +class ShoppingResourceWithRawResponse: + def __init__(self, shopping: ShoppingResource) -> None: + self._shopping = shopping + + self.visibility = to_raw_response_wrapper( + shopping.visibility, + ) + self.item_visibility = to_raw_response_wrapper( + shopping.item_visibility, + ) + self.merchant_distribution = to_raw_response_wrapper( + shopping.merchant_distribution, + ) + self.merchant_visibility_by_brand = to_raw_response_wrapper( + shopping.merchant_visibility_by_brand, + ) + self.merchant_by_items = to_raw_response_wrapper( + shopping.merchant_by_items, + ) + self.all_items_with_merchants = to_raw_response_wrapper( + shopping.all_items_with_merchants, + ) + self.trigger_rate = to_raw_response_wrapper( + shopping.trigger_rate, + ) + self.merchant_share = to_raw_response_wrapper( + shopping.merchant_share, + ) + self.product_merchant_urls = to_raw_response_wrapper( + shopping.product_merchant_urls, + ) + self.executions = to_raw_response_wrapper( + shopping.executions, + ) + + +class AsyncShoppingResourceWithRawResponse: + def __init__(self, shopping: AsyncShoppingResource) -> None: + self._shopping = shopping + + self.visibility = async_to_raw_response_wrapper( + shopping.visibility, + ) + self.item_visibility = async_to_raw_response_wrapper( + shopping.item_visibility, + ) + self.merchant_distribution = async_to_raw_response_wrapper( + shopping.merchant_distribution, + ) + self.merchant_visibility_by_brand = async_to_raw_response_wrapper( + shopping.merchant_visibility_by_brand, + ) + self.merchant_by_items = async_to_raw_response_wrapper( + shopping.merchant_by_items, + ) + self.all_items_with_merchants = async_to_raw_response_wrapper( + shopping.all_items_with_merchants, + ) + self.trigger_rate = async_to_raw_response_wrapper( + shopping.trigger_rate, + ) + self.merchant_share = async_to_raw_response_wrapper( + shopping.merchant_share, + ) + self.product_merchant_urls = async_to_raw_response_wrapper( + shopping.product_merchant_urls, + ) + self.executions = async_to_raw_response_wrapper( + shopping.executions, + ) + + +class ShoppingResourceWithStreamingResponse: + def __init__(self, shopping: ShoppingResource) -> None: + self._shopping = shopping + + self.visibility = to_streamed_response_wrapper( + shopping.visibility, + ) + self.item_visibility = to_streamed_response_wrapper( + shopping.item_visibility, + ) + self.merchant_distribution = to_streamed_response_wrapper( + shopping.merchant_distribution, + ) + self.merchant_visibility_by_brand = to_streamed_response_wrapper( + shopping.merchant_visibility_by_brand, + ) + self.merchant_by_items = to_streamed_response_wrapper( + shopping.merchant_by_items, + ) + self.all_items_with_merchants = to_streamed_response_wrapper( + shopping.all_items_with_merchants, + ) + self.trigger_rate = to_streamed_response_wrapper( + shopping.trigger_rate, + ) + self.merchant_share = to_streamed_response_wrapper( + shopping.merchant_share, + ) + self.product_merchant_urls = to_streamed_response_wrapper( + shopping.product_merchant_urls, + ) + self.executions = to_streamed_response_wrapper( + shopping.executions, + ) + + +class AsyncShoppingResourceWithStreamingResponse: + def __init__(self, shopping: AsyncShoppingResource) -> None: + self._shopping = shopping + + self.visibility = async_to_streamed_response_wrapper( + shopping.visibility, + ) + self.item_visibility = async_to_streamed_response_wrapper( + shopping.item_visibility, + ) + self.merchant_distribution = async_to_streamed_response_wrapper( + shopping.merchant_distribution, + ) + self.merchant_visibility_by_brand = async_to_streamed_response_wrapper( + shopping.merchant_visibility_by_brand, + ) + self.merchant_by_items = async_to_streamed_response_wrapper( + shopping.merchant_by_items, + ) + self.all_items_with_merchants = async_to_streamed_response_wrapper( + shopping.all_items_with_merchants, + ) + self.trigger_rate = async_to_streamed_response_wrapper( + shopping.trigger_rate, + ) + self.merchant_share = async_to_streamed_response_wrapper( + shopping.merchant_share, + ) + self.product_merchant_urls = async_to_streamed_response_wrapper( + shopping.product_merchant_urls, + ) + self.executions = async_to_streamed_response_wrapper( + shopping.executions, + ) diff --git a/src/resources/reports/visibility.py b/src/resources/reports/visibility.py new file mode 100644 index 00000000..84b2b2a5 --- /dev/null +++ b/src/resources/reports/visibility.py @@ -0,0 +1,728 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +import httpx + +from typing import Dict, Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Literal +from ..._types import SequenceNotStr + +from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given +from ..._utils import path_template, maybe_transform, async_maybe_transform +from ..._compat import cached_property +from ..._resource import SyncAPIResource, AsyncAPIResource +from ..._response import ( + to_raw_response_wrapper, + to_streamed_response_wrapper, + async_to_raw_response_wrapper, + async_to_streamed_response_wrapper, +) +from ..._base_client import make_request_options +from ..._streaming import Stream, AsyncStream +from ...types.report_response import ReportResponse +from ...types.pagination import Pagination +from ...types.region_id_filter import RegionIdFilter +from ...types.region_name_filter import RegionNameFilter +from ...types.model_id_filter import ModelIdFilter +from ...types.topic_id_filter import TopicIdFilter +from ...types.topic_name_filter import TopicNameFilter +from ...types.tag_id_filter import TagIdFilter +from ...types.tag_name_filter import TagNameFilter +from ...types.prompt_id_filter import PromptIdFilter +from ...types.prompt_filter import PromptFilter +from ...types.persona_id_filter import PersonaIdFilter +from ...types.reports import visibility_query_v1_reports_post_params +from ...types.reports.visibility_stream_v1_reports_stream_post_response import VisibilityStreamV1ReportsStreamPostResponse, Query, VisibilityStreamV1ReportsStreamPostResponse2 +from ...types.pagination import Pagination +from ...types.region_id_filter import RegionIdFilter +from ...types.region_name_filter import RegionNameFilter +from ...types.model_id_filter import ModelIdFilter +from ...types.topic_id_filter import TopicIdFilter +from ...types.topic_name_filter import TopicNameFilter +from ...types.tag_id_filter import TagIdFilter +from ...types.tag_name_filter import TagNameFilter +from ...types.prompt_id_filter import PromptIdFilter +from ...types.prompt_filter import PromptFilter +from ...types.persona_id_filter import PersonaIdFilter +from ...types.reports import visibility_stream_v1_reports_stream_post_params +from ...types.reports.visibility_query_v2_v2_reports_post_response import VisibilityQueryV2V2ReportsPostResponse +from ...types.reports import visibility_query_v2_v2_reports_post_params +from ...types.reports import visibility_stream_v2_v2_reports_stream_post_params + +__all__ = ["VisibilityResource", "AsyncVisibilityResource"] + + +class VisibilityResource(SyncAPIResource): + + @cached_property + def with_raw_response(self) -> VisibilityResourceWithRawResponse: + return VisibilityResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> VisibilityResourceWithStreamingResponse: + return VisibilityResourceWithStreamingResponse(self) + + def query_v1_reports_post( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "prompt", "prompt_id", "tag", "persona"]] | Omit = omit, + metrics: Iterable[Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[object] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Query visibility report. + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the visibility report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + visibility = client.reports.visibility.query_v1_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", + ) + ``` + """ + return self._post( + "/v1/reports/visibility", + body=maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + visibility_query_v1_reports_post_params.VisibilityQueryV1ReportsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ReportResponse, + ) + + def stream_v1_reports_stream_post( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "prompt", "prompt_id", "tag", "persona"]] | Omit = omit, + metrics: Iterable[Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[object] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Stream[VisibilityStreamV1ReportsStreamPostResponse]: + """ + Stream Visibility + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Body parameter. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the visibility report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + Stream[VisibilityStreamV1ReportsStreamPostResponse]: Server-sent events stream. Emits a `summary` event first, then one `row` event per streamed row. + + Example: + ```python + stream = client.reports.visibility.stream_v1_reports_stream_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", + ) + for event in stream: + print(event) + ``` + """ + extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} + return self._post( + "/v1/reports/visibility/stream", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=VisibilityStreamV1ReportsStreamPostResponse, + stream=True, + stream_cls=Stream[VisibilityStreamV1ReportsStreamPostResponse], + ) + + def query_v2_v2_reports_post( + self, + *, + category_id: str, + start_date: str, + end_date: str, + group_by: Iterable[Literal["date", "model", "topic", "region", "prompt", "persona"]] | Omit = omit, + metrics: Optional[Iterable[Literal["visibility_score", "share_of_voice", "average_position"]]] | Omit = omit, + interval: Literal["day", "week", "month"] | Omit = omit, + scope: Literal["owned", "all"] | Omit = omit, + assets: Optional[Union[str, SequenceNotStr[str], object]] | Omit = omit, + filter: Optional[visibility_query_v2_v2_reports_post_params.Filter] | Omit = omit, + sort: visibility_query_v2_v2_reports_post_params.Sort | Omit = omit, + limit: Optional[int] | Omit = omit, + max_results: Optional[int] | Omit = omit, + cursor: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> VisibilityQueryV2V2ReportsPostResponse: + """ + Query Visibility V2 + + Args: + category_id: Body parameter. + start_date: YYYY-MM-DD, ET, inclusive + end_date: YYYY-MM-DD, ET, inclusive + group_by: Body parameter. + metrics: Body parameter. + interval: Body parameter. + scope: Body parameter. + assets: A name (`is`), a list (`in`), or {op,value} with op `is`/`in`/`not_in`. + filter: Body parameter. + sort: Body parameter. + limit: Page size; default 10, max 50. + max_results: Stream endpoint only: cap the number of streamed rows (default: all). + cursor: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + VisibilityQueryV2V2ReportsPostResponse: Successful Response + + Example: + ```python + visibility = client.reports.visibility.query_v2_v2_reports_post( + category_id="", + start_date="", + end_date="", + interval="day", + scope="owned", + ) + ``` + """ + return self._post( + "/v2/reports/visibility", + body=maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "group_by": group_by, + "metrics": metrics, + "interval": interval, + "scope": scope, + "assets": assets, + "filter": filter, + "sort": sort, + "limit": limit, + "max_results": max_results, + "cursor": cursor, + }, + visibility_query_v2_v2_reports_post_params.VisibilityQueryV2V2ReportsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=VisibilityQueryV2V2ReportsPostResponse, + ) + + def stream_v2_v2_reports_stream_post( + self, + *, + category_id: str, + start_date: str, + end_date: str, + group_by: Iterable[Literal["date", "model", "topic", "region", "prompt", "persona"]] | Omit = omit, + metrics: Optional[Iterable[Literal["visibility_score", "share_of_voice", "average_position"]]] | Omit = omit, + interval: Literal["day", "week", "month"] | Omit = omit, + scope: Literal["owned", "all"] | Omit = omit, + assets: Optional[Union[str, SequenceNotStr[str], object]] | Omit = omit, + filter: Optional[visibility_stream_v2_v2_reports_stream_post_params.Filter] | Omit = omit, + sort: visibility_stream_v2_v2_reports_stream_post_params.Sort | Omit = omit, + limit: Optional[int] | Omit = omit, + max_results: Optional[int] | Omit = omit, + cursor: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Stream[str]: + """ + Stream Visibility V2 + + Args: + category_id: Body parameter. + start_date: YYYY-MM-DD, ET, inclusive + end_date: YYYY-MM-DD, ET, inclusive + group_by: Body parameter. + metrics: Body parameter. + interval: Body parameter. + scope: Body parameter. + assets: A name (`is`), a list (`in`), or {op,value} with op `is`/`in`/`not_in`. + filter: Body parameter. + sort: Body parameter. + limit: Page size; default 10, max 50. + max_results: Stream endpoint only: cap the number of streamed rows (default: all). + cursor: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + Stream[str]: Successful Response + + Example: + ```python + stream = client.reports.visibility.stream_v2_v2_reports_stream_post( + category_id="", + start_date="", + end_date="", + interval="day", + scope="owned", + ) + for event in stream: + print(event) + ``` + """ + extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} + return self._post( + "/v2/reports/visibility/stream", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=str, + stream=True, + stream_cls=Stream[str], + ) + + +class AsyncVisibilityResource(AsyncAPIResource): + + @cached_property + def with_raw_response(self) -> AsyncVisibilityResourceWithRawResponse: + return AsyncVisibilityResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncVisibilityResourceWithStreamingResponse: + return AsyncVisibilityResourceWithStreamingResponse(self) + + async def query_v1_reports_post( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "prompt", "prompt_id", "tag", "persona"]] | Omit = omit, + metrics: Iterable[Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[object] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Query visibility report. + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the visibility report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + visibility = await client.reports.visibility.query_v1_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", + ) + ``` + """ + return await self._post( + "/v1/reports/visibility", + body=await async_maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + visibility_query_v1_reports_post_params.VisibilityQueryV1ReportsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=ReportResponse, + ) + + async def stream_v1_reports_stream_post( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "prompt", "prompt_id", "tag", "persona"]] | Omit = omit, + metrics: Iterable[Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[object] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AsyncStream[VisibilityStreamV1ReportsStreamPostResponse]: + """ + Stream Visibility + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Body parameter. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the visibility report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AsyncStream[VisibilityStreamV1ReportsStreamPostResponse]: Server-sent events stream. Emits a `summary` event first, then one `row` event per streamed row. + + Example: + ```python + stream = await client.reports.visibility.stream_v1_reports_stream_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", + ) + async for event in stream: + print(event) + ``` + """ + extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} + return await self._post( + "/v1/reports/visibility/stream", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=VisibilityStreamV1ReportsStreamPostResponse, + stream=True, + stream_cls=AsyncStream[VisibilityStreamV1ReportsStreamPostResponse], + ) + + async def query_v2_v2_reports_post( + self, + *, + category_id: str, + start_date: str, + end_date: str, + group_by: Iterable[Literal["date", "model", "topic", "region", "prompt", "persona"]] | Omit = omit, + metrics: Optional[Iterable[Literal["visibility_score", "share_of_voice", "average_position"]]] | Omit = omit, + interval: Literal["day", "week", "month"] | Omit = omit, + scope: Literal["owned", "all"] | Omit = omit, + assets: Optional[Union[str, SequenceNotStr[str], object]] | Omit = omit, + filter: Optional[visibility_query_v2_v2_reports_post_params.Filter] | Omit = omit, + sort: visibility_query_v2_v2_reports_post_params.Sort | Omit = omit, + limit: Optional[int] | Omit = omit, + max_results: Optional[int] | Omit = omit, + cursor: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> VisibilityQueryV2V2ReportsPostResponse: + """ + Query Visibility V2 + + Args: + category_id: Body parameter. + start_date: YYYY-MM-DD, ET, inclusive + end_date: YYYY-MM-DD, ET, inclusive + group_by: Body parameter. + metrics: Body parameter. + interval: Body parameter. + scope: Body parameter. + assets: A name (`is`), a list (`in`), or {op,value} with op `is`/`in`/`not_in`. + filter: Body parameter. + sort: Body parameter. + limit: Page size; default 10, max 50. + max_results: Stream endpoint only: cap the number of streamed rows (default: all). + cursor: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + VisibilityQueryV2V2ReportsPostResponse: Successful Response + + Example: + ```python + visibility = await client.reports.visibility.query_v2_v2_reports_post( + category_id="", + start_date="", + end_date="", + interval="day", + scope="owned", + ) + ``` + """ + return await self._post( + "/v2/reports/visibility", + body=await async_maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "group_by": group_by, + "metrics": metrics, + "interval": interval, + "scope": scope, + "assets": assets, + "filter": filter, + "sort": sort, + "limit": limit, + "max_results": max_results, + "cursor": cursor, + }, + visibility_query_v2_v2_reports_post_params.VisibilityQueryV2V2ReportsPostParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=VisibilityQueryV2V2ReportsPostResponse, + ) + + async def stream_v2_v2_reports_stream_post( + self, + *, + category_id: str, + start_date: str, + end_date: str, + group_by: Iterable[Literal["date", "model", "topic", "region", "prompt", "persona"]] | Omit = omit, + metrics: Optional[Iterable[Literal["visibility_score", "share_of_voice", "average_position"]]] | Omit = omit, + interval: Literal["day", "week", "month"] | Omit = omit, + scope: Literal["owned", "all"] | Omit = omit, + assets: Optional[Union[str, SequenceNotStr[str], object]] | Omit = omit, + filter: Optional[visibility_stream_v2_v2_reports_stream_post_params.Filter] | Omit = omit, + sort: visibility_stream_v2_v2_reports_stream_post_params.Sort | Omit = omit, + limit: Optional[int] | Omit = omit, + max_results: Optional[int] | Omit = omit, + cursor: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AsyncStream[str]: + """ + Stream Visibility V2 + + Args: + category_id: Body parameter. + start_date: YYYY-MM-DD, ET, inclusive + end_date: YYYY-MM-DD, ET, inclusive + group_by: Body parameter. + metrics: Body parameter. + interval: Body parameter. + scope: Body parameter. + assets: A name (`is`), a list (`in`), or {op,value} with op `is`/`in`/`not_in`. + filter: Body parameter. + sort: Body parameter. + limit: Page size; default 10, max 50. + max_results: Stream endpoint only: cap the number of streamed rows (default: all). + cursor: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AsyncStream[str]: Successful Response + + Example: + ```python + stream = await client.reports.visibility.stream_v2_v2_reports_stream_post( + category_id="", + start_date="", + end_date="", + interval="day", + scope="owned", + ) + async for event in stream: + print(event) + ``` + """ + extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} + return await self._post( + "/v2/reports/visibility/stream", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=str, + stream=True, + stream_cls=AsyncStream[str], + ) + + +class VisibilityResourceWithRawResponse: + def __init__(self, visibility: VisibilityResource) -> None: + self._visibility = visibility + + self.query_v1_reports_post = to_raw_response_wrapper( + visibility.query_v1_reports_post, + ) + self.stream_v1_reports_stream_post = to_raw_response_wrapper( + visibility.stream_v1_reports_stream_post, + ) + self.query_v2_v2_reports_post = to_raw_response_wrapper( + visibility.query_v2_v2_reports_post, + ) + self.stream_v2_v2_reports_stream_post = to_raw_response_wrapper( + visibility.stream_v2_v2_reports_stream_post, + ) + + +class AsyncVisibilityResourceWithRawResponse: + def __init__(self, visibility: AsyncVisibilityResource) -> None: + self._visibility = visibility + + self.query_v1_reports_post = async_to_raw_response_wrapper( + visibility.query_v1_reports_post, + ) + self.stream_v1_reports_stream_post = async_to_raw_response_wrapper( + visibility.stream_v1_reports_stream_post, + ) + self.query_v2_v2_reports_post = async_to_raw_response_wrapper( + visibility.query_v2_v2_reports_post, + ) + self.stream_v2_v2_reports_stream_post = async_to_raw_response_wrapper( + visibility.stream_v2_v2_reports_stream_post, + ) + + +class VisibilityResourceWithStreamingResponse: + def __init__(self, visibility: VisibilityResource) -> None: + self._visibility = visibility + + self.query_v1_reports_post = to_streamed_response_wrapper( + visibility.query_v1_reports_post, + ) + self.stream_v1_reports_stream_post = to_streamed_response_wrapper( + visibility.stream_v1_reports_stream_post, + ) + self.query_v2_v2_reports_post = to_streamed_response_wrapper( + visibility.query_v2_v2_reports_post, + ) + self.stream_v2_v2_reports_stream_post = to_streamed_response_wrapper( + visibility.stream_v2_v2_reports_stream_post, + ) + + +class AsyncVisibilityResourceWithStreamingResponse: + def __init__(self, visibility: AsyncVisibilityResource) -> None: + self._visibility = visibility + + self.query_v1_reports_post = async_to_streamed_response_wrapper( + visibility.query_v1_reports_post, + ) + self.stream_v1_reports_stream_post = async_to_streamed_response_wrapper( + visibility.stream_v1_reports_stream_post, + ) + self.query_v2_v2_reports_post = async_to_streamed_response_wrapper( + visibility.query_v2_v2_reports_post, + ) + self.stream_v2_v2_reports_stream_post = async_to_streamed_response_wrapper( + visibility.stream_v2_v2_reports_stream_post, + ) diff --git a/src/resources/reports/web_search_results.py b/src/resources/reports/web_search_results.py new file mode 100644 index 00000000..4cb9f771 --- /dev/null +++ b/src/resources/reports/web_search_results.py @@ -0,0 +1,396 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +import httpx + +from typing import Dict, Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Literal + +from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given +from ..._utils import path_template, maybe_transform, async_maybe_transform +from ..._compat import cached_property +from ..._resource import SyncAPIResource, AsyncAPIResource +from ..._response import ( + to_raw_response_wrapper, + to_streamed_response_wrapper, + async_to_raw_response_wrapper, + async_to_streamed_response_wrapper, +) +from ..._base_client import make_request_options +from ..._streaming import Stream, AsyncStream +from ...types.reports.web_search_result_query_response import WebSearchResultQueryResponse, WebSearchResultsResult +from ...types.pagination import Pagination +from ...types.hostname_filter import HostnameFilter +from ...types.path_filter import PathFilter +from ...types.region_id_filter import RegionIdFilter +from ...types.topic_id_filter import TopicIdFilter +from ...types.model_id_filter import ModelIdFilter +from ...types.tag_id_filter import TagIdFilter +from ...types.url_filter import UrlFilter +from ...types.root_domain_filter import RootDomainFilter +from ...types.persona_id_filter import PersonaIdFilter +from ...types.prompt_filter import PromptFilter +from ...types.prompt_id_filter import PromptIdFilter +from ...types.reports import web_search_result_query_params +from ...types.reports.web_search_result_stream_response import WebSearchResultStreamResponse, Query, WebSearchResultStreamResponse2 +from ...types.pagination import Pagination +from ...types.hostname_filter import HostnameFilter +from ...types.path_filter import PathFilter +from ...types.region_id_filter import RegionIdFilter +from ...types.topic_id_filter import TopicIdFilter +from ...types.model_id_filter import ModelIdFilter +from ...types.tag_id_filter import TagIdFilter +from ...types.url_filter import UrlFilter +from ...types.root_domain_filter import RootDomainFilter +from ...types.persona_id_filter import PersonaIdFilter +from ...types.prompt_filter import PromptFilter +from ...types.prompt_id_filter import PromptIdFilter +from ...types.reports import web_search_result_stream_params + +__all__ = ["WebSearchResultsResource", "AsyncWebSearchResultsResource"] + + +class WebSearchResultsResource(SyncAPIResource): + + @cached_property + def with_raw_response(self) -> WebSearchResultsResourceWithRawResponse: + return WebSearchResultsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> WebSearchResultsResourceWithStreamingResponse: + return WebSearchResultsResourceWithStreamingResponse(self) + + def query( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["hostname", "path", "url", "root_domain", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "persona", "search_query"]] | Omit = omit, + metrics: Iterable[Literal["count", "search_share"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[object] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> WebSearchResultQueryResponse: + """ + Get web search results for a given category. + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Metrics to include. `search_share` is the per-prompt occurrence rate. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the web search results report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + WebSearchResultQueryResponse: Successful Response + + Example: + ```python + web_search_result = client.reports.web_search_results.query( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", + ) + ``` + """ + return self._post( + "/v1/reports/web-search-results", + body=maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + web_search_result_query_params.WebSearchResultQueryParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=WebSearchResultQueryResponse, + ) + + def stream( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["hostname", "path", "url", "root_domain", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "persona", "search_query"]] | Omit = omit, + metrics: Iterable[Literal["count", "search_share"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[object] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Stream[WebSearchResultStreamResponse]: + """ + Stream Web Search Results + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Metrics to include. `search_share` is the per-prompt occurrence rate. + order_by: Custom ordering of the report results. + pagination: Body parameter. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the web search results report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + Stream[WebSearchResultStreamResponse]: Server-sent events stream. Emits a `summary` event first, then one `row` event per streamed row. + + Example: + ```python + stream = client.reports.web_search_results.stream( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", + ) + for event in stream: + print(event) + ``` + """ + extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} + return self._post( + "/v1/reports/web-search-results/stream", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=WebSearchResultStreamResponse, + stream=True, + stream_cls=Stream[WebSearchResultStreamResponse], + ) + + +class AsyncWebSearchResultsResource(AsyncAPIResource): + + @cached_property + def with_raw_response(self) -> AsyncWebSearchResultsResourceWithRawResponse: + return AsyncWebSearchResultsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncWebSearchResultsResourceWithStreamingResponse: + return AsyncWebSearchResultsResourceWithStreamingResponse(self) + + async def query( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["hostname", "path", "url", "root_domain", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "persona", "search_query"]] | Omit = omit, + metrics: Iterable[Literal["count", "search_share"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[object] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> WebSearchResultQueryResponse: + """ + Get web search results for a given category. + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Metrics to include. `search_share` is the per-prompt occurrence rate. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the web search results report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + WebSearchResultQueryResponse: Successful Response + + Example: + ```python + web_search_result = await client.reports.web_search_results.query( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", + ) + ``` + """ + return await self._post( + "/v1/reports/web-search-results", + body=await async_maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + web_search_result_query_params.WebSearchResultQueryParams, + ), + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=WebSearchResultQueryResponse, + ) + + async def stream( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: Iterable[Literal["hostname", "path", "url", "root_domain", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "persona", "search_query"]] | Omit = omit, + metrics: Iterable[Literal["count", "search_share"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[object] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AsyncStream[WebSearchResultStreamResponse]: + """ + Stream Web Search Results + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Metrics to include. `search_share` is the per-prompt occurrence rate. + order_by: Custom ordering of the report results. + pagination: Body parameter. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the web search results report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AsyncStream[WebSearchResultStreamResponse]: Server-sent events stream. Emits a `summary` event first, then one `row` event per streamed row. + + Example: + ```python + stream = await client.reports.web_search_results.stream( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", + ) + async for event in stream: + print(event) + ``` + """ + extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} + return await self._post( + "/v1/reports/web-search-results/stream", + options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + cast_to=WebSearchResultStreamResponse, + stream=True, + stream_cls=AsyncStream[WebSearchResultStreamResponse], + ) + + +class WebSearchResultsResourceWithRawResponse: + def __init__(self, web_search_results: WebSearchResultsResource) -> None: + self._web_search_results = web_search_results + + self.query = to_raw_response_wrapper( + web_search_results.query, + ) + self.stream = to_raw_response_wrapper( + web_search_results.stream, + ) + + +class AsyncWebSearchResultsResourceWithRawResponse: + def __init__(self, web_search_results: AsyncWebSearchResultsResource) -> None: + self._web_search_results = web_search_results + + self.query = async_to_raw_response_wrapper( + web_search_results.query, + ) + self.stream = async_to_raw_response_wrapper( + web_search_results.stream, + ) + + +class WebSearchResultsResourceWithStreamingResponse: + def __init__(self, web_search_results: WebSearchResultsResource) -> None: + self._web_search_results = web_search_results + + self.query = to_streamed_response_wrapper( + web_search_results.query, + ) + self.stream = to_streamed_response_wrapper( + web_search_results.stream, + ) + + +class AsyncWebSearchResultsResourceWithStreamingResponse: + def __init__(self, web_search_results: AsyncWebSearchResultsResource) -> None: + self._web_search_results = web_search_results + + self.query = async_to_streamed_response_wrapper( + web_search_results.query, + ) + self.stream = async_to_streamed_response_wrapper( + web_search_results.stream, + ) diff --git a/src/types/__init__.py b/src/types/__init__.py new file mode 100644 index 00000000..f9275f2b --- /dev/null +++ b/src/types/__init__.py @@ -0,0 +1,68 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from .analysis_type_filter import AnalysisTypeFilter as AnalysisTypeFilter +from .asset_id_filter import AssetIdFilter as AssetIdFilter +from .bot_name_filter import BotNameFilter as BotNameFilter +from .bot_provider_filter import BotProviderFilter as BotProviderFilter +from .category import Category as Category +from .create_agent_request import CreateAgentRequest as CreateAgentRequest +from .cursor_pagination import CursorPagination as CursorPagination +from .hostname_filter import HostnameFilter as HostnameFilter +from .report_info import ReportInfo as ReportInfo +from .model_id_filter import ModelIdFilter as ModelIdFilter +from .named_resource import NamedResource as NamedResource +from .organization import Organization as Organization +from .pagination import Pagination as Pagination +from .path_filter import PathFilter as PathFilter +from .persona_id_filter import PersonaIdFilter as PersonaIdFilter +from .persona_profile import PersonaProfile as PersonaProfile +from .persona_profile_behavior import PersonaProfileBehavior as PersonaProfileBehavior +from .persona_profile_demographics import PersonaProfileDemographics as PersonaProfileDemographics +from .persona_profile_employment import PersonaProfileEmployment as PersonaProfileEmployment +from .prompt_filter import PromptFilter as PromptFilter +from .prompt_id_filter import PromptIdFilter as PromptIdFilter +from .prompt_type_filter import PromptTypeFilter as PromptTypeFilter +from .region_id_filter import RegionIdFilter as RegionIdFilter +from .region_name_filter import RegionNameFilter as RegionNameFilter +from .report_response import ReportResponse as ReportResponse +from .report_result import ReportResult as ReportResult +from .root_domain_filter import RootDomainFilter as RootDomainFilter +from .search_knowledge_base_request import SearchKnowledgeBaseRequest as SearchKnowledgeBaseRequest +from .sentiment_v2_report_query import SentimentV2ReportQuery as SentimentV2ReportQuery +from .tag_id_filter import TagIdFilter as TagIdFilter +from .tag_name_filter import TagNameFilter as TagNameFilter +from .topic_id_filter import TopicIdFilter as TopicIdFilter +from .topic_name_filter import TopicNameFilter as TopicNameFilter +from .update_agent_request import UpdateAgentRequest as UpdateAgentRequest +from .update_prompt_status_body import UpdatePromptStatusBody as UpdatePromptStatusBody +from .url_filter import UrlFilter as UrlFilter +from .organization_list_category_regions_v1_org_categories_category_regions_get_response import OrganizationListCategoryRegionsV1OrgCategoriesCategoryRegionsGetResponse as OrganizationListCategoryRegionsV1OrgCategoriesCategoryRegionsGetResponse +from .report_query_sentiment_v2_v1_sentiment_v2_post_response import ReportQuerySentimentV2V1SentimentV2PostResponse as ReportQuerySentimentV2V1SentimentV2PostResponse +from .report_query_sentiment_v2_v1_sentiment_v2_post_params import ReportQuerySentimentV2V1SentimentV2PostParams as ReportQuerySentimentV2V1SentimentV2PostParams +from .knowledge_base_list_response import KnowledgeBaseListResponse as KnowledgeBaseListResponse +from .knowledge_base_list_params import KnowledgeBaseListParams as KnowledgeBaseListParams +from .knowledge_base_search_response import KnowledgeBaseSearchResponse as KnowledgeBaseSearchResponse +from .knowledge_base_search_params import KnowledgeBaseSearchParams as KnowledgeBaseSearchParams +from .agent_list_response import AgentListResponse as AgentListResponse +from .agent_list_params import AgentListParams as AgentListParams +from .agent_create_v1_post_response import AgentCreateV1PostResponse as AgentCreateV1PostResponse +from .agent_create_v1_post_params import AgentCreateV1PostParams as AgentCreateV1PostParams +from .agent_publish_v1_id_publish_post_response import AgentPublishV1IdPublishPostResponse as AgentPublishV1IdPublishPostResponse +from .agent_retrieve_response import AgentRetrieveResponse as AgentRetrieveResponse +from .agent_retrieve_params import AgentRetrieveParams as AgentRetrieveParams +from .agent_update_v1_id_patch_response import AgentUpdateV1IdPatchResponse as AgentUpdateV1IdPatchResponse +from .agent_update_v1_id_patch_params import AgentUpdateV1IdPatchParams as AgentUpdateV1IdPatchParams +from .agent_list_graph_v1_graph_get_response import AgentListGraphV1GraphGetResponse as AgentListGraphV1GraphGetResponse +from .agent_list_graph_v1_graph_get_params import AgentListGraphV1GraphGetParams as AgentListGraphV1GraphGetParams +from .organization_list_response import OrganizationListResponse as OrganizationListResponse +from .organization_regions_response import OrganizationRegionsResponse as OrganizationRegionsResponse +from .organization_regions_params import OrganizationRegionsParams as OrganizationRegionsParams +from .organization_models_response import OrganizationModelsResponse as OrganizationModelsResponse +from .organization_domains_response import OrganizationDomainsResponse as OrganizationDomainsResponse +from .organization_domains_params import OrganizationDomainsParams as OrganizationDomainsParams +from .organization_list_assets_response import OrganizationListAssetsResponse as OrganizationListAssetsResponse +from .organization_list_assets_params import OrganizationListAssetsParams as OrganizationListAssetsParams +from .organization_get_personas_response import OrganizationGetPersonasResponse as OrganizationGetPersonasResponse +from .organization_get_personas_params import OrganizationGetPersonasParams as OrganizationGetPersonasParams diff --git a/src/types/agent_create_v1_post_params.py b/src/types/agent_create_v1_post_params.py new file mode 100644 index 00000000..4fe30f57 --- /dev/null +++ b/src/types/agent_create_v1_post_params.py @@ -0,0 +1,28 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Optional +from typing_extensions import Required, TypedDict + +__all__ = ["AgentCreateV1PostParams", "Graph"] + + +class AgentCreateV1PostParams(TypedDict, total=False): + + organization_id: Required[str] + """ID of the organization that will own the agent. Required — Profound API keys are user-scoped, so the owning organization must be chosen explicitly. The caller must be a member of this organization.""" + + name: Required[str] + """Display name for the agent. Must be non-empty.""" + + description: Optional[str] + """Short description of the agent.""" + + graph: Optional[Graph] + """Initial workflow graph for the agent's draft version. Optional — an agent can be created empty and have its graph filled in later.""" + + +class Graph(TypedDict, total=False): + pass + diff --git a/src/profound/types/agent_create_response.py b/src/types/agent_create_v1_post_response.py similarity index 73% rename from src/profound/types/agent_create_response.py rename to src/types/agent_create_v1_post_response.py index e13a57b4..7c1371fa 100644 --- a/src/profound/types/agent_create_response.py +++ b/src/types/agent_create_v1_post_response.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import Optional from datetime import datetime @@ -6,26 +6,25 @@ from .._models import BaseModel -__all__ = ["AgentCreateResponse"] +__all__ = ["AgentCreateV1PostResponse"] -class AgentCreateResponse(BaseModel): - """Summary information for an agent.""" +class AgentCreateV1PostResponse(BaseModel): id: str """Unique ID for the agent.""" - created_at: datetime - """When the agent was created.""" + organization_id: str + """Unique ID of the organization that owns the agent.""" name: str """Display name of the agent.""" - organization_id: str - """Unique ID of the organization that owns the agent.""" - status: Literal["draft", "published", "unknown"] """Current status of the agent.""" + created_at: datetime + """When the agent was created.""" + description: Optional[str] = None """Short description of the agent, if provided.""" diff --git a/src/types/agent_list_graph_v1_graph_get_params.py b/src/types/agent_list_graph_v1_graph_get_params.py new file mode 100644 index 00000000..6754690c --- /dev/null +++ b/src/types/agent_list_graph_v1_graph_get_params.py @@ -0,0 +1,13 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing_extensions import Literal, TypedDict + +__all__ = ["AgentListGraphV1GraphGetParams"] + + +class AgentListGraphV1GraphGetParams(TypedDict, total=False): + + version: Literal["published", "draft"] + """Version of the agent whose graph to retrieve. Use `published` for the live version, or `draft` for the latest unpublished changes. Defaults to `published`.""" diff --git a/src/types/agent_list_graph_v1_graph_get_response.py b/src/types/agent_list_graph_v1_graph_get_response.py new file mode 100644 index 00000000..b6bf25ff --- /dev/null +++ b/src/types/agent_list_graph_v1_graph_get_response.py @@ -0,0 +1,24 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing_extensions import Literal + +from .._models import BaseModel + +__all__ = ["AgentListGraphV1GraphGetResponse", "Graph"] + + +class Graph(BaseModel): + pass + + + +class AgentListGraphV1GraphGetResponse(BaseModel): + + agent_id: str + """Unique ID of the agent the graph belongs to.""" + + version: Literal["published", "draft"] + """Which version of the agent this graph is — `published` or `draft`.""" + + graph: Graph + """Workflow graph (`{nodes, edges}`) in the canonical dialect — the same shape `create` and `update` accept. Treat it as an opaque object: it is returned verbatim, so tool-backed nodes appear in their lowered `tool` form rather than the friendly v1 node types. Read it back to copy and edit a known-good agent.""" diff --git a/src/types/agent_list_params.py b/src/types/agent_list_params.py new file mode 100644 index 00000000..a8ead13c --- /dev/null +++ b/src/types/agent_list_params.py @@ -0,0 +1,18 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Iterable, Optional +from typing_extensions import Literal, TypedDict + +__all__ = ["AgentListParams"] + + +class AgentListParams(TypedDict, total=False): + + statuses: Optional[Iterable[Literal["published", "draft"]]] + """Optional status filter. Use `published` to list agents that have a live published version, or `draft` to list agents that have not been published yet. Defaults to `published`.""" + + limit: int + + next_cursor: Optional[str] diff --git a/src/profound/types/agent_list_response.py b/src/types/agent_list_response.py similarity index 71% rename from src/profound/types/agent_list_response.py rename to src/types/agent_list_response.py index 541f1def..26aa5b33 100644 --- a/src/profound/types/agent_list_response.py +++ b/src/types/agent_list_response.py @@ -1,41 +1,40 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import List, Optional from datetime import datetime from typing_extensions import Literal from .._models import BaseModel -from .shared.cursor_pagination import CursorPagination +from .cursor_pagination import CursorPagination -__all__ = ["AgentListResponse", "Data"] +__all__ = ["AgentListResponse", "Agent"] -class Data(BaseModel): - """Summary information for an agent.""" +class Agent(BaseModel): id: str """Unique ID for the agent.""" - created_at: datetime - """When the agent was created.""" + organization_id: str + """Unique ID of the organization that owns the agent.""" name: str """Display name of the agent.""" - organization_id: str - """Unique ID of the organization that owns the agent.""" - status: Literal["draft", "published", "unknown"] """Current status of the agent.""" + created_at: datetime + """When the agent was created.""" + description: Optional[str] = None """Short description of the agent, if provided.""" + class AgentListResponse(BaseModel): - """Paginated list of agents.""" - data: List[Data] + data: List[Agent] """Agents returned for this page.""" pagination: Optional[CursorPagination] = None diff --git a/src/profound/types/agent_publish_response.py b/src/types/agent_publish_v1_id_publish_post_response.py similarity index 73% rename from src/profound/types/agent_publish_response.py rename to src/types/agent_publish_v1_id_publish_post_response.py index 2d4dd5d2..84cf04bb 100644 --- a/src/profound/types/agent_publish_response.py +++ b/src/types/agent_publish_v1_id_publish_post_response.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import Optional from datetime import datetime @@ -6,26 +6,25 @@ from .._models import BaseModel -__all__ = ["AgentPublishResponse"] +__all__ = ["AgentPublishV1IdPublishPostResponse"] -class AgentPublishResponse(BaseModel): - """Summary information for an agent.""" +class AgentPublishV1IdPublishPostResponse(BaseModel): id: str """Unique ID for the agent.""" - created_at: datetime - """When the agent was created.""" + organization_id: str + """Unique ID of the organization that owns the agent.""" name: str """Display name of the agent.""" - organization_id: str - """Unique ID of the organization that owns the agent.""" - status: Literal["draft", "published", "unknown"] """Current status of the agent.""" + created_at: datetime + """When the agent was created.""" + description: Optional[str] = None """Short description of the agent, if provided.""" diff --git a/src/types/agent_retrieve_params.py b/src/types/agent_retrieve_params.py new file mode 100644 index 00000000..8feaed6b --- /dev/null +++ b/src/types/agent_retrieve_params.py @@ -0,0 +1,13 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing_extensions import Literal, TypedDict + +__all__ = ["AgentRetrieveParams"] + + +class AgentRetrieveParams(TypedDict, total=False): + + version: Literal["published", "draft"] + """Version of the agent to retrieve. Use `published` for the live version, or `draft` for the latest unpublished changes for the same agent. Defaults to `published`.""" diff --git a/src/profound/types/agent_retrieve_response.py b/src/types/agent_retrieve_response.py similarity index 51% rename from src/profound/types/agent_retrieve_response.py rename to src/types/agent_retrieve_response.py index 97db64e2..76927dee 100644 --- a/src/profound/types/agent_retrieve_response.py +++ b/src/types/agent_retrieve_response.py @@ -1,34 +1,17 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. -from typing import Dict, List, Optional +from __future__ import annotations + +from typing import List, Optional from datetime import datetime from typing_extensions import Literal -from pydantic import Field as FieldInfo - from .._models import BaseModel -__all__ = ["AgentRetrieveResponse", "Schema", "Validation", "ValidationIssue"] - - -class Schema(BaseModel): - """Schema metadata for an agent.""" - - input: Dict[str, object] - """JSON Schema for the agent's `inputs` object. +__all__ = ["AgentRetrieveResponse", "AgentSchema", "Input", "Output", "AgentValidation", "AgentValidationIssue"] - Use the top-level property keys as input field names when starting a run. - """ - output: Dict[str, object] - """ - JSON Schema for the `outputs` object returned by - `GET /v1/agents/{agent_id}/runs/{run_id}`. - """ - - -class ValidationIssue(BaseModel): - """A single problem found while validating an agent's graph.""" +class AgentValidationIssue(BaseModel): code: str """Stable machine-readable identifier for the kind of issue.""" @@ -36,63 +19,67 @@ class ValidationIssue(BaseModel): message: str """Human-readable description of the issue.""" - field: Optional[str] = None - """Name of the offending field on the node, if field-specific.""" - - field_title: Optional[str] = None - """Display title of the affected field, if available.""" - node_id: Optional[str] = None """ID of the node the issue applies to, if node-specific.""" node_title: Optional[str] = None """Display title of the affected node, if available.""" - violation: Optional[str] = None - """The specific constraint that was violated, if available.""" + field: Optional[str] = None + """Name of the offending field on the node, if field-specific.""" + field_title: Optional[str] = None + """Display title of the affected field, if available.""" -class Validation(BaseModel): - """Result of validating an agent's graph. + violation: Optional[str] = None + """The specific constraint that was violated, if available.""" - Mirrors the report computed on every read, so callers can confirm a draft - is publishable before calling publish. - """ +class AgentValidation(BaseModel): valid: bool """Whether the agent's graph is valid and ready to publish.""" - issues: Optional[List[ValidationIssue]] = None + issues: Optional[List[AgentValidationIssue]] = None """Problems found while validating the graph. Empty when `valid` is true.""" +class Output(BaseModel): + pass + +class Input(BaseModel): + pass + +class AgentSchema(BaseModel): + + input: Input + """JSON Schema for the agent's `inputs` object. Use the top-level property keys as input field names when starting a run.""" + + output: Output + """JSON Schema for the `outputs` object returned by `GET /v1/agents/{agent_id}/runs/{run_id}`.""" + + class AgentRetrieveResponse(BaseModel): - """Detailed information for an agent.""" id: str """Unique ID for the agent.""" - created_at: datetime - """When the agent was created.""" + organization_id: str + """Unique ID of the organization that owns the agent.""" name: str """Display name of the agent.""" - organization_id: str - """Unique ID of the organization that owns the agent.""" - status: Literal["draft", "published", "unknown"] """Current status of the agent.""" + created_at: datetime + """When the agent was created.""" + description: Optional[str] = None """Short description of the agent, if provided.""" - schema_: Optional[Schema] = FieldInfo(alias="schema", default=None) - """Schema metadata for an agent.""" - - validation: Optional[Validation] = None - """Result of validating an agent's graph. + schema: Optional[AgentSchema] = None + """Input and output schemas for this agent. Omitted while the agent's graph cannot be previewed (e.g. an empty or structurally-invalid draft); check `validation` to see what needs fixing.""" - Mirrors the report computed on every read, so callers can confirm a draft is - publishable before calling publish. - """ + validation: Optional[AgentValidation] = None + """Validation report for the agent's graph, when available. Use `validation.valid` to check the agent is publishable.""" diff --git a/src/types/agent_update_v1_id_patch_params.py b/src/types/agent_update_v1_id_patch_params.py new file mode 100644 index 00000000..0ef0335f --- /dev/null +++ b/src/types/agent_update_v1_id_patch_params.py @@ -0,0 +1,18 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing_extensions import Required, TypedDict + +__all__ = ["AgentUpdateV1IdPatchParams", "Graph"] + + +class AgentUpdateV1IdPatchParams(TypedDict, total=False): + + graph: Required[Graph] + """New workflow graph for the agent's draft version. Replaces the current draft graph; the agent is iterated in place rather than re-created, so its ID is stable. Required — a null graph is rejected as a 422 here rather than as a relayed upstream error.""" + + +class Graph(TypedDict, total=False): + pass + diff --git a/src/types/agent_update_v1_id_patch_response.py b/src/types/agent_update_v1_id_patch_response.py new file mode 100644 index 00000000..128a4f55 --- /dev/null +++ b/src/types/agent_update_v1_id_patch_response.py @@ -0,0 +1,85 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import List, Optional +from datetime import datetime +from typing_extensions import Literal + +from .._models import BaseModel + +__all__ = ["AgentUpdateV1IdPatchResponse", "AgentSchema", "Input", "Output", "AgentValidation", "AgentValidationIssue"] + + +class AgentValidationIssue(BaseModel): + + code: str + """Stable machine-readable identifier for the kind of issue.""" + + message: str + """Human-readable description of the issue.""" + + node_id: Optional[str] = None + """ID of the node the issue applies to, if node-specific.""" + + node_title: Optional[str] = None + """Display title of the affected node, if available.""" + + field: Optional[str] = None + """Name of the offending field on the node, if field-specific.""" + + field_title: Optional[str] = None + """Display title of the affected field, if available.""" + + violation: Optional[str] = None + """The specific constraint that was violated, if available.""" + +class AgentValidation(BaseModel): + + valid: bool + """Whether the agent's graph is valid and ready to publish.""" + + issues: Optional[List[AgentValidationIssue]] = None + """Problems found while validating the graph. Empty when `valid` is true.""" + +class Output(BaseModel): + pass + +class Input(BaseModel): + pass + +class AgentSchema(BaseModel): + + input: Input + """JSON Schema for the agent's `inputs` object. Use the top-level property keys as input field names when starting a run.""" + + output: Output + """JSON Schema for the `outputs` object returned by `GET /v1/agents/{agent_id}/runs/{run_id}`.""" + + + +class AgentUpdateV1IdPatchResponse(BaseModel): + + id: str + """Unique ID for the agent.""" + + organization_id: str + """Unique ID of the organization that owns the agent.""" + + name: str + """Display name of the agent.""" + + status: Literal["draft", "published", "unknown"] + """Current status of the agent.""" + + created_at: datetime + """When the agent was created.""" + + description: Optional[str] = None + """Short description of the agent, if provided.""" + + schema: Optional[AgentSchema] = None + """Input and output schemas for this agent. Omitted while the agent's graph cannot be previewed (e.g. an empty or structurally-invalid draft); check `validation` to see what needs fixing.""" + + validation: Optional[AgentValidation] = None + """Validation report for the agent's graph, when available. Use `validation.valid` to check the agent is publishable.""" diff --git a/src/types/agents/__init__.py b/src/types/agents/__init__.py new file mode 100644 index 00000000..08d7e4ef --- /dev/null +++ b/src/types/agents/__init__.py @@ -0,0 +1,10 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from .run_agent_request import RunAgentRequest as RunAgentRequest +from .node_type_list_v1_agents_get_response import NodeTypeListV1AgentsGetResponse as NodeTypeListV1AgentsGetResponse +from .node_type_list_schema_v1_agents_schema_get_response import NodeTypeListSchemaV1AgentsSchemaGetResponse as NodeTypeListSchemaV1AgentsSchemaGetResponse +from .run_create_response import RunCreateResponse as RunCreateResponse +from .run_create_params import RunCreateParams as RunCreateParams +from .run_retrieve_response import RunRetrieveResponse as RunRetrieveResponse diff --git a/src/types/agents/node_type_list_schema_v1_agents_schema_get_response.py b/src/types/agents/node_type_list_schema_v1_agents_schema_get_response.py new file mode 100644 index 00000000..caef2e1b --- /dev/null +++ b/src/types/agents/node_type_list_schema_v1_agents_schema_get_response.py @@ -0,0 +1,42 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Optional + +from ..._models import BaseModel + +__all__ = ["NodeTypeListSchemaV1AgentsSchemaGetResponse", "Schema", "Example", "Documentation"] + + +class Documentation(BaseModel): + pass + +class Example(BaseModel): + pass + +class Schema(BaseModel): + pass + + + +class NodeTypeListSchemaV1AgentsSchemaGetResponse(BaseModel): + + node_type: str + """Stable identifier for the node type, e.g. `llm`.""" + + schema: Schema + """Opaque JSON Schema for the node's configuration. Treat this as an arbitrary object; its internal shape can change between `schema_version` bumps.""" + + schema_version: str + """Opaque version string for the node schema. Bumps whenever the underlying schema changes, so it can be used as a client-side cache key.""" + + description: Optional[str] = None + """Short description of what the node type does, if provided.""" + + examples: Optional[List[Example]] = None + """Worked example configurations for the node type, in the canonical graph dialect. These are curated guidance maintained by external-api, versioned by `docs_version` (NOT `schema_version`): they illustrate a valid shape at curation time but are a starting point, not the contract — they may lag the validator. The authoritative contract is `schema`, and the only authoritative check that a graph is valid is publishing it (or the agent-validation endpoint). Do not parse `examples` as the schema.""" + + documentation: Optional[Documentation] = None + """Opaque, human-oriented authoring guidance for the node type — purpose, constraints, enum values, and variable-flow notes that the machine `schema` does not always express (e.g. a conditional's else-branch rule, or an iteration's sub-graph shape). Treat as an arbitrary object; use `docs_version` as its cache key.""" + + docs_version: Optional[str] = None + """Opaque version string for `documentation`/`examples`, independent of `schema_version`. Bumps when the authoring guidance changes even if the underlying machine `schema` did not. When it trails the live `schema_version`, treat `documentation`/`examples` as guidance that may be stale and validate against the live `schema`.""" diff --git a/src/profound/types/agents/node_type_list_response.py b/src/types/agents/node_type_list_v1_agents_get_response.py similarity index 53% rename from src/profound/types/agents/node_type_list_response.py rename to src/types/agents/node_type_list_v1_agents_get_response.py index 0fe841b9..77698bf4 100644 --- a/src/profound/types/agents/node_type_list_response.py +++ b/src/types/agents/node_type_list_v1_agents_get_response.py @@ -1,27 +1,26 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import List, Optional from ..._models import BaseModel -__all__ = ["NodeTypeListResponse", "Data"] +__all__ = ["NodeTypeListV1AgentsGetResponse", "NodeTypeSummary"] -class Data(BaseModel): - """Thin summary for a node type available to v1 agent authors.""" - - display_name: str - """Human-readable name for the node type.""" +class NodeTypeSummary(BaseModel): node_type: str """Stable identifier for the node type, e.g. `llm`.""" + display_name: str + """Human-readable name for the node type.""" + description: Optional[str] = None """Short description of what the node type does, if provided.""" -class NodeTypeListResponse(BaseModel): - """List of node types available to v1 agent authors.""" - data: List[Data] +class NodeTypeListV1AgentsGetResponse(BaseModel): + + data: List[NodeTypeSummary] """Allowlisted node types, returned as thin summaries.""" diff --git a/src/types/agents/run_agent_request.py b/src/types/agents/run_agent_request.py new file mode 100644 index 00000000..662c6d46 --- /dev/null +++ b/src/types/agents/run_agent_request.py @@ -0,0 +1,19 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Optional + +from ..._models import BaseModel + +__all__ = ["RunAgentRequest", "Inputs"] + + +class Inputs(BaseModel): + pass + + + +class RunAgentRequest(BaseModel): + """Request body for starting an agent run.""" + + inputs: Optional[Inputs] = None + """Input values for the run. Keys should match the property names defined in `schema.input`. Omit the request body when the agent does not require inputs.""" diff --git a/src/types/agents/run_create_params.py b/src/types/agents/run_create_params.py new file mode 100644 index 00000000..ecb164d6 --- /dev/null +++ b/src/types/agents/run_create_params.py @@ -0,0 +1,18 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing_extensions import TypedDict + +__all__ = ["RunCreateParams", "Inputs"] + + +class RunCreateParams(TypedDict, total=False): + + inputs: Inputs + """Input values for the run. Keys should match the property names defined in `schema.input`. Omit the request body when the agent does not require inputs.""" + + +class Inputs(TypedDict, total=False): + pass + diff --git a/src/profound/types/agents/run_create_response.py b/src/types/agents/run_create_response.py similarity index 79% rename from src/profound/types/agents/run_create_response.py rename to src/types/agents/run_create_response.py index 54781b99..d3751e19 100644 --- a/src/profound/types/agents/run_create_response.py +++ b/src/types/agents/run_create_response.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import Optional from datetime import datetime @@ -10,7 +10,6 @@ class RunCreateResponse(BaseModel): - """Run details returned after a run request is accepted.""" id: str """Unique ID for the accepted run.""" diff --git a/src/types/agents/run_retrieve_response.py b/src/types/agents/run_retrieve_response.py new file mode 100644 index 00000000..ee3ff8f9 --- /dev/null +++ b/src/types/agents/run_retrieve_response.py @@ -0,0 +1,41 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Optional +from datetime import datetime +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["RunRetrieveResponse", "Error", "Outputs"] + + +class Outputs(BaseModel): + pass + +class Error(BaseModel): + pass + + + +class RunRetrieveResponse(BaseModel): + + id: str + """Unique ID for the run.""" + + agent_id: str + """Unique ID of the agent for this run.""" + + status: Literal["queued", "running", "succeeded", "failed", "cancelled", "skipped", "unknown"] + """Current status of the run.""" + + started_at: Optional[datetime] = None + """When the run started, if it has started.""" + + finished_at: Optional[datetime] = None + """When the run finished, if it has completed.""" + + error: Optional[Error] = None + """Error details, when the run fails and error information is available.""" + + outputs: Optional[Outputs] = None + """Output values returned by the run, keyed by variable ID. This object conforms to `schema.output` from the agent detail response and is empty when no outputs are available.""" diff --git a/src/types/analysis_type_filter.py b/src/types/analysis_type_filter.py new file mode 100644 index 00000000..6eb5bbe5 --- /dev/null +++ b/src/types/analysis_type_filter.py @@ -0,0 +1,18 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Union +from typing_extensions import Literal + +from .._models import BaseModel + +__all__ = ["AnalysisTypeFilter"] + + +class AnalysisTypeFilter(BaseModel): + """Filter by analysis type (visibility, sentiment, or accuracy).""" + + field: Literal["analysis_type"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"], List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]]] diff --git a/src/profound/types/shared/asset_id_filter.py b/src/types/asset_id_filter.py similarity index 52% rename from src/profound/types/shared/asset_id_filter.py rename to src/types/asset_id_filter.py index 40d8d68a..c24b3a15 100644 --- a/src/profound/types/shared/asset_id_filter.py +++ b/src/types/asset_id_filter.py @@ -1,14 +1,15 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import List, Union from typing_extensions import Literal -from ..._models import BaseModel +from .._models import BaseModel -__all__ = ["AssetIDFilter"] +__all__ = ["AssetIdFilter"] -class AssetIDFilter(BaseModel): +class AssetIdFilter(BaseModel): + field: Literal["asset_id"] operator: Literal["is", "not_is", "in", "not_in"] diff --git a/src/types/bot_name_filter.py b/src/types/bot_name_filter.py new file mode 100644 index 00000000..115454d6 --- /dev/null +++ b/src/types/bot_name_filter.py @@ -0,0 +1,18 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Union +from typing_extensions import Literal + +from .._models import BaseModel + +__all__ = ["BotNameFilter"] + + +class BotNameFilter(BaseModel): + """Filter by bot name (user agent)""" + + field: Literal["bot_name"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[Literal["Amazonbot", "ClaudeBot", "Claude-User", "Claude-SearchBot", "Applebot", "Applebot-Extended", "Bytespider", "DeepSeek", "DuckAssistBot", "DuckDuckBot", "Googlebot", "Googlebot-News", "Googlebot-Video", "Googlebot-Image", "Google-Extended", "Storebot-Google", "Google-CloudVertexBot", "meta-externalfetcher", "meta-externalagent", "bingbot", "MicrosoftPreview", "ChatGPT-User", "GPTBot", "OAI-SearchBot", "OAI-Operator", "PerplexityBot", "Perplexity-User", "Grok-PageBrowser", "YouBot", "OpenClaw", "baiduspider", "CCBot", "ERNIEBot", "Gemini-Fetch", "YandexBot", "PetalBot", "MistralAI-User", "Slurp", "Gemini-Deep-Research"], List[Literal["Amazonbot", "ClaudeBot", "Claude-User", "Claude-SearchBot", "Applebot", "Applebot-Extended", "Bytespider", "DeepSeek", "DuckAssistBot", "DuckDuckBot", "Googlebot", "Googlebot-News", "Googlebot-Video", "Googlebot-Image", "Google-Extended", "Storebot-Google", "Google-CloudVertexBot", "meta-externalfetcher", "meta-externalagent", "bingbot", "MicrosoftPreview", "ChatGPT-User", "GPTBot", "OAI-SearchBot", "OAI-Operator", "PerplexityBot", "Perplexity-User", "Grok-PageBrowser", "YouBot", "OpenClaw", "baiduspider", "CCBot", "ERNIEBot", "Gemini-Fetch", "YandexBot", "PetalBot", "MistralAI-User", "Slurp", "Gemini-Deep-Research"]]] diff --git a/src/types/bot_provider_filter.py b/src/types/bot_provider_filter.py new file mode 100644 index 00000000..16875854 --- /dev/null +++ b/src/types/bot_provider_filter.py @@ -0,0 +1,18 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Union +from typing_extensions import Literal + +from .._models import BaseModel + +__all__ = ["BotProviderFilter"] + + +class BotProviderFilter(BaseModel): + """Filter by bot provider""" + + field: Literal["bot_provider"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[Literal["openai", "anthropic", "chatgpt", "deepseek", "google", "microsoft", "perplexity", "apple", "bytedance", "amazon", "meta", "duckduckgo", "you", "xai", "grok", "gemini", "mistral", "huawei", "yandex", "baidu", "yahoo", "commoncrawl", "openclaw"], List[Literal["openai", "anthropic", "chatgpt", "deepseek", "google", "microsoft", "perplexity", "apple", "bytedance", "amazon", "meta", "duckduckgo", "you", "xai", "grok", "gemini", "mistral", "huawei", "yandex", "baidu", "yahoo", "commoncrawl", "openclaw"]]] diff --git a/src/types/category.py b/src/types/category.py new file mode 100644 index 00000000..2e3ea0bb --- /dev/null +++ b/src/types/category.py @@ -0,0 +1,13 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + + +from .._models import BaseModel + +__all__ = ["Category"] + + +class Category(BaseModel): + + id: str + + name: str diff --git a/src/profound/types/content/__init__.py b/src/types/content/__init__.py similarity index 78% rename from src/profound/types/content/__init__.py rename to src/types/content/__init__.py index d8ef6a01..bffa2872 100644 --- a/src/profound/types/content/__init__.py +++ b/src/types/content/__init__.py @@ -1,7 +1,7 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from __future__ import annotations -from .optimization_list_params import OptimizationListParams as OptimizationListParams from .optimization_list_response import OptimizationListResponse as OptimizationListResponse +from .optimization_list_params import OptimizationListParams as OptimizationListParams from .optimization_retrieve_response import OptimizationRetrieveResponse as OptimizationRetrieveResponse diff --git a/src/profound/types/content/optimization_list_params.py b/src/types/content/optimization_list_params.py similarity index 76% rename from src/profound/types/content/optimization_list_params.py rename to src/types/content/optimization_list_params.py index d92716b4..ef156e42 100644 --- a/src/profound/types/content/optimization_list_params.py +++ b/src/types/content/optimization_list_params.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from __future__ import annotations @@ -8,6 +8,7 @@ class OptimizationListParams(TypedDict, total=False): + limit: int """Maximum number of results to return""" diff --git a/src/profound/types/content/optimization_list_response.py b/src/types/content/optimization_list_response.py similarity index 50% rename from src/profound/types/content/optimization_list_response.py rename to src/types/content/optimization_list_response.py index 6348c9b4..1ec91a67 100644 --- a/src/profound/types/content/optimization_list_response.py +++ b/src/types/content/optimization_list_response.py @@ -1,43 +1,48 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations from typing import List, Optional from datetime import datetime from typing_extensions import Literal from ..._models import BaseModel -from ..shared.pagination import Pagination +from ..pagination import Pagination + +__all__ = ["OptimizationListResponse", "ContentOptimizationResponseInfo", "OptimizationQuery", "ContentOptimization"] -__all__ = ["OptimizationListResponse", "Data", "Info", "InfoQuery"] +class ContentOptimization(BaseModel): -class Data(BaseModel): id: str + title: str + created_at: datetime extracted_input: Optional[str] = None - status: str - - title: str - type: Literal["file", "text", "url"] + status: str + +class OptimizationQuery(BaseModel): -class InfoQuery(BaseModel): asset_id: str pagination: Optional[Pagination] = None """Pagination parameters for the results. Default is 10,000 rows with no offset.""" - -class Info(BaseModel): - query: InfoQuery +class ContentOptimizationResponseInfo(BaseModel): total_rows: int + query: OptimizationQuery + + class OptimizationListResponse(BaseModel): - data: List[Data] - info: Info + info: ContentOptimizationResponseInfo + + data: List[ContentOptimization] diff --git a/src/types/content/optimization_retrieve_response.py b/src/types/content/optimization_retrieve_response.py new file mode 100644 index 00000000..4b3662ee --- /dev/null +++ b/src/types/content/optimization_retrieve_response.py @@ -0,0 +1,111 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, List, Optional, Union +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["OptimizationRetrieveResponse", "ContentAnalysis", "DocumentContent", "AeoScore", "AeoScoreTargetZone", "AnalysisSummary", "AnalysisBreakdown", "Recommendation", "RecommendationImpact", "RecommendationSuggestion", "AnalysisInputs", "TopicInput", "PromptInput", "UserInput"] + + +class UserInput(BaseModel): + + type: Literal["file", "text", "url"] + + value: str + + metadata: Dict[str, Union[int, str]] + +class PromptInput(BaseModel): + + id: str + + name: str + +class TopicInput(BaseModel): + + id: str + + name: str + +class AnalysisInputs(BaseModel): + + topic: Optional[TopicInput] = None + + prompt: Optional[PromptInput] = None + + top_citations: List[str] + + user: UserInput + +class RecommendationSuggestion(BaseModel): + + text: str + + rationale: str + +class RecommendationImpact(BaseModel): + + section: str + + score: float + +class Recommendation(BaseModel): + + title: str + + status: Literal["done", "pending"] + + impact: Optional[RecommendationImpact] = None + + suggestion: RecommendationSuggestion + +class AnalysisBreakdown(BaseModel): + + title: str + + weight: float + + score: float + +class AnalysisSummary(BaseModel): + + breakdown: List[AnalysisBreakdown] + +class AeoScoreTargetZone(BaseModel): + + low: float + + high: float + +class AeoScore(BaseModel): + + target_zone: AeoScoreTargetZone + + value: float + +class DocumentContent(BaseModel): + + format: Literal["markdown", "html"] + + value: str + +class ContentAnalysis(BaseModel): + + content: DocumentContent + + aeo_content_score: Optional[AeoScore] = None + + analysis: AnalysisSummary + + recommendations: List[Recommendation] + + inputs: AnalysisInputs + + + +class OptimizationRetrieveResponse(BaseModel): + + data: ContentAnalysis diff --git a/src/types/create_agent_request.py b/src/types/create_agent_request.py new file mode 100644 index 00000000..aad541b2 --- /dev/null +++ b/src/types/create_agent_request.py @@ -0,0 +1,28 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Optional + +from .._models import BaseModel + +__all__ = ["CreateAgentRequest", "Graph"] + + +class Graph(BaseModel): + pass + + + +class CreateAgentRequest(BaseModel): + """Request body for creating a draft agent.""" + + organization_id: str + """ID of the organization that will own the agent. Required — Profound API keys are user-scoped, so the owning organization must be chosen explicitly. The caller must be a member of this organization.""" + + name: str + """Display name for the agent. Must be non-empty.""" + + description: Optional[str] = None + """Short description of the agent.""" + + graph: Optional[Graph] = None + """Initial workflow graph for the agent's draft version. Optional — an agent can be created empty and have its graph filled in later.""" diff --git a/src/profound/types/shared/cursor_pagination.py b/src/types/cursor_pagination.py similarity index 75% rename from src/profound/types/shared/cursor_pagination.py rename to src/types/cursor_pagination.py index 4b2c1a52..02d8b491 100644 --- a/src/profound/types/shared/cursor_pagination.py +++ b/src/types/cursor_pagination.py @@ -1,8 +1,8 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import Optional -from ..._models import BaseModel +from .._models import BaseModel __all__ = ["CursorPagination"] diff --git a/src/types/hostname_filter.py b/src/types/hostname_filter.py new file mode 100644 index 00000000..63da0d8f --- /dev/null +++ b/src/types/hostname_filter.py @@ -0,0 +1,18 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Union +from typing_extensions import Literal + +from .._models import BaseModel + +__all__ = ["HostnameFilter"] + + +class HostnameFilter(BaseModel): + """Filter by hostname""" + + field: Literal["hostname"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] diff --git a/src/profound/types/knowledge_base_list_params.py b/src/types/knowledge_base_list_params.py similarity index 78% rename from src/profound/types/knowledge_base_list_params.py rename to src/types/knowledge_base_list_params.py index fbdf1c72..4c269180 100644 --- a/src/profound/types/knowledge_base_list_params.py +++ b/src/types/knowledge_base_list_params.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from __future__ import annotations @@ -9,5 +9,6 @@ class KnowledgeBaseListParams(TypedDict, total=False): + organization_id: Optional[str] """Organization scope for API keys that can access multiple organizations.""" diff --git a/src/profound/types/knowledge_base_list_response.py b/src/types/knowledge_base_list_response.py similarity index 68% rename from src/profound/types/knowledge_base_list_response.py rename to src/types/knowledge_base_list_response.py index 16bd872c..89649247 100644 --- a/src/profound/types/knowledge_base_list_response.py +++ b/src/types/knowledge_base_list_response.py @@ -1,33 +1,36 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import List, Optional from datetime import datetime from .._models import BaseModel -from .shared.cursor_pagination import CursorPagination +from .cursor_pagination import CursorPagination -__all__ = ["KnowledgeBaseListResponse", "Data"] +__all__ = ["KnowledgeBaseListResponse", "KnowledgeBaseItem"] -class Data(BaseModel): +class KnowledgeBaseItem(BaseModel): + id: str """Unique knowledge base ID.""" - created_at: datetime - """Creation timestamp.""" - name: str """Knowledge base name.""" + slug: Optional[str] = None + """Knowledge base slug.""" + description: Optional[str] = None """Knowledge base description.""" - slug: Optional[str] = None - """Knowledge base slug.""" + created_at: datetime + """Creation timestamp.""" + class KnowledgeBaseListResponse(BaseModel): - data: List[Data] + + data: List[KnowledgeBaseItem] """Knowledge bases accessible to the API key.""" pagination: Optional[CursorPagination] = None diff --git a/src/profound/types/knowledge_base_search_params.py b/src/types/knowledge_base_search_params.py similarity index 76% rename from src/profound/types/knowledge_base_search_params.py rename to src/types/knowledge_base_search_params.py index bc34ac89..7c476c97 100644 --- a/src/profound/types/knowledge_base_search_params.py +++ b/src/types/knowledge_base_search_params.py @@ -1,37 +1,37 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from __future__ import annotations from typing import Optional from typing_extensions import Required, TypedDict - from .._types import SequenceNotStr -__all__ = ["KnowledgeBaseSearchParams", "Filters"] +__all__ = ["KnowledgeBaseSearchParams", "SearchKnowledgeBaseFilters"] class KnowledgeBaseSearchParams(TypedDict, total=False): + query: Required[str] """Search query.""" top_k: Required[int] """Maximum number of results to return.""" - organization_id: Optional[str] - """Organization scope for API keys that can access multiple organizations.""" + return_full_page: bool + """Return full page content instead of snippets.""" - filters: Optional[Filters] + filters: Optional[SearchKnowledgeBaseFilters] """Optional search filters.""" - return_full_page: bool - """Return full page content instead of snippets.""" + organization_id: Optional[str] + """Organization scope for API keys that can access multiple organizations.""" -class Filters(TypedDict, total=False): - """Optional search filters.""" +class SearchKnowledgeBaseFilters(TypedDict, total=False): + + tags: Optional[SequenceNotStr[str]] + """Optional tags to match. Documents with any matching tag are included.""" folders: Optional[SequenceNotStr[str]] """Optional folder paths to search within. Currently limited to one folder.""" - tags: Optional[SequenceNotStr[str]] - """Optional tags to match. Documents with any matching tag are included.""" diff --git a/src/types/knowledge_base_search_response.py b/src/types/knowledge_base_search_response.py new file mode 100644 index 00000000..4d9ba362 --- /dev/null +++ b/src/types/knowledge_base_search_response.py @@ -0,0 +1,38 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import List, Optional + +from .._models import BaseModel +from .cursor_pagination import CursorPagination + +__all__ = ["KnowledgeBaseSearchResponse", "KnowledgeBaseSearchResult", "Metadata"] + + +class Metadata(BaseModel): + pass + +class KnowledgeBaseSearchResult(BaseModel): + + id: str + """Document or chunk path.""" + + score: float + """Relevance score.""" + + metadata: Metadata + """Result metadata, including folder path.""" + + content: str + """Matched content.""" + + + +class KnowledgeBaseSearchResponse(BaseModel): + + data: List[KnowledgeBaseSearchResult] + """Knowledge base search results.""" + + pagination: Optional[CursorPagination] = None + """Pagination metadata.""" diff --git a/src/profound/types/knowledge_bases/__init__.py b/src/types/knowledge_bases/__init__.py similarity index 73% rename from src/profound/types/knowledge_bases/__init__.py rename to src/types/knowledge_bases/__init__.py index 3650fc66..67d84450 100644 --- a/src/profound/types/knowledge_bases/__init__.py +++ b/src/types/knowledge_bases/__init__.py @@ -1,14 +1,17 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from __future__ import annotations -from .folder_create_params import FolderCreateParams as FolderCreateParams -from .folder_delete_params import FolderDeleteParams as FolderDeleteParams +from .add_folder_request import AddFolderRequest as AddFolderRequest +from .delete_document_request import DeleteDocumentRequest as DeleteDocumentRequest +from .delete_folder_request import DeleteFolderRequest as DeleteFolderRequest +from .document_create_response import DocumentCreateResponse as DocumentCreateResponse from .document_create_params import DocumentCreateParams as DocumentCreateParams -from .document_delete_params import DocumentDeleteParams as DocumentDeleteParams +from .document_update_response import DocumentUpdateResponse as DocumentUpdateResponse from .document_update_params import DocumentUpdateParams as DocumentUpdateParams +from .document_delete_response import DocumentDeleteResponse as DocumentDeleteResponse +from .document_delete_params import DocumentDeleteParams as DocumentDeleteParams from .folder_create_response import FolderCreateResponse as FolderCreateResponse +from .folder_create_params import FolderCreateParams as FolderCreateParams from .folder_delete_response import FolderDeleteResponse as FolderDeleteResponse -from .document_create_response import DocumentCreateResponse as DocumentCreateResponse -from .document_delete_response import DocumentDeleteResponse as DocumentDeleteResponse -from .document_update_response import DocumentUpdateResponse as DocumentUpdateResponse +from .folder_delete_params import FolderDeleteParams as FolderDeleteParams diff --git a/src/types/knowledge_bases/add_folder_request.py b/src/types/knowledge_bases/add_folder_request.py new file mode 100644 index 00000000..a4d9cd81 --- /dev/null +++ b/src/types/knowledge_bases/add_folder_request.py @@ -0,0 +1,12 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + + +from ..._models import BaseModel + +__all__ = ["AddFolderRequest"] + + +class AddFolderRequest(BaseModel): + + path: str + """Folder path to create.""" diff --git a/src/types/knowledge_bases/delete_document_request.py b/src/types/knowledge_bases/delete_document_request.py new file mode 100644 index 00000000..9ad0d4c0 --- /dev/null +++ b/src/types/knowledge_bases/delete_document_request.py @@ -0,0 +1,12 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + + +from ..._models import BaseModel + +__all__ = ["DeleteDocumentRequest"] + + +class DeleteDocumentRequest(BaseModel): + + name: str + """Document path to delete.""" diff --git a/src/types/knowledge_bases/delete_folder_request.py b/src/types/knowledge_bases/delete_folder_request.py new file mode 100644 index 00000000..3c4a6a9d --- /dev/null +++ b/src/types/knowledge_bases/delete_folder_request.py @@ -0,0 +1,16 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Optional + +from ..._models import BaseModel + +__all__ = ["DeleteFolderRequest"] + + +class DeleteFolderRequest(BaseModel): + + path: str + """Folder path to delete.""" + + recursive: Optional[bool] = None + """When false, only empty folders are deleted and non-empty folders return a conflict. When true, the folder and all contents are deleted.""" diff --git a/src/profound/types/knowledge_bases/document_create_params.py b/src/types/knowledge_bases/document_create_params.py similarity index 85% rename from src/profound/types/knowledge_bases/document_create_params.py rename to src/types/knowledge_bases/document_create_params.py index 08da40a9..f672605c 100644 --- a/src/profound/types/knowledge_bases/document_create_params.py +++ b/src/types/knowledge_bases/document_create_params.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from __future__ import annotations @@ -9,14 +9,15 @@ class DocumentCreateParams(TypedDict, total=False): + name: Required[str] """Unique document name.""" text: Required[str] """Text content to add to the document.""" - organization_id: Optional[str] - """Organization scope for API keys that can access multiple organizations.""" - folder: Optional[str] """Folder path to add the document under.""" + + organization_id: Optional[str] + """Organization scope for API keys that can access multiple organizations.""" diff --git a/src/profound/types/knowledge_bases/document_create_response.py b/src/types/knowledge_bases/document_create_response.py similarity index 79% rename from src/profound/types/knowledge_bases/document_create_response.py rename to src/types/knowledge_bases/document_create_response.py index 9a893eb4..31092ba1 100644 --- a/src/profound/types/knowledge_bases/document_create_response.py +++ b/src/types/knowledge_bases/document_create_response.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import Optional @@ -8,6 +8,7 @@ class DocumentCreateResponse(BaseModel): + message: str """Operation result message.""" diff --git a/src/profound/types/knowledge_bases/document_delete_params.py b/src/types/knowledge_bases/document_delete_params.py similarity index 81% rename from src/profound/types/knowledge_bases/document_delete_params.py rename to src/types/knowledge_bases/document_delete_params.py index cd43b763..ce34c1b4 100644 --- a/src/profound/types/knowledge_bases/document_delete_params.py +++ b/src/types/knowledge_bases/document_delete_params.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from __future__ import annotations @@ -9,6 +9,7 @@ class DocumentDeleteParams(TypedDict, total=False): + name: Required[str] """Document path to delete.""" diff --git a/src/profound/types/knowledge_bases/document_delete_response.py b/src/types/knowledge_bases/document_delete_response.py similarity index 79% rename from src/profound/types/knowledge_bases/document_delete_response.py rename to src/types/knowledge_bases/document_delete_response.py index 8023acf3..4263f971 100644 --- a/src/profound/types/knowledge_bases/document_delete_response.py +++ b/src/types/knowledge_bases/document_delete_response.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import Optional @@ -8,6 +8,7 @@ class DocumentDeleteResponse(BaseModel): + message: str """Operation result message.""" diff --git a/src/profound/types/knowledge_bases/document_update_params.py b/src/types/knowledge_bases/document_update_params.py similarity index 86% rename from src/profound/types/knowledge_bases/document_update_params.py rename to src/types/knowledge_bases/document_update_params.py index 24a527ee..22e9c34a 100644 --- a/src/profound/types/knowledge_bases/document_update_params.py +++ b/src/types/knowledge_bases/document_update_params.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from __future__ import annotations @@ -9,14 +9,15 @@ class DocumentUpdateParams(TypedDict, total=False): + name: Required[str] """Document name or path to update.""" text: Required[str] """Replacement text content for the document.""" - organization_id: Optional[str] - """Organization scope for API keys that can access multiple organizations.""" - folder: Optional[str] """Folder path containing the document.""" + + organization_id: Optional[str] + """Organization scope for API keys that can access multiple organizations.""" diff --git a/src/profound/types/knowledge_bases/document_update_response.py b/src/types/knowledge_bases/document_update_response.py similarity index 79% rename from src/profound/types/knowledge_bases/document_update_response.py rename to src/types/knowledge_bases/document_update_response.py index b5a99c30..57709d33 100644 --- a/src/profound/types/knowledge_bases/document_update_response.py +++ b/src/types/knowledge_bases/document_update_response.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import Optional @@ -8,6 +8,7 @@ class DocumentUpdateResponse(BaseModel): + message: str """Operation result message.""" diff --git a/src/profound/types/knowledge_bases/folder_create_params.py b/src/types/knowledge_bases/folder_create_params.py similarity index 81% rename from src/profound/types/knowledge_bases/folder_create_params.py rename to src/types/knowledge_bases/folder_create_params.py index 64a8e5ca..fba6a80c 100644 --- a/src/profound/types/knowledge_bases/folder_create_params.py +++ b/src/types/knowledge_bases/folder_create_params.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from __future__ import annotations @@ -9,6 +9,7 @@ class FolderCreateParams(TypedDict, total=False): + path: Required[str] """Folder path to create.""" diff --git a/src/profound/types/knowledge_bases/folder_create_response.py b/src/types/knowledge_bases/folder_create_response.py similarity index 70% rename from src/profound/types/knowledge_bases/folder_create_response.py rename to src/types/knowledge_bases/folder_create_response.py index 2fce1e9b..45332ddb 100644 --- a/src/profound/types/knowledge_bases/folder_create_response.py +++ b/src/types/knowledge_bases/folder_create_response.py @@ -1,4 +1,5 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. + from ..._models import BaseModel @@ -6,6 +7,7 @@ class FolderCreateResponse(BaseModel): + message: str """Operation result message.""" diff --git a/src/profound/types/knowledge_bases/folder_delete_params.py b/src/types/knowledge_bases/folder_delete_params.py similarity index 61% rename from src/profound/types/knowledge_bases/folder_delete_params.py rename to src/types/knowledge_bases/folder_delete_params.py index 93f805c9..a142839b 100644 --- a/src/profound/types/knowledge_bases/folder_delete_params.py +++ b/src/types/knowledge_bases/folder_delete_params.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from __future__ import annotations @@ -9,14 +9,12 @@ class FolderDeleteParams(TypedDict, total=False): + path: Required[str] """Folder path to delete.""" + recursive: bool + """When false, only empty folders are deleted and non-empty folders return a conflict. When true, the folder and all contents are deleted.""" + organization_id: Optional[str] """Organization scope for API keys that can access multiple organizations.""" - - recursive: bool - """ - When false, only empty folders are deleted and non-empty folders return a - conflict. When true, the folder and all contents are deleted. - """ diff --git a/src/profound/types/knowledge_bases/folder_delete_response.py b/src/types/knowledge_bases/folder_delete_response.py similarity index 70% rename from src/profound/types/knowledge_bases/folder_delete_response.py rename to src/types/knowledge_bases/folder_delete_response.py index f0de402e..c981394c 100644 --- a/src/profound/types/knowledge_bases/folder_delete_response.py +++ b/src/types/knowledge_bases/folder_delete_response.py @@ -1,4 +1,5 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. + from ..._models import BaseModel @@ -6,6 +7,7 @@ class FolderDeleteResponse(BaseModel): + message: str """Operation result message.""" diff --git a/src/types/model_id_filter.py b/src/types/model_id_filter.py new file mode 100644 index 00000000..1dfe272b --- /dev/null +++ b/src/types/model_id_filter.py @@ -0,0 +1,18 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Union +from typing_extensions import Literal + +from .._models import BaseModel + +__all__ = ["ModelIdFilter"] + + +class ModelIdFilter(BaseModel): + """Filter by AI model/platform UUID.""" + + field: Union[Literal["model_id"], Literal["model"]] + + operator: Literal["is", "not_is", "in", "not_in"] + + value: Union[str, List[str]] diff --git a/src/profound/types/named_resource.py b/src/types/named_resource.py similarity index 68% rename from src/profound/types/named_resource.py rename to src/types/named_resource.py index 5bf324f1..5de536ef 100644 --- a/src/profound/types/named_resource.py +++ b/src/types/named_resource.py @@ -1,4 +1,5 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. + from .._models import BaseModel diff --git a/src/profound/types/organization.py b/src/types/organization.py similarity index 66% rename from src/profound/types/organization.py rename to src/types/organization.py index 6073aee7..5559f637 100644 --- a/src/profound/types/organization.py +++ b/src/types/organization.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import Optional @@ -8,6 +8,7 @@ class Organization(BaseModel): + id: str name: Optional[str] = None diff --git a/src/types/organization_domains_params.py b/src/types/organization_domains_params.py new file mode 100644 index 00000000..e95c17d2 --- /dev/null +++ b/src/types/organization_domains_params.py @@ -0,0 +1,14 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Iterable, Optional +from typing_extensions import TypedDict + +__all__ = ["OrganizationDomainsParams"] + + +class OrganizationDomainsParams(TypedDict, total=False): + + organization_ids: Optional[Iterable[str]] + """Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to.""" diff --git a/src/types/organization_domains_response.py b/src/types/organization_domains_response.py new file mode 100644 index 00000000..eb62b234 --- /dev/null +++ b/src/types/organization_domains_response.py @@ -0,0 +1,23 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List +from datetime import datetime +from typing_extensions import TypeAlias +from .._models import BaseModel +from .organization import Organization + +__all__ = ["OrganizationDomainsResponse", "DomainWithOrganization"] + +class DomainWithOrganization(BaseModel): + + created_at: datetime + + id: str + + name: str + + organization: Organization + + + +OrganizationDomainsResponse: TypeAlias = List[DomainWithOrganization] diff --git a/src/types/organization_get_personas_params.py b/src/types/organization_get_personas_params.py new file mode 100644 index 00000000..94d12aac --- /dev/null +++ b/src/types/organization_get_personas_params.py @@ -0,0 +1,14 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Iterable, Optional +from typing_extensions import TypedDict + +__all__ = ["OrganizationGetPersonasParams"] + + +class OrganizationGetPersonasParams(TypedDict, total=False): + + organization_ids: Optional[Iterable[str]] + """Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to.""" diff --git a/src/profound/types/organization_get_personas_response.py b/src/types/organization_get_personas_response.py similarity index 56% rename from src/profound/types/organization_get_personas_response.py rename to src/types/organization_get_personas_response.py index e41b5957..fb46c521 100644 --- a/src/profound/types/organization_get_personas_response.py +++ b/src/types/organization_get_personas_response.py @@ -1,26 +1,29 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import List from .._models import BaseModel +from .persona_profile import PersonaProfile from .category import Category from .organization import Organization -from .persona_profile import PersonaProfile -__all__ = ["OrganizationGetPersonasResponse", "Data"] +__all__ = ["OrganizationGetPersonasResponse", "OrganizationPersonasWithCategory"] -class Data(BaseModel): - id: str +class OrganizationPersonasWithCategory(BaseModel): - category: Category + id: str name: str + persona: PersonaProfile + + category: Category + organization: Organization - persona: PersonaProfile class OrganizationGetPersonasResponse(BaseModel): - data: List[Data] + + data: List[OrganizationPersonasWithCategory] diff --git a/src/types/organization_list_assets_params.py b/src/types/organization_list_assets_params.py new file mode 100644 index 00000000..230e8df1 --- /dev/null +++ b/src/types/organization_list_assets_params.py @@ -0,0 +1,14 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Iterable, Optional +from typing_extensions import TypedDict + +__all__ = ["OrganizationListAssetsParams"] + + +class OrganizationListAssetsParams(TypedDict, total=False): + + organization_ids: Optional[Iterable[str]] + """Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to.""" diff --git a/src/profound/types/organization_list_assets_response.py b/src/types/organization_list_assets_response.py similarity index 64% rename from src/profound/types/organization_list_assets_response.py rename to src/types/organization_list_assets_response.py index fe4c57d9..2bd7d176 100644 --- a/src/profound/types/organization_list_assets_response.py +++ b/src/types/organization_list_assets_response.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import List, Optional from datetime import datetime @@ -7,28 +7,31 @@ from .category import Category from .organization import Organization -__all__ = ["OrganizationListAssetsResponse", "Data"] +__all__ = ["OrganizationListAssetsResponse", "CategoryAssetWithCategory"] -class Data(BaseModel): +class CategoryAssetWithCategory(BaseModel): + id: str - category: Category + name: str - created_at: datetime + website: str + + alternate_domains: Optional[List[str]] = None is_owned: bool + created_at: datetime + logo_url: str - name: str + category: Category organization: Organization - website: str - - alternate_domains: Optional[List[str]] = None class OrganizationListAssetsResponse(BaseModel): - data: List[Data] + + data: List[CategoryAssetWithCategory] diff --git a/src/types/organization_list_category_regions_v1_org_categories_category_regions_get_response.py b/src/types/organization_list_category_regions_v1_org_categories_category_regions_get_response.py new file mode 100644 index 00000000..d4b02724 --- /dev/null +++ b/src/types/organization_list_category_regions_v1_org_categories_category_regions_get_response.py @@ -0,0 +1,9 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List +from typing_extensions import TypeAlias +from .named_resource import NamedResource + +__all__ = ["OrganizationListCategoryRegionsV1OrgCategoriesCategoryRegionsGetResponse"] + +OrganizationListCategoryRegionsV1OrgCategoriesCategoryRegionsGetResponse: TypeAlias = List[NamedResource] diff --git a/src/profound/types/organization_list_response.py b/src/types/organization_list_response.py similarity index 69% rename from src/profound/types/organization_list_response.py rename to src/types/organization_list_response.py index beb108ff..e4025734 100644 --- a/src/profound/types/organization_list_response.py +++ b/src/types/organization_list_response.py @@ -1,8 +1,7 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import List from typing_extensions import TypeAlias - from .organization import Organization __all__ = ["OrganizationListResponse"] diff --git a/src/profound/types/organization_models_response.py b/src/types/organization_models_response.py similarity index 70% rename from src/profound/types/organization_models_response.py rename to src/types/organization_models_response.py index c9545afa..238dc6fa 100644 --- a/src/profound/types/organization_models_response.py +++ b/src/types/organization_models_response.py @@ -1,8 +1,7 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import List from typing_extensions import TypeAlias - from .named_resource import NamedResource __all__ = ["OrganizationModelsResponse"] diff --git a/src/types/organization_regions_params.py b/src/types/organization_regions_params.py new file mode 100644 index 00000000..4a3233c5 --- /dev/null +++ b/src/types/organization_regions_params.py @@ -0,0 +1,14 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Iterable, Optional +from typing_extensions import TypedDict + +__all__ = ["OrganizationRegionsParams"] + + +class OrganizationRegionsParams(TypedDict, total=False): + + organization_ids: Optional[Iterable[str]] + """Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to.""" diff --git a/src/profound/types/organization_regions_response.py b/src/types/organization_regions_response.py similarity index 70% rename from src/profound/types/organization_regions_response.py rename to src/types/organization_regions_response.py index ebd3fbed..57685c73 100644 --- a/src/profound/types/organization_regions_response.py +++ b/src/types/organization_regions_response.py @@ -1,8 +1,7 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import List from typing_extensions import TypeAlias - from .named_resource import NamedResource __all__ = ["OrganizationRegionsResponse"] diff --git a/src/profound/types/organizations/__init__.py b/src/types/organizations/__init__.py similarity index 65% rename from src/profound/types/organizations/__init__.py rename to src/types/organizations/__init__.py index f0857317..231452ac 100644 --- a/src/profound/types/organizations/__init__.py +++ b/src/types/organizations/__init__.py @@ -1,29 +1,23 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from __future__ import annotations +from .create_prompts_body import CreatePromptsBody as CreatePromptsBody from .field_diff import FieldDiff as FieldDiff -from .id_or_name_param import IDOrNameParam as IDOrNameParam -from .category_list_params import CategoryListParams as CategoryListParams +from .id_or_name import IdOrName as IdOrName +from .named_resource_diff_list import NamedResourceDiffList as NamedResourceDiffList +from .update_prompts_body import UpdatePromptsBody as UpdatePromptsBody from .category_list_response import CategoryListResponse as CategoryListResponse -from .category_tags_response import CategoryTagsResponse as CategoryTagsResponse -from .category_prompts_params import CategoryPromptsParams as CategoryPromptsParams -from .category_assets_response import CategoryAssetsResponse as CategoryAssetsResponse +from .category_list_params import CategoryListParams as CategoryListParams from .category_topics_response import CategoryTopicsResponse as CategoryTopicsResponse -from .named_resource_diff_list import NamedResourceDiffList as NamedResourceDiffList +from .category_tags_response import CategoryTagsResponse as CategoryTagsResponse from .category_prompts_response import CategoryPromptsResponse as CategoryPromptsResponse -from .category_create_prompts_params import CategoryCreatePromptsParams as CategoryCreatePromptsParams -from .category_update_prompts_params import CategoryUpdatePromptsParams as CategoryUpdatePromptsParams +from .category_prompts_params import CategoryPromptsParams as CategoryPromptsParams from .category_create_prompts_response import CategoryCreatePromptsResponse as CategoryCreatePromptsResponse +from .category_create_prompts_params import CategoryCreatePromptsParams as CategoryCreatePromptsParams from .category_update_prompts_response import CategoryUpdatePromptsResponse as CategoryUpdatePromptsResponse -from .category_retrieve_regions_response import CategoryRetrieveRegionsResponse as CategoryRetrieveRegionsResponse +from .category_update_prompts_params import CategoryUpdatePromptsParams as CategoryUpdatePromptsParams +from .category_update_prompt_status_response import CategoryUpdatePromptStatusResponse as CategoryUpdatePromptStatusResponse from .category_update_prompt_status_params import CategoryUpdatePromptStatusParams as CategoryUpdatePromptStatusParams -from .category_update_prompt_status_response import ( - CategoryUpdatePromptStatusResponse as CategoryUpdatePromptStatusResponse, -) -from .category_get_category_personas_response import ( - CategoryGetCategoryPersonasResponse as CategoryGetCategoryPersonasResponse, -) -from .category_get_citation_categories_response import ( - CategoryGetCitationCategoriesResponse as CategoryGetCitationCategoriesResponse, -) +from .category_assets_response import CategoryAssetsResponse as CategoryAssetsResponse +from .category_get_category_personas_response import CategoryGetCategoryPersonasResponse as CategoryGetCategoryPersonasResponse diff --git a/src/profound/types/organizations/category_assets_response.py b/src/types/organizations/category_assets_response.py similarity index 53% rename from src/profound/types/organizations/category_assets_response.py rename to src/types/organizations/category_assets_response.py index ab89d143..a095681f 100644 --- a/src/profound/types/organizations/category_assets_response.py +++ b/src/types/organizations/category_assets_response.py @@ -1,28 +1,28 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import List, Optional from datetime import datetime from typing_extensions import TypeAlias - from ..._models import BaseModel -__all__ = ["CategoryAssetsResponse", "CategoryAssetsResponseItem"] +__all__ = ["CategoryAssetsResponse", "CategoryAsset"] +class CategoryAsset(BaseModel): -class CategoryAssetsResponseItem(BaseModel): id: str - created_at: datetime - - is_owned: bool - - logo_url: str - name: str website: str alternate_domains: Optional[List[str]] = None + is_owned: bool + + created_at: datetime + + logo_url: str + + -CategoryAssetsResponse: TypeAlias = List[CategoryAssetsResponseItem] +CategoryAssetsResponse: TypeAlias = List[CategoryAsset] diff --git a/src/types/organizations/category_create_prompts_params.py b/src/types/organizations/category_create_prompts_params.py new file mode 100644 index 00000000..40e2daa3 --- /dev/null +++ b/src/types/organizations/category_create_prompts_params.py @@ -0,0 +1,51 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Iterable, Optional +from typing_extensions import Literal, Required, TypedDict + +__all__ = ["CategoryCreatePromptsParams", "CreatePromptInput"] + + +class CategoryCreatePromptsParams(TypedDict, total=False): + + prompts: Required[Iterable[CreatePromptInput]] + """List of prompts to create.""" + + dry_run: bool + """When true, validate and preview changes without persisting them.""" + + +class CreatePromptInput(TypedDict, total=False): + + prompt: Required[str] + """The prompt text to be sent to AI platforms.""" + + topic: Required[object] + """Topic to assign. A new topic is created if the name doesn't exist.""" + + language: Required[str] + """Language code (e.g. 'en-US')""" + + tags: Iterable[object] + """Tags to assign. New tags are created if names don't exist.""" + + regions: Required[Iterable[object]] + """Regions where the prompt will be collected.""" + + platforms: Required[Iterable[object]] + """AI platforms where the prompt will be collected.""" + + personas: Iterable[object] + """Personas to use when collecting. Omit for default (no persona).""" + + analysis_types: Optional[Iterable[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]]] + """Analysis types: 'visibility', 'sentiment', 'accuracy'. Defaults to ['visibility'].""" + + prompt_type: Optional[str] + """Deprecated. Use analysis_types instead. 'Visibility' or 'Sentiment'.""" + + asset: Optional[object] + """Required for Sentiment prompts. The brand asset to evaluate.""" + diff --git a/src/profound/types/organizations/category_create_prompts_response.py b/src/types/organizations/category_create_prompts_response.py similarity index 77% rename from src/profound/types/organizations/category_create_prompts_response.py rename to src/types/organizations/category_create_prompts_response.py index ed7affb1..7eaa159f 100644 --- a/src/profound/types/organizations/category_create_prompts_response.py +++ b/src/types/organizations/category_create_prompts_response.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import List, Optional from typing_extensions import Literal @@ -6,45 +6,44 @@ from ..._models import BaseModel from ..named_resource import NamedResource -__all__ = ["CategoryCreatePromptsResponse", "Prompt"] +__all__ = ["CategoryCreatePromptsResponse", "PromptPreview"] -class Prompt(BaseModel): - """Preview of a prompt that was (or would be) created.""" +class PromptPreview(BaseModel): id: str """Generated prompt ID.""" - language: str - """Language code.""" - prompt: str """The prompt text.""" topic: NamedResource """Resolved topic.""" - analysis_types: Optional[List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]]] = None - """Analysis types assigned to this prompt.""" + language: str + """Language code.""" - asset: Optional[NamedResource] = None - """Generic id+name reference used across domain boundaries.""" + tags: Optional[List[NamedResource]] = None + """Resolved tags.""" - personas: Optional[List[NamedResource]] = None - """Resolved personas.""" + regions: Optional[List[NamedResource]] = None + """Resolved regions.""" platforms: Optional[List[NamedResource]] = None """Resolved platforms.""" - regions: Optional[List[NamedResource]] = None - """Resolved regions.""" + personas: Optional[List[NamedResource]] = None + """Resolved personas.""" + + analysis_types: Optional[List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]]] = None + """Analysis types assigned to this prompt.""" + + asset: Optional[NamedResource] = None + """Resolved asset, if applicable.""" - tags: Optional[List[NamedResource]] = None - """Resolved tags.""" class CategoryCreatePromptsResponse(BaseModel): - """Response from creating prompts.""" dry_run: bool """Whether this was a dry run (no changes persisted).""" @@ -52,11 +51,11 @@ class CategoryCreatePromptsResponse(BaseModel): created: Optional[int] = None """Number of prompts created.""" - prompts: Optional[List[Prompt]] = None - """List of created (or previewed) prompts with resolved references.""" + topics_created: Optional[int] = None + """Number of new topics created.""" tags_created: Optional[int] = None """Number of new tags created.""" - topics_created: Optional[int] = None - """Number of new topics created.""" + prompts: Optional[List[PromptPreview]] = None + """List of created (or previewed) prompts with resolved references.""" diff --git a/src/profound/types/organizations/category_get_category_personas_response.py b/src/types/organizations/category_get_category_personas_response.py similarity index 50% rename from src/profound/types/organizations/category_get_category_personas_response.py rename to src/types/organizations/category_get_category_personas_response.py index d74089d8..feed8a9b 100644 --- a/src/profound/types/organizations/category_get_category_personas_response.py +++ b/src/types/organizations/category_get_category_personas_response.py @@ -1,14 +1,15 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import List from ..._models import BaseModel from ..persona_profile import PersonaProfile -__all__ = ["CategoryGetCategoryPersonasResponse", "Data"] +__all__ = ["CategoryGetCategoryPersonasResponse", "CategoryPersona"] -class Data(BaseModel): +class CategoryPersona(BaseModel): + id: str name: str @@ -16,5 +17,7 @@ class Data(BaseModel): persona: PersonaProfile + class CategoryGetCategoryPersonasResponse(BaseModel): - data: List[Data] + + data: List[CategoryPersona] diff --git a/src/types/organizations/category_list_params.py b/src/types/organizations/category_list_params.py new file mode 100644 index 00000000..b6978533 --- /dev/null +++ b/src/types/organizations/category_list_params.py @@ -0,0 +1,14 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Iterable, Optional +from typing_extensions import TypedDict + +__all__ = ["CategoryListParams"] + + +class CategoryListParams(TypedDict, total=False): + + organization_ids: Optional[Iterable[str]] + """Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to.""" diff --git a/src/types/organizations/category_list_response.py b/src/types/organizations/category_list_response.py new file mode 100644 index 00000000..46e85803 --- /dev/null +++ b/src/types/organizations/category_list_response.py @@ -0,0 +1,20 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List +from typing_extensions import TypeAlias +from ..._models import BaseModel +from ..organization import Organization + +__all__ = ["CategoryListResponse", "CategoryWithOrganization"] + +class CategoryWithOrganization(BaseModel): + + id: str + + name: str + + organization: Organization + + + +CategoryListResponse: TypeAlias = List[CategoryWithOrganization] diff --git a/src/profound/types/organizations/category_prompts_params.py b/src/types/organizations/category_prompts_params.py similarity index 51% rename from src/profound/types/organizations/category_prompts_params.py rename to src/types/organizations/category_prompts_params.py index d463ebf2..4e91ae98 100644 --- a/src/profound/types/organizations/category_prompts_params.py +++ b/src/types/organizations/category_prompts_params.py @@ -1,48 +1,44 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from __future__ import annotations -from typing import List, Optional +from typing import Iterable, Optional from typing_extensions import Literal, TypedDict -from ..._types import SequenceNotStr - __all__ = ["CategoryPromptsParams"] class CategoryPromptsParams(TypedDict, total=False): - analysis_type: List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]] - """Filter by analysis type (visibility, sentiment, accuracy).""" - - cursor: Optional[str] - """Pagination cursor from a previous response.""" limit: int """Maximum number of prompts to return.""" - order_by: Literal["created_at", "prompt"] - """Field used to order prompts.""" + cursor: Optional[str] + """Pagination cursor from a previous response.""" order_dir: Literal["asc", "desc"] - """Sort direction for the selected order field.""" - - persona_id: SequenceNotStr[str] - """Filter by persona IDs.""" + """Sort direction by creation date.""" - platform_id: SequenceNotStr[str] - """Filter by platform IDs.""" + analysis_type: Iterable[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]] + """Filter by analysis type (visibility, sentiment, accuracy).""" - prompt_type: List[Literal["visibility", "sentiment"]] + prompt_type: Iterable[Literal["visibility", "sentiment"]] """Deprecated. Use analysis_type instead.""" - region_id: SequenceNotStr[str] - """Filter by region IDs.""" - - status: List[Literal["active", "disabled"]] + status: Iterable[Literal["active", "disabled"]] """Filter by prompt status. Defaults to `active` only.""" - tag_id: SequenceNotStr[str] + topic_id: Iterable[str] + """Filter by topic IDs.""" + + tag_id: Iterable[str] """Filter by tag IDs.""" - topic_id: SequenceNotStr[str] - """Filter by topic IDs.""" + region_id: Iterable[str] + """Filter by region IDs.""" + + platform_id: Iterable[str] + """Filter by platform IDs.""" + + persona_id: Iterable[str] + """Filter by persona IDs.""" diff --git a/src/profound/types/organizations/category_prompts_response.py b/src/types/organizations/category_prompts_response.py similarity index 77% rename from src/profound/types/organizations/category_prompts_response.py rename to src/types/organizations/category_prompts_response.py index c2771119..448c9cec 100644 --- a/src/profound/types/organizations/category_prompts_response.py +++ b/src/types/organizations/category_prompts_response.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import List, Optional from datetime import datetime @@ -7,47 +7,50 @@ from ..._models import BaseModel from ..named_resource import NamedResource -__all__ = ["CategoryPromptsResponse", "Data", "Info"] +__all__ = ["CategoryPromptsResponse", "PaginationInfo", "Prompt"] -class Data(BaseModel): - id: str +class Prompt(BaseModel): - created_at: datetime + id: str - language: str + analysis_types: Optional[List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]]] = None - platforms: List[NamedResource] + prompt_type: Optional[str] = None prompt: str - regions: List[NamedResource] + language: str status: Literal["active", "disabled"] topic: NamedResource """Generic id+name reference used across domain boundaries.""" - updated_at: datetime + tags: Optional[List[NamedResource]] = None - analysis_types: Optional[List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]]] = None + regions: List[NamedResource] + + platforms: List[NamedResource] personas: Optional[List[NamedResource]] = None - prompt_type: Optional[str] = None + created_at: datetime - tags: Optional[List[NamedResource]] = None + updated_at: datetime + +class PaginationInfo(BaseModel): + total_rows: int -class Info(BaseModel): limit: int next_cursor: Optional[str] = None - total_rows: int class CategoryPromptsResponse(BaseModel): - data: List[Data] - info: Info + info: PaginationInfo + + data: List[Prompt] diff --git a/src/types/organizations/category_tags_response.py b/src/types/organizations/category_tags_response.py new file mode 100644 index 00000000..1d10331f --- /dev/null +++ b/src/types/organizations/category_tags_response.py @@ -0,0 +1,17 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List +from typing_extensions import TypeAlias +from ..._models import BaseModel + +__all__ = ["CategoryTagsResponse", "Tag"] + +class Tag(BaseModel): + + id: str + + name: str + + + +CategoryTagsResponse: TypeAlias = List[Tag] diff --git a/src/types/organizations/category_topics_response.py b/src/types/organizations/category_topics_response.py new file mode 100644 index 00000000..dda5c3bd --- /dev/null +++ b/src/types/organizations/category_topics_response.py @@ -0,0 +1,19 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List +from typing_extensions import Literal, TypeAlias +from ..._models import BaseModel + +__all__ = ["CategoryTopicsResponse", "Topic"] + +class Topic(BaseModel): + + id: str + + name: str + + status: Literal["active", "disabled"] + + + +CategoryTopicsResponse: TypeAlias = List[Topic] diff --git a/src/profound/types/organizations/category_update_prompt_status_params.py b/src/types/organizations/category_update_prompt_status_params.py similarity index 73% rename from src/profound/types/organizations/category_update_prompt_status_params.py rename to src/types/organizations/category_update_prompt_status_params.py index 14e32f76..7ac9c8ba 100644 --- a/src/profound/types/organizations/category_update_prompt_status_params.py +++ b/src/types/organizations/category_update_prompt_status_params.py @@ -1,16 +1,16 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from __future__ import annotations +from typing import Iterable from typing_extensions import Literal, Required, TypedDict -from ..._types import SequenceNotStr - __all__ = ["CategoryUpdatePromptStatusParams"] class CategoryUpdatePromptStatusParams(TypedDict, total=False): - prompt_ids: Required[SequenceNotStr[str]] + + prompt_ids: Required[Iterable[str]] """IDs of the prompts to update.""" status: Required[Literal["active", "disabled", "deleted"]] diff --git a/src/profound/types/organizations/category_update_prompt_status_response.py b/src/types/organizations/category_update_prompt_status_response.py similarity index 71% rename from src/profound/types/organizations/category_update_prompt_status_response.py rename to src/types/organizations/category_update_prompt_status_response.py index 59f10c36..0d62603f 100644 --- a/src/profound/types/organizations/category_update_prompt_status_response.py +++ b/src/types/organizations/category_update_prompt_status_response.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import Optional @@ -8,7 +8,6 @@ class CategoryUpdatePromptStatusResponse(BaseModel): - """Response from updating prompt statuses.""" dry_run: bool """Whether this was a dry run (no changes persisted).""" diff --git a/src/types/organizations/category_update_prompts_params.py b/src/types/organizations/category_update_prompts_params.py new file mode 100644 index 00000000..6a1564e5 --- /dev/null +++ b/src/types/organizations/category_update_prompts_params.py @@ -0,0 +1,54 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Iterable, Optional +from typing_extensions import Literal, Required, TypedDict + +__all__ = ["CategoryUpdatePromptsParams", "UpdatePromptInput"] + + +class CategoryUpdatePromptsParams(TypedDict, total=False): + + prompts: Required[Iterable[UpdatePromptInput]] + """List of prompt updates. Each entry must include an `id` and at least one field to change.""" + + dry_run: bool + """When true, validate and preview changes without persisting them.""" + + +class UpdatePromptInput(TypedDict, total=False): + + id: Required[str] + """ID of the prompt to update.""" + + prompt: Optional[str] + """New prompt text.""" + + topic: Optional[object] + """New topic. A new topic is created if the name doesn't exist.""" + + language: Optional[str] + """New language code. Must be enabled for the organization.""" + + tags: Optional[Iterable[object]] + """New tag set. Replaces all existing tags on the prompt.""" + + regions: Optional[Iterable[object]] + """New region set. Replaces all existing regions.""" + + platforms: Optional[Iterable[object]] + """New platform set. Replaces all existing platforms.""" + + personas: Optional[Iterable[object]] + """New persona set. Replaces all existing personas.""" + + analysis_types: Optional[Iterable[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]]] + """New analysis types. Replaces all existing analysis types on the prompt.""" + + prompt_type: Optional[str] + """Deprecated. Use analysis_types instead.""" + + asset: Optional[object] + """Asset reference. Required when analysis_types includes 'sentiment'.""" + diff --git a/src/profound/types/organizations/category_update_prompts_response.py b/src/types/organizations/category_update_prompts_response.py similarity index 54% rename from src/profound/types/organizations/category_update_prompts_response.py rename to src/types/organizations/category_update_prompts_response.py index 5a4e1a78..31bd7566 100644 --- a/src/profound/types/organizations/category_update_prompts_response.py +++ b/src/types/organizations/category_update_prompts_response.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import List, Optional @@ -6,60 +6,56 @@ from .field_diff import FieldDiff from .named_resource_diff_list import NamedResourceDiffList -__all__ = ["CategoryUpdatePromptsResponse", "Prompt"] +__all__ = ["CategoryUpdatePromptsResponse", "PromptUpdatePreview"] -class Prompt(BaseModel): - """Preview of changes applied (or to be applied) to a single prompt. - - Only changed fields are included. - """ +class PromptUpdatePreview(BaseModel): id: str """ID of the updated prompt.""" - analysis_types: Optional[FieldDiff] = None - """Shows the old and new value for a changed field.""" + prompt: Optional[FieldDiff] = None + """Prompt text diff.""" - asset: Optional[FieldDiff] = None - """Shows the old and new value for a changed field.""" + topic: Optional[FieldDiff] = None + """Topic diff.""" language: Optional[FieldDiff] = None - """Shows the old and new value for a changed field.""" + """Language diff.""" - personas: Optional[NamedResourceDiffList] = None - """Shows which resources were added or removed.""" + tags: Optional[NamedResourceDiffList] = None + """Tags added and removed.""" + + regions: Optional[NamedResourceDiffList] = None + """Regions added and removed.""" platforms: Optional[NamedResourceDiffList] = None - """Shows which resources were added or removed.""" + """Platforms added and removed.""" - prompt: Optional[FieldDiff] = None - """Shows the old and new value for a changed field.""" + personas: Optional[NamedResourceDiffList] = None + """Personas added and removed.""" - regions: Optional[NamedResourceDiffList] = None - """Shows which resources were added or removed.""" + analysis_types: Optional[FieldDiff] = None + """Analysis types diff.""" - tags: Optional[NamedResourceDiffList] = None - """Shows which resources were added or removed.""" + asset: Optional[FieldDiff] = None + """Asset diff.""" - topic: Optional[FieldDiff] = None - """Shows the old and new value for a changed field.""" class CategoryUpdatePromptsResponse(BaseModel): - """Response from updating prompts.""" dry_run: bool """Whether this was a dry run (no changes persisted).""" - prompts: Optional[List[Prompt]] = None - """List of prompts with their change diffs.""" - - tags_created: Optional[int] = None - """Number of new tags created.""" + updated: Optional[int] = None + """Number of prompts that had changes.""" topics_created: Optional[int] = None """Number of new topics created.""" - updated: Optional[int] = None - """Number of prompts that had changes.""" + tags_created: Optional[int] = None + """Number of new tags created.""" + + prompts: Optional[List[PromptUpdatePreview]] = None + """List of prompts with their change diffs.""" diff --git a/src/types/organizations/create_prompts_body.py b/src/types/organizations/create_prompts_body.py new file mode 100644 index 00000000..bf4df106 --- /dev/null +++ b/src/types/organizations/create_prompts_body.py @@ -0,0 +1,51 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["CreatePromptsBody", "CreatePromptInput"] + + +class CreatePromptInput(BaseModel): + + prompt: str + """The prompt text to be sent to AI platforms.""" + + topic: object + """Topic to assign. A new topic is created if the name doesn't exist.""" + + language: str + """Language code (e.g. 'en-US')""" + + tags: Optional[List[object]] = None + """Tags to assign. New tags are created if names don't exist.""" + + regions: List[object] + """Regions where the prompt will be collected.""" + + platforms: List[object] + """AI platforms where the prompt will be collected.""" + + personas: Optional[List[object]] = None + """Personas to use when collecting. Omit for default (no persona).""" + + analysis_types: Optional[List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]]] = None + """Analysis types: 'visibility', 'sentiment', 'accuracy'. Defaults to ['visibility'].""" + + prompt_type: Optional[str] = None + """Deprecated. Use analysis_types instead. 'Visibility' or 'Sentiment'.""" + + asset: Optional[object] = None + """Required for Sentiment prompts. The brand asset to evaluate.""" + + + +class CreatePromptsBody(BaseModel): + + prompts: List[CreatePromptInput] + """List of prompts to create.""" + + dry_run: Optional[bool] = None + """When true, validate and preview changes without persisting them.""" diff --git a/src/profound/types/organizations/field_diff.py b/src/types/organizations/field_diff.py similarity index 59% rename from src/profound/types/organizations/field_diff.py rename to src/types/organizations/field_diff.py index 4736e706..daa283b4 100644 --- a/src/profound/types/organizations/field_diff.py +++ b/src/types/organizations/field_diff.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import Optional @@ -10,8 +10,8 @@ class FieldDiff(BaseModel): """Shows the old and new value for a changed field.""" - new: Optional[object] = None - """New value.""" - - old: Optional[object] = None + old: Optional[str] = None """Previous value.""" + + new: Optional[str] = None + """New value.""" diff --git a/src/types/organizations/id_or_name.py b/src/types/organizations/id_or_name.py new file mode 100644 index 00000000..c3c974da --- /dev/null +++ b/src/types/organizations/id_or_name.py @@ -0,0 +1,20 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Optional + +from ..._models import BaseModel + +__all__ = ["IdOrName"] + + +class IdOrName(BaseModel): + """ + Reference by id, name, or both. Plain strings work too: + UUIDs become id lookups, other strings become name lookups. + """ + + id: Optional[str] = None + """UUID of the resource.""" + + name: Optional[str] = None + """Display name of the resource.""" diff --git a/src/profound/types/organizations/named_resource_diff_list.py b/src/types/organizations/named_resource_diff_list.py similarity index 83% rename from src/profound/types/organizations/named_resource_diff_list.py rename to src/types/organizations/named_resource_diff_list.py index 7bef784e..8b075823 100644 --- a/src/profound/types/organizations/named_resource_diff_list.py +++ b/src/types/organizations/named_resource_diff_list.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import List, Optional diff --git a/src/types/organizations/update_prompts_body.py b/src/types/organizations/update_prompts_body.py new file mode 100644 index 00000000..2c368419 --- /dev/null +++ b/src/types/organizations/update_prompts_body.py @@ -0,0 +1,54 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["UpdatePromptsBody", "UpdatePromptInput"] + + +class UpdatePromptInput(BaseModel): + + id: str + """ID of the prompt to update.""" + + prompt: Optional[str] = None + """New prompt text.""" + + topic: Optional[object] = None + """New topic. A new topic is created if the name doesn't exist.""" + + language: Optional[str] = None + """New language code. Must be enabled for the organization.""" + + tags: Optional[List[object]] = None + """New tag set. Replaces all existing tags on the prompt.""" + + regions: Optional[List[object]] = None + """New region set. Replaces all existing regions.""" + + platforms: Optional[List[object]] = None + """New platform set. Replaces all existing platforms.""" + + personas: Optional[List[object]] = None + """New persona set. Replaces all existing personas.""" + + analysis_types: Optional[List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]]] = None + """New analysis types. Replaces all existing analysis types on the prompt.""" + + prompt_type: Optional[str] = None + """Deprecated. Use analysis_types instead.""" + + asset: Optional[object] = None + """Asset reference. Required when analysis_types includes 'sentiment'.""" + + + +class UpdatePromptsBody(BaseModel): + + prompts: List[UpdatePromptInput] + """List of prompt updates. Each entry must include an `id` and at least one field to change.""" + + dry_run: Optional[bool] = None + """When true, validate and preview changes without persisting them.""" diff --git a/src/profound/types/shared/pagination.py b/src/types/pagination.py similarity index 74% rename from src/profound/types/shared/pagination.py rename to src/types/pagination.py index 811a3d59..62ef56d0 100644 --- a/src/profound/types/shared/pagination.py +++ b/src/types/pagination.py @@ -1,8 +1,8 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import Optional -from ..._models import BaseModel +from .._models import BaseModel __all__ = ["Pagination"] diff --git a/src/types/path_filter.py b/src/types/path_filter.py new file mode 100644 index 00000000..57b7065b --- /dev/null +++ b/src/types/path_filter.py @@ -0,0 +1,18 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Union +from typing_extensions import Literal + +from .._models import BaseModel + +__all__ = ["PathFilter"] + + +class PathFilter(BaseModel): + """Filter by request path""" + + field: Literal["path"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] diff --git a/src/profound/types/shared/persona_id_filter.py b/src/types/persona_id_filter.py similarity index 55% rename from src/profound/types/shared/persona_id_filter.py rename to src/types/persona_id_filter.py index 2c361fbf..b55e7288 100644 --- a/src/profound/types/shared/persona_id_filter.py +++ b/src/types/persona_id_filter.py @@ -1,14 +1,14 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import List, Union from typing_extensions import Literal -from ..._models import BaseModel +from .._models import BaseModel -__all__ = ["PersonaIDFilter"] +__all__ = ["PersonaIdFilter"] -class PersonaIDFilter(BaseModel): +class PersonaIdFilter(BaseModel): """Filter by persona UUID.""" field: Literal["persona_id"] diff --git a/src/profound/types/persona_profile.py b/src/types/persona_profile.py similarity index 82% rename from src/profound/types/persona_profile.py rename to src/types/persona_profile.py index b421ce8c..899d5d3d 100644 --- a/src/profound/types/persona_profile.py +++ b/src/types/persona_profile.py @@ -1,4 +1,5 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. + from .._models import BaseModel from .persona_profile_behavior import PersonaProfileBehavior @@ -9,8 +10,9 @@ class PersonaProfile(BaseModel): - behavior: PersonaProfileBehavior - demographics: PersonaProfileDemographics + behavior: PersonaProfileBehavior employment: PersonaProfileEmployment + + demographics: PersonaProfileDemographics diff --git a/src/profound/types/persona_profile_behavior.py b/src/types/persona_profile_behavior.py similarity index 77% rename from src/profound/types/persona_profile_behavior.py rename to src/types/persona_profile_behavior.py index bb4c71eb..3398aed2 100644 --- a/src/profound/types/persona_profile_behavior.py +++ b/src/types/persona_profile_behavior.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import Optional @@ -10,6 +10,7 @@ class PersonaProfileBehavior(BaseModel): - motivations: Optional[str] = None pain_points: Optional[str] = FieldInfo(alias="painPoints", default=None) + + motivations: Optional[str] = None diff --git a/src/profound/types/persona_profile_demographics.py b/src/types/persona_profile_demographics.py similarity index 76% rename from src/profound/types/persona_profile_demographics.py rename to src/types/persona_profile_demographics.py index fec54dff..2b62e78e 100644 --- a/src/profound/types/persona_profile_demographics.py +++ b/src/types/persona_profile_demographics.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import List, Optional @@ -10,4 +10,5 @@ class PersonaProfileDemographics(BaseModel): + age_range: Optional[List[str]] = FieldInfo(alias="ageRange", default=None) diff --git a/src/profound/types/persona_profile_employment.py b/src/types/persona_profile_employment.py similarity index 85% rename from src/profound/types/persona_profile_employment.py rename to src/types/persona_profile_employment.py index 53c2185f..882b6dba 100644 --- a/src/profound/types/persona_profile_employment.py +++ b/src/types/persona_profile_employment.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import List, Optional @@ -10,10 +10,11 @@ class PersonaProfileEmployment(BaseModel): - company_size: Optional[List[str]] = FieldInfo(alias="companySize", default=None) industry: Optional[List[str]] = None job_title: Optional[List[str]] = FieldInfo(alias="jobTitle", default=None) + company_size: Optional[List[str]] = FieldInfo(alias="companySize", default=None) + role_seniority: Optional[List[str]] = FieldInfo(alias="roleSeniority", default=None) diff --git a/src/types/prompt_filter.py b/src/types/prompt_filter.py new file mode 100644 index 00000000..60f72ba6 --- /dev/null +++ b/src/types/prompt_filter.py @@ -0,0 +1,18 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Union +from typing_extensions import Literal + +from .._models import BaseModel + +__all__ = ["PromptFilter"] + + +class PromptFilter(BaseModel): + """Filter by prompt text""" + + field: Literal["prompt"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] diff --git a/src/types/prompt_id_filter.py b/src/types/prompt_id_filter.py new file mode 100644 index 00000000..68bd453e --- /dev/null +++ b/src/types/prompt_id_filter.py @@ -0,0 +1,18 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Union +from typing_extensions import Literal + +from .._models import BaseModel + +__all__ = ["PromptIdFilter"] + + +class PromptIdFilter(BaseModel): + """Filter by prompt UUID.""" + + field: Literal["prompt_id"] + + operator: Literal["is", "not_is", "in", "not_in"] + + value: Union[str, List[str]] diff --git a/src/profound/types/shared/prompt_type_filter.py b/src/types/prompt_type_filter.py similarity index 50% rename from src/profound/types/shared/prompt_type_filter.py rename to src/types/prompt_type_filter.py index 3e4456e2..9cad4d15 100644 --- a/src/profound/types/shared/prompt_type_filter.py +++ b/src/types/prompt_type_filter.py @@ -1,16 +1,17 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import List, Union from typing_extensions import Literal -from ..._models import BaseModel +from .._models import BaseModel __all__ = ["PromptTypeFilter"] class PromptTypeFilter(BaseModel): - """Filter by prompt type (visibility or sentiment). - + """ + Filter by prompt type (visibility or sentiment). + .. deprecated:: Use :class:`AnalysisTypeFilter` instead. ``prompt_type`` is normalised to ``analysis_type`` at parse time. @@ -18,16 +19,6 @@ class PromptTypeFilter(BaseModel): field: Literal["prompt_type"] - operator: Literal[ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive", - ] + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] value: Union[Literal["visibility", "sentiment"], List[Literal["visibility", "sentiment"]]] diff --git a/src/types/prompts/__init__.py b/src/types/prompts/__init__.py new file mode 100644 index 00000000..4a8129c3 --- /dev/null +++ b/src/types/prompts/__init__.py @@ -0,0 +1,12 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from .answers_query import AnswersQuery as AnswersQuery +from .answers_v2_query import AnswersV2Query as AnswersV2Query +from .answer_create_v1_prompts_post_response import AnswerCreateV1PromptsPostResponse as AnswerCreateV1PromptsPostResponse +from .answer_create_v1_prompts_post_params import AnswerCreateV1PromptsPostParams as AnswerCreateV1PromptsPostParams +from .answer_query_v2_v2_prompts_post_response import AnswerQueryV2V2PromptsPostResponse as AnswerQueryV2V2PromptsPostResponse +from .answer_query_v2_v2_prompts_post_params import AnswerQueryV2V2PromptsPostParams as AnswerQueryV2V2PromptsPostParams +from .answer_stream_v2_v2_prompts_stream_post_response import AnswerStreamV2V2PromptsStreamPostResponse as AnswerStreamV2V2PromptsStreamPostResponse +from .answer_stream_v2_v2_prompts_stream_post_params import AnswerStreamV2V2PromptsStreamPostParams as AnswerStreamV2V2PromptsStreamPostParams diff --git a/src/types/prompts/answer_create_v1_prompts_post_params.py b/src/types/prompts/answer_create_v1_prompts_post_params.py new file mode 100644 index 00000000..e86fc8b8 --- /dev/null +++ b/src/types/prompts/answer_create_v1_prompts_post_params.py @@ -0,0 +1,101 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Iterable, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._types import SequenceNotStr +from ..pagination import Pagination +from ..region_id_filter import RegionIdFilter +from ..region_name_filter import RegionNameFilter +from ..model_id_filter import ModelIdFilter +from ..tag_id_filter import TagIdFilter +from ..analysis_type_filter import AnalysisTypeFilter +from ..prompt_type_filter import PromptTypeFilter +from ..prompt_filter import PromptFilter +from ..persona_id_filter import PersonaIdFilter +from ..topic_id_filter import TopicIdFilter +from ..asset_id_filter import AssetIdFilter +from ..._utils import PropertyInfo + +__all__ = ["AnswerCreateV1PromptsPostParams", "ProfoundAnswerEngineInsightsFiltersAssetNameFilter", "EnabledFieldsResponse"] + + +class AnswerCreateV1PromptsPostParams(TypedDict, total=False): + + category_id: Required[str] + + start_date: Required[Union[str, datetime]] + + end_date: Required[Union[str, datetime]] + + pagination: Pagination + """Pagination parameters for the results. Default is 10,000 rows with no offset.""" + + filters: Iterable[Annotated[Union[RegionIdFilter, RegionNameFilter, ModelIdFilter, TagIdFilter, AnalysisTypeFilter, PromptTypeFilter, PromptFilter, PersonaIdFilter, TopicIdFilter, AssetIdFilter, ProfoundAnswerEngineInsightsFiltersAssetNameFilter], PropertyInfo(discriminator="field")]] + """List of filters to apply to the answers report.""" + + include: EnabledFieldsResponse + + +class EnabledFieldsResponse(TypedDict, total=False): + + run_id: bool + + created_at: bool + + prompt: bool + + prompt_id: bool + + mentions: bool + + analysis_types: bool + + prompt_type: bool + + response: bool + + citations: bool + + citation_details: bool + + web_search_results: bool + + search_triggered: bool + + themes: bool + """Use 'sentiment_themes' instead""" + + sentiment_themes: bool + """Uses legacy sentiment data.""" + + topic: bool + + topic_id: bool + + region: bool + + model: bool + + model_id: bool + + asset: bool + + asset_id: bool + + tags: bool + + search_queries: bool + + persona: bool + +class ProfoundAnswerEngineInsightsFiltersAssetNameFilter(TypedDict, total=False): + + field: Required[Literal["asset_name"]] + + operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[str, SequenceNotStr[str]]] + diff --git a/src/profound/types/prompt_answers_response.py b/src/types/prompts/answer_create_v1_prompts_post_response.py similarity index 56% rename from src/profound/types/prompt_answers_response.py rename to src/types/prompts/answer_create_v1_prompts_post_response.py index 18a78c1d..6582c518 100644 --- a/src/profound/types/prompt_answers_response.py +++ b/src/types/prompts/answer_create_v1_prompts_post_response.py @@ -1,117 +1,109 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. -from typing import List, Optional +from __future__ import annotations + +from typing import List, Optional, Union from datetime import datetime from typing_extensions import Literal -from pydantic import Field as FieldInfo +from ..._models import BaseModel + +__all__ = ["AnswerCreateV1PromptsPostResponse", "AnswersResponseInfo", "AnswersRawData", "CitationDetail", "CitationDetailGroup", "SentimentTheme"] + -from .._models import BaseModel +class SentimentTheme(BaseModel): -__all__ = [ - "PromptAnswersResponse", - "Data", - "DataCitationDetail", - "DataCitationDetailGroup", - "DataSentimentTheme", - "Info", -] + type: Union[Literal["positive"], Literal["negative"]] + + name: str +class CitationDetailGroup(BaseModel): -class DataCitationDetailGroup(BaseModel): group_id: int group_position: int +class CitationDetail(BaseModel): -class DataCitationDetail(BaseModel): - clean_url: str - - hostname: str + url: str - path: str + clean_url: str title: str - url: str + text: Optional[str] = None - citation_category: Optional[str] = None + hostname: str - first_cited_at: Optional[str] = None + path: str - groups: Optional[List[DataCitationDetailGroup]] = None + first_cited_at: Optional[str] = None positions: Optional[List[int]] = None - text: Optional[str] = None + groups: Optional[List[CitationDetailGroup]] = None + citation_category: Optional[str] = None -class DataSentimentTheme(BaseModel): - name: str +class AnswersRawData(BaseModel): - type: Literal["positive", "negative"] + run_id: Optional[str] = None + created_at: Optional[datetime] = None -class Data(BaseModel): - """Raw data for the answers endpoint.""" + prompt: Optional[str] = None - analysis_types: Optional[List[str]] = None + prompt_id: Optional[str] = None - asset: Optional[str] = None + mentions: Optional[List[str]] = None - asset_id: Optional[str] = None + analysis_types: Optional[List[str]] = None + + prompt_type: Optional[str] = None - citation_details: Optional[List[DataCitationDetail]] = None + response: Optional[str] = None citations: Optional[List[str]] = None - created_at: Optional[datetime] = None + citation_details: Optional[List[CitationDetail]] = None - mentions: Optional[List[str]] = None + web_search_results: Optional[List[str]] = None - model: Optional[str] = None + search_triggered: Optional[bool] = None - api_model_id: Optional[str] = FieldInfo(alias="model_id", default=None) + themes: Optional[List[str]] = None - persona: Optional[str] = None + sentiment_themes: Optional[List[SentimentTheme]] = None + """Uses legacy sentiment data.""" - prompt: Optional[str] = None + search_queries: Optional[List[str]] = None - prompt_id: Optional[str] = None + topic: Optional[str] = None - prompt_type: Optional[str] = None + topic_id: Optional[str] = None region: Optional[str] = None - response: Optional[str] = None - - run_id: Optional[str] = None + model: Optional[str] = None - search_queries: Optional[List[str]] = None + model_id: Optional[str] = None - search_triggered: Optional[bool] = None + asset: Optional[str] = None - sentiment_themes: Optional[List[DataSentimentTheme]] = None - """Uses legacy sentiment data.""" + asset_id: Optional[str] = None tags: Optional[List[str]] = None - themes: Optional[List[str]] = None - - topic: Optional[str] = None - - topic_id: Optional[str] = None - - web_search_results: Optional[List[str]] = None + persona: Optional[str] = None +class AnswersResponseInfo(BaseModel): -class Info(BaseModel): total_rows: int -class PromptAnswersResponse(BaseModel): - """Response for the answers endpoint.""" - data: List[Data] +class AnswerCreateV1PromptsPostResponse(BaseModel): + + info: AnswersResponseInfo - info: Info + data: List[AnswersRawData] diff --git a/src/types/prompts/answer_query_v2_v2_prompts_post_params.py b/src/types/prompts/answer_query_v2_v2_prompts_post_params.py new file mode 100644 index 00000000..d5293571 --- /dev/null +++ b/src/types/prompts/answer_query_v2_v2_prompts_post_params.py @@ -0,0 +1,50 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Iterable, Optional +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._utils import PropertyInfo + +__all__ = ["AnswerQueryV2V2PromptsPostParams", "FilterNode"] + + +class AnswerQueryV2V2PromptsPostParams(TypedDict, total=False): + + category_id: Required[str] + + start_date: Required[str] + """YYYY-MM-DD, ET, inclusive""" + + end_date: Required[str] + """YYYY-MM-DD, ET, inclusive""" + + include: Optional[Iterable[Literal["run_id", "date", "model", "topic", "topic_id", "persona", "region", "tags", "prompt", "prompt_id", "response", "mentions", "citations", "search_queries", "analysis_types", "sentiment_claims"]]] + """Which row fields to return: `run_id`, `date`, `model`, `topic`, `topic_id`, `region`, `persona`, `tags`, `prompt`, `prompt_id`, `response`, `mentions`, `citations`, `search_queries`, `analysis_types`, `sentiment_claims`. Omit for all of them.""" + + filter: Optional[FilterNode] + """and/or/not tree over `model`, `topic`, `region`, `persona`, `prompt`, `tag`, `analysis_type` (visibility/sentiment/factcheck); plus top-level `and` leaves `domain` or `page` (`is` one value, or `in` a list). Substring-search the prompt with `{"field": "prompt", "op": "contains", "value": "…"}`.""" + + limit: Optional[int] + """Page size; default 10, max 50.""" + + max_results: Optional[int] + """Stream endpoint only: cap the number of streamed rows (default: all).""" + + cursor: Optional[str] + + +class FilterNode(TypedDict, total=False): + + and_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="and")] + + or_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="or")] + + not_: Annotated[Optional[FilterNode], PropertyInfo(alias="not")] + + field: Optional[str] + + op: Optional[str] + + value: str + diff --git a/src/types/prompts/answer_query_v2_v2_prompts_post_response.py b/src/types/prompts/answer_query_v2_v2_prompts_post_response.py new file mode 100644 index 00000000..7ea19dc4 --- /dev/null +++ b/src/types/prompts/answer_query_v2_v2_prompts_post_response.py @@ -0,0 +1,13 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing_extensions import TypeAlias +from ..._models import BaseModel + +__all__ = ["AnswerQueryV2V2PromptsPostResponse", "AnswerQueryV2V2PromptsPostResponse"] + +class AnswerQueryV2V2PromptsPostResponse(BaseModel): + pass + + + +AnswerQueryV2V2PromptsPostResponse: TypeAlias = AnswerQueryV2V2PromptsPostResponse diff --git a/src/types/prompts/answer_stream_v2_v2_prompts_stream_post_params.py b/src/types/prompts/answer_stream_v2_v2_prompts_stream_post_params.py new file mode 100644 index 00000000..85b1b04d --- /dev/null +++ b/src/types/prompts/answer_stream_v2_v2_prompts_stream_post_params.py @@ -0,0 +1,50 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Iterable, Optional +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._utils import PropertyInfo + +__all__ = ["AnswerStreamV2V2PromptsStreamPostParams", "FilterNode"] + + +class AnswerStreamV2V2PromptsStreamPostParams(TypedDict, total=False): + + category_id: Required[str] + + start_date: Required[str] + """YYYY-MM-DD, ET, inclusive""" + + end_date: Required[str] + """YYYY-MM-DD, ET, inclusive""" + + include: Optional[Iterable[Literal["run_id", "date", "model", "topic", "topic_id", "persona", "region", "tags", "prompt", "prompt_id", "response", "mentions", "citations", "search_queries", "analysis_types", "sentiment_claims"]]] + """Which row fields to return: `run_id`, `date`, `model`, `topic`, `topic_id`, `region`, `persona`, `tags`, `prompt`, `prompt_id`, `response`, `mentions`, `citations`, `search_queries`, `analysis_types`, `sentiment_claims`. Omit for all of them.""" + + filter: Optional[FilterNode] + """and/or/not tree over `model`, `topic`, `region`, `persona`, `prompt`, `tag`, `analysis_type` (visibility/sentiment/factcheck); plus top-level `and` leaves `domain` or `page` (`is` one value, or `in` a list). Substring-search the prompt with `{"field": "prompt", "op": "contains", "value": "…"}`.""" + + limit: Optional[int] + """Page size; default 10, max 50.""" + + max_results: Optional[int] + """Stream endpoint only: cap the number of streamed rows (default: all).""" + + cursor: Optional[str] + + +class FilterNode(TypedDict, total=False): + + and_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="and")] + + or_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="or")] + + not_: Annotated[Optional[FilterNode], PropertyInfo(alias="not")] + + field: Optional[str] + + op: Optional[str] + + value: str + diff --git a/src/types/prompts/answer_stream_v2_v2_prompts_stream_post_response.py b/src/types/prompts/answer_stream_v2_v2_prompts_stream_post_response.py new file mode 100644 index 00000000..b29e0a2d --- /dev/null +++ b/src/types/prompts/answer_stream_v2_v2_prompts_stream_post_response.py @@ -0,0 +1,7 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing_extensions import TypeAlias + +__all__ = ["AnswerStreamV2V2PromptsStreamPostResponse"] + +AnswerStreamV2V2PromptsStreamPostResponse: TypeAlias = str diff --git a/src/types/prompts/answers_query.py b/src/types/prompts/answers_query.py new file mode 100644 index 00000000..921f52a7 --- /dev/null +++ b/src/types/prompts/answers_query.py @@ -0,0 +1,101 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal +from ..._utils import PropertyInfo + +from ..._models import BaseModel +from ..pagination import Pagination +from ..region_id_filter import RegionIdFilter +from ..region_name_filter import RegionNameFilter +from ..model_id_filter import ModelIdFilter +from ..tag_id_filter import TagIdFilter +from ..analysis_type_filter import AnalysisTypeFilter +from ..prompt_type_filter import PromptTypeFilter +from ..prompt_filter import PromptFilter +from ..persona_id_filter import PersonaIdFilter +from ..topic_id_filter import TopicIdFilter +from ..asset_id_filter import AssetIdFilter + +__all__ = ["AnswersQuery", "ProfoundAnswerEngineInsightsFiltersAssetNameFilter", "EnabledFieldsResponse"] + + +class EnabledFieldsResponse(BaseModel): + + run_id: Optional[bool] = None + + created_at: Optional[bool] = None + + prompt: Optional[bool] = None + + prompt_id: Optional[bool] = None + + mentions: Optional[bool] = None + + analysis_types: Optional[bool] = None + + prompt_type: Optional[bool] = None + + response: Optional[bool] = None + + citations: Optional[bool] = None + + citation_details: Optional[bool] = None + + web_search_results: Optional[bool] = None + + search_triggered: Optional[bool] = None + + themes: Optional[bool] = None + """Use 'sentiment_themes' instead""" + + sentiment_themes: Optional[bool] = None + """Uses legacy sentiment data.""" + + topic: Optional[bool] = None + + topic_id: Optional[bool] = None + + region: Optional[bool] = None + + model: Optional[bool] = None + + model_id: Optional[bool] = None + + asset: Optional[bool] = None + + asset_id: Optional[bool] = None + + tags: Optional[bool] = None + + search_queries: Optional[bool] = None + + persona: Optional[bool] = None + +class ProfoundAnswerEngineInsightsFiltersAssetNameFilter(BaseModel): + + field: Literal["asset_name"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] + + + +class AnswersQuery(BaseModel): + """Body for the answers endpoint.""" + + category_id: str + + start_date: datetime + + end_date: datetime + + pagination: Optional[Pagination] = None + """Pagination parameters for the results. Default is 10,000 rows with no offset.""" + + filters: Optional[List[Annotated[Union[RegionIdFilter, RegionNameFilter, ModelIdFilter, TagIdFilter, AnalysisTypeFilter, PromptTypeFilter, PromptFilter, PersonaIdFilter, TopicIdFilter, AssetIdFilter, ProfoundAnswerEngineInsightsFiltersAssetNameFilter], PropertyInfo(discriminator="field")]]] = None + """List of filters to apply to the answers report.""" + + include: Optional[EnabledFieldsResponse] = None diff --git a/src/types/prompts/answers_v2_query.py b/src/types/prompts/answers_v2_query.py new file mode 100644 index 00000000..1dbe3d92 --- /dev/null +++ b/src/types/prompts/answers_v2_query.py @@ -0,0 +1,53 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import List, Optional +from typing_extensions import Literal + +from pydantic import Field as FieldInfo + +from ..._models import BaseModel + +__all__ = ["AnswersV2Query", "FilterNode"] + + +class FilterNode(BaseModel): + + and_: Optional[List[FilterNode]] = FieldInfo(alias="and", default=None) + + or_: Optional[List[FilterNode]] = FieldInfo(alias="or", default=None) + + not_: Optional[FilterNode] = FieldInfo(alias="not", default=None) + + field: Optional[str] = None + + op: Optional[str] = None + + value: Optional[str] = None + + + +class AnswersV2Query(BaseModel): + + category_id: str + + start_date: str + """YYYY-MM-DD, ET, inclusive""" + + end_date: str + """YYYY-MM-DD, ET, inclusive""" + + include: Optional[List[Literal["run_id", "date", "model", "topic", "topic_id", "persona", "region", "tags", "prompt", "prompt_id", "response", "mentions", "citations", "search_queries", "analysis_types", "sentiment_claims"]]] = None + """Which row fields to return: `run_id`, `date`, `model`, `topic`, `topic_id`, `region`, `persona`, `tags`, `prompt`, `prompt_id`, `response`, `mentions`, `citations`, `search_queries`, `analysis_types`, `sentiment_claims`. Omit for all of them.""" + + filter: Optional[FilterNode] = None + """and/or/not tree over `model`, `topic`, `region`, `persona`, `prompt`, `tag`, `analysis_type` (visibility/sentiment/factcheck); plus top-level `and` leaves `domain` or `page` (`is` one value, or `in` a list). Substring-search the prompt with `{"field": "prompt", "op": "contains", "value": "…"}`.""" + + limit: Optional[int] = None + """Page size; default 10, max 50.""" + + max_results: Optional[int] = None + """Stream endpoint only: cap the number of streamed rows (default: all).""" + + cursor: Optional[str] = None diff --git a/src/types/region_id_filter.py b/src/types/region_id_filter.py new file mode 100644 index 00000000..da8f6377 --- /dev/null +++ b/src/types/region_id_filter.py @@ -0,0 +1,18 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Union +from typing_extensions import Literal + +from .._models import BaseModel + +__all__ = ["RegionIdFilter"] + + +class RegionIdFilter(BaseModel): + """Filter by region UUID.""" + + field: Union[Literal["region_id"], Literal["region"]] + + operator: Literal["is", "not_is", "in", "not_in"] + + value: Union[str, List[str]] diff --git a/src/types/region_name_filter.py b/src/types/region_name_filter.py new file mode 100644 index 00000000..671adf93 --- /dev/null +++ b/src/types/region_name_filter.py @@ -0,0 +1,18 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Union +from typing_extensions import Literal + +from .._models import BaseModel + +__all__ = ["RegionNameFilter"] + + +class RegionNameFilter(BaseModel): + """Filter by region name.""" + + field: Literal["region_name"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] diff --git a/src/types/report_info.py b/src/types/report_info.py new file mode 100644 index 00000000..7d39dae6 --- /dev/null +++ b/src/types/report_info.py @@ -0,0 +1,20 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Optional + +from .._models import BaseModel + +__all__ = ["ReportInfo", "Query"] + + +class Query(BaseModel): + pass + + + +class ReportInfo(BaseModel): + """Base model for report information.""" + + total_rows: int + + query: Optional[Query] = None diff --git a/src/types/report_query_sentiment_v2_v1_sentiment_v2_post_params.py b/src/types/report_query_sentiment_v2_v1_sentiment_v2_post_params.py new file mode 100644 index 00000000..39c9bfdc --- /dev/null +++ b/src/types/report_query_sentiment_v2_v1_sentiment_v2_post_params.py @@ -0,0 +1,146 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypedDict +from .._types import SequenceNotStr +from .pagination import Pagination +from .._utils import PropertyInfo + +__all__ = ["ReportQuerySentimentV2V1SentimentV2PostParams", "SentimentV2ModelIdFilter", "SentimentV2RegionIdFilter", "SentimentV2TopicIdFilter", "SentimentV2PromptIdFilter", "SentimentV2PersonaIdFilter", "SentimentV2TagIdFilter", "SentimentV2RunIdFilter", "SentimentV2ThemeIdFilter", "SentimentV2ThemeFilter", "SentimentV2ClaimIdFilter", "SentimentV2ClaimFilter", "SentimentV2SentimentFilter"] + + +class ReportQuerySentimentV2V1SentimentV2PostParams(TypedDict, total=False): + + category_id: Required[str] + + asset_name: Required[str] + + start_date: Required[Union[str, datetime]] + """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + end_date: Required[Union[str, datetime]] + """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + comparison_start_date: Optional[Union[str, datetime]] + """Start of the previous period for delta computation.""" + + comparison_end_date: Optional[Union[str, datetime]] + """End of the previous period for delta computation.""" + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + """Date interval for the report. Only used when dimensions includes date.""" + + dimensions: Iterable[Literal["date", "topic", "region", "model", "prompt", "persona", "tag", "theme", "claim", "run", "asset_name"]] + """Dimensions to group the report by.""" + + metrics: Required[Iterable[Literal["sentiment", "occurrence"]]] + + filters: Iterable[Annotated[Union[SentimentV2ModelIdFilter, SentimentV2RegionIdFilter, SentimentV2TopicIdFilter, SentimentV2PromptIdFilter, SentimentV2PersonaIdFilter, SentimentV2TagIdFilter, SentimentV2RunIdFilter, SentimentV2ThemeIdFilter, SentimentV2ThemeFilter, SentimentV2ClaimIdFilter, SentimentV2ClaimFilter, SentimentV2SentimentFilter], PropertyInfo(discriminator="field")]] + """List of filters to apply to the sentiment-v2 report.""" + + order_by: Dict[str, Literal["asc", "desc"]] + """Custom ordering of report results. Dimension keys must also be present in dimensions. The sentiment metric orders by positive_sentiment.""" + + pagination: Pagination + """Pagination settings for the report results.""" + + +class SentimentV2SentimentFilter(TypedDict, total=False): + + field: Required[Literal["sentiment"]] + + operator: Required[Literal["is", "not_is", "in", "not_in"]] + + value: Required[Union[Literal["positive", "negative"], Iterable[Literal["positive", "negative"]]]] + +class SentimentV2ClaimFilter(TypedDict, total=False): + + field: Required[Literal["claim"]] + + operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[str, SequenceNotStr[str]]] + +class SentimentV2ClaimIdFilter(TypedDict, total=False): + + field: Required[Literal["claim_id"]] + + operator: Required[Literal["is", "not_is", "in", "not_in"]] + + value: Required[Union[str, Iterable[str]]] + +class SentimentV2ThemeFilter(TypedDict, total=False): + + field: Required[Literal["theme"]] + + operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[str, SequenceNotStr[str]]] + +class SentimentV2ThemeIdFilter(TypedDict, total=False): + + field: Required[Literal["theme_id"]] + + operator: Required[Literal["is", "not_is", "in", "not_in"]] + + value: Required[Union[str, Iterable[str]]] + +class SentimentV2RunIdFilter(TypedDict, total=False): + + field: Required[Literal["run_id"]] + + operator: Required[Literal["is", "not_is", "in", "not_in"]] + + value: Required[Union[str, Iterable[str]]] + +class SentimentV2TagIdFilter(TypedDict, total=False): + + field: Required[Literal["tag_id"]] + + operator: Required[Literal["is", "not_is", "in", "not_in"]] + + value: Required[Union[str, Iterable[str]]] + +class SentimentV2PersonaIdFilter(TypedDict, total=False): + + field: Required[Literal["persona_id"]] + + operator: Required[Literal["is", "not_is", "in", "not_in"]] + + value: Required[Union[str, Iterable[str]]] + +class SentimentV2PromptIdFilter(TypedDict, total=False): + + field: Required[Literal["prompt_id"]] + + operator: Required[Literal["is", "not_is", "in", "not_in"]] + + value: Required[Union[str, Iterable[str]]] + +class SentimentV2TopicIdFilter(TypedDict, total=False): + + field: Required[Literal["topic_id"]] + + operator: Required[Literal["is", "not_is", "in", "not_in"]] + + value: Required[Union[str, Iterable[str]]] + +class SentimentV2RegionIdFilter(TypedDict, total=False): + + field: Required[Literal["region_id"]] + + operator: Required[Literal["is", "not_is", "in", "not_in"]] + + value: Required[Union[str, Iterable[str]]] + +class SentimentV2ModelIdFilter(TypedDict, total=False): + + field: Required[Literal["model_id"]] + + operator: Required[Literal["is", "not_is", "in", "not_in"]] + + value: Required[Union[str, Iterable[str]]] + diff --git a/src/profound/types/report_sentiment_v2_response.py b/src/types/report_query_sentiment_v2_v1_sentiment_v2_post_response.py similarity index 54% rename from src/profound/types/report_sentiment_v2_response.py rename to src/types/report_query_sentiment_v2_v1_sentiment_v2_post_response.py index 329342cc..cd1adbcf 100644 --- a/src/profound/types/report_sentiment_v2_response.py +++ b/src/types/report_query_sentiment_v2_v1_sentiment_v2_post_response.py @@ -1,116 +1,104 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations from typing import Dict, List, Optional from typing_extensions import Literal -from pydantic import Field as FieldInfo - from .._models import BaseModel -__all__ = [ - "ReportSentimentV2Response", - "Info", - "Data", - "DataScores", - "DataScoresCurrent", - "DataScoresPrevious", - "DataGroupMetadata", -] +__all__ = ["ReportQuerySentimentV2V1SentimentV2PostResponse", "SentimentV2ReportInfo", "Query", "SentimentDataPoint", "SentimentPeriodScores", "SentimentScores", "SentimentGroupMetadata"] -class Info(BaseModel): - query: Dict[str, object] +class SentimentGroupMetadata(BaseModel): - total_rows: int + theme_id: Optional[str] = None + theme: Optional[str] = None -class DataScoresCurrent(BaseModel): - assessment_count: int - - negative_sentiment: float + claim_id: Optional[str] = None - positive_sentiment: float + claim: Optional[str] = None - occurrence: Optional[float] = None + sentiment: Optional[Literal["positive", "negative"]] = None - response_count: Optional[int] = None + prompt_id: Optional[str] = None - total_response_count: Optional[int] = None + prompt_text: Optional[str] = None + topic_id: Optional[str] = None -class DataScoresPrevious(BaseModel): - assessment_count: int + run_id: Optional[str] = None - negative_sentiment: float + created_at: Optional[str] = None - positive_sentiment: float + model_id: Optional[str] = None - occurrence: Optional[float] = None + region_id: Optional[str] = None - response_count: Optional[int] = None + persona_id: Optional[str] = None - total_response_count: Optional[int] = None + asset_name: Optional[str] = None + child_count_total: Optional[int] = None -class DataScores(BaseModel): - current: Optional[DataScoresCurrent] = None + child_count_matching: Optional[int] = None - previous: Optional[DataScoresPrevious] = None + parent_matches_search: Optional[bool] = None + child_matches_search: Optional[bool] = None -class DataGroupMetadata(BaseModel): - asset_name: Optional[str] = None +class SentimentScores(BaseModel): - child_count_matching: Optional[int] = None - - child_count_total: Optional[int] = None + positive_sentiment: float - child_matches_search: Optional[bool] = None + negative_sentiment: float - claim: Optional[str] = None + assessment_count: int - created_at: Optional[str] = None + occurrence: Optional[float] = None - api_model_id: Optional[str] = FieldInfo(alias="model_id", default=None) + response_count: Optional[int] = None - parent_matches_search: Optional[bool] = None + total_response_count: Optional[int] = None - persona_id: Optional[str] = None +class SentimentPeriodScores(BaseModel): - prompt_id: Optional[str] = None + current: Optional[SentimentScores] = None - prompt_text: Optional[str] = None + previous: Optional[SentimentScores] = None - region_id: Optional[str] = None +class SentimentDataPoint(BaseModel): - run_id: Optional[str] = None + scores: SentimentPeriodScores - sentiment: Optional[Literal["positive", "negative"]] = None + date: Optional[str] = None - theme: Optional[str] = None + prev_date: Optional[str] = None - topic_id: Optional[str] = None + group_ids: Optional[Dict[str, str]] = None + group_names: Optional[Dict[str, str]] = None -class Data(BaseModel): - scores: DataScores + group_metadata: Optional[SentimentGroupMetadata] = None cited_website_hrefs: Optional[List[str]] = None - date: Optional[str] = None + total_count: Optional[int] = None - group_ids: Optional[Dict[str, str]] = None +class Query(BaseModel): + pass - group_metadata: Optional[DataGroupMetadata] = None +class SentimentV2ReportInfo(BaseModel): - group_names: Optional[Dict[str, str]] = None + query: Query + + total_rows: int - prev_date: Optional[str] = None - total_count: Optional[int] = None +class ReportQuerySentimentV2V1SentimentV2PostResponse(BaseModel): -class ReportSentimentV2Response(BaseModel): - info: Info + info: SentimentV2ReportInfo - data: Optional[List[Data]] = None + data: Optional[List[SentimentDataPoint]] = None diff --git a/src/profound/types/report_response.py b/src/types/report_response.py similarity index 79% rename from src/profound/types/report_response.py rename to src/types/report_response.py index 628f61b2..82ddeb92 100644 --- a/src/profound/types/report_response.py +++ b/src/types/report_response.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import List @@ -12,7 +12,7 @@ class ReportResponse(BaseModel): """Base response model for reports.""" - data: List[ReportResult] - info: ReportInfo """Base model for report information.""" + + data: List[ReportResult] diff --git a/src/profound/types/report_result.py b/src/types/report_result.py similarity index 60% rename from src/profound/types/report_result.py rename to src/types/report_result.py index e3e21688..da30d416 100644 --- a/src/profound/types/report_result.py +++ b/src/types/report_result.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import List, Union @@ -10,6 +10,6 @@ class ReportResult(BaseModel): """Base model for report results.""" - dimensions: List[str] + metrics: List[Union[int, float]] - metrics: List[Union[float, int, str]] + dimensions: List[str] diff --git a/src/types/reports/__init__.py b/src/types/reports/__init__.py new file mode 100644 index 00000000..9407ab75 --- /dev/null +++ b/src/types/reports/__init__.py @@ -0,0 +1,128 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from .accuracy_breakdown_query import AccuracyBreakdownQuery as AccuracyBreakdownQuery +from .accuracy_citation_analysis_query import AccuracyCitationAnalysisQuery as AccuracyCitationAnalysisQuery +from .accuracy_overview_query import AccuracyOverviewQuery as AccuracyOverviewQuery +from .accuracy_topic_ids_query import AccuracyTopicIdsQuery as AccuracyTopicIdsQuery +from .bots_report_query import BotsReportQuery as BotsReportQuery +from .bots_report_query_v2 import BotsReportQueryV2 as BotsReportQueryV2 +from .brand_name_filter import BrandNameFilter as BrandNameFilter +from .citations_query import CitationsQuery as CitationsQuery +from .citations_v2_query import CitationsV2Query as CitationsV2Query +from .claim_breakdown_query import ClaimBreakdownQuery as ClaimBreakdownQuery +from .claim_citations_query import ClaimCitationsQuery as ClaimCitationsQuery +from .cluster_example_runs_query import ClusterExampleRunsQuery as ClusterExampleRunsQuery +from .cluster_verification_pairs_query import ClusterVerificationPairsQuery as ClusterVerificationPairsQuery +from .fact_check_setup_status_query import FactCheckSetupStatusQuery as FactCheckSetupStatusQuery +from .inaccuracy_drivers_query import InaccuracyDriversQuery as InaccuracyDriversQuery +from .inaccurate_clusters_query import InaccurateClustersQuery as InaccurateClustersQuery +from .inaccurate_themes_query import InaccurateThemesQuery as InaccurateThemesQuery +from .merchant_name_filter import MerchantNameFilter as MerchantNameFilter +from .product_name_filter import ProductNameFilter as ProductNameFilter +from .query_fanouts_query import QueryFanoutsQuery as QueryFanoutsQuery +from .query_fanouts_v2_query import QueryFanoutsV2Query as QueryFanoutsV2Query +from .referrals_query import ReferralsQuery as ReferralsQuery +from .referrals_query_v2 import ReferralsQueryV2 as ReferralsQueryV2 +from .sentiment_query import SentimentQuery as SentimentQuery +from .sentiment_v2_query import SentimentV2Query as SentimentV2Query +from .shopping_all_items_with_merchants_query import ShoppingAllItemsWithMerchantsQuery as ShoppingAllItemsWithMerchantsQuery +from .shopping_executions_query import ShoppingExecutionsQuery as ShoppingExecutionsQuery +from .shopping_item_visibility_query import ShoppingItemVisibilityQuery as ShoppingItemVisibilityQuery +from .shopping_merchant_by_items_query import ShoppingMerchantByItemsQuery as ShoppingMerchantByItemsQuery +from .shopping_merchant_distribution_query import ShoppingMerchantDistributionQuery as ShoppingMerchantDistributionQuery +from .shopping_merchant_share_query import ShoppingMerchantShareQuery as ShoppingMerchantShareQuery +from .shopping_merchant_visibility_by_brand_query import ShoppingMerchantVisibilityByBrandQuery as ShoppingMerchantVisibilityByBrandQuery +from .shopping_product_merchant_urls_query import ShoppingProductMerchantUrlsQuery as ShoppingProductMerchantUrlsQuery +from .shopping_trigger_rate_query import ShoppingTriggerRateQuery as ShoppingTriggerRateQuery +from .shopping_visibility_query import ShoppingVisibilityQuery as ShoppingVisibilityQuery +from .stream_citations_query import StreamCitationsQuery as StreamCitationsQuery +from .stream_sentiment_query import StreamSentimentQuery as StreamSentimentQuery +from .stream_visibility_query import StreamVisibilityQuery as StreamVisibilityQuery +from .stream_web_search_results_query import StreamWebSearchResultsQuery as StreamWebSearchResultsQuery +from .top_inaccurate_claims_query import TopInaccurateClaimsQuery as TopInaccurateClaimsQuery +from .visibility_query import VisibilityQuery as VisibilityQuery +from .visibility_v2_query import VisibilityV2Query as VisibilityV2Query +from .web_search_results_query import WebSearchResultsQuery as WebSearchResultsQuery +from .citation_query_v1_reports_post_response import CitationQueryV1ReportsPostResponse as CitationQueryV1ReportsPostResponse +from .citation_query_v1_reports_post_params import CitationQueryV1ReportsPostParams as CitationQueryV1ReportsPostParams +from .citation_stream_v1_reports_stream_post_response import CitationStreamV1ReportsStreamPostResponse as CitationStreamV1ReportsStreamPostResponse +from .citation_stream_v1_reports_stream_post_params import CitationStreamV1ReportsStreamPostParams as CitationStreamV1ReportsStreamPostParams +from .citation_query_v2_v2_reports_post_response import CitationQueryV2V2ReportsPostResponse as CitationQueryV2V2ReportsPostResponse +from .citation_query_v2_v2_reports_post_params import CitationQueryV2V2ReportsPostParams as CitationQueryV2V2ReportsPostParams +from .citation_stream_v2_v2_reports_stream_post_response import CitationStreamV2V2ReportsStreamPostResponse as CitationStreamV2V2ReportsStreamPostResponse +from .citation_stream_v2_v2_reports_stream_post_params import CitationStreamV2V2ReportsStreamPostParams as CitationStreamV2V2ReportsStreamPostParams +from .visibility_query_v1_reports_post_params import VisibilityQueryV1ReportsPostParams as VisibilityQueryV1ReportsPostParams +from .visibility_stream_v1_reports_stream_post_response import VisibilityStreamV1ReportsStreamPostResponse as VisibilityStreamV1ReportsStreamPostResponse +from .visibility_stream_v1_reports_stream_post_params import VisibilityStreamV1ReportsStreamPostParams as VisibilityStreamV1ReportsStreamPostParams +from .visibility_query_v2_v2_reports_post_response import VisibilityQueryV2V2ReportsPostResponse as VisibilityQueryV2V2ReportsPostResponse +from .visibility_query_v2_v2_reports_post_params import VisibilityQueryV2V2ReportsPostParams as VisibilityQueryV2V2ReportsPostParams +from .visibility_stream_v2_v2_reports_stream_post_response import VisibilityStreamV2V2ReportsStreamPostResponse as VisibilityStreamV2V2ReportsStreamPostResponse +from .visibility_stream_v2_v2_reports_stream_post_params import VisibilityStreamV2V2ReportsStreamPostParams as VisibilityStreamV2V2ReportsStreamPostParams +from .sentiment_query_v1_reports_post_params import SentimentQueryV1ReportsPostParams as SentimentQueryV1ReportsPostParams +from .sentiment_stream_v1_reports_stream_post_response import SentimentStreamV1ReportsStreamPostResponse as SentimentStreamV1ReportsStreamPostResponse +from .sentiment_stream_v1_reports_stream_post_params import SentimentStreamV1ReportsStreamPostParams as SentimentStreamV1ReportsStreamPostParams +from .sentiment_query_v2_v2_reports_post_response import SentimentQueryV2V2ReportsPostResponse as SentimentQueryV2V2ReportsPostResponse +from .sentiment_query_v2_v2_reports_post_params import SentimentQueryV2V2ReportsPostParams as SentimentQueryV2V2ReportsPostParams +from .sentiment_stream_v2_v2_reports_stream_post_response import SentimentStreamV2V2ReportsStreamPostResponse as SentimentStreamV2V2ReportsStreamPostResponse +from .sentiment_stream_v2_v2_reports_stream_post_params import SentimentStreamV2V2ReportsStreamPostParams as SentimentStreamV2V2ReportsStreamPostParams +from .web_search_result_query_response import WebSearchResultQueryResponse as WebSearchResultQueryResponse +from .web_search_result_query_params import WebSearchResultQueryParams as WebSearchResultQueryParams +from .web_search_result_stream_response import WebSearchResultStreamResponse as WebSearchResultStreamResponse +from .web_search_result_stream_params import WebSearchResultStreamParams as WebSearchResultStreamParams +from .referral_create_report_v1_v1_reports_post_params import ReferralCreateReportV1V1ReportsPostParams as ReferralCreateReportV1V1ReportsPostParams +from .referral_create_report_v2_v2_reports_post_params import ReferralCreateReportV2V2ReportsPostParams as ReferralCreateReportV2V2ReportsPostParams +from .bot_create_report_v1_v1_reports_post_params import BotCreateReportV1V1ReportsPostParams as BotCreateReportV1V1ReportsPostParams +from .bot_create_report_v2_v2_reports_post_params import BotCreateReportV2V2ReportsPostParams as BotCreateReportV2V2ReportsPostParams +from .query_fanout_v1_reports_post_params import QueryFanoutV1ReportsPostParams as QueryFanoutV1ReportsPostParams +from .query_fanout_v2_v2_reports_post_response import QueryFanoutV2V2ReportsPostResponse as QueryFanoutV2V2ReportsPostResponse +from .query_fanout_v2_v2_reports_post_params import QueryFanoutV2V2ReportsPostParams as QueryFanoutV2V2ReportsPostParams +from .query_fanout_stream_v2_v2_reports_stream_post_response import QueryFanoutStreamV2V2ReportsStreamPostResponse as QueryFanoutStreamV2V2ReportsStreamPostResponse +from .query_fanout_stream_v2_v2_reports_stream_post_params import QueryFanoutStreamV2V2ReportsStreamPostParams as QueryFanoutStreamV2V2ReportsStreamPostParams +from .shopping_visibility_response import ShoppingVisibilityResponse as ShoppingVisibilityResponse +from .shopping_visibility_params import ShoppingVisibilityParams as ShoppingVisibilityParams +from .shopping_item_visibility_response import ShoppingItemVisibilityResponse as ShoppingItemVisibilityResponse +from .shopping_item_visibility_params import ShoppingItemVisibilityParams as ShoppingItemVisibilityParams +from .shopping_merchant_distribution_response import ShoppingMerchantDistributionResponse as ShoppingMerchantDistributionResponse +from .shopping_merchant_distribution_params import ShoppingMerchantDistributionParams as ShoppingMerchantDistributionParams +from .shopping_merchant_visibility_by_brand_response import ShoppingMerchantVisibilityByBrandResponse as ShoppingMerchantVisibilityByBrandResponse +from .shopping_merchant_visibility_by_brand_params import ShoppingMerchantVisibilityByBrandParams as ShoppingMerchantVisibilityByBrandParams +from .shopping_merchant_by_items_response import ShoppingMerchantByItemsResponse as ShoppingMerchantByItemsResponse +from .shopping_merchant_by_items_params import ShoppingMerchantByItemsParams as ShoppingMerchantByItemsParams +from .shopping_all_items_with_merchants_response import ShoppingAllItemsWithMerchantsResponse as ShoppingAllItemsWithMerchantsResponse +from .shopping_all_items_with_merchants_params import ShoppingAllItemsWithMerchantsParams as ShoppingAllItemsWithMerchantsParams +from .shopping_trigger_rate_response import ShoppingTriggerRateResponse as ShoppingTriggerRateResponse +from .shopping_trigger_rate_params import ShoppingTriggerRateParams as ShoppingTriggerRateParams +from .shopping_merchant_share_response import ShoppingMerchantShareResponse as ShoppingMerchantShareResponse +from .shopping_merchant_share_params import ShoppingMerchantShareParams as ShoppingMerchantShareParams +from .shopping_product_merchant_urls_response import ShoppingProductMerchantUrlsResponse as ShoppingProductMerchantUrlsResponse +from .shopping_product_merchant_urls_params import ShoppingProductMerchantUrlsParams as ShoppingProductMerchantUrlsParams +from .shopping_executions_response import ShoppingExecutionsResponse as ShoppingExecutionsResponse +from .shopping_executions_params import ShoppingExecutionsParams as ShoppingExecutionsParams +from .accuracy_overview_v1_reports_overview_post_response import AccuracyOverviewV1ReportsOverviewPostResponse as AccuracyOverviewV1ReportsOverviewPostResponse +from .accuracy_overview_v1_reports_overview_post_params import AccuracyOverviewV1ReportsOverviewPostParams as AccuracyOverviewV1ReportsOverviewPostParams +from .accuracy_breakdown_v1_reports_breakdown_post_response import AccuracyBreakdownV1ReportsBreakdownPostResponse as AccuracyBreakdownV1ReportsBreakdownPostResponse +from .accuracy_breakdown_v1_reports_breakdown_post_params import AccuracyBreakdownV1ReportsBreakdownPostParams as AccuracyBreakdownV1ReportsBreakdownPostParams +from .accuracy_citation_analysis_v1_reports_citation_analysis_post_response import AccuracyCitationAnalysisV1ReportsCitationAnalysisPostResponse as AccuracyCitationAnalysisV1ReportsCitationAnalysisPostResponse +from .accuracy_citation_analysis_v1_reports_citation_analysis_post_params import AccuracyCitationAnalysisV1ReportsCitationAnalysisPostParams as AccuracyCitationAnalysisV1ReportsCitationAnalysisPostParams +from .accuracy_topic_ids_v1_reports_topic_ids_post_response import AccuracyTopicIdsV1ReportsTopicIdsPostResponse as AccuracyTopicIdsV1ReportsTopicIdsPostResponse +from .accuracy_topic_ids_v1_reports_topic_ids_post_params import AccuracyTopicIdsV1ReportsTopicIdsPostParams as AccuracyTopicIdsV1ReportsTopicIdsPostParams +from .accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_response import AccuracyInaccurateThemesV1ReportsInaccurateThemesPostResponse as AccuracyInaccurateThemesV1ReportsInaccurateThemesPostResponse +from .accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_params import AccuracyInaccurateThemesV1ReportsInaccurateThemesPostParams as AccuracyInaccurateThemesV1ReportsInaccurateThemesPostParams +from .accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_response import AccuracyInaccurateClustersV1ReportsInaccurateClustersPostResponse as AccuracyInaccurateClustersV1ReportsInaccurateClustersPostResponse +from .accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_params import AccuracyInaccurateClustersV1ReportsInaccurateClustersPostParams as AccuracyInaccurateClustersV1ReportsInaccurateClustersPostParams +from .accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_response import AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostResponse as AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostResponse +from .accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_params import AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostParams as AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostParams +from .accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_response import AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostResponse as AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostResponse +from .accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_params import AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostParams as AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostParams +from .accuracy_claim_breakdown_v1_reports_claim_breakdown_post_response import AccuracyClaimBreakdownV1ReportsClaimBreakdownPostResponse as AccuracyClaimBreakdownV1ReportsClaimBreakdownPostResponse +from .accuracy_claim_breakdown_v1_reports_claim_breakdown_post_params import AccuracyClaimBreakdownV1ReportsClaimBreakdownPostParams as AccuracyClaimBreakdownV1ReportsClaimBreakdownPostParams +from .accuracy_claim_citations_v1_reports_claim_citations_post_response import AccuracyClaimCitationsV1ReportsClaimCitationsPostResponse as AccuracyClaimCitationsV1ReportsClaimCitationsPostResponse +from .accuracy_claim_citations_v1_reports_claim_citations_post_params import AccuracyClaimCitationsV1ReportsClaimCitationsPostParams as AccuracyClaimCitationsV1ReportsClaimCitationsPostParams +from .accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_response import AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostResponse as AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostResponse +from .accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_params import AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostParams as AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostParams +from .accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_response import AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostResponse as AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostResponse +from .accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_params import AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostParams as AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostParams +from .accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_response import AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostResponse as AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostResponse +from .accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_params import AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostParams as AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostParams diff --git a/src/types/reports/accuracy_breakdown_query.py b/src/types/reports/accuracy_breakdown_query.py new file mode 100644 index 00000000..c3fd68fc --- /dev/null +++ b/src/types/reports/accuracy_breakdown_query.py @@ -0,0 +1,55 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["AccuracyBreakdownQuery"] + + +class AccuracyBreakdownQuery(BaseModel): + + start_date: str + + end_date: str + + comparison_start_date: Optional[str] = None + + comparison_end_date: Optional[str] = None + + category_id: str + + topic_ids: Optional[List[str]] = None + + exclude_topic_ids: Optional[bool] = None + + tag_ids: Optional[List[str]] = None + + tag_filter_type: Optional[Literal["all", "any"]] = None + + include_no_tag: Optional[bool] = None + + region_ids: Optional[List[str]] = None + + platform_ids: Optional[List[str]] = None + + persona_ids: Optional[List[str]] = None + + include_no_persona: Optional[bool] = None + + prompt_ids: Optional[List[str]] = None + + citation_categories: Optional[List[str]] = None + + breakdown_by: Optional[Literal["citation", "platform", "topic", "prompt", "tag", "region", "persona"]] = None + + limit: Optional[int] = None + + offset: Optional[int] = None + + search_query: Optional[str] = None + + sort_by: Optional[Literal["citationShare", "accuracy"]] = None + + sort_order: Optional[Literal["asc", "desc"]] = None diff --git a/src/types/reports/accuracy_breakdown_v1_reports_breakdown_post_params.py b/src/types/reports/accuracy_breakdown_v1_reports_breakdown_post_params.py new file mode 100644 index 00000000..0892754f --- /dev/null +++ b/src/types/reports/accuracy_breakdown_v1_reports_breakdown_post_params.py @@ -0,0 +1,56 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Iterable, Optional +from typing_extensions import Literal, Required, TypedDict +from ..._types import SequenceNotStr + +__all__ = ["AccuracyBreakdownV1ReportsBreakdownPostParams"] + + +class AccuracyBreakdownV1ReportsBreakdownPostParams(TypedDict, total=False): + + start_date: Required[str] + + end_date: Required[str] + + comparison_start_date: Optional[str] + + comparison_end_date: Optional[str] + + category_id: Required[str] + + topic_ids: Optional[Iterable[str]] + + exclude_topic_ids: bool + + tag_ids: Optional[Iterable[str]] + + tag_filter_type: Literal["all", "any"] + + include_no_tag: bool + + region_ids: Optional[Iterable[str]] + + platform_ids: Optional[Iterable[str]] + + persona_ids: Optional[Iterable[str]] + + include_no_persona: bool + + prompt_ids: Optional[Iterable[str]] + + citation_categories: Optional[SequenceNotStr[str]] + + breakdown_by: Literal["citation", "platform", "topic", "prompt", "tag", "region", "persona"] + + limit: int + + offset: int + + search_query: Optional[str] + + sort_by: Literal["citationShare", "accuracy"] + + sort_order: Literal["asc", "desc"] diff --git a/src/types/reports/accuracy_breakdown_v1_reports_breakdown_post_response.py b/src/types/reports/accuracy_breakdown_v1_reports_breakdown_post_response.py new file mode 100644 index 00000000..a51cfc7f --- /dev/null +++ b/src/types/reports/accuracy_breakdown_v1_reports_breakdown_post_response.py @@ -0,0 +1,40 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Optional + +from pydantic import Field as FieldInfo + +from ..._models import BaseModel + +__all__ = ["AccuracyBreakdownV1ReportsBreakdownPostResponse", "AccuracyBreakdownRow"] + + +class AccuracyBreakdownRow(BaseModel): + + id: str + + name: str + + share: float + + shareChange: Optional[float] = None + + responseAccuracy: float + + accuracyChange: Optional[float] = None + + inaccurateCount: int + + inaccurateCountChange: Optional[int] = None + + promptCount: Optional[int] = None + + citationCategory: Optional[str] = None + + + +class AccuracyBreakdownV1ReportsBreakdownPostResponse(BaseModel): + + data: List[AccuracyBreakdownRow] + + total_count: int = FieldInfo(alias="totalCount") diff --git a/src/types/reports/accuracy_citation_analysis_query.py b/src/types/reports/accuracy_citation_analysis_query.py new file mode 100644 index 00000000..6b522d3d --- /dev/null +++ b/src/types/reports/accuracy_citation_analysis_query.py @@ -0,0 +1,17 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + + +from ..._models import BaseModel + +__all__ = ["AccuracyCitationAnalysisQuery"] + + +class AccuracyCitationAnalysisQuery(BaseModel): + + category_id: str + + clean_href: str + + start_date: str + + end_date: str diff --git a/src/types/reports/accuracy_citation_analysis_v1_reports_citation_analysis_post_params.py b/src/types/reports/accuracy_citation_analysis_v1_reports_citation_analysis_post_params.py new file mode 100644 index 00000000..f61c3696 --- /dev/null +++ b/src/types/reports/accuracy_citation_analysis_v1_reports_citation_analysis_post_params.py @@ -0,0 +1,18 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing_extensions import Required, TypedDict + +__all__ = ["AccuracyCitationAnalysisV1ReportsCitationAnalysisPostParams"] + + +class AccuracyCitationAnalysisV1ReportsCitationAnalysisPostParams(TypedDict, total=False): + + category_id: Required[str] + + clean_href: Required[str] + + start_date: Required[str] + + end_date: Required[str] diff --git a/src/types/reports/accuracy_citation_analysis_v1_reports_citation_analysis_post_response.py b/src/types/reports/accuracy_citation_analysis_v1_reports_citation_analysis_post_response.py new file mode 100644 index 00000000..2af156fe --- /dev/null +++ b/src/types/reports/accuracy_citation_analysis_v1_reports_citation_analysis_post_response.py @@ -0,0 +1,61 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import List, Optional +from typing_extensions import Literal + +from pydantic import Field as FieldInfo + +from ..._models import BaseModel + +__all__ = ["AccuracyCitationAnalysisV1ReportsCitationAnalysisPostResponse", "AccuracyCitationClaim", "AccuracyCitationEvidence"] + + +class AccuracyCitationEvidence(BaseModel): + + kbName: Optional[str] = None + + kbPath: Optional[str] = None + + kbSnippet: Optional[str] = None + +class AccuracyCitationClaim(BaseModel): + + claimId: str + + claim: str + + attributeId: str + + attribute: str + + neutralThemeId: str + + neutralTheme: str + + snippet: str + + polarity: Optional[Literal["positive", "negative"]] = None + + kbPath: Optional[str] = None + + kbSnippet: Optional[str] = None + + reasoning: Optional[str] = None + + evidence: Optional[List[AccuracyCitationEvidence]] = None + + + +class AccuracyCitationAnalysisV1ReportsCitationAnalysisPostResponse(BaseModel): + + href: str + + domain: str + + page_title: str = FieldInfo(alias="pageTitle") + + markdown_content: str = FieldInfo(alias="markdownContent") + + claims: Optional[List[AccuracyCitationClaim]] = None diff --git a/src/profound/types/reports/accuracy_create_claim_breakdown_params.py b/src/types/reports/accuracy_claim_breakdown_v1_reports_claim_breakdown_post_params.py similarity index 51% rename from src/profound/types/reports/accuracy_create_claim_breakdown_params.py rename to src/types/reports/accuracy_claim_breakdown_v1_reports_claim_breakdown_post_params.py index 3e0cd8e9..30e6d0ef 100644 --- a/src/profound/types/reports/accuracy_create_claim_breakdown_params.py +++ b/src/types/reports/accuracy_claim_breakdown_v1_reports_claim_breakdown_post_params.py @@ -1,46 +1,46 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from __future__ import annotations -from typing import Optional +from typing import Iterable, Optional from typing_extensions import Literal, Required, TypedDict - from ..._types import SequenceNotStr -__all__ = ["AccuracyCreateClaimBreakdownParams"] +__all__ = ["AccuracyClaimBreakdownV1ReportsClaimBreakdownPostParams"] -class AccuracyCreateClaimBreakdownParams(TypedDict, total=False): - category_id: Required[str] +class AccuracyClaimBreakdownV1ReportsClaimBreakdownPostParams(TypedDict, total=False): - cluster_id: Required[str] + start_date: Required[str] end_date: Required[str] - start_date: Required[str] - - citation_categories: Optional[SequenceNotStr[str]] + comparison_start_date: Optional[str] comparison_end_date: Optional[str] - comparison_start_date: Optional[str] + category_id: Required[str] + + topic_ids: Optional[Iterable[str]] exclude_topic_ids: bool - include_no_persona: bool + tag_ids: Optional[Iterable[str]] + + tag_filter_type: Literal["all", "any"] include_no_tag: bool - persona_ids: Optional[SequenceNotStr[str]] + region_ids: Optional[Iterable[str]] - platform_ids: Optional[SequenceNotStr[str]] + platform_ids: Optional[Iterable[str]] - prompt_ids: Optional[SequenceNotStr[str]] + persona_ids: Optional[Iterable[str]] - region_ids: Optional[SequenceNotStr[str]] + include_no_persona: bool - tag_filter_type: Literal["all", "any"] + prompt_ids: Optional[Iterable[str]] - tag_ids: Optional[SequenceNotStr[str]] + citation_categories: Optional[SequenceNotStr[str]] - topic_ids: Optional[SequenceNotStr[str]] + cluster_id: Required[str] diff --git a/src/types/reports/accuracy_claim_breakdown_v1_reports_claim_breakdown_post_response.py b/src/types/reports/accuracy_claim_breakdown_v1_reports_claim_breakdown_post_response.py new file mode 100644 index 00000000..ff8812dd --- /dev/null +++ b/src/types/reports/accuracy_claim_breakdown_v1_reports_claim_breakdown_post_response.py @@ -0,0 +1,60 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Optional + +from ..._models import BaseModel + +__all__ = ["AccuracyClaimBreakdownV1ReportsClaimBreakdownPostResponse", "ClaimBreakdownRow", "ClaimPromptBreakdownRow"] + + +class ClaimPromptBreakdownRow(BaseModel): + + id: str + + label: str + + responseCount: int + + totalResponseCount: int + + responseShare: float + + responseShareDelta: Optional[float] = None + + prevResponseCount: int + + prevTotalResponseCount: int + + promptId: str + + promptText: str + + topicId: str + + hasCurrent: bool + +class ClaimBreakdownRow(BaseModel): + + id: str + + label: str + + responseCount: int + + totalResponseCount: int + + responseShare: float + + responseShareDelta: Optional[float] = None + + prevResponseCount: int + + prevTotalResponseCount: int + + + +class AccuracyClaimBreakdownV1ReportsClaimBreakdownPostResponse(BaseModel): + + platform: List[ClaimBreakdownRow] + + prompt: List[ClaimPromptBreakdownRow] diff --git a/src/profound/types/reports/accuracy_create_claim_citations_params.py b/src/types/reports/accuracy_claim_citations_v1_reports_claim_citations_post_params.py similarity index 55% rename from src/profound/types/reports/accuracy_create_claim_citations_params.py rename to src/types/reports/accuracy_claim_citations_v1_reports_claim_citations_post_params.py index 95b34068..24dea6a8 100644 --- a/src/profound/types/reports/accuracy_create_claim_citations_params.py +++ b/src/types/reports/accuracy_claim_citations_v1_reports_claim_citations_post_params.py @@ -1,54 +1,54 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from __future__ import annotations -from typing import Optional +from typing import Iterable, Optional from typing_extensions import Literal, Required, TypedDict - from ..._types import SequenceNotStr -__all__ = ["AccuracyCreateClaimCitationsParams"] +__all__ = ["AccuracyClaimCitationsV1ReportsClaimCitationsPostParams"] -class AccuracyCreateClaimCitationsParams(TypedDict, total=False): - category_id: Required[str] +class AccuracyClaimCitationsV1ReportsClaimCitationsPostParams(TypedDict, total=False): - cluster_id: Required[str] + start_date: Required[str] end_date: Required[str] - start_date: Required[str] - - citation_categories: Optional[SequenceNotStr[str]] + comparison_start_date: Optional[str] comparison_end_date: Optional[str] - comparison_start_date: Optional[str] + category_id: Required[str] + + topic_ids: Optional[Iterable[str]] exclude_topic_ids: bool - include_no_persona: bool + tag_ids: Optional[Iterable[str]] + + tag_filter_type: Literal["all", "any"] include_no_tag: bool - limit: int + region_ids: Optional[Iterable[str]] - offset: int + platform_ids: Optional[Iterable[str]] - persona_ids: Optional[SequenceNotStr[str]] + persona_ids: Optional[Iterable[str]] - platform_ids: Optional[SequenceNotStr[str]] + include_no_persona: bool - prompt_ids: Optional[SequenceNotStr[str]] + prompt_ids: Optional[Iterable[str]] - region_ids: Optional[SequenceNotStr[str]] + citation_categories: Optional[SequenceNotStr[str]] - search_query: Optional[str] + cluster_id: Required[str] - sort_order: Literal["asc", "desc"] + limit: int - tag_filter_type: Literal["all", "any"] + offset: int - tag_ids: Optional[SequenceNotStr[str]] + search_query: Optional[str] - topic_ids: Optional[SequenceNotStr[str]] + sort_order: Literal["asc", "desc"] diff --git a/src/types/reports/accuracy_claim_citations_v1_reports_claim_citations_post_response.py b/src/types/reports/accuracy_claim_citations_v1_reports_claim_citations_post_response.py new file mode 100644 index 00000000..afc94255 --- /dev/null +++ b/src/types/reports/accuracy_claim_citations_v1_reports_claim_citations_post_response.py @@ -0,0 +1,38 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Optional + +from pydantic import Field as FieldInfo + +from ..._models import BaseModel + +__all__ = ["AccuracyClaimCitationsV1ReportsClaimCitationsPostResponse", "ClaimCitationRow"] + + +class ClaimCitationRow(BaseModel): + + href: str + + hostname: str + + path: str + + citationCategory: str + + domainCategory: str + + snippet: str + + citationCount: float + + citationShare: float + + citationShareDelta: Optional[float] = None + + + +class AccuracyClaimCitationsV1ReportsClaimCitationsPostResponse(BaseModel): + + data: List[ClaimCitationRow] + + total_count: int = FieldInfo(alias="totalCount") diff --git a/src/types/reports/accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_params.py b/src/types/reports/accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_params.py new file mode 100644 index 00000000..84e99da7 --- /dev/null +++ b/src/types/reports/accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_params.py @@ -0,0 +1,22 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing_extensions import Required, TypedDict + +__all__ = ["AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostParams"] + + +class AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostParams(TypedDict, total=False): + + category_id: Required[str] + + cluster_id: Required[str] + + start_date: Required[str] + + end_date: Required[str] + + limit: int + + offset: int diff --git a/src/types/reports/accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_response.py b/src/types/reports/accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_response.py new file mode 100644 index 00000000..f9372da2 --- /dev/null +++ b/src/types/reports/accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_response.py @@ -0,0 +1,32 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List + +from pydantic import Field as FieldInfo + +from ..._models import BaseModel + +__all__ = ["AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostResponse", "ClusterExampleRun"] + + +class ClusterExampleRun(BaseModel): + + runId: str + + claim: str + + responseSnippet: str + + modelId: str + + regionId: str + + createdAt: str + + + +class AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostResponse(BaseModel): + + data: List[ClusterExampleRun] + + total_count: int = FieldInfo(alias="totalCount") diff --git a/src/types/reports/accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_params.py b/src/types/reports/accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_params.py new file mode 100644 index 00000000..42a8874c --- /dev/null +++ b/src/types/reports/accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_params.py @@ -0,0 +1,14 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing_extensions import Required, TypedDict + +__all__ = ["AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostParams"] + + +class AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostParams(TypedDict, total=False): + + category_id: Required[str] + + cluster_id: Required[str] diff --git a/src/types/reports/accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_response.py b/src/types/reports/accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_response.py new file mode 100644 index 00000000..bde17c6a --- /dev/null +++ b/src/types/reports/accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_response.py @@ -0,0 +1,32 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Optional + +from pydantic import Field as FieldInfo + +from ..._models import BaseModel + +__all__ = ["AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostResponse", "ClusterVerificationPair"] + + +class ClusterVerificationPair(BaseModel): + + pairId: str + + snippetIdx: int + + kbPath: str + + quote: str + + reasoning: str + + sourceUpdatedAt: Optional[str] = None + + + +class AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostResponse(BaseModel): + + data: List[ClusterVerificationPair] + + cluster_reasoning: Optional[str] = FieldInfo(alias="clusterReasoning", default=None) diff --git a/src/types/reports/accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_params.py b/src/types/reports/accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_params.py new file mode 100644 index 00000000..d23c53df --- /dev/null +++ b/src/types/reports/accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_params.py @@ -0,0 +1,12 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing_extensions import Required, TypedDict + +__all__ = ["AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostParams"] + + +class AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostParams(TypedDict, total=False): + + category_id: Required[str] diff --git a/src/profound/types/reports/accuracy_create_factcheck_setup_status_response.py b/src/types/reports/accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_response.py similarity index 67% rename from src/profound/types/reports/accuracy_create_factcheck_setup_status_response.py rename to src/types/reports/accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_response.py index ad11f16f..eb7a4637 100644 --- a/src/profound/types/reports/accuracy_create_factcheck_setup_status_response.py +++ b/src/types/reports/accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_response.py @@ -1,4 +1,4 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from typing import Optional @@ -6,10 +6,11 @@ from ..._models import BaseModel -__all__ = ["AccuracyCreateFactcheckSetupStatusResponse"] +__all__ = ["AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostResponse"] -class AccuracyCreateFactcheckSetupStatusResponse(BaseModel): +class AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostResponse(BaseModel): + active_accuracy_prompt_count: int = FieldInfo(alias="activeAccuracyPromptCount") has_verification_data: bool = FieldInfo(alias="hasVerificationData") diff --git a/src/types/reports/accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_params.py b/src/types/reports/accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_params.py new file mode 100644 index 00000000..76cbe0c8 --- /dev/null +++ b/src/types/reports/accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_params.py @@ -0,0 +1,46 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Iterable, Optional +from typing_extensions import Literal, Required, TypedDict +from ..._types import SequenceNotStr + +__all__ = ["AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostParams"] + + +class AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostParams(TypedDict, total=False): + + start_date: Required[str] + + end_date: Required[str] + + comparison_start_date: Optional[str] + + comparison_end_date: Optional[str] + + category_id: Required[str] + + topic_ids: Optional[Iterable[str]] + + exclude_topic_ids: bool + + tag_ids: Optional[Iterable[str]] + + tag_filter_type: Literal["all", "any"] + + include_no_tag: bool + + region_ids: Optional[Iterable[str]] + + platform_ids: Optional[Iterable[str]] + + persona_ids: Optional[Iterable[str]] + + include_no_persona: bool + + prompt_ids: Optional[Iterable[str]] + + citation_categories: Optional[SequenceNotStr[str]] + + limit: int diff --git a/src/types/reports/accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_response.py b/src/types/reports/accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_response.py new file mode 100644 index 00000000..39dfff92 --- /dev/null +++ b/src/types/reports/accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_response.py @@ -0,0 +1,38 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Optional + +from ..._models import BaseModel + +__all__ = ["AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostResponse", "InaccuracyDriverRow"] + + +class InaccuracyDriverRow(BaseModel): + + rowId: str + + clusterId: str + + canonicalClaim: str + + snippet: str + + snippetClaimId: str + + claimOccurrence: float + + claimOccurrenceDelta: Optional[float] = None + + href: str + + citationCategory: str + + domainCategory: str + + citationCount: int + + + +class AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostResponse(BaseModel): + + data: List[InaccuracyDriverRow] diff --git a/src/profound/types/reports/accuracy_create_inaccurate_clusters_params.py b/src/types/reports/accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_params.py similarity index 50% rename from src/profound/types/reports/accuracy_create_inaccurate_clusters_params.py rename to src/types/reports/accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_params.py index 6cc3eb34..9b3faee4 100644 --- a/src/profound/types/reports/accuracy_create_inaccurate_clusters_params.py +++ b/src/types/reports/accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_params.py @@ -1,54 +1,52 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from __future__ import annotations -from typing import Optional +from typing import Iterable, Optional from typing_extensions import Literal, Required, TypedDict - from ..._types import SequenceNotStr -__all__ = ["AccuracyCreateInaccurateClustersParams"] - +__all__ = ["AccuracyInaccurateClustersV1ReportsInaccurateClustersPostParams"] -class AccuracyCreateInaccurateClustersParams(TypedDict, total=False): - category_id: Required[str] - end_date: Required[str] +class AccuracyInaccurateClustersV1ReportsInaccurateClustersPostParams(TypedDict, total=False): start_date: Required[str] - citation_categories: Optional[SequenceNotStr[str]] + end_date: Required[str] + + comparison_start_date: Optional[str] comparison_end_date: Optional[str] - comparison_start_date: Optional[str] + category_id: Required[str] + + topic_ids: Optional[Iterable[str]] exclude_topic_ids: bool - include_models: bool + tag_ids: Optional[Iterable[str]] - include_no_persona: bool + tag_filter_type: Literal["all", "any"] include_no_tag: bool - limit: int - - offset: int + region_ids: Optional[Iterable[str]] - persona_ids: Optional[SequenceNotStr[str]] + platform_ids: Optional[Iterable[str]] - platform_ids: Optional[SequenceNotStr[str]] + persona_ids: Optional[Iterable[str]] - prompt_ids: Optional[SequenceNotStr[str]] + include_no_persona: bool - region_ids: Optional[SequenceNotStr[str]] + prompt_ids: Optional[Iterable[str]] - search_query: Optional[str] + citation_categories: Optional[SequenceNotStr[str]] - tag_filter_type: Literal["all", "any"] + theme_id: Required[str] - tag_ids: Optional[SequenceNotStr[str]] + limit: int - theme_id: Optional[str] + offset: int - topic_ids: Optional[SequenceNotStr[str]] + search_query: Optional[str] diff --git a/src/types/reports/accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_response.py b/src/types/reports/accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_response.py new file mode 100644 index 00000000..ddff6031 --- /dev/null +++ b/src/types/reports/accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_response.py @@ -0,0 +1,44 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Optional + +from pydantic import Field as FieldInfo + +from ..._models import BaseModel + +__all__ = ["AccuracyInaccurateClustersV1ReportsInaccurateClustersPostResponse", "InaccurateClusterRow"] + + +class InaccurateClusterRow(BaseModel): + + clusterId: str + + canonicalClaim: str + + description: Optional[str] = None + + kbPath: str + + kbSnippet: str + + reasoning: str + + claimCount: int + + responseCount: int + + totalResponseCount: int + + responseShare: float + + responseShareDelta: Optional[float] = None + + citationHostnames: List[str] + + + +class AccuracyInaccurateClustersV1ReportsInaccurateClustersPostResponse(BaseModel): + + data: List[InaccurateClusterRow] + + total_count: int = FieldInfo(alias="totalCount") diff --git a/src/profound/types/reports/accuracy_create_inaccurate_themes_params.py b/src/types/reports/accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_params.py similarity index 55% rename from src/profound/types/reports/accuracy_create_inaccurate_themes_params.py rename to src/types/reports/accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_params.py index 4d21acc6..36e6c494 100644 --- a/src/profound/types/reports/accuracy_create_inaccurate_themes_params.py +++ b/src/types/reports/accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_params.py @@ -1,54 +1,54 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from __future__ import annotations -from typing import Optional +from typing import Iterable, Optional from typing_extensions import Literal, Required, TypedDict - from ..._types import SequenceNotStr -__all__ = ["AccuracyCreateInaccurateThemesParams"] - +__all__ = ["AccuracyInaccurateThemesV1ReportsInaccurateThemesPostParams"] -class AccuracyCreateInaccurateThemesParams(TypedDict, total=False): - category_id: Required[str] - end_date: Required[str] +class AccuracyInaccurateThemesV1ReportsInaccurateThemesPostParams(TypedDict, total=False): start_date: Required[str] - citation_categories: Optional[SequenceNotStr[str]] + end_date: Required[str] + + comparison_start_date: Optional[str] comparison_end_date: Optional[str] - comparison_start_date: Optional[str] + category_id: Required[str] + + topic_ids: Optional[Iterable[str]] exclude_topic_ids: bool - include_no_persona: bool + tag_ids: Optional[Iterable[str]] + + tag_filter_type: Literal["all", "any"] include_no_tag: bool - limit: int + region_ids: Optional[Iterable[str]] - offset: int + platform_ids: Optional[Iterable[str]] - persona_ids: Optional[SequenceNotStr[str]] + persona_ids: Optional[Iterable[str]] - platform_ids: Optional[SequenceNotStr[str]] + include_no_persona: bool - prompt_ids: Optional[SequenceNotStr[str]] + prompt_ids: Optional[Iterable[str]] - region_ids: Optional[SequenceNotStr[str]] + citation_categories: Optional[SequenceNotStr[str]] - search_query: Optional[str] + limit: int + + offset: int sort_by: Literal["response_share"] sort_order: Literal["asc", "desc"] - tag_filter_type: Literal["all", "any"] - - tag_ids: Optional[SequenceNotStr[str]] - - topic_ids: Optional[SequenceNotStr[str]] + search_query: Optional[str] diff --git a/src/types/reports/accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_response.py b/src/types/reports/accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_response.py new file mode 100644 index 00000000..593d812b --- /dev/null +++ b/src/types/reports/accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_response.py @@ -0,0 +1,42 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Optional + +from pydantic import Field as FieldInfo + +from ..._models import BaseModel + +__all__ = ["AccuracyInaccurateThemesV1ReportsInaccurateThemesPostResponse", "InaccurateThemeRow"] + + +class InaccurateThemeRow(BaseModel): + + themeId: str + + neutralTheme: str + + description: Optional[str] = None + + inaccurateClaimCount: int + + inaccurateClusterCount: int + + totalClaimCount: int + + totalClusterCount: int + + responseCount: int + + totalResponseCount: int + + responseShare: float + + responseShareDelta: Optional[float] = None + + + +class AccuracyInaccurateThemesV1ReportsInaccurateThemesPostResponse(BaseModel): + + data: List[InaccurateThemeRow] + + total_count: int = FieldInfo(alias="totalCount") diff --git a/src/types/reports/accuracy_overview_query.py b/src/types/reports/accuracy_overview_query.py new file mode 100644 index 00000000..5df1e864 --- /dev/null +++ b/src/types/reports/accuracy_overview_query.py @@ -0,0 +1,47 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["AccuracyOverviewQuery"] + + +class AccuracyOverviewQuery(BaseModel): + + start_date: str + + end_date: str + + comparison_start_date: Optional[str] = None + + comparison_end_date: Optional[str] = None + + category_id: str + + topic_ids: Optional[List[str]] = None + + exclude_topic_ids: Optional[bool] = None + + tag_ids: Optional[List[str]] = None + + tag_filter_type: Optional[Literal["all", "any"]] = None + + include_no_tag: Optional[bool] = None + + region_ids: Optional[List[str]] = None + + platform_ids: Optional[List[str]] = None + + persona_ids: Optional[List[str]] = None + + include_no_persona: Optional[bool] = None + + prompt_ids: Optional[List[str]] = None + + citation_categories: Optional[List[str]] = None + + date_bucket: Optional[str] = None + + group_by: Optional[Literal["period", "theme"]] = None diff --git a/src/profound/types/reports/accuracy_create_overview_params.py b/src/types/reports/accuracy_overview_v1_reports_overview_post_params.py similarity index 53% rename from src/profound/types/reports/accuracy_create_overview_params.py rename to src/types/reports/accuracy_overview_v1_reports_overview_post_params.py index aa7cd1eb..dace8a7b 100644 --- a/src/profound/types/reports/accuracy_create_overview_params.py +++ b/src/types/reports/accuracy_overview_v1_reports_overview_post_params.py @@ -1,48 +1,48 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +# File generated from our OpenAPI spec by Scalar. See README.md for details. from __future__ import annotations -from typing import Optional +from typing import Iterable, Optional from typing_extensions import Literal, Required, TypedDict - from ..._types import SequenceNotStr -__all__ = ["AccuracyCreateOverviewParams"] +__all__ = ["AccuracyOverviewV1ReportsOverviewPostParams"] -class AccuracyCreateOverviewParams(TypedDict, total=False): - category_id: Required[str] - - end_date: Required[str] +class AccuracyOverviewV1ReportsOverviewPostParams(TypedDict, total=False): start_date: Required[str] - citation_categories: Optional[SequenceNotStr[str]] + end_date: Required[str] + + comparison_start_date: Optional[str] comparison_end_date: Optional[str] - comparison_start_date: Optional[str] + category_id: Required[str] - date_bucket: Optional[str] + topic_ids: Optional[Iterable[str]] exclude_topic_ids: bool - group_by: Literal["period", "theme"] + tag_ids: Optional[Iterable[str]] - include_no_persona: bool + tag_filter_type: Literal["all", "any"] include_no_tag: bool - persona_ids: Optional[SequenceNotStr[str]] + region_ids: Optional[Iterable[str]] + + platform_ids: Optional[Iterable[str]] - platform_ids: Optional[SequenceNotStr[str]] + persona_ids: Optional[Iterable[str]] - prompt_ids: Optional[SequenceNotStr[str]] + include_no_persona: bool - region_ids: Optional[SequenceNotStr[str]] + prompt_ids: Optional[Iterable[str]] - tag_filter_type: Literal["all", "any"] + citation_categories: Optional[SequenceNotStr[str]] - tag_ids: Optional[SequenceNotStr[str]] + date_bucket: Optional[str] - topic_ids: Optional[SequenceNotStr[str]] + group_by: Literal["period", "theme"] diff --git a/src/types/reports/accuracy_overview_v1_reports_overview_post_response.py b/src/types/reports/accuracy_overview_v1_reports_overview_post_response.py new file mode 100644 index 00000000..d78d4db0 --- /dev/null +++ b/src/types/reports/accuracy_overview_v1_reports_overview_post_response.py @@ -0,0 +1,78 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import List, Optional + +from pydantic import Field as FieldInfo + +from ..._models import BaseModel + +__all__ = ["AccuracyOverviewV1ReportsOverviewPostResponse", "AccuracyTrendPoint", "AccuracyScoreBreakdown", "AccuracyThemeTrendSeries", "AccuracyThemeTrendPoint", "AccuracyTrendSeriesMeta"] + + +class AccuracyTrendSeriesMeta(BaseModel): + + id: str + + label: str + + total: int + +class AccuracyThemeTrendPoint(BaseModel): + + date: str + + total: int + + accurate: int + + ratio: float + +class AccuracyThemeTrendSeries(BaseModel): + + id: str + + label: str + + data: List[AccuracyThemeTrendPoint] + +class AccuracyScoreBreakdown(BaseModel): + + status: str + + count: int + + share: float + + countChange: Optional[int] = None + + shareChange: Optional[float] = None + +class AccuracyTrendPoint(BaseModel): + + date: str + + total: int + + accurate: int + + ratio: float + + prevPeriodData: Optional[AccuracyTrendPoint] = None + + + +class AccuracyOverviewV1ReportsOverviewPostResponse(BaseModel): + + trend_by_period: List[AccuracyTrendPoint] = FieldInfo(alias="trendByPeriod") + + overall_accuracy: float = FieldInfo(alias="overallAccuracy") + + accuracy_change: Optional[float] = FieldInfo(alias="accuracyChange", default=None) + + score_breakdown: List[AccuracyScoreBreakdown] = FieldInfo(alias="scoreBreakdown") + + theme_trend: Optional[List[AccuracyThemeTrendSeries]] = FieldInfo(alias="themeTrend", default=None) + + available_series: Optional[List[AccuracyTrendSeriesMeta]] = FieldInfo(alias="availableSeries", default=None) diff --git a/src/types/reports/accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_params.py b/src/types/reports/accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_params.py new file mode 100644 index 00000000..9718e08d --- /dev/null +++ b/src/types/reports/accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_params.py @@ -0,0 +1,46 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Iterable, Optional +from typing_extensions import Literal, Required, TypedDict +from ..._types import SequenceNotStr + +__all__ = ["AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostParams"] + + +class AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostParams(TypedDict, total=False): + + start_date: Required[str] + + end_date: Required[str] + + comparison_start_date: Optional[str] + + comparison_end_date: Optional[str] + + category_id: Required[str] + + topic_ids: Optional[Iterable[str]] + + exclude_topic_ids: bool + + tag_ids: Optional[Iterable[str]] + + tag_filter_type: Literal["all", "any"] + + include_no_tag: bool + + region_ids: Optional[Iterable[str]] + + platform_ids: Optional[Iterable[str]] + + persona_ids: Optional[Iterable[str]] + + include_no_persona: bool + + prompt_ids: Optional[Iterable[str]] + + citation_categories: Optional[SequenceNotStr[str]] + + limit: int diff --git a/src/types/reports/accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_response.py b/src/types/reports/accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_response.py new file mode 100644 index 00000000..b4d577b0 --- /dev/null +++ b/src/types/reports/accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_response.py @@ -0,0 +1,24 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Optional + +from ..._models import BaseModel + +__all__ = ["AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostResponse", "TopInaccurateClaimRow"] + + +class TopInaccurateClaimRow(BaseModel): + + clusterId: str + + canonicalClaim: str + + claimOccurrence: float + + claimOccurrenceDelta: Optional[float] = None + + + +class AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostResponse(BaseModel): + + data: List[TopInaccurateClaimRow] diff --git a/src/types/reports/accuracy_topic_ids_query.py b/src/types/reports/accuracy_topic_ids_query.py new file mode 100644 index 00000000..bbb3d90b --- /dev/null +++ b/src/types/reports/accuracy_topic_ids_query.py @@ -0,0 +1,15 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + + +from ..._models import BaseModel + +__all__ = ["AccuracyTopicIdsQuery"] + + +class AccuracyTopicIdsQuery(BaseModel): + + category_id: str + + start_date: str + + end_date: str diff --git a/src/types/reports/accuracy_topic_ids_v1_reports_topic_ids_post_params.py b/src/types/reports/accuracy_topic_ids_v1_reports_topic_ids_post_params.py new file mode 100644 index 00000000..3d25ca7c --- /dev/null +++ b/src/types/reports/accuracy_topic_ids_v1_reports_topic_ids_post_params.py @@ -0,0 +1,16 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing_extensions import Required, TypedDict + +__all__ = ["AccuracyTopicIdsV1ReportsTopicIdsPostParams"] + + +class AccuracyTopicIdsV1ReportsTopicIdsPostParams(TypedDict, total=False): + + category_id: Required[str] + + start_date: Required[str] + + end_date: Required[str] diff --git a/src/types/reports/accuracy_topic_ids_v1_reports_topic_ids_post_response.py b/src/types/reports/accuracy_topic_ids_v1_reports_topic_ids_post_response.py new file mode 100644 index 00000000..85bfa955 --- /dev/null +++ b/src/types/reports/accuracy_topic_ids_v1_reports_topic_ids_post_response.py @@ -0,0 +1,8 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List +from typing_extensions import TypeAlias + +__all__ = ["AccuracyTopicIdsV1ReportsTopicIdsPostResponse"] + +AccuracyTopicIdsV1ReportsTopicIdsPostResponse: TypeAlias = List[str] diff --git a/src/types/reports/bot_create_report_v1_v1_reports_post_params.py b/src/types/reports/bot_create_report_v1_v1_reports_post_params.py new file mode 100644 index 00000000..7558fd90 --- /dev/null +++ b/src/types/reports/bot_create_report_v1_v1_reports_post_params.py @@ -0,0 +1,67 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..pagination import Pagination +from ..path_filter import PathFilter +from ..bot_name_filter import BotNameFilter +from ..bot_provider_filter import BotProviderFilter +from ..._utils import PropertyInfo + +__all__ = ["BotCreateReportV1V1ReportsPostParams", "NumericMetricFilter"] + + +class BotCreateReportV1V1ReportsPostParams(TypedDict, total=False): + + date_interval: Literal["hour", "day", "week", "month", "year", "relative_week"] + """Date interval for the report. (only used with date dimension)""" + + dimensions: Iterable[Literal["date", "path", "bot_name", "bot_provider"]] + """Dimensions to group the report by.""" + + metrics: Required[Iterable[Literal["count", "citations", "indexing", "training", "last_visit"]]] + + order_by: Dict[str, Literal["asc", "desc"]] + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - key is the field to order by, which can be a metric or dimension + - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Pagination + """Pagination settings for the report results.""" + + domain: Required[str] + """Domain to query logs for.""" + + start_date: Required[Union[str, datetime]] + """Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp.""" + + end_date: Union[str, datetime] + """End date for logs. Accepts same formats as start_date. Defaults to now if omitted.""" + + organization_id: Optional[str] + + metric_filters: Iterable[NumericMetricFilter] + """Numeric filters applied after report metrics are calculated.""" + + filters: Iterable[Annotated[Union[PathFilter, BotNameFilter, BotProviderFilter], PropertyInfo(discriminator="field")]] + """Filters for bots report.""" + + +class NumericMetricFilter(TypedDict, total=False): + + field: Required[str] + + operator: Required[Literal[">", ">=", "<", "<=", "=", "==", "!="]] + + value: Required[Union[int, float]] + diff --git a/src/types/reports/bot_create_report_v2_v2_reports_post_params.py b/src/types/reports/bot_create_report_v2_v2_reports_post_params.py new file mode 100644 index 00000000..c7e30a05 --- /dev/null +++ b/src/types/reports/bot_create_report_v2_v2_reports_post_params.py @@ -0,0 +1,75 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..pagination import Pagination +from ..path_filter import PathFilter +from ..bot_name_filter import BotNameFilter +from ..bot_provider_filter import BotProviderFilter +from ..._utils import PropertyInfo + +__all__ = ["BotCreateReportV2V2ReportsPostParams", "NumericMetricFilter", "BotTypeFilter"] + + +class BotCreateReportV2V2ReportsPostParams(TypedDict, total=False): + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + """Date interval for the report. (only used with date dimension)""" + + dimensions: Iterable[Literal["date", "hour", "path", "bot_name", "bot_provider", "bot_type"]] + """Dimensions to group the report by.""" + + metrics: Required[Iterable[Literal["count", "citations", "indexing", "training", "last_visit"]]] + + order_by: Dict[str, Literal["asc", "desc"]] + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - key is the field to order by, which can be a metric or dimension + - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Pagination + """Pagination settings for the report results.""" + + domain: Required[str] + """Domain to query logs for.""" + + start_date: Required[Union[str, datetime]] + """Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp.""" + + end_date: Union[str, datetime] + """End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted.""" + + organization_id: Optional[str] + + metric_filters: Iterable[NumericMetricFilter] + """Numeric filters applied after report metrics are calculated.""" + + filters: Iterable[Annotated[Union[PathFilter, BotNameFilter, BotProviderFilter, BotTypeFilter], PropertyInfo(discriminator="field")]] + """Filters for bots report.""" + + +class BotTypeFilter(TypedDict, total=False): + + field: Required[Literal["bot_type"]] + + operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[Literal["ai_assistant", "ai_training", "index", "ai_agent"], Iterable[Literal["ai_assistant", "ai_training", "index", "ai_agent"]]]] + +class NumericMetricFilter(TypedDict, total=False): + + field: Required[str] + + operator: Required[Literal[">", ">=", "<", "<=", "=", "==", "!="]] + + value: Required[Union[int, float]] + diff --git a/src/types/reports/bots_report_query.py b/src/types/reports/bots_report_query.py new file mode 100644 index 00000000..5c5959ca --- /dev/null +++ b/src/types/reports/bots_report_query.py @@ -0,0 +1,67 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal +from ..._utils import PropertyInfo + +from ..._models import BaseModel +from ..pagination import Pagination +from ..path_filter import PathFilter +from ..bot_name_filter import BotNameFilter +from ..bot_provider_filter import BotProviderFilter + +__all__ = ["BotsReportQuery", "NumericMetricFilter"] + + +class NumericMetricFilter(BaseModel): + + field: str + + operator: Literal[">", ">=", "<", "<=", "=", "==", "!="] + + value: Union[int, float] + + + +class BotsReportQuery(BaseModel): + + date_interval: Optional[Literal["hour", "day", "week", "month", "year", "relative_week"]] = None + """Date interval for the report. (only used with date dimension)""" + + dimensions: Optional[List[Literal["date", "path", "bot_name", "bot_provider"]]] = None + """Dimensions to group the report by.""" + + metrics: List[Literal["count", "citations", "indexing", "training", "last_visit"]] + + order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - key is the field to order by, which can be a metric or dimension + - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Optional[Pagination] = None + """Pagination settings for the report results.""" + + domain: str + """Domain to query logs for.""" + + start_date: datetime + """Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp.""" + + end_date: Optional[datetime] = None + """End date for logs. Accepts same formats as start_date. Defaults to now if omitted.""" + + organization_id: Optional[str] = None + + metric_filters: Optional[List[NumericMetricFilter]] = None + """Numeric filters applied after report metrics are calculated.""" + + filters: Optional[List[Annotated[Union[PathFilter, BotNameFilter, BotProviderFilter], PropertyInfo(discriminator="field")]]] = None + """Filters for bots report.""" diff --git a/src/types/reports/bots_report_query_v2.py b/src/types/reports/bots_report_query_v2.py new file mode 100644 index 00000000..9a85770f --- /dev/null +++ b/src/types/reports/bots_report_query_v2.py @@ -0,0 +1,75 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal +from ..._utils import PropertyInfo + +from ..._models import BaseModel +from ..pagination import Pagination +from ..path_filter import PathFilter +from ..bot_name_filter import BotNameFilter +from ..bot_provider_filter import BotProviderFilter + +__all__ = ["BotsReportQueryV2", "NumericMetricFilter", "BotTypeFilter"] + + +class BotTypeFilter(BaseModel): + + field: Literal["bot_type"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[Literal["ai_assistant", "ai_training", "index", "ai_agent"], List[Literal["ai_assistant", "ai_training", "index", "ai_agent"]]] + +class NumericMetricFilter(BaseModel): + + field: str + + operator: Literal[">", ">=", "<", "<=", "=", "==", "!="] + + value: Union[int, float] + + + +class BotsReportQueryV2(BaseModel): + + date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None + """Date interval for the report. (only used with date dimension)""" + + dimensions: Optional[List[Literal["date", "hour", "path", "bot_name", "bot_provider", "bot_type"]]] = None + """Dimensions to group the report by.""" + + metrics: List[Literal["count", "citations", "indexing", "training", "last_visit"]] + + order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - key is the field to order by, which can be a metric or dimension + - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Optional[Pagination] = None + """Pagination settings for the report results.""" + + domain: str + """Domain to query logs for.""" + + start_date: datetime + """Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp.""" + + end_date: Optional[datetime] = None + """End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted.""" + + organization_id: Optional[str] = None + + metric_filters: Optional[List[NumericMetricFilter]] = None + """Numeric filters applied after report metrics are calculated.""" + + filters: Optional[List[Annotated[Union[PathFilter, BotNameFilter, BotProviderFilter, BotTypeFilter], PropertyInfo(discriminator="field")]]] = None + """Filters for bots report.""" diff --git a/src/types/reports/brand_name_filter.py b/src/types/reports/brand_name_filter.py new file mode 100644 index 00000000..4974eb61 --- /dev/null +++ b/src/types/reports/brand_name_filter.py @@ -0,0 +1,17 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Union +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["BrandNameFilter"] + + +class BrandNameFilter(BaseModel): + + field: Literal["brand_name"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] diff --git a/src/types/reports/citation_query_v1_reports_post_params.py b/src/types/reports/citation_query_v1_reports_post_params.py new file mode 100644 index 00000000..9e218208 --- /dev/null +++ b/src/types/reports/citation_query_v1_reports_post_params.py @@ -0,0 +1,76 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._types import SequenceNotStr +from ..pagination import Pagination +from ..hostname_filter import HostnameFilter +from ..path_filter import PathFilter +from ..region_id_filter import RegionIdFilter +from ..region_name_filter import RegionNameFilter +from ..topic_id_filter import TopicIdFilter +from ..topic_name_filter import TopicNameFilter +from ..model_id_filter import ModelIdFilter +from ..tag_id_filter import TagIdFilter +from ..tag_name_filter import TagNameFilter +from ..url_filter import UrlFilter +from ..root_domain_filter import RootDomainFilter +from ..analysis_type_filter import AnalysisTypeFilter +from ..prompt_type_filter import PromptTypeFilter +from ..persona_id_filter import PersonaIdFilter +from ..prompt_filter import PromptFilter +from ..prompt_id_filter import PromptIdFilter +from ..._utils import PropertyInfo + +__all__ = ["CitationQueryV1ReportsPostParams", "CitationCategoryFilter"] + + +class CitationQueryV1ReportsPostParams(TypedDict, total=False): + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + """Date interval for the report. (only used with date dimension)""" + + dimensions: Iterable[Literal["hostname", "path", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "url", "root_domain", "persona", "citation_category"]] + """Dimensions to group the report by.""" + + metrics: Required[Iterable[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]]] + """Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead.""" + + order_by: Dict[str, Literal["asc", "desc"]] + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - `key` is the field to order by, which can be a metric or dimension + - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Pagination + """Pagination settings for the report results.""" + + category_id: Required[str] + + start_date: Required[Union[str, datetime]] + """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + end_date: Required[Union[str, datetime]] + """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + filters: Iterable[Annotated[Union[HostnameFilter, PathFilter, RegionIdFilter, RegionNameFilter, TopicIdFilter, TopicNameFilter, ModelIdFilter, TagIdFilter, TagNameFilter, UrlFilter, RootDomainFilter, AnalysisTypeFilter, PromptTypeFilter, PersonaIdFilter, CitationCategoryFilter, PromptFilter, PromptIdFilter], PropertyInfo(discriminator="field")]] + """List of filters to apply to the citations report.""" + + +class CitationCategoryFilter(TypedDict, total=False): + + field: Required[Literal["citation_category"]] + + operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[str, SequenceNotStr[str]]] + diff --git a/src/types/reports/citation_query_v1_reports_post_response.py b/src/types/reports/citation_query_v1_reports_post_response.py new file mode 100644 index 00000000..3a960a45 --- /dev/null +++ b/src/types/reports/citation_query_v1_reports_post_response.py @@ -0,0 +1,24 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Optional, Union + +from ..._models import BaseModel +from ..report_info import ReportInfo + +__all__ = ["CitationQueryV1ReportsPostResponse", "CitationsResult"] + + +class CitationsResult(BaseModel): + + metrics: List[Optional[Union[int, float, str]]] + + dimensions: List[str] + + + +class CitationQueryV1ReportsPostResponse(BaseModel): + + info: ReportInfo + """Base model for report information.""" + + data: List[CitationsResult] diff --git a/src/types/reports/citation_query_v2_v2_reports_post_params.py b/src/types/reports/citation_query_v2_v2_reports_post_params.py new file mode 100644 index 00000000..af65b4a2 --- /dev/null +++ b/src/types/reports/citation_query_v2_v2_reports_post_params.py @@ -0,0 +1,55 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Iterable, Optional +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._utils import PropertyInfo + +__all__ = ["CitationQueryV2V2ReportsPostParams", "FilterNode"] + + +class CitationQueryV2V2ReportsPostParams(TypedDict, total=False): + + category_id: Required[str] + + start_date: Required[str] + """YYYY-MM-DD, ET, inclusive""" + + end_date: Required[str] + """YYYY-MM-DD, ET, inclusive""" + + group_by: Iterable[Literal["page", "date", "model", "topic", "region", "persona", "prompt"]] + + metrics: Optional[Iterable[Literal["count", "citation_share", "rank", "first_cited_at"]]] + + interval: Literal["day", "week", "month"] + + scope: Literal["all", "owned"] + """`all` (every cited domain) or `owned` (only your owned domains, for easy client-side totals).""" + + filter: Optional[FilterNode] + + limit: Optional[int] + """Page size; default 10, max 50.""" + + max_results: Optional[int] + """Stream endpoint only: cap the number of streamed rows (default: all).""" + + cursor: Optional[str] + + +class FilterNode(TypedDict, total=False): + + and_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="and")] + + or_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="or")] + + not_: Annotated[Optional[FilterNode], PropertyInfo(alias="not")] + + field: Optional[str] + + op: Optional[str] + + value: str + diff --git a/src/types/reports/citation_query_v2_v2_reports_post_response.py b/src/types/reports/citation_query_v2_v2_reports_post_response.py new file mode 100644 index 00000000..9d417b0e --- /dev/null +++ b/src/types/reports/citation_query_v2_v2_reports_post_response.py @@ -0,0 +1,13 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing_extensions import TypeAlias +from ..._models import BaseModel + +__all__ = ["CitationQueryV2V2ReportsPostResponse", "CitationQueryV2V2ReportsPostResponse"] + +class CitationQueryV2V2ReportsPostResponse(BaseModel): + pass + + + +CitationQueryV2V2ReportsPostResponse: TypeAlias = CitationQueryV2V2ReportsPostResponse diff --git a/src/types/reports/citation_stream_v1_reports_stream_post_params.py b/src/types/reports/citation_stream_v1_reports_stream_post_params.py new file mode 100644 index 00000000..4bc1967d --- /dev/null +++ b/src/types/reports/citation_stream_v1_reports_stream_post_params.py @@ -0,0 +1,75 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._types import SequenceNotStr +from ..pagination import Pagination +from ..hostname_filter import HostnameFilter +from ..path_filter import PathFilter +from ..region_id_filter import RegionIdFilter +from ..region_name_filter import RegionNameFilter +from ..topic_id_filter import TopicIdFilter +from ..topic_name_filter import TopicNameFilter +from ..model_id_filter import ModelIdFilter +from ..tag_id_filter import TagIdFilter +from ..tag_name_filter import TagNameFilter +from ..url_filter import UrlFilter +from ..root_domain_filter import RootDomainFilter +from ..analysis_type_filter import AnalysisTypeFilter +from ..prompt_type_filter import PromptTypeFilter +from ..persona_id_filter import PersonaIdFilter +from ..prompt_filter import PromptFilter +from ..prompt_id_filter import PromptIdFilter +from ..._utils import PropertyInfo + +__all__ = ["CitationStreamV1ReportsStreamPostParams", "CitationCategoryFilter"] + + +class CitationStreamV1ReportsStreamPostParams(TypedDict, total=False): + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + """Date interval for the report. (only used with date dimension)""" + + dimensions: Iterable[Literal["hostname", "path", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "url", "root_domain", "persona", "citation_category"]] + """Dimensions to group the report by.""" + + metrics: Required[Iterable[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]]] + """Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead.""" + + order_by: Dict[str, Literal["asc", "desc"]] + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - `key` is the field to order by, which can be a metric or dimension + - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Optional[Pagination] + + category_id: Required[str] + + start_date: Required[Union[str, datetime]] + """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + end_date: Required[Union[str, datetime]] + """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + filters: Iterable[Annotated[Union[HostnameFilter, PathFilter, RegionIdFilter, RegionNameFilter, TopicIdFilter, TopicNameFilter, ModelIdFilter, TagIdFilter, TagNameFilter, UrlFilter, RootDomainFilter, AnalysisTypeFilter, PromptTypeFilter, PersonaIdFilter, CitationCategoryFilter, PromptFilter, PromptIdFilter], PropertyInfo(discriminator="field")]] + """List of filters to apply to the citations report.""" + + +class CitationCategoryFilter(TypedDict, total=False): + + field: Required[Literal["citation_category"]] + + operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[str, SequenceNotStr[str]]] + diff --git a/src/types/reports/citation_stream_v1_reports_stream_post_response.py b/src/types/reports/citation_stream_v1_reports_stream_post_response.py new file mode 100644 index 00000000..15c75420 --- /dev/null +++ b/src/types/reports/citation_stream_v1_reports_stream_post_response.py @@ -0,0 +1,27 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Union +from typing_extensions import TypeAlias +from ..._models import BaseModel + +__all__ = ["CitationStreamV1ReportsStreamPostResponse", "CitationStreamV1ReportsStreamPostResponse", "Query", "CitationStreamV1ReportsStreamPostResponse2"] + +class CitationStreamV1ReportsStreamPostResponse2(BaseModel): + pass + +class Query(BaseModel): + pass + +class CitationStreamV1ReportsStreamPostResponse(BaseModel): + + query: Query + """The normalized query used to build the stream.""" + + total_rows: int + """Total number of rows available before pagination is applied.""" + + + +CitationStreamV1ReportsStreamPostResponse: TypeAlias = Union[CitationStreamV1ReportsStreamPostResponse, CitationStreamV1ReportsStreamPostResponse2] diff --git a/src/types/reports/citation_stream_v2_v2_reports_stream_post_params.py b/src/types/reports/citation_stream_v2_v2_reports_stream_post_params.py new file mode 100644 index 00000000..a58dd2f5 --- /dev/null +++ b/src/types/reports/citation_stream_v2_v2_reports_stream_post_params.py @@ -0,0 +1,55 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Iterable, Optional +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._utils import PropertyInfo + +__all__ = ["CitationStreamV2V2ReportsStreamPostParams", "FilterNode"] + + +class CitationStreamV2V2ReportsStreamPostParams(TypedDict, total=False): + + category_id: Required[str] + + start_date: Required[str] + """YYYY-MM-DD, ET, inclusive""" + + end_date: Required[str] + """YYYY-MM-DD, ET, inclusive""" + + group_by: Iterable[Literal["page", "date", "model", "topic", "region", "persona", "prompt"]] + + metrics: Optional[Iterable[Literal["count", "citation_share", "rank", "first_cited_at"]]] + + interval: Literal["day", "week", "month"] + + scope: Literal["all", "owned"] + """`all` (every cited domain) or `owned` (only your owned domains, for easy client-side totals).""" + + filter: Optional[FilterNode] + + limit: Optional[int] + """Page size; default 10, max 50.""" + + max_results: Optional[int] + """Stream endpoint only: cap the number of streamed rows (default: all).""" + + cursor: Optional[str] + + +class FilterNode(TypedDict, total=False): + + and_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="and")] + + or_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="or")] + + not_: Annotated[Optional[FilterNode], PropertyInfo(alias="not")] + + field: Optional[str] + + op: Optional[str] + + value: str + diff --git a/src/types/reports/citation_stream_v2_v2_reports_stream_post_response.py b/src/types/reports/citation_stream_v2_v2_reports_stream_post_response.py new file mode 100644 index 00000000..e12ac8f5 --- /dev/null +++ b/src/types/reports/citation_stream_v2_v2_reports_stream_post_response.py @@ -0,0 +1,7 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing_extensions import TypeAlias + +__all__ = ["CitationStreamV2V2ReportsStreamPostResponse"] + +CitationStreamV2V2ReportsStreamPostResponse: TypeAlias = str diff --git a/src/types/reports/citations_query.py b/src/types/reports/citations_query.py new file mode 100644 index 00000000..3ba3eb12 --- /dev/null +++ b/src/types/reports/citations_query.py @@ -0,0 +1,75 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal +from ..._utils import PropertyInfo + +from ..._models import BaseModel +from ..pagination import Pagination +from ..hostname_filter import HostnameFilter +from ..path_filter import PathFilter +from ..region_id_filter import RegionIdFilter +from ..region_name_filter import RegionNameFilter +from ..topic_id_filter import TopicIdFilter +from ..topic_name_filter import TopicNameFilter +from ..model_id_filter import ModelIdFilter +from ..tag_id_filter import TagIdFilter +from ..tag_name_filter import TagNameFilter +from ..url_filter import UrlFilter +from ..root_domain_filter import RootDomainFilter +from ..analysis_type_filter import AnalysisTypeFilter +from ..prompt_type_filter import PromptTypeFilter +from ..persona_id_filter import PersonaIdFilter +from ..prompt_filter import PromptFilter +from ..prompt_id_filter import PromptIdFilter + +__all__ = ["CitationsQuery", "CitationCategoryFilter"] + + +class CitationCategoryFilter(BaseModel): + + field: Literal["citation_category"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] + + + +class CitationsQuery(BaseModel): + + date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None + """Date interval for the report. (only used with date dimension)""" + + dimensions: Optional[List[Literal["hostname", "path", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "url", "root_domain", "persona", "citation_category"]]] = None + """Dimensions to group the report by.""" + + metrics: List[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]] + """Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead.""" + + order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - `key` is the field to order by, which can be a metric or dimension + - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Optional[Pagination] = None + """Pagination settings for the report results.""" + + category_id: str + + start_date: datetime + """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + end_date: datetime + """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + filters: Optional[List[Annotated[Union[HostnameFilter, PathFilter, RegionIdFilter, RegionNameFilter, TopicIdFilter, TopicNameFilter, ModelIdFilter, TagIdFilter, TagNameFilter, UrlFilter, RootDomainFilter, AnalysisTypeFilter, PromptTypeFilter, PersonaIdFilter, CitationCategoryFilter, PromptFilter, PromptIdFilter], PropertyInfo(discriminator="field")]]] = None + """List of filters to apply to the citations report.""" diff --git a/src/types/reports/citations_v2_query.py b/src/types/reports/citations_v2_query.py new file mode 100644 index 00000000..99280931 --- /dev/null +++ b/src/types/reports/citations_v2_query.py @@ -0,0 +1,58 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import List, Optional +from typing_extensions import Literal + +from pydantic import Field as FieldInfo + +from ..._models import BaseModel + +__all__ = ["CitationsV2Query", "FilterNode"] + + +class FilterNode(BaseModel): + + and_: Optional[List[FilterNode]] = FieldInfo(alias="and", default=None) + + or_: Optional[List[FilterNode]] = FieldInfo(alias="or", default=None) + + not_: Optional[FilterNode] = FieldInfo(alias="not", default=None) + + field: Optional[str] = None + + op: Optional[str] = None + + value: Optional[str] = None + + + +class CitationsV2Query(BaseModel): + + category_id: str + + start_date: str + """YYYY-MM-DD, ET, inclusive""" + + end_date: str + """YYYY-MM-DD, ET, inclusive""" + + group_by: Optional[List[Literal["page", "date", "model", "topic", "region", "persona", "prompt"]]] = None + + metrics: Optional[List[Literal["count", "citation_share", "rank", "first_cited_at"]]] = None + + interval: Optional[Literal["day", "week", "month"]] = None + + scope: Optional[Literal["all", "owned"]] = None + """`all` (every cited domain) or `owned` (only your owned domains, for easy client-side totals).""" + + filter: Optional[FilterNode] = None + + limit: Optional[int] = None + """Page size; default 10, max 50.""" + + max_results: Optional[int] = None + """Stream endpoint only: cap the number of streamed rows (default: all).""" + + cursor: Optional[str] = None diff --git a/src/types/reports/claim_breakdown_query.py b/src/types/reports/claim_breakdown_query.py new file mode 100644 index 00000000..e64c564b --- /dev/null +++ b/src/types/reports/claim_breakdown_query.py @@ -0,0 +1,45 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["ClaimBreakdownQuery"] + + +class ClaimBreakdownQuery(BaseModel): + + start_date: str + + end_date: str + + comparison_start_date: Optional[str] = None + + comparison_end_date: Optional[str] = None + + category_id: str + + topic_ids: Optional[List[str]] = None + + exclude_topic_ids: Optional[bool] = None + + tag_ids: Optional[List[str]] = None + + tag_filter_type: Optional[Literal["all", "any"]] = None + + include_no_tag: Optional[bool] = None + + region_ids: Optional[List[str]] = None + + platform_ids: Optional[List[str]] = None + + persona_ids: Optional[List[str]] = None + + include_no_persona: Optional[bool] = None + + prompt_ids: Optional[List[str]] = None + + citation_categories: Optional[List[str]] = None + + cluster_id: str diff --git a/src/types/reports/claim_citations_query.py b/src/types/reports/claim_citations_query.py new file mode 100644 index 00000000..9125adde --- /dev/null +++ b/src/types/reports/claim_citations_query.py @@ -0,0 +1,53 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["ClaimCitationsQuery"] + + +class ClaimCitationsQuery(BaseModel): + + start_date: str + + end_date: str + + comparison_start_date: Optional[str] = None + + comparison_end_date: Optional[str] = None + + category_id: str + + topic_ids: Optional[List[str]] = None + + exclude_topic_ids: Optional[bool] = None + + tag_ids: Optional[List[str]] = None + + tag_filter_type: Optional[Literal["all", "any"]] = None + + include_no_tag: Optional[bool] = None + + region_ids: Optional[List[str]] = None + + platform_ids: Optional[List[str]] = None + + persona_ids: Optional[List[str]] = None + + include_no_persona: Optional[bool] = None + + prompt_ids: Optional[List[str]] = None + + citation_categories: Optional[List[str]] = None + + cluster_id: str + + limit: Optional[int] = None + + offset: Optional[int] = None + + search_query: Optional[str] = None + + sort_order: Optional[Literal["asc", "desc"]] = None diff --git a/src/types/reports/cluster_example_runs_query.py b/src/types/reports/cluster_example_runs_query.py new file mode 100644 index 00000000..a0998b71 --- /dev/null +++ b/src/types/reports/cluster_example_runs_query.py @@ -0,0 +1,22 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Optional + +from ..._models import BaseModel + +__all__ = ["ClusterExampleRunsQuery"] + + +class ClusterExampleRunsQuery(BaseModel): + + category_id: str + + cluster_id: str + + start_date: str + + end_date: str + + limit: Optional[int] = None + + offset: Optional[int] = None diff --git a/src/types/reports/cluster_verification_pairs_query.py b/src/types/reports/cluster_verification_pairs_query.py new file mode 100644 index 00000000..0a7f2b4d --- /dev/null +++ b/src/types/reports/cluster_verification_pairs_query.py @@ -0,0 +1,13 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + + +from ..._models import BaseModel + +__all__ = ["ClusterVerificationPairsQuery"] + + +class ClusterVerificationPairsQuery(BaseModel): + + category_id: str + + cluster_id: str diff --git a/src/types/reports/fact_check_setup_status_query.py b/src/types/reports/fact_check_setup_status_query.py new file mode 100644 index 00000000..60b38657 --- /dev/null +++ b/src/types/reports/fact_check_setup_status_query.py @@ -0,0 +1,11 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + + +from ..._models import BaseModel + +__all__ = ["FactCheckSetupStatusQuery"] + + +class FactCheckSetupStatusQuery(BaseModel): + + category_id: str diff --git a/src/types/reports/inaccuracy_drivers_query.py b/src/types/reports/inaccuracy_drivers_query.py new file mode 100644 index 00000000..ddb47218 --- /dev/null +++ b/src/types/reports/inaccuracy_drivers_query.py @@ -0,0 +1,45 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["InaccuracyDriversQuery"] + + +class InaccuracyDriversQuery(BaseModel): + + start_date: str + + end_date: str + + comparison_start_date: Optional[str] = None + + comparison_end_date: Optional[str] = None + + category_id: str + + topic_ids: Optional[List[str]] = None + + exclude_topic_ids: Optional[bool] = None + + tag_ids: Optional[List[str]] = None + + tag_filter_type: Optional[Literal["all", "any"]] = None + + include_no_tag: Optional[bool] = None + + region_ids: Optional[List[str]] = None + + platform_ids: Optional[List[str]] = None + + persona_ids: Optional[List[str]] = None + + include_no_persona: Optional[bool] = None + + prompt_ids: Optional[List[str]] = None + + citation_categories: Optional[List[str]] = None + + limit: Optional[int] = None diff --git a/src/types/reports/inaccurate_clusters_query.py b/src/types/reports/inaccurate_clusters_query.py new file mode 100644 index 00000000..1c18eb5d --- /dev/null +++ b/src/types/reports/inaccurate_clusters_query.py @@ -0,0 +1,51 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["InaccurateClustersQuery"] + + +class InaccurateClustersQuery(BaseModel): + + start_date: str + + end_date: str + + comparison_start_date: Optional[str] = None + + comparison_end_date: Optional[str] = None + + category_id: str + + topic_ids: Optional[List[str]] = None + + exclude_topic_ids: Optional[bool] = None + + tag_ids: Optional[List[str]] = None + + tag_filter_type: Optional[Literal["all", "any"]] = None + + include_no_tag: Optional[bool] = None + + region_ids: Optional[List[str]] = None + + platform_ids: Optional[List[str]] = None + + persona_ids: Optional[List[str]] = None + + include_no_persona: Optional[bool] = None + + prompt_ids: Optional[List[str]] = None + + citation_categories: Optional[List[str]] = None + + theme_id: str + + limit: Optional[int] = None + + offset: Optional[int] = None + + search_query: Optional[str] = None diff --git a/src/types/reports/inaccurate_themes_query.py b/src/types/reports/inaccurate_themes_query.py new file mode 100644 index 00000000..f28e386c --- /dev/null +++ b/src/types/reports/inaccurate_themes_query.py @@ -0,0 +1,53 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["InaccurateThemesQuery"] + + +class InaccurateThemesQuery(BaseModel): + + start_date: str + + end_date: str + + comparison_start_date: Optional[str] = None + + comparison_end_date: Optional[str] = None + + category_id: str + + topic_ids: Optional[List[str]] = None + + exclude_topic_ids: Optional[bool] = None + + tag_ids: Optional[List[str]] = None + + tag_filter_type: Optional[Literal["all", "any"]] = None + + include_no_tag: Optional[bool] = None + + region_ids: Optional[List[str]] = None + + platform_ids: Optional[List[str]] = None + + persona_ids: Optional[List[str]] = None + + include_no_persona: Optional[bool] = None + + prompt_ids: Optional[List[str]] = None + + citation_categories: Optional[List[str]] = None + + limit: Optional[int] = None + + offset: Optional[int] = None + + sort_by: Optional[Literal["response_share"]] = None + + sort_order: Optional[Literal["asc", "desc"]] = None + + search_query: Optional[str] = None diff --git a/src/types/reports/merchant_name_filter.py b/src/types/reports/merchant_name_filter.py new file mode 100644 index 00000000..9266886a --- /dev/null +++ b/src/types/reports/merchant_name_filter.py @@ -0,0 +1,17 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Union +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["MerchantNameFilter"] + + +class MerchantNameFilter(BaseModel): + + field: Literal["merchant_name"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] diff --git a/src/types/reports/product_name_filter.py b/src/types/reports/product_name_filter.py new file mode 100644 index 00000000..74593035 --- /dev/null +++ b/src/types/reports/product_name_filter.py @@ -0,0 +1,17 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Union +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["ProductNameFilter"] + + +class ProductNameFilter(BaseModel): + + field: Literal["product_name"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] diff --git a/src/types/reports/query_fanout_stream_v2_v2_reports_stream_post_params.py b/src/types/reports/query_fanout_stream_v2_v2_reports_stream_post_params.py new file mode 100644 index 00000000..4095f894 --- /dev/null +++ b/src/types/reports/query_fanout_stream_v2_v2_reports_stream_post_params.py @@ -0,0 +1,60 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Iterable, Optional +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._utils import PropertyInfo + +__all__ = ["QueryFanoutStreamV2V2ReportsStreamPostParams", "FilterNode", "AppRoutesV2AnswerEngineInsightsReportsQueryFanoutsSortSpec"] + + +class QueryFanoutStreamV2V2ReportsStreamPostParams(TypedDict, total=False): + + category_id: Required[str] + + start_date: Required[str] + """YYYY-MM-DD, ET, inclusive""" + + end_date: Required[str] + """YYYY-MM-DD, ET, inclusive""" + + group_by: Iterable[Literal["date", "model", "region", "prompt", "query"]] + + metrics: Optional[Iterable[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]]] + + interval: Literal["day", "week", "month"] + + filter: Optional[FilterNode] + + sort: Optional[AppRoutesV2AnswerEngineInsightsReportsQueryFanoutsSortSpec] + + limit: Optional[int] + """Page size; default 10, max 50.""" + + max_results: Optional[int] + """Stream endpoint only: cap the number of streamed rows (default: all).""" + + cursor: Optional[str] + + +class AppRoutesV2AnswerEngineInsightsReportsQueryFanoutsSortSpec(TypedDict, total=False): + + field: Required[str] + + dir: Literal["asc", "desc"] + +class FilterNode(TypedDict, total=False): + + and_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="and")] + + or_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="or")] + + not_: Annotated[Optional[FilterNode], PropertyInfo(alias="not")] + + field: Optional[str] + + op: Optional[str] + + value: str + diff --git a/src/types/reports/query_fanout_stream_v2_v2_reports_stream_post_response.py b/src/types/reports/query_fanout_stream_v2_v2_reports_stream_post_response.py new file mode 100644 index 00000000..55fffb89 --- /dev/null +++ b/src/types/reports/query_fanout_stream_v2_v2_reports_stream_post_response.py @@ -0,0 +1,7 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing_extensions import TypeAlias + +__all__ = ["QueryFanoutStreamV2V2ReportsStreamPostResponse"] + +QueryFanoutStreamV2V2ReportsStreamPostResponse: TypeAlias = str diff --git a/src/types/reports/query_fanout_v1_reports_post_params.py b/src/types/reports/query_fanout_v1_reports_post_params.py new file mode 100644 index 00000000..406c5e1c --- /dev/null +++ b/src/types/reports/query_fanout_v1_reports_post_params.py @@ -0,0 +1,48 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..pagination import Pagination +from ..region_id_filter import RegionIdFilter +from ..region_name_filter import RegionNameFilter +from ..model_id_filter import ModelIdFilter +from ..topic_id_filter import TopicIdFilter +from ..tag_id_filter import TagIdFilter +from ..prompt_id_filter import PromptIdFilter +from ..persona_id_filter import PersonaIdFilter +from ..analysis_type_filter import AnalysisTypeFilter +from ..prompt_type_filter import PromptTypeFilter +from ..._utils import PropertyInfo + +__all__ = ["QueryFanoutV1ReportsPostParams"] + + +class QueryFanoutV1ReportsPostParams(TypedDict, total=False): + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + """Date interval for the report. (only used with date dimension)""" + + dimensions: Iterable[Literal["prompt", "query", "model", "region", "date"]] + """Dimensions to group the report by.""" + + metrics: Required[Iterable[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]]] + + order_by: Dict[str, Literal["asc", "desc"]] + """Custom ordering. Keys must be a requested metric or the ``date`` dimension. Values are ``asc`` or ``desc``. Defaults to first metric descending.""" + + pagination: Pagination + """Pagination settings for the report results.""" + + category_id: Required[str] + + start_date: Required[Union[str, datetime]] + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: Required[Union[str, datetime]] + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + filters: Iterable[Annotated[Union[RegionIdFilter, RegionNameFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, AnalysisTypeFilter, PromptTypeFilter], PropertyInfo(discriminator="field")]] + """Filters to apply to the query fanout report.""" diff --git a/src/types/reports/query_fanout_v2_v2_reports_post_params.py b/src/types/reports/query_fanout_v2_v2_reports_post_params.py new file mode 100644 index 00000000..c78632fb --- /dev/null +++ b/src/types/reports/query_fanout_v2_v2_reports_post_params.py @@ -0,0 +1,60 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Iterable, Optional +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._utils import PropertyInfo + +__all__ = ["QueryFanoutV2V2ReportsPostParams", "FilterNode", "AppRoutesV2AnswerEngineInsightsReportsQueryFanoutsSortSpec"] + + +class QueryFanoutV2V2ReportsPostParams(TypedDict, total=False): + + category_id: Required[str] + + start_date: Required[str] + """YYYY-MM-DD, ET, inclusive""" + + end_date: Required[str] + """YYYY-MM-DD, ET, inclusive""" + + group_by: Iterable[Literal["date", "model", "region", "prompt", "query"]] + + metrics: Optional[Iterable[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]]] + + interval: Literal["day", "week", "month"] + + filter: Optional[FilterNode] + + sort: Optional[AppRoutesV2AnswerEngineInsightsReportsQueryFanoutsSortSpec] + + limit: Optional[int] + """Page size; default 10, max 50.""" + + max_results: Optional[int] + """Stream endpoint only: cap the number of streamed rows (default: all).""" + + cursor: Optional[str] + + +class AppRoutesV2AnswerEngineInsightsReportsQueryFanoutsSortSpec(TypedDict, total=False): + + field: Required[str] + + dir: Literal["asc", "desc"] + +class FilterNode(TypedDict, total=False): + + and_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="and")] + + or_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="or")] + + not_: Annotated[Optional[FilterNode], PropertyInfo(alias="not")] + + field: Optional[str] + + op: Optional[str] + + value: str + diff --git a/src/types/reports/query_fanout_v2_v2_reports_post_response.py b/src/types/reports/query_fanout_v2_v2_reports_post_response.py new file mode 100644 index 00000000..22c554b6 --- /dev/null +++ b/src/types/reports/query_fanout_v2_v2_reports_post_response.py @@ -0,0 +1,13 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing_extensions import TypeAlias +from ..._models import BaseModel + +__all__ = ["QueryFanoutV2V2ReportsPostResponse", "QueryFanoutV2V2ReportsPostResponse"] + +class QueryFanoutV2V2ReportsPostResponse(BaseModel): + pass + + + +QueryFanoutV2V2ReportsPostResponse: TypeAlias = QueryFanoutV2V2ReportsPostResponse diff --git a/src/types/reports/query_fanouts_query.py b/src/types/reports/query_fanouts_query.py new file mode 100644 index 00000000..9a4c6393 --- /dev/null +++ b/src/types/reports/query_fanouts_query.py @@ -0,0 +1,48 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal +from ..._utils import PropertyInfo + +from ..._models import BaseModel +from ..pagination import Pagination +from ..region_id_filter import RegionIdFilter +from ..region_name_filter import RegionNameFilter +from ..model_id_filter import ModelIdFilter +from ..topic_id_filter import TopicIdFilter +from ..tag_id_filter import TagIdFilter +from ..prompt_id_filter import PromptIdFilter +from ..persona_id_filter import PersonaIdFilter +from ..analysis_type_filter import AnalysisTypeFilter +from ..prompt_type_filter import PromptTypeFilter + +__all__ = ["QueryFanoutsQuery"] + + +class QueryFanoutsQuery(BaseModel): + + date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None + """Date interval for the report. (only used with date dimension)""" + + dimensions: Optional[List[Literal["prompt", "query", "model", "region", "date"]]] = None + """Dimensions to group the report by.""" + + metrics: List[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]] + + order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None + """Custom ordering. Keys must be a requested metric or the ``date`` dimension. Values are ``asc`` or ``desc``. Defaults to first metric descending.""" + + pagination: Optional[Pagination] = None + """Pagination settings for the report results.""" + + category_id: str + + start_date: datetime + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: datetime + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + filters: Optional[List[Annotated[Union[RegionIdFilter, RegionNameFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, AnalysisTypeFilter, PromptTypeFilter], PropertyInfo(discriminator="field")]]] = None + """Filters to apply to the query fanout report.""" diff --git a/src/types/reports/query_fanouts_v2_query.py b/src/types/reports/query_fanouts_v2_query.py new file mode 100644 index 00000000..2dc560ca --- /dev/null +++ b/src/types/reports/query_fanouts_v2_query.py @@ -0,0 +1,63 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import List, Optional +from typing_extensions import Literal + +from pydantic import Field as FieldInfo + +from ..._models import BaseModel + +__all__ = ["QueryFanoutsV2Query", "FilterNode", "AppRoutesV2AnswerEngineInsightsReportsQueryFanoutsSortSpec"] + + +class AppRoutesV2AnswerEngineInsightsReportsQueryFanoutsSortSpec(BaseModel): + + field: str + + dir: Optional[Literal["asc", "desc"]] = None + +class FilterNode(BaseModel): + + and_: Optional[List[FilterNode]] = FieldInfo(alias="and", default=None) + + or_: Optional[List[FilterNode]] = FieldInfo(alias="or", default=None) + + not_: Optional[FilterNode] = FieldInfo(alias="not", default=None) + + field: Optional[str] = None + + op: Optional[str] = None + + value: Optional[str] = None + + + +class QueryFanoutsV2Query(BaseModel): + + category_id: str + + start_date: str + """YYYY-MM-DD, ET, inclusive""" + + end_date: str + """YYYY-MM-DD, ET, inclusive""" + + group_by: Optional[List[Literal["date", "model", "region", "prompt", "query"]]] = None + + metrics: Optional[List[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]]] = None + + interval: Optional[Literal["day", "week", "month"]] = None + + filter: Optional[FilterNode] = None + + sort: Optional[AppRoutesV2AnswerEngineInsightsReportsQueryFanoutsSortSpec] = None + + limit: Optional[int] = None + """Page size; default 10, max 50.""" + + max_results: Optional[int] = None + """Stream endpoint only: cap the number of streamed rows (default: all).""" + + cursor: Optional[str] = None diff --git a/src/types/reports/referral_create_report_v1_v1_reports_post_params.py b/src/types/reports/referral_create_report_v1_v1_reports_post_params.py new file mode 100644 index 00000000..c463ad46 --- /dev/null +++ b/src/types/reports/referral_create_report_v1_v1_reports_post_params.py @@ -0,0 +1,73 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..pagination import Pagination +from ..path_filter import PathFilter +from ..._utils import PropertyInfo + +__all__ = ["ReferralCreateReportV1V1ReportsPostParams", "NumericMetricFilter", "ReferralSourceFilter"] + + +class ReferralCreateReportV1V1ReportsPostParams(TypedDict, total=False): + + date_interval: Literal["hour", "day", "week", "month", "year", "relative_week"] + """Date interval for the report. (only used with date dimension)""" + + dimensions: Iterable[Literal["date", "path", "referral_source"]] + """Dimensions to group the report by.""" + + metrics: Required[Iterable[Literal["visits", "last_visit"]]] + + order_by: Dict[str, Literal["asc", "desc"]] + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - key is the field to order by, which can be a metric or dimension + - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Pagination + """Pagination settings for the report results.""" + + domain: Required[str] + """Domain to query logs for.""" + + start_date: Required[Union[str, datetime]] + """Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp.""" + + end_date: Union[str, datetime] + """End date for logs. Accepts same formats as start_date. Defaults to now if omitted.""" + + organization_id: Optional[str] + + metric_filters: Iterable[NumericMetricFilter] + """Numeric filters applied after report metrics are calculated.""" + + filters: Iterable[Annotated[Union[PathFilter, ReferralSourceFilter], PropertyInfo(discriminator="field")]] + """Filters for referrals report.""" + + +class ReferralSourceFilter(TypedDict, total=False): + + field: Required[Literal["referral_source"]] + + operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[Literal["openai", "none", "anthropic", "deepseek", "perplexity", "you", "grok", "microsoft", "gemini", "internal", "other"], Iterable[Literal["openai", "none", "anthropic", "deepseek", "perplexity", "you", "grok", "microsoft", "gemini", "internal", "other"]]]] + +class NumericMetricFilter(TypedDict, total=False): + + field: Required[str] + + operator: Required[Literal[">", ">=", "<", "<=", "=", "==", "!="]] + + value: Required[Union[int, float]] + diff --git a/src/types/reports/referral_create_report_v2_v2_reports_post_params.py b/src/types/reports/referral_create_report_v2_v2_reports_post_params.py new file mode 100644 index 00000000..ebbbd0b5 --- /dev/null +++ b/src/types/reports/referral_create_report_v2_v2_reports_post_params.py @@ -0,0 +1,81 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..pagination import Pagination +from ..path_filter import PathFilter +from ..._utils import PropertyInfo + +__all__ = ["ReferralCreateReportV2V2ReportsPostParams", "NumericMetricFilter", "ReferralSourceFilter", "ReferralTypeFilter"] + + +class ReferralCreateReportV2V2ReportsPostParams(TypedDict, total=False): + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + """Date interval for the report. (only used with date dimension)""" + + dimensions: Iterable[Literal["date", "hour", "path", "referral_source", "referral_type"]] + """Dimensions to group the report by.""" + + metrics: Required[Iterable[Literal["visits", "last_visit"]]] + + order_by: Dict[str, Literal["asc", "desc"]] + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - key is the field to order by, which can be a metric or dimension + - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Pagination + """Pagination settings for the report results.""" + + domain: Required[str] + """Domain to query logs for.""" + + start_date: Required[Union[str, datetime]] + """Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp.""" + + end_date: Union[str, datetime] + """End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted.""" + + organization_id: Optional[str] + + metric_filters: Iterable[NumericMetricFilter] + """Numeric filters applied after report metrics are calculated.""" + + filters: Iterable[Annotated[Union[PathFilter, ReferralSourceFilter, ReferralTypeFilter], PropertyInfo(discriminator="field")]] + """Filters for referrals report.""" + + +class ReferralTypeFilter(TypedDict, total=False): + + field: Required[Literal["referral_type"]] + + operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[Literal["internal", "referer", "utm", "none"], Iterable[Literal["internal", "referer", "utm", "none"]]]] + +class ReferralSourceFilter(TypedDict, total=False): + + field: Required[Literal["referral_source"]] + + operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[Literal["openai", "none", "anthropic", "deepseek", "perplexity", "you", "grok", "microsoft", "gemini", "internal", "other"], Iterable[Literal["openai", "none", "anthropic", "deepseek", "perplexity", "you", "grok", "microsoft", "gemini", "internal", "other"]]]] + +class NumericMetricFilter(TypedDict, total=False): + + field: Required[str] + + operator: Required[Literal[">", ">=", "<", "<=", "=", "==", "!="]] + + value: Required[Union[int, float]] + diff --git a/src/types/reports/referrals_query.py b/src/types/reports/referrals_query.py new file mode 100644 index 00000000..94cc11d5 --- /dev/null +++ b/src/types/reports/referrals_query.py @@ -0,0 +1,73 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal +from ..._utils import PropertyInfo + +from ..._models import BaseModel +from ..pagination import Pagination +from ..path_filter import PathFilter + +__all__ = ["ReferralsQuery", "NumericMetricFilter", "ReferralSourceFilter"] + + +class ReferralSourceFilter(BaseModel): + + field: Literal["referral_source"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[Literal["openai", "none", "anthropic", "deepseek", "perplexity", "you", "grok", "microsoft", "gemini", "internal", "other"], List[Literal["openai", "none", "anthropic", "deepseek", "perplexity", "you", "grok", "microsoft", "gemini", "internal", "other"]]] + +class NumericMetricFilter(BaseModel): + + field: str + + operator: Literal[">", ">=", "<", "<=", "=", "==", "!="] + + value: Union[int, float] + + + +class ReferralsQuery(BaseModel): + + date_interval: Optional[Literal["hour", "day", "week", "month", "year", "relative_week"]] = None + """Date interval for the report. (only used with date dimension)""" + + dimensions: Optional[List[Literal["date", "path", "referral_source"]]] = None + """Dimensions to group the report by.""" + + metrics: List[Literal["visits", "last_visit"]] + + order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - key is the field to order by, which can be a metric or dimension + - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Optional[Pagination] = None + """Pagination settings for the report results.""" + + domain: str + """Domain to query logs for.""" + + start_date: datetime + """Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp.""" + + end_date: Optional[datetime] = None + """End date for logs. Accepts same formats as start_date. Defaults to now if omitted.""" + + organization_id: Optional[str] = None + + metric_filters: Optional[List[NumericMetricFilter]] = None + """Numeric filters applied after report metrics are calculated.""" + + filters: Optional[List[Annotated[Union[PathFilter, ReferralSourceFilter], PropertyInfo(discriminator="field")]]] = None + """Filters for referrals report.""" diff --git a/src/types/reports/referrals_query_v2.py b/src/types/reports/referrals_query_v2.py new file mode 100644 index 00000000..613b3162 --- /dev/null +++ b/src/types/reports/referrals_query_v2.py @@ -0,0 +1,81 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal +from ..._utils import PropertyInfo + +from ..._models import BaseModel +from ..pagination import Pagination +from ..path_filter import PathFilter + +__all__ = ["ReferralsQueryV2", "NumericMetricFilter", "ReferralSourceFilter", "ReferralTypeFilter"] + + +class ReferralTypeFilter(BaseModel): + + field: Literal["referral_type"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[Literal["internal", "referer", "utm", "none"], List[Literal["internal", "referer", "utm", "none"]]] + +class ReferralSourceFilter(BaseModel): + + field: Literal["referral_source"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[Literal["openai", "none", "anthropic", "deepseek", "perplexity", "you", "grok", "microsoft", "gemini", "internal", "other"], List[Literal["openai", "none", "anthropic", "deepseek", "perplexity", "you", "grok", "microsoft", "gemini", "internal", "other"]]] + +class NumericMetricFilter(BaseModel): + + field: str + + operator: Literal[">", ">=", "<", "<=", "=", "==", "!="] + + value: Union[int, float] + + + +class ReferralsQueryV2(BaseModel): + + date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None + """Date interval for the report. (only used with date dimension)""" + + dimensions: Optional[List[Literal["date", "hour", "path", "referral_source", "referral_type"]]] = None + """Dimensions to group the report by.""" + + metrics: List[Literal["visits", "last_visit"]] + + order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - key is the field to order by, which can be a metric or dimension + - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Optional[Pagination] = None + """Pagination settings for the report results.""" + + domain: str + """Domain to query logs for.""" + + start_date: datetime + """Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp.""" + + end_date: Optional[datetime] = None + """End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted.""" + + organization_id: Optional[str] = None + + metric_filters: Optional[List[NumericMetricFilter]] = None + """Numeric filters applied after report metrics are calculated.""" + + filters: Optional[List[Annotated[Union[PathFilter, ReferralSourceFilter, ReferralTypeFilter], PropertyInfo(discriminator="field")]]] = None + """Filters for referrals report.""" diff --git a/src/types/reports/sentiment_query.py b/src/types/reports/sentiment_query.py new file mode 100644 index 00000000..bcad80c7 --- /dev/null +++ b/src/types/reports/sentiment_query.py @@ -0,0 +1,76 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal +from ..._utils import PropertyInfo + +from ..._models import BaseModel +from ..pagination import Pagination +from ..asset_id_filter import AssetIdFilter +from ..region_id_filter import RegionIdFilter +from ..region_name_filter import RegionNameFilter +from ..topic_id_filter import TopicIdFilter +from ..topic_name_filter import TopicNameFilter +from ..model_id_filter import ModelIdFilter +from ..tag_id_filter import TagIdFilter +from ..tag_name_filter import TagNameFilter +from ..prompt_filter import PromptFilter +from ..persona_id_filter import PersonaIdFilter + +__all__ = ["SentimentQuery", "ProfoundAnswerEngineInsightsFiltersAssetNameFilter", "ThemeFilter"] + + +class ThemeFilter(BaseModel): + + field: Literal["theme"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] + +class ProfoundAnswerEngineInsightsFiltersAssetNameFilter(BaseModel): + + field: Literal["asset_name"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] + + + +class SentimentQuery(BaseModel): + + date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None + """Date interval for the report. (only used with date dimension)""" + + dimensions: Optional[List[Literal["theme", "date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "tag", "prompt", "prompt_id", "sentiment_type", "persona"]]] = None + """Dimensions to group the report by.""" + + metrics: List[Literal["positive", "negative", "occurrences"]] + + order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - key is the field to order by, which can be a metric or dimension + - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Optional[Pagination] = None + """Pagination settings for the report results.""" + + category_id: str + + start_date: datetime + """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + end_date: datetime + """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + filters: Optional[List[Annotated[Union[AssetIdFilter, ProfoundAnswerEngineInsightsFiltersAssetNameFilter, ThemeFilter, RegionIdFilter, RegionNameFilter, TopicIdFilter, TopicNameFilter, ModelIdFilter, TagIdFilter, TagNameFilter, PromptFilter, PersonaIdFilter], PropertyInfo(discriminator="field")]]] = None + """List of filters to apply to the sentiment report.""" diff --git a/src/types/reports/sentiment_query_v1_reports_post_params.py b/src/types/reports/sentiment_query_v1_reports_post_params.py new file mode 100644 index 00000000..1bf79f5c --- /dev/null +++ b/src/types/reports/sentiment_query_v1_reports_post_params.py @@ -0,0 +1,77 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._types import SequenceNotStr +from ..pagination import Pagination +from ..asset_id_filter import AssetIdFilter +from ..region_id_filter import RegionIdFilter +from ..region_name_filter import RegionNameFilter +from ..topic_id_filter import TopicIdFilter +from ..topic_name_filter import TopicNameFilter +from ..model_id_filter import ModelIdFilter +from ..tag_id_filter import TagIdFilter +from ..tag_name_filter import TagNameFilter +from ..prompt_filter import PromptFilter +from ..persona_id_filter import PersonaIdFilter +from ..._utils import PropertyInfo + +__all__ = ["SentimentQueryV1ReportsPostParams", "ProfoundAnswerEngineInsightsFiltersAssetNameFilter", "ThemeFilter"] + + +class SentimentQueryV1ReportsPostParams(TypedDict, total=False): + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + """Date interval for the report. (only used with date dimension)""" + + dimensions: Iterable[Literal["theme", "date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "tag", "prompt", "prompt_id", "sentiment_type", "persona"]] + """Dimensions to group the report by.""" + + metrics: Required[Iterable[Literal["positive", "negative", "occurrences"]]] + + order_by: Dict[str, Literal["asc", "desc"]] + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - key is the field to order by, which can be a metric or dimension + - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Pagination + """Pagination settings for the report results.""" + + category_id: Required[str] + + start_date: Required[Union[str, datetime]] + """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + end_date: Required[Union[str, datetime]] + """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + filters: Iterable[Annotated[Union[AssetIdFilter, ProfoundAnswerEngineInsightsFiltersAssetNameFilter, ThemeFilter, RegionIdFilter, RegionNameFilter, TopicIdFilter, TopicNameFilter, ModelIdFilter, TagIdFilter, TagNameFilter, PromptFilter, PersonaIdFilter], PropertyInfo(discriminator="field")]] + """List of filters to apply to the sentiment report.""" + + +class ThemeFilter(TypedDict, total=False): + + field: Required[Literal["theme"]] + + operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[str, SequenceNotStr[str]]] + +class ProfoundAnswerEngineInsightsFiltersAssetNameFilter(TypedDict, total=False): + + field: Required[Literal["asset_name"]] + + operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[str, SequenceNotStr[str]]] + diff --git a/src/types/reports/sentiment_query_v2_v2_reports_post_params.py b/src/types/reports/sentiment_query_v2_v2_reports_post_params.py new file mode 100644 index 00000000..9b1a55aa --- /dev/null +++ b/src/types/reports/sentiment_query_v2_v2_reports_post_params.py @@ -0,0 +1,72 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Iterable, Optional +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._utils import PropertyInfo + +__all__ = ["SentimentQueryV2V2ReportsPostParams", "FilterNode", "AppRoutesV2AnswerEngineInsightsReportsSentimentSortSpec"] + + +class SentimentQueryV2V2ReportsPostParams(TypedDict, total=False): + + category_id: Required[str] + + asset: Required[str] + """The brand name to analyze (sentiment is extracted on name, not id).""" + + start_date: Required[str] + """YYYY-MM-DD, ET, inclusive""" + + end_date: Required[str] + """YYYY-MM-DD, ET, inclusive""" + + comparison_start_date: Optional[str] + """YYYY-MM-DD, ET, inclusive (with end).""" + + comparison_end_date: Optional[str] + """YYYY-MM-DD, ET, inclusive (with start).""" + + group_by: Iterable[Literal["date", "model", "topic", "region", "prompt", "persona", "tag", "theme", "claim", "run", "competitor"]] + + metrics: Optional[Iterable[Literal["positive_sentiment", "negative_sentiment", "occurrence"]]] + + interval: Literal["day", "week", "month"] + + filter: Optional[FilterNode] + + sort: AppRoutesV2AnswerEngineInsightsReportsSentimentSortSpec + + include_cited_websites: bool + """Return cited websites per row (only when grouping by `theme`/`claim`).""" + + limit: Optional[int] + """Page size; default 10, max 50.""" + + max_results: Optional[int] + """Stream endpoint only: cap the number of streamed rows (default: all).""" + + cursor: Optional[str] + + +class AppRoutesV2AnswerEngineInsightsReportsSentimentSortSpec(TypedDict, total=False): + + field: Literal["occurrence", "positive_sentiment", "negative_sentiment"] + + dir: Literal["asc", "desc"] + +class FilterNode(TypedDict, total=False): + + and_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="and")] + + or_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="or")] + + not_: Annotated[Optional[FilterNode], PropertyInfo(alias="not")] + + field: Optional[str] + + op: Optional[str] + + value: str + diff --git a/src/types/reports/sentiment_query_v2_v2_reports_post_response.py b/src/types/reports/sentiment_query_v2_v2_reports_post_response.py new file mode 100644 index 00000000..bf885959 --- /dev/null +++ b/src/types/reports/sentiment_query_v2_v2_reports_post_response.py @@ -0,0 +1,13 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing_extensions import TypeAlias +from ..._models import BaseModel + +__all__ = ["SentimentQueryV2V2ReportsPostResponse", "SentimentQueryV2V2ReportsPostResponse"] + +class SentimentQueryV2V2ReportsPostResponse(BaseModel): + pass + + + +SentimentQueryV2V2ReportsPostResponse: TypeAlias = SentimentQueryV2V2ReportsPostResponse diff --git a/src/types/reports/sentiment_stream_v1_reports_stream_post_params.py b/src/types/reports/sentiment_stream_v1_reports_stream_post_params.py new file mode 100644 index 00000000..16651e0b --- /dev/null +++ b/src/types/reports/sentiment_stream_v1_reports_stream_post_params.py @@ -0,0 +1,76 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._types import SequenceNotStr +from ..pagination import Pagination +from ..asset_id_filter import AssetIdFilter +from ..region_id_filter import RegionIdFilter +from ..region_name_filter import RegionNameFilter +from ..topic_id_filter import TopicIdFilter +from ..topic_name_filter import TopicNameFilter +from ..model_id_filter import ModelIdFilter +from ..tag_id_filter import TagIdFilter +from ..tag_name_filter import TagNameFilter +from ..prompt_filter import PromptFilter +from ..persona_id_filter import PersonaIdFilter +from ..._utils import PropertyInfo + +__all__ = ["SentimentStreamV1ReportsStreamPostParams", "ProfoundAnswerEngineInsightsFiltersAssetNameFilter", "ThemeFilter"] + + +class SentimentStreamV1ReportsStreamPostParams(TypedDict, total=False): + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + """Date interval for the report. (only used with date dimension)""" + + dimensions: Iterable[Literal["theme", "date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "tag", "prompt", "prompt_id", "sentiment_type", "persona"]] + """Dimensions to group the report by.""" + + metrics: Required[Iterable[Literal["positive", "negative", "occurrences"]]] + + order_by: Dict[str, Literal["asc", "desc"]] + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - key is the field to order by, which can be a metric or dimension + - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Optional[Pagination] + + category_id: Required[str] + + start_date: Required[Union[str, datetime]] + """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + end_date: Required[Union[str, datetime]] + """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + filters: Iterable[Annotated[Union[AssetIdFilter, ProfoundAnswerEngineInsightsFiltersAssetNameFilter, ThemeFilter, RegionIdFilter, RegionNameFilter, TopicIdFilter, TopicNameFilter, ModelIdFilter, TagIdFilter, TagNameFilter, PromptFilter, PersonaIdFilter], PropertyInfo(discriminator="field")]] + """List of filters to apply to the sentiment report.""" + + +class ThemeFilter(TypedDict, total=False): + + field: Required[Literal["theme"]] + + operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[str, SequenceNotStr[str]]] + +class ProfoundAnswerEngineInsightsFiltersAssetNameFilter(TypedDict, total=False): + + field: Required[Literal["asset_name"]] + + operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[str, SequenceNotStr[str]]] + diff --git a/src/types/reports/sentiment_stream_v1_reports_stream_post_response.py b/src/types/reports/sentiment_stream_v1_reports_stream_post_response.py new file mode 100644 index 00000000..f2758c9b --- /dev/null +++ b/src/types/reports/sentiment_stream_v1_reports_stream_post_response.py @@ -0,0 +1,27 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Union +from typing_extensions import TypeAlias +from ..._models import BaseModel + +__all__ = ["SentimentStreamV1ReportsStreamPostResponse", "SentimentStreamV1ReportsStreamPostResponse", "Query", "SentimentStreamV1ReportsStreamPostResponse2"] + +class SentimentStreamV1ReportsStreamPostResponse2(BaseModel): + pass + +class Query(BaseModel): + pass + +class SentimentStreamV1ReportsStreamPostResponse(BaseModel): + + query: Query + """The normalized query used to build the stream.""" + + total_rows: int + """Total number of rows available before pagination is applied.""" + + + +SentimentStreamV1ReportsStreamPostResponse: TypeAlias = Union[SentimentStreamV1ReportsStreamPostResponse, SentimentStreamV1ReportsStreamPostResponse2] diff --git a/src/types/reports/sentiment_stream_v2_v2_reports_stream_post_params.py b/src/types/reports/sentiment_stream_v2_v2_reports_stream_post_params.py new file mode 100644 index 00000000..44fed363 --- /dev/null +++ b/src/types/reports/sentiment_stream_v2_v2_reports_stream_post_params.py @@ -0,0 +1,72 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Iterable, Optional +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._utils import PropertyInfo + +__all__ = ["SentimentStreamV2V2ReportsStreamPostParams", "FilterNode", "AppRoutesV2AnswerEngineInsightsReportsSentimentSortSpec"] + + +class SentimentStreamV2V2ReportsStreamPostParams(TypedDict, total=False): + + category_id: Required[str] + + asset: Required[str] + """The brand name to analyze (sentiment is extracted on name, not id).""" + + start_date: Required[str] + """YYYY-MM-DD, ET, inclusive""" + + end_date: Required[str] + """YYYY-MM-DD, ET, inclusive""" + + comparison_start_date: Optional[str] + """YYYY-MM-DD, ET, inclusive (with end).""" + + comparison_end_date: Optional[str] + """YYYY-MM-DD, ET, inclusive (with start).""" + + group_by: Iterable[Literal["date", "model", "topic", "region", "prompt", "persona", "tag", "theme", "claim", "run", "competitor"]] + + metrics: Optional[Iterable[Literal["positive_sentiment", "negative_sentiment", "occurrence"]]] + + interval: Literal["day", "week", "month"] + + filter: Optional[FilterNode] + + sort: AppRoutesV2AnswerEngineInsightsReportsSentimentSortSpec + + include_cited_websites: bool + """Return cited websites per row (only when grouping by `theme`/`claim`).""" + + limit: Optional[int] + """Page size; default 10, max 50.""" + + max_results: Optional[int] + """Stream endpoint only: cap the number of streamed rows (default: all).""" + + cursor: Optional[str] + + +class AppRoutesV2AnswerEngineInsightsReportsSentimentSortSpec(TypedDict, total=False): + + field: Literal["occurrence", "positive_sentiment", "negative_sentiment"] + + dir: Literal["asc", "desc"] + +class FilterNode(TypedDict, total=False): + + and_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="and")] + + or_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="or")] + + not_: Annotated[Optional[FilterNode], PropertyInfo(alias="not")] + + field: Optional[str] + + op: Optional[str] + + value: str + diff --git a/src/types/reports/sentiment_stream_v2_v2_reports_stream_post_response.py b/src/types/reports/sentiment_stream_v2_v2_reports_stream_post_response.py new file mode 100644 index 00000000..dedd4a40 --- /dev/null +++ b/src/types/reports/sentiment_stream_v2_v2_reports_stream_post_response.py @@ -0,0 +1,7 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing_extensions import TypeAlias + +__all__ = ["SentimentStreamV2V2ReportsStreamPostResponse"] + +SentimentStreamV2V2ReportsStreamPostResponse: TypeAlias = str diff --git a/src/types/reports/sentiment_v2_query.py b/src/types/reports/sentiment_v2_query.py new file mode 100644 index 00000000..0c3ae057 --- /dev/null +++ b/src/types/reports/sentiment_v2_query.py @@ -0,0 +1,75 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import List, Optional +from typing_extensions import Literal + +from pydantic import Field as FieldInfo + +from ..._models import BaseModel + +__all__ = ["SentimentV2Query", "FilterNode", "AppRoutesV2AnswerEngineInsightsReportsSentimentSortSpec"] + + +class AppRoutesV2AnswerEngineInsightsReportsSentimentSortSpec(BaseModel): + + field: Optional[Literal["occurrence", "positive_sentiment", "negative_sentiment"]] = None + + dir: Optional[Literal["asc", "desc"]] = None + +class FilterNode(BaseModel): + + and_: Optional[List[FilterNode]] = FieldInfo(alias="and", default=None) + + or_: Optional[List[FilterNode]] = FieldInfo(alias="or", default=None) + + not_: Optional[FilterNode] = FieldInfo(alias="not", default=None) + + field: Optional[str] = None + + op: Optional[str] = None + + value: Optional[str] = None + + + +class SentimentV2Query(BaseModel): + + category_id: str + + asset: str + """The brand name to analyze (sentiment is extracted on name, not id).""" + + start_date: str + """YYYY-MM-DD, ET, inclusive""" + + end_date: str + """YYYY-MM-DD, ET, inclusive""" + + comparison_start_date: Optional[str] = None + """YYYY-MM-DD, ET, inclusive (with end).""" + + comparison_end_date: Optional[str] = None + """YYYY-MM-DD, ET, inclusive (with start).""" + + group_by: Optional[List[Literal["date", "model", "topic", "region", "prompt", "persona", "tag", "theme", "claim", "run", "competitor"]]] = None + + metrics: Optional[List[Literal["positive_sentiment", "negative_sentiment", "occurrence"]]] = None + + interval: Optional[Literal["day", "week", "month"]] = None + + filter: Optional[FilterNode] = None + + sort: Optional[AppRoutesV2AnswerEngineInsightsReportsSentimentSortSpec] = None + + include_cited_websites: Optional[bool] = None + """Return cited websites per row (only when grouping by `theme`/`claim`).""" + + limit: Optional[int] = None + """Page size; default 10, max 50.""" + + max_results: Optional[int] = None + """Stream endpoint only: cap the number of streamed rows (default: all).""" + + cursor: Optional[str] = None diff --git a/src/types/reports/shopping_all_items_with_merchants_params.py b/src/types/reports/shopping_all_items_with_merchants_params.py new file mode 100644 index 00000000..6339c2d8 --- /dev/null +++ b/src/types/reports/shopping_all_items_with_merchants_params.py @@ -0,0 +1,78 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._types import SequenceNotStr +from ..region_id_filter import RegionIdFilter +from ..model_id_filter import ModelIdFilter +from ..topic_id_filter import TopicIdFilter +from ..tag_id_filter import TagIdFilter +from ..prompt_id_filter import PromptIdFilter +from ..persona_id_filter import PersonaIdFilter +from .brand_name_filter import BrandNameFilter +from .merchant_name_filter import MerchantNameFilter +from .product_name_filter import ProductNameFilter +from ..pagination import Pagination +from ..._utils import PropertyInfo + +__all__ = ["ShoppingAllItemsWithMerchantsParams", "ProfoundShoppingApiAssetNameFilter"] + + +class ShoppingAllItemsWithMerchantsParams(TypedDict, total=False): + + category_id: Required[str] + + start_date: Required[Union[str, datetime]] + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: Required[Union[str, datetime]] + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + comparison_start_date: Optional[Union[str, datetime]] + + comparison_end_date: Optional[Union[str, datetime]] + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + + filters: Iterable[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]] + + order_by: Dict[str, Literal["asc", "desc"]] + + pagination: Optional[Pagination] + + include_count: bool + + tag_filter_type: Literal["any", "all"] + + include_no_tag: bool + + exclude_topic_ids: bool + + dimensions: Iterable[Literal["period", "product_name", "brand_name", "product_url", "product_image_urls", "product_price", "merchant_names", "merchant_prices"]] + + metrics: Iterable[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "product_rating", "product_num_reviews", "total_count"]] + + owned_asset_names: SequenceNotStr[str] + + include_items: SequenceNotStr[str] + + search_item: Optional[str] + + merchant_filter_type: Literal["any", "all"] + + rank_by: Literal["visibility", "average_position", "name"] + + sort_order: Literal["asc", "desc"] + + +class ProfoundShoppingApiAssetNameFilter(TypedDict, total=False): + + field: Required[Literal["asset_name"]] + + operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[str, SequenceNotStr[str]]] + diff --git a/src/types/reports/shopping_all_items_with_merchants_query.py b/src/types/reports/shopping_all_items_with_merchants_query.py new file mode 100644 index 00000000..7d60944c --- /dev/null +++ b/src/types/reports/shopping_all_items_with_merchants_query.py @@ -0,0 +1,77 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal +from ..._utils import PropertyInfo + +from ..._models import BaseModel +from ..region_id_filter import RegionIdFilter +from ..model_id_filter import ModelIdFilter +from ..topic_id_filter import TopicIdFilter +from ..tag_id_filter import TagIdFilter +from ..prompt_id_filter import PromptIdFilter +from ..persona_id_filter import PersonaIdFilter +from .brand_name_filter import BrandNameFilter +from .merchant_name_filter import MerchantNameFilter +from .product_name_filter import ProductNameFilter +from ..pagination import Pagination + +__all__ = ["ShoppingAllItemsWithMerchantsQuery", "ProfoundShoppingApiAssetNameFilter"] + + +class ProfoundShoppingApiAssetNameFilter(BaseModel): + + field: Literal["asset_name"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] + + + +class ShoppingAllItemsWithMerchantsQuery(BaseModel): + + category_id: str + + start_date: datetime + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: datetime + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + comparison_start_date: Optional[datetime] = None + + comparison_end_date: Optional[datetime] = None + + date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None + + filters: Optional[List[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]]] = None + + order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None + + pagination: Optional[Pagination] = None + + include_count: Optional[bool] = None + + tag_filter_type: Optional[Literal["any", "all"]] = None + + include_no_tag: Optional[bool] = None + + exclude_topic_ids: Optional[bool] = None + + dimensions: Optional[List[Literal["period", "product_name", "brand_name", "product_url", "product_image_urls", "product_price", "merchant_names", "merchant_prices"]]] = None + + metrics: Optional[List[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "product_rating", "product_num_reviews", "total_count"]]] = None + + owned_asset_names: Optional[List[str]] = None + + include_items: Optional[List[str]] = None + + search_item: Optional[str] = None + + merchant_filter_type: Optional[Literal["any", "all"]] = None + + rank_by: Optional[Literal["visibility", "average_position", "name"]] = None + + sort_order: Optional[Literal["asc", "desc"]] = None diff --git a/src/types/reports/shopping_all_items_with_merchants_response.py b/src/types/reports/shopping_all_items_with_merchants_response.py new file mode 100644 index 00000000..640eb7de --- /dev/null +++ b/src/types/reports/shopping_all_items_with_merchants_response.py @@ -0,0 +1,21 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List + +from ..._models import BaseModel +from ..report_info import ReportInfo + +__all__ = ["ShoppingAllItemsWithMerchantsResponse", "Data"] + + +class Data(BaseModel): + pass + + + +class ShoppingAllItemsWithMerchantsResponse(BaseModel): + + info: ReportInfo + """Base model for report information.""" + + data: List[Data] diff --git a/src/types/reports/shopping_executions_params.py b/src/types/reports/shopping_executions_params.py new file mode 100644 index 00000000..b5bc9928 --- /dev/null +++ b/src/types/reports/shopping_executions_params.py @@ -0,0 +1,68 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._types import SequenceNotStr +from ..region_id_filter import RegionIdFilter +from ..model_id_filter import ModelIdFilter +from ..topic_id_filter import TopicIdFilter +from ..tag_id_filter import TagIdFilter +from ..prompt_id_filter import PromptIdFilter +from ..persona_id_filter import PersonaIdFilter +from .brand_name_filter import BrandNameFilter +from .merchant_name_filter import MerchantNameFilter +from .product_name_filter import ProductNameFilter +from ..pagination import Pagination +from ..._utils import PropertyInfo + +__all__ = ["ShoppingExecutionsParams", "ProfoundShoppingApiAssetNameFilter"] + + +class ShoppingExecutionsParams(TypedDict, total=False): + + category_id: Required[str] + + start_date: Required[Union[str, datetime]] + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: Required[Union[str, datetime]] + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + comparison_start_date: Optional[Union[str, datetime]] + + comparison_end_date: Optional[Union[str, datetime]] + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + + filters: Iterable[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]] + + order_by: Dict[str, Literal["asc", "desc"]] + + pagination: Optional[Pagination] + + include_count: bool + + tag_filter_type: Literal["any", "all"] + + include_no_tag: bool + + exclude_topic_ids: bool + + analysis_types: Iterable[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]] + + analysis_filter_type: Literal["any", "all"] + + owned_asset_names: SequenceNotStr[str] + + +class ProfoundShoppingApiAssetNameFilter(TypedDict, total=False): + + field: Required[Literal["asset_name"]] + + operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[str, SequenceNotStr[str]]] + diff --git a/src/types/reports/shopping_executions_query.py b/src/types/reports/shopping_executions_query.py new file mode 100644 index 00000000..865556c6 --- /dev/null +++ b/src/types/reports/shopping_executions_query.py @@ -0,0 +1,67 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal +from ..._utils import PropertyInfo + +from ..._models import BaseModel +from ..region_id_filter import RegionIdFilter +from ..model_id_filter import ModelIdFilter +from ..topic_id_filter import TopicIdFilter +from ..tag_id_filter import TagIdFilter +from ..prompt_id_filter import PromptIdFilter +from ..persona_id_filter import PersonaIdFilter +from .brand_name_filter import BrandNameFilter +from .merchant_name_filter import MerchantNameFilter +from .product_name_filter import ProductNameFilter +from ..pagination import Pagination + +__all__ = ["ShoppingExecutionsQuery", "ProfoundShoppingApiAssetNameFilter"] + + +class ProfoundShoppingApiAssetNameFilter(BaseModel): + + field: Literal["asset_name"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] + + + +class ShoppingExecutionsQuery(BaseModel): + + category_id: str + + start_date: datetime + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: datetime + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + comparison_start_date: Optional[datetime] = None + + comparison_end_date: Optional[datetime] = None + + date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None + + filters: Optional[List[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]]] = None + + order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None + + pagination: Optional[Pagination] = None + + include_count: Optional[bool] = None + + tag_filter_type: Optional[Literal["any", "all"]] = None + + include_no_tag: Optional[bool] = None + + exclude_topic_ids: Optional[bool] = None + + analysis_types: Optional[List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]]] = None + + analysis_filter_type: Optional[Literal["any", "all"]] = None + + owned_asset_names: Optional[List[str]] = None diff --git a/src/types/reports/shopping_executions_response.py b/src/types/reports/shopping_executions_response.py new file mode 100644 index 00000000..82384bf9 --- /dev/null +++ b/src/types/reports/shopping_executions_response.py @@ -0,0 +1,21 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List + +from ..._models import BaseModel +from ..report_info import ReportInfo + +__all__ = ["ShoppingExecutionsResponse", "Data"] + + +class Data(BaseModel): + pass + + + +class ShoppingExecutionsResponse(BaseModel): + + info: ReportInfo + """Base model for report information.""" + + data: List[Data] diff --git a/src/types/reports/shopping_item_visibility_params.py b/src/types/reports/shopping_item_visibility_params.py new file mode 100644 index 00000000..181c0479 --- /dev/null +++ b/src/types/reports/shopping_item_visibility_params.py @@ -0,0 +1,82 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._types import SequenceNotStr +from ..region_id_filter import RegionIdFilter +from ..model_id_filter import ModelIdFilter +from ..topic_id_filter import TopicIdFilter +from ..tag_id_filter import TagIdFilter +from ..prompt_id_filter import PromptIdFilter +from ..persona_id_filter import PersonaIdFilter +from .brand_name_filter import BrandNameFilter +from .merchant_name_filter import MerchantNameFilter +from .product_name_filter import ProductNameFilter +from ..pagination import Pagination +from ..._utils import PropertyInfo + +__all__ = ["ShoppingItemVisibilityParams", "ProfoundShoppingApiAssetNameFilter"] + + +class ShoppingItemVisibilityParams(TypedDict, total=False): + + category_id: Required[str] + + start_date: Required[Union[str, datetime]] + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: Required[Union[str, datetime]] + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + comparison_start_date: Optional[Union[str, datetime]] + + comparison_end_date: Optional[Union[str, datetime]] + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + + filters: Iterable[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]] + + order_by: Dict[str, Literal["asc", "desc"]] + + pagination: Optional[Pagination] + + include_count: bool + + tag_filter_type: Literal["any", "all"] + + include_no_tag: bool + + exclude_topic_ids: bool + + dimensions: Iterable[Literal["period", "product_name", "brand_name", "date", "topic_id", "prompt_id", "prompt", "product_url", "product_image_urls", "product_price"]] + + metrics: Iterable[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "position1_percentage", "position2_percentage", "position3_percentage", "position_above3_percentage", "product_rating", "product_num_reviews", "total_count"]] + + owned_asset_names: SequenceNotStr[str] + + include_items: SequenceNotStr[str] + + search_item: Optional[str] + + merchant_filter_type: Literal["any", "all"] + + include_competitors: bool + + target_product: Optional[str] + + competitor_limit: int + + include_position_frequency: bool + + +class ProfoundShoppingApiAssetNameFilter(TypedDict, total=False): + + field: Required[Literal["asset_name"]] + + operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[str, SequenceNotStr[str]]] + diff --git a/src/types/reports/shopping_item_visibility_query.py b/src/types/reports/shopping_item_visibility_query.py new file mode 100644 index 00000000..aeb18b9c --- /dev/null +++ b/src/types/reports/shopping_item_visibility_query.py @@ -0,0 +1,81 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal +from ..._utils import PropertyInfo + +from ..._models import BaseModel +from ..region_id_filter import RegionIdFilter +from ..model_id_filter import ModelIdFilter +from ..topic_id_filter import TopicIdFilter +from ..tag_id_filter import TagIdFilter +from ..prompt_id_filter import PromptIdFilter +from ..persona_id_filter import PersonaIdFilter +from .brand_name_filter import BrandNameFilter +from .merchant_name_filter import MerchantNameFilter +from .product_name_filter import ProductNameFilter +from ..pagination import Pagination + +__all__ = ["ShoppingItemVisibilityQuery", "ProfoundShoppingApiAssetNameFilter"] + + +class ProfoundShoppingApiAssetNameFilter(BaseModel): + + field: Literal["asset_name"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] + + + +class ShoppingItemVisibilityQuery(BaseModel): + + category_id: str + + start_date: datetime + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: datetime + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + comparison_start_date: Optional[datetime] = None + + comparison_end_date: Optional[datetime] = None + + date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None + + filters: Optional[List[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]]] = None + + order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None + + pagination: Optional[Pagination] = None + + include_count: Optional[bool] = None + + tag_filter_type: Optional[Literal["any", "all"]] = None + + include_no_tag: Optional[bool] = None + + exclude_topic_ids: Optional[bool] = None + + dimensions: Optional[List[Literal["period", "product_name", "brand_name", "date", "topic_id", "prompt_id", "prompt", "product_url", "product_image_urls", "product_price"]]] = None + + metrics: Optional[List[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "position1_percentage", "position2_percentage", "position3_percentage", "position_above3_percentage", "product_rating", "product_num_reviews", "total_count"]]] = None + + owned_asset_names: Optional[List[str]] = None + + include_items: Optional[List[str]] = None + + search_item: Optional[str] = None + + merchant_filter_type: Optional[Literal["any", "all"]] = None + + include_competitors: Optional[bool] = None + + target_product: Optional[str] = None + + competitor_limit: Optional[int] = None + + include_position_frequency: Optional[bool] = None diff --git a/src/types/reports/shopping_item_visibility_response.py b/src/types/reports/shopping_item_visibility_response.py new file mode 100644 index 00000000..0c581a84 --- /dev/null +++ b/src/types/reports/shopping_item_visibility_response.py @@ -0,0 +1,21 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List + +from ..._models import BaseModel +from ..report_info import ReportInfo + +__all__ = ["ShoppingItemVisibilityResponse", "Data"] + + +class Data(BaseModel): + pass + + + +class ShoppingItemVisibilityResponse(BaseModel): + + info: ReportInfo + """Base model for report information.""" + + data: List[Data] diff --git a/src/types/reports/shopping_merchant_by_items_params.py b/src/types/reports/shopping_merchant_by_items_params.py new file mode 100644 index 00000000..204c8278 --- /dev/null +++ b/src/types/reports/shopping_merchant_by_items_params.py @@ -0,0 +1,68 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._types import SequenceNotStr +from ..region_id_filter import RegionIdFilter +from ..model_id_filter import ModelIdFilter +from ..topic_id_filter import TopicIdFilter +from ..tag_id_filter import TagIdFilter +from ..prompt_id_filter import PromptIdFilter +from ..persona_id_filter import PersonaIdFilter +from .brand_name_filter import BrandNameFilter +from .merchant_name_filter import MerchantNameFilter +from .product_name_filter import ProductNameFilter +from ..pagination import Pagination +from ..._utils import PropertyInfo + +__all__ = ["ShoppingMerchantByItemsParams", "ProfoundShoppingApiAssetNameFilter"] + + +class ShoppingMerchantByItemsParams(TypedDict, total=False): + + category_id: Required[str] + + start_date: Required[Union[str, datetime]] + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: Required[Union[str, datetime]] + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + comparison_start_date: Optional[Union[str, datetime]] + + comparison_end_date: Optional[Union[str, datetime]] + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + + filters: Iterable[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]] + + order_by: Dict[str, Literal["asc", "desc"]] + + pagination: Optional[Pagination] + + include_count: bool + + tag_filter_type: Literal["any", "all"] + + include_no_tag: bool + + exclude_topic_ids: bool + + dimensions: Iterable[Literal["period", "merchant_name", "product_name", "brand_name", "product_image_urls", "product_price", "merchant_prices", "has_instant_checkout", "delivery_options", "merchant_url"]] + + metrics: Iterable[Literal["merchant_visibility", "product_visibility", "product_rank", "avg_position", "total_count"]] + + product_name: Optional[str] + + +class ProfoundShoppingApiAssetNameFilter(TypedDict, total=False): + + field: Required[Literal["asset_name"]] + + operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[str, SequenceNotStr[str]]] + diff --git a/src/types/reports/shopping_merchant_by_items_query.py b/src/types/reports/shopping_merchant_by_items_query.py new file mode 100644 index 00000000..a9c9e6bf --- /dev/null +++ b/src/types/reports/shopping_merchant_by_items_query.py @@ -0,0 +1,67 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal +from ..._utils import PropertyInfo + +from ..._models import BaseModel +from ..region_id_filter import RegionIdFilter +from ..model_id_filter import ModelIdFilter +from ..topic_id_filter import TopicIdFilter +from ..tag_id_filter import TagIdFilter +from ..prompt_id_filter import PromptIdFilter +from ..persona_id_filter import PersonaIdFilter +from .brand_name_filter import BrandNameFilter +from .merchant_name_filter import MerchantNameFilter +from .product_name_filter import ProductNameFilter +from ..pagination import Pagination + +__all__ = ["ShoppingMerchantByItemsQuery", "ProfoundShoppingApiAssetNameFilter"] + + +class ProfoundShoppingApiAssetNameFilter(BaseModel): + + field: Literal["asset_name"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] + + + +class ShoppingMerchantByItemsQuery(BaseModel): + + category_id: str + + start_date: datetime + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: datetime + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + comparison_start_date: Optional[datetime] = None + + comparison_end_date: Optional[datetime] = None + + date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None + + filters: Optional[List[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]]] = None + + order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None + + pagination: Optional[Pagination] = None + + include_count: Optional[bool] = None + + tag_filter_type: Optional[Literal["any", "all"]] = None + + include_no_tag: Optional[bool] = None + + exclude_topic_ids: Optional[bool] = None + + dimensions: Optional[List[Literal["period", "merchant_name", "product_name", "brand_name", "product_image_urls", "product_price", "merchant_prices", "has_instant_checkout", "delivery_options", "merchant_url"]]] = None + + metrics: Optional[List[Literal["merchant_visibility", "product_visibility", "product_rank", "avg_position", "total_count"]]] = None + + product_name: Optional[str] = None diff --git a/src/types/reports/shopping_merchant_by_items_response.py b/src/types/reports/shopping_merchant_by_items_response.py new file mode 100644 index 00000000..c6899aa4 --- /dev/null +++ b/src/types/reports/shopping_merchant_by_items_response.py @@ -0,0 +1,21 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List + +from ..._models import BaseModel +from ..report_info import ReportInfo + +__all__ = ["ShoppingMerchantByItemsResponse", "Data"] + + +class Data(BaseModel): + pass + + + +class ShoppingMerchantByItemsResponse(BaseModel): + + info: ReportInfo + """Base model for report information.""" + + data: List[Data] diff --git a/src/types/reports/shopping_merchant_distribution_params.py b/src/types/reports/shopping_merchant_distribution_params.py new file mode 100644 index 00000000..f4d7164f --- /dev/null +++ b/src/types/reports/shopping_merchant_distribution_params.py @@ -0,0 +1,70 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._types import SequenceNotStr +from ..region_id_filter import RegionIdFilter +from ..model_id_filter import ModelIdFilter +from ..topic_id_filter import TopicIdFilter +from ..tag_id_filter import TagIdFilter +from ..prompt_id_filter import PromptIdFilter +from ..persona_id_filter import PersonaIdFilter +from .brand_name_filter import BrandNameFilter +from .merchant_name_filter import MerchantNameFilter +from .product_name_filter import ProductNameFilter +from ..pagination import Pagination +from ..._utils import PropertyInfo + +__all__ = ["ShoppingMerchantDistributionParams", "ProfoundShoppingApiAssetNameFilter"] + + +class ShoppingMerchantDistributionParams(TypedDict, total=False): + + category_id: Required[str] + + start_date: Required[Union[str, datetime]] + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: Required[Union[str, datetime]] + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + comparison_start_date: Optional[Union[str, datetime]] + + comparison_end_date: Optional[Union[str, datetime]] + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + + filters: Iterable[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]] + + order_by: Dict[str, Literal["asc", "desc"]] + + pagination: Optional[Pagination] + + include_count: bool + + tag_filter_type: Literal["any", "all"] + + include_no_tag: bool + + exclude_topic_ids: bool + + dimensions: Iterable[Literal["period", "merchant_name", "date", "owned_asset_name"]] + + metrics: Iterable[Literal["offer_count", "product_count", "average_rank", "share_of_offers", "visibility_rank", "total_count"]] + + owned_asset_names: SequenceNotStr[str] + + search_merchant: Optional[str] + + +class ProfoundShoppingApiAssetNameFilter(TypedDict, total=False): + + field: Required[Literal["asset_name"]] + + operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[str, SequenceNotStr[str]]] + diff --git a/src/types/reports/shopping_merchant_distribution_query.py b/src/types/reports/shopping_merchant_distribution_query.py new file mode 100644 index 00000000..62126f3b --- /dev/null +++ b/src/types/reports/shopping_merchant_distribution_query.py @@ -0,0 +1,69 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal +from ..._utils import PropertyInfo + +from ..._models import BaseModel +from ..region_id_filter import RegionIdFilter +from ..model_id_filter import ModelIdFilter +from ..topic_id_filter import TopicIdFilter +from ..tag_id_filter import TagIdFilter +from ..prompt_id_filter import PromptIdFilter +from ..persona_id_filter import PersonaIdFilter +from .brand_name_filter import BrandNameFilter +from .merchant_name_filter import MerchantNameFilter +from .product_name_filter import ProductNameFilter +from ..pagination import Pagination + +__all__ = ["ShoppingMerchantDistributionQuery", "ProfoundShoppingApiAssetNameFilter"] + + +class ProfoundShoppingApiAssetNameFilter(BaseModel): + + field: Literal["asset_name"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] + + + +class ShoppingMerchantDistributionQuery(BaseModel): + + category_id: str + + start_date: datetime + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: datetime + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + comparison_start_date: Optional[datetime] = None + + comparison_end_date: Optional[datetime] = None + + date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None + + filters: Optional[List[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]]] = None + + order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None + + pagination: Optional[Pagination] = None + + include_count: Optional[bool] = None + + tag_filter_type: Optional[Literal["any", "all"]] = None + + include_no_tag: Optional[bool] = None + + exclude_topic_ids: Optional[bool] = None + + dimensions: Optional[List[Literal["period", "merchant_name", "date", "owned_asset_name"]]] = None + + metrics: Optional[List[Literal["offer_count", "product_count", "average_rank", "share_of_offers", "visibility_rank", "total_count"]]] = None + + owned_asset_names: Optional[List[str]] = None + + search_merchant: Optional[str] = None diff --git a/src/types/reports/shopping_merchant_distribution_response.py b/src/types/reports/shopping_merchant_distribution_response.py new file mode 100644 index 00000000..8800f6b8 --- /dev/null +++ b/src/types/reports/shopping_merchant_distribution_response.py @@ -0,0 +1,21 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List + +from ..._models import BaseModel +from ..report_info import ReportInfo + +__all__ = ["ShoppingMerchantDistributionResponse", "Data"] + + +class Data(BaseModel): + pass + + + +class ShoppingMerchantDistributionResponse(BaseModel): + + info: ReportInfo + """Base model for report information.""" + + data: List[Data] diff --git a/src/types/reports/shopping_merchant_share_params.py b/src/types/reports/shopping_merchant_share_params.py new file mode 100644 index 00000000..6ff7ba07 --- /dev/null +++ b/src/types/reports/shopping_merchant_share_params.py @@ -0,0 +1,70 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._types import SequenceNotStr +from ..region_id_filter import RegionIdFilter +from ..model_id_filter import ModelIdFilter +from ..topic_id_filter import TopicIdFilter +from ..tag_id_filter import TagIdFilter +from ..prompt_id_filter import PromptIdFilter +from ..persona_id_filter import PersonaIdFilter +from .brand_name_filter import BrandNameFilter +from .merchant_name_filter import MerchantNameFilter +from .product_name_filter import ProductNameFilter +from ..pagination import Pagination +from ..._utils import PropertyInfo + +__all__ = ["ShoppingMerchantShareParams", "ProfoundShoppingApiAssetNameFilter"] + + +class ShoppingMerchantShareParams(TypedDict, total=False): + + category_id: Required[str] + + start_date: Required[Union[str, datetime]] + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: Required[Union[str, datetime]] + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + comparison_start_date: Optional[Union[str, datetime]] + + comparison_end_date: Optional[Union[str, datetime]] + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + + filters: Iterable[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]] + + order_by: Dict[str, Literal["asc", "desc"]] + + pagination: Optional[Pagination] + + include_count: bool + + tag_filter_type: Literal["any", "all"] + + include_no_tag: bool + + exclude_topic_ids: bool + + dimensions: Iterable[Literal["period", "topic_id", "prompt_id"]] + + metrics: Iterable[Literal["merchant_share"]] + + target_asset_names: SequenceNotStr[str] + + owned_asset_names: SequenceNotStr[str] + + +class ProfoundShoppingApiAssetNameFilter(TypedDict, total=False): + + field: Required[Literal["asset_name"]] + + operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[str, SequenceNotStr[str]]] + diff --git a/src/types/reports/shopping_merchant_share_query.py b/src/types/reports/shopping_merchant_share_query.py new file mode 100644 index 00000000..ea2cdb57 --- /dev/null +++ b/src/types/reports/shopping_merchant_share_query.py @@ -0,0 +1,69 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal +from ..._utils import PropertyInfo + +from ..._models import BaseModel +from ..region_id_filter import RegionIdFilter +from ..model_id_filter import ModelIdFilter +from ..topic_id_filter import TopicIdFilter +from ..tag_id_filter import TagIdFilter +from ..prompt_id_filter import PromptIdFilter +from ..persona_id_filter import PersonaIdFilter +from .brand_name_filter import BrandNameFilter +from .merchant_name_filter import MerchantNameFilter +from .product_name_filter import ProductNameFilter +from ..pagination import Pagination + +__all__ = ["ShoppingMerchantShareQuery", "ProfoundShoppingApiAssetNameFilter"] + + +class ProfoundShoppingApiAssetNameFilter(BaseModel): + + field: Literal["asset_name"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] + + + +class ShoppingMerchantShareQuery(BaseModel): + + category_id: str + + start_date: datetime + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: datetime + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + comparison_start_date: Optional[datetime] = None + + comparison_end_date: Optional[datetime] = None + + date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None + + filters: Optional[List[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]]] = None + + order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None + + pagination: Optional[Pagination] = None + + include_count: Optional[bool] = None + + tag_filter_type: Optional[Literal["any", "all"]] = None + + include_no_tag: Optional[bool] = None + + exclude_topic_ids: Optional[bool] = None + + dimensions: Optional[List[Literal["period", "topic_id", "prompt_id"]]] = None + + metrics: Optional[List[Literal["merchant_share"]]] = None + + target_asset_names: Optional[List[str]] = None + + owned_asset_names: Optional[List[str]] = None diff --git a/src/types/reports/shopping_merchant_share_response.py b/src/types/reports/shopping_merchant_share_response.py new file mode 100644 index 00000000..4ea76897 --- /dev/null +++ b/src/types/reports/shopping_merchant_share_response.py @@ -0,0 +1,21 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List + +from ..._models import BaseModel +from ..report_info import ReportInfo + +__all__ = ["ShoppingMerchantShareResponse", "Data"] + + +class Data(BaseModel): + pass + + + +class ShoppingMerchantShareResponse(BaseModel): + + info: ReportInfo + """Base model for report information.""" + + data: List[Data] diff --git a/src/types/reports/shopping_merchant_visibility_by_brand_params.py b/src/types/reports/shopping_merchant_visibility_by_brand_params.py new file mode 100644 index 00000000..e9254ff9 --- /dev/null +++ b/src/types/reports/shopping_merchant_visibility_by_brand_params.py @@ -0,0 +1,74 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._types import SequenceNotStr +from ..region_id_filter import RegionIdFilter +from ..model_id_filter import ModelIdFilter +from ..topic_id_filter import TopicIdFilter +from ..tag_id_filter import TagIdFilter +from ..prompt_id_filter import PromptIdFilter +from ..persona_id_filter import PersonaIdFilter +from .brand_name_filter import BrandNameFilter +from .merchant_name_filter import MerchantNameFilter +from .product_name_filter import ProductNameFilter +from ..pagination import Pagination +from ..._utils import PropertyInfo + +__all__ = ["ShoppingMerchantVisibilityByBrandParams", "ProfoundShoppingApiAssetNameFilter"] + + +class ShoppingMerchantVisibilityByBrandParams(TypedDict, total=False): + + category_id: Required[str] + + start_date: Required[Union[str, datetime]] + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: Required[Union[str, datetime]] + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + comparison_start_date: Optional[Union[str, datetime]] + + comparison_end_date: Optional[Union[str, datetime]] + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + + filters: Iterable[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]] + + order_by: Dict[str, Literal["asc", "desc"]] + + pagination: Optional[Pagination] + + include_count: bool + + tag_filter_type: Literal["any", "all"] + + include_no_tag: bool + + exclude_topic_ids: bool + + dimensions: Iterable[Literal["period", "merchant_name", "brand_name"]] + + metrics: Iterable[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "total_count"]] + + owned_asset_names: SequenceNotStr[str] + + search_brand: Optional[str] + + include_brand: Optional[str] + + include_brand_only: bool + + +class ProfoundShoppingApiAssetNameFilter(TypedDict, total=False): + + field: Required[Literal["asset_name"]] + + operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[str, SequenceNotStr[str]]] + diff --git a/src/types/reports/shopping_merchant_visibility_by_brand_query.py b/src/types/reports/shopping_merchant_visibility_by_brand_query.py new file mode 100644 index 00000000..81f2dd83 --- /dev/null +++ b/src/types/reports/shopping_merchant_visibility_by_brand_query.py @@ -0,0 +1,73 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal +from ..._utils import PropertyInfo + +from ..._models import BaseModel +from ..region_id_filter import RegionIdFilter +from ..model_id_filter import ModelIdFilter +from ..topic_id_filter import TopicIdFilter +from ..tag_id_filter import TagIdFilter +from ..prompt_id_filter import PromptIdFilter +from ..persona_id_filter import PersonaIdFilter +from .brand_name_filter import BrandNameFilter +from .merchant_name_filter import MerchantNameFilter +from .product_name_filter import ProductNameFilter +from ..pagination import Pagination + +__all__ = ["ShoppingMerchantVisibilityByBrandQuery", "ProfoundShoppingApiAssetNameFilter"] + + +class ProfoundShoppingApiAssetNameFilter(BaseModel): + + field: Literal["asset_name"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] + + + +class ShoppingMerchantVisibilityByBrandQuery(BaseModel): + + category_id: str + + start_date: datetime + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: datetime + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + comparison_start_date: Optional[datetime] = None + + comparison_end_date: Optional[datetime] = None + + date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None + + filters: Optional[List[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]]] = None + + order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None + + pagination: Optional[Pagination] = None + + include_count: Optional[bool] = None + + tag_filter_type: Optional[Literal["any", "all"]] = None + + include_no_tag: Optional[bool] = None + + exclude_topic_ids: Optional[bool] = None + + dimensions: Optional[List[Literal["period", "merchant_name", "brand_name"]]] = None + + metrics: Optional[List[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "total_count"]]] = None + + owned_asset_names: Optional[List[str]] = None + + search_brand: Optional[str] = None + + include_brand: Optional[str] = None + + include_brand_only: Optional[bool] = None diff --git a/src/types/reports/shopping_merchant_visibility_by_brand_response.py b/src/types/reports/shopping_merchant_visibility_by_brand_response.py new file mode 100644 index 00000000..6060d1c1 --- /dev/null +++ b/src/types/reports/shopping_merchant_visibility_by_brand_response.py @@ -0,0 +1,21 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List + +from ..._models import BaseModel +from ..report_info import ReportInfo + +__all__ = ["ShoppingMerchantVisibilityByBrandResponse", "Data"] + + +class Data(BaseModel): + pass + + + +class ShoppingMerchantVisibilityByBrandResponse(BaseModel): + + info: ReportInfo + """Base model for report information.""" + + data: List[Data] diff --git a/src/types/reports/shopping_product_merchant_urls_params.py b/src/types/reports/shopping_product_merchant_urls_params.py new file mode 100644 index 00000000..ca73f25c --- /dev/null +++ b/src/types/reports/shopping_product_merchant_urls_params.py @@ -0,0 +1,21 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Union +from datetime import datetime +from typing_extensions import Required, TypedDict +from ..._types import SequenceNotStr + +__all__ = ["ShoppingProductMerchantUrlsParams"] + + +class ShoppingProductMerchantUrlsParams(TypedDict, total=False): + + category_id: Required[str] + + product_names: Required[SequenceNotStr[str]] + + start_date: Required[Union[str, datetime]] + + end_date: Required[Union[str, datetime]] diff --git a/src/types/reports/shopping_product_merchant_urls_query.py b/src/types/reports/shopping_product_merchant_urls_query.py new file mode 100644 index 00000000..5d602474 --- /dev/null +++ b/src/types/reports/shopping_product_merchant_urls_query.py @@ -0,0 +1,19 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List +from datetime import datetime + +from ..._models import BaseModel + +__all__ = ["ShoppingProductMerchantUrlsQuery"] + + +class ShoppingProductMerchantUrlsQuery(BaseModel): + + category_id: str + + product_names: List[str] + + start_date: datetime + + end_date: datetime diff --git a/src/types/reports/shopping_product_merchant_urls_response.py b/src/types/reports/shopping_product_merchant_urls_response.py new file mode 100644 index 00000000..5e16ba7d --- /dev/null +++ b/src/types/reports/shopping_product_merchant_urls_response.py @@ -0,0 +1,21 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List + +from ..._models import BaseModel +from ..report_info import ReportInfo + +__all__ = ["ShoppingProductMerchantUrlsResponse", "Data"] + + +class Data(BaseModel): + pass + + + +class ShoppingProductMerchantUrlsResponse(BaseModel): + + info: ReportInfo + """Base model for report information.""" + + data: List[Data] diff --git a/src/types/reports/shopping_trigger_rate_params.py b/src/types/reports/shopping_trigger_rate_params.py new file mode 100644 index 00000000..02f8d25e --- /dev/null +++ b/src/types/reports/shopping_trigger_rate_params.py @@ -0,0 +1,66 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._types import SequenceNotStr +from ..region_id_filter import RegionIdFilter +from ..model_id_filter import ModelIdFilter +from ..topic_id_filter import TopicIdFilter +from ..tag_id_filter import TagIdFilter +from ..prompt_id_filter import PromptIdFilter +from ..persona_id_filter import PersonaIdFilter +from .brand_name_filter import BrandNameFilter +from .merchant_name_filter import MerchantNameFilter +from .product_name_filter import ProductNameFilter +from ..pagination import Pagination +from ..._utils import PropertyInfo + +__all__ = ["ShoppingTriggerRateParams", "ProfoundShoppingApiAssetNameFilter"] + + +class ShoppingTriggerRateParams(TypedDict, total=False): + + category_id: Required[str] + + start_date: Required[Union[str, datetime]] + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: Required[Union[str, datetime]] + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + comparison_start_date: Optional[Union[str, datetime]] + + comparison_end_date: Optional[Union[str, datetime]] + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + + filters: Iterable[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]] + + order_by: Dict[str, Literal["asc", "desc"]] + + pagination: Optional[Pagination] + + include_count: bool + + tag_filter_type: Literal["any", "all"] + + include_no_tag: bool + + exclude_topic_ids: bool + + dimensions: Iterable[Literal["period", "date", "model_id", "topic_id", "region_id", "persona_id", "prompt_id", "prompt"]] + + metrics: Iterable[Literal["total_runs", "shopping_triggered_runs", "trigger_rate_percentage"]] + + +class ProfoundShoppingApiAssetNameFilter(TypedDict, total=False): + + field: Required[Literal["asset_name"]] + + operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[str, SequenceNotStr[str]]] + diff --git a/src/types/reports/shopping_trigger_rate_query.py b/src/types/reports/shopping_trigger_rate_query.py new file mode 100644 index 00000000..7bd3ebc6 --- /dev/null +++ b/src/types/reports/shopping_trigger_rate_query.py @@ -0,0 +1,65 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal +from ..._utils import PropertyInfo + +from ..._models import BaseModel +from ..region_id_filter import RegionIdFilter +from ..model_id_filter import ModelIdFilter +from ..topic_id_filter import TopicIdFilter +from ..tag_id_filter import TagIdFilter +from ..prompt_id_filter import PromptIdFilter +from ..persona_id_filter import PersonaIdFilter +from .brand_name_filter import BrandNameFilter +from .merchant_name_filter import MerchantNameFilter +from .product_name_filter import ProductNameFilter +from ..pagination import Pagination + +__all__ = ["ShoppingTriggerRateQuery", "ProfoundShoppingApiAssetNameFilter"] + + +class ProfoundShoppingApiAssetNameFilter(BaseModel): + + field: Literal["asset_name"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] + + + +class ShoppingTriggerRateQuery(BaseModel): + + category_id: str + + start_date: datetime + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: datetime + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + comparison_start_date: Optional[datetime] = None + + comparison_end_date: Optional[datetime] = None + + date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None + + filters: Optional[List[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]]] = None + + order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None + + pagination: Optional[Pagination] = None + + include_count: Optional[bool] = None + + tag_filter_type: Optional[Literal["any", "all"]] = None + + include_no_tag: Optional[bool] = None + + exclude_topic_ids: Optional[bool] = None + + dimensions: Optional[List[Literal["period", "date", "model_id", "topic_id", "region_id", "persona_id", "prompt_id", "prompt"]]] = None + + metrics: Optional[List[Literal["total_runs", "shopping_triggered_runs", "trigger_rate_percentage"]]] = None diff --git a/src/types/reports/shopping_trigger_rate_response.py b/src/types/reports/shopping_trigger_rate_response.py new file mode 100644 index 00000000..99989ae5 --- /dev/null +++ b/src/types/reports/shopping_trigger_rate_response.py @@ -0,0 +1,21 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List + +from ..._models import BaseModel +from ..report_info import ReportInfo + +__all__ = ["ShoppingTriggerRateResponse", "Data"] + + +class Data(BaseModel): + pass + + + +class ShoppingTriggerRateResponse(BaseModel): + + info: ReportInfo + """Base model for report information.""" + + data: List[Data] diff --git a/src/types/reports/shopping_visibility_params.py b/src/types/reports/shopping_visibility_params.py new file mode 100644 index 00000000..ad1d9b7a --- /dev/null +++ b/src/types/reports/shopping_visibility_params.py @@ -0,0 +1,80 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._types import SequenceNotStr +from ..region_id_filter import RegionIdFilter +from ..model_id_filter import ModelIdFilter +from ..topic_id_filter import TopicIdFilter +from ..tag_id_filter import TagIdFilter +from ..prompt_id_filter import PromptIdFilter +from ..persona_id_filter import PersonaIdFilter +from .brand_name_filter import BrandNameFilter +from .merchant_name_filter import MerchantNameFilter +from .product_name_filter import ProductNameFilter +from ..pagination import Pagination +from ..._utils import PropertyInfo + +__all__ = ["ShoppingVisibilityParams", "ProfoundShoppingApiAssetNameFilter"] + + +class ShoppingVisibilityParams(TypedDict, total=False): + + category_id: Required[str] + + start_date: Required[Union[str, datetime]] + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: Required[Union[str, datetime]] + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + comparison_start_date: Optional[Union[str, datetime]] + + comparison_end_date: Optional[Union[str, datetime]] + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + + filters: Iterable[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]] + + order_by: Dict[str, Literal["asc", "desc"]] + + pagination: Optional[Pagination] + + include_count: bool + + tag_filter_type: Literal["any", "all"] + + include_no_tag: bool + + exclude_topic_ids: bool + + dimensions: Iterable[Literal["period", "asset_name", "date", "model_id", "topic_id", "region_id", "prompt_id", "prompt"]] + + metrics: Iterable[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "average_position_rank", "position1_percentage", "position2_percentage", "position3_percentage", "position_above3_percentage", "total_count"]] + + owned_asset_names: SequenceNotStr[str] + + search_asset: Optional[str] + + include_asset: Optional[str] + + include_asset_only: bool + + include_assets_only: SequenceNotStr[str] + + rank_by: Literal["visibility_score", "average_position"] + + include_position_frequency: bool + + +class ProfoundShoppingApiAssetNameFilter(TypedDict, total=False): + + field: Required[Literal["asset_name"]] + + operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[str, SequenceNotStr[str]]] + diff --git a/src/types/reports/shopping_visibility_query.py b/src/types/reports/shopping_visibility_query.py new file mode 100644 index 00000000..48711c23 --- /dev/null +++ b/src/types/reports/shopping_visibility_query.py @@ -0,0 +1,79 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal +from ..._utils import PropertyInfo + +from ..._models import BaseModel +from ..region_id_filter import RegionIdFilter +from ..model_id_filter import ModelIdFilter +from ..topic_id_filter import TopicIdFilter +from ..tag_id_filter import TagIdFilter +from ..prompt_id_filter import PromptIdFilter +from ..persona_id_filter import PersonaIdFilter +from .brand_name_filter import BrandNameFilter +from .merchant_name_filter import MerchantNameFilter +from .product_name_filter import ProductNameFilter +from ..pagination import Pagination + +__all__ = ["ShoppingVisibilityQuery", "ProfoundShoppingApiAssetNameFilter"] + + +class ProfoundShoppingApiAssetNameFilter(BaseModel): + + field: Literal["asset_name"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] + + + +class ShoppingVisibilityQuery(BaseModel): + + category_id: str + + start_date: datetime + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: datetime + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + comparison_start_date: Optional[datetime] = None + + comparison_end_date: Optional[datetime] = None + + date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None + + filters: Optional[List[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]]] = None + + order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None + + pagination: Optional[Pagination] = None + + include_count: Optional[bool] = None + + tag_filter_type: Optional[Literal["any", "all"]] = None + + include_no_tag: Optional[bool] = None + + exclude_topic_ids: Optional[bool] = None + + dimensions: Optional[List[Literal["period", "asset_name", "date", "model_id", "topic_id", "region_id", "prompt_id", "prompt"]]] = None + + metrics: Optional[List[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "average_position_rank", "position1_percentage", "position2_percentage", "position3_percentage", "position_above3_percentage", "total_count"]]] = None + + owned_asset_names: Optional[List[str]] = None + + search_asset: Optional[str] = None + + include_asset: Optional[str] = None + + include_asset_only: Optional[bool] = None + + include_assets_only: Optional[List[str]] = None + + rank_by: Optional[Literal["visibility_score", "average_position"]] = None + + include_position_frequency: Optional[bool] = None diff --git a/src/types/reports/shopping_visibility_response.py b/src/types/reports/shopping_visibility_response.py new file mode 100644 index 00000000..485d2a86 --- /dev/null +++ b/src/types/reports/shopping_visibility_response.py @@ -0,0 +1,21 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List + +from ..._models import BaseModel +from ..report_info import ReportInfo + +__all__ = ["ShoppingVisibilityResponse", "Data"] + + +class Data(BaseModel): + pass + + + +class ShoppingVisibilityResponse(BaseModel): + + info: ReportInfo + """Base model for report information.""" + + data: List[Data] diff --git a/src/types/reports/stream_citations_query.py b/src/types/reports/stream_citations_query.py new file mode 100644 index 00000000..1eea751d --- /dev/null +++ b/src/types/reports/stream_citations_query.py @@ -0,0 +1,74 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal +from ..._utils import PropertyInfo + +from ..._models import BaseModel +from ..pagination import Pagination +from ..hostname_filter import HostnameFilter +from ..path_filter import PathFilter +from ..region_id_filter import RegionIdFilter +from ..region_name_filter import RegionNameFilter +from ..topic_id_filter import TopicIdFilter +from ..topic_name_filter import TopicNameFilter +from ..model_id_filter import ModelIdFilter +from ..tag_id_filter import TagIdFilter +from ..tag_name_filter import TagNameFilter +from ..url_filter import UrlFilter +from ..root_domain_filter import RootDomainFilter +from ..analysis_type_filter import AnalysisTypeFilter +from ..prompt_type_filter import PromptTypeFilter +from ..persona_id_filter import PersonaIdFilter +from ..prompt_filter import PromptFilter +from ..prompt_id_filter import PromptIdFilter + +__all__ = ["StreamCitationsQuery", "CitationCategoryFilter"] + + +class CitationCategoryFilter(BaseModel): + + field: Literal["citation_category"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] + + + +class StreamCitationsQuery(BaseModel): + + date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None + """Date interval for the report. (only used with date dimension)""" + + dimensions: Optional[List[Literal["hostname", "path", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "url", "root_domain", "persona", "citation_category"]]] = None + """Dimensions to group the report by.""" + + metrics: List[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]] + """Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead.""" + + order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - `key` is the field to order by, which can be a metric or dimension + - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Optional[Pagination] = None + + category_id: str + + start_date: datetime + """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + end_date: datetime + """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + filters: Optional[List[Annotated[Union[HostnameFilter, PathFilter, RegionIdFilter, RegionNameFilter, TopicIdFilter, TopicNameFilter, ModelIdFilter, TagIdFilter, TagNameFilter, UrlFilter, RootDomainFilter, AnalysisTypeFilter, PromptTypeFilter, PersonaIdFilter, CitationCategoryFilter, PromptFilter, PromptIdFilter], PropertyInfo(discriminator="field")]]] = None + """List of filters to apply to the citations report.""" diff --git a/src/types/reports/stream_sentiment_query.py b/src/types/reports/stream_sentiment_query.py new file mode 100644 index 00000000..85b60422 --- /dev/null +++ b/src/types/reports/stream_sentiment_query.py @@ -0,0 +1,75 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal +from ..._utils import PropertyInfo + +from ..._models import BaseModel +from ..pagination import Pagination +from ..asset_id_filter import AssetIdFilter +from ..region_id_filter import RegionIdFilter +from ..region_name_filter import RegionNameFilter +from ..topic_id_filter import TopicIdFilter +from ..topic_name_filter import TopicNameFilter +from ..model_id_filter import ModelIdFilter +from ..tag_id_filter import TagIdFilter +from ..tag_name_filter import TagNameFilter +from ..prompt_filter import PromptFilter +from ..persona_id_filter import PersonaIdFilter + +__all__ = ["StreamSentimentQuery", "ProfoundAnswerEngineInsightsFiltersAssetNameFilter", "ThemeFilter"] + + +class ThemeFilter(BaseModel): + + field: Literal["theme"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] + +class ProfoundAnswerEngineInsightsFiltersAssetNameFilter(BaseModel): + + field: Literal["asset_name"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] + + + +class StreamSentimentQuery(BaseModel): + + date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None + """Date interval for the report. (only used with date dimension)""" + + dimensions: Optional[List[Literal["theme", "date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "tag", "prompt", "prompt_id", "sentiment_type", "persona"]]] = None + """Dimensions to group the report by.""" + + metrics: List[Literal["positive", "negative", "occurrences"]] + + order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - key is the field to order by, which can be a metric or dimension + - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Optional[Pagination] = None + + category_id: str + + start_date: datetime + """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + end_date: datetime + """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + filters: Optional[List[Annotated[Union[AssetIdFilter, ProfoundAnswerEngineInsightsFiltersAssetNameFilter, ThemeFilter, RegionIdFilter, RegionNameFilter, TopicIdFilter, TopicNameFilter, ModelIdFilter, TagIdFilter, TagNameFilter, PromptFilter, PersonaIdFilter], PropertyInfo(discriminator="field")]]] = None + """List of filters to apply to the sentiment report.""" diff --git a/src/types/reports/stream_visibility_query.py b/src/types/reports/stream_visibility_query.py new file mode 100644 index 00000000..08a1caa1 --- /dev/null +++ b/src/types/reports/stream_visibility_query.py @@ -0,0 +1,67 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal +from ..._utils import PropertyInfo + +from ..._models import BaseModel +from ..pagination import Pagination +from ..region_id_filter import RegionIdFilter +from ..region_name_filter import RegionNameFilter +from ..model_id_filter import ModelIdFilter +from ..topic_id_filter import TopicIdFilter +from ..topic_name_filter import TopicNameFilter +from ..tag_id_filter import TagIdFilter +from ..tag_name_filter import TagNameFilter +from ..prompt_id_filter import PromptIdFilter +from ..prompt_filter import PromptFilter +from ..persona_id_filter import PersonaIdFilter + +__all__ = ["StreamVisibilityQuery", "ProfoundAnswerEngineInsightsFiltersAssetNameFilter"] + + +class ProfoundAnswerEngineInsightsFiltersAssetNameFilter(BaseModel): + + field: Literal["asset_name"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] + + + +class StreamVisibilityQuery(BaseModel): + + date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None + """Date interval for the report. (only used with date dimension)""" + + dimensions: Optional[List[Literal["date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "prompt", "prompt_id", "tag", "persona"]]] = None + """Dimensions to group the report by.""" + + metrics: List[Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"]] + + order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - key is the field to order by, which can be a metric or dimension + - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Optional[Pagination] = None + + category_id: str + + start_date: datetime + """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + end_date: datetime + """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + filters: Optional[List[Annotated[Union[RegionIdFilter, RegionNameFilter, ModelIdFilter, TopicIdFilter, TopicNameFilter, ProfoundAnswerEngineInsightsFiltersAssetNameFilter, TagIdFilter, TagNameFilter, PromptIdFilter, PromptFilter, PersonaIdFilter], PropertyInfo(discriminator="field")]]] = None + """List of filters to apply to the visibility report.""" diff --git a/src/types/reports/stream_web_search_results_query.py b/src/types/reports/stream_web_search_results_query.py new file mode 100644 index 00000000..3ab997b4 --- /dev/null +++ b/src/types/reports/stream_web_search_results_query.py @@ -0,0 +1,69 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal +from ..._utils import PropertyInfo + +from ..._models import BaseModel +from ..pagination import Pagination +from ..hostname_filter import HostnameFilter +from ..path_filter import PathFilter +from ..region_id_filter import RegionIdFilter +from ..topic_id_filter import TopicIdFilter +from ..model_id_filter import ModelIdFilter +from ..tag_id_filter import TagIdFilter +from ..url_filter import UrlFilter +from ..root_domain_filter import RootDomainFilter +from ..persona_id_filter import PersonaIdFilter +from ..prompt_filter import PromptFilter +from ..prompt_id_filter import PromptIdFilter + +__all__ = ["StreamWebSearchResultsQuery", "SearchQueryFilter"] + + +class SearchQueryFilter(BaseModel): + + field: Literal["search_query"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] + + + +class StreamWebSearchResultsQuery(BaseModel): + + date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None + """Date interval for the report. (only used with date dimension)""" + + dimensions: Optional[List[Literal["hostname", "path", "url", "root_domain", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "persona", "search_query"]]] = None + """Dimensions to group the report by.""" + + metrics: List[Literal["count", "search_share"]] + """Metrics to include. `search_share` is the per-prompt occurrence rate.""" + + order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - `key` is the field to order by, which can be a metric or dimension + - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Optional[Pagination] = None + + category_id: str + + start_date: datetime + """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + end_date: datetime + """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + filters: Optional[List[Annotated[Union[HostnameFilter, PathFilter, RegionIdFilter, TopicIdFilter, ModelIdFilter, TagIdFilter, UrlFilter, RootDomainFilter, PersonaIdFilter, PromptFilter, PromptIdFilter, SearchQueryFilter], PropertyInfo(discriminator="field")]]] = None + """List of filters to apply to the web search results report.""" diff --git a/src/types/reports/top_inaccurate_claims_query.py b/src/types/reports/top_inaccurate_claims_query.py new file mode 100644 index 00000000..e1eeea9c --- /dev/null +++ b/src/types/reports/top_inaccurate_claims_query.py @@ -0,0 +1,45 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["TopInaccurateClaimsQuery"] + + +class TopInaccurateClaimsQuery(BaseModel): + + start_date: str + + end_date: str + + comparison_start_date: Optional[str] = None + + comparison_end_date: Optional[str] = None + + category_id: str + + topic_ids: Optional[List[str]] = None + + exclude_topic_ids: Optional[bool] = None + + tag_ids: Optional[List[str]] = None + + tag_filter_type: Optional[Literal["all", "any"]] = None + + include_no_tag: Optional[bool] = None + + region_ids: Optional[List[str]] = None + + platform_ids: Optional[List[str]] = None + + persona_ids: Optional[List[str]] = None + + include_no_persona: Optional[bool] = None + + prompt_ids: Optional[List[str]] = None + + citation_categories: Optional[List[str]] = None + + limit: Optional[int] = None diff --git a/src/types/reports/visibility_query.py b/src/types/reports/visibility_query.py new file mode 100644 index 00000000..acbba1a2 --- /dev/null +++ b/src/types/reports/visibility_query.py @@ -0,0 +1,68 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal +from ..._utils import PropertyInfo + +from ..._models import BaseModel +from ..pagination import Pagination +from ..region_id_filter import RegionIdFilter +from ..region_name_filter import RegionNameFilter +from ..model_id_filter import ModelIdFilter +from ..topic_id_filter import TopicIdFilter +from ..topic_name_filter import TopicNameFilter +from ..tag_id_filter import TagIdFilter +from ..tag_name_filter import TagNameFilter +from ..prompt_id_filter import PromptIdFilter +from ..prompt_filter import PromptFilter +from ..persona_id_filter import PersonaIdFilter + +__all__ = ["VisibilityQuery", "ProfoundAnswerEngineInsightsFiltersAssetNameFilter"] + + +class ProfoundAnswerEngineInsightsFiltersAssetNameFilter(BaseModel): + + field: Literal["asset_name"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] + + + +class VisibilityQuery(BaseModel): + + date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None + """Date interval for the report. (only used with date dimension)""" + + dimensions: Optional[List[Literal["date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "prompt", "prompt_id", "tag", "persona"]]] = None + """Dimensions to group the report by.""" + + metrics: List[Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"]] + + order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - key is the field to order by, which can be a metric or dimension + - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Optional[Pagination] = None + """Pagination settings for the report results.""" + + category_id: str + + start_date: datetime + """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + end_date: datetime + """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + filters: Optional[List[Annotated[Union[RegionIdFilter, RegionNameFilter, ModelIdFilter, TopicIdFilter, TopicNameFilter, ProfoundAnswerEngineInsightsFiltersAssetNameFilter, TagIdFilter, TagNameFilter, PromptIdFilter, PromptFilter, PersonaIdFilter], PropertyInfo(discriminator="field")]]] = None + """List of filters to apply to the visibility report.""" diff --git a/src/types/reports/visibility_query_v1_reports_post_params.py b/src/types/reports/visibility_query_v1_reports_post_params.py new file mode 100644 index 00000000..3b49d8ba --- /dev/null +++ b/src/types/reports/visibility_query_v1_reports_post_params.py @@ -0,0 +1,69 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._types import SequenceNotStr +from ..pagination import Pagination +from ..region_id_filter import RegionIdFilter +from ..region_name_filter import RegionNameFilter +from ..model_id_filter import ModelIdFilter +from ..topic_id_filter import TopicIdFilter +from ..topic_name_filter import TopicNameFilter +from ..tag_id_filter import TagIdFilter +from ..tag_name_filter import TagNameFilter +from ..prompt_id_filter import PromptIdFilter +from ..prompt_filter import PromptFilter +from ..persona_id_filter import PersonaIdFilter +from ..._utils import PropertyInfo + +__all__ = ["VisibilityQueryV1ReportsPostParams", "ProfoundAnswerEngineInsightsFiltersAssetNameFilter"] + + +class VisibilityQueryV1ReportsPostParams(TypedDict, total=False): + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + """Date interval for the report. (only used with date dimension)""" + + dimensions: Iterable[Literal["date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "prompt", "prompt_id", "tag", "persona"]] + """Dimensions to group the report by.""" + + metrics: Required[Iterable[Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"]]] + + order_by: Dict[str, Literal["asc", "desc"]] + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - key is the field to order by, which can be a metric or dimension + - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Pagination + """Pagination settings for the report results.""" + + category_id: Required[str] + + start_date: Required[Union[str, datetime]] + """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + end_date: Required[Union[str, datetime]] + """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + filters: Iterable[Annotated[Union[RegionIdFilter, RegionNameFilter, ModelIdFilter, TopicIdFilter, TopicNameFilter, ProfoundAnswerEngineInsightsFiltersAssetNameFilter, TagIdFilter, TagNameFilter, PromptIdFilter, PromptFilter, PersonaIdFilter], PropertyInfo(discriminator="field")]] + """List of filters to apply to the visibility report.""" + + +class ProfoundAnswerEngineInsightsFiltersAssetNameFilter(TypedDict, total=False): + + field: Required[Literal["asset_name"]] + + operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[str, SequenceNotStr[str]]] + diff --git a/src/types/reports/visibility_query_v2_v2_reports_post_params.py b/src/types/reports/visibility_query_v2_v2_reports_post_params.py new file mode 100644 index 00000000..b845ae39 --- /dev/null +++ b/src/types/reports/visibility_query_v2_v2_reports_post_params.py @@ -0,0 +1,70 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Iterable, Optional, Union +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._types import SequenceNotStr +from ..._utils import PropertyInfo + +__all__ = ["VisibilityQueryV2V2ReportsPostParams", "EntityFilterClause", "FilterNode", "AppRoutesV2AnswerEngineInsightsReportsVisibilitySortSpec"] + + +class VisibilityQueryV2V2ReportsPostParams(TypedDict, total=False): + + category_id: Required[str] + + start_date: Required[str] + """YYYY-MM-DD, ET, inclusive""" + + end_date: Required[str] + """YYYY-MM-DD, ET, inclusive""" + + group_by: Iterable[Literal["date", "model", "topic", "region", "prompt", "persona"]] + + metrics: Optional[Iterable[Literal["visibility_score", "share_of_voice", "average_position"]]] + + interval: Literal["day", "week", "month"] + + scope: Literal["owned", "all"] + + assets: Optional[Union[str, SequenceNotStr[str], EntityFilterClause]] + """A name (`is`), a list (`in`), or {op,value} with op `is`/`in`/`not_in`.""" + + filter: Optional[FilterNode] + + sort: AppRoutesV2AnswerEngineInsightsReportsVisibilitySortSpec + + limit: Optional[int] + """Page size; default 10, max 50.""" + + max_results: Optional[int] + """Stream endpoint only: cap the number of streamed rows (default: all).""" + + cursor: Optional[str] + + +class AppRoutesV2AnswerEngineInsightsReportsVisibilitySortSpec(TypedDict, total=False): + + field: Literal["visibility_score", "share_of_voice", "average_position"] + +class FilterNode(TypedDict, total=False): + + and_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="and")] + + or_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="or")] + + not_: Annotated[Optional[FilterNode], PropertyInfo(alias="not")] + + field: Optional[str] + + op: Optional[str] + + value: str + +class EntityFilterClause(TypedDict, total=False): + + op: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[str, SequenceNotStr[str]]] + diff --git a/src/types/reports/visibility_query_v2_v2_reports_post_response.py b/src/types/reports/visibility_query_v2_v2_reports_post_response.py new file mode 100644 index 00000000..7da4e82e --- /dev/null +++ b/src/types/reports/visibility_query_v2_v2_reports_post_response.py @@ -0,0 +1,13 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing_extensions import TypeAlias +from ..._models import BaseModel + +__all__ = ["VisibilityQueryV2V2ReportsPostResponse", "VisibilityQueryV2V2ReportsPostResponse"] + +class VisibilityQueryV2V2ReportsPostResponse(BaseModel): + pass + + + +VisibilityQueryV2V2ReportsPostResponse: TypeAlias = VisibilityQueryV2V2ReportsPostResponse diff --git a/src/types/reports/visibility_stream_v1_reports_stream_post_params.py b/src/types/reports/visibility_stream_v1_reports_stream_post_params.py new file mode 100644 index 00000000..168c20de --- /dev/null +++ b/src/types/reports/visibility_stream_v1_reports_stream_post_params.py @@ -0,0 +1,68 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._types import SequenceNotStr +from ..pagination import Pagination +from ..region_id_filter import RegionIdFilter +from ..region_name_filter import RegionNameFilter +from ..model_id_filter import ModelIdFilter +from ..topic_id_filter import TopicIdFilter +from ..topic_name_filter import TopicNameFilter +from ..tag_id_filter import TagIdFilter +from ..tag_name_filter import TagNameFilter +from ..prompt_id_filter import PromptIdFilter +from ..prompt_filter import PromptFilter +from ..persona_id_filter import PersonaIdFilter +from ..._utils import PropertyInfo + +__all__ = ["VisibilityStreamV1ReportsStreamPostParams", "ProfoundAnswerEngineInsightsFiltersAssetNameFilter"] + + +class VisibilityStreamV1ReportsStreamPostParams(TypedDict, total=False): + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + """Date interval for the report. (only used with date dimension)""" + + dimensions: Iterable[Literal["date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "prompt", "prompt_id", "tag", "persona"]] + """Dimensions to group the report by.""" + + metrics: Required[Iterable[Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"]]] + + order_by: Dict[str, Literal["asc", "desc"]] + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - key is the field to order by, which can be a metric or dimension + - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Optional[Pagination] + + category_id: Required[str] + + start_date: Required[Union[str, datetime]] + """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + end_date: Required[Union[str, datetime]] + """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + filters: Iterable[Annotated[Union[RegionIdFilter, RegionNameFilter, ModelIdFilter, TopicIdFilter, TopicNameFilter, ProfoundAnswerEngineInsightsFiltersAssetNameFilter, TagIdFilter, TagNameFilter, PromptIdFilter, PromptFilter, PersonaIdFilter], PropertyInfo(discriminator="field")]] + """List of filters to apply to the visibility report.""" + + +class ProfoundAnswerEngineInsightsFiltersAssetNameFilter(TypedDict, total=False): + + field: Required[Literal["asset_name"]] + + operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[str, SequenceNotStr[str]]] + diff --git a/src/types/reports/visibility_stream_v1_reports_stream_post_response.py b/src/types/reports/visibility_stream_v1_reports_stream_post_response.py new file mode 100644 index 00000000..2a39192f --- /dev/null +++ b/src/types/reports/visibility_stream_v1_reports_stream_post_response.py @@ -0,0 +1,27 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Union +from typing_extensions import TypeAlias +from ..._models import BaseModel + +__all__ = ["VisibilityStreamV1ReportsStreamPostResponse", "VisibilityStreamV1ReportsStreamPostResponse", "Query", "VisibilityStreamV1ReportsStreamPostResponse2"] + +class VisibilityStreamV1ReportsStreamPostResponse2(BaseModel): + pass + +class Query(BaseModel): + pass + +class VisibilityStreamV1ReportsStreamPostResponse(BaseModel): + + query: Query + """The normalized query used to build the stream.""" + + total_rows: int + """Total number of rows available before pagination is applied.""" + + + +VisibilityStreamV1ReportsStreamPostResponse: TypeAlias = Union[VisibilityStreamV1ReportsStreamPostResponse, VisibilityStreamV1ReportsStreamPostResponse2] diff --git a/src/types/reports/visibility_stream_v2_v2_reports_stream_post_params.py b/src/types/reports/visibility_stream_v2_v2_reports_stream_post_params.py new file mode 100644 index 00000000..a94e4d00 --- /dev/null +++ b/src/types/reports/visibility_stream_v2_v2_reports_stream_post_params.py @@ -0,0 +1,70 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Iterable, Optional, Union +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._types import SequenceNotStr +from ..._utils import PropertyInfo + +__all__ = ["VisibilityStreamV2V2ReportsStreamPostParams", "EntityFilterClause", "FilterNode", "AppRoutesV2AnswerEngineInsightsReportsVisibilitySortSpec"] + + +class VisibilityStreamV2V2ReportsStreamPostParams(TypedDict, total=False): + + category_id: Required[str] + + start_date: Required[str] + """YYYY-MM-DD, ET, inclusive""" + + end_date: Required[str] + """YYYY-MM-DD, ET, inclusive""" + + group_by: Iterable[Literal["date", "model", "topic", "region", "prompt", "persona"]] + + metrics: Optional[Iterable[Literal["visibility_score", "share_of_voice", "average_position"]]] + + interval: Literal["day", "week", "month"] + + scope: Literal["owned", "all"] + + assets: Optional[Union[str, SequenceNotStr[str], EntityFilterClause]] + """A name (`is`), a list (`in`), or {op,value} with op `is`/`in`/`not_in`.""" + + filter: Optional[FilterNode] + + sort: AppRoutesV2AnswerEngineInsightsReportsVisibilitySortSpec + + limit: Optional[int] + """Page size; default 10, max 50.""" + + max_results: Optional[int] + """Stream endpoint only: cap the number of streamed rows (default: all).""" + + cursor: Optional[str] + + +class AppRoutesV2AnswerEngineInsightsReportsVisibilitySortSpec(TypedDict, total=False): + + field: Literal["visibility_score", "share_of_voice", "average_position"] + +class FilterNode(TypedDict, total=False): + + and_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="and")] + + or_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="or")] + + not_: Annotated[Optional[FilterNode], PropertyInfo(alias="not")] + + field: Optional[str] + + op: Optional[str] + + value: str + +class EntityFilterClause(TypedDict, total=False): + + op: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[str, SequenceNotStr[str]]] + diff --git a/src/types/reports/visibility_stream_v2_v2_reports_stream_post_response.py b/src/types/reports/visibility_stream_v2_v2_reports_stream_post_response.py new file mode 100644 index 00000000..667fafd3 --- /dev/null +++ b/src/types/reports/visibility_stream_v2_v2_reports_stream_post_response.py @@ -0,0 +1,7 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing_extensions import TypeAlias + +__all__ = ["VisibilityStreamV2V2ReportsStreamPostResponse"] + +VisibilityStreamV2V2ReportsStreamPostResponse: TypeAlias = str diff --git a/src/types/reports/visibility_v2_query.py b/src/types/reports/visibility_v2_query.py new file mode 100644 index 00000000..c939c176 --- /dev/null +++ b/src/types/reports/visibility_v2_query.py @@ -0,0 +1,72 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import List, Optional, Union +from typing_extensions import Literal + +from pydantic import Field as FieldInfo + +from ..._models import BaseModel + +__all__ = ["VisibilityV2Query", "EntityFilterClause", "FilterNode", "AppRoutesV2AnswerEngineInsightsReportsVisibilitySortSpec"] + + +class AppRoutesV2AnswerEngineInsightsReportsVisibilitySortSpec(BaseModel): + + field: Optional[Literal["visibility_score", "share_of_voice", "average_position"]] = None + +class FilterNode(BaseModel): + + and_: Optional[List[FilterNode]] = FieldInfo(alias="and", default=None) + + or_: Optional[List[FilterNode]] = FieldInfo(alias="or", default=None) + + not_: Optional[FilterNode] = FieldInfo(alias="not", default=None) + + field: Optional[str] = None + + op: Optional[str] = None + + value: Optional[str] = None + +class EntityFilterClause(BaseModel): + + op: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] + + + +class VisibilityV2Query(BaseModel): + + category_id: str + + start_date: str + """YYYY-MM-DD, ET, inclusive""" + + end_date: str + """YYYY-MM-DD, ET, inclusive""" + + group_by: Optional[List[Literal["date", "model", "topic", "region", "prompt", "persona"]]] = None + + metrics: Optional[List[Literal["visibility_score", "share_of_voice", "average_position"]]] = None + + interval: Optional[Literal["day", "week", "month"]] = None + + scope: Optional[Literal["owned", "all"]] = None + + assets: Optional[Union[str, List[str], EntityFilterClause]] = None + """A name (`is`), a list (`in`), or {op,value} with op `is`/`in`/`not_in`.""" + + filter: Optional[FilterNode] = None + + sort: Optional[AppRoutesV2AnswerEngineInsightsReportsVisibilitySortSpec] = None + + limit: Optional[int] = None + """Page size; default 10, max 50.""" + + max_results: Optional[int] = None + """Stream endpoint only: cap the number of streamed rows (default: all).""" + + cursor: Optional[str] = None diff --git a/src/types/reports/web_search_result_query_params.py b/src/types/reports/web_search_result_query_params.py new file mode 100644 index 00000000..d2fe16bd --- /dev/null +++ b/src/types/reports/web_search_result_query_params.py @@ -0,0 +1,71 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._types import SequenceNotStr +from ..pagination import Pagination +from ..hostname_filter import HostnameFilter +from ..path_filter import PathFilter +from ..region_id_filter import RegionIdFilter +from ..topic_id_filter import TopicIdFilter +from ..model_id_filter import ModelIdFilter +from ..tag_id_filter import TagIdFilter +from ..url_filter import UrlFilter +from ..root_domain_filter import RootDomainFilter +from ..persona_id_filter import PersonaIdFilter +from ..prompt_filter import PromptFilter +from ..prompt_id_filter import PromptIdFilter +from ..._utils import PropertyInfo + +__all__ = ["WebSearchResultQueryParams", "SearchQueryFilter"] + + +class WebSearchResultQueryParams(TypedDict, total=False): + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + """Date interval for the report. (only used with date dimension)""" + + dimensions: Iterable[Literal["hostname", "path", "url", "root_domain", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "persona", "search_query"]] + """Dimensions to group the report by.""" + + metrics: Required[Iterable[Literal["count", "search_share"]]] + """Metrics to include. `search_share` is the per-prompt occurrence rate.""" + + order_by: Dict[str, Literal["asc", "desc"]] + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - `key` is the field to order by, which can be a metric or dimension + - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Pagination + """Pagination settings for the report results.""" + + category_id: Required[str] + + start_date: Required[Union[str, datetime]] + """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + end_date: Required[Union[str, datetime]] + """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + filters: Iterable[Annotated[Union[HostnameFilter, PathFilter, RegionIdFilter, TopicIdFilter, ModelIdFilter, TagIdFilter, UrlFilter, RootDomainFilter, PersonaIdFilter, PromptFilter, PromptIdFilter, SearchQueryFilter], PropertyInfo(discriminator="field")]] + """List of filters to apply to the web search results report.""" + + +class SearchQueryFilter(TypedDict, total=False): + + field: Required[Literal["search_query"]] + + operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[str, SequenceNotStr[str]]] + diff --git a/src/types/reports/web_search_result_query_response.py b/src/types/reports/web_search_result_query_response.py new file mode 100644 index 00000000..a6d7f0a3 --- /dev/null +++ b/src/types/reports/web_search_result_query_response.py @@ -0,0 +1,24 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Optional, Union + +from ..._models import BaseModel +from ..report_info import ReportInfo + +__all__ = ["WebSearchResultQueryResponse", "WebSearchResultsResult"] + + +class WebSearchResultsResult(BaseModel): + + metrics: List[Union[int, float]] + + dimensions: List[Optional[str]] + + + +class WebSearchResultQueryResponse(BaseModel): + + info: ReportInfo + """Base model for report information.""" + + data: List[WebSearchResultsResult] diff --git a/src/types/reports/web_search_result_stream_params.py b/src/types/reports/web_search_result_stream_params.py new file mode 100644 index 00000000..672832f1 --- /dev/null +++ b/src/types/reports/web_search_result_stream_params.py @@ -0,0 +1,70 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypedDict +from ..._types import SequenceNotStr +from ..pagination import Pagination +from ..hostname_filter import HostnameFilter +from ..path_filter import PathFilter +from ..region_id_filter import RegionIdFilter +from ..topic_id_filter import TopicIdFilter +from ..model_id_filter import ModelIdFilter +from ..tag_id_filter import TagIdFilter +from ..url_filter import UrlFilter +from ..root_domain_filter import RootDomainFilter +from ..persona_id_filter import PersonaIdFilter +from ..prompt_filter import PromptFilter +from ..prompt_id_filter import PromptIdFilter +from ..._utils import PropertyInfo + +__all__ = ["WebSearchResultStreamParams", "SearchQueryFilter"] + + +class WebSearchResultStreamParams(TypedDict, total=False): + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + """Date interval for the report. (only used with date dimension)""" + + dimensions: Iterable[Literal["hostname", "path", "url", "root_domain", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "persona", "search_query"]] + """Dimensions to group the report by.""" + + metrics: Required[Iterable[Literal["count", "search_share"]]] + """Metrics to include. `search_share` is the per-prompt occurrence rate.""" + + order_by: Dict[str, Literal["asc", "desc"]] + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - `key` is the field to order by, which can be a metric or dimension + - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Optional[Pagination] + + category_id: Required[str] + + start_date: Required[Union[str, datetime]] + """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + end_date: Required[Union[str, datetime]] + """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + filters: Iterable[Annotated[Union[HostnameFilter, PathFilter, RegionIdFilter, TopicIdFilter, ModelIdFilter, TagIdFilter, UrlFilter, RootDomainFilter, PersonaIdFilter, PromptFilter, PromptIdFilter, SearchQueryFilter], PropertyInfo(discriminator="field")]] + """List of filters to apply to the web search results report.""" + + +class SearchQueryFilter(TypedDict, total=False): + + field: Required[Literal["search_query"]] + + operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] + + value: Required[Union[str, SequenceNotStr[str]]] + diff --git a/src/types/reports/web_search_result_stream_response.py b/src/types/reports/web_search_result_stream_response.py new file mode 100644 index 00000000..64f676d2 --- /dev/null +++ b/src/types/reports/web_search_result_stream_response.py @@ -0,0 +1,27 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Union +from typing_extensions import TypeAlias +from ..._models import BaseModel + +__all__ = ["WebSearchResultStreamResponse", "WebSearchResultStreamResponse", "Query", "WebSearchResultStreamResponse2"] + +class WebSearchResultStreamResponse2(BaseModel): + pass + +class Query(BaseModel): + pass + +class WebSearchResultStreamResponse(BaseModel): + + query: Query + """The normalized query used to build the stream.""" + + total_rows: int + """Total number of rows available before pagination is applied.""" + + + +WebSearchResultStreamResponse: TypeAlias = Union[WebSearchResultStreamResponse, WebSearchResultStreamResponse2] diff --git a/src/types/reports/web_search_results_query.py b/src/types/reports/web_search_results_query.py new file mode 100644 index 00000000..c5c1a942 --- /dev/null +++ b/src/types/reports/web_search_results_query.py @@ -0,0 +1,70 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal +from ..._utils import PropertyInfo + +from ..._models import BaseModel +from ..pagination import Pagination +from ..hostname_filter import HostnameFilter +from ..path_filter import PathFilter +from ..region_id_filter import RegionIdFilter +from ..topic_id_filter import TopicIdFilter +from ..model_id_filter import ModelIdFilter +from ..tag_id_filter import TagIdFilter +from ..url_filter import UrlFilter +from ..root_domain_filter import RootDomainFilter +from ..persona_id_filter import PersonaIdFilter +from ..prompt_filter import PromptFilter +from ..prompt_id_filter import PromptIdFilter + +__all__ = ["WebSearchResultsQuery", "SearchQueryFilter"] + + +class SearchQueryFilter(BaseModel): + + field: Literal["search_query"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] + + + +class WebSearchResultsQuery(BaseModel): + + date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None + """Date interval for the report. (only used with date dimension)""" + + dimensions: Optional[List[Literal["hostname", "path", "url", "root_domain", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "persona", "search_query"]]] = None + """Dimensions to group the report by.""" + + metrics: List[Literal["count", "search_share"]] + """Metrics to include. `search_share` is the per-prompt occurrence rate.""" + + order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - `key` is the field to order by, which can be a metric or dimension + - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Optional[Pagination] = None + """Pagination settings for the report results.""" + + category_id: str + + start_date: datetime + """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + end_date: datetime + """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + filters: Optional[List[Annotated[Union[HostnameFilter, PathFilter, RegionIdFilter, TopicIdFilter, ModelIdFilter, TagIdFilter, UrlFilter, RootDomainFilter, PersonaIdFilter, PromptFilter, PromptIdFilter, SearchQueryFilter], PropertyInfo(discriminator="field")]]] = None + """List of filters to apply to the web search results report.""" diff --git a/src/types/root_domain_filter.py b/src/types/root_domain_filter.py new file mode 100644 index 00000000..6fa6a666 --- /dev/null +++ b/src/types/root_domain_filter.py @@ -0,0 +1,18 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Union +from typing_extensions import Literal + +from .._models import BaseModel + +__all__ = ["RootDomainFilter"] + + +class RootDomainFilter(BaseModel): + """Filter by root domain""" + + field: Literal["root_domain"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] diff --git a/src/types/search_knowledge_base_request.py b/src/types/search_knowledge_base_request.py new file mode 100644 index 00000000..dec1df95 --- /dev/null +++ b/src/types/search_knowledge_base_request.py @@ -0,0 +1,32 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Optional + +from .._models import BaseModel + +__all__ = ["SearchKnowledgeBaseRequest", "SearchKnowledgeBaseFilters"] + + +class SearchKnowledgeBaseFilters(BaseModel): + + tags: Optional[List[str]] = None + """Optional tags to match. Documents with any matching tag are included.""" + + folders: Optional[List[str]] = None + """Optional folder paths to search within. Currently limited to one folder.""" + + + +class SearchKnowledgeBaseRequest(BaseModel): + + query: str + """Search query.""" + + top_k: int + """Maximum number of results to return.""" + + return_full_page: Optional[bool] = None + """Return full page content instead of snippets.""" + + filters: Optional[SearchKnowledgeBaseFilters] = None + """Optional search filters.""" diff --git a/src/types/sentiment_v2_report_query.py b/src/types/sentiment_v2_report_query.py new file mode 100644 index 00000000..151709e9 --- /dev/null +++ b/src/types/sentiment_v2_report_query.py @@ -0,0 +1,145 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal +from .._utils import PropertyInfo + +from .._models import BaseModel +from .pagination import Pagination + +__all__ = ["SentimentV2ReportQuery", "SentimentV2ModelIdFilter", "SentimentV2RegionIdFilter", "SentimentV2TopicIdFilter", "SentimentV2PromptIdFilter", "SentimentV2PersonaIdFilter", "SentimentV2TagIdFilter", "SentimentV2RunIdFilter", "SentimentV2ThemeIdFilter", "SentimentV2ThemeFilter", "SentimentV2ClaimIdFilter", "SentimentV2ClaimFilter", "SentimentV2SentimentFilter"] + + +class SentimentV2SentimentFilter(BaseModel): + + field: Literal["sentiment"] + + operator: Literal["is", "not_is", "in", "not_in"] + + value: Union[Literal["positive", "negative"], List[Literal["positive", "negative"]]] + +class SentimentV2ClaimFilter(BaseModel): + + field: Literal["claim"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] + +class SentimentV2ClaimIdFilter(BaseModel): + + field: Literal["claim_id"] + + operator: Literal["is", "not_is", "in", "not_in"] + + value: Union[str, List[str]] + +class SentimentV2ThemeFilter(BaseModel): + + field: Literal["theme"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] + +class SentimentV2ThemeIdFilter(BaseModel): + + field: Literal["theme_id"] + + operator: Literal["is", "not_is", "in", "not_in"] + + value: Union[str, List[str]] + +class SentimentV2RunIdFilter(BaseModel): + + field: Literal["run_id"] + + operator: Literal["is", "not_is", "in", "not_in"] + + value: Union[str, List[str]] + +class SentimentV2TagIdFilter(BaseModel): + + field: Literal["tag_id"] + + operator: Literal["is", "not_is", "in", "not_in"] + + value: Union[str, List[str]] + +class SentimentV2PersonaIdFilter(BaseModel): + + field: Literal["persona_id"] + + operator: Literal["is", "not_is", "in", "not_in"] + + value: Union[str, List[str]] + +class SentimentV2PromptIdFilter(BaseModel): + + field: Literal["prompt_id"] + + operator: Literal["is", "not_is", "in", "not_in"] + + value: Union[str, List[str]] + +class SentimentV2TopicIdFilter(BaseModel): + + field: Literal["topic_id"] + + operator: Literal["is", "not_is", "in", "not_in"] + + value: Union[str, List[str]] + +class SentimentV2RegionIdFilter(BaseModel): + + field: Literal["region_id"] + + operator: Literal["is", "not_is", "in", "not_in"] + + value: Union[str, List[str]] + +class SentimentV2ModelIdFilter(BaseModel): + + field: Literal["model_id"] + + operator: Literal["is", "not_is", "in", "not_in"] + + value: Union[str, List[str]] + + + +class SentimentV2ReportQuery(BaseModel): + + category_id: str + + asset_name: str + + start_date: datetime + """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + end_date: datetime + """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + comparison_start_date: Optional[datetime] = None + """Start of the previous period for delta computation.""" + + comparison_end_date: Optional[datetime] = None + """End of the previous period for delta computation.""" + + date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None + """Date interval for the report. Only used when dimensions includes date.""" + + dimensions: Optional[List[Literal["date", "topic", "region", "model", "prompt", "persona", "tag", "theme", "claim", "run", "asset_name"]]] = None + """Dimensions to group the report by.""" + + metrics: List[Literal["sentiment", "occurrence"]] + + filters: Optional[List[Annotated[Union[SentimentV2ModelIdFilter, SentimentV2RegionIdFilter, SentimentV2TopicIdFilter, SentimentV2PromptIdFilter, SentimentV2PersonaIdFilter, SentimentV2TagIdFilter, SentimentV2RunIdFilter, SentimentV2ThemeIdFilter, SentimentV2ThemeFilter, SentimentV2ClaimIdFilter, SentimentV2ClaimFilter, SentimentV2SentimentFilter], PropertyInfo(discriminator="field")]]] = None + """List of filters to apply to the sentiment-v2 report.""" + + order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None + """Custom ordering of report results. Dimension keys must also be present in dimensions. The sentiment metric orders by positive_sentiment.""" + + pagination: Optional[Pagination] = None + """Pagination settings for the report results.""" diff --git a/src/types/tag_id_filter.py b/src/types/tag_id_filter.py new file mode 100644 index 00000000..a02099e3 --- /dev/null +++ b/src/types/tag_id_filter.py @@ -0,0 +1,18 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Union +from typing_extensions import Literal + +from .._models import BaseModel + +__all__ = ["TagIdFilter"] + + +class TagIdFilter(BaseModel): + """Filter by tag (prompt group) UUID.""" + + field: Union[Literal["tag_id"], Literal["tag"]] + + operator: Literal["is", "not_is", "in", "not_in"] + + value: Union[str, List[str]] diff --git a/src/types/tag_name_filter.py b/src/types/tag_name_filter.py new file mode 100644 index 00000000..0eabbe36 --- /dev/null +++ b/src/types/tag_name_filter.py @@ -0,0 +1,18 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Union +from typing_extensions import Literal + +from .._models import BaseModel + +__all__ = ["TagNameFilter"] + + +class TagNameFilter(BaseModel): + """Filter by tag name.""" + + field: Literal["tag_name"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] diff --git a/src/types/topic_id_filter.py b/src/types/topic_id_filter.py new file mode 100644 index 00000000..79ecbf77 --- /dev/null +++ b/src/types/topic_id_filter.py @@ -0,0 +1,18 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Union +from typing_extensions import Literal + +from .._models import BaseModel + +__all__ = ["TopicIdFilter"] + + +class TopicIdFilter(BaseModel): + """Filter by topic UUID.""" + + field: Union[Literal["topic_id"], Literal["topic"]] + + operator: Literal["is", "not_is", "in", "not_in"] + + value: Union[str, List[str]] diff --git a/src/types/topic_name_filter.py b/src/types/topic_name_filter.py new file mode 100644 index 00000000..337210c2 --- /dev/null +++ b/src/types/topic_name_filter.py @@ -0,0 +1,18 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Union +from typing_extensions import Literal + +from .._models import BaseModel + +__all__ = ["TopicNameFilter"] + + +class TopicNameFilter(BaseModel): + """Filter by topic name""" + + field: Literal["topic_name"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] diff --git a/src/types/update_agent_request.py b/src/types/update_agent_request.py new file mode 100644 index 00000000..786b9684 --- /dev/null +++ b/src/types/update_agent_request.py @@ -0,0 +1,18 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + + +from .._models import BaseModel + +__all__ = ["UpdateAgentRequest", "Graph"] + + +class Graph(BaseModel): + pass + + + +class UpdateAgentRequest(BaseModel): + """Request body for updating a draft agent's graph in place.""" + + graph: Graph + """New workflow graph for the agent's draft version. Replaces the current draft graph; the agent is iterated in place rather than re-created, so its ID is stable. Required — a null graph is rejected as a 422 here rather than as a relayed upstream error.""" diff --git a/src/types/update_prompt_status_body.py b/src/types/update_prompt_status_body.py new file mode 100644 index 00000000..6e46e578 --- /dev/null +++ b/src/types/update_prompt_status_body.py @@ -0,0 +1,20 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Optional +from typing_extensions import Literal + +from .._models import BaseModel + +__all__ = ["UpdatePromptStatusBody"] + + +class UpdatePromptStatusBody(BaseModel): + + prompt_ids: List[str] + """IDs of the prompts to update.""" + + status: Literal["active", "disabled", "deleted"] + """Target status: 'active', 'disabled', or 'deleted'.""" + + dry_run: Optional[bool] = None + """When true, validate and preview changes without persisting them.""" diff --git a/src/types/url_filter.py b/src/types/url_filter.py new file mode 100644 index 00000000..b35b8d0e --- /dev/null +++ b/src/types/url_filter.py @@ -0,0 +1,18 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Union +from typing_extensions import Literal + +from .._models import BaseModel + +__all__ = ["UrlFilter"] + + +class UrlFilter(BaseModel): + """Filter by URL""" + + field: Literal["url"] + + operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + + value: Union[str, List[str]] diff --git a/tests/__init__.py b/tests/__init__.py deleted file mode 100644 index fd8019a9..00000000 --- a/tests/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. diff --git a/tests/api_resources/__init__.py b/tests/api_resources/__init__.py deleted file mode 100644 index fd8019a9..00000000 --- a/tests/api_resources/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. diff --git a/tests/api_resources/ads/__init__.py b/tests/api_resources/ads/__init__.py deleted file mode 100644 index fd8019a9..00000000 --- a/tests/api_resources/ads/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. diff --git a/tests/api_resources/ads/openai_ads/__init__.py b/tests/api_resources/ads/openai_ads/__init__.py deleted file mode 100644 index fd8019a9..00000000 --- a/tests/api_resources/ads/openai_ads/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. diff --git a/tests/api_resources/ads/openai_ads/test_ad_account.py b/tests/api_resources/ads/openai_ads/test_ad_account.py deleted file mode 100644 index 50133000..00000000 --- a/tests/api_resources/ads/openai_ads/test_ad_account.py +++ /dev/null @@ -1,108 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import os -from typing import Any, cast - -import pytest - -from profound import Profound, AsyncProfound -from tests.utils import assert_matches_type -from profound.types.ads.openai_ads import AdAccountRetrieveInsightsResponse - -base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") - - -class TestAdAccount: - parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_retrieve_insights(self, client: Profound) -> None: - ad_account = client.ads.openai_ads.ad_account.retrieve_insights() - assert_matches_type(AdAccountRetrieveInsightsResponse, ad_account, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_retrieve_insights_with_all_params(self, client: Profound) -> None: - ad_account = client.ads.openai_ads.ad_account.retrieve_insights( - after="after", - aggregation_level="ad_account", - before="before", - limit=1, - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - time_granularity="hourly", - time_ranges=["string", "string"], - ) - assert_matches_type(AdAccountRetrieveInsightsResponse, ad_account, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_retrieve_insights(self, client: Profound) -> None: - response = client.ads.openai_ads.ad_account.with_raw_response.retrieve_insights() - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - ad_account = response.parse() - assert_matches_type(AdAccountRetrieveInsightsResponse, ad_account, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_retrieve_insights(self, client: Profound) -> None: - with client.ads.openai_ads.ad_account.with_streaming_response.retrieve_insights() as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - ad_account = response.parse() - assert_matches_type(AdAccountRetrieveInsightsResponse, ad_account, path=["response"]) - - assert cast(Any, response.is_closed) is True - - -class TestAsyncAdAccount: - parametrize = pytest.mark.parametrize( - "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_retrieve_insights(self, async_client: AsyncProfound) -> None: - ad_account = await async_client.ads.openai_ads.ad_account.retrieve_insights() - assert_matches_type(AdAccountRetrieveInsightsResponse, ad_account, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_retrieve_insights_with_all_params(self, async_client: AsyncProfound) -> None: - ad_account = await async_client.ads.openai_ads.ad_account.retrieve_insights( - after="after", - aggregation_level="ad_account", - before="before", - limit=1, - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - time_granularity="hourly", - time_ranges=["string", "string"], - ) - assert_matches_type(AdAccountRetrieveInsightsResponse, ad_account, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_retrieve_insights(self, async_client: AsyncProfound) -> None: - response = await async_client.ads.openai_ads.ad_account.with_raw_response.retrieve_insights() - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - ad_account = await response.parse() - assert_matches_type(AdAccountRetrieveInsightsResponse, ad_account, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_retrieve_insights(self, async_client: AsyncProfound) -> None: - async with async_client.ads.openai_ads.ad_account.with_streaming_response.retrieve_insights() as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - ad_account = await response.parse() - assert_matches_type(AdAccountRetrieveInsightsResponse, ad_account, path=["response"]) - - assert cast(Any, response.is_closed) is True diff --git a/tests/api_resources/agents/__init__.py b/tests/api_resources/agents/__init__.py deleted file mode 100644 index fd8019a9..00000000 --- a/tests/api_resources/agents/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. diff --git a/tests/api_resources/agents/test_node_types.py b/tests/api_resources/agents/test_node_types.py deleted file mode 100644 index be52d41d..00000000 --- a/tests/api_resources/agents/test_node_types.py +++ /dev/null @@ -1,164 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import os -from typing import Any, cast - -import pytest - -from profound import Profound, AsyncProfound -from tests.utils import assert_matches_type -from profound.types.agents import NodeTypeListResponse, NodeTypeRetrieveSchemaResponse - -base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") - - -class TestNodeTypes: - parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_list(self, client: Profound) -> None: - node_type = client.agents.node_types.list() - assert_matches_type(NodeTypeListResponse, node_type, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_list(self, client: Profound) -> None: - response = client.agents.node_types.with_raw_response.list() - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - node_type = response.parse() - assert_matches_type(NodeTypeListResponse, node_type, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_list(self, client: Profound) -> None: - with client.agents.node_types.with_streaming_response.list() as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - node_type = response.parse() - assert_matches_type(NodeTypeListResponse, node_type, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_retrieve_schema(self, client: Profound) -> None: - node_type = client.agents.node_types.retrieve_schema( - "node_type", - ) - assert_matches_type(NodeTypeRetrieveSchemaResponse, node_type, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_retrieve_schema(self, client: Profound) -> None: - response = client.agents.node_types.with_raw_response.retrieve_schema( - "node_type", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - node_type = response.parse() - assert_matches_type(NodeTypeRetrieveSchemaResponse, node_type, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_retrieve_schema(self, client: Profound) -> None: - with client.agents.node_types.with_streaming_response.retrieve_schema( - "node_type", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - node_type = response.parse() - assert_matches_type(NodeTypeRetrieveSchemaResponse, node_type, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_retrieve_schema(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `node_type` but received ''"): - client.agents.node_types.with_raw_response.retrieve_schema( - "", - ) - - -class TestAsyncNodeTypes: - parametrize = pytest.mark.parametrize( - "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_list(self, async_client: AsyncProfound) -> None: - node_type = await async_client.agents.node_types.list() - assert_matches_type(NodeTypeListResponse, node_type, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_list(self, async_client: AsyncProfound) -> None: - response = await async_client.agents.node_types.with_raw_response.list() - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - node_type = await response.parse() - assert_matches_type(NodeTypeListResponse, node_type, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_list(self, async_client: AsyncProfound) -> None: - async with async_client.agents.node_types.with_streaming_response.list() as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - node_type = await response.parse() - assert_matches_type(NodeTypeListResponse, node_type, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_retrieve_schema(self, async_client: AsyncProfound) -> None: - node_type = await async_client.agents.node_types.retrieve_schema( - "node_type", - ) - assert_matches_type(NodeTypeRetrieveSchemaResponse, node_type, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_retrieve_schema(self, async_client: AsyncProfound) -> None: - response = await async_client.agents.node_types.with_raw_response.retrieve_schema( - "node_type", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - node_type = await response.parse() - assert_matches_type(NodeTypeRetrieveSchemaResponse, node_type, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_retrieve_schema(self, async_client: AsyncProfound) -> None: - async with async_client.agents.node_types.with_streaming_response.retrieve_schema( - "node_type", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - node_type = await response.parse() - assert_matches_type(NodeTypeRetrieveSchemaResponse, node_type, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_retrieve_schema(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `node_type` but received ''"): - await async_client.agents.node_types.with_raw_response.retrieve_schema( - "", - ) diff --git a/tests/api_resources/agents/test_runs.py b/tests/api_resources/agents/test_runs.py deleted file mode 100644 index 3856c10d..00000000 --- a/tests/api_resources/agents/test_runs.py +++ /dev/null @@ -1,250 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import os -from typing import Any, cast - -import pytest - -from profound import Profound, AsyncProfound -from tests.utils import assert_matches_type -from profound.types.agents import RunCreateResponse, RunRetrieveResponse - -base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") - - -class TestRuns: - parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create(self, client: Profound) -> None: - run = client.agents.runs.create( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(RunCreateResponse, run, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_with_all_params(self, client: Profound) -> None: - run = client.agents.runs.create( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - inputs={"foo": "bar"}, - ) - assert_matches_type(RunCreateResponse, run, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_create(self, client: Profound) -> None: - response = client.agents.runs.with_raw_response.create( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - run = response.parse() - assert_matches_type(RunCreateResponse, run, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_create(self, client: Profound) -> None: - with client.agents.runs.with_streaming_response.create( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - run = response.parse() - assert_matches_type(RunCreateResponse, run, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_create(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `agent_id` but received ''"): - client.agents.runs.with_raw_response.create( - agent_id="", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_retrieve(self, client: Profound) -> None: - run = client.agents.runs.retrieve( - run_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(RunRetrieveResponse, run, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_retrieve_with_all_params(self, client: Profound) -> None: - run = client.agents.runs.retrieve( - run_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - verbose=True, - ) - assert_matches_type(RunRetrieveResponse, run, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_retrieve(self, client: Profound) -> None: - response = client.agents.runs.with_raw_response.retrieve( - run_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - run = response.parse() - assert_matches_type(RunRetrieveResponse, run, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_retrieve(self, client: Profound) -> None: - with client.agents.runs.with_streaming_response.retrieve( - run_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - run = response.parse() - assert_matches_type(RunRetrieveResponse, run, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_retrieve(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `agent_id` but received ''"): - client.agents.runs.with_raw_response.retrieve( - run_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - agent_id="", - ) - - with pytest.raises(ValueError, match=r"Expected a non-empty value for `run_id` but received ''"): - client.agents.runs.with_raw_response.retrieve( - run_id="", - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - -class TestAsyncRuns: - parametrize = pytest.mark.parametrize( - "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create(self, async_client: AsyncProfound) -> None: - run = await async_client.agents.runs.create( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(RunCreateResponse, run, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_with_all_params(self, async_client: AsyncProfound) -> None: - run = await async_client.agents.runs.create( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - inputs={"foo": "bar"}, - ) - assert_matches_type(RunCreateResponse, run, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_create(self, async_client: AsyncProfound) -> None: - response = await async_client.agents.runs.with_raw_response.create( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - run = await response.parse() - assert_matches_type(RunCreateResponse, run, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_create(self, async_client: AsyncProfound) -> None: - async with async_client.agents.runs.with_streaming_response.create( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - run = await response.parse() - assert_matches_type(RunCreateResponse, run, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_create(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `agent_id` but received ''"): - await async_client.agents.runs.with_raw_response.create( - agent_id="", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_retrieve(self, async_client: AsyncProfound) -> None: - run = await async_client.agents.runs.retrieve( - run_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(RunRetrieveResponse, run, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_retrieve_with_all_params(self, async_client: AsyncProfound) -> None: - run = await async_client.agents.runs.retrieve( - run_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - verbose=True, - ) - assert_matches_type(RunRetrieveResponse, run, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_retrieve(self, async_client: AsyncProfound) -> None: - response = await async_client.agents.runs.with_raw_response.retrieve( - run_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - run = await response.parse() - assert_matches_type(RunRetrieveResponse, run, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_retrieve(self, async_client: AsyncProfound) -> None: - async with async_client.agents.runs.with_streaming_response.retrieve( - run_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - run = await response.parse() - assert_matches_type(RunRetrieveResponse, run, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_retrieve(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `agent_id` but received ''"): - await async_client.agents.runs.with_raw_response.retrieve( - run_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - agent_id="", - ) - - with pytest.raises(ValueError, match=r"Expected a non-empty value for `run_id` but received ''"): - await async_client.agents.runs.with_raw_response.retrieve( - run_id="", - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) diff --git a/tests/api_resources/content/__init__.py b/tests/api_resources/content/__init__.py deleted file mode 100644 index fd8019a9..00000000 --- a/tests/api_resources/content/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. diff --git a/tests/api_resources/content/test_optimization.py b/tests/api_resources/content/test_optimization.py deleted file mode 100644 index 86c4e1b8..00000000 --- a/tests/api_resources/content/test_optimization.py +++ /dev/null @@ -1,232 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import os -from typing import Any, cast - -import pytest - -from profound import Profound, AsyncProfound -from tests.utils import assert_matches_type -from profound.types.content import OptimizationListResponse, OptimizationRetrieveResponse - -base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") - - -class TestOptimization: - parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_retrieve(self, client: Profound) -> None: - optimization = client.content.optimization.retrieve( - content_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - asset_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(OptimizationRetrieveResponse, optimization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_retrieve(self, client: Profound) -> None: - response = client.content.optimization.with_raw_response.retrieve( - content_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - asset_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - optimization = response.parse() - assert_matches_type(OptimizationRetrieveResponse, optimization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_retrieve(self, client: Profound) -> None: - with client.content.optimization.with_streaming_response.retrieve( - content_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - asset_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - optimization = response.parse() - assert_matches_type(OptimizationRetrieveResponse, optimization, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_retrieve(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `asset_id` but received ''"): - client.content.optimization.with_raw_response.retrieve( - content_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - asset_id="", - ) - - with pytest.raises(ValueError, match=r"Expected a non-empty value for `content_id` but received ''"): - client.content.optimization.with_raw_response.retrieve( - content_id="", - asset_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_list(self, client: Profound) -> None: - optimization = client.content.optimization.list( - asset_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(OptimizationListResponse, optimization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_list_with_all_params(self, client: Profound) -> None: - optimization = client.content.optimization.list( - asset_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - limit=1, - offset=0, - ) - assert_matches_type(OptimizationListResponse, optimization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_list(self, client: Profound) -> None: - response = client.content.optimization.with_raw_response.list( - asset_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - optimization = response.parse() - assert_matches_type(OptimizationListResponse, optimization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_list(self, client: Profound) -> None: - with client.content.optimization.with_streaming_response.list( - asset_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - optimization = response.parse() - assert_matches_type(OptimizationListResponse, optimization, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_list(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `asset_id` but received ''"): - client.content.optimization.with_raw_response.list( - asset_id="", - ) - - -class TestAsyncOptimization: - parametrize = pytest.mark.parametrize( - "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_retrieve(self, async_client: AsyncProfound) -> None: - optimization = await async_client.content.optimization.retrieve( - content_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - asset_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(OptimizationRetrieveResponse, optimization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_retrieve(self, async_client: AsyncProfound) -> None: - response = await async_client.content.optimization.with_raw_response.retrieve( - content_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - asset_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - optimization = await response.parse() - assert_matches_type(OptimizationRetrieveResponse, optimization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_retrieve(self, async_client: AsyncProfound) -> None: - async with async_client.content.optimization.with_streaming_response.retrieve( - content_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - asset_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - optimization = await response.parse() - assert_matches_type(OptimizationRetrieveResponse, optimization, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_retrieve(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `asset_id` but received ''"): - await async_client.content.optimization.with_raw_response.retrieve( - content_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - asset_id="", - ) - - with pytest.raises(ValueError, match=r"Expected a non-empty value for `content_id` but received ''"): - await async_client.content.optimization.with_raw_response.retrieve( - content_id="", - asset_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_list(self, async_client: AsyncProfound) -> None: - optimization = await async_client.content.optimization.list( - asset_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(OptimizationListResponse, optimization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_list_with_all_params(self, async_client: AsyncProfound) -> None: - optimization = await async_client.content.optimization.list( - asset_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - limit=1, - offset=0, - ) - assert_matches_type(OptimizationListResponse, optimization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_list(self, async_client: AsyncProfound) -> None: - response = await async_client.content.optimization.with_raw_response.list( - asset_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - optimization = await response.parse() - assert_matches_type(OptimizationListResponse, optimization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_list(self, async_client: AsyncProfound) -> None: - async with async_client.content.optimization.with_streaming_response.list( - asset_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - optimization = await response.parse() - assert_matches_type(OptimizationListResponse, optimization, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_list(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `asset_id` but received ''"): - await async_client.content.optimization.with_raw_response.list( - asset_id="", - ) diff --git a/tests/api_resources/knowledge_bases/__init__.py b/tests/api_resources/knowledge_bases/__init__.py deleted file mode 100644 index fd8019a9..00000000 --- a/tests/api_resources/knowledge_bases/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. diff --git a/tests/api_resources/knowledge_bases/test_documents.py b/tests/api_resources/knowledge_bases/test_documents.py deleted file mode 100644 index 3e84ab15..00000000 --- a/tests/api_resources/knowledge_bases/test_documents.py +++ /dev/null @@ -1,388 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import os -from typing import Any, cast - -import pytest - -from profound import Profound, AsyncProfound -from tests.utils import assert_matches_type -from profound.types.knowledge_bases import ( - DocumentCreateResponse, - DocumentDeleteResponse, - DocumentUpdateResponse, -) - -base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") - - -class TestDocuments: - parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create(self, client: Profound) -> None: - document = client.knowledge_bases.documents.create( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - name="x", - text="x", - ) - assert_matches_type(DocumentCreateResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_with_all_params(self, client: Profound) -> None: - document = client.knowledge_bases.documents.create( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - name="x", - text="x", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - folder="x", - ) - assert_matches_type(DocumentCreateResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_create(self, client: Profound) -> None: - response = client.knowledge_bases.documents.with_raw_response.create( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - name="x", - text="x", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - document = response.parse() - assert_matches_type(DocumentCreateResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_create(self, client: Profound) -> None: - with client.knowledge_bases.documents.with_streaming_response.create( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - name="x", - text="x", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - document = response.parse() - assert_matches_type(DocumentCreateResponse, document, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_create(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `knowledge_base_id` but received ''"): - client.knowledge_bases.documents.with_raw_response.create( - knowledge_base_id="", - name="x", - text="x", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_update(self, client: Profound) -> None: - document = client.knowledge_bases.documents.update( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - name="x", - text="x", - ) - assert_matches_type(DocumentUpdateResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_update_with_all_params(self, client: Profound) -> None: - document = client.knowledge_bases.documents.update( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - name="x", - text="x", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - folder="x", - ) - assert_matches_type(DocumentUpdateResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_update(self, client: Profound) -> None: - response = client.knowledge_bases.documents.with_raw_response.update( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - name="x", - text="x", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - document = response.parse() - assert_matches_type(DocumentUpdateResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_update(self, client: Profound) -> None: - with client.knowledge_bases.documents.with_streaming_response.update( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - name="x", - text="x", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - document = response.parse() - assert_matches_type(DocumentUpdateResponse, document, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_update(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `knowledge_base_id` but received ''"): - client.knowledge_bases.documents.with_raw_response.update( - knowledge_base_id="", - name="x", - text="x", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_delete(self, client: Profound) -> None: - document = client.knowledge_bases.documents.delete( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - name="x", - ) - assert_matches_type(DocumentDeleteResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_delete_with_all_params(self, client: Profound) -> None: - document = client.knowledge_bases.documents.delete( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - name="x", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(DocumentDeleteResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_delete(self, client: Profound) -> None: - response = client.knowledge_bases.documents.with_raw_response.delete( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - name="x", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - document = response.parse() - assert_matches_type(DocumentDeleteResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_delete(self, client: Profound) -> None: - with client.knowledge_bases.documents.with_streaming_response.delete( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - name="x", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - document = response.parse() - assert_matches_type(DocumentDeleteResponse, document, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_delete(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `knowledge_base_id` but received ''"): - client.knowledge_bases.documents.with_raw_response.delete( - knowledge_base_id="", - name="x", - ) - - -class TestAsyncDocuments: - parametrize = pytest.mark.parametrize( - "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create(self, async_client: AsyncProfound) -> None: - document = await async_client.knowledge_bases.documents.create( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - name="x", - text="x", - ) - assert_matches_type(DocumentCreateResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_with_all_params(self, async_client: AsyncProfound) -> None: - document = await async_client.knowledge_bases.documents.create( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - name="x", - text="x", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - folder="x", - ) - assert_matches_type(DocumentCreateResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_create(self, async_client: AsyncProfound) -> None: - response = await async_client.knowledge_bases.documents.with_raw_response.create( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - name="x", - text="x", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - document = await response.parse() - assert_matches_type(DocumentCreateResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_create(self, async_client: AsyncProfound) -> None: - async with async_client.knowledge_bases.documents.with_streaming_response.create( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - name="x", - text="x", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - document = await response.parse() - assert_matches_type(DocumentCreateResponse, document, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_create(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `knowledge_base_id` but received ''"): - await async_client.knowledge_bases.documents.with_raw_response.create( - knowledge_base_id="", - name="x", - text="x", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_update(self, async_client: AsyncProfound) -> None: - document = await async_client.knowledge_bases.documents.update( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - name="x", - text="x", - ) - assert_matches_type(DocumentUpdateResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_update_with_all_params(self, async_client: AsyncProfound) -> None: - document = await async_client.knowledge_bases.documents.update( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - name="x", - text="x", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - folder="x", - ) - assert_matches_type(DocumentUpdateResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_update(self, async_client: AsyncProfound) -> None: - response = await async_client.knowledge_bases.documents.with_raw_response.update( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - name="x", - text="x", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - document = await response.parse() - assert_matches_type(DocumentUpdateResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_update(self, async_client: AsyncProfound) -> None: - async with async_client.knowledge_bases.documents.with_streaming_response.update( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - name="x", - text="x", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - document = await response.parse() - assert_matches_type(DocumentUpdateResponse, document, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_update(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `knowledge_base_id` but received ''"): - await async_client.knowledge_bases.documents.with_raw_response.update( - knowledge_base_id="", - name="x", - text="x", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_delete(self, async_client: AsyncProfound) -> None: - document = await async_client.knowledge_bases.documents.delete( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - name="x", - ) - assert_matches_type(DocumentDeleteResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_delete_with_all_params(self, async_client: AsyncProfound) -> None: - document = await async_client.knowledge_bases.documents.delete( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - name="x", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(DocumentDeleteResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_delete(self, async_client: AsyncProfound) -> None: - response = await async_client.knowledge_bases.documents.with_raw_response.delete( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - name="x", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - document = await response.parse() - assert_matches_type(DocumentDeleteResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_delete(self, async_client: AsyncProfound) -> None: - async with async_client.knowledge_bases.documents.with_streaming_response.delete( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - name="x", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - document = await response.parse() - assert_matches_type(DocumentDeleteResponse, document, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_delete(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `knowledge_base_id` but received ''"): - await async_client.knowledge_bases.documents.with_raw_response.delete( - knowledge_base_id="", - name="x", - ) diff --git a/tests/api_resources/knowledge_bases/test_folders.py b/tests/api_resources/knowledge_bases/test_folders.py deleted file mode 100644 index 8e9cf5e3..00000000 --- a/tests/api_resources/knowledge_bases/test_folders.py +++ /dev/null @@ -1,253 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import os -from typing import Any, cast - -import pytest - -from profound import Profound, AsyncProfound -from tests.utils import assert_matches_type -from profound.types.knowledge_bases import ( - FolderCreateResponse, - FolderDeleteResponse, -) - -base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") - - -class TestFolders: - parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create(self, client: Profound) -> None: - folder = client.knowledge_bases.folders.create( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - path="x", - ) - assert_matches_type(FolderCreateResponse, folder, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_with_all_params(self, client: Profound) -> None: - folder = client.knowledge_bases.folders.create( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - path="x", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(FolderCreateResponse, folder, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_create(self, client: Profound) -> None: - response = client.knowledge_bases.folders.with_raw_response.create( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - path="x", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - folder = response.parse() - assert_matches_type(FolderCreateResponse, folder, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_create(self, client: Profound) -> None: - with client.knowledge_bases.folders.with_streaming_response.create( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - path="x", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - folder = response.parse() - assert_matches_type(FolderCreateResponse, folder, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_create(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `knowledge_base_id` but received ''"): - client.knowledge_bases.folders.with_raw_response.create( - knowledge_base_id="", - path="x", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_delete(self, client: Profound) -> None: - folder = client.knowledge_bases.folders.delete( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - path="x", - ) - assert_matches_type(FolderDeleteResponse, folder, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_delete_with_all_params(self, client: Profound) -> None: - folder = client.knowledge_bases.folders.delete( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - path="x", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - recursive=True, - ) - assert_matches_type(FolderDeleteResponse, folder, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_delete(self, client: Profound) -> None: - response = client.knowledge_bases.folders.with_raw_response.delete( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - path="x", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - folder = response.parse() - assert_matches_type(FolderDeleteResponse, folder, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_delete(self, client: Profound) -> None: - with client.knowledge_bases.folders.with_streaming_response.delete( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - path="x", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - folder = response.parse() - assert_matches_type(FolderDeleteResponse, folder, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_delete(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `knowledge_base_id` but received ''"): - client.knowledge_bases.folders.with_raw_response.delete( - knowledge_base_id="", - path="x", - ) - - -class TestAsyncFolders: - parametrize = pytest.mark.parametrize( - "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create(self, async_client: AsyncProfound) -> None: - folder = await async_client.knowledge_bases.folders.create( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - path="x", - ) - assert_matches_type(FolderCreateResponse, folder, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_with_all_params(self, async_client: AsyncProfound) -> None: - folder = await async_client.knowledge_bases.folders.create( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - path="x", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(FolderCreateResponse, folder, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_create(self, async_client: AsyncProfound) -> None: - response = await async_client.knowledge_bases.folders.with_raw_response.create( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - path="x", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - folder = await response.parse() - assert_matches_type(FolderCreateResponse, folder, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_create(self, async_client: AsyncProfound) -> None: - async with async_client.knowledge_bases.folders.with_streaming_response.create( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - path="x", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - folder = await response.parse() - assert_matches_type(FolderCreateResponse, folder, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_create(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `knowledge_base_id` but received ''"): - await async_client.knowledge_bases.folders.with_raw_response.create( - knowledge_base_id="", - path="x", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_delete(self, async_client: AsyncProfound) -> None: - folder = await async_client.knowledge_bases.folders.delete( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - path="x", - ) - assert_matches_type(FolderDeleteResponse, folder, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_delete_with_all_params(self, async_client: AsyncProfound) -> None: - folder = await async_client.knowledge_bases.folders.delete( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - path="x", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - recursive=True, - ) - assert_matches_type(FolderDeleteResponse, folder, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_delete(self, async_client: AsyncProfound) -> None: - response = await async_client.knowledge_bases.folders.with_raw_response.delete( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - path="x", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - folder = await response.parse() - assert_matches_type(FolderDeleteResponse, folder, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_delete(self, async_client: AsyncProfound) -> None: - async with async_client.knowledge_bases.folders.with_streaming_response.delete( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - path="x", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - folder = await response.parse() - assert_matches_type(FolderDeleteResponse, folder, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_delete(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `knowledge_base_id` but received ''"): - await async_client.knowledge_bases.folders.with_raw_response.delete( - knowledge_base_id="", - path="x", - ) diff --git a/tests/api_resources/organizations/__init__.py b/tests/api_resources/organizations/__init__.py deleted file mode 100644 index fd8019a9..00000000 --- a/tests/api_resources/organizations/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. diff --git a/tests/api_resources/organizations/test_categories.py b/tests/api_resources/organizations/test_categories.py deleted file mode 100644 index 9fdb6c69..00000000 --- a/tests/api_resources/organizations/test_categories.py +++ /dev/null @@ -1,1306 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import os -from typing import Any, cast - -import pytest - -from profound import Profound, AsyncProfound -from tests.utils import assert_matches_type -from profound.types.organizations import ( - CategoryListResponse, - CategoryTagsResponse, - CategoryAssetsResponse, - CategoryTopicsResponse, - CategoryPromptsResponse, - CategoryCreatePromptsResponse, - CategoryUpdatePromptsResponse, - CategoryRetrieveRegionsResponse, - CategoryUpdatePromptStatusResponse, - CategoryGetCategoryPersonasResponse, - CategoryGetCitationCategoriesResponse, -) - -base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") - - -class TestCategories: - parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_list(self, client: Profound) -> None: - category = client.organizations.categories.list() - assert_matches_type(CategoryListResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_list_with_all_params(self, client: Profound) -> None: - category = client.organizations.categories.list( - organization_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(CategoryListResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_list(self, client: Profound) -> None: - response = client.organizations.categories.with_raw_response.list() - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - category = response.parse() - assert_matches_type(CategoryListResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_list(self, client: Profound) -> None: - with client.organizations.categories.with_streaming_response.list() as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - category = response.parse() - assert_matches_type(CategoryListResponse, category, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_assets(self, client: Profound) -> None: - category = client.organizations.categories.assets( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(CategoryAssetsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_assets(self, client: Profound) -> None: - response = client.organizations.categories.with_raw_response.assets( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - category = response.parse() - assert_matches_type(CategoryAssetsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_assets(self, client: Profound) -> None: - with client.organizations.categories.with_streaming_response.assets( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - category = response.parse() - assert_matches_type(CategoryAssetsResponse, category, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_assets(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `category_id` but received ''"): - client.organizations.categories.with_raw_response.assets( - "", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_prompts(self, client: Profound) -> None: - category = client.organizations.categories.create_prompts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - prompts=[ - { - "language": "language", - "platforms": [{}], - "prompt": "x", - "regions": [{}], - "topic": {}, - } - ], - ) - assert_matches_type(CategoryCreatePromptsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_prompts_with_all_params(self, client: Profound) -> None: - category = client.organizations.categories.create_prompts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - prompts=[ - { - "language": "language", - "platforms": [ - { - "id": "id", - "name": "name", - } - ], - "prompt": "x", - "regions": [ - { - "id": "id", - "name": "name", - } - ], - "topic": { - "id": "id", - "name": "name", - }, - "id": "id", - "analysis_types": ["visibility"], - "asset": { - "id": "id", - "name": "name", - }, - "personas": [ - { - "id": "id", - "name": "name", - } - ], - "prompt_type": "prompt_type", - "tags": [ - { - "id": "id", - "name": "name", - } - ], - } - ], - dry_run=True, - ) - assert_matches_type(CategoryCreatePromptsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_create_prompts(self, client: Profound) -> None: - response = client.organizations.categories.with_raw_response.create_prompts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - prompts=[ - { - "language": "language", - "platforms": [{}], - "prompt": "x", - "regions": [{}], - "topic": {}, - } - ], - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - category = response.parse() - assert_matches_type(CategoryCreatePromptsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_create_prompts(self, client: Profound) -> None: - with client.organizations.categories.with_streaming_response.create_prompts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - prompts=[ - { - "language": "language", - "platforms": [{}], - "prompt": "x", - "regions": [{}], - "topic": {}, - } - ], - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - category = response.parse() - assert_matches_type(CategoryCreatePromptsResponse, category, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_create_prompts(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `category_id` but received ''"): - client.organizations.categories.with_raw_response.create_prompts( - category_id="", - prompts=[ - { - "language": "language", - "platforms": [{}], - "prompt": "x", - "regions": [{}], - "topic": {}, - } - ], - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_get_category_personas(self, client: Profound) -> None: - category = client.organizations.categories.get_category_personas( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(CategoryGetCategoryPersonasResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_get_category_personas(self, client: Profound) -> None: - response = client.organizations.categories.with_raw_response.get_category_personas( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - category = response.parse() - assert_matches_type(CategoryGetCategoryPersonasResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_get_category_personas(self, client: Profound) -> None: - with client.organizations.categories.with_streaming_response.get_category_personas( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - category = response.parse() - assert_matches_type(CategoryGetCategoryPersonasResponse, category, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_get_category_personas(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `category_id` but received ''"): - client.organizations.categories.with_raw_response.get_category_personas( - "", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_get_citation_categories(self, client: Profound) -> None: - category = client.organizations.categories.get_citation_categories( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(CategoryGetCitationCategoriesResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_get_citation_categories(self, client: Profound) -> None: - response = client.organizations.categories.with_raw_response.get_citation_categories( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - category = response.parse() - assert_matches_type(CategoryGetCitationCategoriesResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_get_citation_categories(self, client: Profound) -> None: - with client.organizations.categories.with_streaming_response.get_citation_categories( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - category = response.parse() - assert_matches_type(CategoryGetCitationCategoriesResponse, category, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_get_citation_categories(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `category_id` but received ''"): - client.organizations.categories.with_raw_response.get_citation_categories( - "", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_prompts(self, client: Profound) -> None: - category = client.organizations.categories.prompts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(CategoryPromptsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_prompts_with_all_params(self, client: Profound) -> None: - category = client.organizations.categories.prompts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - analysis_type=["visibility"], - cursor="cursor", - limit=1, - order_by="created_at", - order_dir="asc", - persona_id=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - platform_id=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - prompt_type=["visibility"], - region_id=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - status=["active"], - tag_id=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - topic_id=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(CategoryPromptsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_prompts(self, client: Profound) -> None: - response = client.organizations.categories.with_raw_response.prompts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - category = response.parse() - assert_matches_type(CategoryPromptsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_prompts(self, client: Profound) -> None: - with client.organizations.categories.with_streaming_response.prompts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - category = response.parse() - assert_matches_type(CategoryPromptsResponse, category, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_prompts(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `category_id` but received ''"): - client.organizations.categories.with_raw_response.prompts( - category_id="", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_retrieve_regions(self, client: Profound) -> None: - category = client.organizations.categories.retrieve_regions( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(CategoryRetrieveRegionsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_retrieve_regions(self, client: Profound) -> None: - response = client.organizations.categories.with_raw_response.retrieve_regions( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - category = response.parse() - assert_matches_type(CategoryRetrieveRegionsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_retrieve_regions(self, client: Profound) -> None: - with client.organizations.categories.with_streaming_response.retrieve_regions( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - category = response.parse() - assert_matches_type(CategoryRetrieveRegionsResponse, category, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_retrieve_regions(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `category_id` but received ''"): - client.organizations.categories.with_raw_response.retrieve_regions( - "", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_tags(self, client: Profound) -> None: - category = client.organizations.categories.tags( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(CategoryTagsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_tags(self, client: Profound) -> None: - response = client.organizations.categories.with_raw_response.tags( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - category = response.parse() - assert_matches_type(CategoryTagsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_tags(self, client: Profound) -> None: - with client.organizations.categories.with_streaming_response.tags( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - category = response.parse() - assert_matches_type(CategoryTagsResponse, category, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_tags(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `category_id` but received ''"): - client.organizations.categories.with_raw_response.tags( - "", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_topics(self, client: Profound) -> None: - category = client.organizations.categories.topics( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(CategoryTopicsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_topics(self, client: Profound) -> None: - response = client.organizations.categories.with_raw_response.topics( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - category = response.parse() - assert_matches_type(CategoryTopicsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_topics(self, client: Profound) -> None: - with client.organizations.categories.with_streaming_response.topics( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - category = response.parse() - assert_matches_type(CategoryTopicsResponse, category, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_topics(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `category_id` but received ''"): - client.organizations.categories.with_raw_response.topics( - "", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_update_prompt_status(self, client: Profound) -> None: - category = client.organizations.categories.update_prompt_status( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - status="active", - ) - assert_matches_type(CategoryUpdatePromptStatusResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_update_prompt_status_with_all_params(self, client: Profound) -> None: - category = client.organizations.categories.update_prompt_status( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - status="active", - dry_run=True, - ) - assert_matches_type(CategoryUpdatePromptStatusResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_update_prompt_status(self, client: Profound) -> None: - response = client.organizations.categories.with_raw_response.update_prompt_status( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - status="active", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - category = response.parse() - assert_matches_type(CategoryUpdatePromptStatusResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_update_prompt_status(self, client: Profound) -> None: - with client.organizations.categories.with_streaming_response.update_prompt_status( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - status="active", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - category = response.parse() - assert_matches_type(CategoryUpdatePromptStatusResponse, category, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_update_prompt_status(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `category_id` but received ''"): - client.organizations.categories.with_raw_response.update_prompt_status( - category_id="", - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - status="active", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_update_prompts(self, client: Profound) -> None: - category = client.organizations.categories.update_prompts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - prompts=[{"id": "id"}], - ) - assert_matches_type(CategoryUpdatePromptsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_update_prompts_with_all_params(self, client: Profound) -> None: - category = client.organizations.categories.update_prompts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - prompts=[ - { - "id": "id", - "analysis_types": ["visibility"], - "asset": { - "id": "id", - "name": "name", - }, - "language": "language", - "personas": [ - { - "id": "id", - "name": "name", - } - ], - "platforms": [ - { - "id": "id", - "name": "name", - } - ], - "prompt": "prompt", - "prompt_type": "prompt_type", - "regions": [ - { - "id": "id", - "name": "name", - } - ], - "tags": [ - { - "id": "id", - "name": "name", - } - ], - "topic": { - "id": "id", - "name": "name", - }, - } - ], - dry_run=True, - ) - assert_matches_type(CategoryUpdatePromptsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_update_prompts(self, client: Profound) -> None: - response = client.organizations.categories.with_raw_response.update_prompts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - prompts=[{"id": "id"}], - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - category = response.parse() - assert_matches_type(CategoryUpdatePromptsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_update_prompts(self, client: Profound) -> None: - with client.organizations.categories.with_streaming_response.update_prompts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - prompts=[{"id": "id"}], - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - category = response.parse() - assert_matches_type(CategoryUpdatePromptsResponse, category, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_update_prompts(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `category_id` but received ''"): - client.organizations.categories.with_raw_response.update_prompts( - category_id="", - prompts=[{"id": "id"}], - ) - - -class TestAsyncCategories: - parametrize = pytest.mark.parametrize( - "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_list(self, async_client: AsyncProfound) -> None: - category = await async_client.organizations.categories.list() - assert_matches_type(CategoryListResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_list_with_all_params(self, async_client: AsyncProfound) -> None: - category = await async_client.organizations.categories.list( - organization_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(CategoryListResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_list(self, async_client: AsyncProfound) -> None: - response = await async_client.organizations.categories.with_raw_response.list() - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - category = await response.parse() - assert_matches_type(CategoryListResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_list(self, async_client: AsyncProfound) -> None: - async with async_client.organizations.categories.with_streaming_response.list() as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - category = await response.parse() - assert_matches_type(CategoryListResponse, category, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_assets(self, async_client: AsyncProfound) -> None: - category = await async_client.organizations.categories.assets( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(CategoryAssetsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_assets(self, async_client: AsyncProfound) -> None: - response = await async_client.organizations.categories.with_raw_response.assets( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - category = await response.parse() - assert_matches_type(CategoryAssetsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_assets(self, async_client: AsyncProfound) -> None: - async with async_client.organizations.categories.with_streaming_response.assets( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - category = await response.parse() - assert_matches_type(CategoryAssetsResponse, category, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_assets(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `category_id` but received ''"): - await async_client.organizations.categories.with_raw_response.assets( - "", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_prompts(self, async_client: AsyncProfound) -> None: - category = await async_client.organizations.categories.create_prompts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - prompts=[ - { - "language": "language", - "platforms": [{}], - "prompt": "x", - "regions": [{}], - "topic": {}, - } - ], - ) - assert_matches_type(CategoryCreatePromptsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_prompts_with_all_params(self, async_client: AsyncProfound) -> None: - category = await async_client.organizations.categories.create_prompts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - prompts=[ - { - "language": "language", - "platforms": [ - { - "id": "id", - "name": "name", - } - ], - "prompt": "x", - "regions": [ - { - "id": "id", - "name": "name", - } - ], - "topic": { - "id": "id", - "name": "name", - }, - "id": "id", - "analysis_types": ["visibility"], - "asset": { - "id": "id", - "name": "name", - }, - "personas": [ - { - "id": "id", - "name": "name", - } - ], - "prompt_type": "prompt_type", - "tags": [ - { - "id": "id", - "name": "name", - } - ], - } - ], - dry_run=True, - ) - assert_matches_type(CategoryCreatePromptsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_create_prompts(self, async_client: AsyncProfound) -> None: - response = await async_client.organizations.categories.with_raw_response.create_prompts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - prompts=[ - { - "language": "language", - "platforms": [{}], - "prompt": "x", - "regions": [{}], - "topic": {}, - } - ], - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - category = await response.parse() - assert_matches_type(CategoryCreatePromptsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_create_prompts(self, async_client: AsyncProfound) -> None: - async with async_client.organizations.categories.with_streaming_response.create_prompts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - prompts=[ - { - "language": "language", - "platforms": [{}], - "prompt": "x", - "regions": [{}], - "topic": {}, - } - ], - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - category = await response.parse() - assert_matches_type(CategoryCreatePromptsResponse, category, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_create_prompts(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `category_id` but received ''"): - await async_client.organizations.categories.with_raw_response.create_prompts( - category_id="", - prompts=[ - { - "language": "language", - "platforms": [{}], - "prompt": "x", - "regions": [{}], - "topic": {}, - } - ], - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_get_category_personas(self, async_client: AsyncProfound) -> None: - category = await async_client.organizations.categories.get_category_personas( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(CategoryGetCategoryPersonasResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_get_category_personas(self, async_client: AsyncProfound) -> None: - response = await async_client.organizations.categories.with_raw_response.get_category_personas( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - category = await response.parse() - assert_matches_type(CategoryGetCategoryPersonasResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_get_category_personas(self, async_client: AsyncProfound) -> None: - async with async_client.organizations.categories.with_streaming_response.get_category_personas( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - category = await response.parse() - assert_matches_type(CategoryGetCategoryPersonasResponse, category, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_get_category_personas(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `category_id` but received ''"): - await async_client.organizations.categories.with_raw_response.get_category_personas( - "", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_get_citation_categories(self, async_client: AsyncProfound) -> None: - category = await async_client.organizations.categories.get_citation_categories( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(CategoryGetCitationCategoriesResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_get_citation_categories(self, async_client: AsyncProfound) -> None: - response = await async_client.organizations.categories.with_raw_response.get_citation_categories( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - category = await response.parse() - assert_matches_type(CategoryGetCitationCategoriesResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_get_citation_categories(self, async_client: AsyncProfound) -> None: - async with async_client.organizations.categories.with_streaming_response.get_citation_categories( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - category = await response.parse() - assert_matches_type(CategoryGetCitationCategoriesResponse, category, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_get_citation_categories(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `category_id` but received ''"): - await async_client.organizations.categories.with_raw_response.get_citation_categories( - "", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_prompts(self, async_client: AsyncProfound) -> None: - category = await async_client.organizations.categories.prompts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(CategoryPromptsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_prompts_with_all_params(self, async_client: AsyncProfound) -> None: - category = await async_client.organizations.categories.prompts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - analysis_type=["visibility"], - cursor="cursor", - limit=1, - order_by="created_at", - order_dir="asc", - persona_id=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - platform_id=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - prompt_type=["visibility"], - region_id=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - status=["active"], - tag_id=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - topic_id=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(CategoryPromptsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_prompts(self, async_client: AsyncProfound) -> None: - response = await async_client.organizations.categories.with_raw_response.prompts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - category = await response.parse() - assert_matches_type(CategoryPromptsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_prompts(self, async_client: AsyncProfound) -> None: - async with async_client.organizations.categories.with_streaming_response.prompts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - category = await response.parse() - assert_matches_type(CategoryPromptsResponse, category, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_prompts(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `category_id` but received ''"): - await async_client.organizations.categories.with_raw_response.prompts( - category_id="", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_retrieve_regions(self, async_client: AsyncProfound) -> None: - category = await async_client.organizations.categories.retrieve_regions( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(CategoryRetrieveRegionsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_retrieve_regions(self, async_client: AsyncProfound) -> None: - response = await async_client.organizations.categories.with_raw_response.retrieve_regions( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - category = await response.parse() - assert_matches_type(CategoryRetrieveRegionsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_retrieve_regions(self, async_client: AsyncProfound) -> None: - async with async_client.organizations.categories.with_streaming_response.retrieve_regions( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - category = await response.parse() - assert_matches_type(CategoryRetrieveRegionsResponse, category, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_retrieve_regions(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `category_id` but received ''"): - await async_client.organizations.categories.with_raw_response.retrieve_regions( - "", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_tags(self, async_client: AsyncProfound) -> None: - category = await async_client.organizations.categories.tags( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(CategoryTagsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_tags(self, async_client: AsyncProfound) -> None: - response = await async_client.organizations.categories.with_raw_response.tags( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - category = await response.parse() - assert_matches_type(CategoryTagsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_tags(self, async_client: AsyncProfound) -> None: - async with async_client.organizations.categories.with_streaming_response.tags( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - category = await response.parse() - assert_matches_type(CategoryTagsResponse, category, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_tags(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `category_id` but received ''"): - await async_client.organizations.categories.with_raw_response.tags( - "", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_topics(self, async_client: AsyncProfound) -> None: - category = await async_client.organizations.categories.topics( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(CategoryTopicsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_topics(self, async_client: AsyncProfound) -> None: - response = await async_client.organizations.categories.with_raw_response.topics( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - category = await response.parse() - assert_matches_type(CategoryTopicsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_topics(self, async_client: AsyncProfound) -> None: - async with async_client.organizations.categories.with_streaming_response.topics( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - category = await response.parse() - assert_matches_type(CategoryTopicsResponse, category, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_topics(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `category_id` but received ''"): - await async_client.organizations.categories.with_raw_response.topics( - "", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_update_prompt_status(self, async_client: AsyncProfound) -> None: - category = await async_client.organizations.categories.update_prompt_status( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - status="active", - ) - assert_matches_type(CategoryUpdatePromptStatusResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_update_prompt_status_with_all_params(self, async_client: AsyncProfound) -> None: - category = await async_client.organizations.categories.update_prompt_status( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - status="active", - dry_run=True, - ) - assert_matches_type(CategoryUpdatePromptStatusResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_update_prompt_status(self, async_client: AsyncProfound) -> None: - response = await async_client.organizations.categories.with_raw_response.update_prompt_status( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - status="active", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - category = await response.parse() - assert_matches_type(CategoryUpdatePromptStatusResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_update_prompt_status(self, async_client: AsyncProfound) -> None: - async with async_client.organizations.categories.with_streaming_response.update_prompt_status( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - status="active", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - category = await response.parse() - assert_matches_type(CategoryUpdatePromptStatusResponse, category, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_update_prompt_status(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `category_id` but received ''"): - await async_client.organizations.categories.with_raw_response.update_prompt_status( - category_id="", - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - status="active", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_update_prompts(self, async_client: AsyncProfound) -> None: - category = await async_client.organizations.categories.update_prompts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - prompts=[{"id": "id"}], - ) - assert_matches_type(CategoryUpdatePromptsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_update_prompts_with_all_params(self, async_client: AsyncProfound) -> None: - category = await async_client.organizations.categories.update_prompts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - prompts=[ - { - "id": "id", - "analysis_types": ["visibility"], - "asset": { - "id": "id", - "name": "name", - }, - "language": "language", - "personas": [ - { - "id": "id", - "name": "name", - } - ], - "platforms": [ - { - "id": "id", - "name": "name", - } - ], - "prompt": "prompt", - "prompt_type": "prompt_type", - "regions": [ - { - "id": "id", - "name": "name", - } - ], - "tags": [ - { - "id": "id", - "name": "name", - } - ], - "topic": { - "id": "id", - "name": "name", - }, - } - ], - dry_run=True, - ) - assert_matches_type(CategoryUpdatePromptsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_update_prompts(self, async_client: AsyncProfound) -> None: - response = await async_client.organizations.categories.with_raw_response.update_prompts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - prompts=[{"id": "id"}], - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - category = await response.parse() - assert_matches_type(CategoryUpdatePromptsResponse, category, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_update_prompts(self, async_client: AsyncProfound) -> None: - async with async_client.organizations.categories.with_streaming_response.update_prompts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - prompts=[{"id": "id"}], - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - category = await response.parse() - assert_matches_type(CategoryUpdatePromptsResponse, category, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_update_prompts(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `category_id` but received ''"): - await async_client.organizations.categories.with_raw_response.update_prompts( - category_id="", - prompts=[{"id": "id"}], - ) diff --git a/tests/api_resources/projects/__init__.py b/tests/api_resources/projects/__init__.py deleted file mode 100644 index fd8019a9..00000000 --- a/tests/api_resources/projects/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. diff --git a/tests/api_resources/projects/test_generations.py b/tests/api_resources/projects/test_generations.py deleted file mode 100644 index d446b154..00000000 --- a/tests/api_resources/projects/test_generations.py +++ /dev/null @@ -1,209 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import os -from typing import Any, cast - -import pytest - -from profound import Profound, AsyncProfound -from tests.utils import assert_matches_type -from profound.types.projects import ( - GenerationListResponse, - GenerationRetrieveResponse, -) - -base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") - - -class TestGenerations: - parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_retrieve(self, client: Profound) -> None: - generation = client.projects.generations.retrieve( - run_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(GenerationRetrieveResponse, generation, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_retrieve(self, client: Profound) -> None: - response = client.projects.generations.with_raw_response.retrieve( - run_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - generation = response.parse() - assert_matches_type(GenerationRetrieveResponse, generation, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_retrieve(self, client: Profound) -> None: - with client.projects.generations.with_streaming_response.retrieve( - run_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - generation = response.parse() - assert_matches_type(GenerationRetrieveResponse, generation, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_retrieve(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `run_id` but received ''"): - client.projects.generations.with_raw_response.retrieve( - run_id="", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_list(self, client: Profound) -> None: - generation = client.projects.generations.list( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(GenerationListResponse, generation, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_list_with_all_params(self, client: Profound) -> None: - generation = client.projects.generations.list( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - limit=1, - offset=0, - status="status", - ) - assert_matches_type(GenerationListResponse, generation, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_list(self, client: Profound) -> None: - response = client.projects.generations.with_raw_response.list( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - generation = response.parse() - assert_matches_type(GenerationListResponse, generation, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_list(self, client: Profound) -> None: - with client.projects.generations.with_streaming_response.list( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - generation = response.parse() - assert_matches_type(GenerationListResponse, generation, path=["response"]) - - assert cast(Any, response.is_closed) is True - - -class TestAsyncGenerations: - parametrize = pytest.mark.parametrize( - "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_retrieve(self, async_client: AsyncProfound) -> None: - generation = await async_client.projects.generations.retrieve( - run_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(GenerationRetrieveResponse, generation, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_retrieve(self, async_client: AsyncProfound) -> None: - response = await async_client.projects.generations.with_raw_response.retrieve( - run_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - generation = await response.parse() - assert_matches_type(GenerationRetrieveResponse, generation, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_retrieve(self, async_client: AsyncProfound) -> None: - async with async_client.projects.generations.with_streaming_response.retrieve( - run_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - generation = await response.parse() - assert_matches_type(GenerationRetrieveResponse, generation, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_retrieve(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `run_id` but received ''"): - await async_client.projects.generations.with_raw_response.retrieve( - run_id="", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_list(self, async_client: AsyncProfound) -> None: - generation = await async_client.projects.generations.list( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(GenerationListResponse, generation, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_list_with_all_params(self, async_client: AsyncProfound) -> None: - generation = await async_client.projects.generations.list( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - limit=1, - offset=0, - status="status", - ) - assert_matches_type(GenerationListResponse, generation, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_list(self, async_client: AsyncProfound) -> None: - response = await async_client.projects.generations.with_raw_response.list( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - generation = await response.parse() - assert_matches_type(GenerationListResponse, generation, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_list(self, async_client: AsyncProfound) -> None: - async with async_client.projects.generations.with_streaming_response.list( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - generation = await response.parse() - assert_matches_type(GenerationListResponse, generation, path=["response"]) - - assert cast(Any, response.is_closed) is True diff --git a/tests/api_resources/projects/test_tasks.py b/tests/api_resources/projects/test_tasks.py deleted file mode 100644 index 2d19ffa4..00000000 --- a/tests/api_resources/projects/test_tasks.py +++ /dev/null @@ -1,784 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import os -from typing import Any, cast - -import pytest - -from profound import Profound, AsyncProfound -from tests.utils import assert_matches_type -from profound.types.projects import ( - TaskListResponse, - TaskCreateResponse, - TaskUpdateResponse, - TaskRetrieveResponse, - TaskUpdateStatusResponse, -) - -base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") - - -class TestTasks: - parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create(self, client: Profound) -> None: - task = client.projects.tasks.create( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - title="x", - ) - assert_matches_type(TaskCreateResponse, task, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_with_all_params(self, client: Profound) -> None: - task = client.projects.tasks.create( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - title="x", - brief="x", - impact=1, - position=0, - reference_label="x", - reference_url="x", - summary="x", - topic="x", - type="x", - ) - assert_matches_type(TaskCreateResponse, task, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_create(self, client: Profound) -> None: - response = client.projects.tasks.with_raw_response.create( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - title="x", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - task = response.parse() - assert_matches_type(TaskCreateResponse, task, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_create(self, client: Profound) -> None: - with client.projects.tasks.with_streaming_response.create( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - title="x", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - task = response.parse() - assert_matches_type(TaskCreateResponse, task, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_create(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `project_id` but received ''"): - client.projects.tasks.with_raw_response.create( - project_id="", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - title="x", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_retrieve(self, client: Profound) -> None: - task = client.projects.tasks.retrieve( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(TaskRetrieveResponse, task, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_retrieve(self, client: Profound) -> None: - response = client.projects.tasks.with_raw_response.retrieve( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - task = response.parse() - assert_matches_type(TaskRetrieveResponse, task, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_retrieve(self, client: Profound) -> None: - with client.projects.tasks.with_streaming_response.retrieve( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - task = response.parse() - assert_matches_type(TaskRetrieveResponse, task, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_retrieve(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `project_id` but received ''"): - client.projects.tasks.with_raw_response.retrieve( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - with pytest.raises(ValueError, match=r"Expected a non-empty value for `task_id` but received ''"): - client.projects.tasks.with_raw_response.retrieve( - task_id="", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_update(self, client: Profound) -> None: - task = client.projects.tasks.update( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(TaskUpdateResponse, task, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_update_with_all_params(self, client: Profound) -> None: - task = client.projects.tasks.update( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - brief="x", - impact=1, - reference_label="x", - reference_url="x", - summary="x", - title="x", - topic="x", - type="x", - ) - assert_matches_type(TaskUpdateResponse, task, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_update(self, client: Profound) -> None: - response = client.projects.tasks.with_raw_response.update( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - task = response.parse() - assert_matches_type(TaskUpdateResponse, task, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_update(self, client: Profound) -> None: - with client.projects.tasks.with_streaming_response.update( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - task = response.parse() - assert_matches_type(TaskUpdateResponse, task, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_update(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `project_id` but received ''"): - client.projects.tasks.with_raw_response.update( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - with pytest.raises(ValueError, match=r"Expected a non-empty value for `task_id` but received ''"): - client.projects.tasks.with_raw_response.update( - task_id="", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_list(self, client: Profound) -> None: - task = client.projects.tasks.list( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(TaskListResponse, task, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_list(self, client: Profound) -> None: - response = client.projects.tasks.with_raw_response.list( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - task = response.parse() - assert_matches_type(TaskListResponse, task, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_list(self, client: Profound) -> None: - with client.projects.tasks.with_streaming_response.list( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - task = response.parse() - assert_matches_type(TaskListResponse, task, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_list(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `project_id` but received ''"): - client.projects.tasks.with_raw_response.list( - project_id="", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_delete(self, client: Profound) -> None: - task = client.projects.tasks.delete( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert task is None - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_delete(self, client: Profound) -> None: - response = client.projects.tasks.with_raw_response.delete( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - task = response.parse() - assert task is None - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_delete(self, client: Profound) -> None: - with client.projects.tasks.with_streaming_response.delete( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - task = response.parse() - assert task is None - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_delete(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `project_id` but received ''"): - client.projects.tasks.with_raw_response.delete( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - with pytest.raises(ValueError, match=r"Expected a non-empty value for `task_id` but received ''"): - client.projects.tasks.with_raw_response.delete( - task_id="", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_update_status(self, client: Profound) -> None: - task = client.projects.tasks.update_status( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - status="not_started", - ) - assert_matches_type(TaskUpdateStatusResponse, task, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_update_status_with_all_params(self, client: Profound) -> None: - task = client.projects.tasks.update_status( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - status="not_started", - note="x", - ) - assert_matches_type(TaskUpdateStatusResponse, task, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_update_status(self, client: Profound) -> None: - response = client.projects.tasks.with_raw_response.update_status( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - status="not_started", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - task = response.parse() - assert_matches_type(TaskUpdateStatusResponse, task, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_update_status(self, client: Profound) -> None: - with client.projects.tasks.with_streaming_response.update_status( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - status="not_started", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - task = response.parse() - assert_matches_type(TaskUpdateStatusResponse, task, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_update_status(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `project_id` but received ''"): - client.projects.tasks.with_raw_response.update_status( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - status="not_started", - ) - - with pytest.raises(ValueError, match=r"Expected a non-empty value for `task_id` but received ''"): - client.projects.tasks.with_raw_response.update_status( - task_id="", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - status="not_started", - ) - - -class TestAsyncTasks: - parametrize = pytest.mark.parametrize( - "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create(self, async_client: AsyncProfound) -> None: - task = await async_client.projects.tasks.create( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - title="x", - ) - assert_matches_type(TaskCreateResponse, task, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_with_all_params(self, async_client: AsyncProfound) -> None: - task = await async_client.projects.tasks.create( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - title="x", - brief="x", - impact=1, - position=0, - reference_label="x", - reference_url="x", - summary="x", - topic="x", - type="x", - ) - assert_matches_type(TaskCreateResponse, task, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_create(self, async_client: AsyncProfound) -> None: - response = await async_client.projects.tasks.with_raw_response.create( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - title="x", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - task = await response.parse() - assert_matches_type(TaskCreateResponse, task, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_create(self, async_client: AsyncProfound) -> None: - async with async_client.projects.tasks.with_streaming_response.create( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - title="x", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - task = await response.parse() - assert_matches_type(TaskCreateResponse, task, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_create(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `project_id` but received ''"): - await async_client.projects.tasks.with_raw_response.create( - project_id="", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - title="x", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_retrieve(self, async_client: AsyncProfound) -> None: - task = await async_client.projects.tasks.retrieve( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(TaskRetrieveResponse, task, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_retrieve(self, async_client: AsyncProfound) -> None: - response = await async_client.projects.tasks.with_raw_response.retrieve( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - task = await response.parse() - assert_matches_type(TaskRetrieveResponse, task, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_retrieve(self, async_client: AsyncProfound) -> None: - async with async_client.projects.tasks.with_streaming_response.retrieve( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - task = await response.parse() - assert_matches_type(TaskRetrieveResponse, task, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_retrieve(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `project_id` but received ''"): - await async_client.projects.tasks.with_raw_response.retrieve( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - with pytest.raises(ValueError, match=r"Expected a non-empty value for `task_id` but received ''"): - await async_client.projects.tasks.with_raw_response.retrieve( - task_id="", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_update(self, async_client: AsyncProfound) -> None: - task = await async_client.projects.tasks.update( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(TaskUpdateResponse, task, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_update_with_all_params(self, async_client: AsyncProfound) -> None: - task = await async_client.projects.tasks.update( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - brief="x", - impact=1, - reference_label="x", - reference_url="x", - summary="x", - title="x", - topic="x", - type="x", - ) - assert_matches_type(TaskUpdateResponse, task, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_update(self, async_client: AsyncProfound) -> None: - response = await async_client.projects.tasks.with_raw_response.update( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - task = await response.parse() - assert_matches_type(TaskUpdateResponse, task, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_update(self, async_client: AsyncProfound) -> None: - async with async_client.projects.tasks.with_streaming_response.update( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - task = await response.parse() - assert_matches_type(TaskUpdateResponse, task, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_update(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `project_id` but received ''"): - await async_client.projects.tasks.with_raw_response.update( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - with pytest.raises(ValueError, match=r"Expected a non-empty value for `task_id` but received ''"): - await async_client.projects.tasks.with_raw_response.update( - task_id="", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_list(self, async_client: AsyncProfound) -> None: - task = await async_client.projects.tasks.list( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(TaskListResponse, task, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_list(self, async_client: AsyncProfound) -> None: - response = await async_client.projects.tasks.with_raw_response.list( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - task = await response.parse() - assert_matches_type(TaskListResponse, task, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_list(self, async_client: AsyncProfound) -> None: - async with async_client.projects.tasks.with_streaming_response.list( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - task = await response.parse() - assert_matches_type(TaskListResponse, task, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_list(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `project_id` but received ''"): - await async_client.projects.tasks.with_raw_response.list( - project_id="", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_delete(self, async_client: AsyncProfound) -> None: - task = await async_client.projects.tasks.delete( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert task is None - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_delete(self, async_client: AsyncProfound) -> None: - response = await async_client.projects.tasks.with_raw_response.delete( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - task = await response.parse() - assert task is None - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_delete(self, async_client: AsyncProfound) -> None: - async with async_client.projects.tasks.with_streaming_response.delete( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - task = await response.parse() - assert task is None - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_delete(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `project_id` but received ''"): - await async_client.projects.tasks.with_raw_response.delete( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - with pytest.raises(ValueError, match=r"Expected a non-empty value for `task_id` but received ''"): - await async_client.projects.tasks.with_raw_response.delete( - task_id="", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_update_status(self, async_client: AsyncProfound) -> None: - task = await async_client.projects.tasks.update_status( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - status="not_started", - ) - assert_matches_type(TaskUpdateStatusResponse, task, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_update_status_with_all_params(self, async_client: AsyncProfound) -> None: - task = await async_client.projects.tasks.update_status( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - status="not_started", - note="x", - ) - assert_matches_type(TaskUpdateStatusResponse, task, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_update_status(self, async_client: AsyncProfound) -> None: - response = await async_client.projects.tasks.with_raw_response.update_status( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - status="not_started", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - task = await response.parse() - assert_matches_type(TaskUpdateStatusResponse, task, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_update_status(self, async_client: AsyncProfound) -> None: - async with async_client.projects.tasks.with_streaming_response.update_status( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - status="not_started", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - task = await response.parse() - assert_matches_type(TaskUpdateStatusResponse, task, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_update_status(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `project_id` but received ''"): - await async_client.projects.tasks.with_raw_response.update_status( - task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - project_id="", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - status="not_started", - ) - - with pytest.raises(ValueError, match=r"Expected a non-empty value for `task_id` but received ''"): - await async_client.projects.tasks.with_raw_response.update_status( - task_id="", - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - status="not_started", - ) diff --git a/tests/api_resources/reports/__init__.py b/tests/api_resources/reports/__init__.py deleted file mode 100644 index fd8019a9..00000000 --- a/tests/api_resources/reports/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. diff --git a/tests/api_resources/reports/factcheck/__init__.py b/tests/api_resources/reports/factcheck/__init__.py deleted file mode 100644 index fd8019a9..00000000 --- a/tests/api_resources/reports/factcheck/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. diff --git a/tests/api_resources/reports/factcheck/test_claims.py b/tests/api_resources/reports/factcheck/test_claims.py deleted file mode 100644 index 47250a39..00000000 --- a/tests/api_resources/reports/factcheck/test_claims.py +++ /dev/null @@ -1,272 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import os -from typing import Any, cast - -import pytest - -from profound import Profound, AsyncProfound -from tests.utils import assert_matches_type -from profound.types.reports.factcheck import ( - ClaimQueryClaimsResponse, -) - -base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") - - -class TestClaims: - parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_query_claims(self, client: Profound) -> None: - claim = client.reports.factcheck.claims.query_claims( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(ClaimQueryClaimsResponse, claim, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_query_claims_with_all_params(self, client: Profound) -> None: - claim = client.reports.factcheck.claims.query_claims( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["model"], - include=["theme"], - limit=1, - max_results=1, - ) - assert_matches_type(ClaimQueryClaimsResponse, claim, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_query_claims(self, client: Profound) -> None: - response = client.reports.factcheck.claims.with_raw_response.query_claims( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - claim = response.parse() - assert_matches_type(ClaimQueryClaimsResponse, claim, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_query_claims(self, client: Profound) -> None: - with client.reports.factcheck.claims.with_streaming_response.query_claims( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - claim = response.parse() - assert_matches_type(ClaimQueryClaimsResponse, claim, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_claims(self, client: Profound) -> None: - claim_stream = client.reports.factcheck.claims.stream_claims( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - claim_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_claims_with_all_params(self, client: Profound) -> None: - claim_stream = client.reports.factcheck.claims.stream_claims( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["model"], - include=["theme"], - limit=1, - max_results=1, - ) - claim_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_stream_claims(self, client: Profound) -> None: - response = client.reports.factcheck.claims.with_raw_response.stream_claims( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = response.parse() - stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_stream_claims(self, client: Profound) -> None: - with client.reports.factcheck.claims.with_streaming_response.stream_claims( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = response.parse() - stream.close() - - assert cast(Any, response.is_closed) is True - - -class TestAsyncClaims: - parametrize = pytest.mark.parametrize( - "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_query_claims(self, async_client: AsyncProfound) -> None: - claim = await async_client.reports.factcheck.claims.query_claims( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(ClaimQueryClaimsResponse, claim, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_query_claims_with_all_params(self, async_client: AsyncProfound) -> None: - claim = await async_client.reports.factcheck.claims.query_claims( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["model"], - include=["theme"], - limit=1, - max_results=1, - ) - assert_matches_type(ClaimQueryClaimsResponse, claim, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_query_claims(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.factcheck.claims.with_raw_response.query_claims( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - claim = await response.parse() - assert_matches_type(ClaimQueryClaimsResponse, claim, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_query_claims(self, async_client: AsyncProfound) -> None: - async with async_client.reports.factcheck.claims.with_streaming_response.query_claims( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - claim = await response.parse() - assert_matches_type(ClaimQueryClaimsResponse, claim, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_claims(self, async_client: AsyncProfound) -> None: - claim_stream = await async_client.reports.factcheck.claims.stream_claims( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - await claim_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_claims_with_all_params(self, async_client: AsyncProfound) -> None: - claim_stream = await async_client.reports.factcheck.claims.stream_claims( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["model"], - include=["theme"], - limit=1, - max_results=1, - ) - await claim_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_stream_claims(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.factcheck.claims.with_raw_response.stream_claims( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = await response.parse() - await stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_stream_claims(self, async_client: AsyncProfound) -> None: - async with async_client.reports.factcheck.claims.with_streaming_response.stream_claims( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = await response.parse() - await stream.close() - - assert cast(Any, response.is_closed) is True diff --git a/tests/api_resources/reports/social/__init__.py b/tests/api_resources/reports/social/__init__.py deleted file mode 100644 index fd8019a9..00000000 --- a/tests/api_resources/reports/social/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. diff --git a/tests/api_resources/reports/social/test_youtube.py b/tests/api_resources/reports/social/test_youtube.py deleted file mode 100644 index 84e13c48..00000000 --- a/tests/api_resources/reports/social/test_youtube.py +++ /dev/null @@ -1,388 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import os -from typing import Any, cast - -import pytest - -from profound import Profound, AsyncProfound -from tests.utils import assert_matches_type -from profound.types.reports.social import ( - YoutubeGetVideosResponse, - YoutubeGetSummaryResponse, - YoutubeGetChannelsResponse, -) - -base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") - - -class TestYoutube: - parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_get_channels(self, client: Profound) -> None: - youtube = client.reports.social.youtube.get_channels( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(YoutubeGetChannelsResponse, youtube, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_get_channels_with_all_params(self, client: Profound) -> None: - youtube = client.reports.social.youtube.get_channels( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["channel"], - interval="day", - limit=1, - source_types=["video"], - ) - assert_matches_type(YoutubeGetChannelsResponse, youtube, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_get_channels(self, client: Profound) -> None: - response = client.reports.social.youtube.with_raw_response.get_channels( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - youtube = response.parse() - assert_matches_type(YoutubeGetChannelsResponse, youtube, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_get_channels(self, client: Profound) -> None: - with client.reports.social.youtube.with_streaming_response.get_channels( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - youtube = response.parse() - assert_matches_type(YoutubeGetChannelsResponse, youtube, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_get_summary(self, client: Profound) -> None: - youtube = client.reports.social.youtube.get_summary( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(YoutubeGetSummaryResponse, youtube, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_get_summary_with_all_params(self, client: Profound) -> None: - youtube = client.reports.social.youtube.get_summary( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - ) - assert_matches_type(YoutubeGetSummaryResponse, youtube, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_get_summary(self, client: Profound) -> None: - response = client.reports.social.youtube.with_raw_response.get_summary( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - youtube = response.parse() - assert_matches_type(YoutubeGetSummaryResponse, youtube, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_get_summary(self, client: Profound) -> None: - with client.reports.social.youtube.with_streaming_response.get_summary( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - youtube = response.parse() - assert_matches_type(YoutubeGetSummaryResponse, youtube, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_get_videos(self, client: Profound) -> None: - youtube = client.reports.social.youtube.get_videos( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(YoutubeGetVideosResponse, youtube, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_get_videos_with_all_params(self, client: Profound) -> None: - youtube = client.reports.social.youtube.get_videos( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - attribution="attributed", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - limit=1, - source_types=["video"], - ) - assert_matches_type(YoutubeGetVideosResponse, youtube, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_get_videos(self, client: Profound) -> None: - response = client.reports.social.youtube.with_raw_response.get_videos( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - youtube = response.parse() - assert_matches_type(YoutubeGetVideosResponse, youtube, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_get_videos(self, client: Profound) -> None: - with client.reports.social.youtube.with_streaming_response.get_videos( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - youtube = response.parse() - assert_matches_type(YoutubeGetVideosResponse, youtube, path=["response"]) - - assert cast(Any, response.is_closed) is True - - -class TestAsyncYoutube: - parametrize = pytest.mark.parametrize( - "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_get_channels(self, async_client: AsyncProfound) -> None: - youtube = await async_client.reports.social.youtube.get_channels( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(YoutubeGetChannelsResponse, youtube, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_get_channels_with_all_params(self, async_client: AsyncProfound) -> None: - youtube = await async_client.reports.social.youtube.get_channels( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["channel"], - interval="day", - limit=1, - source_types=["video"], - ) - assert_matches_type(YoutubeGetChannelsResponse, youtube, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_get_channels(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.social.youtube.with_raw_response.get_channels( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - youtube = await response.parse() - assert_matches_type(YoutubeGetChannelsResponse, youtube, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_get_channels(self, async_client: AsyncProfound) -> None: - async with async_client.reports.social.youtube.with_streaming_response.get_channels( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - youtube = await response.parse() - assert_matches_type(YoutubeGetChannelsResponse, youtube, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_get_summary(self, async_client: AsyncProfound) -> None: - youtube = await async_client.reports.social.youtube.get_summary( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(YoutubeGetSummaryResponse, youtube, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_get_summary_with_all_params(self, async_client: AsyncProfound) -> None: - youtube = await async_client.reports.social.youtube.get_summary( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - ) - assert_matches_type(YoutubeGetSummaryResponse, youtube, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_get_summary(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.social.youtube.with_raw_response.get_summary( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - youtube = await response.parse() - assert_matches_type(YoutubeGetSummaryResponse, youtube, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_get_summary(self, async_client: AsyncProfound) -> None: - async with async_client.reports.social.youtube.with_streaming_response.get_summary( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - youtube = await response.parse() - assert_matches_type(YoutubeGetSummaryResponse, youtube, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_get_videos(self, async_client: AsyncProfound) -> None: - youtube = await async_client.reports.social.youtube.get_videos( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(YoutubeGetVideosResponse, youtube, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_get_videos_with_all_params(self, async_client: AsyncProfound) -> None: - youtube = await async_client.reports.social.youtube.get_videos( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - attribution="attributed", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - limit=1, - source_types=["video"], - ) - assert_matches_type(YoutubeGetVideosResponse, youtube, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_get_videos(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.social.youtube.with_raw_response.get_videos( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - youtube = await response.parse() - assert_matches_type(YoutubeGetVideosResponse, youtube, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_get_videos(self, async_client: AsyncProfound) -> None: - async with async_client.reports.social.youtube.with_streaming_response.get_videos( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - youtube = await response.parse() - assert_matches_type(YoutubeGetVideosResponse, youtube, path=["response"]) - - assert cast(Any, response.is_closed) is True diff --git a/tests/api_resources/reports/test_accuracy.py b/tests/api_resources/reports/test_accuracy.py deleted file mode 100644 index 234dbe7c..00000000 --- a/tests/api_resources/reports/test_accuracy.py +++ /dev/null @@ -1,1572 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import os -from typing import Any, cast - -import pytest - -from profound import Profound, AsyncProfound -from tests.utils import assert_matches_type -from profound.types.reports import ( - AccuracyCreateOverviewResponse, - AccuracyCreateTopicIDsResponse, - AccuracyCreateBreakdownResponse, - AccuracyCreateClaimBreakdownResponse, - AccuracyCreateClaimCitationsResponse, - AccuracyCreateCitationAnalysisResponse, - AccuracyCreateInaccurateThemesResponse, - AccuracyCreateInaccuracyDriversResponse, - AccuracyCreateClusterExampleRunsResponse, - AccuracyCreateInaccurateClustersResponse, - AccuracyCreateTopInaccurateClaimsResponse, - AccuracyCreateFactcheckSetupStatusResponse, - AccuracyCreateClusterVerificationPairsResponse, -) - -base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") - - -class TestAccuracy: - parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_breakdown(self, client: Profound) -> None: - accuracy = client.reports.accuracy.create_breakdown( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(AccuracyCreateBreakdownResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_breakdown_with_all_params(self, client: Profound) -> None: - accuracy = client.reports.accuracy.create_breakdown( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - breakdown_by="citation", - citation_categories=["string"], - comparison_end_date="comparison_end_date", - comparison_start_date="comparison_start_date", - date_bucket="date_bucket", - exclude_topic_ids=True, - group_by=["platform"], - include_no_persona=True, - include_no_tag=True, - limit=1, - offset=0, - pagination={ - "dimension": "group", - "direction": "asc", - "metric": "accuracy", - "mode": "current", - }, - persona_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - platform_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - region_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - search_query="search_query", - sort_by="citationShare", - sort_order="asc", - tag_filter_type="all", - tag_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - topic_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(AccuracyCreateBreakdownResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_create_breakdown(self, client: Profound) -> None: - response = client.reports.accuracy.with_raw_response.create_breakdown( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - accuracy = response.parse() - assert_matches_type(AccuracyCreateBreakdownResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_create_breakdown(self, client: Profound) -> None: - with client.reports.accuracy.with_streaming_response.create_breakdown( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - accuracy = response.parse() - assert_matches_type(AccuracyCreateBreakdownResponse, accuracy, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_citation_analysis(self, client: Profound) -> None: - accuracy = client.reports.accuracy.create_citation_analysis( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - clean_href="clean_href", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(AccuracyCreateCitationAnalysisResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_create_citation_analysis(self, client: Profound) -> None: - response = client.reports.accuracy.with_raw_response.create_citation_analysis( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - clean_href="clean_href", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - accuracy = response.parse() - assert_matches_type(AccuracyCreateCitationAnalysisResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_create_citation_analysis(self, client: Profound) -> None: - with client.reports.accuracy.with_streaming_response.create_citation_analysis( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - clean_href="clean_href", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - accuracy = response.parse() - assert_matches_type(AccuracyCreateCitationAnalysisResponse, accuracy, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_claim_breakdown(self, client: Profound) -> None: - accuracy = client.reports.accuracy.create_claim_breakdown( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(AccuracyCreateClaimBreakdownResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_claim_breakdown_with_all_params(self, client: Profound) -> None: - accuracy = client.reports.accuracy.create_claim_breakdown( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - citation_categories=["string"], - comparison_end_date="comparison_end_date", - comparison_start_date="comparison_start_date", - exclude_topic_ids=True, - include_no_persona=True, - include_no_tag=True, - persona_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - platform_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - region_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - tag_filter_type="all", - tag_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - topic_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(AccuracyCreateClaimBreakdownResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_create_claim_breakdown(self, client: Profound) -> None: - response = client.reports.accuracy.with_raw_response.create_claim_breakdown( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - accuracy = response.parse() - assert_matches_type(AccuracyCreateClaimBreakdownResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_create_claim_breakdown(self, client: Profound) -> None: - with client.reports.accuracy.with_streaming_response.create_claim_breakdown( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - accuracy = response.parse() - assert_matches_type(AccuracyCreateClaimBreakdownResponse, accuracy, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_claim_citations(self, client: Profound) -> None: - accuracy = client.reports.accuracy.create_claim_citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(AccuracyCreateClaimCitationsResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_claim_citations_with_all_params(self, client: Profound) -> None: - accuracy = client.reports.accuracy.create_claim_citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - citation_categories=["string"], - comparison_end_date="comparison_end_date", - comparison_start_date="comparison_start_date", - exclude_topic_ids=True, - include_no_persona=True, - include_no_tag=True, - limit=1, - offset=0, - persona_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - platform_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - region_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - search_query="search_query", - sort_order="asc", - tag_filter_type="all", - tag_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - topic_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(AccuracyCreateClaimCitationsResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_create_claim_citations(self, client: Profound) -> None: - response = client.reports.accuracy.with_raw_response.create_claim_citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - accuracy = response.parse() - assert_matches_type(AccuracyCreateClaimCitationsResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_create_claim_citations(self, client: Profound) -> None: - with client.reports.accuracy.with_streaming_response.create_claim_citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - accuracy = response.parse() - assert_matches_type(AccuracyCreateClaimCitationsResponse, accuracy, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_cluster_example_runs(self, client: Profound) -> None: - accuracy = client.reports.accuracy.create_cluster_example_runs( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(AccuracyCreateClusterExampleRunsResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_cluster_example_runs_with_all_params(self, client: Profound) -> None: - accuracy = client.reports.accuracy.create_cluster_example_runs( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - citation_categories=["string"], - comparison_end_date="comparison_end_date", - comparison_start_date="comparison_start_date", - exclude_topic_ids=True, - include_no_persona=True, - include_no_tag=True, - limit=1, - offset=0, - persona_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - platform_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - region_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - tag_filter_type="all", - tag_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - topic_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(AccuracyCreateClusterExampleRunsResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_create_cluster_example_runs(self, client: Profound) -> None: - response = client.reports.accuracy.with_raw_response.create_cluster_example_runs( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - accuracy = response.parse() - assert_matches_type(AccuracyCreateClusterExampleRunsResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_create_cluster_example_runs(self, client: Profound) -> None: - with client.reports.accuracy.with_streaming_response.create_cluster_example_runs( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - accuracy = response.parse() - assert_matches_type(AccuracyCreateClusterExampleRunsResponse, accuracy, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_cluster_verification_pairs(self, client: Profound) -> None: - accuracy = client.reports.accuracy.create_cluster_verification_pairs( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(AccuracyCreateClusterVerificationPairsResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_create_cluster_verification_pairs(self, client: Profound) -> None: - response = client.reports.accuracy.with_raw_response.create_cluster_verification_pairs( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - accuracy = response.parse() - assert_matches_type(AccuracyCreateClusterVerificationPairsResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_create_cluster_verification_pairs(self, client: Profound) -> None: - with client.reports.accuracy.with_streaming_response.create_cluster_verification_pairs( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - accuracy = response.parse() - assert_matches_type(AccuracyCreateClusterVerificationPairsResponse, accuracy, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_factcheck_setup_status(self, client: Profound) -> None: - accuracy = client.reports.accuracy.create_factcheck_setup_status( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(AccuracyCreateFactcheckSetupStatusResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_create_factcheck_setup_status(self, client: Profound) -> None: - response = client.reports.accuracy.with_raw_response.create_factcheck_setup_status( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - accuracy = response.parse() - assert_matches_type(AccuracyCreateFactcheckSetupStatusResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_create_factcheck_setup_status(self, client: Profound) -> None: - with client.reports.accuracy.with_streaming_response.create_factcheck_setup_status( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - accuracy = response.parse() - assert_matches_type(AccuracyCreateFactcheckSetupStatusResponse, accuracy, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_inaccuracy_drivers(self, client: Profound) -> None: - accuracy = client.reports.accuracy.create_inaccuracy_drivers( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(AccuracyCreateInaccuracyDriversResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_inaccuracy_drivers_with_all_params(self, client: Profound) -> None: - accuracy = client.reports.accuracy.create_inaccuracy_drivers( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - citation_categories=["string"], - comparison_end_date="comparison_end_date", - comparison_start_date="comparison_start_date", - exclude_topic_ids=True, - include_no_persona=True, - include_no_tag=True, - limit=1, - persona_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - platform_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - region_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - tag_filter_type="all", - tag_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - topic_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(AccuracyCreateInaccuracyDriversResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_create_inaccuracy_drivers(self, client: Profound) -> None: - response = client.reports.accuracy.with_raw_response.create_inaccuracy_drivers( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - accuracy = response.parse() - assert_matches_type(AccuracyCreateInaccuracyDriversResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_create_inaccuracy_drivers(self, client: Profound) -> None: - with client.reports.accuracy.with_streaming_response.create_inaccuracy_drivers( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - accuracy = response.parse() - assert_matches_type(AccuracyCreateInaccuracyDriversResponse, accuracy, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_inaccurate_clusters(self, client: Profound) -> None: - accuracy = client.reports.accuracy.create_inaccurate_clusters( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(AccuracyCreateInaccurateClustersResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_inaccurate_clusters_with_all_params(self, client: Profound) -> None: - accuracy = client.reports.accuracy.create_inaccurate_clusters( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - citation_categories=["string"], - comparison_end_date="comparison_end_date", - comparison_start_date="comparison_start_date", - exclude_topic_ids=True, - include_models=True, - include_no_persona=True, - include_no_tag=True, - limit=1, - offset=0, - persona_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - platform_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - region_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - search_query="search_query", - tag_filter_type="all", - tag_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - theme_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - topic_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(AccuracyCreateInaccurateClustersResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_create_inaccurate_clusters(self, client: Profound) -> None: - response = client.reports.accuracy.with_raw_response.create_inaccurate_clusters( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - accuracy = response.parse() - assert_matches_type(AccuracyCreateInaccurateClustersResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_create_inaccurate_clusters(self, client: Profound) -> None: - with client.reports.accuracy.with_streaming_response.create_inaccurate_clusters( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - accuracy = response.parse() - assert_matches_type(AccuracyCreateInaccurateClustersResponse, accuracy, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_inaccurate_themes(self, client: Profound) -> None: - accuracy = client.reports.accuracy.create_inaccurate_themes( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(AccuracyCreateInaccurateThemesResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_inaccurate_themes_with_all_params(self, client: Profound) -> None: - accuracy = client.reports.accuracy.create_inaccurate_themes( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - citation_categories=["string"], - comparison_end_date="comparison_end_date", - comparison_start_date="comparison_start_date", - exclude_topic_ids=True, - include_no_persona=True, - include_no_tag=True, - limit=1, - offset=0, - persona_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - platform_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - region_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - search_query="search_query", - sort_by="response_share", - sort_order="asc", - tag_filter_type="all", - tag_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - topic_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(AccuracyCreateInaccurateThemesResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_create_inaccurate_themes(self, client: Profound) -> None: - response = client.reports.accuracy.with_raw_response.create_inaccurate_themes( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - accuracy = response.parse() - assert_matches_type(AccuracyCreateInaccurateThemesResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_create_inaccurate_themes(self, client: Profound) -> None: - with client.reports.accuracy.with_streaming_response.create_inaccurate_themes( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - accuracy = response.parse() - assert_matches_type(AccuracyCreateInaccurateThemesResponse, accuracy, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_overview(self, client: Profound) -> None: - accuracy = client.reports.accuracy.create_overview( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(AccuracyCreateOverviewResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_overview_with_all_params(self, client: Profound) -> None: - accuracy = client.reports.accuracy.create_overview( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - citation_categories=["string"], - comparison_end_date="comparison_end_date", - comparison_start_date="comparison_start_date", - date_bucket="date_bucket", - exclude_topic_ids=True, - group_by="period", - include_no_persona=True, - include_no_tag=True, - persona_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - platform_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - region_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - tag_filter_type="all", - tag_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - topic_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(AccuracyCreateOverviewResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_create_overview(self, client: Profound) -> None: - response = client.reports.accuracy.with_raw_response.create_overview( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - accuracy = response.parse() - assert_matches_type(AccuracyCreateOverviewResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_create_overview(self, client: Profound) -> None: - with client.reports.accuracy.with_streaming_response.create_overview( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - accuracy = response.parse() - assert_matches_type(AccuracyCreateOverviewResponse, accuracy, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_top_inaccurate_claims(self, client: Profound) -> None: - accuracy = client.reports.accuracy.create_top_inaccurate_claims( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(AccuracyCreateTopInaccurateClaimsResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_top_inaccurate_claims_with_all_params(self, client: Profound) -> None: - accuracy = client.reports.accuracy.create_top_inaccurate_claims( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - citation_categories=["string"], - comparison_end_date="comparison_end_date", - comparison_start_date="comparison_start_date", - exclude_topic_ids=True, - include_no_persona=True, - include_no_tag=True, - limit=1, - persona_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - platform_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - region_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - tag_filter_type="all", - tag_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - topic_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(AccuracyCreateTopInaccurateClaimsResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_create_top_inaccurate_claims(self, client: Profound) -> None: - response = client.reports.accuracy.with_raw_response.create_top_inaccurate_claims( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - accuracy = response.parse() - assert_matches_type(AccuracyCreateTopInaccurateClaimsResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_create_top_inaccurate_claims(self, client: Profound) -> None: - with client.reports.accuracy.with_streaming_response.create_top_inaccurate_claims( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - accuracy = response.parse() - assert_matches_type(AccuracyCreateTopInaccurateClaimsResponse, accuracy, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_topic_ids(self, client: Profound) -> None: - accuracy = client.reports.accuracy.create_topic_ids( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(AccuracyCreateTopicIDsResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_create_topic_ids(self, client: Profound) -> None: - response = client.reports.accuracy.with_raw_response.create_topic_ids( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - accuracy = response.parse() - assert_matches_type(AccuracyCreateTopicIDsResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_create_topic_ids(self, client: Profound) -> None: - with client.reports.accuracy.with_streaming_response.create_topic_ids( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - accuracy = response.parse() - assert_matches_type(AccuracyCreateTopicIDsResponse, accuracy, path=["response"]) - - assert cast(Any, response.is_closed) is True - - -class TestAsyncAccuracy: - parametrize = pytest.mark.parametrize( - "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_breakdown(self, async_client: AsyncProfound) -> None: - accuracy = await async_client.reports.accuracy.create_breakdown( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(AccuracyCreateBreakdownResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_breakdown_with_all_params(self, async_client: AsyncProfound) -> None: - accuracy = await async_client.reports.accuracy.create_breakdown( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - breakdown_by="citation", - citation_categories=["string"], - comparison_end_date="comparison_end_date", - comparison_start_date="comparison_start_date", - date_bucket="date_bucket", - exclude_topic_ids=True, - group_by=["platform"], - include_no_persona=True, - include_no_tag=True, - limit=1, - offset=0, - pagination={ - "dimension": "group", - "direction": "asc", - "metric": "accuracy", - "mode": "current", - }, - persona_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - platform_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - region_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - search_query="search_query", - sort_by="citationShare", - sort_order="asc", - tag_filter_type="all", - tag_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - topic_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(AccuracyCreateBreakdownResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_create_breakdown(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.accuracy.with_raw_response.create_breakdown( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - accuracy = await response.parse() - assert_matches_type(AccuracyCreateBreakdownResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_create_breakdown(self, async_client: AsyncProfound) -> None: - async with async_client.reports.accuracy.with_streaming_response.create_breakdown( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - accuracy = await response.parse() - assert_matches_type(AccuracyCreateBreakdownResponse, accuracy, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_citation_analysis(self, async_client: AsyncProfound) -> None: - accuracy = await async_client.reports.accuracy.create_citation_analysis( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - clean_href="clean_href", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(AccuracyCreateCitationAnalysisResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_create_citation_analysis(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.accuracy.with_raw_response.create_citation_analysis( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - clean_href="clean_href", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - accuracy = await response.parse() - assert_matches_type(AccuracyCreateCitationAnalysisResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_create_citation_analysis(self, async_client: AsyncProfound) -> None: - async with async_client.reports.accuracy.with_streaming_response.create_citation_analysis( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - clean_href="clean_href", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - accuracy = await response.parse() - assert_matches_type(AccuracyCreateCitationAnalysisResponse, accuracy, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_claim_breakdown(self, async_client: AsyncProfound) -> None: - accuracy = await async_client.reports.accuracy.create_claim_breakdown( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(AccuracyCreateClaimBreakdownResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_claim_breakdown_with_all_params(self, async_client: AsyncProfound) -> None: - accuracy = await async_client.reports.accuracy.create_claim_breakdown( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - citation_categories=["string"], - comparison_end_date="comparison_end_date", - comparison_start_date="comparison_start_date", - exclude_topic_ids=True, - include_no_persona=True, - include_no_tag=True, - persona_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - platform_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - region_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - tag_filter_type="all", - tag_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - topic_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(AccuracyCreateClaimBreakdownResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_create_claim_breakdown(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.accuracy.with_raw_response.create_claim_breakdown( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - accuracy = await response.parse() - assert_matches_type(AccuracyCreateClaimBreakdownResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_create_claim_breakdown(self, async_client: AsyncProfound) -> None: - async with async_client.reports.accuracy.with_streaming_response.create_claim_breakdown( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - accuracy = await response.parse() - assert_matches_type(AccuracyCreateClaimBreakdownResponse, accuracy, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_claim_citations(self, async_client: AsyncProfound) -> None: - accuracy = await async_client.reports.accuracy.create_claim_citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(AccuracyCreateClaimCitationsResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_claim_citations_with_all_params(self, async_client: AsyncProfound) -> None: - accuracy = await async_client.reports.accuracy.create_claim_citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - citation_categories=["string"], - comparison_end_date="comparison_end_date", - comparison_start_date="comparison_start_date", - exclude_topic_ids=True, - include_no_persona=True, - include_no_tag=True, - limit=1, - offset=0, - persona_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - platform_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - region_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - search_query="search_query", - sort_order="asc", - tag_filter_type="all", - tag_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - topic_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(AccuracyCreateClaimCitationsResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_create_claim_citations(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.accuracy.with_raw_response.create_claim_citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - accuracy = await response.parse() - assert_matches_type(AccuracyCreateClaimCitationsResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_create_claim_citations(self, async_client: AsyncProfound) -> None: - async with async_client.reports.accuracy.with_streaming_response.create_claim_citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - accuracy = await response.parse() - assert_matches_type(AccuracyCreateClaimCitationsResponse, accuracy, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_cluster_example_runs(self, async_client: AsyncProfound) -> None: - accuracy = await async_client.reports.accuracy.create_cluster_example_runs( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(AccuracyCreateClusterExampleRunsResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_cluster_example_runs_with_all_params(self, async_client: AsyncProfound) -> None: - accuracy = await async_client.reports.accuracy.create_cluster_example_runs( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - citation_categories=["string"], - comparison_end_date="comparison_end_date", - comparison_start_date="comparison_start_date", - exclude_topic_ids=True, - include_no_persona=True, - include_no_tag=True, - limit=1, - offset=0, - persona_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - platform_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - region_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - tag_filter_type="all", - tag_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - topic_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(AccuracyCreateClusterExampleRunsResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_create_cluster_example_runs(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.accuracy.with_raw_response.create_cluster_example_runs( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - accuracy = await response.parse() - assert_matches_type(AccuracyCreateClusterExampleRunsResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_create_cluster_example_runs(self, async_client: AsyncProfound) -> None: - async with async_client.reports.accuracy.with_streaming_response.create_cluster_example_runs( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - accuracy = await response.parse() - assert_matches_type(AccuracyCreateClusterExampleRunsResponse, accuracy, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_cluster_verification_pairs(self, async_client: AsyncProfound) -> None: - accuracy = await async_client.reports.accuracy.create_cluster_verification_pairs( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(AccuracyCreateClusterVerificationPairsResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_create_cluster_verification_pairs(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.accuracy.with_raw_response.create_cluster_verification_pairs( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - accuracy = await response.parse() - assert_matches_type(AccuracyCreateClusterVerificationPairsResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_create_cluster_verification_pairs(self, async_client: AsyncProfound) -> None: - async with async_client.reports.accuracy.with_streaming_response.create_cluster_verification_pairs( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - cluster_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - accuracy = await response.parse() - assert_matches_type(AccuracyCreateClusterVerificationPairsResponse, accuracy, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_factcheck_setup_status(self, async_client: AsyncProfound) -> None: - accuracy = await async_client.reports.accuracy.create_factcheck_setup_status( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(AccuracyCreateFactcheckSetupStatusResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_create_factcheck_setup_status(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.accuracy.with_raw_response.create_factcheck_setup_status( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - accuracy = await response.parse() - assert_matches_type(AccuracyCreateFactcheckSetupStatusResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_create_factcheck_setup_status(self, async_client: AsyncProfound) -> None: - async with async_client.reports.accuracy.with_streaming_response.create_factcheck_setup_status( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - accuracy = await response.parse() - assert_matches_type(AccuracyCreateFactcheckSetupStatusResponse, accuracy, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_inaccuracy_drivers(self, async_client: AsyncProfound) -> None: - accuracy = await async_client.reports.accuracy.create_inaccuracy_drivers( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(AccuracyCreateInaccuracyDriversResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_inaccuracy_drivers_with_all_params(self, async_client: AsyncProfound) -> None: - accuracy = await async_client.reports.accuracy.create_inaccuracy_drivers( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - citation_categories=["string"], - comparison_end_date="comparison_end_date", - comparison_start_date="comparison_start_date", - exclude_topic_ids=True, - include_no_persona=True, - include_no_tag=True, - limit=1, - persona_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - platform_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - region_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - tag_filter_type="all", - tag_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - topic_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(AccuracyCreateInaccuracyDriversResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_create_inaccuracy_drivers(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.accuracy.with_raw_response.create_inaccuracy_drivers( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - accuracy = await response.parse() - assert_matches_type(AccuracyCreateInaccuracyDriversResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_create_inaccuracy_drivers(self, async_client: AsyncProfound) -> None: - async with async_client.reports.accuracy.with_streaming_response.create_inaccuracy_drivers( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - accuracy = await response.parse() - assert_matches_type(AccuracyCreateInaccuracyDriversResponse, accuracy, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_inaccurate_clusters(self, async_client: AsyncProfound) -> None: - accuracy = await async_client.reports.accuracy.create_inaccurate_clusters( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(AccuracyCreateInaccurateClustersResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_inaccurate_clusters_with_all_params(self, async_client: AsyncProfound) -> None: - accuracy = await async_client.reports.accuracy.create_inaccurate_clusters( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - citation_categories=["string"], - comparison_end_date="comparison_end_date", - comparison_start_date="comparison_start_date", - exclude_topic_ids=True, - include_models=True, - include_no_persona=True, - include_no_tag=True, - limit=1, - offset=0, - persona_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - platform_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - region_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - search_query="search_query", - tag_filter_type="all", - tag_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - theme_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - topic_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(AccuracyCreateInaccurateClustersResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_create_inaccurate_clusters(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.accuracy.with_raw_response.create_inaccurate_clusters( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - accuracy = await response.parse() - assert_matches_type(AccuracyCreateInaccurateClustersResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_create_inaccurate_clusters(self, async_client: AsyncProfound) -> None: - async with async_client.reports.accuracy.with_streaming_response.create_inaccurate_clusters( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - accuracy = await response.parse() - assert_matches_type(AccuracyCreateInaccurateClustersResponse, accuracy, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_inaccurate_themes(self, async_client: AsyncProfound) -> None: - accuracy = await async_client.reports.accuracy.create_inaccurate_themes( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(AccuracyCreateInaccurateThemesResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_inaccurate_themes_with_all_params(self, async_client: AsyncProfound) -> None: - accuracy = await async_client.reports.accuracy.create_inaccurate_themes( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - citation_categories=["string"], - comparison_end_date="comparison_end_date", - comparison_start_date="comparison_start_date", - exclude_topic_ids=True, - include_no_persona=True, - include_no_tag=True, - limit=1, - offset=0, - persona_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - platform_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - region_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - search_query="search_query", - sort_by="response_share", - sort_order="asc", - tag_filter_type="all", - tag_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - topic_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(AccuracyCreateInaccurateThemesResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_create_inaccurate_themes(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.accuracy.with_raw_response.create_inaccurate_themes( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - accuracy = await response.parse() - assert_matches_type(AccuracyCreateInaccurateThemesResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_create_inaccurate_themes(self, async_client: AsyncProfound) -> None: - async with async_client.reports.accuracy.with_streaming_response.create_inaccurate_themes( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - accuracy = await response.parse() - assert_matches_type(AccuracyCreateInaccurateThemesResponse, accuracy, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_overview(self, async_client: AsyncProfound) -> None: - accuracy = await async_client.reports.accuracy.create_overview( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(AccuracyCreateOverviewResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_overview_with_all_params(self, async_client: AsyncProfound) -> None: - accuracy = await async_client.reports.accuracy.create_overview( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - citation_categories=["string"], - comparison_end_date="comparison_end_date", - comparison_start_date="comparison_start_date", - date_bucket="date_bucket", - exclude_topic_ids=True, - group_by="period", - include_no_persona=True, - include_no_tag=True, - persona_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - platform_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - region_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - tag_filter_type="all", - tag_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - topic_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(AccuracyCreateOverviewResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_create_overview(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.accuracy.with_raw_response.create_overview( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - accuracy = await response.parse() - assert_matches_type(AccuracyCreateOverviewResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_create_overview(self, async_client: AsyncProfound) -> None: - async with async_client.reports.accuracy.with_streaming_response.create_overview( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - accuracy = await response.parse() - assert_matches_type(AccuracyCreateOverviewResponse, accuracy, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_top_inaccurate_claims(self, async_client: AsyncProfound) -> None: - accuracy = await async_client.reports.accuracy.create_top_inaccurate_claims( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(AccuracyCreateTopInaccurateClaimsResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_top_inaccurate_claims_with_all_params(self, async_client: AsyncProfound) -> None: - accuracy = await async_client.reports.accuracy.create_top_inaccurate_claims( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - citation_categories=["string"], - comparison_end_date="comparison_end_date", - comparison_start_date="comparison_start_date", - exclude_topic_ids=True, - include_no_persona=True, - include_no_tag=True, - limit=1, - persona_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - platform_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - prompt_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - region_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - tag_filter_type="all", - tag_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - topic_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(AccuracyCreateTopInaccurateClaimsResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_create_top_inaccurate_claims(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.accuracy.with_raw_response.create_top_inaccurate_claims( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - accuracy = await response.parse() - assert_matches_type(AccuracyCreateTopInaccurateClaimsResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_create_top_inaccurate_claims(self, async_client: AsyncProfound) -> None: - async with async_client.reports.accuracy.with_streaming_response.create_top_inaccurate_claims( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - accuracy = await response.parse() - assert_matches_type(AccuracyCreateTopInaccurateClaimsResponse, accuracy, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_topic_ids(self, async_client: AsyncProfound) -> None: - accuracy = await async_client.reports.accuracy.create_topic_ids( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(AccuracyCreateTopicIDsResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_create_topic_ids(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.accuracy.with_raw_response.create_topic_ids( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - accuracy = await response.parse() - assert_matches_type(AccuracyCreateTopicIDsResponse, accuracy, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_create_topic_ids(self, async_client: AsyncProfound) -> None: - async with async_client.reports.accuracy.with_streaming_response.create_topic_ids( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - accuracy = await response.parse() - assert_matches_type(AccuracyCreateTopicIDsResponse, accuracy, path=["response"]) - - assert cast(Any, response.is_closed) is True diff --git a/tests/api_resources/reports/test_factcheck.py b/tests/api_resources/reports/test_factcheck.py deleted file mode 100644 index 68576b17..00000000 --- a/tests/api_resources/reports/test_factcheck.py +++ /dev/null @@ -1,268 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import os -from typing import Any, cast - -import pytest - -from profound import Profound, AsyncProfound -from tests.utils import assert_matches_type -from profound.types.reports import ( - FactcheckQueryScoresResponse, -) - -base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") - - -class TestFactcheck: - parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_query_scores(self, client: Profound) -> None: - factcheck = client.reports.factcheck.query_scores( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(FactcheckQueryScoresResponse, factcheck, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_query_scores_with_all_params(self, client: Profound) -> None: - factcheck = client.reports.factcheck.query_scores( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - limit=1, - max_results=1, - ) - assert_matches_type(FactcheckQueryScoresResponse, factcheck, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_query_scores(self, client: Profound) -> None: - response = client.reports.factcheck.with_raw_response.query_scores( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - factcheck = response.parse() - assert_matches_type(FactcheckQueryScoresResponse, factcheck, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_query_scores(self, client: Profound) -> None: - with client.reports.factcheck.with_streaming_response.query_scores( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - factcheck = response.parse() - assert_matches_type(FactcheckQueryScoresResponse, factcheck, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_scores(self, client: Profound) -> None: - factcheck_stream = client.reports.factcheck.stream_scores( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - factcheck_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_scores_with_all_params(self, client: Profound) -> None: - factcheck_stream = client.reports.factcheck.stream_scores( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - limit=1, - max_results=1, - ) - factcheck_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_stream_scores(self, client: Profound) -> None: - response = client.reports.factcheck.with_raw_response.stream_scores( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = response.parse() - stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_stream_scores(self, client: Profound) -> None: - with client.reports.factcheck.with_streaming_response.stream_scores( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = response.parse() - stream.close() - - assert cast(Any, response.is_closed) is True - - -class TestAsyncFactcheck: - parametrize = pytest.mark.parametrize( - "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_query_scores(self, async_client: AsyncProfound) -> None: - factcheck = await async_client.reports.factcheck.query_scores( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(FactcheckQueryScoresResponse, factcheck, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_query_scores_with_all_params(self, async_client: AsyncProfound) -> None: - factcheck = await async_client.reports.factcheck.query_scores( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - limit=1, - max_results=1, - ) - assert_matches_type(FactcheckQueryScoresResponse, factcheck, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_query_scores(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.factcheck.with_raw_response.query_scores( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - factcheck = await response.parse() - assert_matches_type(FactcheckQueryScoresResponse, factcheck, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_query_scores(self, async_client: AsyncProfound) -> None: - async with async_client.reports.factcheck.with_streaming_response.query_scores( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - factcheck = await response.parse() - assert_matches_type(FactcheckQueryScoresResponse, factcheck, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_scores(self, async_client: AsyncProfound) -> None: - factcheck_stream = await async_client.reports.factcheck.stream_scores( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - await factcheck_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_scores_with_all_params(self, async_client: AsyncProfound) -> None: - factcheck_stream = await async_client.reports.factcheck.stream_scores( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - limit=1, - max_results=1, - ) - await factcheck_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_stream_scores(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.factcheck.with_raw_response.stream_scores( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = await response.parse() - await stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_stream_scores(self, async_client: AsyncProfound) -> None: - async with async_client.reports.factcheck.with_streaming_response.stream_scores( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = await response.parse() - await stream.close() - - assert cast(Any, response.is_closed) is True diff --git a/tests/api_resources/reports/test_shopping.py b/tests/api_resources/reports/test_shopping.py deleted file mode 100644 index 59919ecb..00000000 --- a/tests/api_resources/reports/test_shopping.py +++ /dev/null @@ -1,1049 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import os -from typing import Any, cast - -import pytest - -from profound import Profound, AsyncProfound -from tests.utils import assert_matches_type -from profound.types.reports import ( - ShoppingBrandsResponse, - ShoppingProductsResponse, - ShoppingMerchantsResponse, - ShoppingTriggerRateResponse, -) - -base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") - - -class TestShopping: - parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_brands(self, client: Profound) -> None: - shopping = client.reports.shopping.brands( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(ShoppingBrandsResponse, shopping, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_brands_with_all_params(self, client: Profound) -> None: - shopping = client.reports.shopping.brands( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - assets="string", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - interval="day", - limit=1, - max_results=1, - metrics=["visibility_score"], - scope="owned", - ) - assert_matches_type(ShoppingBrandsResponse, shopping, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_brands(self, client: Profound) -> None: - response = client.reports.shopping.with_raw_response.brands( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - shopping = response.parse() - assert_matches_type(ShoppingBrandsResponse, shopping, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_brands(self, client: Profound) -> None: - with client.reports.shopping.with_streaming_response.brands( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - shopping = response.parse() - assert_matches_type(ShoppingBrandsResponse, shopping, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_merchants(self, client: Profound) -> None: - shopping = client.reports.shopping.merchants( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(ShoppingMerchantsResponse, shopping, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_merchants_with_all_params(self, client: Profound) -> None: - shopping = client.reports.shopping.merchants( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - interval="day", - limit=1, - max_results=1, - metrics=["merchant_share"], - ) - assert_matches_type(ShoppingMerchantsResponse, shopping, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_merchants(self, client: Profound) -> None: - response = client.reports.shopping.with_raw_response.merchants( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - shopping = response.parse() - assert_matches_type(ShoppingMerchantsResponse, shopping, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_merchants(self, client: Profound) -> None: - with client.reports.shopping.with_streaming_response.merchants( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - shopping = response.parse() - assert_matches_type(ShoppingMerchantsResponse, shopping, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_products(self, client: Profound) -> None: - shopping = client.reports.shopping.products( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(ShoppingProductsResponse, shopping, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_products_with_all_params(self, client: Profound) -> None: - shopping = client.reports.shopping.products( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - competitor_limit=1, - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - include_merchants=True, - interval="day", - limit=1, - max_results=1, - metrics=["visibility_score"], - target_product="x", - ) - assert_matches_type(ShoppingProductsResponse, shopping, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_products(self, client: Profound) -> None: - response = client.reports.shopping.with_raw_response.products( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - shopping = response.parse() - assert_matches_type(ShoppingProductsResponse, shopping, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_products(self, client: Profound) -> None: - with client.reports.shopping.with_streaming_response.products( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - shopping = response.parse() - assert_matches_type(ShoppingProductsResponse, shopping, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_brands(self, client: Profound) -> None: - shopping_stream = client.reports.shopping.stream_brands( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - shopping_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_brands_with_all_params(self, client: Profound) -> None: - shopping_stream = client.reports.shopping.stream_brands( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - assets="string", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - interval="day", - limit=1, - max_results=1, - metrics=["visibility_score"], - scope="owned", - ) - shopping_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_stream_brands(self, client: Profound) -> None: - response = client.reports.shopping.with_raw_response.stream_brands( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = response.parse() - stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_stream_brands(self, client: Profound) -> None: - with client.reports.shopping.with_streaming_response.stream_brands( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = response.parse() - stream.close() - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_merchants(self, client: Profound) -> None: - shopping_stream = client.reports.shopping.stream_merchants( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - shopping_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_merchants_with_all_params(self, client: Profound) -> None: - shopping_stream = client.reports.shopping.stream_merchants( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - interval="day", - limit=1, - max_results=1, - metrics=["merchant_share"], - ) - shopping_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_stream_merchants(self, client: Profound) -> None: - response = client.reports.shopping.with_raw_response.stream_merchants( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = response.parse() - stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_stream_merchants(self, client: Profound) -> None: - with client.reports.shopping.with_streaming_response.stream_merchants( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = response.parse() - stream.close() - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_products(self, client: Profound) -> None: - shopping_stream = client.reports.shopping.stream_products( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - shopping_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_products_with_all_params(self, client: Profound) -> None: - shopping_stream = client.reports.shopping.stream_products( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - competitor_limit=1, - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - include_merchants=True, - interval="day", - limit=1, - max_results=1, - metrics=["visibility_score"], - target_product="x", - ) - shopping_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_stream_products(self, client: Profound) -> None: - response = client.reports.shopping.with_raw_response.stream_products( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = response.parse() - stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_stream_products(self, client: Profound) -> None: - with client.reports.shopping.with_streaming_response.stream_products( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = response.parse() - stream.close() - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_trigger_rate(self, client: Profound) -> None: - shopping_stream = client.reports.shopping.stream_trigger_rate( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - shopping_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_trigger_rate_with_all_params(self, client: Profound) -> None: - shopping_stream = client.reports.shopping.stream_trigger_rate( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - interval="day", - limit=1, - max_results=1, - metrics=["total_runs"], - ) - shopping_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_stream_trigger_rate(self, client: Profound) -> None: - response = client.reports.shopping.with_raw_response.stream_trigger_rate( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = response.parse() - stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_stream_trigger_rate(self, client: Profound) -> None: - with client.reports.shopping.with_streaming_response.stream_trigger_rate( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = response.parse() - stream.close() - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_trigger_rate(self, client: Profound) -> None: - shopping = client.reports.shopping.trigger_rate( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(ShoppingTriggerRateResponse, shopping, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_trigger_rate_with_all_params(self, client: Profound) -> None: - shopping = client.reports.shopping.trigger_rate( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - interval="day", - limit=1, - max_results=1, - metrics=["total_runs"], - ) - assert_matches_type(ShoppingTriggerRateResponse, shopping, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_trigger_rate(self, client: Profound) -> None: - response = client.reports.shopping.with_raw_response.trigger_rate( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - shopping = response.parse() - assert_matches_type(ShoppingTriggerRateResponse, shopping, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_trigger_rate(self, client: Profound) -> None: - with client.reports.shopping.with_streaming_response.trigger_rate( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - shopping = response.parse() - assert_matches_type(ShoppingTriggerRateResponse, shopping, path=["response"]) - - assert cast(Any, response.is_closed) is True - - -class TestAsyncShopping: - parametrize = pytest.mark.parametrize( - "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_brands(self, async_client: AsyncProfound) -> None: - shopping = await async_client.reports.shopping.brands( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(ShoppingBrandsResponse, shopping, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_brands_with_all_params(self, async_client: AsyncProfound) -> None: - shopping = await async_client.reports.shopping.brands( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - assets="string", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - interval="day", - limit=1, - max_results=1, - metrics=["visibility_score"], - scope="owned", - ) - assert_matches_type(ShoppingBrandsResponse, shopping, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_brands(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.shopping.with_raw_response.brands( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - shopping = await response.parse() - assert_matches_type(ShoppingBrandsResponse, shopping, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_brands(self, async_client: AsyncProfound) -> None: - async with async_client.reports.shopping.with_streaming_response.brands( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - shopping = await response.parse() - assert_matches_type(ShoppingBrandsResponse, shopping, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_merchants(self, async_client: AsyncProfound) -> None: - shopping = await async_client.reports.shopping.merchants( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(ShoppingMerchantsResponse, shopping, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_merchants_with_all_params(self, async_client: AsyncProfound) -> None: - shopping = await async_client.reports.shopping.merchants( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - interval="day", - limit=1, - max_results=1, - metrics=["merchant_share"], - ) - assert_matches_type(ShoppingMerchantsResponse, shopping, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_merchants(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.shopping.with_raw_response.merchants( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - shopping = await response.parse() - assert_matches_type(ShoppingMerchantsResponse, shopping, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_merchants(self, async_client: AsyncProfound) -> None: - async with async_client.reports.shopping.with_streaming_response.merchants( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - shopping = await response.parse() - assert_matches_type(ShoppingMerchantsResponse, shopping, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_products(self, async_client: AsyncProfound) -> None: - shopping = await async_client.reports.shopping.products( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(ShoppingProductsResponse, shopping, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_products_with_all_params(self, async_client: AsyncProfound) -> None: - shopping = await async_client.reports.shopping.products( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - competitor_limit=1, - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - include_merchants=True, - interval="day", - limit=1, - max_results=1, - metrics=["visibility_score"], - target_product="x", - ) - assert_matches_type(ShoppingProductsResponse, shopping, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_products(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.shopping.with_raw_response.products( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - shopping = await response.parse() - assert_matches_type(ShoppingProductsResponse, shopping, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_products(self, async_client: AsyncProfound) -> None: - async with async_client.reports.shopping.with_streaming_response.products( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - shopping = await response.parse() - assert_matches_type(ShoppingProductsResponse, shopping, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_brands(self, async_client: AsyncProfound) -> None: - shopping_stream = await async_client.reports.shopping.stream_brands( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - await shopping_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_brands_with_all_params(self, async_client: AsyncProfound) -> None: - shopping_stream = await async_client.reports.shopping.stream_brands( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - assets="string", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - interval="day", - limit=1, - max_results=1, - metrics=["visibility_score"], - scope="owned", - ) - await shopping_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_stream_brands(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.shopping.with_raw_response.stream_brands( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = await response.parse() - await stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_stream_brands(self, async_client: AsyncProfound) -> None: - async with async_client.reports.shopping.with_streaming_response.stream_brands( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = await response.parse() - await stream.close() - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_merchants(self, async_client: AsyncProfound) -> None: - shopping_stream = await async_client.reports.shopping.stream_merchants( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - await shopping_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_merchants_with_all_params(self, async_client: AsyncProfound) -> None: - shopping_stream = await async_client.reports.shopping.stream_merchants( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - interval="day", - limit=1, - max_results=1, - metrics=["merchant_share"], - ) - await shopping_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_stream_merchants(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.shopping.with_raw_response.stream_merchants( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = await response.parse() - await stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_stream_merchants(self, async_client: AsyncProfound) -> None: - async with async_client.reports.shopping.with_streaming_response.stream_merchants( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = await response.parse() - await stream.close() - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_products(self, async_client: AsyncProfound) -> None: - shopping_stream = await async_client.reports.shopping.stream_products( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - await shopping_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_products_with_all_params(self, async_client: AsyncProfound) -> None: - shopping_stream = await async_client.reports.shopping.stream_products( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - competitor_limit=1, - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - include_merchants=True, - interval="day", - limit=1, - max_results=1, - metrics=["visibility_score"], - target_product="x", - ) - await shopping_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_stream_products(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.shopping.with_raw_response.stream_products( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = await response.parse() - await stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_stream_products(self, async_client: AsyncProfound) -> None: - async with async_client.reports.shopping.with_streaming_response.stream_products( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = await response.parse() - await stream.close() - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_trigger_rate(self, async_client: AsyncProfound) -> None: - shopping_stream = await async_client.reports.shopping.stream_trigger_rate( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - await shopping_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_trigger_rate_with_all_params(self, async_client: AsyncProfound) -> None: - shopping_stream = await async_client.reports.shopping.stream_trigger_rate( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - interval="day", - limit=1, - max_results=1, - metrics=["total_runs"], - ) - await shopping_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_stream_trigger_rate(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.shopping.with_raw_response.stream_trigger_rate( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = await response.parse() - await stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_stream_trigger_rate(self, async_client: AsyncProfound) -> None: - async with async_client.reports.shopping.with_streaming_response.stream_trigger_rate( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = await response.parse() - await stream.close() - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_trigger_rate(self, async_client: AsyncProfound) -> None: - shopping = await async_client.reports.shopping.trigger_rate( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(ShoppingTriggerRateResponse, shopping, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_trigger_rate_with_all_params(self, async_client: AsyncProfound) -> None: - shopping = await async_client.reports.shopping.trigger_rate( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - interval="day", - limit=1, - max_results=1, - metrics=["total_runs"], - ) - assert_matches_type(ShoppingTriggerRateResponse, shopping, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_trigger_rate(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.shopping.with_raw_response.trigger_rate( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - shopping = await response.parse() - assert_matches_type(ShoppingTriggerRateResponse, shopping, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_trigger_rate(self, async_client: AsyncProfound) -> None: - async with async_client.reports.shopping.with_streaming_response.trigger_rate( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - shopping = await response.parse() - assert_matches_type(ShoppingTriggerRateResponse, shopping, path=["response"]) - - assert cast(Any, response.is_closed) is True diff --git a/tests/api_resources/reports/test_web_search_results.py b/tests/api_resources/reports/test_web_search_results.py deleted file mode 100644 index 4b99ee2c..00000000 --- a/tests/api_resources/reports/test_web_search_results.py +++ /dev/null @@ -1,297 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import os -from typing import Any, cast - -import pytest - -from profound import Profound, AsyncProfound -from tests.utils import assert_matches_type -from profound._utils import parse_datetime -from profound.types.reports import ( - WebSearchResultQueryResponse, -) - -base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") - - -class TestWebSearchResults: - parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_query(self, client: Profound) -> None: - web_search_result = client.reports.web_search_results.query( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - assert_matches_type(WebSearchResultQueryResponse, web_search_result, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_query_with_all_params(self, client: Profound) -> None: - web_search_result = client.reports.web_search_results.query( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_interval="hour", - dimensions=["hostname"], - filters=[ - { - "field": "hostname", - "operator": "is", - "value": "string", - } - ], - order_by={"date": "asc"}, - pagination={ - "limit": 1, - "offset": 0, - }, - ) - assert_matches_type(WebSearchResultQueryResponse, web_search_result, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_query(self, client: Profound) -> None: - response = client.reports.web_search_results.with_raw_response.query( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - web_search_result = response.parse() - assert_matches_type(WebSearchResultQueryResponse, web_search_result, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_query(self, client: Profound) -> None: - with client.reports.web_search_results.with_streaming_response.query( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - web_search_result = response.parse() - assert_matches_type(WebSearchResultQueryResponse, web_search_result, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream(self, client: Profound) -> None: - web_search_result_stream = client.reports.web_search_results.stream( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - web_search_result_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_with_all_params(self, client: Profound) -> None: - web_search_result_stream = client.reports.web_search_results.stream( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_interval="hour", - dimensions=["hostname"], - filters=[ - { - "field": "hostname", - "operator": "is", - "value": "string", - } - ], - order_by={"date": "asc"}, - pagination={ - "limit": 1, - "offset": 0, - }, - ) - web_search_result_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_stream(self, client: Profound) -> None: - response = client.reports.web_search_results.with_raw_response.stream( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = response.parse() - stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_stream(self, client: Profound) -> None: - with client.reports.web_search_results.with_streaming_response.stream( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = response.parse() - stream.close() - - assert cast(Any, response.is_closed) is True - - -class TestAsyncWebSearchResults: - parametrize = pytest.mark.parametrize( - "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_query(self, async_client: AsyncProfound) -> None: - web_search_result = await async_client.reports.web_search_results.query( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - assert_matches_type(WebSearchResultQueryResponse, web_search_result, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_query_with_all_params(self, async_client: AsyncProfound) -> None: - web_search_result = await async_client.reports.web_search_results.query( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_interval="hour", - dimensions=["hostname"], - filters=[ - { - "field": "hostname", - "operator": "is", - "value": "string", - } - ], - order_by={"date": "asc"}, - pagination={ - "limit": 1, - "offset": 0, - }, - ) - assert_matches_type(WebSearchResultQueryResponse, web_search_result, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_query(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.web_search_results.with_raw_response.query( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - web_search_result = await response.parse() - assert_matches_type(WebSearchResultQueryResponse, web_search_result, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_query(self, async_client: AsyncProfound) -> None: - async with async_client.reports.web_search_results.with_streaming_response.query( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - web_search_result = await response.parse() - assert_matches_type(WebSearchResultQueryResponse, web_search_result, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream(self, async_client: AsyncProfound) -> None: - web_search_result_stream = await async_client.reports.web_search_results.stream( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - await web_search_result_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_with_all_params(self, async_client: AsyncProfound) -> None: - web_search_result_stream = await async_client.reports.web_search_results.stream( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_interval="hour", - dimensions=["hostname"], - filters=[ - { - "field": "hostname", - "operator": "is", - "value": "string", - } - ], - order_by={"date": "asc"}, - pagination={ - "limit": 1, - "offset": 0, - }, - ) - await web_search_result_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_stream(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.web_search_results.with_raw_response.stream( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = await response.parse() - await stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_stream(self, async_client: AsyncProfound) -> None: - async with async_client.reports.web_search_results.with_streaming_response.stream( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = await response.parse() - await stream.close() - - assert cast(Any, response.is_closed) is True diff --git a/tests/api_resources/test_agents.py b/tests/api_resources/test_agents.py deleted file mode 100644 index 18d6305f..00000000 --- a/tests/api_resources/test_agents.py +++ /dev/null @@ -1,583 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import os -from typing import Any, cast - -import pytest - -from profound import Profound, AsyncProfound -from tests.utils import assert_matches_type -from profound.types import ( - AgentListResponse, - AgentCreateResponse, - AgentUpdateResponse, - AgentPublishResponse, - AgentRetrieveResponse, - AgentRetrieveGraphResponse, -) - -base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") - - -class TestAgents: - parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create(self, client: Profound) -> None: - agent = client.agents.create( - name="x", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(AgentCreateResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_with_all_params(self, client: Profound) -> None: - agent = client.agents.create( - name="x", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - description="description", - graph={"foo": "bar"}, - ) - assert_matches_type(AgentCreateResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_create(self, client: Profound) -> None: - response = client.agents.with_raw_response.create( - name="x", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - agent = response.parse() - assert_matches_type(AgentCreateResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_create(self, client: Profound) -> None: - with client.agents.with_streaming_response.create( - name="x", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - agent = response.parse() - assert_matches_type(AgentCreateResponse, agent, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_retrieve(self, client: Profound) -> None: - agent = client.agents.retrieve( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(AgentRetrieveResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_retrieve_with_all_params(self, client: Profound) -> None: - agent = client.agents.retrieve( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - version="published", - ) - assert_matches_type(AgentRetrieveResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_retrieve(self, client: Profound) -> None: - response = client.agents.with_raw_response.retrieve( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - agent = response.parse() - assert_matches_type(AgentRetrieveResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_retrieve(self, client: Profound) -> None: - with client.agents.with_streaming_response.retrieve( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - agent = response.parse() - assert_matches_type(AgentRetrieveResponse, agent, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_retrieve(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `agent_id` but received ''"): - client.agents.with_raw_response.retrieve( - agent_id="", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_update(self, client: Profound) -> None: - agent = client.agents.update( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - graph={"foo": "bar"}, - ) - assert_matches_type(AgentUpdateResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_update(self, client: Profound) -> None: - response = client.agents.with_raw_response.update( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - graph={"foo": "bar"}, - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - agent = response.parse() - assert_matches_type(AgentUpdateResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_update(self, client: Profound) -> None: - with client.agents.with_streaming_response.update( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - graph={"foo": "bar"}, - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - agent = response.parse() - assert_matches_type(AgentUpdateResponse, agent, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_update(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `agent_id` but received ''"): - client.agents.with_raw_response.update( - agent_id="", - graph={"foo": "bar"}, - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_list(self, client: Profound) -> None: - agent = client.agents.list() - assert_matches_type(AgentListResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_list_with_all_params(self, client: Profound) -> None: - agent = client.agents.list( - limit=1, - next_cursor="next_cursor", - statuses=["published", "draft"], - ) - assert_matches_type(AgentListResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_list(self, client: Profound) -> None: - response = client.agents.with_raw_response.list() - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - agent = response.parse() - assert_matches_type(AgentListResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_list(self, client: Profound) -> None: - with client.agents.with_streaming_response.list() as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - agent = response.parse() - assert_matches_type(AgentListResponse, agent, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_publish(self, client: Profound) -> None: - agent = client.agents.publish( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(AgentPublishResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_publish(self, client: Profound) -> None: - response = client.agents.with_raw_response.publish( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - agent = response.parse() - assert_matches_type(AgentPublishResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_publish(self, client: Profound) -> None: - with client.agents.with_streaming_response.publish( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - agent = response.parse() - assert_matches_type(AgentPublishResponse, agent, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_publish(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `agent_id` but received ''"): - client.agents.with_raw_response.publish( - "", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_retrieve_graph(self, client: Profound) -> None: - agent = client.agents.retrieve_graph( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(AgentRetrieveGraphResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_retrieve_graph_with_all_params(self, client: Profound) -> None: - agent = client.agents.retrieve_graph( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - version="published", - ) - assert_matches_type(AgentRetrieveGraphResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_retrieve_graph(self, client: Profound) -> None: - response = client.agents.with_raw_response.retrieve_graph( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - agent = response.parse() - assert_matches_type(AgentRetrieveGraphResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_retrieve_graph(self, client: Profound) -> None: - with client.agents.with_streaming_response.retrieve_graph( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - agent = response.parse() - assert_matches_type(AgentRetrieveGraphResponse, agent, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_retrieve_graph(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `agent_id` but received ''"): - client.agents.with_raw_response.retrieve_graph( - agent_id="", - ) - - -class TestAsyncAgents: - parametrize = pytest.mark.parametrize( - "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create(self, async_client: AsyncProfound) -> None: - agent = await async_client.agents.create( - name="x", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(AgentCreateResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_with_all_params(self, async_client: AsyncProfound) -> None: - agent = await async_client.agents.create( - name="x", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - description="description", - graph={"foo": "bar"}, - ) - assert_matches_type(AgentCreateResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_create(self, async_client: AsyncProfound) -> None: - response = await async_client.agents.with_raw_response.create( - name="x", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - agent = await response.parse() - assert_matches_type(AgentCreateResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_create(self, async_client: AsyncProfound) -> None: - async with async_client.agents.with_streaming_response.create( - name="x", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - agent = await response.parse() - assert_matches_type(AgentCreateResponse, agent, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_retrieve(self, async_client: AsyncProfound) -> None: - agent = await async_client.agents.retrieve( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(AgentRetrieveResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_retrieve_with_all_params(self, async_client: AsyncProfound) -> None: - agent = await async_client.agents.retrieve( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - version="published", - ) - assert_matches_type(AgentRetrieveResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_retrieve(self, async_client: AsyncProfound) -> None: - response = await async_client.agents.with_raw_response.retrieve( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - agent = await response.parse() - assert_matches_type(AgentRetrieveResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_retrieve(self, async_client: AsyncProfound) -> None: - async with async_client.agents.with_streaming_response.retrieve( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - agent = await response.parse() - assert_matches_type(AgentRetrieveResponse, agent, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_retrieve(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `agent_id` but received ''"): - await async_client.agents.with_raw_response.retrieve( - agent_id="", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_update(self, async_client: AsyncProfound) -> None: - agent = await async_client.agents.update( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - graph={"foo": "bar"}, - ) - assert_matches_type(AgentUpdateResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_update(self, async_client: AsyncProfound) -> None: - response = await async_client.agents.with_raw_response.update( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - graph={"foo": "bar"}, - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - agent = await response.parse() - assert_matches_type(AgentUpdateResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_update(self, async_client: AsyncProfound) -> None: - async with async_client.agents.with_streaming_response.update( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - graph={"foo": "bar"}, - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - agent = await response.parse() - assert_matches_type(AgentUpdateResponse, agent, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_update(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `agent_id` but received ''"): - await async_client.agents.with_raw_response.update( - agent_id="", - graph={"foo": "bar"}, - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_list(self, async_client: AsyncProfound) -> None: - agent = await async_client.agents.list() - assert_matches_type(AgentListResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_list_with_all_params(self, async_client: AsyncProfound) -> None: - agent = await async_client.agents.list( - limit=1, - next_cursor="next_cursor", - statuses=["published", "draft"], - ) - assert_matches_type(AgentListResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_list(self, async_client: AsyncProfound) -> None: - response = await async_client.agents.with_raw_response.list() - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - agent = await response.parse() - assert_matches_type(AgentListResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_list(self, async_client: AsyncProfound) -> None: - async with async_client.agents.with_streaming_response.list() as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - agent = await response.parse() - assert_matches_type(AgentListResponse, agent, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_publish(self, async_client: AsyncProfound) -> None: - agent = await async_client.agents.publish( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(AgentPublishResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_publish(self, async_client: AsyncProfound) -> None: - response = await async_client.agents.with_raw_response.publish( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - agent = await response.parse() - assert_matches_type(AgentPublishResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_publish(self, async_client: AsyncProfound) -> None: - async with async_client.agents.with_streaming_response.publish( - "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - agent = await response.parse() - assert_matches_type(AgentPublishResponse, agent, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_publish(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `agent_id` but received ''"): - await async_client.agents.with_raw_response.publish( - "", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_retrieve_graph(self, async_client: AsyncProfound) -> None: - agent = await async_client.agents.retrieve_graph( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(AgentRetrieveGraphResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_retrieve_graph_with_all_params(self, async_client: AsyncProfound) -> None: - agent = await async_client.agents.retrieve_graph( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - version="published", - ) - assert_matches_type(AgentRetrieveGraphResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_retrieve_graph(self, async_client: AsyncProfound) -> None: - response = await async_client.agents.with_raw_response.retrieve_graph( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - agent = await response.parse() - assert_matches_type(AgentRetrieveGraphResponse, agent, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_retrieve_graph(self, async_client: AsyncProfound) -> None: - async with async_client.agents.with_streaming_response.retrieve_graph( - agent_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - agent = await response.parse() - assert_matches_type(AgentRetrieveGraphResponse, agent, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_retrieve_graph(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `agent_id` but received ''"): - await async_client.agents.with_raw_response.retrieve_graph( - agent_id="", - ) diff --git a/tests/api_resources/test_documents.py b/tests/api_resources/test_documents.py deleted file mode 100644 index 6d92e952..00000000 --- a/tests/api_resources/test_documents.py +++ /dev/null @@ -1,652 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import os -from typing import Any, cast - -import pytest - -from profound import Profound, AsyncProfound -from tests.utils import assert_matches_type -from profound.types import ( - DocumentListResponse, - DocumentCreateResponse, - DocumentUpdateResponse, - DocumentRetrieveResponse, - DocumentReplaceContentResponse, -) - -base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") - - -class TestDocuments: - parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create(self, client: Profound) -> None: - document = client.documents.create( - id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - content_markdown="x", - name="x", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(DocumentCreateResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_create(self, client: Profound) -> None: - response = client.documents.with_raw_response.create( - id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - content_markdown="x", - name="x", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - document = response.parse() - assert_matches_type(DocumentCreateResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_create(self, client: Profound) -> None: - with client.documents.with_streaming_response.create( - id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - content_markdown="x", - name="x", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - document = response.parse() - assert_matches_type(DocumentCreateResponse, document, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_retrieve(self, client: Profound) -> None: - document = client.documents.retrieve( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(DocumentRetrieveResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_retrieve_with_all_params(self, client: Profound) -> None: - document = client.documents.retrieve( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - include_comments=True, - include_tabs=True, - preview=True, - ) - assert_matches_type(DocumentRetrieveResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_retrieve(self, client: Profound) -> None: - response = client.documents.with_raw_response.retrieve( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - document = response.parse() - assert_matches_type(DocumentRetrieveResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_retrieve(self, client: Profound) -> None: - with client.documents.with_streaming_response.retrieve( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - document = response.parse() - assert_matches_type(DocumentRetrieveResponse, document, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_retrieve(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `document_id` but received ''"): - client.documents.with_raw_response.retrieve( - document_id="", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_update(self, client: Profound) -> None: - document = client.documents.update( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(DocumentUpdateResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_update_with_all_params(self, client: Profound) -> None: - document = client.documents.update( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - name="x", - visibility="invited_only", - ) - assert_matches_type(DocumentUpdateResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_update(self, client: Profound) -> None: - response = client.documents.with_raw_response.update( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - document = response.parse() - assert_matches_type(DocumentUpdateResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_update(self, client: Profound) -> None: - with client.documents.with_streaming_response.update( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - document = response.parse() - assert_matches_type(DocumentUpdateResponse, document, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_update(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `document_id` but received ''"): - client.documents.with_raw_response.update( - document_id="", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_list(self, client: Profound) -> None: - document = client.documents.list( - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(DocumentListResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_list_with_all_params(self, client: Profound) -> None: - document = client.documents.list( - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - limit=1, - next_cursor="next_cursor", - q="q", - sort="sort", - ) - assert_matches_type(DocumentListResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_list(self, client: Profound) -> None: - response = client.documents.with_raw_response.list( - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - document = response.parse() - assert_matches_type(DocumentListResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_list(self, client: Profound) -> None: - with client.documents.with_streaming_response.list( - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - document = response.parse() - assert_matches_type(DocumentListResponse, document, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_delete(self, client: Profound) -> None: - document = client.documents.delete( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert document is None - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_delete(self, client: Profound) -> None: - response = client.documents.with_raw_response.delete( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - document = response.parse() - assert document is None - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_delete(self, client: Profound) -> None: - with client.documents.with_streaming_response.delete( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - document = response.parse() - assert document is None - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_delete(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `document_id` but received ''"): - client.documents.with_raw_response.delete( - document_id="", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_replace_content(self, client: Profound) -> None: - document = client.documents.replace_content( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - content_markdown="content_markdown", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(DocumentReplaceContentResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_replace_content_with_all_params(self, client: Profound) -> None: - document = client.documents.replace_content( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - content_markdown="content_markdown", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - skip_title_sync=True, - ) - assert_matches_type(DocumentReplaceContentResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_replace_content(self, client: Profound) -> None: - response = client.documents.with_raw_response.replace_content( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - content_markdown="content_markdown", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - document = response.parse() - assert_matches_type(DocumentReplaceContentResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_replace_content(self, client: Profound) -> None: - with client.documents.with_streaming_response.replace_content( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - content_markdown="content_markdown", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - document = response.parse() - assert_matches_type(DocumentReplaceContentResponse, document, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_replace_content(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `document_id` but received ''"): - client.documents.with_raw_response.replace_content( - document_id="", - content_markdown="content_markdown", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - -class TestAsyncDocuments: - parametrize = pytest.mark.parametrize( - "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create(self, async_client: AsyncProfound) -> None: - document = await async_client.documents.create( - id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - content_markdown="x", - name="x", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(DocumentCreateResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_create(self, async_client: AsyncProfound) -> None: - response = await async_client.documents.with_raw_response.create( - id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - content_markdown="x", - name="x", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - document = await response.parse() - assert_matches_type(DocumentCreateResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_create(self, async_client: AsyncProfound) -> None: - async with async_client.documents.with_streaming_response.create( - id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - content_markdown="x", - name="x", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - document = await response.parse() - assert_matches_type(DocumentCreateResponse, document, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_retrieve(self, async_client: AsyncProfound) -> None: - document = await async_client.documents.retrieve( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(DocumentRetrieveResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_retrieve_with_all_params(self, async_client: AsyncProfound) -> None: - document = await async_client.documents.retrieve( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - include_comments=True, - include_tabs=True, - preview=True, - ) - assert_matches_type(DocumentRetrieveResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_retrieve(self, async_client: AsyncProfound) -> None: - response = await async_client.documents.with_raw_response.retrieve( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - document = await response.parse() - assert_matches_type(DocumentRetrieveResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_retrieve(self, async_client: AsyncProfound) -> None: - async with async_client.documents.with_streaming_response.retrieve( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - document = await response.parse() - assert_matches_type(DocumentRetrieveResponse, document, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_retrieve(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `document_id` but received ''"): - await async_client.documents.with_raw_response.retrieve( - document_id="", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_update(self, async_client: AsyncProfound) -> None: - document = await async_client.documents.update( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(DocumentUpdateResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_update_with_all_params(self, async_client: AsyncProfound) -> None: - document = await async_client.documents.update( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - name="x", - visibility="invited_only", - ) - assert_matches_type(DocumentUpdateResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_update(self, async_client: AsyncProfound) -> None: - response = await async_client.documents.with_raw_response.update( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - document = await response.parse() - assert_matches_type(DocumentUpdateResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_update(self, async_client: AsyncProfound) -> None: - async with async_client.documents.with_streaming_response.update( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - document = await response.parse() - assert_matches_type(DocumentUpdateResponse, document, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_update(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `document_id` but received ''"): - await async_client.documents.with_raw_response.update( - document_id="", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_list(self, async_client: AsyncProfound) -> None: - document = await async_client.documents.list( - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(DocumentListResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_list_with_all_params(self, async_client: AsyncProfound) -> None: - document = await async_client.documents.list( - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - limit=1, - next_cursor="next_cursor", - q="q", - sort="sort", - ) - assert_matches_type(DocumentListResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_list(self, async_client: AsyncProfound) -> None: - response = await async_client.documents.with_raw_response.list( - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - document = await response.parse() - assert_matches_type(DocumentListResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_list(self, async_client: AsyncProfound) -> None: - async with async_client.documents.with_streaming_response.list( - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - document = await response.parse() - assert_matches_type(DocumentListResponse, document, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_delete(self, async_client: AsyncProfound) -> None: - document = await async_client.documents.delete( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert document is None - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_delete(self, async_client: AsyncProfound) -> None: - response = await async_client.documents.with_raw_response.delete( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - document = await response.parse() - assert document is None - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_delete(self, async_client: AsyncProfound) -> None: - async with async_client.documents.with_streaming_response.delete( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - document = await response.parse() - assert document is None - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_delete(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `document_id` but received ''"): - await async_client.documents.with_raw_response.delete( - document_id="", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_replace_content(self, async_client: AsyncProfound) -> None: - document = await async_client.documents.replace_content( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - content_markdown="content_markdown", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(DocumentReplaceContentResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_replace_content_with_all_params(self, async_client: AsyncProfound) -> None: - document = await async_client.documents.replace_content( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - content_markdown="content_markdown", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - skip_title_sync=True, - ) - assert_matches_type(DocumentReplaceContentResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_replace_content(self, async_client: AsyncProfound) -> None: - response = await async_client.documents.with_raw_response.replace_content( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - content_markdown="content_markdown", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - document = await response.parse() - assert_matches_type(DocumentReplaceContentResponse, document, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_replace_content(self, async_client: AsyncProfound) -> None: - async with async_client.documents.with_streaming_response.replace_content( - document_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - content_markdown="content_markdown", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - document = await response.parse() - assert_matches_type(DocumentReplaceContentResponse, document, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_replace_content(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `document_id` but received ''"): - await async_client.documents.with_raw_response.replace_content( - document_id="", - content_markdown="content_markdown", - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) diff --git a/tests/api_resources/test_integrations.py b/tests/api_resources/test_integrations.py deleted file mode 100644 index 51289d7e..00000000 --- a/tests/api_resources/test_integrations.py +++ /dev/null @@ -1,100 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import os -from typing import Any, cast - -import pytest - -from profound import Profound, AsyncProfound -from tests.utils import assert_matches_type -from profound.types import IntegrationListResponse - -base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") - - -class TestIntegrations: - parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_list(self, client: Profound) -> None: - integration = client.integrations.list() - assert_matches_type(IntegrationListResponse, integration, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_list_with_all_params(self, client: Profound) -> None: - integration = client.integrations.list( - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - provider="provider", - status_filter="active", - ) - assert_matches_type(IntegrationListResponse, integration, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_list(self, client: Profound) -> None: - response = client.integrations.with_raw_response.list() - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - integration = response.parse() - assert_matches_type(IntegrationListResponse, integration, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_list(self, client: Profound) -> None: - with client.integrations.with_streaming_response.list() as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - integration = response.parse() - assert_matches_type(IntegrationListResponse, integration, path=["response"]) - - assert cast(Any, response.is_closed) is True - - -class TestAsyncIntegrations: - parametrize = pytest.mark.parametrize( - "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_list(self, async_client: AsyncProfound) -> None: - integration = await async_client.integrations.list() - assert_matches_type(IntegrationListResponse, integration, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_list_with_all_params(self, async_client: AsyncProfound) -> None: - integration = await async_client.integrations.list( - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - provider="provider", - status_filter="active", - ) - assert_matches_type(IntegrationListResponse, integration, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_list(self, async_client: AsyncProfound) -> None: - response = await async_client.integrations.with_raw_response.list() - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - integration = await response.parse() - assert_matches_type(IntegrationListResponse, integration, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_list(self, async_client: AsyncProfound) -> None: - async with async_client.integrations.with_streaming_response.list() as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - integration = await response.parse() - assert_matches_type(IntegrationListResponse, integration, path=["response"]) - - assert cast(Any, response.is_closed) is True diff --git a/tests/api_resources/test_knowledge_bases.py b/tests/api_resources/test_knowledge_bases.py deleted file mode 100644 index d7309e70..00000000 --- a/tests/api_resources/test_knowledge_bases.py +++ /dev/null @@ -1,231 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import os -from typing import Any, cast - -import pytest - -from profound import Profound, AsyncProfound -from tests.utils import assert_matches_type -from profound.types import ( - KnowledgeBaseListResponse, - KnowledgeBaseSearchResponse, -) - -base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") - - -class TestKnowledgeBases: - parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_list(self, client: Profound) -> None: - knowledge_base = client.knowledge_bases.list() - assert_matches_type(KnowledgeBaseListResponse, knowledge_base, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_list_with_all_params(self, client: Profound) -> None: - knowledge_base = client.knowledge_bases.list( - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(KnowledgeBaseListResponse, knowledge_base, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_list(self, client: Profound) -> None: - response = client.knowledge_bases.with_raw_response.list() - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - knowledge_base = response.parse() - assert_matches_type(KnowledgeBaseListResponse, knowledge_base, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_list(self, client: Profound) -> None: - with client.knowledge_bases.with_streaming_response.list() as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - knowledge_base = response.parse() - assert_matches_type(KnowledgeBaseListResponse, knowledge_base, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_search(self, client: Profound) -> None: - knowledge_base = client.knowledge_bases.search( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - query="x", - top_k=1, - ) - assert_matches_type(KnowledgeBaseSearchResponse, knowledge_base, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_search_with_all_params(self, client: Profound) -> None: - knowledge_base = client.knowledge_bases.search( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - query="x", - top_k=1, - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - filters={ - "folders": ["x"], - "tags": ["x"], - }, - return_full_page=True, - ) - assert_matches_type(KnowledgeBaseSearchResponse, knowledge_base, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_search(self, client: Profound) -> None: - response = client.knowledge_bases.with_raw_response.search( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - query="x", - top_k=1, - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - knowledge_base = response.parse() - assert_matches_type(KnowledgeBaseSearchResponse, knowledge_base, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_search(self, client: Profound) -> None: - with client.knowledge_bases.with_streaming_response.search( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - query="x", - top_k=1, - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - knowledge_base = response.parse() - assert_matches_type(KnowledgeBaseSearchResponse, knowledge_base, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_search(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `knowledge_base_id` but received ''"): - client.knowledge_bases.with_raw_response.search( - knowledge_base_id="", - query="x", - top_k=1, - ) - - -class TestAsyncKnowledgeBases: - parametrize = pytest.mark.parametrize( - "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_list(self, async_client: AsyncProfound) -> None: - knowledge_base = await async_client.knowledge_bases.list() - assert_matches_type(KnowledgeBaseListResponse, knowledge_base, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_list_with_all_params(self, async_client: AsyncProfound) -> None: - knowledge_base = await async_client.knowledge_bases.list( - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(KnowledgeBaseListResponse, knowledge_base, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_list(self, async_client: AsyncProfound) -> None: - response = await async_client.knowledge_bases.with_raw_response.list() - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - knowledge_base = await response.parse() - assert_matches_type(KnowledgeBaseListResponse, knowledge_base, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_list(self, async_client: AsyncProfound) -> None: - async with async_client.knowledge_bases.with_streaming_response.list() as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - knowledge_base = await response.parse() - assert_matches_type(KnowledgeBaseListResponse, knowledge_base, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_search(self, async_client: AsyncProfound) -> None: - knowledge_base = await async_client.knowledge_bases.search( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - query="x", - top_k=1, - ) - assert_matches_type(KnowledgeBaseSearchResponse, knowledge_base, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_search_with_all_params(self, async_client: AsyncProfound) -> None: - knowledge_base = await async_client.knowledge_bases.search( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - query="x", - top_k=1, - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - filters={ - "folders": ["x"], - "tags": ["x"], - }, - return_full_page=True, - ) - assert_matches_type(KnowledgeBaseSearchResponse, knowledge_base, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_search(self, async_client: AsyncProfound) -> None: - response = await async_client.knowledge_bases.with_raw_response.search( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - query="x", - top_k=1, - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - knowledge_base = await response.parse() - assert_matches_type(KnowledgeBaseSearchResponse, knowledge_base, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_search(self, async_client: AsyncProfound) -> None: - async with async_client.knowledge_bases.with_streaming_response.search( - knowledge_base_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - query="x", - top_k=1, - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - knowledge_base = await response.parse() - assert_matches_type(KnowledgeBaseSearchResponse, knowledge_base, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_search(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `knowledge_base_id` but received ''"): - await async_client.knowledge_bases.with_raw_response.search( - knowledge_base_id="", - query="x", - top_k=1, - ) diff --git a/tests/api_resources/test_organizations.py b/tests/api_resources/test_organizations.py deleted file mode 100644 index 5a8a8f09..00000000 --- a/tests/api_resources/test_organizations.py +++ /dev/null @@ -1,431 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import os -from typing import Any, cast - -import pytest - -from profound import Profound, AsyncProfound -from tests.utils import assert_matches_type -from profound.types import ( - OrganizationListResponse, - OrganizationModelsResponse, - OrganizationDomainsResponse, - OrganizationRegionsResponse, - OrganizationListAssetsResponse, - OrganizationGetPersonasResponse, -) - -base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") - - -class TestOrganizations: - parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_list(self, client: Profound) -> None: - organization = client.organizations.list() - assert_matches_type(OrganizationListResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_list(self, client: Profound) -> None: - response = client.organizations.with_raw_response.list() - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - organization = response.parse() - assert_matches_type(OrganizationListResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_list(self, client: Profound) -> None: - with client.organizations.with_streaming_response.list() as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - organization = response.parse() - assert_matches_type(OrganizationListResponse, organization, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_domains(self, client: Profound) -> None: - organization = client.organizations.domains() - assert_matches_type(OrganizationDomainsResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_domains_with_all_params(self, client: Profound) -> None: - organization = client.organizations.domains( - organization_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(OrganizationDomainsResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_domains(self, client: Profound) -> None: - response = client.organizations.with_raw_response.domains() - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - organization = response.parse() - assert_matches_type(OrganizationDomainsResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_domains(self, client: Profound) -> None: - with client.organizations.with_streaming_response.domains() as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - organization = response.parse() - assert_matches_type(OrganizationDomainsResponse, organization, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_get_personas(self, client: Profound) -> None: - organization = client.organizations.get_personas() - assert_matches_type(OrganizationGetPersonasResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_get_personas_with_all_params(self, client: Profound) -> None: - organization = client.organizations.get_personas( - organization_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(OrganizationGetPersonasResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_get_personas(self, client: Profound) -> None: - response = client.organizations.with_raw_response.get_personas() - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - organization = response.parse() - assert_matches_type(OrganizationGetPersonasResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_get_personas(self, client: Profound) -> None: - with client.organizations.with_streaming_response.get_personas() as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - organization = response.parse() - assert_matches_type(OrganizationGetPersonasResponse, organization, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_list_assets(self, client: Profound) -> None: - organization = client.organizations.list_assets() - assert_matches_type(OrganizationListAssetsResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_list_assets_with_all_params(self, client: Profound) -> None: - organization = client.organizations.list_assets( - organization_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(OrganizationListAssetsResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_list_assets(self, client: Profound) -> None: - response = client.organizations.with_raw_response.list_assets() - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - organization = response.parse() - assert_matches_type(OrganizationListAssetsResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_list_assets(self, client: Profound) -> None: - with client.organizations.with_streaming_response.list_assets() as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - organization = response.parse() - assert_matches_type(OrganizationListAssetsResponse, organization, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_models(self, client: Profound) -> None: - organization = client.organizations.models() - assert_matches_type(OrganizationModelsResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_models(self, client: Profound) -> None: - response = client.organizations.with_raw_response.models() - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - organization = response.parse() - assert_matches_type(OrganizationModelsResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_models(self, client: Profound) -> None: - with client.organizations.with_streaming_response.models() as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - organization = response.parse() - assert_matches_type(OrganizationModelsResponse, organization, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_regions(self, client: Profound) -> None: - organization = client.organizations.regions() - assert_matches_type(OrganizationRegionsResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_regions_with_all_params(self, client: Profound) -> None: - organization = client.organizations.regions( - organization_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(OrganizationRegionsResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_regions(self, client: Profound) -> None: - response = client.organizations.with_raw_response.regions() - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - organization = response.parse() - assert_matches_type(OrganizationRegionsResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_regions(self, client: Profound) -> None: - with client.organizations.with_streaming_response.regions() as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - organization = response.parse() - assert_matches_type(OrganizationRegionsResponse, organization, path=["response"]) - - assert cast(Any, response.is_closed) is True - - -class TestAsyncOrganizations: - parametrize = pytest.mark.parametrize( - "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_list(self, async_client: AsyncProfound) -> None: - organization = await async_client.organizations.list() - assert_matches_type(OrganizationListResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_list(self, async_client: AsyncProfound) -> None: - response = await async_client.organizations.with_raw_response.list() - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - organization = await response.parse() - assert_matches_type(OrganizationListResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_list(self, async_client: AsyncProfound) -> None: - async with async_client.organizations.with_streaming_response.list() as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - organization = await response.parse() - assert_matches_type(OrganizationListResponse, organization, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_domains(self, async_client: AsyncProfound) -> None: - organization = await async_client.organizations.domains() - assert_matches_type(OrganizationDomainsResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_domains_with_all_params(self, async_client: AsyncProfound) -> None: - organization = await async_client.organizations.domains( - organization_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(OrganizationDomainsResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_domains(self, async_client: AsyncProfound) -> None: - response = await async_client.organizations.with_raw_response.domains() - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - organization = await response.parse() - assert_matches_type(OrganizationDomainsResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_domains(self, async_client: AsyncProfound) -> None: - async with async_client.organizations.with_streaming_response.domains() as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - organization = await response.parse() - assert_matches_type(OrganizationDomainsResponse, organization, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_get_personas(self, async_client: AsyncProfound) -> None: - organization = await async_client.organizations.get_personas() - assert_matches_type(OrganizationGetPersonasResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_get_personas_with_all_params(self, async_client: AsyncProfound) -> None: - organization = await async_client.organizations.get_personas( - organization_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(OrganizationGetPersonasResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_get_personas(self, async_client: AsyncProfound) -> None: - response = await async_client.organizations.with_raw_response.get_personas() - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - organization = await response.parse() - assert_matches_type(OrganizationGetPersonasResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_get_personas(self, async_client: AsyncProfound) -> None: - async with async_client.organizations.with_streaming_response.get_personas() as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - organization = await response.parse() - assert_matches_type(OrganizationGetPersonasResponse, organization, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_list_assets(self, async_client: AsyncProfound) -> None: - organization = await async_client.organizations.list_assets() - assert_matches_type(OrganizationListAssetsResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_list_assets_with_all_params(self, async_client: AsyncProfound) -> None: - organization = await async_client.organizations.list_assets( - organization_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(OrganizationListAssetsResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_list_assets(self, async_client: AsyncProfound) -> None: - response = await async_client.organizations.with_raw_response.list_assets() - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - organization = await response.parse() - assert_matches_type(OrganizationListAssetsResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_list_assets(self, async_client: AsyncProfound) -> None: - async with async_client.organizations.with_streaming_response.list_assets() as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - organization = await response.parse() - assert_matches_type(OrganizationListAssetsResponse, organization, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_models(self, async_client: AsyncProfound) -> None: - organization = await async_client.organizations.models() - assert_matches_type(OrganizationModelsResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_models(self, async_client: AsyncProfound) -> None: - response = await async_client.organizations.with_raw_response.models() - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - organization = await response.parse() - assert_matches_type(OrganizationModelsResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_models(self, async_client: AsyncProfound) -> None: - async with async_client.organizations.with_streaming_response.models() as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - organization = await response.parse() - assert_matches_type(OrganizationModelsResponse, organization, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_regions(self, async_client: AsyncProfound) -> None: - organization = await async_client.organizations.regions() - assert_matches_type(OrganizationRegionsResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_regions_with_all_params(self, async_client: AsyncProfound) -> None: - organization = await async_client.organizations.regions( - organization_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"], - ) - assert_matches_type(OrganizationRegionsResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_regions(self, async_client: AsyncProfound) -> None: - response = await async_client.organizations.with_raw_response.regions() - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - organization = await response.parse() - assert_matches_type(OrganizationRegionsResponse, organization, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_regions(self, async_client: AsyncProfound) -> None: - async with async_client.organizations.with_streaming_response.regions() as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - organization = await response.parse() - assert_matches_type(OrganizationRegionsResponse, organization, path=["response"]) - - assert cast(Any, response.is_closed) is True diff --git a/tests/api_resources/test_projects.py b/tests/api_resources/test_projects.py deleted file mode 100644 index 953d6ee5..00000000 --- a/tests/api_resources/test_projects.py +++ /dev/null @@ -1,773 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import os -from typing import Any, cast - -import pytest - -from profound import Profound, AsyncProfound -from tests.utils import assert_matches_type -from profound.types import ( - ProjectListResponse, - ProjectCreateResponse, - ProjectArchiveResponse, - ProjectRetrieveResponse, - ProjectGetStatusResponse, - ProjectUnarchiveResponse, -) - -base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") - - -class TestProjects: - parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create(self, client: Profound) -> None: - project = client.projects.create( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(ProjectCreateResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_with_all_params(self, client: Profound) -> None: - project = client.projects.create( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - attachments=[ - { - "id": "x", - "data_base64": "x", - "mime_type": "x", - "name": "x", - "size_bytes": 1, - } - ], - focus="x", - generation_context={ - "date_range": { - "label": "x", - "preset": "x", - "end_date": "endDate", - "mode": "custom", - "start_date": "startDate", - }, - "platforms": [ - { - "id": "x", - "name": "x", - "slug": "slug", - } - ], - "project_categories": ["creative"], - "regions": [ - { - "id": "x", - "name": "x", - "slug": "slug", - } - ], - "tags": [ - { - "id": "x", - "name": "x", - "slug": "slug", - } - ], - }, - project_name="x", - title="x", - topics=["x"], - ) - assert_matches_type(ProjectCreateResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_create(self, client: Profound) -> None: - response = client.projects.with_raw_response.create( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - project = response.parse() - assert_matches_type(ProjectCreateResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_create(self, client: Profound) -> None: - with client.projects.with_streaming_response.create( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - project = response.parse() - assert_matches_type(ProjectCreateResponse, project, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_retrieve(self, client: Profound) -> None: - project = client.projects.retrieve( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(ProjectRetrieveResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_retrieve(self, client: Profound) -> None: - response = client.projects.with_raw_response.retrieve( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - project = response.parse() - assert_matches_type(ProjectRetrieveResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_retrieve(self, client: Profound) -> None: - with client.projects.with_streaming_response.retrieve( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - project = response.parse() - assert_matches_type(ProjectRetrieveResponse, project, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_retrieve(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `project_id` but received ''"): - client.projects.with_raw_response.retrieve( - project_id="", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_list(self, client: Profound) -> None: - project = client.projects.list( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(ProjectListResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_list_with_all_params(self, client: Profound) -> None: - project = client.projects.list( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - limit=1, - offset=0, - status="status", - ) - assert_matches_type(ProjectListResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_list(self, client: Profound) -> None: - response = client.projects.with_raw_response.list( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - project = response.parse() - assert_matches_type(ProjectListResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_list(self, client: Profound) -> None: - with client.projects.with_streaming_response.list( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - project = response.parse() - assert_matches_type(ProjectListResponse, project, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_delete(self, client: Profound) -> None: - project = client.projects.delete( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert project is None - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_delete(self, client: Profound) -> None: - response = client.projects.with_raw_response.delete( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - project = response.parse() - assert project is None - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_delete(self, client: Profound) -> None: - with client.projects.with_streaming_response.delete( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - project = response.parse() - assert project is None - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_delete(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `project_id` but received ''"): - client.projects.with_raw_response.delete( - project_id="", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_archive(self, client: Profound) -> None: - project = client.projects.archive( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(ProjectArchiveResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_archive_with_all_params(self, client: Profound) -> None: - project = client.projects.archive( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - reason="x", - ) - assert_matches_type(ProjectArchiveResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_archive(self, client: Profound) -> None: - response = client.projects.with_raw_response.archive( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - project = response.parse() - assert_matches_type(ProjectArchiveResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_archive(self, client: Profound) -> None: - with client.projects.with_streaming_response.archive( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - project = response.parse() - assert_matches_type(ProjectArchiveResponse, project, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_archive(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `project_id` but received ''"): - client.projects.with_raw_response.archive( - project_id="", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_get_status(self, client: Profound) -> None: - project = client.projects.get_status( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(ProjectGetStatusResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_get_status(self, client: Profound) -> None: - response = client.projects.with_raw_response.get_status( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - project = response.parse() - assert_matches_type(ProjectGetStatusResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_get_status(self, client: Profound) -> None: - with client.projects.with_streaming_response.get_status( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - project = response.parse() - assert_matches_type(ProjectGetStatusResponse, project, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_get_status(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `project_id` but received ''"): - client.projects.with_raw_response.get_status( - project_id="", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_unarchive(self, client: Profound) -> None: - project = client.projects.unarchive( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(ProjectUnarchiveResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_unarchive(self, client: Profound) -> None: - response = client.projects.with_raw_response.unarchive( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - project = response.parse() - assert_matches_type(ProjectUnarchiveResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_unarchive(self, client: Profound) -> None: - with client.projects.with_streaming_response.unarchive( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - project = response.parse() - assert_matches_type(ProjectUnarchiveResponse, project, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_unarchive(self, client: Profound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `project_id` but received ''"): - client.projects.with_raw_response.unarchive( - project_id="", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - -class TestAsyncProjects: - parametrize = pytest.mark.parametrize( - "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create(self, async_client: AsyncProfound) -> None: - project = await async_client.projects.create( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(ProjectCreateResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_with_all_params(self, async_client: AsyncProfound) -> None: - project = await async_client.projects.create( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - attachments=[ - { - "id": "x", - "data_base64": "x", - "mime_type": "x", - "name": "x", - "size_bytes": 1, - } - ], - focus="x", - generation_context={ - "date_range": { - "label": "x", - "preset": "x", - "end_date": "endDate", - "mode": "custom", - "start_date": "startDate", - }, - "platforms": [ - { - "id": "x", - "name": "x", - "slug": "slug", - } - ], - "project_categories": ["creative"], - "regions": [ - { - "id": "x", - "name": "x", - "slug": "slug", - } - ], - "tags": [ - { - "id": "x", - "name": "x", - "slug": "slug", - } - ], - }, - project_name="x", - title="x", - topics=["x"], - ) - assert_matches_type(ProjectCreateResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_create(self, async_client: AsyncProfound) -> None: - response = await async_client.projects.with_raw_response.create( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - project = await response.parse() - assert_matches_type(ProjectCreateResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_create(self, async_client: AsyncProfound) -> None: - async with async_client.projects.with_streaming_response.create( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - project = await response.parse() - assert_matches_type(ProjectCreateResponse, project, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_retrieve(self, async_client: AsyncProfound) -> None: - project = await async_client.projects.retrieve( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(ProjectRetrieveResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_retrieve(self, async_client: AsyncProfound) -> None: - response = await async_client.projects.with_raw_response.retrieve( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - project = await response.parse() - assert_matches_type(ProjectRetrieveResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_retrieve(self, async_client: AsyncProfound) -> None: - async with async_client.projects.with_streaming_response.retrieve( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - project = await response.parse() - assert_matches_type(ProjectRetrieveResponse, project, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_retrieve(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `project_id` but received ''"): - await async_client.projects.with_raw_response.retrieve( - project_id="", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_list(self, async_client: AsyncProfound) -> None: - project = await async_client.projects.list( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(ProjectListResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_list_with_all_params(self, async_client: AsyncProfound) -> None: - project = await async_client.projects.list( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - limit=1, - offset=0, - status="status", - ) - assert_matches_type(ProjectListResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_list(self, async_client: AsyncProfound) -> None: - response = await async_client.projects.with_raw_response.list( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - project = await response.parse() - assert_matches_type(ProjectListResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_list(self, async_client: AsyncProfound) -> None: - async with async_client.projects.with_streaming_response.list( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - project = await response.parse() - assert_matches_type(ProjectListResponse, project, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_delete(self, async_client: AsyncProfound) -> None: - project = await async_client.projects.delete( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert project is None - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_delete(self, async_client: AsyncProfound) -> None: - response = await async_client.projects.with_raw_response.delete( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - project = await response.parse() - assert project is None - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_delete(self, async_client: AsyncProfound) -> None: - async with async_client.projects.with_streaming_response.delete( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - project = await response.parse() - assert project is None - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_delete(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `project_id` but received ''"): - await async_client.projects.with_raw_response.delete( - project_id="", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_archive(self, async_client: AsyncProfound) -> None: - project = await async_client.projects.archive( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(ProjectArchiveResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_archive_with_all_params(self, async_client: AsyncProfound) -> None: - project = await async_client.projects.archive( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - reason="x", - ) - assert_matches_type(ProjectArchiveResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_archive(self, async_client: AsyncProfound) -> None: - response = await async_client.projects.with_raw_response.archive( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - project = await response.parse() - assert_matches_type(ProjectArchiveResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_archive(self, async_client: AsyncProfound) -> None: - async with async_client.projects.with_streaming_response.archive( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - project = await response.parse() - assert_matches_type(ProjectArchiveResponse, project, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_archive(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `project_id` but received ''"): - await async_client.projects.with_raw_response.archive( - project_id="", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_get_status(self, async_client: AsyncProfound) -> None: - project = await async_client.projects.get_status( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(ProjectGetStatusResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_get_status(self, async_client: AsyncProfound) -> None: - response = await async_client.projects.with_raw_response.get_status( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - project = await response.parse() - assert_matches_type(ProjectGetStatusResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_get_status(self, async_client: AsyncProfound) -> None: - async with async_client.projects.with_streaming_response.get_status( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - project = await response.parse() - assert_matches_type(ProjectGetStatusResponse, project, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_get_status(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `project_id` but received ''"): - await async_client.projects.with_raw_response.get_status( - project_id="", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_unarchive(self, async_client: AsyncProfound) -> None: - project = await async_client.projects.unarchive( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - assert_matches_type(ProjectUnarchiveResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_unarchive(self, async_client: AsyncProfound) -> None: - response = await async_client.projects.with_raw_response.unarchive( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - project = await response.parse() - assert_matches_type(ProjectUnarchiveResponse, project, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_unarchive(self, async_client: AsyncProfound) -> None: - async with async_client.projects.with_streaming_response.unarchive( - project_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - project = await response.parse() - assert_matches_type(ProjectUnarchiveResponse, project, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_path_params_unarchive(self, async_client: AsyncProfound) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `project_id` but received ''"): - await async_client.projects.with_raw_response.unarchive( - project_id="", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - ) diff --git a/tests/api_resources/test_prompts.py b/tests/api_resources/test_prompts.py deleted file mode 100644 index b59bcb1e..00000000 --- a/tests/api_resources/test_prompts.py +++ /dev/null @@ -1,444 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import os -from typing import Any, cast - -import pytest - -from profound import Profound, AsyncProfound -from tests.utils import assert_matches_type -from profound.types import ( - PromptAnswersResponse, - PromptAnswersV2Response, -) -from profound._utils import parse_datetime - -base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") - - -class TestPrompts: - parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_answers(self, client: Profound) -> None: - prompt = client.prompts.answers( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - assert_matches_type(PromptAnswersResponse, prompt, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_answers_with_all_params(self, client: Profound) -> None: - prompt = client.prompts.answers( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - filters=[ - { - "field": "region_id", - "operator": "is", - "value": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - } - ], - include={ - "analysis_types": True, - "asset": True, - "asset_id": True, - "citation_details": True, - "citations": True, - "created_at": True, - "mentions": True, - "model": True, - "model_id": True, - "persona": True, - "prompt": True, - "prompt_id": True, - "prompt_type": True, - "region": True, - "response": True, - "run_id": True, - "search_queries": True, - "search_triggered": True, - "sentiment_themes": True, - "tags": True, - "themes": True, - "topic": True, - "topic_id": True, - "web_search_results": True, - }, - pagination={ - "limit": 1, - "offset": 0, - }, - ) - assert_matches_type(PromptAnswersResponse, prompt, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_answers(self, client: Profound) -> None: - response = client.prompts.with_raw_response.answers( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - prompt = response.parse() - assert_matches_type(PromptAnswersResponse, prompt, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_answers(self, client: Profound) -> None: - with client.prompts.with_streaming_response.answers( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - prompt = response.parse() - assert_matches_type(PromptAnswersResponse, prompt, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_answers_v2(self, client: Profound) -> None: - prompt = client.prompts.answers_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(PromptAnswersV2Response, prompt, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_answers_v2_with_all_params(self, client: Profound) -> None: - prompt = client.prompts.answers_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - include=["run_id"], - limit=1, - max_results=1, - ) - assert_matches_type(PromptAnswersV2Response, prompt, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_answers_v2(self, client: Profound) -> None: - response = client.prompts.with_raw_response.answers_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - prompt = response.parse() - assert_matches_type(PromptAnswersV2Response, prompt, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_answers_v2(self, client: Profound) -> None: - with client.prompts.with_streaming_response.answers_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - prompt = response.parse() - assert_matches_type(PromptAnswersV2Response, prompt, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_answers_v2(self, client: Profound) -> None: - prompt_stream = client.prompts.stream_answers_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - prompt_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_answers_v2_with_all_params(self, client: Profound) -> None: - prompt_stream = client.prompts.stream_answers_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - include=["run_id"], - limit=1, - max_results=1, - ) - prompt_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_stream_answers_v2(self, client: Profound) -> None: - response = client.prompts.with_raw_response.stream_answers_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = response.parse() - stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_stream_answers_v2(self, client: Profound) -> None: - with client.prompts.with_streaming_response.stream_answers_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = response.parse() - stream.close() - - assert cast(Any, response.is_closed) is True - - -class TestAsyncPrompts: - parametrize = pytest.mark.parametrize( - "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_answers(self, async_client: AsyncProfound) -> None: - prompt = await async_client.prompts.answers( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - assert_matches_type(PromptAnswersResponse, prompt, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_answers_with_all_params(self, async_client: AsyncProfound) -> None: - prompt = await async_client.prompts.answers( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - filters=[ - { - "field": "region_id", - "operator": "is", - "value": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - } - ], - include={ - "analysis_types": True, - "asset": True, - "asset_id": True, - "citation_details": True, - "citations": True, - "created_at": True, - "mentions": True, - "model": True, - "model_id": True, - "persona": True, - "prompt": True, - "prompt_id": True, - "prompt_type": True, - "region": True, - "response": True, - "run_id": True, - "search_queries": True, - "search_triggered": True, - "sentiment_themes": True, - "tags": True, - "themes": True, - "topic": True, - "topic_id": True, - "web_search_results": True, - }, - pagination={ - "limit": 1, - "offset": 0, - }, - ) - assert_matches_type(PromptAnswersResponse, prompt, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_answers(self, async_client: AsyncProfound) -> None: - response = await async_client.prompts.with_raw_response.answers( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - prompt = await response.parse() - assert_matches_type(PromptAnswersResponse, prompt, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_answers(self, async_client: AsyncProfound) -> None: - async with async_client.prompts.with_streaming_response.answers( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - prompt = await response.parse() - assert_matches_type(PromptAnswersResponse, prompt, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_answers_v2(self, async_client: AsyncProfound) -> None: - prompt = await async_client.prompts.answers_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(PromptAnswersV2Response, prompt, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_answers_v2_with_all_params(self, async_client: AsyncProfound) -> None: - prompt = await async_client.prompts.answers_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - include=["run_id"], - limit=1, - max_results=1, - ) - assert_matches_type(PromptAnswersV2Response, prompt, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_answers_v2(self, async_client: AsyncProfound) -> None: - response = await async_client.prompts.with_raw_response.answers_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - prompt = await response.parse() - assert_matches_type(PromptAnswersV2Response, prompt, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_answers_v2(self, async_client: AsyncProfound) -> None: - async with async_client.prompts.with_streaming_response.answers_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - prompt = await response.parse() - assert_matches_type(PromptAnswersV2Response, prompt, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_answers_v2(self, async_client: AsyncProfound) -> None: - prompt_stream = await async_client.prompts.stream_answers_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - await prompt_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_answers_v2_with_all_params(self, async_client: AsyncProfound) -> None: - prompt_stream = await async_client.prompts.stream_answers_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - include=["run_id"], - limit=1, - max_results=1, - ) - await prompt_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_stream_answers_v2(self, async_client: AsyncProfound) -> None: - response = await async_client.prompts.with_raw_response.stream_answers_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = await response.parse() - await stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_stream_answers_v2(self, async_client: AsyncProfound) -> None: - async with async_client.prompts.with_streaming_response.stream_answers_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = await response.parse() - await stream.close() - - assert cast(Any, response.is_closed) is True diff --git a/tests/api_resources/test_reports.py b/tests/api_resources/test_reports.py deleted file mode 100644 index d697d231..00000000 --- a/tests/api_resources/test_reports.py +++ /dev/null @@ -1,2799 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import os -from typing import Any, cast - -import pytest - -from profound import Profound, AsyncProfound -from tests.utils import assert_matches_type -from profound.types import ( - ReportResponse, - ReportCitationsResponse, - ReportSentimentV2Response, - ReportQueryCitationsResponse, - ReportQuerySentimentResponse, - ReportQueryVisibilityResponse, - ReportQueryQueryFanoutsResponse, -) -from profound._utils import parse_datetime - -base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") - - -class TestReports: - parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_citations(self, client: Profound) -> None: - report = client.reports.citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - assert_matches_type(ReportCitationsResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_citations_with_all_params(self, client: Profound) -> None: - report = client.reports.citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_interval="hour", - dimensions=["hostname"], - filters=[ - { - "field": "hostname", - "operator": "is", - "value": "string", - } - ], - order_by={"date": "asc"}, - pagination={ - "limit": 1, - "offset": 0, - }, - ) - assert_matches_type(ReportCitationsResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_citations(self, client: Profound) -> None: - response = client.reports.with_raw_response.citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - report = response.parse() - assert_matches_type(ReportCitationsResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_citations(self, client: Profound) -> None: - with client.reports.with_streaming_response.citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - report = response.parse() - assert_matches_type(ReportCitationsResponse, report, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_get_bots_report(self, client: Profound) -> None: - report = client.reports.get_bots_report( - domain="domain", - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_get_bots_report_with_all_params(self, client: Profound) -> None: - report = client.reports.get_bots_report( - domain="domain", - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_interval="hour", - dimensions=["date"], - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - filters=[ - { - "field": "path", - "operator": "is", - "value": "string", - } - ], - metric_filters=[ - { - "field": "field", - "operator": ">", - "value": 0, - } - ], - order_by={"date": "asc"}, - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - pagination={ - "limit": 1, - "offset": 0, - }, - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_get_bots_report(self, client: Profound) -> None: - response = client.reports.with_raw_response.get_bots_report( - domain="domain", - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - report = response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_get_bots_report(self, client: Profound) -> None: - with client.reports.with_streaming_response.get_bots_report( - domain="domain", - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - report = response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_get_bots_report_v2(self, client: Profound) -> None: - report = client.reports.get_bots_report_v2( - domain="domain", - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_get_bots_report_v2_with_all_params(self, client: Profound) -> None: - report = client.reports.get_bots_report_v2( - domain="domain", - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_interval="hour", - dimensions=["date"], - domain_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - filters=[ - { - "field": "path", - "operator": "is", - "value": "string", - } - ], - metric_filters=[ - { - "field": "field", - "operator": ">", - "value": 0, - } - ], - order_by={"date": "asc"}, - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - pagination={ - "limit": 1, - "offset": 0, - }, - tags=["string"], - timezone="timezone", - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_get_bots_report_v2(self, client: Profound) -> None: - response = client.reports.with_raw_response.get_bots_report_v2( - domain="domain", - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - report = response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_get_bots_report_v2(self, client: Profound) -> None: - with client.reports.with_streaming_response.get_bots_report_v2( - domain="domain", - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - report = response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_get_referrals_report(self, client: Profound) -> None: - report = client.reports.get_referrals_report( - domain="domain", - metrics=["visits"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_get_referrals_report_with_all_params(self, client: Profound) -> None: - report = client.reports.get_referrals_report( - domain="domain", - metrics=["visits"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_interval="hour", - dimensions=["date"], - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - filters=[ - { - "field": "path", - "operator": "is", - "value": "string", - } - ], - metric_filters=[ - { - "field": "field", - "operator": ">", - "value": 0, - } - ], - order_by={"date": "asc"}, - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - pagination={ - "limit": 1, - "offset": 0, - }, - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_get_referrals_report(self, client: Profound) -> None: - response = client.reports.with_raw_response.get_referrals_report( - domain="domain", - metrics=["visits"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - report = response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_get_referrals_report(self, client: Profound) -> None: - with client.reports.with_streaming_response.get_referrals_report( - domain="domain", - metrics=["visits"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - report = response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_get_referrals_report_v2(self, client: Profound) -> None: - report = client.reports.get_referrals_report_v2( - domain="domain", - metrics=["visits"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_get_referrals_report_v2_with_all_params(self, client: Profound) -> None: - report = client.reports.get_referrals_report_v2( - domain="domain", - metrics=["visits"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_interval="hour", - dimensions=["date"], - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - filters=[ - { - "field": "path", - "operator": "is", - "value": "string", - } - ], - metric_filters=[ - { - "field": "field", - "operator": ">", - "value": 0, - } - ], - order_by={"date": "asc"}, - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - pagination={ - "limit": 1, - "offset": 0, - }, - timezone="timezone", - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_get_referrals_report_v2(self, client: Profound) -> None: - response = client.reports.with_raw_response.get_referrals_report_v2( - domain="domain", - metrics=["visits"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - report = response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_get_referrals_report_v2(self, client: Profound) -> None: - with client.reports.with_streaming_response.get_referrals_report_v2( - domain="domain", - metrics=["visits"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - report = response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_query_citations(self, client: Profound) -> None: - report = client.reports.query_citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(ReportQueryCitationsResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_query_citations_with_all_params(self, client: Profound) -> None: - report = client.reports.query_citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - entity="domain", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["page"], - interval="day", - limit=1, - max_results=1, - metrics=["count"], - scope="all", - ) - assert_matches_type(ReportQueryCitationsResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_query_citations(self, client: Profound) -> None: - response = client.reports.with_raw_response.query_citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - report = response.parse() - assert_matches_type(ReportQueryCitationsResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_query_citations(self, client: Profound) -> None: - with client.reports.with_streaming_response.query_citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - report = response.parse() - assert_matches_type(ReportQueryCitationsResponse, report, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_query_fanouts(self, client: Profound) -> None: - report = client.reports.query_fanouts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["fanouts_per_execution"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_query_fanouts_with_all_params(self, client: Profound) -> None: - report = client.reports.query_fanouts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["fanouts_per_execution"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_interval="hour", - dimensions=["prompt"], - filters=[ - { - "field": "region_id", - "operator": "is", - "value": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - } - ], - order_by={"fanouts_per_execution": "desc"}, - pagination={ - "limit": 1, - "offset": 0, - }, - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_query_fanouts(self, client: Profound) -> None: - response = client.reports.with_raw_response.query_fanouts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["fanouts_per_execution"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - report = response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_query_fanouts(self, client: Profound) -> None: - with client.reports.with_streaming_response.query_fanouts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["fanouts_per_execution"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - report = response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_query_query_fanouts(self, client: Profound) -> None: - report = client.reports.query_query_fanouts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(ReportQueryQueryFanoutsResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_query_query_fanouts_with_all_params(self, client: Profound) -> None: - report = client.reports.query_query_fanouts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - interval="day", - limit=1, - max_results=1, - metrics=["fanouts_per_execution"], - sort={ - "field": "field", - "dir": "asc", - }, - ) - assert_matches_type(ReportQueryQueryFanoutsResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_query_query_fanouts(self, client: Profound) -> None: - response = client.reports.with_raw_response.query_query_fanouts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - report = response.parse() - assert_matches_type(ReportQueryQueryFanoutsResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_query_query_fanouts(self, client: Profound) -> None: - with client.reports.with_streaming_response.query_query_fanouts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - report = response.parse() - assert_matches_type(ReportQueryQueryFanoutsResponse, report, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_query_sentiment(self, client: Profound) -> None: - report = client.reports.query_sentiment( - asset="asset", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(ReportQuerySentimentResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_query_sentiment_with_all_params(self, client: Profound) -> None: - report = client.reports.query_sentiment( - asset="asset", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - comparison_end_date="comparison_end_date", - comparison_start_date="comparison_start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - include_cited_websites=True, - interval="day", - limit=1, - max_results=1, - metrics=["positive_sentiment"], - sort={ - "dir": "asc", - "field": "occurrence", - }, - ) - assert_matches_type(ReportQuerySentimentResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_query_sentiment(self, client: Profound) -> None: - response = client.reports.with_raw_response.query_sentiment( - asset="asset", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - report = response.parse() - assert_matches_type(ReportQuerySentimentResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_query_sentiment(self, client: Profound) -> None: - with client.reports.with_streaming_response.query_sentiment( - asset="asset", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - report = response.parse() - assert_matches_type(ReportQuerySentimentResponse, report, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_query_visibility(self, client: Profound) -> None: - report = client.reports.query_visibility( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(ReportQueryVisibilityResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_query_visibility_with_all_params(self, client: Profound) -> None: - report = client.reports.query_visibility( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - assets="string", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - interval="day", - limit=1, - max_results=1, - metrics=["visibility_score"], - scope="owned", - sort={"field": "visibility_score"}, - ) - assert_matches_type(ReportQueryVisibilityResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_query_visibility(self, client: Profound) -> None: - response = client.reports.with_raw_response.query_visibility( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - report = response.parse() - assert_matches_type(ReportQueryVisibilityResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_query_visibility(self, client: Profound) -> None: - with client.reports.with_streaming_response.query_visibility( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - report = response.parse() - assert_matches_type(ReportQueryVisibilityResponse, report, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_sentiment(self, client: Profound) -> None: - report = client.reports.sentiment( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["positive"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_sentiment_with_all_params(self, client: Profound) -> None: - report = client.reports.sentiment( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["positive"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_interval="hour", - dimensions=["theme"], - filters=[ - { - "field": "asset_id", - "operator": "is", - "value": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - } - ], - order_by={"date": "asc"}, - pagination={ - "limit": 1, - "offset": 0, - }, - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_sentiment(self, client: Profound) -> None: - response = client.reports.with_raw_response.sentiment( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["positive"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - report = response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_sentiment(self, client: Profound) -> None: - with client.reports.with_streaming_response.sentiment( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["positive"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - report = response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_sentiment_v2(self, client: Profound) -> None: - report = client.reports.sentiment_v2( - asset_name="asset_name", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["sentiment"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - assert_matches_type(ReportSentimentV2Response, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_sentiment_v2_with_all_params(self, client: Profound) -> None: - report = client.reports.sentiment_v2( - asset_name="asset_name", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["sentiment"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - comparison_end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - comparison_start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_bucket="day", - dimensions=["date"], - filters=[ - { - "field": "model_id", - "operator": "is", - "value": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - } - ], - order_by={"occurrence": "desc"}, - pagination={ - "limit": 1, - "offset": 0, - }, - ) - assert_matches_type(ReportSentimentV2Response, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_sentiment_v2(self, client: Profound) -> None: - response = client.reports.with_raw_response.sentiment_v2( - asset_name="asset_name", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["sentiment"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - report = response.parse() - assert_matches_type(ReportSentimentV2Response, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_sentiment_v2(self, client: Profound) -> None: - with client.reports.with_streaming_response.sentiment_v2( - asset_name="asset_name", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["sentiment"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - report = response.parse() - assert_matches_type(ReportSentimentV2Response, report, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_citations(self, client: Profound) -> None: - report_stream = client.reports.stream_citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - report_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_citations_with_all_params(self, client: Profound) -> None: - report_stream = client.reports.stream_citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_interval="hour", - dimensions=["hostname"], - filters=[ - { - "field": "hostname", - "operator": "is", - "value": "string", - } - ], - order_by={"date": "asc"}, - pagination={ - "limit": 1, - "offset": 0, - }, - ) - report_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_stream_citations(self, client: Profound) -> None: - response = client.reports.with_raw_response.stream_citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = response.parse() - stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_stream_citations(self, client: Profound) -> None: - with client.reports.with_streaming_response.stream_citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = response.parse() - stream.close() - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_citations_v2(self, client: Profound) -> None: - report_stream = client.reports.stream_citations_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - report_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_citations_v2_with_all_params(self, client: Profound) -> None: - report_stream = client.reports.stream_citations_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - entity="domain", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["page"], - interval="day", - limit=1, - max_results=1, - metrics=["count"], - scope="all", - ) - report_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_stream_citations_v2(self, client: Profound) -> None: - response = client.reports.with_raw_response.stream_citations_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = response.parse() - stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_stream_citations_v2(self, client: Profound) -> None: - with client.reports.with_streaming_response.stream_citations_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = response.parse() - stream.close() - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_query_fanouts(self, client: Profound) -> None: - report_stream = client.reports.stream_query_fanouts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - report_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_query_fanouts_with_all_params(self, client: Profound) -> None: - report_stream = client.reports.stream_query_fanouts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - interval="day", - limit=1, - max_results=1, - metrics=["fanouts_per_execution"], - sort={ - "field": "field", - "dir": "asc", - }, - ) - report_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_stream_query_fanouts(self, client: Profound) -> None: - response = client.reports.with_raw_response.stream_query_fanouts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = response.parse() - stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_stream_query_fanouts(self, client: Profound) -> None: - with client.reports.with_streaming_response.stream_query_fanouts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = response.parse() - stream.close() - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_sentiment(self, client: Profound) -> None: - report_stream = client.reports.stream_sentiment( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["positive"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - report_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_sentiment_with_all_params(self, client: Profound) -> None: - report_stream = client.reports.stream_sentiment( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["positive"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_interval="hour", - dimensions=["theme"], - filters=[ - { - "field": "asset_id", - "operator": "is", - "value": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - } - ], - order_by={"date": "asc"}, - pagination={ - "limit": 1, - "offset": 0, - }, - ) - report_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_stream_sentiment(self, client: Profound) -> None: - response = client.reports.with_raw_response.stream_sentiment( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["positive"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = response.parse() - stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_stream_sentiment(self, client: Profound) -> None: - with client.reports.with_streaming_response.stream_sentiment( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["positive"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = response.parse() - stream.close() - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_sentiment_v2(self, client: Profound) -> None: - report_stream = client.reports.stream_sentiment_v2( - asset="asset", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - report_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_sentiment_v2_with_all_params(self, client: Profound) -> None: - report_stream = client.reports.stream_sentiment_v2( - asset="asset", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - comparison_end_date="comparison_end_date", - comparison_start_date="comparison_start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - include_cited_websites=True, - interval="day", - limit=1, - max_results=1, - metrics=["positive_sentiment"], - sort={ - "dir": "asc", - "field": "occurrence", - }, - ) - report_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_stream_sentiment_v2(self, client: Profound) -> None: - response = client.reports.with_raw_response.stream_sentiment_v2( - asset="asset", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = response.parse() - stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_stream_sentiment_v2(self, client: Profound) -> None: - with client.reports.with_streaming_response.stream_sentiment_v2( - asset="asset", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = response.parse() - stream.close() - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_visibility(self, client: Profound) -> None: - report_stream = client.reports.stream_visibility( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["share_of_voice"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - report_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_visibility_with_all_params(self, client: Profound) -> None: - report_stream = client.reports.stream_visibility( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["share_of_voice"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_interval="hour", - dimensions=["date"], - filters=[ - { - "field": "region_id", - "operator": "is", - "value": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - } - ], - order_by={"date": "asc"}, - pagination={ - "limit": 1, - "offset": 0, - }, - ) - report_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_stream_visibility(self, client: Profound) -> None: - response = client.reports.with_raw_response.stream_visibility( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["share_of_voice"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = response.parse() - stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_stream_visibility(self, client: Profound) -> None: - with client.reports.with_streaming_response.stream_visibility( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["share_of_voice"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = response.parse() - stream.close() - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_visibility_v2(self, client: Profound) -> None: - report_stream = client.reports.stream_visibility_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - report_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_stream_visibility_v2_with_all_params(self, client: Profound) -> None: - report_stream = client.reports.stream_visibility_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - assets="string", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - interval="day", - limit=1, - max_results=1, - metrics=["visibility_score"], - scope="owned", - sort={"field": "visibility_score"}, - ) - report_stream.response.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_stream_visibility_v2(self, client: Profound) -> None: - response = client.reports.with_raw_response.stream_visibility_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = response.parse() - stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_stream_visibility_v2(self, client: Profound) -> None: - with client.reports.with_streaming_response.stream_visibility_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = response.parse() - stream.close() - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_visibility(self, client: Profound) -> None: - report = client.reports.visibility( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["share_of_voice"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_visibility_with_all_params(self, client: Profound) -> None: - report = client.reports.visibility( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["share_of_voice"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_interval="hour", - dimensions=["date"], - filters=[ - { - "field": "region_id", - "operator": "is", - "value": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - } - ], - order_by={"date": "asc"}, - pagination={ - "limit": 1, - "offset": 0, - }, - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_visibility(self, client: Profound) -> None: - response = client.reports.with_raw_response.visibility( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["share_of_voice"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - report = response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_visibility(self, client: Profound) -> None: - with client.reports.with_streaming_response.visibility( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["share_of_voice"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - report = response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - assert cast(Any, response.is_closed) is True - - -class TestAsyncReports: - parametrize = pytest.mark.parametrize( - "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] - ) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_citations(self, async_client: AsyncProfound) -> None: - report = await async_client.reports.citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - assert_matches_type(ReportCitationsResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_citations_with_all_params(self, async_client: AsyncProfound) -> None: - report = await async_client.reports.citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_interval="hour", - dimensions=["hostname"], - filters=[ - { - "field": "hostname", - "operator": "is", - "value": "string", - } - ], - order_by={"date": "asc"}, - pagination={ - "limit": 1, - "offset": 0, - }, - ) - assert_matches_type(ReportCitationsResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_citations(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.with_raw_response.citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - report = await response.parse() - assert_matches_type(ReportCitationsResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_citations(self, async_client: AsyncProfound) -> None: - async with async_client.reports.with_streaming_response.citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - report = await response.parse() - assert_matches_type(ReportCitationsResponse, report, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_get_bots_report(self, async_client: AsyncProfound) -> None: - report = await async_client.reports.get_bots_report( - domain="domain", - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_get_bots_report_with_all_params(self, async_client: AsyncProfound) -> None: - report = await async_client.reports.get_bots_report( - domain="domain", - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_interval="hour", - dimensions=["date"], - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - filters=[ - { - "field": "path", - "operator": "is", - "value": "string", - } - ], - metric_filters=[ - { - "field": "field", - "operator": ">", - "value": 0, - } - ], - order_by={"date": "asc"}, - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - pagination={ - "limit": 1, - "offset": 0, - }, - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_get_bots_report(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.with_raw_response.get_bots_report( - domain="domain", - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - report = await response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_get_bots_report(self, async_client: AsyncProfound) -> None: - async with async_client.reports.with_streaming_response.get_bots_report( - domain="domain", - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - report = await response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_get_bots_report_v2(self, async_client: AsyncProfound) -> None: - report = await async_client.reports.get_bots_report_v2( - domain="domain", - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_get_bots_report_v2_with_all_params(self, async_client: AsyncProfound) -> None: - report = await async_client.reports.get_bots_report_v2( - domain="domain", - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_interval="hour", - dimensions=["date"], - domain_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - filters=[ - { - "field": "path", - "operator": "is", - "value": "string", - } - ], - metric_filters=[ - { - "field": "field", - "operator": ">", - "value": 0, - } - ], - order_by={"date": "asc"}, - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - pagination={ - "limit": 1, - "offset": 0, - }, - tags=["string"], - timezone="timezone", - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_get_bots_report_v2(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.with_raw_response.get_bots_report_v2( - domain="domain", - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - report = await response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_get_bots_report_v2(self, async_client: AsyncProfound) -> None: - async with async_client.reports.with_streaming_response.get_bots_report_v2( - domain="domain", - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - report = await response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_get_referrals_report(self, async_client: AsyncProfound) -> None: - report = await async_client.reports.get_referrals_report( - domain="domain", - metrics=["visits"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_get_referrals_report_with_all_params(self, async_client: AsyncProfound) -> None: - report = await async_client.reports.get_referrals_report( - domain="domain", - metrics=["visits"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_interval="hour", - dimensions=["date"], - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - filters=[ - { - "field": "path", - "operator": "is", - "value": "string", - } - ], - metric_filters=[ - { - "field": "field", - "operator": ">", - "value": 0, - } - ], - order_by={"date": "asc"}, - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - pagination={ - "limit": 1, - "offset": 0, - }, - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_get_referrals_report(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.with_raw_response.get_referrals_report( - domain="domain", - metrics=["visits"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - report = await response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_get_referrals_report(self, async_client: AsyncProfound) -> None: - async with async_client.reports.with_streaming_response.get_referrals_report( - domain="domain", - metrics=["visits"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - report = await response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_get_referrals_report_v2(self, async_client: AsyncProfound) -> None: - report = await async_client.reports.get_referrals_report_v2( - domain="domain", - metrics=["visits"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_get_referrals_report_v2_with_all_params(self, async_client: AsyncProfound) -> None: - report = await async_client.reports.get_referrals_report_v2( - domain="domain", - metrics=["visits"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_interval="hour", - dimensions=["date"], - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - filters=[ - { - "field": "path", - "operator": "is", - "value": "string", - } - ], - metric_filters=[ - { - "field": "field", - "operator": ">", - "value": 0, - } - ], - order_by={"date": "asc"}, - organization_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - pagination={ - "limit": 1, - "offset": 0, - }, - timezone="timezone", - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_get_referrals_report_v2(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.with_raw_response.get_referrals_report_v2( - domain="domain", - metrics=["visits"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - report = await response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_get_referrals_report_v2(self, async_client: AsyncProfound) -> None: - async with async_client.reports.with_streaming_response.get_referrals_report_v2( - domain="domain", - metrics=["visits"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - report = await response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_query_citations(self, async_client: AsyncProfound) -> None: - report = await async_client.reports.query_citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(ReportQueryCitationsResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_query_citations_with_all_params(self, async_client: AsyncProfound) -> None: - report = await async_client.reports.query_citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - entity="domain", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["page"], - interval="day", - limit=1, - max_results=1, - metrics=["count"], - scope="all", - ) - assert_matches_type(ReportQueryCitationsResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_query_citations(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.with_raw_response.query_citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - report = await response.parse() - assert_matches_type(ReportQueryCitationsResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_query_citations(self, async_client: AsyncProfound) -> None: - async with async_client.reports.with_streaming_response.query_citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - report = await response.parse() - assert_matches_type(ReportQueryCitationsResponse, report, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_query_fanouts(self, async_client: AsyncProfound) -> None: - report = await async_client.reports.query_fanouts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["fanouts_per_execution"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_query_fanouts_with_all_params(self, async_client: AsyncProfound) -> None: - report = await async_client.reports.query_fanouts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["fanouts_per_execution"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_interval="hour", - dimensions=["prompt"], - filters=[ - { - "field": "region_id", - "operator": "is", - "value": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - } - ], - order_by={"fanouts_per_execution": "desc"}, - pagination={ - "limit": 1, - "offset": 0, - }, - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_query_fanouts(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.with_raw_response.query_fanouts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["fanouts_per_execution"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - report = await response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_query_fanouts(self, async_client: AsyncProfound) -> None: - async with async_client.reports.with_streaming_response.query_fanouts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["fanouts_per_execution"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - report = await response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_query_query_fanouts(self, async_client: AsyncProfound) -> None: - report = await async_client.reports.query_query_fanouts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(ReportQueryQueryFanoutsResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_query_query_fanouts_with_all_params(self, async_client: AsyncProfound) -> None: - report = await async_client.reports.query_query_fanouts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - interval="day", - limit=1, - max_results=1, - metrics=["fanouts_per_execution"], - sort={ - "field": "field", - "dir": "asc", - }, - ) - assert_matches_type(ReportQueryQueryFanoutsResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_query_query_fanouts(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.with_raw_response.query_query_fanouts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - report = await response.parse() - assert_matches_type(ReportQueryQueryFanoutsResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_query_query_fanouts(self, async_client: AsyncProfound) -> None: - async with async_client.reports.with_streaming_response.query_query_fanouts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - report = await response.parse() - assert_matches_type(ReportQueryQueryFanoutsResponse, report, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_query_sentiment(self, async_client: AsyncProfound) -> None: - report = await async_client.reports.query_sentiment( - asset="asset", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(ReportQuerySentimentResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_query_sentiment_with_all_params(self, async_client: AsyncProfound) -> None: - report = await async_client.reports.query_sentiment( - asset="asset", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - comparison_end_date="comparison_end_date", - comparison_start_date="comparison_start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - include_cited_websites=True, - interval="day", - limit=1, - max_results=1, - metrics=["positive_sentiment"], - sort={ - "dir": "asc", - "field": "occurrence", - }, - ) - assert_matches_type(ReportQuerySentimentResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_query_sentiment(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.with_raw_response.query_sentiment( - asset="asset", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - report = await response.parse() - assert_matches_type(ReportQuerySentimentResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_query_sentiment(self, async_client: AsyncProfound) -> None: - async with async_client.reports.with_streaming_response.query_sentiment( - asset="asset", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - report = await response.parse() - assert_matches_type(ReportQuerySentimentResponse, report, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_query_visibility(self, async_client: AsyncProfound) -> None: - report = await async_client.reports.query_visibility( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - assert_matches_type(ReportQueryVisibilityResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_query_visibility_with_all_params(self, async_client: AsyncProfound) -> None: - report = await async_client.reports.query_visibility( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - assets="string", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - interval="day", - limit=1, - max_results=1, - metrics=["visibility_score"], - scope="owned", - sort={"field": "visibility_score"}, - ) - assert_matches_type(ReportQueryVisibilityResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_query_visibility(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.with_raw_response.query_visibility( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - report = await response.parse() - assert_matches_type(ReportQueryVisibilityResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_query_visibility(self, async_client: AsyncProfound) -> None: - async with async_client.reports.with_streaming_response.query_visibility( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - report = await response.parse() - assert_matches_type(ReportQueryVisibilityResponse, report, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_sentiment(self, async_client: AsyncProfound) -> None: - report = await async_client.reports.sentiment( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["positive"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_sentiment_with_all_params(self, async_client: AsyncProfound) -> None: - report = await async_client.reports.sentiment( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["positive"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_interval="hour", - dimensions=["theme"], - filters=[ - { - "field": "asset_id", - "operator": "is", - "value": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - } - ], - order_by={"date": "asc"}, - pagination={ - "limit": 1, - "offset": 0, - }, - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_sentiment(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.with_raw_response.sentiment( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["positive"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - report = await response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_sentiment(self, async_client: AsyncProfound) -> None: - async with async_client.reports.with_streaming_response.sentiment( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["positive"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - report = await response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_sentiment_v2(self, async_client: AsyncProfound) -> None: - report = await async_client.reports.sentiment_v2( - asset_name="asset_name", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["sentiment"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - assert_matches_type(ReportSentimentV2Response, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_sentiment_v2_with_all_params(self, async_client: AsyncProfound) -> None: - report = await async_client.reports.sentiment_v2( - asset_name="asset_name", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["sentiment"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - comparison_end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - comparison_start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_bucket="day", - dimensions=["date"], - filters=[ - { - "field": "model_id", - "operator": "is", - "value": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - } - ], - order_by={"occurrence": "desc"}, - pagination={ - "limit": 1, - "offset": 0, - }, - ) - assert_matches_type(ReportSentimentV2Response, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_sentiment_v2(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.with_raw_response.sentiment_v2( - asset_name="asset_name", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["sentiment"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - report = await response.parse() - assert_matches_type(ReportSentimentV2Response, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_sentiment_v2(self, async_client: AsyncProfound) -> None: - async with async_client.reports.with_streaming_response.sentiment_v2( - asset_name="asset_name", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["sentiment"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - report = await response.parse() - assert_matches_type(ReportSentimentV2Response, report, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_citations(self, async_client: AsyncProfound) -> None: - report_stream = await async_client.reports.stream_citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - await report_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_citations_with_all_params(self, async_client: AsyncProfound) -> None: - report_stream = await async_client.reports.stream_citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_interval="hour", - dimensions=["hostname"], - filters=[ - { - "field": "hostname", - "operator": "is", - "value": "string", - } - ], - order_by={"date": "asc"}, - pagination={ - "limit": 1, - "offset": 0, - }, - ) - await report_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_stream_citations(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.with_raw_response.stream_citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = await response.parse() - await stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_stream_citations(self, async_client: AsyncProfound) -> None: - async with async_client.reports.with_streaming_response.stream_citations( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["count"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = await response.parse() - await stream.close() - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_citations_v2(self, async_client: AsyncProfound) -> None: - report_stream = await async_client.reports.stream_citations_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - await report_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_citations_v2_with_all_params(self, async_client: AsyncProfound) -> None: - report_stream = await async_client.reports.stream_citations_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - entity="domain", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["page"], - interval="day", - limit=1, - max_results=1, - metrics=["count"], - scope="all", - ) - await report_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_stream_citations_v2(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.with_raw_response.stream_citations_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = await response.parse() - await stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_stream_citations_v2(self, async_client: AsyncProfound) -> None: - async with async_client.reports.with_streaming_response.stream_citations_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = await response.parse() - await stream.close() - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_query_fanouts(self, async_client: AsyncProfound) -> None: - report_stream = await async_client.reports.stream_query_fanouts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - await report_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_query_fanouts_with_all_params(self, async_client: AsyncProfound) -> None: - report_stream = await async_client.reports.stream_query_fanouts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - interval="day", - limit=1, - max_results=1, - metrics=["fanouts_per_execution"], - sort={ - "field": "field", - "dir": "asc", - }, - ) - await report_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_stream_query_fanouts(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.with_raw_response.stream_query_fanouts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = await response.parse() - await stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_stream_query_fanouts(self, async_client: AsyncProfound) -> None: - async with async_client.reports.with_streaming_response.stream_query_fanouts( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = await response.parse() - await stream.close() - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_sentiment(self, async_client: AsyncProfound) -> None: - report_stream = await async_client.reports.stream_sentiment( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["positive"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - await report_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_sentiment_with_all_params(self, async_client: AsyncProfound) -> None: - report_stream = await async_client.reports.stream_sentiment( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["positive"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_interval="hour", - dimensions=["theme"], - filters=[ - { - "field": "asset_id", - "operator": "is", - "value": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - } - ], - order_by={"date": "asc"}, - pagination={ - "limit": 1, - "offset": 0, - }, - ) - await report_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_stream_sentiment(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.with_raw_response.stream_sentiment( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["positive"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = await response.parse() - await stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_stream_sentiment(self, async_client: AsyncProfound) -> None: - async with async_client.reports.with_streaming_response.stream_sentiment( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["positive"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = await response.parse() - await stream.close() - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_sentiment_v2(self, async_client: AsyncProfound) -> None: - report_stream = await async_client.reports.stream_sentiment_v2( - asset="asset", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - await report_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_sentiment_v2_with_all_params(self, async_client: AsyncProfound) -> None: - report_stream = await async_client.reports.stream_sentiment_v2( - asset="asset", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - comparison_end_date="comparison_end_date", - comparison_start_date="comparison_start_date", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - include_cited_websites=True, - interval="day", - limit=1, - max_results=1, - metrics=["positive_sentiment"], - sort={ - "dir": "asc", - "field": "occurrence", - }, - ) - await report_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_stream_sentiment_v2(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.with_raw_response.stream_sentiment_v2( - asset="asset", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = await response.parse() - await stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_stream_sentiment_v2(self, async_client: AsyncProfound) -> None: - async with async_client.reports.with_streaming_response.stream_sentiment_v2( - asset="asset", - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = await response.parse() - await stream.close() - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_visibility(self, async_client: AsyncProfound) -> None: - report_stream = await async_client.reports.stream_visibility( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["share_of_voice"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - await report_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_visibility_with_all_params(self, async_client: AsyncProfound) -> None: - report_stream = await async_client.reports.stream_visibility( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["share_of_voice"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_interval="hour", - dimensions=["date"], - filters=[ - { - "field": "region_id", - "operator": "is", - "value": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - } - ], - order_by={"date": "asc"}, - pagination={ - "limit": 1, - "offset": 0, - }, - ) - await report_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_stream_visibility(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.with_raw_response.stream_visibility( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["share_of_voice"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = await response.parse() - await stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_stream_visibility(self, async_client: AsyncProfound) -> None: - async with async_client.reports.with_streaming_response.stream_visibility( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["share_of_voice"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = await response.parse() - await stream.close() - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_visibility_v2(self, async_client: AsyncProfound) -> None: - report_stream = await async_client.reports.stream_visibility_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - await report_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_stream_visibility_v2_with_all_params(self, async_client: AsyncProfound) -> None: - report_stream = await async_client.reports.stream_visibility_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - assets="string", - cursor="cursor", - filter={ - "and": [], - "field": "field", - "op": "op", - "or": [], - "value": {}, - }, - group_by=["date"], - interval="day", - limit=1, - max_results=1, - metrics=["visibility_score"], - scope="owned", - sort={"field": "visibility_score"}, - ) - await report_stream.response.aclose() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_stream_visibility_v2(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.with_raw_response.stream_visibility_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) - - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - stream = await response.parse() - await stream.close() - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_stream_visibility_v2(self, async_client: AsyncProfound) -> None: - async with async_client.reports.with_streaming_response.stream_visibility_v2( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date="end_date", - start_date="start_date", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - stream = await response.parse() - await stream.close() - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_visibility(self, async_client: AsyncProfound) -> None: - report = await async_client.reports.visibility( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["share_of_voice"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_visibility_with_all_params(self, async_client: AsyncProfound) -> None: - report = await async_client.reports.visibility( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["share_of_voice"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - date_interval="hour", - dimensions=["date"], - filters=[ - { - "field": "region_id", - "operator": "is", - "value": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - } - ], - order_by={"date": "asc"}, - pagination={ - "limit": 1, - "offset": 0, - }, - ) - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_raw_response_visibility(self, async_client: AsyncProfound) -> None: - response = await async_client.reports.with_raw_response.visibility( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["share_of_voice"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - report = await response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_streaming_response_visibility(self, async_client: AsyncProfound) -> None: - async with async_client.reports.with_streaming_response.visibility( - category_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", - end_date=parse_datetime("2019-12-27T18:11:19.117Z"), - metrics=["share_of_voice"], - start_date=parse_datetime("2019-12-27T18:11:19.117Z"), - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - report = await response.parse() - assert_matches_type(ReportResponse, report, path=["response"]) - - assert cast(Any, response.is_closed) is True diff --git a/tests/conftest.py b/tests/conftest.py deleted file mode 100644 index d6620176..00000000 --- a/tests/conftest.py +++ /dev/null @@ -1,84 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import os -import logging -from typing import TYPE_CHECKING, Iterator, AsyncIterator - -import httpx -import pytest -from pytest_asyncio import is_async_test - -from profound import Profound, AsyncProfound, DefaultAioHttpClient -from profound._utils import is_dict - -if TYPE_CHECKING: - from _pytest.fixtures import FixtureRequest # pyright: ignore[reportPrivateImportUsage] - -pytest.register_assert_rewrite("tests.utils") - -logging.getLogger("profound").setLevel(logging.DEBUG) - - -# automatically add `pytest.mark.asyncio()` to all of our async tests -# so we don't have to add that boilerplate everywhere -def pytest_collection_modifyitems(items: list[pytest.Function]) -> None: - pytest_asyncio_tests = (item for item in items if is_async_test(item)) - session_scope_marker = pytest.mark.asyncio(loop_scope="session") - for async_test in pytest_asyncio_tests: - async_test.add_marker(session_scope_marker, append=False) - - # We skip tests that use both the aiohttp client and respx_mock as respx_mock - # doesn't support custom transports. - for item in items: - if "async_client" not in item.fixturenames or "respx_mock" not in item.fixturenames: - continue - - if not hasattr(item, "callspec"): - continue - - async_client_param = item.callspec.params.get("async_client") - if is_dict(async_client_param) and async_client_param.get("http_client") == "aiohttp": - item.add_marker(pytest.mark.skip(reason="aiohttp client is not compatible with respx_mock")) - - -base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") - -api_key = "My API Key" - - -@pytest.fixture(scope="session") -def client(request: FixtureRequest) -> Iterator[Profound]: - strict = getattr(request, "param", True) - if not isinstance(strict, bool): - raise TypeError(f"Unexpected fixture parameter type {type(strict)}, expected {bool}") - - with Profound(base_url=base_url, api_key=api_key, _strict_response_validation=strict) as client: - yield client - - -@pytest.fixture(scope="session") -async def async_client(request: FixtureRequest) -> AsyncIterator[AsyncProfound]: - param = getattr(request, "param", True) - - # defaults - strict = True - http_client: None | httpx.AsyncClient = None - - if isinstance(param, bool): - strict = param - elif is_dict(param): - strict = param.get("strict", True) - assert isinstance(strict, bool) - - http_client_type = param.get("http_client", "httpx") - if http_client_type == "aiohttp": - http_client = DefaultAioHttpClient() - else: - raise TypeError(f"Unexpected fixture parameter type {type(param)}, expected bool or dict") - - async with AsyncProfound( - base_url=base_url, api_key=api_key, _strict_response_validation=strict, http_client=http_client - ) as client: - yield client diff --git a/tests/sample_file.txt b/tests/sample_file.txt deleted file mode 100644 index af5626b4..00000000 --- a/tests/sample_file.txt +++ /dev/null @@ -1 +0,0 @@ -Hello, world! diff --git a/tests/smoke-test.py b/tests/smoke-test.py new file mode 100644 index 00000000..fc947b26 --- /dev/null +++ b/tests/smoke-test.py @@ -0,0 +1,1419 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +# Smoke test: calls every generated operation once to confirm the SDK can reach each endpoint. +# Run it from this repo with `python tests/smoke-test.py`. The generator also runs this file +# against a mock server and reads the JSON report produced via SCALAR_SMOKE_REPORT. +from __future__ import annotations + +import json +import os +import sys +import time +import traceback +from concurrent.futures import ThreadPoolExecutor +from pathlib import Path +from typing import Any, Callable, TypedDict + +from profound import Profound + +# The shared smoke-test runner injects base URL and credentials through the same +# environment variables the generated client reads in normal use. +client = Profound(max_retries=0, timeout=30) + + +class SmokeResult(TypedDict, total=False): + operation: str + method: str + path: str + status: str + durationMs: int + error: str + + +class SmokeCase(TypedDict): + operation: str + method: str + path: str + run: Callable[[], Any] + + +def _smoke_case_0() -> None: + organization = client.organization.list_category_regions_v1_org_categories_category_regions_get( + category_id="categoryId", + ) + +def _smoke_case_1() -> None: + answer = client.prompts.answers.create_v1_prompts_post( + category_id="", + start_date="", + end_date="", + ) + +def _smoke_case_2() -> None: + answer = client.prompts.answers.query_v2_v2_prompts_post( + category_id="", + start_date="", + end_date="", + ) + +def _smoke_case_3() -> None: + stream = client.prompts.answers.stream_v2_v2_prompts_stream_post( + category_id="", + start_date="", + end_date="", + ) + for event in stream: + print(event) + +def _smoke_case_4() -> None: + report = client.reports.query_sentiment_v2_v1_sentiment_v2_post( + category_id="", + asset_name="", + start_date="", + end_date="", + date_interval="day", + metrics=[], + ) + +def _smoke_case_5() -> None: + citation = client.reports.citations.query_v1_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", + ) + +def _smoke_case_6() -> None: + stream = client.reports.citations.stream_v1_reports_stream_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", + ) + for event in stream: + print(event) + +def _smoke_case_7() -> None: + citation = client.reports.citations.query_v2_v2_reports_post( + category_id="", + start_date="", + end_date="", + interval="day", + scope="all", + ) + +def _smoke_case_8() -> None: + stream = client.reports.citations.stream_v2_v2_reports_stream_post( + category_id="", + start_date="", + end_date="", + interval="day", + scope="all", + ) + for event in stream: + print(event) + +def _smoke_case_9() -> None: + visibility = client.reports.visibility.query_v1_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", + ) + +def _smoke_case_10() -> None: + stream = client.reports.visibility.stream_v1_reports_stream_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", + ) + for event in stream: + print(event) + +def _smoke_case_11() -> None: + visibility = client.reports.visibility.query_v2_v2_reports_post( + category_id="", + start_date="", + end_date="", + interval="day", + scope="owned", + ) + +def _smoke_case_12() -> None: + stream = client.reports.visibility.stream_v2_v2_reports_stream_post( + category_id="", + start_date="", + end_date="", + interval="day", + scope="owned", + ) + for event in stream: + print(event) + +def _smoke_case_13() -> None: + sentiment = client.reports.sentiment.query_v1_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", + ) + +def _smoke_case_14() -> None: + stream = client.reports.sentiment.stream_v1_reports_stream_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", + ) + for event in stream: + print(event) + +def _smoke_case_15() -> None: + sentiment = client.reports.sentiment.query_v2_v2_reports_post( + category_id="", + asset="", + start_date="", + end_date="", + interval="day", + include_cited_websites=False, + ) + +def _smoke_case_16() -> None: + stream = client.reports.sentiment.stream_v2_v2_reports_stream_post( + category_id="", + asset="", + start_date="", + end_date="", + interval="day", + include_cited_websites=False, + ) + for event in stream: + print(event) + +def _smoke_case_17() -> None: + web_search_result = client.reports.web_search_results.query( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", + ) + +def _smoke_case_18() -> None: + stream = client.reports.web_search_results.stream( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", + ) + for event in stream: + print(event) + +def _smoke_case_19() -> None: + referral = client.reports.referrals.create_report_v1_v1_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + domain="", + start_date="", + ) + +def _smoke_case_20() -> None: + referral = client.reports.referrals.create_report_v2_v2_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + domain="", + start_date="", + ) + +def _smoke_case_21() -> None: + bot = client.reports.bots.create_report_v1_v1_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + domain="", + start_date="", + ) + +def _smoke_case_22() -> None: + bot = client.reports.bots.create_report_v2_v2_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + domain="", + start_date="", + ) + +def _smoke_case_23() -> None: + query_fanout = client.reports.query_fanouts.v1_reports_post( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="", + start_date="", + end_date="", + ) + +def _smoke_case_24() -> None: + query_fanout = client.reports.query_fanouts.v2_v2_reports_post( + category_id="", + start_date="", + end_date="", + interval="day", + ) + +def _smoke_case_25() -> None: + stream = client.reports.query_fanouts.stream_v2_v2_reports_stream_post( + category_id="", + start_date="", + end_date="", + interval="day", + ) + for event in stream: + print(event) + +def _smoke_case_26() -> None: + shopping = client.reports.shopping.visibility( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + include_asset_only=False, + rank_by="visibility_score", + include_position_frequency=False, + ) + +def _smoke_case_27() -> None: + shopping = client.reports.shopping.item_visibility( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + merchant_filter_type="any", + include_competitors=False, + competitor_limit=5, + include_position_frequency=False, + ) + +def _smoke_case_28() -> None: + shopping = client.reports.shopping.merchant_distribution( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + ) + +def _smoke_case_29() -> None: + shopping = client.reports.shopping.merchant_visibility_by_brand( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + include_brand_only=False, + ) + +def _smoke_case_30() -> None: + shopping = client.reports.shopping.merchant_by_items( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + ) + +def _smoke_case_31() -> None: + shopping = client.reports.shopping.all_items_with_merchants( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + merchant_filter_type="any", + rank_by="visibility", + sort_order="desc", + ) + +def _smoke_case_32() -> None: + shopping = client.reports.shopping.trigger_rate( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + ) + +def _smoke_case_33() -> None: + shopping = client.reports.shopping.merchant_share( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + ) + +def _smoke_case_34() -> None: + shopping = client.reports.shopping.product_merchant_urls( + category_id="", + product_names=[], + start_date="", + end_date="", + ) + +def _smoke_case_35() -> None: + shopping = client.reports.shopping.executions( + category_id="", + start_date="", + end_date="", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + analysis_filter_type="any", + ) + +def _smoke_case_36() -> None: + accuracy = client.reports.accuracy.overview_v1_reports_overview_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + group_by="period", + ) + +def _smoke_case_37() -> None: + accuracy = client.reports.accuracy.breakdown_v1_reports_breakdown_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + breakdown_by="citation", + limit=10, + offset=0, + sort_by="citationShare", + sort_order="desc", + ) + +def _smoke_case_38() -> None: + accuracy = client.reports.accuracy.citation_analysis_v1_reports_citation_analysis_post( + category_id="", + clean_href="", + start_date="", + end_date="", + ) + +def _smoke_case_39() -> None: + accuracy = client.reports.accuracy.topic_ids_v1_reports_topic_ids_post( + category_id="", + start_date="", + end_date="", + ) + +def _smoke_case_40() -> None: + accuracy = client.reports.accuracy.inaccurate_themes_v1_reports_inaccurate_themes_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + limit=10, + offset=0, + sort_by="response_share", + sort_order="desc", + ) + +def _smoke_case_41() -> None: + accuracy = client.reports.accuracy.inaccurate_clusters_v1_reports_inaccurate_clusters_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + theme_id="", + limit=5000, + offset=0, + ) + +def _smoke_case_42() -> None: + accuracy = client.reports.accuracy.inaccuracy_drivers_v1_reports_inaccuracy_drivers_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + limit=5, + ) + +def _smoke_case_43() -> None: + accuracy = client.reports.accuracy.top_inaccurate_claims_v1_reports_top_inaccurate_claims_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + limit=5, + ) + +def _smoke_case_44() -> None: + accuracy = client.reports.accuracy.claim_breakdown_v1_reports_claim_breakdown_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + cluster_id="", + ) + +def _smoke_case_45() -> None: + accuracy = client.reports.accuracy.claim_citations_v1_reports_claim_citations_post( + start_date="", + end_date="", + category_id="", + exclude_topic_ids=False, + tag_filter_type="any", + include_no_tag=True, + include_no_persona=True, + cluster_id="", + limit=10, + offset=0, + sort_order="desc", + ) + +def _smoke_case_46() -> None: + accuracy = client.reports.accuracy.cluster_example_runs_v1_reports_cluster_example_runs_post( + category_id="", + cluster_id="", + start_date="", + end_date="", + limit=20, + offset=0, + ) + +def _smoke_case_47() -> None: + accuracy = client.reports.accuracy.cluster_verification_pairs_v1_reports_cluster_verification_pairs_post( + category_id="", + cluster_id="", + ) + +def _smoke_case_48() -> None: + accuracy = client.reports.accuracy.factcheck_setup_status_v1_reports_factcheck_setup_status_post( + category_id="", + ) + +def _smoke_case_49() -> None: + optimization = client.content.optimization.list( + asset_id="assetId", + limit=10000, + offset=0, + ) + +def _smoke_case_50() -> None: + optimization = client.content.optimization.retrieve( + asset_id="assetId", + content_id="contentId", + ) + +def _smoke_case_51() -> None: + knowledge_base = client.knowledge_bases.list() + +def _smoke_case_52() -> None: + knowledge_base = client.knowledge_bases.search( + knowledge_base_id="knowledgeBaseId", + query="", + top_k=0, + return_full_page=False, + ) + +def _smoke_case_53() -> None: + document = client.knowledge_bases.documents.create( + knowledge_base_id="knowledgeBaseId", + name="", + text="", + ) + +def _smoke_case_54() -> None: + document = client.knowledge_bases.documents.update( + knowledge_base_id="knowledgeBaseId", + name="", + text="", + ) + +def _smoke_case_55() -> None: + document = client.knowledge_bases.documents.delete( + knowledge_base_id="knowledgeBaseId", + name="", + ) + +def _smoke_case_56() -> None: + folder = client.knowledge_bases.folders.create( + knowledge_base_id="knowledgeBaseId", + path="", + ) + +def _smoke_case_57() -> None: + folder = client.knowledge_bases.folders.delete( + knowledge_base_id="knowledgeBaseId", + path="", + recursive=False, + ) + +def _smoke_case_58() -> None: + agent = client.agents.list( + limit=100, + ) + +def _smoke_case_59() -> None: + agent = client.agents.create_v1_post( + organization_id="", + name="", + ) + +def _smoke_case_60() -> None: + agent = client.agents.publish_v1_id_publish_post( + agent_id="agentId", + ) + +def _smoke_case_61() -> None: + agent = client.agents.retrieve( + agent_id="agentId", + ) + +def _smoke_case_62() -> None: + agent = client.agents.update_v1_id_patch( + agent_id="agentId", + graph={}, + ) + +def _smoke_case_63() -> None: + agent = client.agents.list_graph_v1_graph_get( + agent_id="agentId", + ) + +def _smoke_case_64() -> None: + node_type = client.agents.node_types.list_v1_agents_get() + +def _smoke_case_65() -> None: + node_type = client.agents.node_types.list_schema_v1_agents_schema_get( + node_type="nodeType", + ) + +def _smoke_case_66() -> None: + run = client.agents.runs.create( + agent_id="agentId", + ) + +def _smoke_case_67() -> None: + run = client.agents.runs.retrieve( + agent_id="agentId", + run_id="runId", + ) + +def _smoke_case_68() -> None: + organization = client.organizations.list() + +def _smoke_case_69() -> None: + organization = client.organizations.regions() + +def _smoke_case_70() -> None: + organization = client.organizations.models() + +def _smoke_case_71() -> None: + organization = client.organizations.domains() + +def _smoke_case_72() -> None: + organization = client.organizations.list_assets() + +def _smoke_case_73() -> None: + organization = client.organizations.get_personas() + +def _smoke_case_74() -> None: + category = client.organizations.categories.list() + +def _smoke_case_75() -> None: + category = client.organizations.categories.topics( + category_id="categoryId", + ) + +def _smoke_case_76() -> None: + category = client.organizations.categories.tags( + category_id="categoryId", + ) + +def _smoke_case_77() -> None: + category = client.organizations.categories.prompts( + category_id="categoryId", + limit=10000, + status=["active"], + ) + +def _smoke_case_78() -> None: + category = client.organizations.categories.create_prompts( + category_id="categoryId", + prompts=[], + dry_run=False, + ) + +def _smoke_case_79() -> None: + category = client.organizations.categories.update_prompts( + category_id="categoryId", + prompts=[], + dry_run=False, + ) + +def _smoke_case_80() -> None: + category = client.organizations.categories.update_prompt_status( + category_id="categoryId", + prompt_ids=[], + status="active", + dry_run=False, + ) + +def _smoke_case_81() -> None: + category = client.organizations.categories.assets( + category_id="categoryId", + ) + +def _smoke_case_82() -> None: + category = client.organizations.categories.get_category_personas( + category_id="categoryId", + ) + + +cases: list[SmokeCase] = [ + { + "operation": "listCategoryRegionsV1OrgCategoriesCategoryRegionsGet", + "method": "GET", + "path": "/v1/org/categories/{category_id}/regions", + "run": _smoke_case_0, + }, + + { + "operation": "createV1PromptsPost", + "method": "POST", + "path": "/v1/prompts/answers", + "run": _smoke_case_1, + }, + + { + "operation": "queryV2V2PromptsPost", + "method": "POST", + "path": "/v2/prompts/answers", + "run": _smoke_case_2, + }, + + { + "operation": "streamV2V2PromptsStreamPost", + "method": "POST", + "path": "/v2/prompts/answers/stream", + "run": _smoke_case_3, + }, + + { + "operation": "querySentimentV2V1SentimentV2Post", + "method": "POST", + "path": "/v1/reports/sentiment-v2", + "run": _smoke_case_4, + }, + + { + "operation": "queryV1ReportsPost", + "method": "POST", + "path": "/v1/reports/citations", + "run": _smoke_case_5, + }, + + { + "operation": "streamV1ReportsStreamPost", + "method": "POST", + "path": "/v1/reports/citations/stream", + "run": _smoke_case_6, + }, + + { + "operation": "queryV2V2ReportsPost", + "method": "POST", + "path": "/v2/reports/citations", + "run": _smoke_case_7, + }, + + { + "operation": "streamV2V2ReportsStreamPost", + "method": "POST", + "path": "/v2/reports/citations/stream", + "run": _smoke_case_8, + }, + + { + "operation": "queryV1ReportsPost", + "method": "POST", + "path": "/v1/reports/visibility", + "run": _smoke_case_9, + }, + + { + "operation": "streamV1ReportsStreamPost", + "method": "POST", + "path": "/v1/reports/visibility/stream", + "run": _smoke_case_10, + }, + + { + "operation": "queryV2V2ReportsPost", + "method": "POST", + "path": "/v2/reports/visibility", + "run": _smoke_case_11, + }, + + { + "operation": "streamV2V2ReportsStreamPost", + "method": "POST", + "path": "/v2/reports/visibility/stream", + "run": _smoke_case_12, + }, + + { + "operation": "queryV1ReportsPost", + "method": "POST", + "path": "/v1/reports/sentiment", + "run": _smoke_case_13, + }, + + { + "operation": "streamV1ReportsStreamPost", + "method": "POST", + "path": "/v1/reports/sentiment/stream", + "run": _smoke_case_14, + }, + + { + "operation": "queryV2V2ReportsPost", + "method": "POST", + "path": "/v2/reports/sentiment", + "run": _smoke_case_15, + }, + + { + "operation": "streamV2V2ReportsStreamPost", + "method": "POST", + "path": "/v2/reports/sentiment/stream", + "run": _smoke_case_16, + }, + + { + "operation": "query", + "method": "POST", + "path": "/v1/reports/web-search-results", + "run": _smoke_case_17, + }, + + { + "operation": "stream", + "method": "POST", + "path": "/v1/reports/web-search-results/stream", + "run": _smoke_case_18, + }, + + { + "operation": "createReportV1V1ReportsPost", + "method": "POST", + "path": "/v1/reports/referrals", + "run": _smoke_case_19, + }, + + { + "operation": "createReportV2V2ReportsPost", + "method": "POST", + "path": "/v2/reports/referrals", + "run": _smoke_case_20, + }, + + { + "operation": "createReportV1V1ReportsPost", + "method": "POST", + "path": "/v1/reports/bots", + "run": _smoke_case_21, + }, + + { + "operation": "createReportV2V2ReportsPost", + "method": "POST", + "path": "/v2/reports/bots", + "run": _smoke_case_22, + }, + + { + "operation": "v1ReportsPost", + "method": "POST", + "path": "/v1/reports/query-fanouts", + "run": _smoke_case_23, + }, + + { + "operation": "v2V2ReportsPost", + "method": "POST", + "path": "/v2/reports/query-fanouts", + "run": _smoke_case_24, + }, + + { + "operation": "streamV2V2ReportsStreamPost", + "method": "POST", + "path": "/v2/reports/query-fanouts/stream", + "run": _smoke_case_25, + }, + + { + "operation": "visibility", + "method": "POST", + "path": "/v1/reports/shopping/visibility", + "run": _smoke_case_26, + }, + + { + "operation": "itemVisibility", + "method": "POST", + "path": "/v1/reports/shopping/item-visibility", + "run": _smoke_case_27, + }, + + { + "operation": "merchantDistribution", + "method": "POST", + "path": "/v1/reports/shopping/merchant-distribution", + "run": _smoke_case_28, + }, + + { + "operation": "merchantVisibilityByBrand", + "method": "POST", + "path": "/v1/reports/shopping/merchant-visibility-by-brand", + "run": _smoke_case_29, + }, + + { + "operation": "merchantByItems", + "method": "POST", + "path": "/v1/reports/shopping/merchant-by-items", + "run": _smoke_case_30, + }, + + { + "operation": "allItemsWithMerchants", + "method": "POST", + "path": "/v1/reports/shopping/all-items-with-merchants", + "run": _smoke_case_31, + }, + + { + "operation": "triggerRate", + "method": "POST", + "path": "/v1/reports/shopping/trigger-rate", + "run": _smoke_case_32, + }, + + { + "operation": "merchantShare", + "method": "POST", + "path": "/v1/reports/shopping/merchant-share", + "run": _smoke_case_33, + }, + + { + "operation": "productMerchantUrls", + "method": "POST", + "path": "/v1/reports/shopping/product-merchant-urls", + "run": _smoke_case_34, + }, + + { + "operation": "executions", + "method": "POST", + "path": "/v1/reports/shopping/executions", + "run": _smoke_case_35, + }, + + { + "operation": "overviewV1ReportsOverviewPost", + "method": "POST", + "path": "/v1/reports/accuracy/overview", + "run": _smoke_case_36, + }, + + { + "operation": "breakdownV1ReportsBreakdownPost", + "method": "POST", + "path": "/v1/reports/accuracy/breakdown", + "run": _smoke_case_37, + }, + + { + "operation": "citationAnalysisV1ReportsCitationAnalysisPost", + "method": "POST", + "path": "/v1/reports/accuracy/citation-analysis", + "run": _smoke_case_38, + }, + + { + "operation": "topicIdsV1ReportsTopicIdsPost", + "method": "POST", + "path": "/v1/reports/accuracy/topic-ids", + "run": _smoke_case_39, + }, + + { + "operation": "inaccurateThemesV1ReportsInaccurateThemesPost", + "method": "POST", + "path": "/v1/reports/accuracy/inaccurate-themes", + "run": _smoke_case_40, + }, + + { + "operation": "inaccurateClustersV1ReportsInaccurateClustersPost", + "method": "POST", + "path": "/v1/reports/accuracy/inaccurate-clusters", + "run": _smoke_case_41, + }, + + { + "operation": "inaccuracyDriversV1ReportsInaccuracyDriversPost", + "method": "POST", + "path": "/v1/reports/accuracy/inaccuracy-drivers", + "run": _smoke_case_42, + }, + + { + "operation": "topInaccurateClaimsV1ReportsTopInaccurateClaimsPost", + "method": "POST", + "path": "/v1/reports/accuracy/top-inaccurate-claims", + "run": _smoke_case_43, + }, + + { + "operation": "claimBreakdownV1ReportsClaimBreakdownPost", + "method": "POST", + "path": "/v1/reports/accuracy/claim-breakdown", + "run": _smoke_case_44, + }, + + { + "operation": "claimCitationsV1ReportsClaimCitationsPost", + "method": "POST", + "path": "/v1/reports/accuracy/claim-citations", + "run": _smoke_case_45, + }, + + { + "operation": "clusterExampleRunsV1ReportsClusterExampleRunsPost", + "method": "POST", + "path": "/v1/reports/accuracy/cluster-example-runs", + "run": _smoke_case_46, + }, + + { + "operation": "clusterVerificationPairsV1ReportsClusterVerificationPairsPost", + "method": "POST", + "path": "/v1/reports/accuracy/cluster-verification-pairs", + "run": _smoke_case_47, + }, + + { + "operation": "factcheckSetupStatusV1ReportsFactcheckSetupStatusPost", + "method": "POST", + "path": "/v1/reports/accuracy/factcheck-setup-status", + "run": _smoke_case_48, + }, + + { + "operation": "list", + "method": "GET", + "path": "/v1/content/{asset_id}/optimization", + "run": _smoke_case_49, + }, + + { + "operation": "retrieve", + "method": "GET", + "path": "/v1/content/{asset_id}/optimization/{content_id}", + "run": _smoke_case_50, + }, + + { + "operation": "list", + "method": "GET", + "path": "/v1/knowledge-bases", + "run": _smoke_case_51, + }, + + { + "operation": "search", + "method": "POST", + "path": "/v1/knowledge-bases/{knowledge_base_id}/search", + "run": _smoke_case_52, + }, + + { + "operation": "create", + "method": "POST", + "path": "/v1/knowledge-bases/{knowledge_base_id}/documents", + "run": _smoke_case_53, + }, + + { + "operation": "update", + "method": "PUT", + "path": "/v1/knowledge-bases/{knowledge_base_id}/documents", + "run": _smoke_case_54, + }, + + { + "operation": "delete", + "method": "DELETE", + "path": "/v1/knowledge-bases/{knowledge_base_id}/documents", + "run": _smoke_case_55, + }, + + { + "operation": "create", + "method": "POST", + "path": "/v1/knowledge-bases/{knowledge_base_id}/folders", + "run": _smoke_case_56, + }, + + { + "operation": "delete", + "method": "DELETE", + "path": "/v1/knowledge-bases/{knowledge_base_id}/folders", + "run": _smoke_case_57, + }, + + { + "operation": "list", + "method": "GET", + "path": "/v1/agents", + "run": _smoke_case_58, + }, + + { + "operation": "createV1Post", + "method": "POST", + "path": "/v1/agents", + "run": _smoke_case_59, + }, + + { + "operation": "publishV1IdPublishPost", + "method": "POST", + "path": "/v1/agents/{agent_id}/publish", + "run": _smoke_case_60, + }, + + { + "operation": "retrieve", + "method": "GET", + "path": "/v1/agents/{agent_id}", + "run": _smoke_case_61, + }, + + { + "operation": "updateV1IdPatch", + "method": "PATCH", + "path": "/v1/agents/{agent_id}", + "run": _smoke_case_62, + }, + + { + "operation": "listGraphV1GraphGet", + "method": "GET", + "path": "/v1/agents/{agent_id}/graph", + "run": _smoke_case_63, + }, + + { + "operation": "listV1AgentsGet", + "method": "GET", + "path": "/v1/agents/node-types", + "run": _smoke_case_64, + }, + + { + "operation": "listSchemaV1AgentsSchemaGet", + "method": "GET", + "path": "/v1/agents/node-types/{node_type}/schema", + "run": _smoke_case_65, + }, + + { + "operation": "create", + "method": "POST", + "path": "/v1/agents/{agent_id}/runs", + "run": _smoke_case_66, + }, + + { + "operation": "retrieve", + "method": "GET", + "path": "/v1/agents/{agent_id}/runs/{run_id}", + "run": _smoke_case_67, + }, + + { + "operation": "list", + "method": "GET", + "path": "/v1/org", + "run": _smoke_case_68, + }, + + { + "operation": "regions", + "method": "GET", + "path": "/v1/org/regions", + "run": _smoke_case_69, + }, + + { + "operation": "models", + "method": "GET", + "path": "/v1/org/models", + "run": _smoke_case_70, + }, + + { + "operation": "domains", + "method": "GET", + "path": "/v1/org/domains", + "run": _smoke_case_71, + }, + + { + "operation": "listAssets", + "method": "GET", + "path": "/v1/org/assets", + "run": _smoke_case_72, + }, + + { + "operation": "getPersonas", + "method": "GET", + "path": "/v1/org/personas", + "run": _smoke_case_73, + }, + + { + "operation": "list", + "method": "GET", + "path": "/v1/org/categories", + "run": _smoke_case_74, + }, + + { + "operation": "topics", + "method": "GET", + "path": "/v1/org/categories/{category_id}/topics", + "run": _smoke_case_75, + }, + + { + "operation": "tags", + "method": "GET", + "path": "/v1/org/categories/{category_id}/tags", + "run": _smoke_case_76, + }, + + { + "operation": "prompts", + "method": "GET", + "path": "/v1/org/categories/{category_id}/prompts", + "run": _smoke_case_77, + }, + + { + "operation": "createPrompts", + "method": "POST", + "path": "/v1/org/categories/{category_id}/prompts", + "run": _smoke_case_78, + }, + + { + "operation": "updatePrompts", + "method": "PATCH", + "path": "/v1/org/categories/{category_id}/prompts", + "run": _smoke_case_79, + }, + + { + "operation": "updatePromptStatus", + "method": "PATCH", + "path": "/v1/org/categories/{category_id}/prompts/status", + "run": _smoke_case_80, + }, + + { + "operation": "assets", + "method": "GET", + "path": "/v1/org/categories/{category_id}/assets", + "run": _smoke_case_81, + }, + + { + "operation": "getCategoryPersonas", + "method": "GET", + "path": "/v1/org/categories/{category_id}/personas", + "run": _smoke_case_82, + }, + +] + +DEFAULT_SMOKE_CONCURRENCY = 32 + + +def _selected_cases() -> list[SmokeCase]: + filter_value = os.environ.get("SCALAR_SMOKE_FILTER") + needles = [needle.strip() for needle in filter_value.split(",") if needle.strip()] if filter_value else [] + if not needles: + return cases + return [ + case + for case in cases + if any(needle in case["operation"] or needle in case["path"] for needle in needles) + ] + + +def _smoke_concurrency(case_count: int) -> int: + override = os.environ.get("SCALAR_SMOKE_CONCURRENCY") + if override: + try: + parsed = int(override) + if parsed > 0: + return min(parsed, case_count) + except ValueError: + pass + return min(DEFAULT_SMOKE_CONCURRENCY, case_count) + + +def _run_case(case: SmokeCase) -> SmokeResult: + started_at = time.monotonic() + try: + case["run"]() + return { + "operation": case["operation"], + "method": case["method"], + "path": case["path"], + "status": "passed", + "durationMs": int((time.monotonic() - started_at) * 1000), + } + except Exception: + return { + "operation": case["operation"], + "method": case["method"], + "path": case["path"], + "status": "failed", + "durationMs": int((time.monotonic() - started_at) * 1000), + "error": traceback.format_exc(), + } + + +def main() -> None: + selected = _selected_cases() + if selected: + # Keep enough parallelism to catch generated SDK concurrency bugs without overwhelming + # CI runners or the in-process mock server for large SDKs. + with ThreadPoolExecutor(max_workers=_smoke_concurrency(len(selected))) as executor: + results = list(executor.map(_run_case, selected)) + else: + results = [] + failed = [result for result in results if result["status"] == "failed"] + + report_path = os.environ.get("SCALAR_SMOKE_REPORT") + if report_path: + Path(report_path).write_text(json.dumps({"total": len(results), "failed": len(failed), "results": results}), encoding="utf-8") + else: + for result in results: + if result["status"] == "passed": + print(f"PASS {result['operation']} ({result['method']} {result['path']}) {result['durationMs']}ms") + else: + print(f"FAIL {result['operation']} ({result['method']} {result['path']})\n{result.get('error', '')}", file=sys.stderr) + if not results: + print("No code samples ran (empty SDK or a SCALAR_SMOKE_FILTER that matched nothing).", file=sys.stderr) + else: + print(f"\n{len(results) - len(failed)}/{len(results)} samples passed") + + if failed or not results: + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/tests/test_client.py b/tests/test_client.py deleted file mode 100644 index 5e5a0a7f..00000000 --- a/tests/test_client.py +++ /dev/null @@ -1,2010 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import gc -import os -import sys -import json -import asyncio -import inspect -import dataclasses -import tracemalloc -from typing import Any, Union, TypeVar, Callable, Iterable, Iterator, Optional, Coroutine, cast -from unittest import mock -from typing_extensions import Literal, AsyncIterator, override - -import httpx -import pytest -from respx import MockRouter -from pydantic import ValidationError - -from profound import Profound, AsyncProfound, APIResponseValidationError -from profound._types import Omit -from profound._utils import asyncify -from profound._models import BaseModel, FinalRequestOptions -from profound._exceptions import APIStatusError, APITimeoutError, APIResponseValidationError -from profound._base_client import ( - DEFAULT_TIMEOUT, - HTTPX_DEFAULT_TIMEOUT, - BaseClient, - OtherPlatform, - DefaultHttpxClient, - DefaultAsyncHttpxClient, - get_platform, - make_request_options, -) - -from .utils import update_env - -T = TypeVar("T") -base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") -api_key = "My API Key" - - -def _get_params(client: BaseClient[Any, Any]) -> dict[str, str]: - request = client._build_request(FinalRequestOptions(method="get", url="/foo")) - url = httpx.URL(request.url) - return dict(url.params) - - -def _low_retry_timeout(*_args: Any, **_kwargs: Any) -> float: - return 0.1 - - -def mirror_request_content(request: httpx.Request) -> httpx.Response: - return httpx.Response(200, content=request.content) - - -# note: we can't use the httpx.MockTransport class as it consumes the request -# body itself, which means we can't test that the body is read lazily -class MockTransport(httpx.BaseTransport, httpx.AsyncBaseTransport): - def __init__( - self, - handler: Callable[[httpx.Request], httpx.Response] - | Callable[[httpx.Request], Coroutine[Any, Any, httpx.Response]], - ) -> None: - self.handler = handler - - @override - def handle_request( - self, - request: httpx.Request, - ) -> httpx.Response: - assert not inspect.iscoroutinefunction(self.handler), "handler must not be a coroutine function" - assert inspect.isfunction(self.handler), "handler must be a function" - return self.handler(request) - - @override - async def handle_async_request( - self, - request: httpx.Request, - ) -> httpx.Response: - assert inspect.iscoroutinefunction(self.handler), "handler must be a coroutine function" - return await self.handler(request) - - -@dataclasses.dataclass -class Counter: - value: int = 0 - - -def _make_sync_iterator(iterable: Iterable[T], counter: Optional[Counter] = None) -> Iterator[T]: - for item in iterable: - if counter: - counter.value += 1 - yield item - - -async def _make_async_iterator(iterable: Iterable[T], counter: Optional[Counter] = None) -> AsyncIterator[T]: - for item in iterable: - if counter: - counter.value += 1 - yield item - - -def _get_open_connections(client: Profound | AsyncProfound) -> int: - transport = client._client._transport - assert isinstance(transport, httpx.HTTPTransport) or isinstance(transport, httpx.AsyncHTTPTransport) - - pool = transport._pool - return len(pool._requests) - - -class TestProfound: - @pytest.mark.respx(base_url=base_url) - def test_raw_response(self, respx_mock: MockRouter, client: Profound) -> None: - respx_mock.post("/foo").mock(return_value=httpx.Response(200, json={"foo": "bar"})) - - response = client.post("/foo", cast_to=httpx.Response) - assert response.status_code == 200 - assert isinstance(response, httpx.Response) - assert response.json() == {"foo": "bar"} - - @pytest.mark.respx(base_url=base_url) - def test_raw_response_for_binary(self, respx_mock: MockRouter, client: Profound) -> None: - respx_mock.post("/foo").mock( - return_value=httpx.Response(200, headers={"Content-Type": "application/binary"}, content='{"foo": "bar"}') - ) - - response = client.post("/foo", cast_to=httpx.Response) - assert response.status_code == 200 - assert isinstance(response, httpx.Response) - assert response.json() == {"foo": "bar"} - - def test_copy(self, client: Profound) -> None: - copied = client.copy() - assert id(copied) != id(client) - - copied = client.copy(api_key="another My API Key") - assert copied.api_key == "another My API Key" - assert client.api_key == "My API Key" - - def test_copy_default_options(self, client: Profound) -> None: - # options that have a default are overridden correctly - copied = client.copy(max_retries=7) - assert copied.max_retries == 7 - assert client.max_retries == 2 - - copied2 = copied.copy(max_retries=6) - assert copied2.max_retries == 6 - assert copied.max_retries == 7 - - # timeout - assert isinstance(client.timeout, httpx.Timeout) - copied = client.copy(timeout=None) - assert copied.timeout is None - assert isinstance(client.timeout, httpx.Timeout) - - def test_copy_default_headers(self) -> None: - client = Profound( - base_url=base_url, api_key=api_key, _strict_response_validation=True, default_headers={"X-Foo": "bar"} - ) - assert client.default_headers["X-Foo"] == "bar" - - # does not override the already given value when not specified - copied = client.copy() - assert copied.default_headers["X-Foo"] == "bar" - - # merges already given headers - copied = client.copy(default_headers={"X-Bar": "stainless"}) - assert copied.default_headers["X-Foo"] == "bar" - assert copied.default_headers["X-Bar"] == "stainless" - - # uses new values for any already given headers - copied = client.copy(default_headers={"X-Foo": "stainless"}) - assert copied.default_headers["X-Foo"] == "stainless" - - # set_default_headers - - # completely overrides already set values - copied = client.copy(set_default_headers={}) - assert copied.default_headers.get("X-Foo") is None - - copied = client.copy(set_default_headers={"X-Bar": "Robert"}) - assert copied.default_headers["X-Bar"] == "Robert" - - with pytest.raises( - ValueError, - match="`default_headers` and `set_default_headers` arguments are mutually exclusive", - ): - client.copy(set_default_headers={}, default_headers={"X-Foo": "Bar"}) - client.close() - - def test_copy_default_query(self) -> None: - client = Profound( - base_url=base_url, api_key=api_key, _strict_response_validation=True, default_query={"foo": "bar"} - ) - assert _get_params(client)["foo"] == "bar" - - # does not override the already given value when not specified - copied = client.copy() - assert _get_params(copied)["foo"] == "bar" - - # merges already given params - copied = client.copy(default_query={"bar": "stainless"}) - params = _get_params(copied) - assert params["foo"] == "bar" - assert params["bar"] == "stainless" - - # uses new values for any already given headers - copied = client.copy(default_query={"foo": "stainless"}) - assert _get_params(copied)["foo"] == "stainless" - - # set_default_query - - # completely overrides already set values - copied = client.copy(set_default_query={}) - assert _get_params(copied) == {} - - copied = client.copy(set_default_query={"bar": "Robert"}) - assert _get_params(copied)["bar"] == "Robert" - - with pytest.raises( - ValueError, - # TODO: update - match="`default_query` and `set_default_query` arguments are mutually exclusive", - ): - client.copy(set_default_query={}, default_query={"foo": "Bar"}) - - client.close() - - def test_copy_signature(self, client: Profound) -> None: - # ensure the same parameters that can be passed to the client are defined in the `.copy()` method - init_signature = inspect.signature( - # mypy doesn't like that we access the `__init__` property. - client.__init__, # type: ignore[misc] - ) - copy_signature = inspect.signature(client.copy) - exclude_params = {"transport", "proxies", "_strict_response_validation"} - - for name in init_signature.parameters.keys(): - if name in exclude_params: - continue - - copy_param = copy_signature.parameters.get(name) - assert copy_param is not None, f"copy() signature is missing the {name} param" - - @pytest.mark.skipif(sys.version_info >= (3, 10), reason="fails because of a memory leak that started from 3.12") - def test_copy_build_request(self, client: Profound) -> None: - options = FinalRequestOptions(method="get", url="/foo") - - def build_request(options: FinalRequestOptions) -> None: - client_copy = client.copy() - client_copy._build_request(options) - - # ensure that the machinery is warmed up before tracing starts. - build_request(options) - gc.collect() - - tracemalloc.start(1000) - - snapshot_before = tracemalloc.take_snapshot() - - ITERATIONS = 10 - for _ in range(ITERATIONS): - build_request(options) - - gc.collect() - snapshot_after = tracemalloc.take_snapshot() - - tracemalloc.stop() - - def add_leak(leaks: list[tracemalloc.StatisticDiff], diff: tracemalloc.StatisticDiff) -> None: - if diff.count == 0: - # Avoid false positives by considering only leaks (i.e. allocations that persist). - return - - if diff.count % ITERATIONS != 0: - # Avoid false positives by considering only leaks that appear per iteration. - return - - for frame in diff.traceback: - if any( - frame.filename.endswith(fragment) - for fragment in [ - # to_raw_response_wrapper leaks through the @functools.wraps() decorator. - # - # removing the decorator fixes the leak for reasons we don't understand. - "profound/_legacy_response.py", - "profound/_response.py", - # pydantic.BaseModel.model_dump || pydantic.BaseModel.dict leak memory for some reason. - "profound/_compat.py", - # Standard library leaks we don't care about. - "/logging/__init__.py", - ] - ): - return - - leaks.append(diff) - - leaks: list[tracemalloc.StatisticDiff] = [] - for diff in snapshot_after.compare_to(snapshot_before, "traceback"): - add_leak(leaks, diff) - if leaks: - for leak in leaks: - print("MEMORY LEAK:", leak) - for frame in leak.traceback: - print(frame) - raise AssertionError() - - def test_request_timeout(self, client: Profound) -> None: - request = client._build_request(FinalRequestOptions(method="get", url="/foo")) - timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore - assert timeout == DEFAULT_TIMEOUT - - request = client._build_request(FinalRequestOptions(method="get", url="/foo", timeout=httpx.Timeout(100.0))) - timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore - assert timeout == httpx.Timeout(100.0) - - def test_client_timeout_option(self) -> None: - client = Profound( - base_url=base_url, api_key=api_key, _strict_response_validation=True, timeout=httpx.Timeout(0) - ) - - request = client._build_request(FinalRequestOptions(method="get", url="/foo")) - timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore - assert timeout == httpx.Timeout(0) - - client.close() - - def test_http_client_timeout_option(self) -> None: - # custom timeout given to the httpx client should be used - with httpx.Client(timeout=None) as http_client: - client = Profound( - base_url=base_url, api_key=api_key, _strict_response_validation=True, http_client=http_client - ) - - request = client._build_request(FinalRequestOptions(method="get", url="/foo")) - timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore - assert timeout == httpx.Timeout(None) - - client.close() - - # no timeout given to the httpx client should not use the httpx default - with httpx.Client() as http_client: - client = Profound( - base_url=base_url, api_key=api_key, _strict_response_validation=True, http_client=http_client - ) - - request = client._build_request(FinalRequestOptions(method="get", url="/foo")) - timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore - assert timeout == DEFAULT_TIMEOUT - - client.close() - - # explicitly passing the default timeout currently results in it being ignored - with httpx.Client(timeout=HTTPX_DEFAULT_TIMEOUT) as http_client: - client = Profound( - base_url=base_url, api_key=api_key, _strict_response_validation=True, http_client=http_client - ) - - request = client._build_request(FinalRequestOptions(method="get", url="/foo")) - timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore - assert timeout == DEFAULT_TIMEOUT # our default - - client.close() - - async def test_invalid_http_client(self) -> None: - with pytest.raises(TypeError, match="Invalid `http_client` arg"): - async with httpx.AsyncClient() as http_client: - Profound( - base_url=base_url, - api_key=api_key, - _strict_response_validation=True, - http_client=cast(Any, http_client), - ) - - def test_default_headers_option(self) -> None: - test_client = Profound( - base_url=base_url, api_key=api_key, _strict_response_validation=True, default_headers={"X-Foo": "bar"} - ) - request = test_client._build_request(FinalRequestOptions(method="get", url="/foo")) - assert request.headers.get("x-foo") == "bar" - assert request.headers.get("x-stainless-lang") == "python" - - test_client2 = Profound( - base_url=base_url, - api_key=api_key, - _strict_response_validation=True, - default_headers={ - "X-Foo": "stainless", - "X-Stainless-Lang": "my-overriding-header", - }, - ) - request = test_client2._build_request(FinalRequestOptions(method="get", url="/foo")) - assert request.headers.get("x-foo") == "stainless" - assert request.headers.get("x-stainless-lang") == "my-overriding-header" - - test_client.close() - test_client2.close() - - def test_validate_headers(self) -> None: - client = Profound(base_url=base_url, api_key=api_key, _strict_response_validation=True) - request = client._build_request(FinalRequestOptions(method="get", url="/foo")) - assert request.headers.get("X-API-Key") == api_key - - with update_env(**{"PROFOUND_API_KEY": Omit()}): - client2 = Profound(base_url=base_url, api_key=None, _strict_response_validation=True) - - with pytest.raises( - TypeError, - match="Could not resolve authentication method. Expected either access_token or api_key to be set. Or for one of the `Authorization` or `X-API-Key` headers to be explicitly omitted", - ): - client2._build_request(FinalRequestOptions(method="get", url="/foo")) - - request2 = client2._build_request(FinalRequestOptions(method="get", url="/foo", headers={"X-API-Key": Omit()})) - assert request2.headers.get("X-API-Key") is None - - def test_default_query_option(self) -> None: - client = Profound( - base_url=base_url, api_key=api_key, _strict_response_validation=True, default_query={"query_param": "bar"} - ) - request = client._build_request(FinalRequestOptions(method="get", url="/foo")) - url = httpx.URL(request.url) - assert dict(url.params) == {"query_param": "bar"} - - request = client._build_request( - FinalRequestOptions( - method="get", - url="/foo", - params={"foo": "baz", "query_param": "overridden"}, - ) - ) - url = httpx.URL(request.url) - assert dict(url.params) == {"foo": "baz", "query_param": "overridden"} - - client.close() - - def test_hardcoded_query_params_in_url(self, client: Profound) -> None: - request = client._build_request(FinalRequestOptions(method="get", url="/foo?beta=true")) - url = httpx.URL(request.url) - assert dict(url.params) == {"beta": "true"} - - request = client._build_request( - FinalRequestOptions( - method="get", - url="/foo?beta=true", - params={"limit": "10", "page": "abc"}, - ) - ) - url = httpx.URL(request.url) - assert dict(url.params) == {"beta": "true", "limit": "10", "page": "abc"} - - request = client._build_request( - FinalRequestOptions( - method="get", - url="/files/a%2Fb?beta=true", - params={"limit": "10"}, - ) - ) - assert request.url.raw_path == b"/files/a%2Fb?beta=true&limit=10" - - def test_request_extra_json(self, client: Profound) -> None: - request = client._build_request( - FinalRequestOptions( - method="post", - url="/foo", - json_data={"foo": "bar"}, - extra_json={"baz": False}, - ), - ) - data = json.loads(request.content.decode("utf-8")) - assert data == {"foo": "bar", "baz": False} - - request = client._build_request( - FinalRequestOptions( - method="post", - url="/foo", - extra_json={"baz": False}, - ), - ) - data = json.loads(request.content.decode("utf-8")) - assert data == {"baz": False} - - # `extra_json` takes priority over `json_data` when keys clash - request = client._build_request( - FinalRequestOptions( - method="post", - url="/foo", - json_data={"foo": "bar", "baz": True}, - extra_json={"baz": None}, - ), - ) - data = json.loads(request.content.decode("utf-8")) - assert data == {"foo": "bar", "baz": None} - - def test_request_extra_headers(self, client: Profound) -> None: - request = client._build_request( - FinalRequestOptions( - method="post", - url="/foo", - **make_request_options(extra_headers={"X-Foo": "Foo"}), - ), - ) - assert request.headers.get("X-Foo") == "Foo" - - # `extra_headers` takes priority over `default_headers` when keys clash - request = client.with_options(default_headers={"X-Bar": "true"})._build_request( - FinalRequestOptions( - method="post", - url="/foo", - **make_request_options( - extra_headers={"X-Bar": "false"}, - ), - ), - ) - assert request.headers.get("X-Bar") == "false" - - def test_request_extra_query(self, client: Profound) -> None: - request = client._build_request( - FinalRequestOptions( - method="post", - url="/foo", - **make_request_options( - extra_query={"my_query_param": "Foo"}, - ), - ), - ) - params = dict(request.url.params) - assert params == {"my_query_param": "Foo"} - - # if both `query` and `extra_query` are given, they are merged - request = client._build_request( - FinalRequestOptions( - method="post", - url="/foo", - **make_request_options( - query={"bar": "1"}, - extra_query={"foo": "2"}, - ), - ), - ) - params = dict(request.url.params) - assert params == {"bar": "1", "foo": "2"} - - # `extra_query` takes priority over `query` when keys clash - request = client._build_request( - FinalRequestOptions( - method="post", - url="/foo", - **make_request_options( - query={"foo": "1"}, - extra_query={"foo": "2"}, - ), - ), - ) - params = dict(request.url.params) - assert params == {"foo": "2"} - - def test_multipart_repeating_array(self, client: Profound) -> None: - request = client._build_request( - FinalRequestOptions.construct( - method="post", - url="/foo", - headers={"Content-Type": "multipart/form-data; boundary=6b7ba517decee4a450543ea6ae821c82"}, - json_data={"array": ["foo", "bar"]}, - files=[("foo.txt", b"hello world")], - ) - ) - - assert request.read().split(b"\r\n") == [ - b"--6b7ba517decee4a450543ea6ae821c82", - b'Content-Disposition: form-data; name="array[]"', - b"", - b"foo", - b"--6b7ba517decee4a450543ea6ae821c82", - b'Content-Disposition: form-data; name="array[]"', - b"", - b"bar", - b"--6b7ba517decee4a450543ea6ae821c82", - b'Content-Disposition: form-data; name="foo.txt"; filename="upload"', - b"Content-Type: application/octet-stream", - b"", - b"hello world", - b"--6b7ba517decee4a450543ea6ae821c82--", - b"", - ] - - @pytest.mark.respx(base_url=base_url) - def test_binary_content_upload(self, respx_mock: MockRouter, client: Profound) -> None: - respx_mock.post("/upload").mock(side_effect=mirror_request_content) - - file_content = b"Hello, this is a test file." - - response = client.post( - "/upload", - content=file_content, - cast_to=httpx.Response, - options={"headers": {"Content-Type": "application/octet-stream"}}, - ) - - assert response.status_code == 200 - assert response.request.headers["Content-Type"] == "application/octet-stream" - assert response.content == file_content - - def test_binary_content_upload_with_iterator(self) -> None: - file_content = b"Hello, this is a test file." - counter = Counter() - iterator = _make_sync_iterator([file_content], counter=counter) - - def mock_handler(request: httpx.Request) -> httpx.Response: - assert counter.value == 0, "the request body should not have been read" - return httpx.Response(200, content=request.read()) - - with Profound( - base_url=base_url, - api_key=api_key, - _strict_response_validation=True, - http_client=httpx.Client(transport=MockTransport(handler=mock_handler)), - ) as client: - response = client.post( - "/upload", - content=iterator, - cast_to=httpx.Response, - options={"headers": {"Content-Type": "application/octet-stream"}}, - ) - - assert response.status_code == 200 - assert response.request.headers["Content-Type"] == "application/octet-stream" - assert response.content == file_content - assert counter.value == 1 - - @pytest.mark.respx(base_url=base_url) - def test_binary_content_upload_with_body_is_deprecated(self, respx_mock: MockRouter, client: Profound) -> None: - respx_mock.post("/upload").mock(side_effect=mirror_request_content) - - file_content = b"Hello, this is a test file." - - with pytest.deprecated_call( - match="Passing raw bytes as `body` is deprecated and will be removed in a future version. Please pass raw bytes via the `content` parameter instead." - ): - response = client.post( - "/upload", - body=file_content, - cast_to=httpx.Response, - options={"headers": {"Content-Type": "application/octet-stream"}}, - ) - - assert response.status_code == 200 - assert response.request.headers["Content-Type"] == "application/octet-stream" - assert response.content == file_content - - @pytest.mark.respx(base_url=base_url) - def test_basic_union_response(self, respx_mock: MockRouter, client: Profound) -> None: - class Model1(BaseModel): - name: str - - class Model2(BaseModel): - foo: str - - respx_mock.get("/foo").mock(return_value=httpx.Response(200, json={"foo": "bar"})) - - response = client.get("/foo", cast_to=cast(Any, Union[Model1, Model2])) - assert isinstance(response, Model2) - assert response.foo == "bar" - - @pytest.mark.respx(base_url=base_url) - def test_union_response_different_types(self, respx_mock: MockRouter, client: Profound) -> None: - """Union of objects with the same field name using a different type""" - - class Model1(BaseModel): - foo: int - - class Model2(BaseModel): - foo: str - - respx_mock.get("/foo").mock(return_value=httpx.Response(200, json={"foo": "bar"})) - - response = client.get("/foo", cast_to=cast(Any, Union[Model1, Model2])) - assert isinstance(response, Model2) - assert response.foo == "bar" - - respx_mock.get("/foo").mock(return_value=httpx.Response(200, json={"foo": 1})) - - response = client.get("/foo", cast_to=cast(Any, Union[Model1, Model2])) - assert isinstance(response, Model1) - assert response.foo == 1 - - @pytest.mark.respx(base_url=base_url) - def test_non_application_json_content_type_for_json_data(self, respx_mock: MockRouter, client: Profound) -> None: - """ - Response that sets Content-Type to something other than application/json but returns json data - """ - - class Model(BaseModel): - foo: int - - respx_mock.get("/foo").mock( - return_value=httpx.Response( - 200, - content=json.dumps({"foo": 2}), - headers={"Content-Type": "application/text"}, - ) - ) - - response = client.get("/foo", cast_to=Model) - assert isinstance(response, Model) - assert response.foo == 2 - - def test_base_url_setter(self) -> None: - client = Profound(base_url="https://example.com/from_init", api_key=api_key, _strict_response_validation=True) - assert client.base_url == "https://example.com/from_init/" - - client.base_url = "https://example.com/from_setter" # type: ignore[assignment] - - assert client.base_url == "https://example.com/from_setter/" - - client.close() - - def test_base_url_env(self) -> None: - with update_env(PROFOUND_BASE_URL="http://localhost:5000/from/env"): - client = Profound(api_key=api_key, _strict_response_validation=True) - assert client.base_url == "http://localhost:5000/from/env/" - - # explicit environment arg requires explicitness - with update_env(PROFOUND_BASE_URL="http://localhost:5000/from/env"): - with pytest.raises(ValueError, match=r"you must pass base_url=None"): - Profound(api_key=api_key, _strict_response_validation=True, environment="production") - - client = Profound( - base_url=None, api_key=api_key, _strict_response_validation=True, environment="production" - ) - assert str(client.base_url).startswith("https://api.tryprofound.com") - - client.close() - - @pytest.mark.parametrize( - "client", - [ - Profound(base_url="http://localhost:5000/custom/path/", api_key=api_key, _strict_response_validation=True), - Profound( - base_url="http://localhost:5000/custom/path/", - api_key=api_key, - _strict_response_validation=True, - http_client=httpx.Client(), - ), - ], - ids=["standard", "custom http client"], - ) - def test_base_url_trailing_slash(self, client: Profound) -> None: - request = client._build_request( - FinalRequestOptions( - method="post", - url="/foo", - json_data={"foo": "bar"}, - ), - ) - assert request.url == "http://localhost:5000/custom/path/foo" - client.close() - - @pytest.mark.parametrize( - "client", - [ - Profound(base_url="http://localhost:5000/custom/path/", api_key=api_key, _strict_response_validation=True), - Profound( - base_url="http://localhost:5000/custom/path/", - api_key=api_key, - _strict_response_validation=True, - http_client=httpx.Client(), - ), - ], - ids=["standard", "custom http client"], - ) - def test_base_url_no_trailing_slash(self, client: Profound) -> None: - request = client._build_request( - FinalRequestOptions( - method="post", - url="/foo", - json_data={"foo": "bar"}, - ), - ) - assert request.url == "http://localhost:5000/custom/path/foo" - client.close() - - @pytest.mark.parametrize( - "client", - [ - Profound(base_url="http://localhost:5000/custom/path/", api_key=api_key, _strict_response_validation=True), - Profound( - base_url="http://localhost:5000/custom/path/", - api_key=api_key, - _strict_response_validation=True, - http_client=httpx.Client(), - ), - ], - ids=["standard", "custom http client"], - ) - def test_absolute_request_url(self, client: Profound) -> None: - request = client._build_request( - FinalRequestOptions( - method="post", - url="https://myapi.com/foo", - json_data={"foo": "bar"}, - ), - ) - assert request.url == "https://myapi.com/foo" - client.close() - - def test_copied_client_does_not_close_http(self) -> None: - test_client = Profound(base_url=base_url, api_key=api_key, _strict_response_validation=True) - assert not test_client.is_closed() - - copied = test_client.copy() - assert copied is not test_client - - del copied - - assert not test_client.is_closed() - - def test_client_context_manager(self) -> None: - test_client = Profound(base_url=base_url, api_key=api_key, _strict_response_validation=True) - with test_client as c2: - assert c2 is test_client - assert not c2.is_closed() - assert not test_client.is_closed() - assert test_client.is_closed() - - @pytest.mark.respx(base_url=base_url) - def test_client_response_validation_error(self, respx_mock: MockRouter, client: Profound) -> None: - class Model(BaseModel): - foo: str - - respx_mock.get("/foo").mock(return_value=httpx.Response(200, json={"foo": {"invalid": True}})) - - with pytest.raises(APIResponseValidationError) as exc: - client.get("/foo", cast_to=Model) - - assert isinstance(exc.value.__cause__, ValidationError) - - def test_client_max_retries_validation(self) -> None: - with pytest.raises(TypeError, match=r"max_retries cannot be None"): - Profound(base_url=base_url, api_key=api_key, _strict_response_validation=True, max_retries=cast(Any, None)) - - @pytest.mark.respx(base_url=base_url) - def test_received_text_for_expected_json(self, respx_mock: MockRouter) -> None: - class Model(BaseModel): - name: str - - respx_mock.get("/foo").mock(return_value=httpx.Response(200, text="my-custom-format")) - - strict_client = Profound(base_url=base_url, api_key=api_key, _strict_response_validation=True) - - with pytest.raises(APIResponseValidationError): - strict_client.get("/foo", cast_to=Model) - - non_strict_client = Profound(base_url=base_url, api_key=api_key, _strict_response_validation=False) - - response = non_strict_client.get("/foo", cast_to=Model) - assert isinstance(response, str) # type: ignore[unreachable] - - strict_client.close() - non_strict_client.close() - - @pytest.mark.parametrize( - "remaining_retries,retry_after,timeout", - [ - [3, "20", 20], - [3, "0", 0.5], - [3, "-10", 0.5], - [3, "60", 60], - [3, "61", 0.5], - [3, "Fri, 29 Sep 2023 16:26:57 GMT", 20], - [3, "Fri, 29 Sep 2023 16:26:37 GMT", 0.5], - [3, "Fri, 29 Sep 2023 16:26:27 GMT", 0.5], - [3, "Fri, 29 Sep 2023 16:27:37 GMT", 60], - [3, "Fri, 29 Sep 2023 16:27:38 GMT", 0.5], - [3, "99999999999999999999999999999999999", 0.5], - [3, "Zun, 29 Sep 2023 16:26:27 GMT", 0.5], - [3, "", 0.5], - [2, "", 0.5 * 2.0], - [1, "", 0.5 * 4.0], - [-1100, "", 8], # test large number potentially overflowing - ], - ) - @mock.patch("time.time", mock.MagicMock(return_value=1696004797)) - def test_parse_retry_after_header( - self, remaining_retries: int, retry_after: str, timeout: float, client: Profound - ) -> None: - headers = httpx.Headers({"retry-after": retry_after}) - options = FinalRequestOptions(method="get", url="/foo", max_retries=3) - calculated = client._calculate_retry_timeout(remaining_retries, options, headers) - assert calculated == pytest.approx(timeout, 0.5 * 0.875) # pyright: ignore[reportUnknownMemberType] - - @mock.patch("profound._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) - @pytest.mark.respx(base_url=base_url) - def test_retrying_timeout_errors_doesnt_leak(self, respx_mock: MockRouter, client: Profound) -> None: - respx_mock.get("/v1/org/categories").mock(side_effect=httpx.TimeoutException("Test timeout error")) - - with pytest.raises(APITimeoutError): - client.organizations.categories.with_streaming_response.list().__enter__() - - assert _get_open_connections(client) == 0 - - @mock.patch("profound._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) - @pytest.mark.respx(base_url=base_url) - def test_retrying_status_errors_doesnt_leak(self, respx_mock: MockRouter, client: Profound) -> None: - respx_mock.get("/v1/org/categories").mock(return_value=httpx.Response(500)) - - with pytest.raises(APIStatusError): - client.organizations.categories.with_streaming_response.list().__enter__() - assert _get_open_connections(client) == 0 - - @pytest.mark.parametrize("failures_before_success", [0, 2, 4]) - @mock.patch("profound._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) - @pytest.mark.respx(base_url=base_url) - @pytest.mark.parametrize("failure_mode", ["status", "exception"]) - def test_retries_taken( - self, - client: Profound, - failures_before_success: int, - failure_mode: Literal["status", "exception"], - respx_mock: MockRouter, - ) -> None: - client = client.with_options(max_retries=4) - - nb_retries = 0 - - def retry_handler(_request: httpx.Request) -> httpx.Response: - nonlocal nb_retries - if nb_retries < failures_before_success: - nb_retries += 1 - if failure_mode == "exception": - raise RuntimeError("oops") - return httpx.Response(500) - return httpx.Response(200) - - respx_mock.get("/v1/org/categories").mock(side_effect=retry_handler) - - response = client.organizations.categories.with_raw_response.list() - - assert response.retries_taken == failures_before_success - assert int(response.http_request.headers.get("x-stainless-retry-count")) == failures_before_success - - @pytest.mark.parametrize("failures_before_success", [0, 2, 4]) - @mock.patch("profound._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) - @pytest.mark.respx(base_url=base_url) - def test_omit_retry_count_header( - self, client: Profound, failures_before_success: int, respx_mock: MockRouter - ) -> None: - client = client.with_options(max_retries=4) - - nb_retries = 0 - - def retry_handler(_request: httpx.Request) -> httpx.Response: - nonlocal nb_retries - if nb_retries < failures_before_success: - nb_retries += 1 - return httpx.Response(500) - return httpx.Response(200) - - respx_mock.get("/v1/org/categories").mock(side_effect=retry_handler) - - response = client.organizations.categories.with_raw_response.list( - extra_headers={"x-stainless-retry-count": Omit()} - ) - - assert len(response.http_request.headers.get_list("x-stainless-retry-count")) == 0 - - @pytest.mark.parametrize("failures_before_success", [0, 2, 4]) - @mock.patch("profound._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) - @pytest.mark.respx(base_url=base_url) - def test_overwrite_retry_count_header( - self, client: Profound, failures_before_success: int, respx_mock: MockRouter - ) -> None: - client = client.with_options(max_retries=4) - - nb_retries = 0 - - def retry_handler(_request: httpx.Request) -> httpx.Response: - nonlocal nb_retries - if nb_retries < failures_before_success: - nb_retries += 1 - return httpx.Response(500) - return httpx.Response(200) - - respx_mock.get("/v1/org/categories").mock(side_effect=retry_handler) - - response = client.organizations.categories.with_raw_response.list( - extra_headers={"x-stainless-retry-count": "42"} - ) - - assert response.http_request.headers.get("x-stainless-retry-count") == "42" - - def test_proxy_environment_variables(self, monkeypatch: pytest.MonkeyPatch) -> None: - # Test that the proxy environment variables are set correctly - monkeypatch.setenv("HTTPS_PROXY", "https://example.org") - # Delete in case our environment has any proxy env vars set - monkeypatch.delenv("HTTP_PROXY", raising=False) - monkeypatch.delenv("ALL_PROXY", raising=False) - monkeypatch.delenv("NO_PROXY", raising=False) - monkeypatch.delenv("http_proxy", raising=False) - monkeypatch.delenv("https_proxy", raising=False) - monkeypatch.delenv("all_proxy", raising=False) - monkeypatch.delenv("no_proxy", raising=False) - - client = DefaultHttpxClient() - - mounts = tuple(client._mounts.items()) - assert len(mounts) == 1 - assert mounts[0][0].pattern == "https://" - - @pytest.mark.filterwarnings("ignore:.*deprecated.*:DeprecationWarning") - def test_default_client_creation(self) -> None: - # Ensure that the client can be initialized without any exceptions - DefaultHttpxClient( - verify=True, - cert=None, - trust_env=True, - http1=True, - http2=False, - limits=httpx.Limits(max_connections=100, max_keepalive_connections=20), - ) - - @pytest.mark.respx(base_url=base_url) - def test_follow_redirects(self, respx_mock: MockRouter, client: Profound) -> None: - # Test that the default follow_redirects=True allows following redirects - respx_mock.post("/redirect").mock( - return_value=httpx.Response(302, headers={"Location": f"{base_url}/redirected"}) - ) - respx_mock.get("/redirected").mock(return_value=httpx.Response(200, json={"status": "ok"})) - - response = client.post("/redirect", body={"key": "value"}, cast_to=httpx.Response) - assert response.status_code == 200 - assert response.json() == {"status": "ok"} - - @pytest.mark.respx(base_url=base_url) - def test_follow_redirects_disabled(self, respx_mock: MockRouter, client: Profound) -> None: - # Test that follow_redirects=False prevents following redirects - respx_mock.post("/redirect").mock( - return_value=httpx.Response(302, headers={"Location": f"{base_url}/redirected"}) - ) - - with pytest.raises(APIStatusError) as exc_info: - client.post("/redirect", body={"key": "value"}, options={"follow_redirects": False}, cast_to=httpx.Response) - - assert exc_info.value.response.status_code == 302 - assert exc_info.value.response.headers["Location"] == f"{base_url}/redirected" - - -class TestAsyncProfound: - @pytest.mark.respx(base_url=base_url) - async def test_raw_response(self, respx_mock: MockRouter, async_client: AsyncProfound) -> None: - respx_mock.post("/foo").mock(return_value=httpx.Response(200, json={"foo": "bar"})) - - response = await async_client.post("/foo", cast_to=httpx.Response) - assert response.status_code == 200 - assert isinstance(response, httpx.Response) - assert response.json() == {"foo": "bar"} - - @pytest.mark.respx(base_url=base_url) - async def test_raw_response_for_binary(self, respx_mock: MockRouter, async_client: AsyncProfound) -> None: - respx_mock.post("/foo").mock( - return_value=httpx.Response(200, headers={"Content-Type": "application/binary"}, content='{"foo": "bar"}') - ) - - response = await async_client.post("/foo", cast_to=httpx.Response) - assert response.status_code == 200 - assert isinstance(response, httpx.Response) - assert response.json() == {"foo": "bar"} - - def test_copy(self, async_client: AsyncProfound) -> None: - copied = async_client.copy() - assert id(copied) != id(async_client) - - copied = async_client.copy(api_key="another My API Key") - assert copied.api_key == "another My API Key" - assert async_client.api_key == "My API Key" - - def test_copy_default_options(self, async_client: AsyncProfound) -> None: - # options that have a default are overridden correctly - copied = async_client.copy(max_retries=7) - assert copied.max_retries == 7 - assert async_client.max_retries == 2 - - copied2 = copied.copy(max_retries=6) - assert copied2.max_retries == 6 - assert copied.max_retries == 7 - - # timeout - assert isinstance(async_client.timeout, httpx.Timeout) - copied = async_client.copy(timeout=None) - assert copied.timeout is None - assert isinstance(async_client.timeout, httpx.Timeout) - - async def test_copy_default_headers(self) -> None: - client = AsyncProfound( - base_url=base_url, api_key=api_key, _strict_response_validation=True, default_headers={"X-Foo": "bar"} - ) - assert client.default_headers["X-Foo"] == "bar" - - # does not override the already given value when not specified - copied = client.copy() - assert copied.default_headers["X-Foo"] == "bar" - - # merges already given headers - copied = client.copy(default_headers={"X-Bar": "stainless"}) - assert copied.default_headers["X-Foo"] == "bar" - assert copied.default_headers["X-Bar"] == "stainless" - - # uses new values for any already given headers - copied = client.copy(default_headers={"X-Foo": "stainless"}) - assert copied.default_headers["X-Foo"] == "stainless" - - # set_default_headers - - # completely overrides already set values - copied = client.copy(set_default_headers={}) - assert copied.default_headers.get("X-Foo") is None - - copied = client.copy(set_default_headers={"X-Bar": "Robert"}) - assert copied.default_headers["X-Bar"] == "Robert" - - with pytest.raises( - ValueError, - match="`default_headers` and `set_default_headers` arguments are mutually exclusive", - ): - client.copy(set_default_headers={}, default_headers={"X-Foo": "Bar"}) - await client.close() - - async def test_copy_default_query(self) -> None: - client = AsyncProfound( - base_url=base_url, api_key=api_key, _strict_response_validation=True, default_query={"foo": "bar"} - ) - assert _get_params(client)["foo"] == "bar" - - # does not override the already given value when not specified - copied = client.copy() - assert _get_params(copied)["foo"] == "bar" - - # merges already given params - copied = client.copy(default_query={"bar": "stainless"}) - params = _get_params(copied) - assert params["foo"] == "bar" - assert params["bar"] == "stainless" - - # uses new values for any already given headers - copied = client.copy(default_query={"foo": "stainless"}) - assert _get_params(copied)["foo"] == "stainless" - - # set_default_query - - # completely overrides already set values - copied = client.copy(set_default_query={}) - assert _get_params(copied) == {} - - copied = client.copy(set_default_query={"bar": "Robert"}) - assert _get_params(copied)["bar"] == "Robert" - - with pytest.raises( - ValueError, - # TODO: update - match="`default_query` and `set_default_query` arguments are mutually exclusive", - ): - client.copy(set_default_query={}, default_query={"foo": "Bar"}) - - await client.close() - - def test_copy_signature(self, async_client: AsyncProfound) -> None: - # ensure the same parameters that can be passed to the client are defined in the `.copy()` method - init_signature = inspect.signature( - # mypy doesn't like that we access the `__init__` property. - async_client.__init__, # type: ignore[misc] - ) - copy_signature = inspect.signature(async_client.copy) - exclude_params = {"transport", "proxies", "_strict_response_validation"} - - for name in init_signature.parameters.keys(): - if name in exclude_params: - continue - - copy_param = copy_signature.parameters.get(name) - assert copy_param is not None, f"copy() signature is missing the {name} param" - - @pytest.mark.skipif(sys.version_info >= (3, 10), reason="fails because of a memory leak that started from 3.12") - def test_copy_build_request(self, async_client: AsyncProfound) -> None: - options = FinalRequestOptions(method="get", url="/foo") - - def build_request(options: FinalRequestOptions) -> None: - client_copy = async_client.copy() - client_copy._build_request(options) - - # ensure that the machinery is warmed up before tracing starts. - build_request(options) - gc.collect() - - tracemalloc.start(1000) - - snapshot_before = tracemalloc.take_snapshot() - - ITERATIONS = 10 - for _ in range(ITERATIONS): - build_request(options) - - gc.collect() - snapshot_after = tracemalloc.take_snapshot() - - tracemalloc.stop() - - def add_leak(leaks: list[tracemalloc.StatisticDiff], diff: tracemalloc.StatisticDiff) -> None: - if diff.count == 0: - # Avoid false positives by considering only leaks (i.e. allocations that persist). - return - - if diff.count % ITERATIONS != 0: - # Avoid false positives by considering only leaks that appear per iteration. - return - - for frame in diff.traceback: - if any( - frame.filename.endswith(fragment) - for fragment in [ - # to_raw_response_wrapper leaks through the @functools.wraps() decorator. - # - # removing the decorator fixes the leak for reasons we don't understand. - "profound/_legacy_response.py", - "profound/_response.py", - # pydantic.BaseModel.model_dump || pydantic.BaseModel.dict leak memory for some reason. - "profound/_compat.py", - # Standard library leaks we don't care about. - "/logging/__init__.py", - ] - ): - return - - leaks.append(diff) - - leaks: list[tracemalloc.StatisticDiff] = [] - for diff in snapshot_after.compare_to(snapshot_before, "traceback"): - add_leak(leaks, diff) - if leaks: - for leak in leaks: - print("MEMORY LEAK:", leak) - for frame in leak.traceback: - print(frame) - raise AssertionError() - - async def test_request_timeout(self, async_client: AsyncProfound) -> None: - request = async_client._build_request(FinalRequestOptions(method="get", url="/foo")) - timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore - assert timeout == DEFAULT_TIMEOUT - - request = async_client._build_request( - FinalRequestOptions(method="get", url="/foo", timeout=httpx.Timeout(100.0)) - ) - timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore - assert timeout == httpx.Timeout(100.0) - - async def test_client_timeout_option(self) -> None: - client = AsyncProfound( - base_url=base_url, api_key=api_key, _strict_response_validation=True, timeout=httpx.Timeout(0) - ) - - request = client._build_request(FinalRequestOptions(method="get", url="/foo")) - timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore - assert timeout == httpx.Timeout(0) - - await client.close() - - async def test_http_client_timeout_option(self) -> None: - # custom timeout given to the httpx client should be used - async with httpx.AsyncClient(timeout=None) as http_client: - client = AsyncProfound( - base_url=base_url, api_key=api_key, _strict_response_validation=True, http_client=http_client - ) - - request = client._build_request(FinalRequestOptions(method="get", url="/foo")) - timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore - assert timeout == httpx.Timeout(None) - - await client.close() - - # no timeout given to the httpx client should not use the httpx default - async with httpx.AsyncClient() as http_client: - client = AsyncProfound( - base_url=base_url, api_key=api_key, _strict_response_validation=True, http_client=http_client - ) - - request = client._build_request(FinalRequestOptions(method="get", url="/foo")) - timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore - assert timeout == DEFAULT_TIMEOUT - - await client.close() - - # explicitly passing the default timeout currently results in it being ignored - async with httpx.AsyncClient(timeout=HTTPX_DEFAULT_TIMEOUT) as http_client: - client = AsyncProfound( - base_url=base_url, api_key=api_key, _strict_response_validation=True, http_client=http_client - ) - - request = client._build_request(FinalRequestOptions(method="get", url="/foo")) - timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore - assert timeout == DEFAULT_TIMEOUT # our default - - await client.close() - - def test_invalid_http_client(self) -> None: - with pytest.raises(TypeError, match="Invalid `http_client` arg"): - with httpx.Client() as http_client: - AsyncProfound( - base_url=base_url, - api_key=api_key, - _strict_response_validation=True, - http_client=cast(Any, http_client), - ) - - async def test_default_headers_option(self) -> None: - test_client = AsyncProfound( - base_url=base_url, api_key=api_key, _strict_response_validation=True, default_headers={"X-Foo": "bar"} - ) - request = test_client._build_request(FinalRequestOptions(method="get", url="/foo")) - assert request.headers.get("x-foo") == "bar" - assert request.headers.get("x-stainless-lang") == "python" - - test_client2 = AsyncProfound( - base_url=base_url, - api_key=api_key, - _strict_response_validation=True, - default_headers={ - "X-Foo": "stainless", - "X-Stainless-Lang": "my-overriding-header", - }, - ) - request = test_client2._build_request(FinalRequestOptions(method="get", url="/foo")) - assert request.headers.get("x-foo") == "stainless" - assert request.headers.get("x-stainless-lang") == "my-overriding-header" - - await test_client.close() - await test_client2.close() - - def test_validate_headers(self) -> None: - client = AsyncProfound(base_url=base_url, api_key=api_key, _strict_response_validation=True) - request = client._build_request(FinalRequestOptions(method="get", url="/foo")) - assert request.headers.get("X-API-Key") == api_key - - with update_env(**{"PROFOUND_API_KEY": Omit()}): - client2 = AsyncProfound(base_url=base_url, api_key=None, _strict_response_validation=True) - - with pytest.raises( - TypeError, - match="Could not resolve authentication method. Expected either access_token or api_key to be set. Or for one of the `Authorization` or `X-API-Key` headers to be explicitly omitted", - ): - client2._build_request(FinalRequestOptions(method="get", url="/foo")) - - request2 = client2._build_request(FinalRequestOptions(method="get", url="/foo", headers={"X-API-Key": Omit()})) - assert request2.headers.get("X-API-Key") is None - - async def test_default_query_option(self) -> None: - client = AsyncProfound( - base_url=base_url, api_key=api_key, _strict_response_validation=True, default_query={"query_param": "bar"} - ) - request = client._build_request(FinalRequestOptions(method="get", url="/foo")) - url = httpx.URL(request.url) - assert dict(url.params) == {"query_param": "bar"} - - request = client._build_request( - FinalRequestOptions( - method="get", - url="/foo", - params={"foo": "baz", "query_param": "overridden"}, - ) - ) - url = httpx.URL(request.url) - assert dict(url.params) == {"foo": "baz", "query_param": "overridden"} - - await client.close() - - async def test_hardcoded_query_params_in_url(self, async_client: AsyncProfound) -> None: - request = async_client._build_request(FinalRequestOptions(method="get", url="/foo?beta=true")) - url = httpx.URL(request.url) - assert dict(url.params) == {"beta": "true"} - - request = async_client._build_request( - FinalRequestOptions( - method="get", - url="/foo?beta=true", - params={"limit": "10", "page": "abc"}, - ) - ) - url = httpx.URL(request.url) - assert dict(url.params) == {"beta": "true", "limit": "10", "page": "abc"} - - request = async_client._build_request( - FinalRequestOptions( - method="get", - url="/files/a%2Fb?beta=true", - params={"limit": "10"}, - ) - ) - assert request.url.raw_path == b"/files/a%2Fb?beta=true&limit=10" - - def test_request_extra_json(self, client: Profound) -> None: - request = client._build_request( - FinalRequestOptions( - method="post", - url="/foo", - json_data={"foo": "bar"}, - extra_json={"baz": False}, - ), - ) - data = json.loads(request.content.decode("utf-8")) - assert data == {"foo": "bar", "baz": False} - - request = client._build_request( - FinalRequestOptions( - method="post", - url="/foo", - extra_json={"baz": False}, - ), - ) - data = json.loads(request.content.decode("utf-8")) - assert data == {"baz": False} - - # `extra_json` takes priority over `json_data` when keys clash - request = client._build_request( - FinalRequestOptions( - method="post", - url="/foo", - json_data={"foo": "bar", "baz": True}, - extra_json={"baz": None}, - ), - ) - data = json.loads(request.content.decode("utf-8")) - assert data == {"foo": "bar", "baz": None} - - def test_request_extra_headers(self, client: Profound) -> None: - request = client._build_request( - FinalRequestOptions( - method="post", - url="/foo", - **make_request_options(extra_headers={"X-Foo": "Foo"}), - ), - ) - assert request.headers.get("X-Foo") == "Foo" - - # `extra_headers` takes priority over `default_headers` when keys clash - request = client.with_options(default_headers={"X-Bar": "true"})._build_request( - FinalRequestOptions( - method="post", - url="/foo", - **make_request_options( - extra_headers={"X-Bar": "false"}, - ), - ), - ) - assert request.headers.get("X-Bar") == "false" - - def test_request_extra_query(self, client: Profound) -> None: - request = client._build_request( - FinalRequestOptions( - method="post", - url="/foo", - **make_request_options( - extra_query={"my_query_param": "Foo"}, - ), - ), - ) - params = dict(request.url.params) - assert params == {"my_query_param": "Foo"} - - # if both `query` and `extra_query` are given, they are merged - request = client._build_request( - FinalRequestOptions( - method="post", - url="/foo", - **make_request_options( - query={"bar": "1"}, - extra_query={"foo": "2"}, - ), - ), - ) - params = dict(request.url.params) - assert params == {"bar": "1", "foo": "2"} - - # `extra_query` takes priority over `query` when keys clash - request = client._build_request( - FinalRequestOptions( - method="post", - url="/foo", - **make_request_options( - query={"foo": "1"}, - extra_query={"foo": "2"}, - ), - ), - ) - params = dict(request.url.params) - assert params == {"foo": "2"} - - def test_multipart_repeating_array(self, async_client: AsyncProfound) -> None: - request = async_client._build_request( - FinalRequestOptions.construct( - method="post", - url="/foo", - headers={"Content-Type": "multipart/form-data; boundary=6b7ba517decee4a450543ea6ae821c82"}, - json_data={"array": ["foo", "bar"]}, - files=[("foo.txt", b"hello world")], - ) - ) - - assert request.read().split(b"\r\n") == [ - b"--6b7ba517decee4a450543ea6ae821c82", - b'Content-Disposition: form-data; name="array[]"', - b"", - b"foo", - b"--6b7ba517decee4a450543ea6ae821c82", - b'Content-Disposition: form-data; name="array[]"', - b"", - b"bar", - b"--6b7ba517decee4a450543ea6ae821c82", - b'Content-Disposition: form-data; name="foo.txt"; filename="upload"', - b"Content-Type: application/octet-stream", - b"", - b"hello world", - b"--6b7ba517decee4a450543ea6ae821c82--", - b"", - ] - - @pytest.mark.respx(base_url=base_url) - async def test_binary_content_upload(self, respx_mock: MockRouter, async_client: AsyncProfound) -> None: - respx_mock.post("/upload").mock(side_effect=mirror_request_content) - - file_content = b"Hello, this is a test file." - - response = await async_client.post( - "/upload", - content=file_content, - cast_to=httpx.Response, - options={"headers": {"Content-Type": "application/octet-stream"}}, - ) - - assert response.status_code == 200 - assert response.request.headers["Content-Type"] == "application/octet-stream" - assert response.content == file_content - - async def test_binary_content_upload_with_asynciterator(self) -> None: - file_content = b"Hello, this is a test file." - counter = Counter() - iterator = _make_async_iterator([file_content], counter=counter) - - async def mock_handler(request: httpx.Request) -> httpx.Response: - assert counter.value == 0, "the request body should not have been read" - return httpx.Response(200, content=await request.aread()) - - async with AsyncProfound( - base_url=base_url, - api_key=api_key, - _strict_response_validation=True, - http_client=httpx.AsyncClient(transport=MockTransport(handler=mock_handler)), - ) as client: - response = await client.post( - "/upload", - content=iterator, - cast_to=httpx.Response, - options={"headers": {"Content-Type": "application/octet-stream"}}, - ) - - assert response.status_code == 200 - assert response.request.headers["Content-Type"] == "application/octet-stream" - assert response.content == file_content - assert counter.value == 1 - - @pytest.mark.respx(base_url=base_url) - async def test_binary_content_upload_with_body_is_deprecated( - self, respx_mock: MockRouter, async_client: AsyncProfound - ) -> None: - respx_mock.post("/upload").mock(side_effect=mirror_request_content) - - file_content = b"Hello, this is a test file." - - with pytest.deprecated_call( - match="Passing raw bytes as `body` is deprecated and will be removed in a future version. Please pass raw bytes via the `content` parameter instead." - ): - response = await async_client.post( - "/upload", - body=file_content, - cast_to=httpx.Response, - options={"headers": {"Content-Type": "application/octet-stream"}}, - ) - - assert response.status_code == 200 - assert response.request.headers["Content-Type"] == "application/octet-stream" - assert response.content == file_content - - @pytest.mark.respx(base_url=base_url) - async def test_basic_union_response(self, respx_mock: MockRouter, async_client: AsyncProfound) -> None: - class Model1(BaseModel): - name: str - - class Model2(BaseModel): - foo: str - - respx_mock.get("/foo").mock(return_value=httpx.Response(200, json={"foo": "bar"})) - - response = await async_client.get("/foo", cast_to=cast(Any, Union[Model1, Model2])) - assert isinstance(response, Model2) - assert response.foo == "bar" - - @pytest.mark.respx(base_url=base_url) - async def test_union_response_different_types(self, respx_mock: MockRouter, async_client: AsyncProfound) -> None: - """Union of objects with the same field name using a different type""" - - class Model1(BaseModel): - foo: int - - class Model2(BaseModel): - foo: str - - respx_mock.get("/foo").mock(return_value=httpx.Response(200, json={"foo": "bar"})) - - response = await async_client.get("/foo", cast_to=cast(Any, Union[Model1, Model2])) - assert isinstance(response, Model2) - assert response.foo == "bar" - - respx_mock.get("/foo").mock(return_value=httpx.Response(200, json={"foo": 1})) - - response = await async_client.get("/foo", cast_to=cast(Any, Union[Model1, Model2])) - assert isinstance(response, Model1) - assert response.foo == 1 - - @pytest.mark.respx(base_url=base_url) - async def test_non_application_json_content_type_for_json_data( - self, respx_mock: MockRouter, async_client: AsyncProfound - ) -> None: - """ - Response that sets Content-Type to something other than application/json but returns json data - """ - - class Model(BaseModel): - foo: int - - respx_mock.get("/foo").mock( - return_value=httpx.Response( - 200, - content=json.dumps({"foo": 2}), - headers={"Content-Type": "application/text"}, - ) - ) - - response = await async_client.get("/foo", cast_to=Model) - assert isinstance(response, Model) - assert response.foo == 2 - - async def test_base_url_setter(self) -> None: - client = AsyncProfound( - base_url="https://example.com/from_init", api_key=api_key, _strict_response_validation=True - ) - assert client.base_url == "https://example.com/from_init/" - - client.base_url = "https://example.com/from_setter" # type: ignore[assignment] - - assert client.base_url == "https://example.com/from_setter/" - - await client.close() - - async def test_base_url_env(self) -> None: - with update_env(PROFOUND_BASE_URL="http://localhost:5000/from/env"): - client = AsyncProfound(api_key=api_key, _strict_response_validation=True) - assert client.base_url == "http://localhost:5000/from/env/" - - # explicit environment arg requires explicitness - with update_env(PROFOUND_BASE_URL="http://localhost:5000/from/env"): - with pytest.raises(ValueError, match=r"you must pass base_url=None"): - AsyncProfound(api_key=api_key, _strict_response_validation=True, environment="production") - - client = AsyncProfound( - base_url=None, api_key=api_key, _strict_response_validation=True, environment="production" - ) - assert str(client.base_url).startswith("https://api.tryprofound.com") - - await client.close() - - @pytest.mark.parametrize( - "client", - [ - AsyncProfound( - base_url="http://localhost:5000/custom/path/", api_key=api_key, _strict_response_validation=True - ), - AsyncProfound( - base_url="http://localhost:5000/custom/path/", - api_key=api_key, - _strict_response_validation=True, - http_client=httpx.AsyncClient(), - ), - ], - ids=["standard", "custom http client"], - ) - async def test_base_url_trailing_slash(self, client: AsyncProfound) -> None: - request = client._build_request( - FinalRequestOptions( - method="post", - url="/foo", - json_data={"foo": "bar"}, - ), - ) - assert request.url == "http://localhost:5000/custom/path/foo" - await client.close() - - @pytest.mark.parametrize( - "client", - [ - AsyncProfound( - base_url="http://localhost:5000/custom/path/", api_key=api_key, _strict_response_validation=True - ), - AsyncProfound( - base_url="http://localhost:5000/custom/path/", - api_key=api_key, - _strict_response_validation=True, - http_client=httpx.AsyncClient(), - ), - ], - ids=["standard", "custom http client"], - ) - async def test_base_url_no_trailing_slash(self, client: AsyncProfound) -> None: - request = client._build_request( - FinalRequestOptions( - method="post", - url="/foo", - json_data={"foo": "bar"}, - ), - ) - assert request.url == "http://localhost:5000/custom/path/foo" - await client.close() - - @pytest.mark.parametrize( - "client", - [ - AsyncProfound( - base_url="http://localhost:5000/custom/path/", api_key=api_key, _strict_response_validation=True - ), - AsyncProfound( - base_url="http://localhost:5000/custom/path/", - api_key=api_key, - _strict_response_validation=True, - http_client=httpx.AsyncClient(), - ), - ], - ids=["standard", "custom http client"], - ) - async def test_absolute_request_url(self, client: AsyncProfound) -> None: - request = client._build_request( - FinalRequestOptions( - method="post", - url="https://myapi.com/foo", - json_data={"foo": "bar"}, - ), - ) - assert request.url == "https://myapi.com/foo" - await client.close() - - async def test_copied_client_does_not_close_http(self) -> None: - test_client = AsyncProfound(base_url=base_url, api_key=api_key, _strict_response_validation=True) - assert not test_client.is_closed() - - copied = test_client.copy() - assert copied is not test_client - - del copied - - await asyncio.sleep(0.2) - assert not test_client.is_closed() - - async def test_client_context_manager(self) -> None: - test_client = AsyncProfound(base_url=base_url, api_key=api_key, _strict_response_validation=True) - async with test_client as c2: - assert c2 is test_client - assert not c2.is_closed() - assert not test_client.is_closed() - assert test_client.is_closed() - - @pytest.mark.respx(base_url=base_url) - async def test_client_response_validation_error(self, respx_mock: MockRouter, async_client: AsyncProfound) -> None: - class Model(BaseModel): - foo: str - - respx_mock.get("/foo").mock(return_value=httpx.Response(200, json={"foo": {"invalid": True}})) - - with pytest.raises(APIResponseValidationError) as exc: - await async_client.get("/foo", cast_to=Model) - - assert isinstance(exc.value.__cause__, ValidationError) - - async def test_client_max_retries_validation(self) -> None: - with pytest.raises(TypeError, match=r"max_retries cannot be None"): - AsyncProfound( - base_url=base_url, api_key=api_key, _strict_response_validation=True, max_retries=cast(Any, None) - ) - - @pytest.mark.respx(base_url=base_url) - async def test_received_text_for_expected_json(self, respx_mock: MockRouter) -> None: - class Model(BaseModel): - name: str - - respx_mock.get("/foo").mock(return_value=httpx.Response(200, text="my-custom-format")) - - strict_client = AsyncProfound(base_url=base_url, api_key=api_key, _strict_response_validation=True) - - with pytest.raises(APIResponseValidationError): - await strict_client.get("/foo", cast_to=Model) - - non_strict_client = AsyncProfound(base_url=base_url, api_key=api_key, _strict_response_validation=False) - - response = await non_strict_client.get("/foo", cast_to=Model) - assert isinstance(response, str) # type: ignore[unreachable] - - await strict_client.close() - await non_strict_client.close() - - @pytest.mark.parametrize( - "remaining_retries,retry_after,timeout", - [ - [3, "20", 20], - [3, "0", 0.5], - [3, "-10", 0.5], - [3, "60", 60], - [3, "61", 0.5], - [3, "Fri, 29 Sep 2023 16:26:57 GMT", 20], - [3, "Fri, 29 Sep 2023 16:26:37 GMT", 0.5], - [3, "Fri, 29 Sep 2023 16:26:27 GMT", 0.5], - [3, "Fri, 29 Sep 2023 16:27:37 GMT", 60], - [3, "Fri, 29 Sep 2023 16:27:38 GMT", 0.5], - [3, "99999999999999999999999999999999999", 0.5], - [3, "Zun, 29 Sep 2023 16:26:27 GMT", 0.5], - [3, "", 0.5], - [2, "", 0.5 * 2.0], - [1, "", 0.5 * 4.0], - [-1100, "", 8], # test large number potentially overflowing - ], - ) - @mock.patch("time.time", mock.MagicMock(return_value=1696004797)) - async def test_parse_retry_after_header( - self, remaining_retries: int, retry_after: str, timeout: float, async_client: AsyncProfound - ) -> None: - headers = httpx.Headers({"retry-after": retry_after}) - options = FinalRequestOptions(method="get", url="/foo", max_retries=3) - calculated = async_client._calculate_retry_timeout(remaining_retries, options, headers) - assert calculated == pytest.approx(timeout, 0.5 * 0.875) # pyright: ignore[reportUnknownMemberType] - - @mock.patch("profound._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) - @pytest.mark.respx(base_url=base_url) - async def test_retrying_timeout_errors_doesnt_leak( - self, respx_mock: MockRouter, async_client: AsyncProfound - ) -> None: - respx_mock.get("/v1/org/categories").mock(side_effect=httpx.TimeoutException("Test timeout error")) - - with pytest.raises(APITimeoutError): - await async_client.organizations.categories.with_streaming_response.list().__aenter__() - - assert _get_open_connections(async_client) == 0 - - @mock.patch("profound._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) - @pytest.mark.respx(base_url=base_url) - async def test_retrying_status_errors_doesnt_leak( - self, respx_mock: MockRouter, async_client: AsyncProfound - ) -> None: - respx_mock.get("/v1/org/categories").mock(return_value=httpx.Response(500)) - - with pytest.raises(APIStatusError): - await async_client.organizations.categories.with_streaming_response.list().__aenter__() - assert _get_open_connections(async_client) == 0 - - @pytest.mark.parametrize("failures_before_success", [0, 2, 4]) - @mock.patch("profound._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) - @pytest.mark.respx(base_url=base_url) - @pytest.mark.parametrize("failure_mode", ["status", "exception"]) - async def test_retries_taken( - self, - async_client: AsyncProfound, - failures_before_success: int, - failure_mode: Literal["status", "exception"], - respx_mock: MockRouter, - ) -> None: - client = async_client.with_options(max_retries=4) - - nb_retries = 0 - - def retry_handler(_request: httpx.Request) -> httpx.Response: - nonlocal nb_retries - if nb_retries < failures_before_success: - nb_retries += 1 - if failure_mode == "exception": - raise RuntimeError("oops") - return httpx.Response(500) - return httpx.Response(200) - - respx_mock.get("/v1/org/categories").mock(side_effect=retry_handler) - - response = await client.organizations.categories.with_raw_response.list() - - assert response.retries_taken == failures_before_success - assert int(response.http_request.headers.get("x-stainless-retry-count")) == failures_before_success - - @pytest.mark.parametrize("failures_before_success", [0, 2, 4]) - @mock.patch("profound._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) - @pytest.mark.respx(base_url=base_url) - async def test_omit_retry_count_header( - self, async_client: AsyncProfound, failures_before_success: int, respx_mock: MockRouter - ) -> None: - client = async_client.with_options(max_retries=4) - - nb_retries = 0 - - def retry_handler(_request: httpx.Request) -> httpx.Response: - nonlocal nb_retries - if nb_retries < failures_before_success: - nb_retries += 1 - return httpx.Response(500) - return httpx.Response(200) - - respx_mock.get("/v1/org/categories").mock(side_effect=retry_handler) - - response = await client.organizations.categories.with_raw_response.list( - extra_headers={"x-stainless-retry-count": Omit()} - ) - - assert len(response.http_request.headers.get_list("x-stainless-retry-count")) == 0 - - @pytest.mark.parametrize("failures_before_success", [0, 2, 4]) - @mock.patch("profound._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) - @pytest.mark.respx(base_url=base_url) - async def test_overwrite_retry_count_header( - self, async_client: AsyncProfound, failures_before_success: int, respx_mock: MockRouter - ) -> None: - client = async_client.with_options(max_retries=4) - - nb_retries = 0 - - def retry_handler(_request: httpx.Request) -> httpx.Response: - nonlocal nb_retries - if nb_retries < failures_before_success: - nb_retries += 1 - return httpx.Response(500) - return httpx.Response(200) - - respx_mock.get("/v1/org/categories").mock(side_effect=retry_handler) - - response = await client.organizations.categories.with_raw_response.list( - extra_headers={"x-stainless-retry-count": "42"} - ) - - assert response.http_request.headers.get("x-stainless-retry-count") == "42" - - async def test_get_platform(self) -> None: - platform = await asyncify(get_platform)() - assert isinstance(platform, (str, OtherPlatform)) - - async def test_proxy_environment_variables(self, monkeypatch: pytest.MonkeyPatch) -> None: - # Test that the proxy environment variables are set correctly - monkeypatch.setenv("HTTPS_PROXY", "https://example.org") - # Delete in case our environment has any proxy env vars set - monkeypatch.delenv("HTTP_PROXY", raising=False) - monkeypatch.delenv("ALL_PROXY", raising=False) - monkeypatch.delenv("NO_PROXY", raising=False) - monkeypatch.delenv("http_proxy", raising=False) - monkeypatch.delenv("https_proxy", raising=False) - monkeypatch.delenv("all_proxy", raising=False) - monkeypatch.delenv("no_proxy", raising=False) - - client = DefaultAsyncHttpxClient() - - mounts = tuple(client._mounts.items()) - assert len(mounts) == 1 - assert mounts[0][0].pattern == "https://" - - @pytest.mark.filterwarnings("ignore:.*deprecated.*:DeprecationWarning") - async def test_default_client_creation(self) -> None: - # Ensure that the client can be initialized without any exceptions - DefaultAsyncHttpxClient( - verify=True, - cert=None, - trust_env=True, - http1=True, - http2=False, - limits=httpx.Limits(max_connections=100, max_keepalive_connections=20), - ) - - @pytest.mark.respx(base_url=base_url) - async def test_follow_redirects(self, respx_mock: MockRouter, async_client: AsyncProfound) -> None: - # Test that the default follow_redirects=True allows following redirects - respx_mock.post("/redirect").mock( - return_value=httpx.Response(302, headers={"Location": f"{base_url}/redirected"}) - ) - respx_mock.get("/redirected").mock(return_value=httpx.Response(200, json={"status": "ok"})) - - response = await async_client.post("/redirect", body={"key": "value"}, cast_to=httpx.Response) - assert response.status_code == 200 - assert response.json() == {"status": "ok"} - - @pytest.mark.respx(base_url=base_url) - async def test_follow_redirects_disabled(self, respx_mock: MockRouter, async_client: AsyncProfound) -> None: - # Test that follow_redirects=False prevents following redirects - respx_mock.post("/redirect").mock( - return_value=httpx.Response(302, headers={"Location": f"{base_url}/redirected"}) - ) - - with pytest.raises(APIStatusError) as exc_info: - await async_client.post( - "/redirect", body={"key": "value"}, options={"follow_redirects": False}, cast_to=httpx.Response - ) - - assert exc_info.value.response.status_code == 302 - assert exc_info.value.response.headers["Location"] == f"{base_url}/redirected" diff --git a/tests/test_extract_files.py b/tests/test_extract_files.py deleted file mode 100644 index 736756c6..00000000 --- a/tests/test_extract_files.py +++ /dev/null @@ -1,91 +0,0 @@ -from __future__ import annotations - -from typing import Sequence - -import pytest - -from profound._types import FileTypes, ArrayFormat -from profound._utils import extract_files - - -def test_removes_files_from_input() -> None: - query = {"foo": "bar"} - assert extract_files(query, paths=[]) == [] - assert query == {"foo": "bar"} - - query2 = {"foo": b"Bar", "hello": "world"} - assert extract_files(query2, paths=[["foo"]]) == [("foo", b"Bar")] - assert query2 == {"hello": "world"} - - query3 = {"foo": {"foo": {"bar": b"Bar"}}, "hello": "world"} - assert extract_files(query3, paths=[["foo", "foo", "bar"]]) == [("foo[foo][bar]", b"Bar")] - assert query3 == {"foo": {"foo": {}}, "hello": "world"} - - query4 = {"foo": {"bar": b"Bar", "baz": "foo"}, "hello": "world"} - assert extract_files(query4, paths=[["foo", "bar"]]) == [("foo[bar]", b"Bar")] - assert query4 == {"hello": "world", "foo": {"baz": "foo"}} - - -def test_multiple_files() -> None: - query = {"documents": [{"file": b"My first file"}, {"file": b"My second file"}]} - assert extract_files(query, paths=[["documents", "", "file"]]) == [ - ("documents[][file]", b"My first file"), - ("documents[][file]", b"My second file"), - ] - assert query == {"documents": [{}, {}]} - - -def test_top_level_file_array() -> None: - query = {"files": [b"file one", b"file two"], "title": "hello"} - assert extract_files(query, paths=[["files", ""]]) == [("files[]", b"file one"), ("files[]", b"file two")] - assert query == {"title": "hello"} - - -@pytest.mark.parametrize( - "query,paths,expected", - [ - [ - {"foo": {"bar": "baz"}}, - [["foo", "", "bar"]], - [], - ], - [ - {"foo": ["bar", "baz"]}, - [["foo", "bar"]], - [], - ], - [ - {"foo": {"bar": "baz"}}, - [["foo", "foo"]], - [], - ], - ], - ids=["dict expecting array", "array expecting dict", "unknown keys"], -) -def test_ignores_incorrect_paths( - query: dict[str, object], - paths: Sequence[Sequence[str]], - expected: list[tuple[str, FileTypes]], -) -> None: - assert extract_files(query, paths=paths) == expected - - -@pytest.mark.parametrize( - "array_format,expected_top_level,expected_nested", - [ - ("brackets", [("files[]", b"a"), ("files[]", b"b")], [("items[][file]", b"a"), ("items[][file]", b"b")]), - ("repeat", [("files", b"a"), ("files", b"b")], [("items[file]", b"a"), ("items[file]", b"b")]), - ("comma", [("files", b"a"), ("files", b"b")], [("items[file]", b"a"), ("items[file]", b"b")]), - ("indices", [("files[0]", b"a"), ("files[1]", b"b")], [("items[0][file]", b"a"), ("items[1][file]", b"b")]), - ], -) -def test_array_format_controls_file_field_names( - array_format: ArrayFormat, - expected_top_level: list[tuple[str, FileTypes]], - expected_nested: list[tuple[str, FileTypes]], -) -> None: - top_level = {"files": [b"a", b"b"]} - assert extract_files(top_level, paths=[["files", ""]], array_format=array_format) == expected_top_level - - nested = {"items": [{"file": b"a"}, {"file": b"b"}]} - assert extract_files(nested, paths=[["items", "", "file"]], array_format=array_format) == expected_nested diff --git a/tests/test_files.py b/tests/test_files.py deleted file mode 100644 index b0f4e381..00000000 --- a/tests/test_files.py +++ /dev/null @@ -1,148 +0,0 @@ -from pathlib import Path - -import anyio -import pytest -from dirty_equals import IsDict, IsList, IsBytes, IsTuple - -from profound._files import to_httpx_files, deepcopy_with_paths, async_to_httpx_files -from profound._utils import extract_files - -readme_path = Path(__file__).parent.parent.joinpath("README.md") - - -def test_pathlib_includes_file_name() -> None: - result = to_httpx_files({"file": readme_path}) - print(result) - assert result == IsDict({"file": IsTuple("README.md", IsBytes())}) - - -def test_tuple_input() -> None: - result = to_httpx_files([("file", readme_path)]) - print(result) - assert result == IsList(IsTuple("file", IsTuple("README.md", IsBytes()))) - - -@pytest.mark.asyncio -async def test_async_pathlib_includes_file_name() -> None: - result = await async_to_httpx_files({"file": readme_path}) - print(result) - assert result == IsDict({"file": IsTuple("README.md", IsBytes())}) - - -@pytest.mark.asyncio -async def test_async_supports_anyio_path() -> None: - result = await async_to_httpx_files({"file": anyio.Path(readme_path)}) - print(result) - assert result == IsDict({"file": IsTuple("README.md", IsBytes())}) - - -@pytest.mark.asyncio -async def test_async_tuple_input() -> None: - result = await async_to_httpx_files([("file", readme_path)]) - print(result) - assert result == IsList(IsTuple("file", IsTuple("README.md", IsBytes()))) - - -def test_string_not_allowed() -> None: - with pytest.raises(TypeError, match="Expected file types input to be a FileContent type or to be a tuple"): - to_httpx_files( - { - "file": "foo", # type: ignore - } - ) - - -def assert_different_identities(obj1: object, obj2: object) -> None: - assert obj1 == obj2 - assert obj1 is not obj2 - - -class TestDeepcopyWithPaths: - def test_copies_top_level_dict(self) -> None: - original = {"file": b"data", "other": "value"} - result = deepcopy_with_paths(original, [["file"]]) - assert_different_identities(result, original) - - def test_file_value_is_same_reference(self) -> None: - file_bytes = b"contents" - original = {"file": file_bytes} - result = deepcopy_with_paths(original, [["file"]]) - assert_different_identities(result, original) - assert result["file"] is file_bytes - - def test_list_popped_wholesale(self) -> None: - files = [b"f1", b"f2"] - original = {"files": files, "title": "t"} - result = deepcopy_with_paths(original, [["files", ""]]) - assert_different_identities(result, original) - result_files = result["files"] - assert isinstance(result_files, list) - assert_different_identities(result_files, files) - - def test_nested_array_path_copies_list_and_elements(self) -> None: - elem1 = {"file": b"f1", "extra": 1} - elem2 = {"file": b"f2", "extra": 2} - original = {"items": [elem1, elem2]} - result = deepcopy_with_paths(original, [["items", "", "file"]]) - assert_different_identities(result, original) - result_items = result["items"] - assert isinstance(result_items, list) - assert_different_identities(result_items, original["items"]) - assert_different_identities(result_items[0], elem1) - assert_different_identities(result_items[1], elem2) - - def test_empty_paths_returns_same_object(self) -> None: - original = {"foo": "bar"} - result = deepcopy_with_paths(original, []) - assert result is original - - def test_multiple_paths(self) -> None: - f1 = b"file1" - f2 = b"file2" - original = {"a": f1, "b": f2, "c": "unchanged"} - result = deepcopy_with_paths(original, [["a"], ["b"]]) - assert_different_identities(result, original) - assert result["a"] is f1 - assert result["b"] is f2 - assert result["c"] is original["c"] - - def test_extract_files_does_not_mutate_original_top_level(self) -> None: - file_bytes = b"contents" - original = {"file": file_bytes, "other": "value"} - - copied = deepcopy_with_paths(original, [["file"]]) - extracted = extract_files(copied, paths=[["file"]]) - - assert extracted == [("file", file_bytes)] - assert original == {"file": file_bytes, "other": "value"} - assert copied == {"other": "value"} - - def test_extract_files_does_not_mutate_original_nested_array_path(self) -> None: - file1 = b"f1" - file2 = b"f2" - original = { - "items": [ - {"file": file1, "extra": 1}, - {"file": file2, "extra": 2}, - ], - "title": "example", - } - - copied = deepcopy_with_paths(original, [["items", "", "file"]]) - extracted = extract_files(copied, paths=[["items", "", "file"]]) - - assert [entry for _, entry in extracted] == [file1, file2] - assert original == { - "items": [ - {"file": file1, "extra": 1}, - {"file": file2, "extra": 2}, - ], - "title": "example", - } - assert copied == { - "items": [ - {"extra": 1}, - {"extra": 2}, - ], - "title": "example", - } diff --git a/tests/test_models.py b/tests/test_models.py deleted file mode 100644 index d80e13c1..00000000 --- a/tests/test_models.py +++ /dev/null @@ -1,1017 +0,0 @@ -import json -from typing import TYPE_CHECKING, Any, Dict, List, Union, Iterable, Optional, cast -from datetime import datetime, timezone -from collections import deque -from typing_extensions import Literal, Annotated, TypedDict, TypeAliasType - -import pytest -import pydantic -from pydantic import Field - -from profound._utils import PropertyInfo -from profound._compat import PYDANTIC_V1, parse_obj, model_dump, model_json -from profound._models import DISCRIMINATOR_CACHE, BaseModel, EagerIterable, construct_type - - -class BasicModel(BaseModel): - foo: str - - -@pytest.mark.parametrize("value", ["hello", 1], ids=["correct type", "mismatched"]) -def test_basic(value: object) -> None: - m = BasicModel.construct(foo=value) - assert m.foo == value - - -def test_directly_nested_model() -> None: - class NestedModel(BaseModel): - nested: BasicModel - - m = NestedModel.construct(nested={"foo": "Foo!"}) - assert m.nested.foo == "Foo!" - - # mismatched types - m = NestedModel.construct(nested="hello!") - assert cast(Any, m.nested) == "hello!" - - -def test_optional_nested_model() -> None: - class NestedModel(BaseModel): - nested: Optional[BasicModel] - - m1 = NestedModel.construct(nested=None) - assert m1.nested is None - - m2 = NestedModel.construct(nested={"foo": "bar"}) - assert m2.nested is not None - assert m2.nested.foo == "bar" - - # mismatched types - m3 = NestedModel.construct(nested={"foo"}) - assert isinstance(cast(Any, m3.nested), set) - assert cast(Any, m3.nested) == {"foo"} - - -def test_list_nested_model() -> None: - class NestedModel(BaseModel): - nested: List[BasicModel] - - m = NestedModel.construct(nested=[{"foo": "bar"}, {"foo": "2"}]) - assert m.nested is not None - assert isinstance(m.nested, list) - assert len(m.nested) == 2 - assert m.nested[0].foo == "bar" - assert m.nested[1].foo == "2" - - # mismatched types - m = NestedModel.construct(nested=True) - assert cast(Any, m.nested) is True - - m = NestedModel.construct(nested=[False]) - assert cast(Any, m.nested) == [False] - - -def test_optional_list_nested_model() -> None: - class NestedModel(BaseModel): - nested: Optional[List[BasicModel]] - - m1 = NestedModel.construct(nested=[{"foo": "bar"}, {"foo": "2"}]) - assert m1.nested is not None - assert isinstance(m1.nested, list) - assert len(m1.nested) == 2 - assert m1.nested[0].foo == "bar" - assert m1.nested[1].foo == "2" - - m2 = NestedModel.construct(nested=None) - assert m2.nested is None - - # mismatched types - m3 = NestedModel.construct(nested={1}) - assert cast(Any, m3.nested) == {1} - - m4 = NestedModel.construct(nested=[False]) - assert cast(Any, m4.nested) == [False] - - -def test_list_optional_items_nested_model() -> None: - class NestedModel(BaseModel): - nested: List[Optional[BasicModel]] - - m = NestedModel.construct(nested=[None, {"foo": "bar"}]) - assert m.nested is not None - assert isinstance(m.nested, list) - assert len(m.nested) == 2 - assert m.nested[0] is None - assert m.nested[1] is not None - assert m.nested[1].foo == "bar" - - # mismatched types - m3 = NestedModel.construct(nested="foo") - assert cast(Any, m3.nested) == "foo" - - m4 = NestedModel.construct(nested=[False]) - assert cast(Any, m4.nested) == [False] - - -def test_list_mismatched_type() -> None: - class NestedModel(BaseModel): - nested: List[str] - - m = NestedModel.construct(nested=False) - assert cast(Any, m.nested) is False - - -def test_raw_dictionary() -> None: - class NestedModel(BaseModel): - nested: Dict[str, str] - - m = NestedModel.construct(nested={"hello": "world"}) - assert m.nested == {"hello": "world"} - - # mismatched types - m = NestedModel.construct(nested=False) - assert cast(Any, m.nested) is False - - -def test_nested_dictionary_model() -> None: - class NestedModel(BaseModel): - nested: Dict[str, BasicModel] - - m = NestedModel.construct(nested={"hello": {"foo": "bar"}}) - assert isinstance(m.nested, dict) - assert m.nested["hello"].foo == "bar" - - # mismatched types - m = NestedModel.construct(nested={"hello": False}) - assert cast(Any, m.nested["hello"]) is False - - -def test_unknown_fields() -> None: - m1 = BasicModel.construct(foo="foo", unknown=1) - assert m1.foo == "foo" - assert cast(Any, m1).unknown == 1 - - m2 = BasicModel.construct(foo="foo", unknown={"foo_bar": True}) - assert m2.foo == "foo" - assert cast(Any, m2).unknown == {"foo_bar": True} - - assert model_dump(m2) == {"foo": "foo", "unknown": {"foo_bar": True}} - - -def test_strict_validation_unknown_fields() -> None: - class Model(BaseModel): - foo: str - - model = parse_obj(Model, dict(foo="hello!", user="Robert")) - assert model.foo == "hello!" - assert cast(Any, model).user == "Robert" - - assert model_dump(model) == {"foo": "hello!", "user": "Robert"} - - -def test_aliases() -> None: - class Model(BaseModel): - my_field: int = Field(alias="myField") - - m = Model.construct(myField=1) - assert m.my_field == 1 - - # mismatched types - m = Model.construct(myField={"hello": False}) - assert cast(Any, m.my_field) == {"hello": False} - - -def test_repr() -> None: - model = BasicModel(foo="bar") - assert str(model) == "BasicModel(foo='bar')" - assert repr(model) == "BasicModel(foo='bar')" - - -def test_repr_nested_model() -> None: - class Child(BaseModel): - name: str - age: int - - class Parent(BaseModel): - name: str - child: Child - - model = Parent(name="Robert", child=Child(name="Foo", age=5)) - assert str(model) == "Parent(name='Robert', child=Child(name='Foo', age=5))" - assert repr(model) == "Parent(name='Robert', child=Child(name='Foo', age=5))" - - -def test_optional_list() -> None: - class Submodel(BaseModel): - name: str - - class Model(BaseModel): - items: Optional[List[Submodel]] - - m = Model.construct(items=None) - assert m.items is None - - m = Model.construct(items=[]) - assert m.items == [] - - m = Model.construct(items=[{"name": "Robert"}]) - assert m.items is not None - assert len(m.items) == 1 - assert m.items[0].name == "Robert" - - -def test_nested_union_of_models() -> None: - class Submodel1(BaseModel): - bar: bool - - class Submodel2(BaseModel): - thing: str - - class Model(BaseModel): - foo: Union[Submodel1, Submodel2] - - m = Model.construct(foo={"thing": "hello"}) - assert isinstance(m.foo, Submodel2) - assert m.foo.thing == "hello" - - -def test_nested_union_of_mixed_types() -> None: - class Submodel1(BaseModel): - bar: bool - - class Model(BaseModel): - foo: Union[Submodel1, Literal[True], Literal["CARD_HOLDER"]] - - m = Model.construct(foo=True) - assert m.foo is True - - m = Model.construct(foo="CARD_HOLDER") - assert m.foo == "CARD_HOLDER" - - m = Model.construct(foo={"bar": False}) - assert isinstance(m.foo, Submodel1) - assert m.foo.bar is False - - -def test_nested_union_multiple_variants() -> None: - class Submodel1(BaseModel): - bar: bool - - class Submodel2(BaseModel): - thing: str - - class Submodel3(BaseModel): - foo: int - - class Model(BaseModel): - foo: Union[Submodel1, Submodel2, None, Submodel3] - - m = Model.construct(foo={"thing": "hello"}) - assert isinstance(m.foo, Submodel2) - assert m.foo.thing == "hello" - - m = Model.construct(foo=None) - assert m.foo is None - - m = Model.construct() - assert m.foo is None - - m = Model.construct(foo={"foo": "1"}) - assert isinstance(m.foo, Submodel3) - assert m.foo.foo == 1 - - -def test_nested_union_invalid_data() -> None: - class Submodel1(BaseModel): - level: int - - class Submodel2(BaseModel): - name: str - - class Model(BaseModel): - foo: Union[Submodel1, Submodel2] - - m = Model.construct(foo=True) - assert cast(bool, m.foo) is True - - m = Model.construct(foo={"name": 3}) - if PYDANTIC_V1: - assert isinstance(m.foo, Submodel2) - assert m.foo.name == "3" - else: - assert isinstance(m.foo, Submodel1) - assert m.foo.name == 3 # type: ignore - - -def test_list_of_unions() -> None: - class Submodel1(BaseModel): - level: int - - class Submodel2(BaseModel): - name: str - - class Model(BaseModel): - items: List[Union[Submodel1, Submodel2]] - - m = Model.construct(items=[{"level": 1}, {"name": "Robert"}]) - assert len(m.items) == 2 - assert isinstance(m.items[0], Submodel1) - assert m.items[0].level == 1 - assert isinstance(m.items[1], Submodel2) - assert m.items[1].name == "Robert" - - m = Model.construct(items=[{"level": -1}, 156]) - assert len(m.items) == 2 - assert isinstance(m.items[0], Submodel1) - assert m.items[0].level == -1 - assert cast(Any, m.items[1]) == 156 - - -def test_union_of_lists() -> None: - class SubModel1(BaseModel): - level: int - - class SubModel2(BaseModel): - name: str - - class Model(BaseModel): - items: Union[List[SubModel1], List[SubModel2]] - - # with one valid entry - m = Model.construct(items=[{"name": "Robert"}]) - assert len(m.items) == 1 - assert isinstance(m.items[0], SubModel2) - assert m.items[0].name == "Robert" - - # with two entries pointing to different types - m = Model.construct(items=[{"level": 1}, {"name": "Robert"}]) - assert len(m.items) == 2 - assert isinstance(m.items[0], SubModel1) - assert m.items[0].level == 1 - assert isinstance(m.items[1], SubModel1) - assert cast(Any, m.items[1]).name == "Robert" - - # with two entries pointing to *completely* different types - m = Model.construct(items=[{"level": -1}, 156]) - assert len(m.items) == 2 - assert isinstance(m.items[0], SubModel1) - assert m.items[0].level == -1 - assert cast(Any, m.items[1]) == 156 - - -def test_dict_of_union() -> None: - class SubModel1(BaseModel): - name: str - - class SubModel2(BaseModel): - foo: str - - class Model(BaseModel): - data: Dict[str, Union[SubModel1, SubModel2]] - - m = Model.construct(data={"hello": {"name": "there"}, "foo": {"foo": "bar"}}) - assert len(list(m.data.keys())) == 2 - assert isinstance(m.data["hello"], SubModel1) - assert m.data["hello"].name == "there" - assert isinstance(m.data["foo"], SubModel2) - assert m.data["foo"].foo == "bar" - - # TODO: test mismatched type - - -def test_double_nested_union() -> None: - class SubModel1(BaseModel): - name: str - - class SubModel2(BaseModel): - bar: str - - class Model(BaseModel): - data: Dict[str, List[Union[SubModel1, SubModel2]]] - - m = Model.construct(data={"foo": [{"bar": "baz"}, {"name": "Robert"}]}) - assert len(m.data["foo"]) == 2 - - entry1 = m.data["foo"][0] - assert isinstance(entry1, SubModel2) - assert entry1.bar == "baz" - - entry2 = m.data["foo"][1] - assert isinstance(entry2, SubModel1) - assert entry2.name == "Robert" - - # TODO: test mismatched type - - -def test_union_of_dict() -> None: - class SubModel1(BaseModel): - name: str - - class SubModel2(BaseModel): - foo: str - - class Model(BaseModel): - data: Union[Dict[str, SubModel1], Dict[str, SubModel2]] - - m = Model.construct(data={"hello": {"name": "there"}, "foo": {"foo": "bar"}}) - assert len(list(m.data.keys())) == 2 - assert isinstance(m.data["hello"], SubModel1) - assert m.data["hello"].name == "there" - assert isinstance(m.data["foo"], SubModel1) - assert cast(Any, m.data["foo"]).foo == "bar" - - -def test_iso8601_datetime() -> None: - class Model(BaseModel): - created_at: datetime - - expected = datetime(2019, 12, 27, 18, 11, 19, 117000, tzinfo=timezone.utc) - - if PYDANTIC_V1: - expected_json = '{"created_at": "2019-12-27T18:11:19.117000+00:00"}' - else: - expected_json = '{"created_at":"2019-12-27T18:11:19.117000Z"}' - - model = Model.construct(created_at="2019-12-27T18:11:19.117Z") - assert model.created_at == expected - assert model_json(model) == expected_json - - model = parse_obj(Model, dict(created_at="2019-12-27T18:11:19.117Z")) - assert model.created_at == expected - assert model_json(model) == expected_json - - -def test_does_not_coerce_int() -> None: - class Model(BaseModel): - bar: int - - assert Model.construct(bar=1).bar == 1 - assert Model.construct(bar=10.9).bar == 10.9 - assert Model.construct(bar="19").bar == "19" # type: ignore[comparison-overlap] - assert Model.construct(bar=False).bar is False - - -def test_int_to_float_safe_conversion() -> None: - class Model(BaseModel): - float_field: float - - m = Model.construct(float_field=10) - assert m.float_field == 10.0 - assert isinstance(m.float_field, float) - - m = Model.construct(float_field=10.12) - assert m.float_field == 10.12 - assert isinstance(m.float_field, float) - - # number too big - m = Model.construct(float_field=2**53 + 1) - assert m.float_field == 2**53 + 1 - assert isinstance(m.float_field, int) - - -def test_deprecated_alias() -> None: - class Model(BaseModel): - resource_id: str = Field(alias="model_id") - - @property - def model_id(self) -> str: - return self.resource_id - - m = Model.construct(model_id="id") - assert m.model_id == "id" - assert m.resource_id == "id" - assert m.resource_id is m.model_id - - m = parse_obj(Model, {"model_id": "id"}) - assert m.model_id == "id" - assert m.resource_id == "id" - assert m.resource_id is m.model_id - - -def test_omitted_fields() -> None: - class Model(BaseModel): - resource_id: Optional[str] = None - - m = Model.construct() - assert m.resource_id is None - assert "resource_id" not in m.model_fields_set - - m = Model.construct(resource_id=None) - assert m.resource_id is None - assert "resource_id" in m.model_fields_set - - m = Model.construct(resource_id="foo") - assert m.resource_id == "foo" - assert "resource_id" in m.model_fields_set - - -def test_to_dict() -> None: - class Model(BaseModel): - foo: Optional[str] = Field(alias="FOO", default=None) - - m = Model(FOO="hello") - assert m.to_dict() == {"FOO": "hello"} - assert m.to_dict(use_api_names=False) == {"foo": "hello"} - - m2 = Model() - assert m2.to_dict() == {} - assert m2.to_dict(exclude_unset=False) == {"FOO": None} - assert m2.to_dict(exclude_unset=False, exclude_none=True) == {} - assert m2.to_dict(exclude_unset=False, exclude_defaults=True) == {} - - m3 = Model(FOO=None) - assert m3.to_dict() == {"FOO": None} - assert m3.to_dict(exclude_none=True) == {} - assert m3.to_dict(exclude_defaults=True) == {} - - class Model2(BaseModel): - created_at: datetime - - time_str = "2024-03-21T11:39:01.275859" - m4 = Model2.construct(created_at=time_str) - assert m4.to_dict(mode="python") == {"created_at": datetime.fromisoformat(time_str)} - assert m4.to_dict(mode="json") == {"created_at": time_str} - - if PYDANTIC_V1: - with pytest.raises(ValueError, match="warnings is only supported in Pydantic v2"): - m.to_dict(warnings=False) - - -def test_forwards_compat_model_dump_method() -> None: - class Model(BaseModel): - foo: Optional[str] = Field(alias="FOO", default=None) - - m = Model(FOO="hello") - assert m.model_dump() == {"foo": "hello"} - assert m.model_dump(include={"bar"}) == {} - assert m.model_dump(exclude={"foo"}) == {} - assert m.model_dump(by_alias=True) == {"FOO": "hello"} - - m2 = Model() - assert m2.model_dump() == {"foo": None} - assert m2.model_dump(exclude_unset=True) == {} - assert m2.model_dump(exclude_none=True) == {} - assert m2.model_dump(exclude_defaults=True) == {} - - m3 = Model(FOO=None) - assert m3.model_dump() == {"foo": None} - assert m3.model_dump(exclude_none=True) == {} - - if PYDANTIC_V1: - with pytest.raises(ValueError, match="round_trip is only supported in Pydantic v2"): - m.model_dump(round_trip=True) - - with pytest.raises(ValueError, match="warnings is only supported in Pydantic v2"): - m.model_dump(warnings=False) - - -def test_compat_method_no_error_for_warnings() -> None: - class Model(BaseModel): - foo: Optional[str] - - m = Model(foo="hello") - assert isinstance(model_dump(m, warnings=False), dict) - - -def test_to_json() -> None: - class Model(BaseModel): - foo: Optional[str] = Field(alias="FOO", default=None) - - m = Model(FOO="hello") - assert json.loads(m.to_json()) == {"FOO": "hello"} - assert json.loads(m.to_json(use_api_names=False)) == {"foo": "hello"} - - if PYDANTIC_V1: - assert m.to_json(indent=None) == '{"FOO": "hello"}' - else: - assert m.to_json(indent=None) == '{"FOO":"hello"}' - - m2 = Model() - assert json.loads(m2.to_json()) == {} - assert json.loads(m2.to_json(exclude_unset=False)) == {"FOO": None} - assert json.loads(m2.to_json(exclude_unset=False, exclude_none=True)) == {} - assert json.loads(m2.to_json(exclude_unset=False, exclude_defaults=True)) == {} - - m3 = Model(FOO=None) - assert json.loads(m3.to_json()) == {"FOO": None} - assert json.loads(m3.to_json(exclude_none=True)) == {} - - if PYDANTIC_V1: - with pytest.raises(ValueError, match="warnings is only supported in Pydantic v2"): - m.to_json(warnings=False) - - -def test_forwards_compat_model_dump_json_method() -> None: - class Model(BaseModel): - foo: Optional[str] = Field(alias="FOO", default=None) - - m = Model(FOO="hello") - assert json.loads(m.model_dump_json()) == {"foo": "hello"} - assert json.loads(m.model_dump_json(include={"bar"})) == {} - assert json.loads(m.model_dump_json(include={"foo"})) == {"foo": "hello"} - assert json.loads(m.model_dump_json(by_alias=True)) == {"FOO": "hello"} - - assert m.model_dump_json(indent=2) == '{\n "foo": "hello"\n}' - - m2 = Model() - assert json.loads(m2.model_dump_json()) == {"foo": None} - assert json.loads(m2.model_dump_json(exclude_unset=True)) == {} - assert json.loads(m2.model_dump_json(exclude_none=True)) == {} - assert json.loads(m2.model_dump_json(exclude_defaults=True)) == {} - - m3 = Model(FOO=None) - assert json.loads(m3.model_dump_json()) == {"foo": None} - assert json.loads(m3.model_dump_json(exclude_none=True)) == {} - - if PYDANTIC_V1: - with pytest.raises(ValueError, match="round_trip is only supported in Pydantic v2"): - m.model_dump_json(round_trip=True) - - with pytest.raises(ValueError, match="warnings is only supported in Pydantic v2"): - m.model_dump_json(warnings=False) - - -def test_type_compat() -> None: - # our model type can be assigned to Pydantic's model type - - def takes_pydantic(model: pydantic.BaseModel) -> None: # noqa: ARG001 - ... - - class OurModel(BaseModel): - foo: Optional[str] = None - - takes_pydantic(OurModel()) - - -def test_annotated_types() -> None: - class Model(BaseModel): - value: str - - m = construct_type( - value={"value": "foo"}, - type_=cast(Any, Annotated[Model, "random metadata"]), - ) - assert isinstance(m, Model) - assert m.value == "foo" - - -def test_discriminated_unions_invalid_data() -> None: - class A(BaseModel): - type: Literal["a"] - - data: str - - class B(BaseModel): - type: Literal["b"] - - data: int - - m = construct_type( - value={"type": "b", "data": "foo"}, - type_=cast(Any, Annotated[Union[A, B], PropertyInfo(discriminator="type")]), - ) - assert isinstance(m, B) - assert m.type == "b" - assert m.data == "foo" # type: ignore[comparison-overlap] - - m = construct_type( - value={"type": "a", "data": 100}, - type_=cast(Any, Annotated[Union[A, B], PropertyInfo(discriminator="type")]), - ) - assert isinstance(m, A) - assert m.type == "a" - if PYDANTIC_V1: - # pydantic v1 automatically converts inputs to strings - # if the expected type is a str - assert m.data == "100" - else: - assert m.data == 100 # type: ignore[comparison-overlap] - - -def test_discriminated_unions_unknown_variant() -> None: - class A(BaseModel): - type: Literal["a"] - - data: str - - class B(BaseModel): - type: Literal["b"] - - data: int - - m = construct_type( - value={"type": "c", "data": None, "new_thing": "bar"}, - type_=cast(Any, Annotated[Union[A, B], PropertyInfo(discriminator="type")]), - ) - - # just chooses the first variant - assert isinstance(m, A) - assert m.type == "c" # type: ignore[comparison-overlap] - assert m.data == None # type: ignore[unreachable] - assert m.new_thing == "bar" - - -def test_discriminated_unions_invalid_data_nested_unions() -> None: - class A(BaseModel): - type: Literal["a"] - - data: str - - class B(BaseModel): - type: Literal["b"] - - data: int - - class C(BaseModel): - type: Literal["c"] - - data: bool - - m = construct_type( - value={"type": "b", "data": "foo"}, - type_=cast(Any, Annotated[Union[Union[A, B], C], PropertyInfo(discriminator="type")]), - ) - assert isinstance(m, B) - assert m.type == "b" - assert m.data == "foo" # type: ignore[comparison-overlap] - - m = construct_type( - value={"type": "c", "data": "foo"}, - type_=cast(Any, Annotated[Union[Union[A, B], C], PropertyInfo(discriminator="type")]), - ) - assert isinstance(m, C) - assert m.type == "c" - assert m.data == "foo" # type: ignore[comparison-overlap] - - -def test_discriminated_unions_with_aliases_invalid_data() -> None: - class A(BaseModel): - foo_type: Literal["a"] = Field(alias="type") - - data: str - - class B(BaseModel): - foo_type: Literal["b"] = Field(alias="type") - - data: int - - m = construct_type( - value={"type": "b", "data": "foo"}, - type_=cast(Any, Annotated[Union[A, B], PropertyInfo(discriminator="foo_type")]), - ) - assert isinstance(m, B) - assert m.foo_type == "b" - assert m.data == "foo" # type: ignore[comparison-overlap] - - m = construct_type( - value={"type": "a", "data": 100}, - type_=cast(Any, Annotated[Union[A, B], PropertyInfo(discriminator="foo_type")]), - ) - assert isinstance(m, A) - assert m.foo_type == "a" - if PYDANTIC_V1: - # pydantic v1 automatically converts inputs to strings - # if the expected type is a str - assert m.data == "100" - else: - assert m.data == 100 # type: ignore[comparison-overlap] - - -def test_discriminated_unions_overlapping_discriminators_invalid_data() -> None: - class A(BaseModel): - type: Literal["a"] - - data: bool - - class B(BaseModel): - type: Literal["a"] - - data: int - - m = construct_type( - value={"type": "a", "data": "foo"}, - type_=cast(Any, Annotated[Union[A, B], PropertyInfo(discriminator="type")]), - ) - assert isinstance(m, B) - assert m.type == "a" - assert m.data == "foo" # type: ignore[comparison-overlap] - - -def test_discriminated_unions_invalid_data_uses_cache() -> None: - class A(BaseModel): - type: Literal["a"] - - data: str - - class B(BaseModel): - type: Literal["b"] - - data: int - - UnionType = cast(Any, Union[A, B]) - - assert not DISCRIMINATOR_CACHE.get(UnionType) - - m = construct_type( - value={"type": "b", "data": "foo"}, type_=cast(Any, Annotated[UnionType, PropertyInfo(discriminator="type")]) - ) - assert isinstance(m, B) - assert m.type == "b" - assert m.data == "foo" # type: ignore[comparison-overlap] - - discriminator = DISCRIMINATOR_CACHE.get(UnionType) - assert discriminator is not None - - m = construct_type( - value={"type": "b", "data": "foo"}, type_=cast(Any, Annotated[UnionType, PropertyInfo(discriminator="type")]) - ) - assert isinstance(m, B) - assert m.type == "b" - assert m.data == "foo" # type: ignore[comparison-overlap] - - # if the discriminator details object stays the same between invocations then - # we hit the cache - assert DISCRIMINATOR_CACHE.get(UnionType) is discriminator - - -@pytest.mark.skipif(PYDANTIC_V1, reason="TypeAliasType is not supported in Pydantic v1") -def test_type_alias_type() -> None: - Alias = TypeAliasType("Alias", str) # pyright: ignore - - class Model(BaseModel): - alias: Alias - union: Union[int, Alias] - - m = construct_type(value={"alias": "foo", "union": "bar"}, type_=Model) - assert isinstance(m, Model) - assert isinstance(m.alias, str) - assert m.alias == "foo" - assert isinstance(m.union, str) - assert m.union == "bar" - - -@pytest.mark.skipif(PYDANTIC_V1, reason="TypeAliasType is not supported in Pydantic v1") -def test_field_named_cls() -> None: - class Model(BaseModel): - cls: str - - m = construct_type(value={"cls": "foo"}, type_=Model) - assert isinstance(m, Model) - assert isinstance(m.cls, str) - - -def test_discriminated_union_case() -> None: - class A(BaseModel): - type: Literal["a"] - - data: bool - - class B(BaseModel): - type: Literal["b"] - - data: List[Union[A, object]] - - class ModelA(BaseModel): - type: Literal["modelA"] - - data: int - - class ModelB(BaseModel): - type: Literal["modelB"] - - required: str - - data: Union[A, B] - - # when constructing ModelA | ModelB, value data doesn't match ModelB exactly - missing `required` - m = construct_type( - value={"type": "modelB", "data": {"type": "a", "data": True}}, - type_=cast(Any, Annotated[Union[ModelA, ModelB], PropertyInfo(discriminator="type")]), - ) - - assert isinstance(m, ModelB) - - -def test_nested_discriminated_union() -> None: - class InnerType1(BaseModel): - type: Literal["type_1"] - - class InnerModel(BaseModel): - inner_value: str - - class InnerType2(BaseModel): - type: Literal["type_2"] - some_inner_model: InnerModel - - class Type1(BaseModel): - base_type: Literal["base_type_1"] - value: Annotated[ - Union[ - InnerType1, - InnerType2, - ], - PropertyInfo(discriminator="type"), - ] - - class Type2(BaseModel): - base_type: Literal["base_type_2"] - - T = Annotated[ - Union[ - Type1, - Type2, - ], - PropertyInfo(discriminator="base_type"), - ] - - model = construct_type( - type_=T, - value={ - "base_type": "base_type_1", - "value": { - "type": "type_2", - }, - }, - ) - assert isinstance(model, Type1) - assert isinstance(model.value, InnerType2) - - -@pytest.mark.skipif(PYDANTIC_V1, reason="this is only supported in pydantic v2 for now") -def test_extra_properties() -> None: - class Item(BaseModel): - prop: int - - class Model(BaseModel): - __pydantic_extra__: Dict[str, Item] = Field(init=False) # pyright: ignore[reportIncompatibleVariableOverride] - - other: str - - if TYPE_CHECKING: - - def __getattr__(self, attr: str) -> Item: ... - - model = construct_type( - type_=Model, - value={ - "a": {"prop": 1}, - "other": "foo", - }, - ) - assert isinstance(model, Model) - assert model.a.prop == 1 - assert isinstance(model.a, Item) - assert model.other == "foo" - - -# NOTE: Workaround for Pydantic Iterable behavior. -# Iterable fields are replaced with a ValidatorIterator and may be consumed -# during serialization, which can cause subsequent dumps to return empty data. -# See: https://github.com/pydantic/pydantic/issues/9541 -@pytest.mark.parametrize( - "data, expected_validated", - [ - ([1, 2, 3], [1, 2, 3]), - ((1, 2, 3), (1, 2, 3)), - (set([1, 2, 3]), set([1, 2, 3])), - (iter([1, 2, 3]), [1, 2, 3]), - ([], []), - ((x for x in [1, 2, 3]), [1, 2, 3]), - (map(lambda x: x, [1, 2, 3]), [1, 2, 3]), - (frozenset([1, 2, 3]), frozenset([1, 2, 3])), - (deque([1, 2, 3]), deque([1, 2, 3])), - ], - ids=["list", "tuple", "set", "iterator", "empty", "generator", "map", "frozenset", "deque"], -) -@pytest.mark.skipif(PYDANTIC_V1, reason="this is only supported in pydantic v2") -def test_iterable_construction(data: Iterable[int], expected_validated: Iterable[int]) -> None: - class TypeWithIterable(TypedDict): - items: EagerIterable[int] - - class Model(BaseModel): - data: TypeWithIterable - - m = Model.model_validate({"data": {"items": data}}) - assert m.data["items"] == expected_validated - - # Verify repeated dumps don't lose data (the original bug) - assert m.model_dump()["data"]["items"] == list(expected_validated) - assert m.model_dump()["data"]["items"] == list(expected_validated) - - -@pytest.mark.skipif(PYDANTIC_V1, reason="this is only supported in pydantic v2") -def test_iterable_construction_str_falls_back_to_list() -> None: - # str is iterable (over chars), but str(list_of_chars) produces the list's repr - # rather than reconstructing a string from items. We special-case str to fall - # back to list instead of attempting reconstruction. - class TypeWithIterable(TypedDict): - items: EagerIterable[str] - - class Model(BaseModel): - data: TypeWithIterable - - m = Model.model_validate({"data": {"items": "hello"}}) - - # falls back to list of chars rather than calling str(["h", "e", "l", "l", "o"]) - assert m.data["items"] == ["h", "e", "l", "l", "o"] - assert m.model_dump()["data"]["items"] == ["h", "e", "l", "l", "o"] diff --git a/tests/test_qs.py b/tests/test_qs.py deleted file mode 100644 index 1aa05367..00000000 --- a/tests/test_qs.py +++ /dev/null @@ -1,78 +0,0 @@ -from typing import Any, cast -from functools import partial -from urllib.parse import unquote - -import pytest - -from profound._qs import Querystring, stringify - - -def test_empty() -> None: - assert stringify({}) == "" - assert stringify({"a": {}}) == "" - assert stringify({"a": {"b": {"c": {}}}}) == "" - - -def test_basic() -> None: - assert stringify({"a": 1}) == "a=1" - assert stringify({"a": "b"}) == "a=b" - assert stringify({"a": True}) == "a=true" - assert stringify({"a": False}) == "a=false" - assert stringify({"a": 1.23456}) == "a=1.23456" - assert stringify({"a": None}) == "" - - -@pytest.mark.parametrize("method", ["class", "function"]) -def test_nested_dotted(method: str) -> None: - if method == "class": - serialise = Querystring(nested_format="dots").stringify - else: - serialise = partial(stringify, nested_format="dots") - - assert unquote(serialise({"a": {"b": "c"}})) == "a.b=c" - assert unquote(serialise({"a": {"b": "c", "d": "e", "f": "g"}})) == "a.b=c&a.d=e&a.f=g" - assert unquote(serialise({"a": {"b": {"c": {"d": "e"}}}})) == "a.b.c.d=e" - assert unquote(serialise({"a": {"b": True}})) == "a.b=true" - - -def test_nested_brackets() -> None: - assert unquote(stringify({"a": {"b": "c"}})) == "a[b]=c" - assert unquote(stringify({"a": {"b": "c", "d": "e", "f": "g"}})) == "a[b]=c&a[d]=e&a[f]=g" - assert unquote(stringify({"a": {"b": {"c": {"d": "e"}}}})) == "a[b][c][d]=e" - assert unquote(stringify({"a": {"b": True}})) == "a[b]=true" - - -@pytest.mark.parametrize("method", ["class", "function"]) -def test_array_comma(method: str) -> None: - if method == "class": - serialise = Querystring(array_format="comma").stringify - else: - serialise = partial(stringify, array_format="comma") - - assert unquote(serialise({"in": ["foo", "bar"]})) == "in=foo,bar" - assert unquote(serialise({"a": {"b": [True, False]}})) == "a[b]=true,false" - assert unquote(serialise({"a": {"b": [True, False, None, True]}})) == "a[b]=true,false,true" - - -def test_array_repeat() -> None: - assert unquote(stringify({"in": ["foo", "bar"]})) == "in=foo&in=bar" - assert unquote(stringify({"a": {"b": [True, False]}})) == "a[b]=true&a[b]=false" - assert unquote(stringify({"a": {"b": [True, False, None, True]}})) == "a[b]=true&a[b]=false&a[b]=true" - assert unquote(stringify({"in": ["foo", {"b": {"c": ["d", "e"]}}]})) == "in=foo&in[b][c]=d&in[b][c]=e" - - -@pytest.mark.parametrize("method", ["class", "function"]) -def test_array_brackets(method: str) -> None: - if method == "class": - serialise = Querystring(array_format="brackets").stringify - else: - serialise = partial(stringify, array_format="brackets") - - assert unquote(serialise({"in": ["foo", "bar"]})) == "in[]=foo&in[]=bar" - assert unquote(serialise({"a": {"b": [True, False]}})) == "a[b][]=true&a[b][]=false" - assert unquote(serialise({"a": {"b": [True, False, None, True]}})) == "a[b][]=true&a[b][]=false&a[b][]=true" - - -def test_unknown_array_format() -> None: - with pytest.raises(NotImplementedError, match="Unknown array_format value: foo, choose from comma, repeat"): - stringify({"a": ["foo", "bar"]}, array_format=cast(Any, "foo")) diff --git a/tests/test_required_args.py b/tests/test_required_args.py deleted file mode 100644 index 8bcd949b..00000000 --- a/tests/test_required_args.py +++ /dev/null @@ -1,111 +0,0 @@ -from __future__ import annotations - -import pytest - -from profound._utils import required_args - - -def test_too_many_positional_params() -> None: - @required_args(["a"]) - def foo(a: str | None = None) -> str | None: - return a - - with pytest.raises(TypeError, match=r"foo\(\) takes 1 argument\(s\) but 2 were given"): - foo("a", "b") # type: ignore - - -def test_positional_param() -> None: - @required_args(["a"]) - def foo(a: str | None = None) -> str | None: - return a - - assert foo("a") == "a" - assert foo(None) is None - assert foo(a="b") == "b" - - with pytest.raises(TypeError, match="Missing required argument: 'a'"): - foo() - - -def test_keyword_only_param() -> None: - @required_args(["a"]) - def foo(*, a: str | None = None) -> str | None: - return a - - assert foo(a="a") == "a" - assert foo(a=None) is None - assert foo(a="b") == "b" - - with pytest.raises(TypeError, match="Missing required argument: 'a'"): - foo() - - -def test_multiple_params() -> None: - @required_args(["a", "b", "c"]) - def foo(a: str = "", *, b: str = "", c: str = "") -> str | None: - return f"{a} {b} {c}" - - assert foo(a="a", b="b", c="c") == "a b c" - - error_message = r"Missing required arguments.*" - - with pytest.raises(TypeError, match=error_message): - foo() - - with pytest.raises(TypeError, match=error_message): - foo(a="a") - - with pytest.raises(TypeError, match=error_message): - foo(b="b") - - with pytest.raises(TypeError, match=error_message): - foo(c="c") - - with pytest.raises(TypeError, match=r"Missing required argument: 'a'"): - foo(b="a", c="c") - - with pytest.raises(TypeError, match=r"Missing required argument: 'b'"): - foo("a", c="c") - - -def test_multiple_variants() -> None: - @required_args(["a"], ["b"]) - def foo(*, a: str | None = None, b: str | None = None) -> str | None: - return a if a is not None else b - - assert foo(a="foo") == "foo" - assert foo(b="bar") == "bar" - assert foo(a=None) is None - assert foo(b=None) is None - - # TODO: this error message could probably be improved - with pytest.raises( - TypeError, - match=r"Missing required arguments; Expected either \('a'\) or \('b'\) arguments to be given", - ): - foo() - - -def test_multiple_params_multiple_variants() -> None: - @required_args(["a", "b"], ["c"]) - def foo(*, a: str | None = None, b: str | None = None, c: str | None = None) -> str | None: - if a is not None: - return a - if b is not None: - return b - return c - - error_message = r"Missing required arguments; Expected either \('a' and 'b'\) or \('c'\) arguments to be given" - - with pytest.raises(TypeError, match=error_message): - foo(a="foo") - - with pytest.raises(TypeError, match=error_message): - foo(b="bar") - - with pytest.raises(TypeError, match=error_message): - foo() - - assert foo(a=None, b="bar") == "bar" - assert foo(c=None) is None - assert foo(c="foo") == "foo" diff --git a/tests/test_response.py b/tests/test_response.py deleted file mode 100644 index fd5e559f..00000000 --- a/tests/test_response.py +++ /dev/null @@ -1,277 +0,0 @@ -import json -from typing import Any, List, Union, cast -from typing_extensions import Annotated - -import httpx -import pytest -import pydantic - -from profound import Profound, BaseModel, AsyncProfound -from profound._response import ( - APIResponse, - BaseAPIResponse, - AsyncAPIResponse, - BinaryAPIResponse, - AsyncBinaryAPIResponse, - extract_response_type, -) -from profound._streaming import Stream -from profound._base_client import FinalRequestOptions - - -class ConcreteBaseAPIResponse(APIResponse[bytes]): ... - - -class ConcreteAPIResponse(APIResponse[List[str]]): ... - - -class ConcreteAsyncAPIResponse(APIResponse[httpx.Response]): ... - - -def test_extract_response_type_direct_classes() -> None: - assert extract_response_type(BaseAPIResponse[str]) == str - assert extract_response_type(APIResponse[str]) == str - assert extract_response_type(AsyncAPIResponse[str]) == str - - -def test_extract_response_type_direct_class_missing_type_arg() -> None: - with pytest.raises( - RuntimeError, - match="Expected type to have a type argument at index 0 but it did not", - ): - extract_response_type(AsyncAPIResponse) - - -def test_extract_response_type_concrete_subclasses() -> None: - assert extract_response_type(ConcreteBaseAPIResponse) == bytes - assert extract_response_type(ConcreteAPIResponse) == List[str] - assert extract_response_type(ConcreteAsyncAPIResponse) == httpx.Response - - -def test_extract_response_type_binary_response() -> None: - assert extract_response_type(BinaryAPIResponse) == bytes - assert extract_response_type(AsyncBinaryAPIResponse) == bytes - - -class PydanticModel(pydantic.BaseModel): ... - - -def test_response_parse_mismatched_basemodel(client: Profound) -> None: - response = APIResponse( - raw=httpx.Response(200, content=b"foo"), - client=client, - stream=False, - stream_cls=None, - cast_to=str, - options=FinalRequestOptions.construct(method="get", url="/foo"), - ) - - with pytest.raises( - TypeError, - match="Pydantic models must subclass our base model type, e.g. `from profound import BaseModel`", - ): - response.parse(to=PydanticModel) - - -@pytest.mark.asyncio -async def test_async_response_parse_mismatched_basemodel(async_client: AsyncProfound) -> None: - response = AsyncAPIResponse( - raw=httpx.Response(200, content=b"foo"), - client=async_client, - stream=False, - stream_cls=None, - cast_to=str, - options=FinalRequestOptions.construct(method="get", url="/foo"), - ) - - with pytest.raises( - TypeError, - match="Pydantic models must subclass our base model type, e.g. `from profound import BaseModel`", - ): - await response.parse(to=PydanticModel) - - -def test_response_parse_custom_stream(client: Profound) -> None: - response = APIResponse( - raw=httpx.Response(200, content=b"foo"), - client=client, - stream=True, - stream_cls=None, - cast_to=str, - options=FinalRequestOptions.construct(method="get", url="/foo"), - ) - - stream = response.parse(to=Stream[int]) - assert stream._cast_to == int - - -@pytest.mark.asyncio -async def test_async_response_parse_custom_stream(async_client: AsyncProfound) -> None: - response = AsyncAPIResponse( - raw=httpx.Response(200, content=b"foo"), - client=async_client, - stream=True, - stream_cls=None, - cast_to=str, - options=FinalRequestOptions.construct(method="get", url="/foo"), - ) - - stream = await response.parse(to=Stream[int]) - assert stream._cast_to == int - - -class CustomModel(BaseModel): - foo: str - bar: int - - -def test_response_parse_custom_model(client: Profound) -> None: - response = APIResponse( - raw=httpx.Response(200, content=json.dumps({"foo": "hello!", "bar": 2})), - client=client, - stream=False, - stream_cls=None, - cast_to=str, - options=FinalRequestOptions.construct(method="get", url="/foo"), - ) - - obj = response.parse(to=CustomModel) - assert obj.foo == "hello!" - assert obj.bar == 2 - - -@pytest.mark.asyncio -async def test_async_response_parse_custom_model(async_client: AsyncProfound) -> None: - response = AsyncAPIResponse( - raw=httpx.Response(200, content=json.dumps({"foo": "hello!", "bar": 2})), - client=async_client, - stream=False, - stream_cls=None, - cast_to=str, - options=FinalRequestOptions.construct(method="get", url="/foo"), - ) - - obj = await response.parse(to=CustomModel) - assert obj.foo == "hello!" - assert obj.bar == 2 - - -def test_response_parse_annotated_type(client: Profound) -> None: - response = APIResponse( - raw=httpx.Response(200, content=json.dumps({"foo": "hello!", "bar": 2})), - client=client, - stream=False, - stream_cls=None, - cast_to=str, - options=FinalRequestOptions.construct(method="get", url="/foo"), - ) - - obj = response.parse( - to=cast("type[CustomModel]", Annotated[CustomModel, "random metadata"]), - ) - assert obj.foo == "hello!" - assert obj.bar == 2 - - -async def test_async_response_parse_annotated_type(async_client: AsyncProfound) -> None: - response = AsyncAPIResponse( - raw=httpx.Response(200, content=json.dumps({"foo": "hello!", "bar": 2})), - client=async_client, - stream=False, - stream_cls=None, - cast_to=str, - options=FinalRequestOptions.construct(method="get", url="/foo"), - ) - - obj = await response.parse( - to=cast("type[CustomModel]", Annotated[CustomModel, "random metadata"]), - ) - assert obj.foo == "hello!" - assert obj.bar == 2 - - -@pytest.mark.parametrize( - "content, expected", - [ - ("false", False), - ("true", True), - ("False", False), - ("True", True), - ("TrUe", True), - ("FalSe", False), - ], -) -def test_response_parse_bool(client: Profound, content: str, expected: bool) -> None: - response = APIResponse( - raw=httpx.Response(200, content=content), - client=client, - stream=False, - stream_cls=None, - cast_to=str, - options=FinalRequestOptions.construct(method="get", url="/foo"), - ) - - result = response.parse(to=bool) - assert result is expected - - -@pytest.mark.parametrize( - "content, expected", - [ - ("false", False), - ("true", True), - ("False", False), - ("True", True), - ("TrUe", True), - ("FalSe", False), - ], -) -async def test_async_response_parse_bool(client: AsyncProfound, content: str, expected: bool) -> None: - response = AsyncAPIResponse( - raw=httpx.Response(200, content=content), - client=client, - stream=False, - stream_cls=None, - cast_to=str, - options=FinalRequestOptions.construct(method="get", url="/foo"), - ) - - result = await response.parse(to=bool) - assert result is expected - - -class OtherModel(BaseModel): - a: str - - -@pytest.mark.parametrize("client", [False], indirect=True) # loose validation -def test_response_parse_expect_model_union_non_json_content(client: Profound) -> None: - response = APIResponse( - raw=httpx.Response(200, content=b"foo", headers={"Content-Type": "application/text"}), - client=client, - stream=False, - stream_cls=None, - cast_to=str, - options=FinalRequestOptions.construct(method="get", url="/foo"), - ) - - obj = response.parse(to=cast(Any, Union[CustomModel, OtherModel])) - assert isinstance(obj, str) - assert obj == "foo" - - -@pytest.mark.asyncio -@pytest.mark.parametrize("async_client", [False], indirect=True) # loose validation -async def test_async_response_parse_expect_model_union_non_json_content(async_client: AsyncProfound) -> None: - response = AsyncAPIResponse( - raw=httpx.Response(200, content=b"foo", headers={"Content-Type": "application/text"}), - client=async_client, - stream=False, - stream_cls=None, - cast_to=str, - options=FinalRequestOptions.construct(method="get", url="/foo"), - ) - - obj = await response.parse(to=cast(Any, Union[CustomModel, OtherModel])) - assert isinstance(obj, str) - assert obj == "foo" diff --git a/tests/test_streaming.py b/tests/test_streaming.py deleted file mode 100644 index e72536b5..00000000 --- a/tests/test_streaming.py +++ /dev/null @@ -1,248 +0,0 @@ -from __future__ import annotations - -from typing import Iterator, AsyncIterator - -import httpx -import pytest - -from profound import Profound, AsyncProfound -from profound._streaming import Stream, AsyncStream, ServerSentEvent - - -@pytest.mark.asyncio -@pytest.mark.parametrize("sync", [True, False], ids=["sync", "async"]) -async def test_basic(sync: bool, client: Profound, async_client: AsyncProfound) -> None: - def body() -> Iterator[bytes]: - yield b"event: completion\n" - yield b'data: {"foo":true}\n' - yield b"\n" - - iterator = make_event_iterator(content=body(), sync=sync, client=client, async_client=async_client) - - sse = await iter_next(iterator) - assert sse.event == "completion" - assert sse.json() == {"foo": True} - - await assert_empty_iter(iterator) - - -@pytest.mark.asyncio -@pytest.mark.parametrize("sync", [True, False], ids=["sync", "async"]) -async def test_data_missing_event(sync: bool, client: Profound, async_client: AsyncProfound) -> None: - def body() -> Iterator[bytes]: - yield b'data: {"foo":true}\n' - yield b"\n" - - iterator = make_event_iterator(content=body(), sync=sync, client=client, async_client=async_client) - - sse = await iter_next(iterator) - assert sse.event is None - assert sse.json() == {"foo": True} - - await assert_empty_iter(iterator) - - -@pytest.mark.asyncio -@pytest.mark.parametrize("sync", [True, False], ids=["sync", "async"]) -async def test_event_missing_data(sync: bool, client: Profound, async_client: AsyncProfound) -> None: - def body() -> Iterator[bytes]: - yield b"event: ping\n" - yield b"\n" - - iterator = make_event_iterator(content=body(), sync=sync, client=client, async_client=async_client) - - sse = await iter_next(iterator) - assert sse.event == "ping" - assert sse.data == "" - - await assert_empty_iter(iterator) - - -@pytest.mark.asyncio -@pytest.mark.parametrize("sync", [True, False], ids=["sync", "async"]) -async def test_multiple_events(sync: bool, client: Profound, async_client: AsyncProfound) -> None: - def body() -> Iterator[bytes]: - yield b"event: ping\n" - yield b"\n" - yield b"event: completion\n" - yield b"\n" - - iterator = make_event_iterator(content=body(), sync=sync, client=client, async_client=async_client) - - sse = await iter_next(iterator) - assert sse.event == "ping" - assert sse.data == "" - - sse = await iter_next(iterator) - assert sse.event == "completion" - assert sse.data == "" - - await assert_empty_iter(iterator) - - -@pytest.mark.asyncio -@pytest.mark.parametrize("sync", [True, False], ids=["sync", "async"]) -async def test_multiple_events_with_data(sync: bool, client: Profound, async_client: AsyncProfound) -> None: - def body() -> Iterator[bytes]: - yield b"event: ping\n" - yield b'data: {"foo":true}\n' - yield b"\n" - yield b"event: completion\n" - yield b'data: {"bar":false}\n' - yield b"\n" - - iterator = make_event_iterator(content=body(), sync=sync, client=client, async_client=async_client) - - sse = await iter_next(iterator) - assert sse.event == "ping" - assert sse.json() == {"foo": True} - - sse = await iter_next(iterator) - assert sse.event == "completion" - assert sse.json() == {"bar": False} - - await assert_empty_iter(iterator) - - -@pytest.mark.asyncio -@pytest.mark.parametrize("sync", [True, False], ids=["sync", "async"]) -async def test_multiple_data_lines_with_empty_line(sync: bool, client: Profound, async_client: AsyncProfound) -> None: - def body() -> Iterator[bytes]: - yield b"event: ping\n" - yield b"data: {\n" - yield b'data: "foo":\n' - yield b"data: \n" - yield b"data:\n" - yield b"data: true}\n" - yield b"\n\n" - - iterator = make_event_iterator(content=body(), sync=sync, client=client, async_client=async_client) - - sse = await iter_next(iterator) - assert sse.event == "ping" - assert sse.json() == {"foo": True} - assert sse.data == '{\n"foo":\n\n\ntrue}' - - await assert_empty_iter(iterator) - - -@pytest.mark.asyncio -@pytest.mark.parametrize("sync", [True, False], ids=["sync", "async"]) -async def test_data_json_escaped_double_new_line(sync: bool, client: Profound, async_client: AsyncProfound) -> None: - def body() -> Iterator[bytes]: - yield b"event: ping\n" - yield b'data: {"foo": "my long\\n\\ncontent"}' - yield b"\n\n" - - iterator = make_event_iterator(content=body(), sync=sync, client=client, async_client=async_client) - - sse = await iter_next(iterator) - assert sse.event == "ping" - assert sse.json() == {"foo": "my long\n\ncontent"} - - await assert_empty_iter(iterator) - - -@pytest.mark.asyncio -@pytest.mark.parametrize("sync", [True, False], ids=["sync", "async"]) -async def test_multiple_data_lines(sync: bool, client: Profound, async_client: AsyncProfound) -> None: - def body() -> Iterator[bytes]: - yield b"event: ping\n" - yield b"data: {\n" - yield b'data: "foo":\n' - yield b"data: true}\n" - yield b"\n\n" - - iterator = make_event_iterator(content=body(), sync=sync, client=client, async_client=async_client) - - sse = await iter_next(iterator) - assert sse.event == "ping" - assert sse.json() == {"foo": True} - - await assert_empty_iter(iterator) - - -@pytest.mark.parametrize("sync", [True, False], ids=["sync", "async"]) -async def test_special_new_line_character( - sync: bool, - client: Profound, - async_client: AsyncProfound, -) -> None: - def body() -> Iterator[bytes]: - yield b'data: {"content":" culpa"}\n' - yield b"\n" - yield b'data: {"content":" \xe2\x80\xa8"}\n' - yield b"\n" - yield b'data: {"content":"foo"}\n' - yield b"\n" - - iterator = make_event_iterator(content=body(), sync=sync, client=client, async_client=async_client) - - sse = await iter_next(iterator) - assert sse.event is None - assert sse.json() == {"content": " culpa"} - - sse = await iter_next(iterator) - assert sse.event is None - assert sse.json() == {"content": " 
"} - - sse = await iter_next(iterator) - assert sse.event is None - assert sse.json() == {"content": "foo"} - - await assert_empty_iter(iterator) - - -@pytest.mark.parametrize("sync", [True, False], ids=["sync", "async"]) -async def test_multi_byte_character_multiple_chunks( - sync: bool, - client: Profound, - async_client: AsyncProfound, -) -> None: - def body() -> Iterator[bytes]: - yield b'data: {"content":"' - # bytes taken from the string 'известни' and arbitrarily split - # so that some multi-byte characters span multiple chunks - yield b"\xd0" - yield b"\xb8\xd0\xb7\xd0" - yield b"\xb2\xd0\xb5\xd1\x81\xd1\x82\xd0\xbd\xd0\xb8" - yield b'"}\n' - yield b"\n" - - iterator = make_event_iterator(content=body(), sync=sync, client=client, async_client=async_client) - - sse = await iter_next(iterator) - assert sse.event is None - assert sse.json() == {"content": "известни"} - - -async def to_aiter(iter: Iterator[bytes]) -> AsyncIterator[bytes]: - for chunk in iter: - yield chunk - - -async def iter_next(iter: Iterator[ServerSentEvent] | AsyncIterator[ServerSentEvent]) -> ServerSentEvent: - if isinstance(iter, AsyncIterator): - return await iter.__anext__() - - return next(iter) - - -async def assert_empty_iter(iter: Iterator[ServerSentEvent] | AsyncIterator[ServerSentEvent]) -> None: - with pytest.raises((StopAsyncIteration, RuntimeError)): - await iter_next(iter) - - -def make_event_iterator( - content: Iterator[bytes], - *, - sync: bool, - client: Profound, - async_client: AsyncProfound, -) -> Iterator[ServerSentEvent] | AsyncIterator[ServerSentEvent]: - if sync: - return Stream(cast_to=object, client=client, response=httpx.Response(200, content=content))._iter_events() - - return AsyncStream( - cast_to=object, client=async_client, response=httpx.Response(200, content=to_aiter(content)) - )._iter_events() diff --git a/tests/test_transform.py b/tests/test_transform.py deleted file mode 100644 index 34618ad5..00000000 --- a/tests/test_transform.py +++ /dev/null @@ -1,460 +0,0 @@ -from __future__ import annotations - -import io -import pathlib -from typing import Any, Dict, List, Union, TypeVar, Iterable, Optional, cast -from datetime import date, datetime -from typing_extensions import Required, Annotated, TypedDict - -import pytest - -from profound._types import Base64FileInput, omit, not_given -from profound._utils import ( - PropertyInfo, - transform as _transform, - parse_datetime, - async_transform as _async_transform, -) -from profound._compat import PYDANTIC_V1 -from profound._models import BaseModel - -_T = TypeVar("_T") - -SAMPLE_FILE_PATH = pathlib.Path(__file__).parent.joinpath("sample_file.txt") - - -async def transform( - data: _T, - expected_type: object, - use_async: bool, -) -> _T: - if use_async: - return await _async_transform(data, expected_type=expected_type) - - return _transform(data, expected_type=expected_type) - - -parametrize = pytest.mark.parametrize("use_async", [False, True], ids=["sync", "async"]) - - -class Foo1(TypedDict): - foo_bar: Annotated[str, PropertyInfo(alias="fooBar")] - - -@parametrize -@pytest.mark.asyncio -async def test_top_level_alias(use_async: bool) -> None: - assert await transform({"foo_bar": "hello"}, expected_type=Foo1, use_async=use_async) == {"fooBar": "hello"} - - -class Foo2(TypedDict): - bar: Bar2 - - -class Bar2(TypedDict): - this_thing: Annotated[int, PropertyInfo(alias="this__thing")] - baz: Annotated[Baz2, PropertyInfo(alias="Baz")] - - -class Baz2(TypedDict): - my_baz: Annotated[str, PropertyInfo(alias="myBaz")] - - -@parametrize -@pytest.mark.asyncio -async def test_recursive_typeddict(use_async: bool) -> None: - assert await transform({"bar": {"this_thing": 1}}, Foo2, use_async) == {"bar": {"this__thing": 1}} - assert await transform({"bar": {"baz": {"my_baz": "foo"}}}, Foo2, use_async) == {"bar": {"Baz": {"myBaz": "foo"}}} - - -class Foo3(TypedDict): - things: List[Bar3] - - -class Bar3(TypedDict): - my_field: Annotated[str, PropertyInfo(alias="myField")] - - -@parametrize -@pytest.mark.asyncio -async def test_list_of_typeddict(use_async: bool) -> None: - result = await transform({"things": [{"my_field": "foo"}, {"my_field": "foo2"}]}, Foo3, use_async) - assert result == {"things": [{"myField": "foo"}, {"myField": "foo2"}]} - - -class Foo4(TypedDict): - foo: Union[Bar4, Baz4] - - -class Bar4(TypedDict): - foo_bar: Annotated[str, PropertyInfo(alias="fooBar")] - - -class Baz4(TypedDict): - foo_baz: Annotated[str, PropertyInfo(alias="fooBaz")] - - -@parametrize -@pytest.mark.asyncio -async def test_union_of_typeddict(use_async: bool) -> None: - assert await transform({"foo": {"foo_bar": "bar"}}, Foo4, use_async) == {"foo": {"fooBar": "bar"}} - assert await transform({"foo": {"foo_baz": "baz"}}, Foo4, use_async) == {"foo": {"fooBaz": "baz"}} - assert await transform({"foo": {"foo_baz": "baz", "foo_bar": "bar"}}, Foo4, use_async) == { - "foo": {"fooBaz": "baz", "fooBar": "bar"} - } - - -class Foo5(TypedDict): - foo: Annotated[Union[Bar4, List[Baz4]], PropertyInfo(alias="FOO")] - - -class Bar5(TypedDict): - foo_bar: Annotated[str, PropertyInfo(alias="fooBar")] - - -class Baz5(TypedDict): - foo_baz: Annotated[str, PropertyInfo(alias="fooBaz")] - - -@parametrize -@pytest.mark.asyncio -async def test_union_of_list(use_async: bool) -> None: - assert await transform({"foo": {"foo_bar": "bar"}}, Foo5, use_async) == {"FOO": {"fooBar": "bar"}} - assert await transform( - { - "foo": [ - {"foo_baz": "baz"}, - {"foo_baz": "baz"}, - ] - }, - Foo5, - use_async, - ) == {"FOO": [{"fooBaz": "baz"}, {"fooBaz": "baz"}]} - - -class Foo6(TypedDict): - bar: Annotated[str, PropertyInfo(alias="Bar")] - - -@parametrize -@pytest.mark.asyncio -async def test_includes_unknown_keys(use_async: bool) -> None: - assert await transform({"bar": "bar", "baz_": {"FOO": 1}}, Foo6, use_async) == { - "Bar": "bar", - "baz_": {"FOO": 1}, - } - - -class Foo7(TypedDict): - bar: Annotated[List[Bar7], PropertyInfo(alias="bAr")] - foo: Bar7 - - -class Bar7(TypedDict): - foo: str - - -@parametrize -@pytest.mark.asyncio -async def test_ignores_invalid_input(use_async: bool) -> None: - assert await transform({"bar": ""}, Foo7, use_async) == {"bAr": ""} - assert await transform({"foo": ""}, Foo7, use_async) == {"foo": ""} - - -class DatetimeDict(TypedDict, total=False): - foo: Annotated[datetime, PropertyInfo(format="iso8601")] - - bar: Annotated[Optional[datetime], PropertyInfo(format="iso8601")] - - required: Required[Annotated[Optional[datetime], PropertyInfo(format="iso8601")]] - - list_: Required[Annotated[Optional[List[datetime]], PropertyInfo(format="iso8601")]] - - union: Annotated[Union[int, datetime], PropertyInfo(format="iso8601")] - - -class DateDict(TypedDict, total=False): - foo: Annotated[date, PropertyInfo(format="iso8601")] - - -class DatetimeModel(BaseModel): - foo: datetime - - -class DateModel(BaseModel): - foo: Optional[date] - - -@parametrize -@pytest.mark.asyncio -async def test_iso8601_format(use_async: bool) -> None: - dt = datetime.fromisoformat("2023-02-23T14:16:36.337692+00:00") - tz = "+00:00" if PYDANTIC_V1 else "Z" - assert await transform({"foo": dt}, DatetimeDict, use_async) == {"foo": "2023-02-23T14:16:36.337692+00:00"} # type: ignore[comparison-overlap] - assert await transform(DatetimeModel(foo=dt), Any, use_async) == {"foo": "2023-02-23T14:16:36.337692" + tz} # type: ignore[comparison-overlap] - - dt = dt.replace(tzinfo=None) - assert await transform({"foo": dt}, DatetimeDict, use_async) == {"foo": "2023-02-23T14:16:36.337692"} # type: ignore[comparison-overlap] - assert await transform(DatetimeModel(foo=dt), Any, use_async) == {"foo": "2023-02-23T14:16:36.337692"} # type: ignore[comparison-overlap] - - assert await transform({"foo": None}, DateDict, use_async) == {"foo": None} # type: ignore[comparison-overlap] - assert await transform(DateModel(foo=None), Any, use_async) == {"foo": None} # type: ignore - assert await transform({"foo": date.fromisoformat("2023-02-23")}, DateDict, use_async) == {"foo": "2023-02-23"} # type: ignore[comparison-overlap] - assert await transform(DateModel(foo=date.fromisoformat("2023-02-23")), DateDict, use_async) == { - "foo": "2023-02-23" - } # type: ignore[comparison-overlap] - - -@parametrize -@pytest.mark.asyncio -async def test_optional_iso8601_format(use_async: bool) -> None: - dt = datetime.fromisoformat("2023-02-23T14:16:36.337692+00:00") - assert await transform({"bar": dt}, DatetimeDict, use_async) == {"bar": "2023-02-23T14:16:36.337692+00:00"} # type: ignore[comparison-overlap] - - assert await transform({"bar": None}, DatetimeDict, use_async) == {"bar": None} - - -@parametrize -@pytest.mark.asyncio -async def test_required_iso8601_format(use_async: bool) -> None: - dt = datetime.fromisoformat("2023-02-23T14:16:36.337692+00:00") - assert await transform({"required": dt}, DatetimeDict, use_async) == { - "required": "2023-02-23T14:16:36.337692+00:00" - } # type: ignore[comparison-overlap] - - assert await transform({"required": None}, DatetimeDict, use_async) == {"required": None} - - -@parametrize -@pytest.mark.asyncio -async def test_union_datetime(use_async: bool) -> None: - dt = datetime.fromisoformat("2023-02-23T14:16:36.337692+00:00") - assert await transform({"union": dt}, DatetimeDict, use_async) == { # type: ignore[comparison-overlap] - "union": "2023-02-23T14:16:36.337692+00:00" - } - - assert await transform({"union": "foo"}, DatetimeDict, use_async) == {"union": "foo"} - - -@parametrize -@pytest.mark.asyncio -async def test_nested_list_iso6801_format(use_async: bool) -> None: - dt1 = datetime.fromisoformat("2023-02-23T14:16:36.337692+00:00") - dt2 = parse_datetime("2022-01-15T06:34:23Z") - assert await transform({"list_": [dt1, dt2]}, DatetimeDict, use_async) == { # type: ignore[comparison-overlap] - "list_": ["2023-02-23T14:16:36.337692+00:00", "2022-01-15T06:34:23+00:00"] - } - - -@parametrize -@pytest.mark.asyncio -async def test_datetime_custom_format(use_async: bool) -> None: - dt = parse_datetime("2022-01-15T06:34:23Z") - - result = await transform(dt, Annotated[datetime, PropertyInfo(format="custom", format_template="%H")], use_async) - assert result == "06" # type: ignore[comparison-overlap] - - -class DateDictWithRequiredAlias(TypedDict, total=False): - required_prop: Required[Annotated[date, PropertyInfo(format="iso8601", alias="prop")]] - - -@parametrize -@pytest.mark.asyncio -async def test_datetime_with_alias(use_async: bool) -> None: - assert await transform({"required_prop": None}, DateDictWithRequiredAlias, use_async) == {"prop": None} # type: ignore[comparison-overlap] - assert await transform( - {"required_prop": date.fromisoformat("2023-02-23")}, DateDictWithRequiredAlias, use_async - ) == {"prop": "2023-02-23"} # type: ignore[comparison-overlap] - - -class MyModel(BaseModel): - foo: str - - -@parametrize -@pytest.mark.asyncio -async def test_pydantic_model_to_dictionary(use_async: bool) -> None: - assert cast(Any, await transform(MyModel(foo="hi!"), Any, use_async)) == {"foo": "hi!"} - assert cast(Any, await transform(MyModel.construct(foo="hi!"), Any, use_async)) == {"foo": "hi!"} - - -@parametrize -@pytest.mark.asyncio -async def test_pydantic_empty_model(use_async: bool) -> None: - assert cast(Any, await transform(MyModel.construct(), Any, use_async)) == {} - - -@parametrize -@pytest.mark.asyncio -async def test_pydantic_unknown_field(use_async: bool) -> None: - assert cast(Any, await transform(MyModel.construct(my_untyped_field=True), Any, use_async)) == { - "my_untyped_field": True - } - - -@parametrize -@pytest.mark.asyncio -async def test_pydantic_mismatched_types(use_async: bool) -> None: - model = MyModel.construct(foo=True) - if PYDANTIC_V1: - params = await transform(model, Any, use_async) - else: - with pytest.warns(UserWarning): - params = await transform(model, Any, use_async) - assert cast(Any, params) == {"foo": True} - - -@parametrize -@pytest.mark.asyncio -async def test_pydantic_mismatched_object_type(use_async: bool) -> None: - model = MyModel.construct(foo=MyModel.construct(hello="world")) - if PYDANTIC_V1: - params = await transform(model, Any, use_async) - else: - with pytest.warns(UserWarning): - params = await transform(model, Any, use_async) - assert cast(Any, params) == {"foo": {"hello": "world"}} - - -class ModelNestedObjects(BaseModel): - nested: MyModel - - -@parametrize -@pytest.mark.asyncio -async def test_pydantic_nested_objects(use_async: bool) -> None: - model = ModelNestedObjects.construct(nested={"foo": "stainless"}) - assert isinstance(model.nested, MyModel) - assert cast(Any, await transform(model, Any, use_async)) == {"nested": {"foo": "stainless"}} - - -class ModelWithDefaultField(BaseModel): - foo: str - with_none_default: Union[str, None] = None - with_str_default: str = "foo" - - -@parametrize -@pytest.mark.asyncio -async def test_pydantic_default_field(use_async: bool) -> None: - # should be excluded when defaults are used - model = ModelWithDefaultField.construct() - assert model.with_none_default is None - assert model.with_str_default == "foo" - assert cast(Any, await transform(model, Any, use_async)) == {} - - # should be included when the default value is explicitly given - model = ModelWithDefaultField.construct(with_none_default=None, with_str_default="foo") - assert model.with_none_default is None - assert model.with_str_default == "foo" - assert cast(Any, await transform(model, Any, use_async)) == {"with_none_default": None, "with_str_default": "foo"} - - # should be included when a non-default value is explicitly given - model = ModelWithDefaultField.construct(with_none_default="bar", with_str_default="baz") - assert model.with_none_default == "bar" - assert model.with_str_default == "baz" - assert cast(Any, await transform(model, Any, use_async)) == {"with_none_default": "bar", "with_str_default": "baz"} - - -class TypedDictIterableUnion(TypedDict): - foo: Annotated[Union[Bar8, Iterable[Baz8]], PropertyInfo(alias="FOO")] - - -class Bar8(TypedDict): - foo_bar: Annotated[str, PropertyInfo(alias="fooBar")] - - -class Baz8(TypedDict): - foo_baz: Annotated[str, PropertyInfo(alias="fooBaz")] - - -@parametrize -@pytest.mark.asyncio -async def test_iterable_of_dictionaries(use_async: bool) -> None: - assert await transform({"foo": [{"foo_baz": "bar"}]}, TypedDictIterableUnion, use_async) == { - "FOO": [{"fooBaz": "bar"}] - } - assert cast(Any, await transform({"foo": ({"foo_baz": "bar"},)}, TypedDictIterableUnion, use_async)) == { - "FOO": [{"fooBaz": "bar"}] - } - - def my_iter() -> Iterable[Baz8]: - yield {"foo_baz": "hello"} - yield {"foo_baz": "world"} - - assert await transform({"foo": my_iter()}, TypedDictIterableUnion, use_async) == { - "FOO": [{"fooBaz": "hello"}, {"fooBaz": "world"}] - } - - -@parametrize -@pytest.mark.asyncio -async def test_dictionary_items(use_async: bool) -> None: - class DictItems(TypedDict): - foo_baz: Annotated[str, PropertyInfo(alias="fooBaz")] - - assert await transform({"foo": {"foo_baz": "bar"}}, Dict[str, DictItems], use_async) == {"foo": {"fooBaz": "bar"}} - - -class TypedDictIterableUnionStr(TypedDict): - foo: Annotated[Union[str, Iterable[Baz8]], PropertyInfo(alias="FOO")] - - -@parametrize -@pytest.mark.asyncio -async def test_iterable_union_str(use_async: bool) -> None: - assert await transform({"foo": "bar"}, TypedDictIterableUnionStr, use_async) == {"FOO": "bar"} - assert cast(Any, await transform(iter([{"foo_baz": "bar"}]), Union[str, Iterable[Baz8]], use_async)) == [ - {"fooBaz": "bar"} - ] - - -class TypedDictBase64Input(TypedDict): - foo: Annotated[Union[str, Base64FileInput], PropertyInfo(format="base64")] - - -@parametrize -@pytest.mark.asyncio -async def test_base64_file_input(use_async: bool) -> None: - # strings are left as-is - assert await transform({"foo": "bar"}, TypedDictBase64Input, use_async) == {"foo": "bar"} - - # pathlib.Path is automatically converted to base64 - assert await transform({"foo": SAMPLE_FILE_PATH}, TypedDictBase64Input, use_async) == { - "foo": "SGVsbG8sIHdvcmxkIQo=" - } # type: ignore[comparison-overlap] - - # io instances are automatically converted to base64 - assert await transform({"foo": io.StringIO("Hello, world!")}, TypedDictBase64Input, use_async) == { - "foo": "SGVsbG8sIHdvcmxkIQ==" - } # type: ignore[comparison-overlap] - assert await transform({"foo": io.BytesIO(b"Hello, world!")}, TypedDictBase64Input, use_async) == { - "foo": "SGVsbG8sIHdvcmxkIQ==" - } # type: ignore[comparison-overlap] - - -@parametrize -@pytest.mark.asyncio -async def test_transform_skipping(use_async: bool) -> None: - # lists of ints are left as-is - data = [1, 2, 3] - assert await transform(data, List[int], use_async) is data - - # iterables of ints are converted to a list - data = iter([1, 2, 3]) - assert await transform(data, Iterable[int], use_async) == [1, 2, 3] - - -@parametrize -@pytest.mark.asyncio -async def test_strips_notgiven(use_async: bool) -> None: - assert await transform({"foo_bar": "bar"}, Foo1, use_async) == {"fooBar": "bar"} - assert await transform({"foo_bar": not_given}, Foo1, use_async) == {} - - -@parametrize -@pytest.mark.asyncio -async def test_strips_omit(use_async: bool) -> None: - assert await transform({"foo_bar": "bar"}, Foo1, use_async) == {"fooBar": "bar"} - assert await transform({"foo_bar": omit}, Foo1, use_async) == {} diff --git a/tests/test_utils/test_datetime_parse.py b/tests/test_utils/test_datetime_parse.py deleted file mode 100644 index 3639ded0..00000000 --- a/tests/test_utils/test_datetime_parse.py +++ /dev/null @@ -1,110 +0,0 @@ -""" -Copied from https://github.com/pydantic/pydantic/blob/v1.10.22/tests/test_datetime_parse.py -with modifications so it works without pydantic v1 imports. -""" - -from typing import Type, Union -from datetime import date, datetime, timezone, timedelta - -import pytest - -from profound._utils import parse_date, parse_datetime - - -def create_tz(minutes: int) -> timezone: - return timezone(timedelta(minutes=minutes)) - - -@pytest.mark.parametrize( - "value,result", - [ - # Valid inputs - ("1494012444.883309", date(2017, 5, 5)), - (b"1494012444.883309", date(2017, 5, 5)), - (1_494_012_444.883_309, date(2017, 5, 5)), - ("1494012444", date(2017, 5, 5)), - (1_494_012_444, date(2017, 5, 5)), - (0, date(1970, 1, 1)), - ("2012-04-23", date(2012, 4, 23)), - (b"2012-04-23", date(2012, 4, 23)), - ("2012-4-9", date(2012, 4, 9)), - (date(2012, 4, 9), date(2012, 4, 9)), - (datetime(2012, 4, 9, 12, 15), date(2012, 4, 9)), - # Invalid inputs - ("x20120423", ValueError), - ("2012-04-56", ValueError), - (19_999_999_999, date(2603, 10, 11)), # just before watershed - (20_000_000_001, date(1970, 8, 20)), # just after watershed - (1_549_316_052, date(2019, 2, 4)), # nowish in s - (1_549_316_052_104, date(2019, 2, 4)), # nowish in ms - (1_549_316_052_104_324, date(2019, 2, 4)), # nowish in μs - (1_549_316_052_104_324_096, date(2019, 2, 4)), # nowish in ns - ("infinity", date(9999, 12, 31)), - ("inf", date(9999, 12, 31)), - (float("inf"), date(9999, 12, 31)), - ("infinity ", date(9999, 12, 31)), - (int("1" + "0" * 100), date(9999, 12, 31)), - (1e1000, date(9999, 12, 31)), - ("-infinity", date(1, 1, 1)), - ("-inf", date(1, 1, 1)), - ("nan", ValueError), - ], -) -def test_date_parsing(value: Union[str, bytes, int, float], result: Union[date, Type[Exception]]) -> None: - if type(result) == type and issubclass(result, Exception): # pyright: ignore[reportUnnecessaryIsInstance] - with pytest.raises(result): - parse_date(value) - else: - assert parse_date(value) == result - - -@pytest.mark.parametrize( - "value,result", - [ - # Valid inputs - # values in seconds - ("1494012444.883309", datetime(2017, 5, 5, 19, 27, 24, 883_309, tzinfo=timezone.utc)), - (1_494_012_444.883_309, datetime(2017, 5, 5, 19, 27, 24, 883_309, tzinfo=timezone.utc)), - ("1494012444", datetime(2017, 5, 5, 19, 27, 24, tzinfo=timezone.utc)), - (b"1494012444", datetime(2017, 5, 5, 19, 27, 24, tzinfo=timezone.utc)), - (1_494_012_444, datetime(2017, 5, 5, 19, 27, 24, tzinfo=timezone.utc)), - # values in ms - ("1494012444000.883309", datetime(2017, 5, 5, 19, 27, 24, 883, tzinfo=timezone.utc)), - ("-1494012444000.883309", datetime(1922, 8, 29, 4, 32, 35, 999117, tzinfo=timezone.utc)), - (1_494_012_444_000, datetime(2017, 5, 5, 19, 27, 24, tzinfo=timezone.utc)), - ("2012-04-23T09:15:00", datetime(2012, 4, 23, 9, 15)), - ("2012-4-9 4:8:16", datetime(2012, 4, 9, 4, 8, 16)), - ("2012-04-23T09:15:00Z", datetime(2012, 4, 23, 9, 15, 0, 0, timezone.utc)), - ("2012-4-9 4:8:16-0320", datetime(2012, 4, 9, 4, 8, 16, 0, create_tz(-200))), - ("2012-04-23T10:20:30.400+02:30", datetime(2012, 4, 23, 10, 20, 30, 400_000, create_tz(150))), - ("2012-04-23T10:20:30.400+02", datetime(2012, 4, 23, 10, 20, 30, 400_000, create_tz(120))), - ("2012-04-23T10:20:30.400-02", datetime(2012, 4, 23, 10, 20, 30, 400_000, create_tz(-120))), - (b"2012-04-23T10:20:30.400-02", datetime(2012, 4, 23, 10, 20, 30, 400_000, create_tz(-120))), - (datetime(2017, 5, 5), datetime(2017, 5, 5)), - (0, datetime(1970, 1, 1, 0, 0, 0, tzinfo=timezone.utc)), - # Invalid inputs - ("x20120423091500", ValueError), - ("2012-04-56T09:15:90", ValueError), - ("2012-04-23T11:05:00-25:00", ValueError), - (19_999_999_999, datetime(2603, 10, 11, 11, 33, 19, tzinfo=timezone.utc)), # just before watershed - (20_000_000_001, datetime(1970, 8, 20, 11, 33, 20, 1000, tzinfo=timezone.utc)), # just after watershed - (1_549_316_052, datetime(2019, 2, 4, 21, 34, 12, 0, tzinfo=timezone.utc)), # nowish in s - (1_549_316_052_104, datetime(2019, 2, 4, 21, 34, 12, 104_000, tzinfo=timezone.utc)), # nowish in ms - (1_549_316_052_104_324, datetime(2019, 2, 4, 21, 34, 12, 104_324, tzinfo=timezone.utc)), # nowish in μs - (1_549_316_052_104_324_096, datetime(2019, 2, 4, 21, 34, 12, 104_324, tzinfo=timezone.utc)), # nowish in ns - ("infinity", datetime(9999, 12, 31, 23, 59, 59, 999999)), - ("inf", datetime(9999, 12, 31, 23, 59, 59, 999999)), - ("inf ", datetime(9999, 12, 31, 23, 59, 59, 999999)), - (1e50, datetime(9999, 12, 31, 23, 59, 59, 999999)), - (float("inf"), datetime(9999, 12, 31, 23, 59, 59, 999999)), - ("-infinity", datetime(1, 1, 1, 0, 0)), - ("-inf", datetime(1, 1, 1, 0, 0)), - ("nan", ValueError), - ], -) -def test_datetime_parsing(value: Union[str, bytes, int, float], result: Union[datetime, Type[Exception]]) -> None: - if type(result) == type and issubclass(result, Exception): # pyright: ignore[reportUnnecessaryIsInstance] - with pytest.raises(result): - parse_datetime(value) - else: - assert parse_datetime(value) == result diff --git a/tests/test_utils/test_json.py b/tests/test_utils/test_json.py deleted file mode 100644 index ddc5f70a..00000000 --- a/tests/test_utils/test_json.py +++ /dev/null @@ -1,126 +0,0 @@ -from __future__ import annotations - -import datetime -from typing import Union - -import pydantic - -from profound import _compat -from profound._utils._json import openapi_dumps - - -class TestOpenapiDumps: - def test_basic(self) -> None: - data = {"key": "value", "number": 42} - json_bytes = openapi_dumps(data) - assert json_bytes == b'{"key":"value","number":42}' - - def test_datetime_serialization(self) -> None: - dt = datetime.datetime(2023, 1, 1, 12, 0, 0) - data = {"datetime": dt} - json_bytes = openapi_dumps(data) - assert json_bytes == b'{"datetime":"2023-01-01T12:00:00"}' - - def test_pydantic_model_serialization(self) -> None: - class User(pydantic.BaseModel): - first_name: str - last_name: str - age: int - - model_instance = User(first_name="John", last_name="Kramer", age=83) - data = {"model": model_instance} - json_bytes = openapi_dumps(data) - assert json_bytes == b'{"model":{"first_name":"John","last_name":"Kramer","age":83}}' - - def test_pydantic_model_with_default_values(self) -> None: - class User(pydantic.BaseModel): - name: str - role: str = "user" - active: bool = True - score: int = 0 - - model_instance = User(name="Alice") - data = {"model": model_instance} - json_bytes = openapi_dumps(data) - assert json_bytes == b'{"model":{"name":"Alice"}}' - - def test_pydantic_model_with_default_values_overridden(self) -> None: - class User(pydantic.BaseModel): - name: str - role: str = "user" - active: bool = True - - model_instance = User(name="Bob", role="admin", active=False) - data = {"model": model_instance} - json_bytes = openapi_dumps(data) - assert json_bytes == b'{"model":{"name":"Bob","role":"admin","active":false}}' - - def test_pydantic_model_with_alias(self) -> None: - class User(pydantic.BaseModel): - first_name: str = pydantic.Field(alias="firstName") - last_name: str = pydantic.Field(alias="lastName") - - model_instance = User(firstName="John", lastName="Doe") - data = {"model": model_instance} - json_bytes = openapi_dumps(data) - assert json_bytes == b'{"model":{"firstName":"John","lastName":"Doe"}}' - - def test_pydantic_model_with_alias_and_default(self) -> None: - class User(pydantic.BaseModel): - user_name: str = pydantic.Field(alias="userName") - user_role: str = pydantic.Field(default="member", alias="userRole") - is_active: bool = pydantic.Field(default=True, alias="isActive") - - model_instance = User(userName="charlie") - data = {"model": model_instance} - json_bytes = openapi_dumps(data) - assert json_bytes == b'{"model":{"userName":"charlie"}}' - - model_with_overrides = User(userName="diana", userRole="admin", isActive=False) - data = {"model": model_with_overrides} - json_bytes = openapi_dumps(data) - assert json_bytes == b'{"model":{"userName":"diana","userRole":"admin","isActive":false}}' - - def test_pydantic_model_with_nested_models_and_defaults(self) -> None: - class Address(pydantic.BaseModel): - street: str - city: str = "Unknown" - - class User(pydantic.BaseModel): - name: str - address: Address - verified: bool = False - - if _compat.PYDANTIC_V1: - # to handle forward references in Pydantic v1 - User.update_forward_refs(**locals()) # type: ignore[reportDeprecated] - - address = Address(street="123 Main St") - user = User(name="Diana", address=address) - data = {"user": user} - json_bytes = openapi_dumps(data) - assert json_bytes == b'{"user":{"name":"Diana","address":{"street":"123 Main St"}}}' - - address_with_city = Address(street="456 Oak Ave", city="Boston") - user_verified = User(name="Eve", address=address_with_city, verified=True) - data = {"user": user_verified} - json_bytes = openapi_dumps(data) - assert ( - json_bytes == b'{"user":{"name":"Eve","address":{"street":"456 Oak Ave","city":"Boston"},"verified":true}}' - ) - - def test_pydantic_model_with_optional_fields(self) -> None: - class User(pydantic.BaseModel): - name: str - email: Union[str, None] - phone: Union[str, None] - - model_with_none = User(name="Eve", email=None, phone=None) - data = {"model": model_with_none} - json_bytes = openapi_dumps(data) - assert json_bytes == b'{"model":{"name":"Eve","email":null,"phone":null}}' - - model_with_values = User(name="Frank", email="frank@example.com", phone=None) - data = {"model": model_with_values} - json_bytes = openapi_dumps(data) - assert json_bytes == b'{"model":{"name":"Frank","email":"frank@example.com","phone":null}}' diff --git a/tests/test_utils/test_path.py b/tests/test_utils/test_path.py deleted file mode 100644 index 12cdf7bc..00000000 --- a/tests/test_utils/test_path.py +++ /dev/null @@ -1,89 +0,0 @@ -from __future__ import annotations - -from typing import Any - -import pytest - -from profound._utils._path import path_template - - -@pytest.mark.parametrize( - "template, kwargs, expected", - [ - ("/v1/{id}", dict(id="abc"), "/v1/abc"), - ("/v1/{a}/{b}", dict(a="x", b="y"), "/v1/x/y"), - ("/v1/{a}{b}/path/{c}?val={d}#{e}", dict(a="x", b="y", c="z", d="u", e="v"), "/v1/xy/path/z?val=u#v"), - ("/{w}/{w}", dict(w="echo"), "/echo/echo"), - ("/v1/static", {}, "/v1/static"), - ("", {}, ""), - ("/v1/?q={n}&count=10", dict(n=42), "/v1/?q=42&count=10"), - ("/v1/{v}", dict(v=None), "/v1/null"), - ("/v1/{v}", dict(v=True), "/v1/true"), - ("/v1/{v}", dict(v=False), "/v1/false"), - ("/v1/{v}", dict(v=".hidden"), "/v1/.hidden"), # dot prefix ok - ("/v1/{v}", dict(v="file.txt"), "/v1/file.txt"), # dot in middle ok - ("/v1/{v}", dict(v="..."), "/v1/..."), # triple dot ok - ("/v1/{a}{b}", dict(a=".", b="txt"), "/v1/.txt"), # dot var combining with adjacent to be ok - ("/items?q={v}#{f}", dict(v=".", f=".."), "/items?q=.#.."), # dots in query/fragment are fine - ( - "/v1/{a}?query={b}", - dict(a="../../other/endpoint", b="a&bad=true"), - "/v1/..%2F..%2Fother%2Fendpoint?query=a%26bad%3Dtrue", - ), - ("/v1/{val}", dict(val="a/b/c"), "/v1/a%2Fb%2Fc"), - ("/v1/{val}", dict(val="a/b/c?query=value"), "/v1/a%2Fb%2Fc%3Fquery=value"), - ("/v1/{val}", dict(val="a/b/c?query=value&bad=true"), "/v1/a%2Fb%2Fc%3Fquery=value&bad=true"), - ("/v1/{val}", dict(val="%20"), "/v1/%2520"), # escapes escape sequences in input - # Query: slash and ? are safe, # is not - ("/items?q={v}", dict(v="a/b"), "/items?q=a/b"), - ("/items?q={v}", dict(v="a?b"), "/items?q=a?b"), - ("/items?q={v}", dict(v="a#b"), "/items?q=a%23b"), - ("/items?q={v}", dict(v="a b"), "/items?q=a%20b"), - # Fragment: slash and ? are safe - ("/docs#{v}", dict(v="a/b"), "/docs#a/b"), - ("/docs#{v}", dict(v="a?b"), "/docs#a?b"), - # Path: slash, ? and # are all encoded - ("/v1/{v}", dict(v="a/b"), "/v1/a%2Fb"), - ("/v1/{v}", dict(v="a?b"), "/v1/a%3Fb"), - ("/v1/{v}", dict(v="a#b"), "/v1/a%23b"), - # same var encoded differently by component - ( - "/v1/{v}?q={v}#{v}", - dict(v="a/b?c#d"), - "/v1/a%2Fb%3Fc%23d?q=a/b?c%23d#a/b?c%23d", - ), - ("/v1/{val}", dict(val="x?admin=true"), "/v1/x%3Fadmin=true"), # query injection - ("/v1/{val}", dict(val="x#admin"), "/v1/x%23admin"), # fragment injection - ], -) -def test_interpolation(template: str, kwargs: dict[str, Any], expected: str) -> None: - assert path_template(template, **kwargs) == expected - - -def test_missing_kwarg_raises_key_error() -> None: - with pytest.raises(KeyError, match="org_id"): - path_template("/v1/{org_id}") - - -@pytest.mark.parametrize( - "template, kwargs", - [ - ("{a}/path", dict(a=".")), - ("{a}/path", dict(a="..")), - ("/v1/{a}", dict(a=".")), - ("/v1/{a}", dict(a="..")), - ("/v1/{a}/path", dict(a=".")), - ("/v1/{a}/path", dict(a="..")), - ("/v1/{a}{b}", dict(a=".", b=".")), # adjacent vars → ".." - ("/v1/{a}.", dict(a=".")), # var + static → ".." - ("/v1/{a}{b}", dict(a="", b=".")), # empty + dot → "." - ("/v1/%2e/{x}", dict(x="ok")), # encoded dot in static text - ("/v1/%2e./{x}", dict(x="ok")), # mixed encoded ".." in static - ("/v1/.%2E/{x}", dict(x="ok")), # mixed encoded ".." in static - ("/v1/{v}?q=1", dict(v="..")), - ("/v1/{v}#frag", dict(v="..")), - ], -) -def test_dot_segment_rejected(template: str, kwargs: dict[str, Any]) -> None: - with pytest.raises(ValueError, match="dot-segment"): - path_template(template, **kwargs) diff --git a/tests/test_utils/test_proxy.py b/tests/test_utils/test_proxy.py deleted file mode 100644 index a753b5ae..00000000 --- a/tests/test_utils/test_proxy.py +++ /dev/null @@ -1,34 +0,0 @@ -import operator -from typing import Any -from typing_extensions import override - -from profound._utils import LazyProxy - - -class RecursiveLazyProxy(LazyProxy[Any]): - @override - def __load__(self) -> Any: - return self - - def __call__(self, *_args: Any, **_kwds: Any) -> Any: - raise RuntimeError("This should never be called!") - - -def test_recursive_proxy() -> None: - proxy = RecursiveLazyProxy() - assert repr(proxy) == "RecursiveLazyProxy" - assert str(proxy) == "RecursiveLazyProxy" - assert dir(proxy) == [] - assert type(proxy).__name__ == "RecursiveLazyProxy" - assert type(operator.attrgetter("name.foo.bar.baz")(proxy)).__name__ == "RecursiveLazyProxy" - - -def test_isinstance_does_not_error() -> None: - class AlwaysErrorProxy(LazyProxy[Any]): - @override - def __load__(self) -> Any: - raise RuntimeError("Mocking missing dependency") - - proxy = AlwaysErrorProxy() - assert not isinstance(proxy, dict) - assert isinstance(proxy, LazyProxy) diff --git a/tests/test_utils/test_typing.py b/tests/test_utils/test_typing.py deleted file mode 100644 index 1dfdd6d0..00000000 --- a/tests/test_utils/test_typing.py +++ /dev/null @@ -1,73 +0,0 @@ -from __future__ import annotations - -from typing import Generic, TypeVar, cast - -from profound._utils import extract_type_var_from_base - -_T = TypeVar("_T") -_T2 = TypeVar("_T2") -_T3 = TypeVar("_T3") - - -class BaseGeneric(Generic[_T]): ... - - -class SubclassGeneric(BaseGeneric[_T]): ... - - -class BaseGenericMultipleTypeArgs(Generic[_T, _T2, _T3]): ... - - -class SubclassGenericMultipleTypeArgs(BaseGenericMultipleTypeArgs[_T, _T2, _T3]): ... - - -class SubclassDifferentOrderGenericMultipleTypeArgs(BaseGenericMultipleTypeArgs[_T2, _T, _T3]): ... - - -def test_extract_type_var() -> None: - assert ( - extract_type_var_from_base( - BaseGeneric[int], - index=0, - generic_bases=cast("tuple[type, ...]", (BaseGeneric,)), - ) - == int - ) - - -def test_extract_type_var_generic_subclass() -> None: - assert ( - extract_type_var_from_base( - SubclassGeneric[int], - index=0, - generic_bases=cast("tuple[type, ...]", (BaseGeneric,)), - ) - == int - ) - - -def test_extract_type_var_multiple() -> None: - typ = BaseGenericMultipleTypeArgs[int, str, None] - - generic_bases = cast("tuple[type, ...]", (BaseGenericMultipleTypeArgs,)) - assert extract_type_var_from_base(typ, index=0, generic_bases=generic_bases) == int - assert extract_type_var_from_base(typ, index=1, generic_bases=generic_bases) == str - assert extract_type_var_from_base(typ, index=2, generic_bases=generic_bases) == type(None) - - -def test_extract_type_var_generic_subclass_multiple() -> None: - typ = SubclassGenericMultipleTypeArgs[int, str, None] - - generic_bases = cast("tuple[type, ...]", (BaseGenericMultipleTypeArgs,)) - assert extract_type_var_from_base(typ, index=0, generic_bases=generic_bases) == int - assert extract_type_var_from_base(typ, index=1, generic_bases=generic_bases) == str - assert extract_type_var_from_base(typ, index=2, generic_bases=generic_bases) == type(None) - - -def test_extract_type_var_generic_subclass_different_ordering_multiple() -> None: - typ = SubclassDifferentOrderGenericMultipleTypeArgs[int, str, None] - - generic_bases = cast("tuple[type, ...]", (BaseGenericMultipleTypeArgs,)) - assert extract_type_var_from_base(typ, index=0, generic_bases=generic_bases) == int - assert extract_type_var_from_base(typ, index=1, generic_bases=generic_bases) == str - assert extract_type_var_from_base(typ, index=2, generic_bases=generic_bases) == type(None) diff --git a/tests/utils.py b/tests/utils.py deleted file mode 100644 index ae6e6670..00000000 --- a/tests/utils.py +++ /dev/null @@ -1,167 +0,0 @@ -from __future__ import annotations - -import os -import inspect -import traceback -import contextlib -from typing import Any, TypeVar, Iterator, Sequence, cast -from datetime import date, datetime -from typing_extensions import Literal, get_args, get_origin, assert_type - -from profound._types import Omit, NoneType -from profound._utils import ( - is_dict, - is_list, - is_list_type, - is_union_type, - extract_type_arg, - is_sequence_type, - is_annotated_type, - is_type_alias_type, -) -from profound._compat import PYDANTIC_V1, field_outer_type, get_model_fields -from profound._models import BaseModel - -BaseModelT = TypeVar("BaseModelT", bound=BaseModel) - - -def assert_matches_model(model: type[BaseModelT], value: BaseModelT, *, path: list[str]) -> bool: - for name, field in get_model_fields(model).items(): - field_value = getattr(value, name) - if PYDANTIC_V1: - # in v1 nullability was structured differently - # https://docs.pydantic.dev/2.0/migration/#required-optional-and-nullable-fields - allow_none = getattr(field, "allow_none", False) - else: - allow_none = False - - assert_matches_type( - field_outer_type(field), - field_value, - path=[*path, name], - allow_none=allow_none, - ) - - return True - - -# Note: the `path` argument is only used to improve error messages when `--showlocals` is used -def assert_matches_type( - type_: Any, - value: object, - *, - path: list[str], - allow_none: bool = False, -) -> None: - if is_type_alias_type(type_): - type_ = type_.__value__ - - # unwrap `Annotated[T, ...]` -> `T` - if is_annotated_type(type_): - type_ = extract_type_arg(type_, 0) - - if allow_none and value is None: - return - - if type_ is None or type_ is NoneType: - assert value is None - return - - origin = get_origin(type_) or type_ - - if is_list_type(type_): - return _assert_list_type(type_, value) - - if is_sequence_type(type_): - assert isinstance(value, Sequence) - inner_type = get_args(type_)[0] - for entry in value: # type: ignore - assert_type(inner_type, entry) # type: ignore - return - - if origin == str: - assert isinstance(value, str) - elif origin == int: - assert isinstance(value, int) - elif origin == bool: - assert isinstance(value, bool) - elif origin == float: - assert isinstance(value, float) - elif origin == bytes: - assert isinstance(value, bytes) - elif origin == datetime: - assert isinstance(value, datetime) - elif origin == date: - assert isinstance(value, date) - elif origin == object: - # nothing to do here, the expected type is unknown - pass - elif origin == Literal: - assert value in get_args(type_) - elif origin == dict: - assert is_dict(value) - - args = get_args(type_) - key_type = args[0] - items_type = args[1] - - for key, item in value.items(): - assert_matches_type(key_type, key, path=[*path, ""]) - assert_matches_type(items_type, item, path=[*path, ""]) - elif is_union_type(type_): - variants = get_args(type_) - - try: - none_index = variants.index(type(None)) - except ValueError: - pass - else: - # special case Optional[T] for better error messages - if len(variants) == 2: - if value is None: - # valid - return - - return assert_matches_type(type_=variants[not none_index], value=value, path=path) - - for i, variant in enumerate(variants): - try: - assert_matches_type(variant, value, path=[*path, f"variant {i}"]) - return - except AssertionError: - traceback.print_exc() - continue - - raise AssertionError("Did not match any variants") - elif issubclass(origin, BaseModel): - assert isinstance(value, type_) - assert assert_matches_model(type_, cast(Any, value), path=path) - elif inspect.isclass(origin) and origin.__name__ == "HttpxBinaryResponseContent": - assert value.__class__.__name__ == "HttpxBinaryResponseContent" - else: - assert None, f"Unhandled field type: {type_}" - - -def _assert_list_type(type_: type[object], value: object) -> None: - assert is_list(value) - - inner_type = get_args(type_)[0] - for entry in value: - assert_type(inner_type, entry) # type: ignore - - -@contextlib.contextmanager -def update_env(**new_env: str | Omit) -> Iterator[None]: - old = os.environ.copy() - - try: - for name, value in new_env.items(): - if isinstance(value, Omit): - os.environ.pop(name, None) - else: - os.environ[name] = value - - yield None - finally: - os.environ.clear() - os.environ.update(old) diff --git a/uv.lock b/uv.lock deleted file mode 100644 index 331b52ce..00000000 --- a/uv.lock +++ /dev/null @@ -1,2336 +0,0 @@ -version = 1 -revision = 3 -requires-python = ">=3.9.18" -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version == '3.11.*' and sys_platform == 'emscripten'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.10.*'", - "python_full_version < '3.10'", -] -conflicts = [[ - { package = "profound", group = "pydantic-v1" }, - { package = "profound", group = "pydantic-v2" }, -]] - -[manifest] -members = [ - "profound", - "profound-examples", -] - -[[package]] -name = "aiohappyeyeballs" -version = "2.6.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/26/30/f84a107a9c4331c14b2b586036f40965c128aa4fee4dda5d3d51cb14ad54/aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558", size = 22760, upload-time = "2025-03-12T01:42:48.764Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8", size = 15265, upload-time = "2025-03-12T01:42:47.083Z" }, -] - -[[package]] -name = "aiohttp" -version = "3.13.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "aiohappyeyeballs" }, - { name = "aiosignal" }, - { name = "async-timeout", marker = "python_full_version < '3.11' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "attrs" }, - { name = "frozenlist" }, - { name = "multidict" }, - { name = "propcache" }, - { name = "yarl" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/50/42/32cf8e7704ceb4481406eb87161349abb46a57fee3f008ba9cb610968646/aiohttp-3.13.3.tar.gz", hash = "sha256:a949eee43d3782f2daae4f4a2819b2cb9b0c5d3b7f7a927067cc84dafdbb9f88", size = 7844556, upload-time = "2026-01-03T17:33:05.204Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/36/d6/5aec9313ee6ea9c7cde8b891b69f4ff4001416867104580670a31daeba5b/aiohttp-3.13.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5a372fd5afd301b3a89582817fdcdb6c34124787c70dbcc616f259013e7eef7", size = 738950, upload-time = "2026-01-03T17:29:13.002Z" }, - { url = "https://files.pythonhosted.org/packages/68/03/8fa90a7e6d11ff20a18837a8e2b5dd23db01aabc475aa9271c8ad33299f5/aiohttp-3.13.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:147e422fd1223005c22b4fe080f5d93ced44460f5f9c105406b753612b587821", size = 496099, upload-time = "2026-01-03T17:29:15.268Z" }, - { url = "https://files.pythonhosted.org/packages/d2/23/b81f744d402510a8366b74eb420fc0cc1170d0c43daca12d10814df85f10/aiohttp-3.13.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:859bd3f2156e81dd01432f5849fc73e2243d4a487c4fd26609b1299534ee1845", size = 491072, upload-time = "2026-01-03T17:29:16.922Z" }, - { url = "https://files.pythonhosted.org/packages/d5/e1/56d1d1c0dd334cd203dd97706ce004c1aa24b34a813b0b8daf3383039706/aiohttp-3.13.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dca68018bf48c251ba17c72ed479f4dafe9dbd5a73707ad8d28a38d11f3d42af", size = 1671588, upload-time = "2026-01-03T17:29:18.539Z" }, - { url = "https://files.pythonhosted.org/packages/5f/34/8d7f962604f4bc2b4e39eb1220dac7d4e4cba91fb9ba0474b4ecd67db165/aiohttp-3.13.3-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fee0c6bc7db1de362252affec009707a17478a00ec69f797d23ca256e36d5940", size = 1640334, upload-time = "2026-01-03T17:29:21.028Z" }, - { url = "https://files.pythonhosted.org/packages/94/1d/fcccf2c668d87337ddeef9881537baee13c58d8f01f12ba8a24215f2b804/aiohttp-3.13.3-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c048058117fd649334d81b4b526e94bde3ccaddb20463a815ced6ecbb7d11160", size = 1722656, upload-time = "2026-01-03T17:29:22.531Z" }, - { url = "https://files.pythonhosted.org/packages/aa/98/c6f3b081c4c606bc1e5f2ec102e87d6411c73a9ef3616fea6f2d5c98c062/aiohttp-3.13.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:215a685b6fbbfcf71dfe96e3eba7a6f58f10da1dfdf4889c7dd856abe430dca7", size = 1817625, upload-time = "2026-01-03T17:29:24.276Z" }, - { url = "https://files.pythonhosted.org/packages/2c/c0/cfcc3d2e11b477f86e1af2863f3858c8850d751ce8dc39c4058a072c9e54/aiohttp-3.13.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de2c184bb1fe2cbd2cefba613e9db29a5ab559323f994b6737e370d3da0ac455", size = 1672604, upload-time = "2026-01-03T17:29:26.099Z" }, - { url = "https://files.pythonhosted.org/packages/1e/77/6b4ffcbcac4c6a5d041343a756f34a6dd26174ae07f977a64fe028dda5b0/aiohttp-3.13.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:75ca857eba4e20ce9f546cd59c7007b33906a4cd48f2ff6ccf1ccfc3b646f279", size = 1554370, upload-time = "2026-01-03T17:29:28.121Z" }, - { url = "https://files.pythonhosted.org/packages/f2/f0/e3ddfa93f17d689dbe014ba048f18e0c9f9b456033b70e94349a2e9048be/aiohttp-3.13.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:81e97251d9298386c2b7dbeb490d3d1badbdc69107fb8c9299dd04eb39bddc0e", size = 1642023, upload-time = "2026-01-03T17:29:30.002Z" }, - { url = "https://files.pythonhosted.org/packages/eb/45/c14019c9ec60a8e243d06d601b33dcc4fd92379424bde3021725859d7f99/aiohttp-3.13.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:c0e2d366af265797506f0283487223146af57815b388623f0357ef7eac9b209d", size = 1649680, upload-time = "2026-01-03T17:29:31.782Z" }, - { url = "https://files.pythonhosted.org/packages/9c/fd/09c9451dae5aa5c5ed756df95ff9ef549d45d4be663bafd1e4954fd836f0/aiohttp-3.13.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4e239d501f73d6db1522599e14b9b321a7e3b1de66ce33d53a765d975e9f4808", size = 1692407, upload-time = "2026-01-03T17:29:33.392Z" }, - { url = "https://files.pythonhosted.org/packages/a6/81/938bc2ec33c10efd6637ccb3d22f9f3160d08e8f3aa2587a2c2d5ab578eb/aiohttp-3.13.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:0db318f7a6f065d84cb1e02662c526294450b314a02bd9e2a8e67f0d8564ce40", size = 1543047, upload-time = "2026-01-03T17:29:34.855Z" }, - { url = "https://files.pythonhosted.org/packages/f7/23/80488ee21c8d567c83045e412e1d9b7077d27171591a4eb7822586e8c06a/aiohttp-3.13.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:bfc1cc2fe31a6026a8a88e4ecfb98d7f6b1fec150cfd708adbfd1d2f42257c29", size = 1715264, upload-time = "2026-01-03T17:29:36.389Z" }, - { url = "https://files.pythonhosted.org/packages/e2/83/259a8da6683182768200b368120ab3deff5370bed93880fb9a3a86299f34/aiohttp-3.13.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:af71fff7bac6bb7508956696dce8f6eec2bbb045eceb40343944b1ae62b5ef11", size = 1657275, upload-time = "2026-01-03T17:29:38.162Z" }, - { url = "https://files.pythonhosted.org/packages/3f/4f/2c41f800a0b560785c10fb316216ac058c105f9be50bdc6a285de88db625/aiohttp-3.13.3-cp310-cp310-win32.whl", hash = "sha256:37da61e244d1749798c151421602884db5270faf479cf0ef03af0ff68954c9dd", size = 434053, upload-time = "2026-01-03T17:29:40.074Z" }, - { url = "https://files.pythonhosted.org/packages/80/df/29cd63c7ecfdb65ccc12f7d808cac4fa2a19544660c06c61a4a48462de0c/aiohttp-3.13.3-cp310-cp310-win_amd64.whl", hash = "sha256:7e63f210bc1b57ef699035f2b4b6d9ce096b5914414a49b0997c839b2bd2223c", size = 456687, upload-time = "2026-01-03T17:29:41.819Z" }, - { url = "https://files.pythonhosted.org/packages/f1/4c/a164164834f03924d9a29dc3acd9e7ee58f95857e0b467f6d04298594ebb/aiohttp-3.13.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5b6073099fb654e0a068ae678b10feff95c5cae95bbfcbfa7af669d361a8aa6b", size = 746051, upload-time = "2026-01-03T17:29:43.287Z" }, - { url = "https://files.pythonhosted.org/packages/82/71/d5c31390d18d4f58115037c432b7e0348c60f6f53b727cad33172144a112/aiohttp-3.13.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cb93e166e6c28716c8c6aeb5f99dfb6d5ccf482d29fe9bf9a794110e6d0ab64", size = 499234, upload-time = "2026-01-03T17:29:44.822Z" }, - { url = "https://files.pythonhosted.org/packages/0e/c9/741f8ac91e14b1d2e7100690425a5b2b919a87a5075406582991fb7de920/aiohttp-3.13.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:28e027cf2f6b641693a09f631759b4d9ce9165099d2b5d92af9bd4e197690eea", size = 494979, upload-time = "2026-01-03T17:29:46.405Z" }, - { url = "https://files.pythonhosted.org/packages/75/b5/31d4d2e802dfd59f74ed47eba48869c1c21552c586d5e81a9d0d5c2ad640/aiohttp-3.13.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3b61b7169ababd7802f9568ed96142616a9118dd2be0d1866e920e77ec8fa92a", size = 1748297, upload-time = "2026-01-03T17:29:48.083Z" }, - { url = "https://files.pythonhosted.org/packages/1a/3e/eefad0ad42959f226bb79664826883f2687d602a9ae2941a18e0484a74d3/aiohttp-3.13.3-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:80dd4c21b0f6237676449c6baaa1039abae86b91636b6c91a7f8e61c87f89540", size = 1707172, upload-time = "2026-01-03T17:29:49.648Z" }, - { url = "https://files.pythonhosted.org/packages/c5/3a/54a64299fac2891c346cdcf2aa6803f994a2e4beeaf2e5a09dcc54acc842/aiohttp-3.13.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:65d2ccb7eabee90ce0503c17716fc77226be026dcc3e65cce859a30db715025b", size = 1805405, upload-time = "2026-01-03T17:29:51.244Z" }, - { url = "https://files.pythonhosted.org/packages/6c/70/ddc1b7169cf64075e864f64595a14b147a895a868394a48f6a8031979038/aiohttp-3.13.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5b179331a481cb5529fca8b432d8d3c7001cb217513c94cd72d668d1248688a3", size = 1899449, upload-time = "2026-01-03T17:29:53.938Z" }, - { url = "https://files.pythonhosted.org/packages/a1/7e/6815aab7d3a56610891c76ef79095677b8b5be6646aaf00f69b221765021/aiohttp-3.13.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d4c940f02f49483b18b079d1c27ab948721852b281f8b015c058100e9421dd1", size = 1748444, upload-time = "2026-01-03T17:29:55.484Z" }, - { url = "https://files.pythonhosted.org/packages/6b/f2/073b145c4100da5511f457dc0f7558e99b2987cf72600d42b559db856fbc/aiohttp-3.13.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f9444f105664c4ce47a2a7171a2418bce5b7bae45fb610f4e2c36045d85911d3", size = 1606038, upload-time = "2026-01-03T17:29:57.179Z" }, - { url = "https://files.pythonhosted.org/packages/0a/c1/778d011920cae03ae01424ec202c513dc69243cf2db303965615b81deeea/aiohttp-3.13.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:694976222c711d1d00ba131904beb60534f93966562f64440d0c9d41b8cdb440", size = 1724156, upload-time = "2026-01-03T17:29:58.914Z" }, - { url = "https://files.pythonhosted.org/packages/0e/cb/3419eabf4ec1e9ec6f242c32b689248365a1cf621891f6f0386632525494/aiohttp-3.13.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f33ed1a2bf1997a36661874b017f5c4b760f41266341af36febaf271d179f6d7", size = 1722340, upload-time = "2026-01-03T17:30:01.962Z" }, - { url = "https://files.pythonhosted.org/packages/7a/e5/76cf77bdbc435bf233c1f114edad39ed4177ccbfab7c329482b179cff4f4/aiohttp-3.13.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e636b3c5f61da31a92bf0d91da83e58fdfa96f178ba682f11d24f31944cdd28c", size = 1783041, upload-time = "2026-01-03T17:30:03.609Z" }, - { url = "https://files.pythonhosted.org/packages/9d/d4/dd1ca234c794fd29c057ce8c0566b8ef7fd6a51069de5f06fa84b9a1971c/aiohttp-3.13.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:5d2d94f1f5fcbe40838ac51a6ab5704a6f9ea42e72ceda48de5e6b898521da51", size = 1596024, upload-time = "2026-01-03T17:30:05.132Z" }, - { url = "https://files.pythonhosted.org/packages/55/58/4345b5f26661a6180afa686c473620c30a66afdf120ed3dd545bbc809e85/aiohttp-3.13.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:2be0e9ccf23e8a94f6f0650ce06042cefc6ac703d0d7ab6c7a917289f2539ad4", size = 1804590, upload-time = "2026-01-03T17:30:07.135Z" }, - { url = "https://files.pythonhosted.org/packages/7b/06/05950619af6c2df7e0a431d889ba2813c9f0129cec76f663e547a5ad56f2/aiohttp-3.13.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9af5e68ee47d6534d36791bbe9b646d2a7c7deb6fc24d7943628edfbb3581f29", size = 1740355, upload-time = "2026-01-03T17:30:09.083Z" }, - { url = "https://files.pythonhosted.org/packages/3e/80/958f16de79ba0422d7c1e284b2abd0c84bc03394fbe631d0a39ffa10e1eb/aiohttp-3.13.3-cp311-cp311-win32.whl", hash = "sha256:a2212ad43c0833a873d0fb3c63fa1bacedd4cf6af2fee62bf4b739ceec3ab239", size = 433701, upload-time = "2026-01-03T17:30:10.869Z" }, - { url = "https://files.pythonhosted.org/packages/dc/f2/27cdf04c9851712d6c1b99df6821a6623c3c9e55956d4b1e318c337b5a48/aiohttp-3.13.3-cp311-cp311-win_amd64.whl", hash = "sha256:642f752c3eb117b105acbd87e2c143de710987e09860d674e068c4c2c441034f", size = 457678, upload-time = "2026-01-03T17:30:12.719Z" }, - { url = "https://files.pythonhosted.org/packages/a0/be/4fc11f202955a69e0db803a12a062b8379c970c7c84f4882b6da17337cc1/aiohttp-3.13.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b903a4dfee7d347e2d87697d0713be59e0b87925be030c9178c5faa58ea58d5c", size = 739732, upload-time = "2026-01-03T17:30:14.23Z" }, - { url = "https://files.pythonhosted.org/packages/97/2c/621d5b851f94fa0bb7430d6089b3aa970a9d9b75196bc93bb624b0db237a/aiohttp-3.13.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a45530014d7a1e09f4a55f4f43097ba0fd155089372e105e4bff4ca76cb1b168", size = 494293, upload-time = "2026-01-03T17:30:15.96Z" }, - { url = "https://files.pythonhosted.org/packages/5d/43/4be01406b78e1be8320bb8316dc9c42dbab553d281c40364e0f862d5661c/aiohttp-3.13.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:27234ef6d85c914f9efeb77ff616dbf4ad2380be0cda40b4db086ffc7ddd1b7d", size = 493533, upload-time = "2026-01-03T17:30:17.431Z" }, - { url = "https://files.pythonhosted.org/packages/8d/a8/5a35dc56a06a2c90d4742cbf35294396907027f80eea696637945a106f25/aiohttp-3.13.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d32764c6c9aafb7fb55366a224756387cd50bfa720f32b88e0e6fa45b27dcf29", size = 1737839, upload-time = "2026-01-03T17:30:19.422Z" }, - { url = "https://files.pythonhosted.org/packages/bf/62/4b9eeb331da56530bf2e198a297e5303e1c1ebdceeb00fe9b568a65c5a0c/aiohttp-3.13.3-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b1a6102b4d3ebc07dad44fbf07b45bb600300f15b552ddf1851b5390202ea2e3", size = 1703932, upload-time = "2026-01-03T17:30:21.756Z" }, - { url = "https://files.pythonhosted.org/packages/7c/f6/af16887b5d419e6a367095994c0b1332d154f647e7dc2bd50e61876e8e3d/aiohttp-3.13.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c014c7ea7fb775dd015b2d3137378b7be0249a448a1612268b5a90c2d81de04d", size = 1771906, upload-time = "2026-01-03T17:30:23.932Z" }, - { url = "https://files.pythonhosted.org/packages/ce/83/397c634b1bcc24292fa1e0c7822800f9f6569e32934bdeef09dae7992dfb/aiohttp-3.13.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2b8d8ddba8f95ba17582226f80e2de99c7a7948e66490ef8d947e272a93e9463", size = 1871020, upload-time = "2026-01-03T17:30:26Z" }, - { url = "https://files.pythonhosted.org/packages/86/f6/a62cbbf13f0ac80a70f71b1672feba90fdb21fd7abd8dbf25c0105fb6fa3/aiohttp-3.13.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9ae8dd55c8e6c4257eae3a20fd2c8f41edaea5992ed67156642493b8daf3cecc", size = 1755181, upload-time = "2026-01-03T17:30:27.554Z" }, - { url = "https://files.pythonhosted.org/packages/0a/87/20a35ad487efdd3fba93d5843efdfaa62d2f1479eaafa7453398a44faf13/aiohttp-3.13.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:01ad2529d4b5035578f5081606a465f3b814c542882804e2e8cda61adf5c71bf", size = 1561794, upload-time = "2026-01-03T17:30:29.254Z" }, - { url = "https://files.pythonhosted.org/packages/de/95/8fd69a66682012f6716e1bc09ef8a1a2a91922c5725cb904689f112309c4/aiohttp-3.13.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bb4f7475e359992b580559e008c598091c45b5088f28614e855e42d39c2f1033", size = 1697900, upload-time = "2026-01-03T17:30:31.033Z" }, - { url = "https://files.pythonhosted.org/packages/e5/66/7b94b3b5ba70e955ff597672dad1691333080e37f50280178967aff68657/aiohttp-3.13.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:c19b90316ad3b24c69cd78d5c9b4f3aa4497643685901185b65166293d36a00f", size = 1728239, upload-time = "2026-01-03T17:30:32.703Z" }, - { url = "https://files.pythonhosted.org/packages/47/71/6f72f77f9f7d74719692ab65a2a0252584bf8d5f301e2ecb4c0da734530a/aiohttp-3.13.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:96d604498a7c782cb15a51c406acaea70d8c027ee6b90c569baa6e7b93073679", size = 1740527, upload-time = "2026-01-03T17:30:34.695Z" }, - { url = "https://files.pythonhosted.org/packages/fa/b4/75ec16cbbd5c01bdaf4a05b19e103e78d7ce1ef7c80867eb0ace42ff4488/aiohttp-3.13.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:084911a532763e9d3dd95adf78a78f4096cd5f58cdc18e6fdbc1b58417a45423", size = 1554489, upload-time = "2026-01-03T17:30:36.864Z" }, - { url = "https://files.pythonhosted.org/packages/52/8f/bc518c0eea29f8406dcf7ed1f96c9b48e3bc3995a96159b3fc11f9e08321/aiohttp-3.13.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7a4a94eb787e606d0a09404b9c38c113d3b099d508021faa615d70a0131907ce", size = 1767852, upload-time = "2026-01-03T17:30:39.433Z" }, - { url = "https://files.pythonhosted.org/packages/9d/f2/a07a75173124f31f11ea6f863dc44e6f09afe2bca45dd4e64979490deab1/aiohttp-3.13.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:87797e645d9d8e222e04160ee32aa06bc5c163e8499f24db719e7852ec23093a", size = 1722379, upload-time = "2026-01-03T17:30:41.081Z" }, - { url = "https://files.pythonhosted.org/packages/3c/4a/1a3fee7c21350cac78e5c5cef711bac1b94feca07399f3d406972e2d8fcd/aiohttp-3.13.3-cp312-cp312-win32.whl", hash = "sha256:b04be762396457bef43f3597c991e192ee7da460a4953d7e647ee4b1c28e7046", size = 428253, upload-time = "2026-01-03T17:30:42.644Z" }, - { url = "https://files.pythonhosted.org/packages/d9/b7/76175c7cb4eb73d91ad63c34e29fc4f77c9386bba4a65b53ba8e05ee3c39/aiohttp-3.13.3-cp312-cp312-win_amd64.whl", hash = "sha256:e3531d63d3bdfa7e3ac5e9b27b2dd7ec9df3206a98e0b3445fa906f233264c57", size = 455407, upload-time = "2026-01-03T17:30:44.195Z" }, - { url = "https://files.pythonhosted.org/packages/97/8a/12ca489246ca1faaf5432844adbfce7ff2cc4997733e0af120869345643a/aiohttp-3.13.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:5dff64413671b0d3e7d5918ea490bdccb97a4ad29b3f311ed423200b2203e01c", size = 734190, upload-time = "2026-01-03T17:30:45.832Z" }, - { url = "https://files.pythonhosted.org/packages/32/08/de43984c74ed1fca5c014808963cc83cb00d7bb06af228f132d33862ca76/aiohttp-3.13.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:87b9aab6d6ed88235aa2970294f496ff1a1f9adcd724d800e9b952395a80ffd9", size = 491783, upload-time = "2026-01-03T17:30:47.466Z" }, - { url = "https://files.pythonhosted.org/packages/17/f8/8dd2cf6112a5a76f81f81a5130c57ca829d101ad583ce57f889179accdda/aiohttp-3.13.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:425c126c0dc43861e22cb1c14ba4c8e45d09516d0a3ae0a3f7494b79f5f233a3", size = 490704, upload-time = "2026-01-03T17:30:49.373Z" }, - { url = "https://files.pythonhosted.org/packages/6d/40/a46b03ca03936f832bc7eaa47cfbb1ad012ba1be4790122ee4f4f8cba074/aiohttp-3.13.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7f9120f7093c2a32d9647abcaf21e6ad275b4fbec5b55969f978b1a97c7c86bf", size = 1720652, upload-time = "2026-01-03T17:30:50.974Z" }, - { url = "https://files.pythonhosted.org/packages/f7/7e/917fe18e3607af92657e4285498f500dca797ff8c918bd7d90b05abf6c2a/aiohttp-3.13.3-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:697753042d57f4bf7122cab985bf15d0cef23c770864580f5af4f52023a56bd6", size = 1692014, upload-time = "2026-01-03T17:30:52.729Z" }, - { url = "https://files.pythonhosted.org/packages/71/b6/cefa4cbc00d315d68973b671cf105b21a609c12b82d52e5d0c9ae61d2a09/aiohttp-3.13.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6de499a1a44e7de70735d0b39f67c8f25eb3d91eb3103be99ca0fa882cdd987d", size = 1759777, upload-time = "2026-01-03T17:30:54.537Z" }, - { url = "https://files.pythonhosted.org/packages/fb/e3/e06ee07b45e59e6d81498b591fc589629be1553abb2a82ce33efe2a7b068/aiohttp-3.13.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:37239e9f9a7ea9ac5bf6b92b0260b01f8a22281996da609206a84df860bc1261", size = 1861276, upload-time = "2026-01-03T17:30:56.512Z" }, - { url = "https://files.pythonhosted.org/packages/7c/24/75d274228acf35ceeb2850b8ce04de9dd7355ff7a0b49d607ee60c29c518/aiohttp-3.13.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f76c1e3fe7d7c8afad7ed193f89a292e1999608170dcc9751a7462a87dfd5bc0", size = 1743131, upload-time = "2026-01-03T17:30:58.256Z" }, - { url = "https://files.pythonhosted.org/packages/04/98/3d21dde21889b17ca2eea54fdcff21b27b93f45b7bb94ca029c31ab59dc3/aiohttp-3.13.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fc290605db2a917f6e81b0e1e0796469871f5af381ce15c604a3c5c7e51cb730", size = 1556863, upload-time = "2026-01-03T17:31:00.445Z" }, - { url = "https://files.pythonhosted.org/packages/9e/84/da0c3ab1192eaf64782b03971ab4055b475d0db07b17eff925e8c93b3aa5/aiohttp-3.13.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4021b51936308aeea0367b8f006dc999ca02bc118a0cc78c303f50a2ff6afb91", size = 1682793, upload-time = "2026-01-03T17:31:03.024Z" }, - { url = "https://files.pythonhosted.org/packages/ff/0f/5802ada182f575afa02cbd0ec5180d7e13a402afb7c2c03a9aa5e5d49060/aiohttp-3.13.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:49a03727c1bba9a97d3e93c9f93ca03a57300f484b6e935463099841261195d3", size = 1716676, upload-time = "2026-01-03T17:31:04.842Z" }, - { url = "https://files.pythonhosted.org/packages/3f/8c/714d53bd8b5a4560667f7bbbb06b20c2382f9c7847d198370ec6526af39c/aiohttp-3.13.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3d9908a48eb7416dc1f4524e69f1d32e5d90e3981e4e37eb0aa1cd18f9cfa2a4", size = 1733217, upload-time = "2026-01-03T17:31:06.868Z" }, - { url = "https://files.pythonhosted.org/packages/7d/79/e2176f46d2e963facea939f5be2d26368ce543622be6f00a12844d3c991f/aiohttp-3.13.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:2712039939ec963c237286113c68dbad80a82a4281543f3abf766d9d73228998", size = 1552303, upload-time = "2026-01-03T17:31:08.958Z" }, - { url = "https://files.pythonhosted.org/packages/ab/6a/28ed4dea1759916090587d1fe57087b03e6c784a642b85ef48217b0277ae/aiohttp-3.13.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:7bfdc049127717581866fa4708791220970ce291c23e28ccf3922c700740fdc0", size = 1763673, upload-time = "2026-01-03T17:31:10.676Z" }, - { url = "https://files.pythonhosted.org/packages/e8/35/4a3daeb8b9fab49240d21c04d50732313295e4bd813a465d840236dd0ce1/aiohttp-3.13.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8057c98e0c8472d8846b9c79f56766bcc57e3e8ac7bfd510482332366c56c591", size = 1721120, upload-time = "2026-01-03T17:31:12.575Z" }, - { url = "https://files.pythonhosted.org/packages/bc/9f/d643bb3c5fb99547323e635e251c609fbbc660d983144cfebec529e09264/aiohttp-3.13.3-cp313-cp313-win32.whl", hash = "sha256:1449ceddcdbcf2e0446957863af03ebaaa03f94c090f945411b61269e2cb5daf", size = 427383, upload-time = "2026-01-03T17:31:14.382Z" }, - { url = "https://files.pythonhosted.org/packages/4e/f1/ab0395f8a79933577cdd996dd2f9aa6014af9535f65dddcf88204682fe62/aiohttp-3.13.3-cp313-cp313-win_amd64.whl", hash = "sha256:693781c45a4033d31d4187d2436f5ac701e7bbfe5df40d917736108c1cc7436e", size = 453899, upload-time = "2026-01-03T17:31:15.958Z" }, - { url = "https://files.pythonhosted.org/packages/99/36/5b6514a9f5d66f4e2597e40dea2e3db271e023eb7a5d22defe96ba560996/aiohttp-3.13.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:ea37047c6b367fd4bd632bff8077449b8fa034b69e812a18e0132a00fae6e808", size = 737238, upload-time = "2026-01-03T17:31:17.909Z" }, - { url = "https://files.pythonhosted.org/packages/f7/49/459327f0d5bcd8c6c9ca69e60fdeebc3622861e696490d8674a6d0cb90a6/aiohttp-3.13.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:6fc0e2337d1a4c3e6acafda6a78a39d4c14caea625124817420abceed36e2415", size = 492292, upload-time = "2026-01-03T17:31:19.919Z" }, - { url = "https://files.pythonhosted.org/packages/e8/0b/b97660c5fd05d3495b4eb27f2d0ef18dc1dc4eff7511a9bf371397ff0264/aiohttp-3.13.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c685f2d80bb67ca8c3837823ad76196b3694b0159d232206d1e461d3d434666f", size = 493021, upload-time = "2026-01-03T17:31:21.636Z" }, - { url = "https://files.pythonhosted.org/packages/54/d4/438efabdf74e30aeceb890c3290bbaa449780583b1270b00661126b8aae4/aiohttp-3.13.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48e377758516d262bde50c2584fc6c578af272559c409eecbdd2bae1601184d6", size = 1717263, upload-time = "2026-01-03T17:31:23.296Z" }, - { url = "https://files.pythonhosted.org/packages/71/f2/7bddc7fd612367d1459c5bcf598a9e8f7092d6580d98de0e057eb42697ad/aiohttp-3.13.3-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:34749271508078b261c4abb1767d42b8d0c0cc9449c73a4df494777dc55f0687", size = 1669107, upload-time = "2026-01-03T17:31:25.334Z" }, - { url = "https://files.pythonhosted.org/packages/00/5a/1aeaecca40e22560f97610a329e0e5efef5e0b5afdf9f857f0d93839ab2e/aiohttp-3.13.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:82611aeec80eb144416956ec85b6ca45a64d76429c1ed46ae1b5f86c6e0c9a26", size = 1760196, upload-time = "2026-01-03T17:31:27.394Z" }, - { url = "https://files.pythonhosted.org/packages/f8/f8/0ff6992bea7bd560fc510ea1c815f87eedd745fe035589c71ce05612a19a/aiohttp-3.13.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2fff83cfc93f18f215896e3a190e8e5cb413ce01553901aca925176e7568963a", size = 1843591, upload-time = "2026-01-03T17:31:29.238Z" }, - { url = "https://files.pythonhosted.org/packages/e3/d1/e30e537a15f53485b61f5be525f2157da719819e8377298502aebac45536/aiohttp-3.13.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bbe7d4cecacb439e2e2a8a1a7b935c25b812af7a5fd26503a66dadf428e79ec1", size = 1720277, upload-time = "2026-01-03T17:31:31.053Z" }, - { url = "https://files.pythonhosted.org/packages/84/45/23f4c451d8192f553d38d838831ebbc156907ea6e05557f39563101b7717/aiohttp-3.13.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b928f30fe49574253644b1ca44b1b8adbd903aa0da4b9054a6c20fc7f4092a25", size = 1548575, upload-time = "2026-01-03T17:31:32.87Z" }, - { url = "https://files.pythonhosted.org/packages/6a/ed/0a42b127a43712eda7807e7892c083eadfaf8429ca8fb619662a530a3aab/aiohttp-3.13.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7b5e8fe4de30df199155baaf64f2fcd604f4c678ed20910db8e2c66dc4b11603", size = 1679455, upload-time = "2026-01-03T17:31:34.76Z" }, - { url = "https://files.pythonhosted.org/packages/2e/b5/c05f0c2b4b4fe2c9d55e73b6d3ed4fd6c9dc2684b1d81cbdf77e7fad9adb/aiohttp-3.13.3-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:8542f41a62bcc58fc7f11cf7c90e0ec324ce44950003feb70640fc2a9092c32a", size = 1687417, upload-time = "2026-01-03T17:31:36.699Z" }, - { url = "https://files.pythonhosted.org/packages/c9/6b/915bc5dad66aef602b9e459b5a973529304d4e89ca86999d9d75d80cbd0b/aiohttp-3.13.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:5e1d8c8b8f1d91cd08d8f4a3c2b067bfca6ec043d3ff36de0f3a715feeedf926", size = 1729968, upload-time = "2026-01-03T17:31:38.622Z" }, - { url = "https://files.pythonhosted.org/packages/11/3b/e84581290a9520024a08640b63d07673057aec5ca548177a82026187ba73/aiohttp-3.13.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:90455115e5da1c3c51ab619ac57f877da8fd6d73c05aacd125c5ae9819582aba", size = 1545690, upload-time = "2026-01-03T17:31:40.57Z" }, - { url = "https://files.pythonhosted.org/packages/f5/04/0c3655a566c43fd647c81b895dfe361b9f9ad6d58c19309d45cff52d6c3b/aiohttp-3.13.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:042e9e0bcb5fba81886c8b4fbb9a09d6b8a00245fd8d88e4d989c1f96c74164c", size = 1746390, upload-time = "2026-01-03T17:31:42.857Z" }, - { url = "https://files.pythonhosted.org/packages/1f/53/71165b26978f719c3419381514c9690bd5980e764a09440a10bb816ea4ab/aiohttp-3.13.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2eb752b102b12a76ca02dff751a801f028b4ffbbc478840b473597fc91a9ed43", size = 1702188, upload-time = "2026-01-03T17:31:44.984Z" }, - { url = "https://files.pythonhosted.org/packages/29/a7/cbe6c9e8e136314fa1980da388a59d2f35f35395948a08b6747baebb6aa6/aiohttp-3.13.3-cp314-cp314-win32.whl", hash = "sha256:b556c85915d8efaed322bf1bdae9486aa0f3f764195a0fb6ee962e5c71ef5ce1", size = 433126, upload-time = "2026-01-03T17:31:47.463Z" }, - { url = "https://files.pythonhosted.org/packages/de/56/982704adea7d3b16614fc5936014e9af85c0e34b58f9046655817f04306e/aiohttp-3.13.3-cp314-cp314-win_amd64.whl", hash = "sha256:9bf9f7a65e7aa20dd764151fb3d616c81088f91f8df39c3893a536e279b4b984", size = 459128, upload-time = "2026-01-03T17:31:49.2Z" }, - { url = "https://files.pythonhosted.org/packages/6c/2a/3c79b638a9c3d4658d345339d22070241ea341ed4e07b5ac60fb0f418003/aiohttp-3.13.3-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:05861afbbec40650d8a07ea324367cb93e9e8cc7762e04dd4405df99fa65159c", size = 769512, upload-time = "2026-01-03T17:31:51.134Z" }, - { url = "https://files.pythonhosted.org/packages/29/b9/3e5014d46c0ab0db8707e0ac2711ed28c4da0218c358a4e7c17bae0d8722/aiohttp-3.13.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2fc82186fadc4a8316768d61f3722c230e2c1dcab4200d52d2ebdf2482e47592", size = 506444, upload-time = "2026-01-03T17:31:52.85Z" }, - { url = "https://files.pythonhosted.org/packages/90/03/c1d4ef9a054e151cd7839cdc497f2638f00b93cbe8043983986630d7a80c/aiohttp-3.13.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0add0900ff220d1d5c5ebbf99ed88b0c1bbf87aa7e4262300ed1376a6b13414f", size = 510798, upload-time = "2026-01-03T17:31:54.91Z" }, - { url = "https://files.pythonhosted.org/packages/ea/76/8c1e5abbfe8e127c893fe7ead569148a4d5a799f7cf958d8c09f3eedf097/aiohttp-3.13.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:568f416a4072fbfae453dcf9a99194bbb8bdeab718e08ee13dfa2ba0e4bebf29", size = 1868835, upload-time = "2026-01-03T17:31:56.733Z" }, - { url = "https://files.pythonhosted.org/packages/8e/ac/984c5a6f74c363b01ff97adc96a3976d9c98940b8969a1881575b279ac5d/aiohttp-3.13.3-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:add1da70de90a2569c5e15249ff76a631ccacfe198375eead4aadf3b8dc849dc", size = 1720486, upload-time = "2026-01-03T17:31:58.65Z" }, - { url = "https://files.pythonhosted.org/packages/b2/9a/b7039c5f099c4eb632138728828b33428585031a1e658d693d41d07d89d1/aiohttp-3.13.3-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:10b47b7ba335d2e9b1239fa571131a87e2d8ec96b333e68b2a305e7a98b0bae2", size = 1847951, upload-time = "2026-01-03T17:32:00.989Z" }, - { url = "https://files.pythonhosted.org/packages/3c/02/3bec2b9a1ba3c19ff89a43a19324202b8eb187ca1e928d8bdac9bbdddebd/aiohttp-3.13.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3dd4dce1c718e38081c8f35f323209d4c1df7d4db4bab1b5c88a6b4d12b74587", size = 1941001, upload-time = "2026-01-03T17:32:03.122Z" }, - { url = "https://files.pythonhosted.org/packages/37/df/d879401cedeef27ac4717f6426c8c36c3091c6e9f08a9178cc87549c537f/aiohttp-3.13.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:34bac00a67a812570d4a460447e1e9e06fae622946955f939051e7cc895cfab8", size = 1797246, upload-time = "2026-01-03T17:32:05.255Z" }, - { url = "https://files.pythonhosted.org/packages/8d/15/be122de1f67e6953add23335c8ece6d314ab67c8bebb3f181063010795a7/aiohttp-3.13.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a19884d2ee70b06d9204b2727a7b9f983d0c684c650254679e716b0b77920632", size = 1627131, upload-time = "2026-01-03T17:32:07.607Z" }, - { url = "https://files.pythonhosted.org/packages/12/12/70eedcac9134cfa3219ab7af31ea56bc877395b1ac30d65b1bc4b27d0438/aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5f8ca7f2bb6ba8348a3614c7918cc4bb73268c5ac2a207576b7afea19d3d9f64", size = 1795196, upload-time = "2026-01-03T17:32:09.59Z" }, - { url = "https://files.pythonhosted.org/packages/32/11/b30e1b1cd1f3054af86ebe60df96989c6a414dd87e27ad16950eee420bea/aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:b0d95340658b9d2f11d9697f59b3814a9d3bb4b7a7c20b131df4bcef464037c0", size = 1782841, upload-time = "2026-01-03T17:32:11.445Z" }, - { url = "https://files.pythonhosted.org/packages/88/0d/d98a9367b38912384a17e287850f5695c528cff0f14f791ce8ee2e4f7796/aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:a1e53262fd202e4b40b70c3aff944a8155059beedc8a89bba9dc1f9ef06a1b56", size = 1795193, upload-time = "2026-01-03T17:32:13.705Z" }, - { url = "https://files.pythonhosted.org/packages/43/a5/a2dfd1f5ff5581632c7f6a30e1744deda03808974f94f6534241ef60c751/aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:d60ac9663f44168038586cab2157e122e46bdef09e9368b37f2d82d354c23f72", size = 1621979, upload-time = "2026-01-03T17:32:15.965Z" }, - { url = "https://files.pythonhosted.org/packages/fa/f0/12973c382ae7c1cccbc4417e129c5bf54c374dfb85af70893646e1f0e749/aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:90751b8eed69435bac9ff4e3d2f6b3af1f57e37ecb0fbeee59c0174c9e2d41df", size = 1822193, upload-time = "2026-01-03T17:32:18.219Z" }, - { url = "https://files.pythonhosted.org/packages/3c/5f/24155e30ba7f8c96918af1350eb0663e2430aad9e001c0489d89cd708ab1/aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:fc353029f176fd2b3ec6cfc71be166aba1936fe5d73dd1992ce289ca6647a9aa", size = 1769801, upload-time = "2026-01-03T17:32:20.25Z" }, - { url = "https://files.pythonhosted.org/packages/eb/f8/7314031ff5c10e6ece114da79b338ec17eeff3a079e53151f7e9f43c4723/aiohttp-3.13.3-cp314-cp314t-win32.whl", hash = "sha256:2e41b18a58da1e474a057b3d35248d8320029f61d70a37629535b16a0c8f3767", size = 466523, upload-time = "2026-01-03T17:32:22.215Z" }, - { url = "https://files.pythonhosted.org/packages/b4/63/278a98c715ae467624eafe375542d8ba9b4383a016df8fdefe0ae28382a7/aiohttp-3.13.3-cp314-cp314t-win_amd64.whl", hash = "sha256:44531a36aa2264a1860089ffd4dce7baf875ee5a6079d5fb42e261c704ef7344", size = 499694, upload-time = "2026-01-03T17:32:24.546Z" }, - { url = "https://files.pythonhosted.org/packages/bf/79/446655656861d3e7e2c32bfcf160c7aa9e9dc63776a691b124dba65cdd77/aiohttp-3.13.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:31a83ea4aead760dfcb6962efb1d861db48c34379f2ff72db9ddddd4cda9ea2e", size = 741433, upload-time = "2026-01-03T17:32:26.453Z" }, - { url = "https://files.pythonhosted.org/packages/cb/49/773c4b310b5140d2fb5e79bb0bf40b7b41dad80a288ca1a8759f5f72bda9/aiohttp-3.13.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:988a8c5e317544fdf0d39871559e67b6341065b87fceac641108c2096d5506b7", size = 497332, upload-time = "2026-01-03T17:32:28.37Z" }, - { url = "https://files.pythonhosted.org/packages/bc/31/1dcbc4b83a4e6f76a0ad883f07f21ffbfe29750c89db97381701508c9f45/aiohttp-3.13.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9b174f267b5cfb9a7dba9ee6859cecd234e9a681841eb85068059bc867fb8f02", size = 492365, upload-time = "2026-01-03T17:32:30.234Z" }, - { url = "https://files.pythonhosted.org/packages/5a/b5/b50657496c8754482cd7964e50aaf3aa84b3db61ed45daec4c1aec5b94b4/aiohttp-3.13.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:947c26539750deeaee933b000fb6517cc770bbd064bad6033f1cff4803881e43", size = 1660440, upload-time = "2026-01-03T17:32:32.586Z" }, - { url = "https://files.pythonhosted.org/packages/2a/73/9b69e5139d89d75127569298931444ad78ea86a5befd5599780b1e9a6880/aiohttp-3.13.3-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:9ebf57d09e131f5323464bd347135a88622d1c0976e88ce15b670e7ad57e4bd6", size = 1632740, upload-time = "2026-01-03T17:32:34.793Z" }, - { url = "https://files.pythonhosted.org/packages/ef/fe/3ea9b5af694b4e3aec0d0613a806132ca744747146fca68e96bf056f61a7/aiohttp-3.13.3-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4ae5b5a0e1926e504c81c5b84353e7a5516d8778fbbff00429fe7b05bb25cbce", size = 1719782, upload-time = "2026-01-03T17:32:37.737Z" }, - { url = "https://files.pythonhosted.org/packages/fb/c2/46b3b06e60851cbb71efb0f79a3267279cbef7b12c58e68a1e897f269cca/aiohttp-3.13.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2ba0eea45eb5cc3172dbfc497c066f19c41bac70963ea1a67d51fc92e4cf9a80", size = 1813527, upload-time = "2026-01-03T17:32:39.973Z" }, - { url = "https://files.pythonhosted.org/packages/36/23/71ceb78c769ed65fe4c697692de232b63dab399210678d2b00961ccb0619/aiohttp-3.13.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bae5c2ed2eae26cc382020edad80d01f36cb8e746da40b292e68fec40421dc6a", size = 1661268, upload-time = "2026-01-03T17:32:42.082Z" }, - { url = "https://files.pythonhosted.org/packages/c4/8d/86e929523d955e85ebab7c0e2b9e0cb63604cfc27dc3280e10d0063cf682/aiohttp-3.13.3-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8a60e60746623925eab7d25823329941aee7242d559baa119ca2b253c88a7bd6", size = 1552742, upload-time = "2026-01-03T17:32:44.622Z" }, - { url = "https://files.pythonhosted.org/packages/3a/ea/3f5987cba1bab6bd151f0d97aa60f0ce04d3c83316692a6bb6ba2fb69f92/aiohttp-3.13.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e50a2e1404f063427c9d027378472316201a2290959a295169bcf25992d04558", size = 1632918, upload-time = "2026-01-03T17:32:46.749Z" }, - { url = "https://files.pythonhosted.org/packages/be/2c/7e1e85121f2e31ee938cb83a8f32dfafd4908530c10fabd6d46761c12ac7/aiohttp-3.13.3-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:9a9dc347e5a3dc7dfdbc1f82da0ef29e388ddb2ed281bfce9dd8248a313e62b7", size = 1644446, upload-time = "2026-01-03T17:32:49.063Z" }, - { url = "https://files.pythonhosted.org/packages/5d/35/ce6133d423ad0e8ca976a7c848f7146bca3520eea4ccf6b95e2d077c9d20/aiohttp-3.13.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:b46020d11d23fe16551466c77823df9cc2f2c1e63cc965daf67fa5eec6ca1877", size = 1689487, upload-time = "2026-01-03T17:32:51.113Z" }, - { url = "https://files.pythonhosted.org/packages/50/f7/ff7a27c15603d460fd1366b3c22054f7ae4fa9310aca40b43bde35867fcd/aiohttp-3.13.3-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:69c56fbc1993fa17043e24a546959c0178fe2b5782405ad4559e6c13975c15e3", size = 1540715, upload-time = "2026-01-03T17:32:53.38Z" }, - { url = "https://files.pythonhosted.org/packages/17/02/053f11346e5b962e6d8a1c4f8c70c29d5970a1b4b8e7894c68e12c27a57f/aiohttp-3.13.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:b99281b0704c103d4e11e72a76f1b543d4946fea7dd10767e7e1b5f00d4e5704", size = 1711835, upload-time = "2026-01-03T17:32:56.088Z" }, - { url = "https://files.pythonhosted.org/packages/fb/71/9b9761ddf276fd6708d13720197cbac19b8d67ecfa9116777924056cfcaa/aiohttp-3.13.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:40c5e40ecc29ba010656c18052b877a1c28f84344825efa106705e835c28530f", size = 1649593, upload-time = "2026-01-03T17:32:58.181Z" }, - { url = "https://files.pythonhosted.org/packages/ae/72/5d817e9ea218acae12a5e3b9ad1178cf0c12fc3570c0b47eea2daf95f9ea/aiohttp-3.13.3-cp39-cp39-win32.whl", hash = "sha256:56339a36b9f1fc708260c76c87e593e2afb30d26de9ae1eb445b5e051b98a7a1", size = 434831, upload-time = "2026-01-03T17:33:00.577Z" }, - { url = "https://files.pythonhosted.org/packages/39/cb/22659d9bf3149b7a2927bc2769cc9c8f8f5a80eba098398e03c199a43a85/aiohttp-3.13.3-cp39-cp39-win_amd64.whl", hash = "sha256:c6b8568a3bb5819a0ad087f16d40e5a3fb6099f39ea1d5625a3edc1e923fc538", size = 457697, upload-time = "2026-01-03T17:33:03.167Z" }, -] - -[[package]] -name = "aiosignal" -version = "1.4.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "frozenlist" }, - { name = "typing-extensions", marker = "python_full_version < '3.13' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" }, -] - -[[package]] -name = "annotated-types" -version = "0.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, -] - -[[package]] -name = "anyio" -version = "4.12.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "exceptiongroup", marker = "python_full_version < '3.11' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "idna" }, - { name = "typing-extensions", marker = "python_full_version < '3.13' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/96/f0/5eb65b2bb0d09ac6776f2eb54adee6abe8228ea05b20a5ad0e4945de8aac/anyio-4.12.1.tar.gz", hash = "sha256:41cfcc3a4c85d3f05c932da7c26d0201ac36f72abd4435ba90d0464a3ffed703", size = 228685, upload-time = "2026-01-06T11:45:21.246Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl", hash = "sha256:d405828884fc140aa80a3c667b8beed277f1dfedec42ba031bd6ac3db606ab6c", size = 113592, upload-time = "2026-01-06T11:45:19.497Z" }, -] - -[[package]] -name = "async-timeout" -version = "5.0.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a5/ae/136395dfbfe00dfc94da3f3e136d0b13f394cba8f4841120e34226265780/async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3", size = 9274, upload-time = "2024-11-06T16:41:39.6Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/ba/e2081de779ca30d473f21f5b30e0e737c438205440784c7dfc81efc2b029/async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c", size = 6233, upload-time = "2024-11-06T16:41:37.9Z" }, -] - -[[package]] -name = "attrs" -version = "25.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6b/5c/685e6633917e101e5dcb62b9dd76946cbb57c26e133bae9e0cd36033c0a9/attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11", size = 934251, upload-time = "2025-10-06T13:54:44.725Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373", size = 67615, upload-time = "2025-10-06T13:54:43.17Z" }, -] - -[[package]] -name = "backports-asyncio-runner" -version = "1.2.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8e/ff/70dca7d7cb1cbc0edb2c6cc0c38b65cba36cccc491eca64cabd5fe7f8670/backports_asyncio_runner-1.2.0.tar.gz", hash = "sha256:a5aa7b2b7d8f8bfcaa2b57313f70792df84e32a2a746f585213373f900b42162", size = 69893, upload-time = "2025-07-02T02:27:15.685Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/59/76ab57e3fe74484f48a53f8e337171b4a2349e506eabe136d7e01d059086/backports_asyncio_runner-1.2.0-py3-none-any.whl", hash = "sha256:0da0a936a8aeb554eccb426dc55af3ba63bcdc69fa1a600b5bb305413a4477b5", size = 12313, upload-time = "2025-07-02T02:27:14.263Z" }, -] - -[[package]] -name = "certifi" -version = "2026.1.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e0/2d/a891ca51311197f6ad14a7ef42e2399f36cf2f9bd44752b3dc4eab60fdc5/certifi-2026.1.4.tar.gz", hash = "sha256:ac726dd470482006e014ad384921ed6438c457018f4b3d204aea4281258b2120", size = 154268, upload-time = "2026-01-04T02:42:41.825Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl", hash = "sha256:9943707519e4add1115f44c2bc244f782c0249876bf51b6599fee1ffbedd685c", size = 152900, upload-time = "2026-01-04T02:42:40.15Z" }, -] - -[[package]] -name = "colorama" -version = "0.4.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, -] - -[[package]] -name = "dirty-equals" -version = "0.11" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/30/1d/c5913ac9d6615515a00f4bdc71356d302437cb74ff2e9aaccd3c14493b78/dirty_equals-0.11.tar.gz", hash = "sha256:f4ac74ee88f2d11e2fa0f65eb30ee4f07105c5f86f4dc92b09eb1138775027c3", size = 128067, upload-time = "2025-11-17T01:51:24.451Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/bb/8d/dbff05239043271dbeace563a7686212a3dd517864a35623fe4d4a64ca19/dirty_equals-0.11-py3-none-any.whl", hash = "sha256:b1d7093273fc2f9be12f443a8ead954ef6daaf6746fd42ef3a5616433ee85286", size = 28051, upload-time = "2025-11-17T01:51:22.849Z" }, -] - -[[package]] -name = "distro" -version = "1.9.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fc/f8/98eea607f65de6527f8a2e8885fc8015d3e6f5775df186e443e0964a11c3/distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed", size = 60722, upload-time = "2023-12-24T09:54:32.31Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277, upload-time = "2023-12-24T09:54:30.421Z" }, -] - -[[package]] -name = "exceptiongroup" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.13' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, -] - -[[package]] -name = "execnet" -version = "2.1.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bf/89/780e11f9588d9e7128a3f87788354c7946a9cbb1401ad38a48c4db9a4f07/execnet-2.1.2.tar.gz", hash = "sha256:63d83bfdd9a23e35b9c6a3261412324f964c2ec8dcd8d3c6916ee9373e0befcd", size = 166622, upload-time = "2025-11-12T09:56:37.75Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl", hash = "sha256:67fba928dd5a544b783f6056f449e5e3931a5c378b128bc18501f7ea79e296ec", size = 40708, upload-time = "2025-11-12T09:56:36.333Z" }, -] - -[[package]] -name = "frozenlist" -version = "1.8.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875, upload-time = "2025-10-06T05:38:17.865Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/83/4a/557715d5047da48d54e659203b9335be7bfaafda2c3f627b7c47e0b3aaf3/frozenlist-1.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011", size = 86230, upload-time = "2025-10-06T05:35:23.699Z" }, - { url = "https://files.pythonhosted.org/packages/a2/fb/c85f9fed3ea8fe8740e5b46a59cc141c23b842eca617da8876cfce5f760e/frozenlist-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565", size = 49621, upload-time = "2025-10-06T05:35:25.341Z" }, - { url = "https://files.pythonhosted.org/packages/63/70/26ca3f06aace16f2352796b08704338d74b6d1a24ca38f2771afbb7ed915/frozenlist-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad", size = 49889, upload-time = "2025-10-06T05:35:26.797Z" }, - { url = "https://files.pythonhosted.org/packages/5d/ed/c7895fd2fde7f3ee70d248175f9b6cdf792fb741ab92dc59cd9ef3bd241b/frozenlist-1.8.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2", size = 219464, upload-time = "2025-10-06T05:35:28.254Z" }, - { url = "https://files.pythonhosted.org/packages/6b/83/4d587dccbfca74cb8b810472392ad62bfa100bf8108c7223eb4c4fa2f7b3/frozenlist-1.8.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186", size = 221649, upload-time = "2025-10-06T05:35:29.454Z" }, - { url = "https://files.pythonhosted.org/packages/6a/c6/fd3b9cd046ec5fff9dab66831083bc2077006a874a2d3d9247dea93ddf7e/frozenlist-1.8.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e", size = 219188, upload-time = "2025-10-06T05:35:30.951Z" }, - { url = "https://files.pythonhosted.org/packages/ce/80/6693f55eb2e085fc8afb28cf611448fb5b90e98e068fa1d1b8d8e66e5c7d/frozenlist-1.8.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450", size = 231748, upload-time = "2025-10-06T05:35:32.101Z" }, - { url = "https://files.pythonhosted.org/packages/97/d6/e9459f7c5183854abd989ba384fe0cc1a0fb795a83c033f0571ec5933ca4/frozenlist-1.8.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef", size = 236351, upload-time = "2025-10-06T05:35:33.834Z" }, - { url = "https://files.pythonhosted.org/packages/97/92/24e97474b65c0262e9ecd076e826bfd1d3074adcc165a256e42e7b8a7249/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4", size = 218767, upload-time = "2025-10-06T05:35:35.205Z" }, - { url = "https://files.pythonhosted.org/packages/ee/bf/dc394a097508f15abff383c5108cb8ad880d1f64a725ed3b90d5c2fbf0bb/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff", size = 235887, upload-time = "2025-10-06T05:35:36.354Z" }, - { url = "https://files.pythonhosted.org/packages/40/90/25b201b9c015dbc999a5baf475a257010471a1fa8c200c843fd4abbee725/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c", size = 228785, upload-time = "2025-10-06T05:35:37.949Z" }, - { url = "https://files.pythonhosted.org/packages/84/f4/b5bc148df03082f05d2dd30c089e269acdbe251ac9a9cf4e727b2dbb8a3d/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f", size = 230312, upload-time = "2025-10-06T05:35:39.178Z" }, - { url = "https://files.pythonhosted.org/packages/db/4b/87e95b5d15097c302430e647136b7d7ab2398a702390cf4c8601975709e7/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7", size = 217650, upload-time = "2025-10-06T05:35:40.377Z" }, - { url = "https://files.pythonhosted.org/packages/e5/70/78a0315d1fea97120591a83e0acd644da638c872f142fd72a6cebee825f3/frozenlist-1.8.0-cp310-cp310-win32.whl", hash = "sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a", size = 39659, upload-time = "2025-10-06T05:35:41.863Z" }, - { url = "https://files.pythonhosted.org/packages/66/aa/3f04523fb189a00e147e60c5b2205126118f216b0aa908035c45336e27e4/frozenlist-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6", size = 43837, upload-time = "2025-10-06T05:35:43.205Z" }, - { url = "https://files.pythonhosted.org/packages/39/75/1135feecdd7c336938bd55b4dc3b0dfc46d85b9be12ef2628574b28de776/frozenlist-1.8.0-cp310-cp310-win_arm64.whl", hash = "sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e", size = 39989, upload-time = "2025-10-06T05:35:44.596Z" }, - { url = "https://files.pythonhosted.org/packages/bc/03/077f869d540370db12165c0aa51640a873fb661d8b315d1d4d67b284d7ac/frozenlist-1.8.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84", size = 86912, upload-time = "2025-10-06T05:35:45.98Z" }, - { url = "https://files.pythonhosted.org/packages/df/b5/7610b6bd13e4ae77b96ba85abea1c8cb249683217ef09ac9e0ae93f25a91/frozenlist-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9", size = 50046, upload-time = "2025-10-06T05:35:47.009Z" }, - { url = "https://files.pythonhosted.org/packages/6e/ef/0e8f1fe32f8a53dd26bdd1f9347efe0778b0fddf62789ea683f4cc7d787d/frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93", size = 50119, upload-time = "2025-10-06T05:35:48.38Z" }, - { url = "https://files.pythonhosted.org/packages/11/b1/71a477adc7c36e5fb628245dfbdea2166feae310757dea848d02bd0689fd/frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f", size = 231067, upload-time = "2025-10-06T05:35:49.97Z" }, - { url = "https://files.pythonhosted.org/packages/45/7e/afe40eca3a2dc19b9904c0f5d7edfe82b5304cb831391edec0ac04af94c2/frozenlist-1.8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695", size = 233160, upload-time = "2025-10-06T05:35:51.729Z" }, - { url = "https://files.pythonhosted.org/packages/a6/aa/7416eac95603ce428679d273255ffc7c998d4132cfae200103f164b108aa/frozenlist-1.8.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52", size = 228544, upload-time = "2025-10-06T05:35:53.246Z" }, - { url = "https://files.pythonhosted.org/packages/8b/3d/2a2d1f683d55ac7e3875e4263d28410063e738384d3adc294f5ff3d7105e/frozenlist-1.8.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581", size = 243797, upload-time = "2025-10-06T05:35:54.497Z" }, - { url = "https://files.pythonhosted.org/packages/78/1e/2d5565b589e580c296d3bb54da08d206e797d941a83a6fdea42af23be79c/frozenlist-1.8.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567", size = 247923, upload-time = "2025-10-06T05:35:55.861Z" }, - { url = "https://files.pythonhosted.org/packages/aa/c3/65872fcf1d326a7f101ad4d86285c403c87be7d832b7470b77f6d2ed5ddc/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b", size = 230886, upload-time = "2025-10-06T05:35:57.399Z" }, - { url = "https://files.pythonhosted.org/packages/a0/76/ac9ced601d62f6956f03cc794f9e04c81719509f85255abf96e2510f4265/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92", size = 245731, upload-time = "2025-10-06T05:35:58.563Z" }, - { url = "https://files.pythonhosted.org/packages/b9/49/ecccb5f2598daf0b4a1415497eba4c33c1e8ce07495eb07d2860c731b8d5/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d", size = 241544, upload-time = "2025-10-06T05:35:59.719Z" }, - { url = "https://files.pythonhosted.org/packages/53/4b/ddf24113323c0bbcc54cb38c8b8916f1da7165e07b8e24a717b4a12cbf10/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd", size = 241806, upload-time = "2025-10-06T05:36:00.959Z" }, - { url = "https://files.pythonhosted.org/packages/a7/fb/9b9a084d73c67175484ba2789a59f8eebebd0827d186a8102005ce41e1ba/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967", size = 229382, upload-time = "2025-10-06T05:36:02.22Z" }, - { url = "https://files.pythonhosted.org/packages/95/a3/c8fb25aac55bf5e12dae5c5aa6a98f85d436c1dc658f21c3ac73f9fa95e5/frozenlist-1.8.0-cp311-cp311-win32.whl", hash = "sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25", size = 39647, upload-time = "2025-10-06T05:36:03.409Z" }, - { url = "https://files.pythonhosted.org/packages/0a/f5/603d0d6a02cfd4c8f2a095a54672b3cf967ad688a60fb9faf04fc4887f65/frozenlist-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b", size = 44064, upload-time = "2025-10-06T05:36:04.368Z" }, - { url = "https://files.pythonhosted.org/packages/5d/16/c2c9ab44e181f043a86f9a8f84d5124b62dbcb3a02c0977ec72b9ac1d3e0/frozenlist-1.8.0-cp311-cp311-win_arm64.whl", hash = "sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a", size = 39937, upload-time = "2025-10-06T05:36:05.669Z" }, - { url = "https://files.pythonhosted.org/packages/69/29/948b9aa87e75820a38650af445d2ef2b6b8a6fab1a23b6bb9e4ef0be2d59/frozenlist-1.8.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1", size = 87782, upload-time = "2025-10-06T05:36:06.649Z" }, - { url = "https://files.pythonhosted.org/packages/64/80/4f6e318ee2a7c0750ed724fa33a4bdf1eacdc5a39a7a24e818a773cd91af/frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b", size = 50594, upload-time = "2025-10-06T05:36:07.69Z" }, - { url = "https://files.pythonhosted.org/packages/2b/94/5c8a2b50a496b11dd519f4a24cb5496cf125681dd99e94c604ccdea9419a/frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4", size = 50448, upload-time = "2025-10-06T05:36:08.78Z" }, - { url = "https://files.pythonhosted.org/packages/6a/bd/d91c5e39f490a49df14320f4e8c80161cfcce09f1e2cde1edd16a551abb3/frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383", size = 242411, upload-time = "2025-10-06T05:36:09.801Z" }, - { url = "https://files.pythonhosted.org/packages/8f/83/f61505a05109ef3293dfb1ff594d13d64a2324ac3482be2cedc2be818256/frozenlist-1.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4", size = 243014, upload-time = "2025-10-06T05:36:11.394Z" }, - { url = "https://files.pythonhosted.org/packages/d8/cb/cb6c7b0f7d4023ddda30cf56b8b17494eb3a79e3fda666bf735f63118b35/frozenlist-1.8.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8", size = 234909, upload-time = "2025-10-06T05:36:12.598Z" }, - { url = "https://files.pythonhosted.org/packages/31/c5/cd7a1f3b8b34af009fb17d4123c5a778b44ae2804e3ad6b86204255f9ec5/frozenlist-1.8.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b", size = 250049, upload-time = "2025-10-06T05:36:14.065Z" }, - { url = "https://files.pythonhosted.org/packages/c0/01/2f95d3b416c584a1e7f0e1d6d31998c4a795f7544069ee2e0962a4b60740/frozenlist-1.8.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52", size = 256485, upload-time = "2025-10-06T05:36:15.39Z" }, - { url = "https://files.pythonhosted.org/packages/ce/03/024bf7720b3abaebcff6d0793d73c154237b85bdf67b7ed55e5e9596dc9a/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29", size = 237619, upload-time = "2025-10-06T05:36:16.558Z" }, - { url = "https://files.pythonhosted.org/packages/69/fa/f8abdfe7d76b731f5d8bd217827cf6764d4f1d9763407e42717b4bed50a0/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3", size = 250320, upload-time = "2025-10-06T05:36:17.821Z" }, - { url = "https://files.pythonhosted.org/packages/f5/3c/b051329f718b463b22613e269ad72138cc256c540f78a6de89452803a47d/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143", size = 246820, upload-time = "2025-10-06T05:36:19.046Z" }, - { url = "https://files.pythonhosted.org/packages/0f/ae/58282e8f98e444b3f4dd42448ff36fa38bef29e40d40f330b22e7108f565/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608", size = 250518, upload-time = "2025-10-06T05:36:20.763Z" }, - { url = "https://files.pythonhosted.org/packages/8f/96/007e5944694d66123183845a106547a15944fbbb7154788cbf7272789536/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa", size = 239096, upload-time = "2025-10-06T05:36:22.129Z" }, - { url = "https://files.pythonhosted.org/packages/66/bb/852b9d6db2fa40be96f29c0d1205c306288f0684df8fd26ca1951d461a56/frozenlist-1.8.0-cp312-cp312-win32.whl", hash = "sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf", size = 39985, upload-time = "2025-10-06T05:36:23.661Z" }, - { url = "https://files.pythonhosted.org/packages/b8/af/38e51a553dd66eb064cdf193841f16f077585d4d28394c2fa6235cb41765/frozenlist-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746", size = 44591, upload-time = "2025-10-06T05:36:24.958Z" }, - { url = "https://files.pythonhosted.org/packages/a7/06/1dc65480ab147339fecc70797e9c2f69d9cea9cf38934ce08df070fdb9cb/frozenlist-1.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd", size = 40102, upload-time = "2025-10-06T05:36:26.333Z" }, - { url = "https://files.pythonhosted.org/packages/2d/40/0832c31a37d60f60ed79e9dfb5a92e1e2af4f40a16a29abcc7992af9edff/frozenlist-1.8.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a", size = 85717, upload-time = "2025-10-06T05:36:27.341Z" }, - { url = "https://files.pythonhosted.org/packages/30/ba/b0b3de23f40bc55a7057bd38434e25c34fa48e17f20ee273bbde5e0650f3/frozenlist-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7", size = 49651, upload-time = "2025-10-06T05:36:28.855Z" }, - { url = "https://files.pythonhosted.org/packages/0c/ab/6e5080ee374f875296c4243c381bbdef97a9ac39c6e3ce1d5f7d42cb78d6/frozenlist-1.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40", size = 49417, upload-time = "2025-10-06T05:36:29.877Z" }, - { url = "https://files.pythonhosted.org/packages/d5/4e/e4691508f9477ce67da2015d8c00acd751e6287739123113a9fca6f1604e/frozenlist-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027", size = 234391, upload-time = "2025-10-06T05:36:31.301Z" }, - { url = "https://files.pythonhosted.org/packages/40/76/c202df58e3acdf12969a7895fd6f3bc016c642e6726aa63bd3025e0fc71c/frozenlist-1.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822", size = 233048, upload-time = "2025-10-06T05:36:32.531Z" }, - { url = "https://files.pythonhosted.org/packages/f9/c0/8746afb90f17b73ca5979c7a3958116e105ff796e718575175319b5bb4ce/frozenlist-1.8.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121", size = 226549, upload-time = "2025-10-06T05:36:33.706Z" }, - { url = "https://files.pythonhosted.org/packages/7e/eb/4c7eefc718ff72f9b6c4893291abaae5fbc0c82226a32dcd8ef4f7a5dbef/frozenlist-1.8.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5", size = 239833, upload-time = "2025-10-06T05:36:34.947Z" }, - { url = "https://files.pythonhosted.org/packages/c2/4e/e5c02187cf704224f8b21bee886f3d713ca379535f16893233b9d672ea71/frozenlist-1.8.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e", size = 245363, upload-time = "2025-10-06T05:36:36.534Z" }, - { url = "https://files.pythonhosted.org/packages/1f/96/cb85ec608464472e82ad37a17f844889c36100eed57bea094518bf270692/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11", size = 229314, upload-time = "2025-10-06T05:36:38.582Z" }, - { url = "https://files.pythonhosted.org/packages/5d/6f/4ae69c550e4cee66b57887daeebe006fe985917c01d0fff9caab9883f6d0/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1", size = 243365, upload-time = "2025-10-06T05:36:40.152Z" }, - { url = "https://files.pythonhosted.org/packages/7a/58/afd56de246cf11780a40a2c28dc7cbabbf06337cc8ddb1c780a2d97e88d8/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1", size = 237763, upload-time = "2025-10-06T05:36:41.355Z" }, - { url = "https://files.pythonhosted.org/packages/cb/36/cdfaf6ed42e2644740d4a10452d8e97fa1c062e2a8006e4b09f1b5fd7d63/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8", size = 240110, upload-time = "2025-10-06T05:36:42.716Z" }, - { url = "https://files.pythonhosted.org/packages/03/a8/9ea226fbefad669f11b52e864c55f0bd57d3c8d7eb07e9f2e9a0b39502e1/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed", size = 233717, upload-time = "2025-10-06T05:36:44.251Z" }, - { url = "https://files.pythonhosted.org/packages/1e/0b/1b5531611e83ba7d13ccc9988967ea1b51186af64c42b7a7af465dcc9568/frozenlist-1.8.0-cp313-cp313-win32.whl", hash = "sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496", size = 39628, upload-time = "2025-10-06T05:36:45.423Z" }, - { url = "https://files.pythonhosted.org/packages/d8/cf/174c91dbc9cc49bc7b7aab74d8b734e974d1faa8f191c74af9b7e80848e6/frozenlist-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231", size = 43882, upload-time = "2025-10-06T05:36:46.796Z" }, - { url = "https://files.pythonhosted.org/packages/c1/17/502cd212cbfa96eb1388614fe39a3fc9ab87dbbe042b66f97acb57474834/frozenlist-1.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62", size = 39676, upload-time = "2025-10-06T05:36:47.8Z" }, - { url = "https://files.pythonhosted.org/packages/d2/5c/3bbfaa920dfab09e76946a5d2833a7cbdf7b9b4a91c714666ac4855b88b4/frozenlist-1.8.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94", size = 89235, upload-time = "2025-10-06T05:36:48.78Z" }, - { url = "https://files.pythonhosted.org/packages/d2/d6/f03961ef72166cec1687e84e8925838442b615bd0b8854b54923ce5b7b8a/frozenlist-1.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c", size = 50742, upload-time = "2025-10-06T05:36:49.837Z" }, - { url = "https://files.pythonhosted.org/packages/1e/bb/a6d12b7ba4c3337667d0e421f7181c82dda448ce4e7ad7ecd249a16fa806/frozenlist-1.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52", size = 51725, upload-time = "2025-10-06T05:36:50.851Z" }, - { url = "https://files.pythonhosted.org/packages/bc/71/d1fed0ffe2c2ccd70b43714c6cab0f4188f09f8a67a7914a6b46ee30f274/frozenlist-1.8.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51", size = 284533, upload-time = "2025-10-06T05:36:51.898Z" }, - { url = "https://files.pythonhosted.org/packages/c9/1f/fb1685a7b009d89f9bf78a42d94461bc06581f6e718c39344754a5d9bada/frozenlist-1.8.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65", size = 292506, upload-time = "2025-10-06T05:36:53.101Z" }, - { url = "https://files.pythonhosted.org/packages/e6/3b/b991fe1612703f7e0d05c0cf734c1b77aaf7c7d321df4572e8d36e7048c8/frozenlist-1.8.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82", size = 274161, upload-time = "2025-10-06T05:36:54.309Z" }, - { url = "https://files.pythonhosted.org/packages/ca/ec/c5c618767bcdf66e88945ec0157d7f6c4a1322f1473392319b7a2501ded7/frozenlist-1.8.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714", size = 294676, upload-time = "2025-10-06T05:36:55.566Z" }, - { url = "https://files.pythonhosted.org/packages/7c/ce/3934758637d8f8a88d11f0585d6495ef54b2044ed6ec84492a91fa3b27aa/frozenlist-1.8.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d", size = 300638, upload-time = "2025-10-06T05:36:56.758Z" }, - { url = "https://files.pythonhosted.org/packages/fc/4f/a7e4d0d467298f42de4b41cbc7ddaf19d3cfeabaf9ff97c20c6c7ee409f9/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506", size = 283067, upload-time = "2025-10-06T05:36:57.965Z" }, - { url = "https://files.pythonhosted.org/packages/dc/48/c7b163063d55a83772b268e6d1affb960771b0e203b632cfe09522d67ea5/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51", size = 292101, upload-time = "2025-10-06T05:36:59.237Z" }, - { url = "https://files.pythonhosted.org/packages/9f/d0/2366d3c4ecdc2fd391e0afa6e11500bfba0ea772764d631bbf82f0136c9d/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e", size = 289901, upload-time = "2025-10-06T05:37:00.811Z" }, - { url = "https://files.pythonhosted.org/packages/b8/94/daff920e82c1b70e3618a2ac39fbc01ae3e2ff6124e80739ce5d71c9b920/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0", size = 289395, upload-time = "2025-10-06T05:37:02.115Z" }, - { url = "https://files.pythonhosted.org/packages/e3/20/bba307ab4235a09fdcd3cc5508dbabd17c4634a1af4b96e0f69bfe551ebd/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41", size = 283659, upload-time = "2025-10-06T05:37:03.711Z" }, - { url = "https://files.pythonhosted.org/packages/fd/00/04ca1c3a7a124b6de4f8a9a17cc2fcad138b4608e7a3fc5877804b8715d7/frozenlist-1.8.0-cp313-cp313t-win32.whl", hash = "sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b", size = 43492, upload-time = "2025-10-06T05:37:04.915Z" }, - { url = "https://files.pythonhosted.org/packages/59/5e/c69f733a86a94ab10f68e496dc6b7e8bc078ebb415281d5698313e3af3a1/frozenlist-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888", size = 48034, upload-time = "2025-10-06T05:37:06.343Z" }, - { url = "https://files.pythonhosted.org/packages/16/6c/be9d79775d8abe79b05fa6d23da99ad6e7763a1d080fbae7290b286093fd/frozenlist-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042", size = 41749, upload-time = "2025-10-06T05:37:07.431Z" }, - { url = "https://files.pythonhosted.org/packages/f1/c8/85da824b7e7b9b6e7f7705b2ecaf9591ba6f79c1177f324c2735e41d36a2/frozenlist-1.8.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0", size = 86127, upload-time = "2025-10-06T05:37:08.438Z" }, - { url = "https://files.pythonhosted.org/packages/8e/e8/a1185e236ec66c20afd72399522f142c3724c785789255202d27ae992818/frozenlist-1.8.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f", size = 49698, upload-time = "2025-10-06T05:37:09.48Z" }, - { url = "https://files.pythonhosted.org/packages/a1/93/72b1736d68f03fda5fdf0f2180fb6caaae3894f1b854d006ac61ecc727ee/frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c", size = 49749, upload-time = "2025-10-06T05:37:10.569Z" }, - { url = "https://files.pythonhosted.org/packages/a7/b2/fabede9fafd976b991e9f1b9c8c873ed86f202889b864756f240ce6dd855/frozenlist-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2", size = 231298, upload-time = "2025-10-06T05:37:11.993Z" }, - { url = "https://files.pythonhosted.org/packages/3a/3b/d9b1e0b0eed36e70477ffb8360c49c85c8ca8ef9700a4e6711f39a6e8b45/frozenlist-1.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8", size = 232015, upload-time = "2025-10-06T05:37:13.194Z" }, - { url = "https://files.pythonhosted.org/packages/dc/94/be719d2766c1138148564a3960fc2c06eb688da592bdc25adcf856101be7/frozenlist-1.8.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686", size = 225038, upload-time = "2025-10-06T05:37:14.577Z" }, - { url = "https://files.pythonhosted.org/packages/e4/09/6712b6c5465f083f52f50cf74167b92d4ea2f50e46a9eea0523d658454ae/frozenlist-1.8.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e", size = 240130, upload-time = "2025-10-06T05:37:15.781Z" }, - { url = "https://files.pythonhosted.org/packages/f8/d4/cd065cdcf21550b54f3ce6a22e143ac9e4836ca42a0de1022da8498eac89/frozenlist-1.8.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a", size = 242845, upload-time = "2025-10-06T05:37:17.037Z" }, - { url = "https://files.pythonhosted.org/packages/62/c3/f57a5c8c70cd1ead3d5d5f776f89d33110b1addae0ab010ad774d9a44fb9/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128", size = 229131, upload-time = "2025-10-06T05:37:18.221Z" }, - { url = "https://files.pythonhosted.org/packages/6c/52/232476fe9cb64f0742f3fde2b7d26c1dac18b6d62071c74d4ded55e0ef94/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f", size = 240542, upload-time = "2025-10-06T05:37:19.771Z" }, - { url = "https://files.pythonhosted.org/packages/5f/85/07bf3f5d0fb5414aee5f47d33c6f5c77bfe49aac680bfece33d4fdf6a246/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7", size = 237308, upload-time = "2025-10-06T05:37:20.969Z" }, - { url = "https://files.pythonhosted.org/packages/11/99/ae3a33d5befd41ac0ca2cc7fd3aa707c9c324de2e89db0e0f45db9a64c26/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30", size = 238210, upload-time = "2025-10-06T05:37:22.252Z" }, - { url = "https://files.pythonhosted.org/packages/b2/60/b1d2da22f4970e7a155f0adde9b1435712ece01b3cd45ba63702aea33938/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7", size = 231972, upload-time = "2025-10-06T05:37:23.5Z" }, - { url = "https://files.pythonhosted.org/packages/3f/ab/945b2f32de889993b9c9133216c068b7fcf257d8595a0ac420ac8677cab0/frozenlist-1.8.0-cp314-cp314-win32.whl", hash = "sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806", size = 40536, upload-time = "2025-10-06T05:37:25.581Z" }, - { url = "https://files.pythonhosted.org/packages/59/ad/9caa9b9c836d9ad6f067157a531ac48b7d36499f5036d4141ce78c230b1b/frozenlist-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0", size = 44330, upload-time = "2025-10-06T05:37:26.928Z" }, - { url = "https://files.pythonhosted.org/packages/82/13/e6950121764f2676f43534c555249f57030150260aee9dcf7d64efda11dd/frozenlist-1.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b", size = 40627, upload-time = "2025-10-06T05:37:28.075Z" }, - { url = "https://files.pythonhosted.org/packages/c0/c7/43200656ecc4e02d3f8bc248df68256cd9572b3f0017f0a0c4e93440ae23/frozenlist-1.8.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d", size = 89238, upload-time = "2025-10-06T05:37:29.373Z" }, - { url = "https://files.pythonhosted.org/packages/d1/29/55c5f0689b9c0fb765055629f472c0de484dcaf0acee2f7707266ae3583c/frozenlist-1.8.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed", size = 50738, upload-time = "2025-10-06T05:37:30.792Z" }, - { url = "https://files.pythonhosted.org/packages/ba/7d/b7282a445956506fa11da8c2db7d276adcbf2b17d8bb8407a47685263f90/frozenlist-1.8.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930", size = 51739, upload-time = "2025-10-06T05:37:32.127Z" }, - { url = "https://files.pythonhosted.org/packages/62/1c/3d8622e60d0b767a5510d1d3cf21065b9db874696a51ea6d7a43180a259c/frozenlist-1.8.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c", size = 284186, upload-time = "2025-10-06T05:37:33.21Z" }, - { url = "https://files.pythonhosted.org/packages/2d/14/aa36d5f85a89679a85a1d44cd7a6657e0b1c75f61e7cad987b203d2daca8/frozenlist-1.8.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24", size = 292196, upload-time = "2025-10-06T05:37:36.107Z" }, - { url = "https://files.pythonhosted.org/packages/05/23/6bde59eb55abd407d34f77d39a5126fb7b4f109a3f611d3929f14b700c66/frozenlist-1.8.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37", size = 273830, upload-time = "2025-10-06T05:37:37.663Z" }, - { url = "https://files.pythonhosted.org/packages/d2/3f/22cff331bfad7a8afa616289000ba793347fcd7bc275f3b28ecea2a27909/frozenlist-1.8.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a", size = 294289, upload-time = "2025-10-06T05:37:39.261Z" }, - { url = "https://files.pythonhosted.org/packages/a4/89/5b057c799de4838b6c69aa82b79705f2027615e01be996d2486a69ca99c4/frozenlist-1.8.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2", size = 300318, upload-time = "2025-10-06T05:37:43.213Z" }, - { url = "https://files.pythonhosted.org/packages/30/de/2c22ab3eb2a8af6d69dc799e48455813bab3690c760de58e1bf43b36da3e/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef", size = 282814, upload-time = "2025-10-06T05:37:45.337Z" }, - { url = "https://files.pythonhosted.org/packages/59/f7/970141a6a8dbd7f556d94977858cfb36fa9b66e0892c6dd780d2219d8cd8/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe", size = 291762, upload-time = "2025-10-06T05:37:46.657Z" }, - { url = "https://files.pythonhosted.org/packages/c1/15/ca1adae83a719f82df9116d66f5bb28bb95557b3951903d39135620ef157/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8", size = 289470, upload-time = "2025-10-06T05:37:47.946Z" }, - { url = "https://files.pythonhosted.org/packages/ac/83/dca6dc53bf657d371fbc88ddeb21b79891e747189c5de990b9dfff2ccba1/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a", size = 289042, upload-time = "2025-10-06T05:37:49.499Z" }, - { url = "https://files.pythonhosted.org/packages/96/52/abddd34ca99be142f354398700536c5bd315880ed0a213812bc491cff5e4/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e", size = 283148, upload-time = "2025-10-06T05:37:50.745Z" }, - { url = "https://files.pythonhosted.org/packages/af/d3/76bd4ed4317e7119c2b7f57c3f6934aba26d277acc6309f873341640e21f/frozenlist-1.8.0-cp314-cp314t-win32.whl", hash = "sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df", size = 44676, upload-time = "2025-10-06T05:37:52.222Z" }, - { url = "https://files.pythonhosted.org/packages/89/76/c615883b7b521ead2944bb3480398cbb07e12b7b4e4d073d3752eb721558/frozenlist-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd", size = 49451, upload-time = "2025-10-06T05:37:53.425Z" }, - { url = "https://files.pythonhosted.org/packages/e0/a3/5982da14e113d07b325230f95060e2169f5311b1017ea8af2a29b374c289/frozenlist-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79", size = 42507, upload-time = "2025-10-06T05:37:54.513Z" }, - { url = "https://files.pythonhosted.org/packages/c2/59/ae5cdac87a00962122ea37bb346d41b66aec05f9ce328fa2b9e216f8967b/frozenlist-1.8.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d8b7138e5cd0647e4523d6685b0eac5d4be9a184ae9634492f25c6eb38c12a47", size = 86967, upload-time = "2025-10-06T05:37:55.607Z" }, - { url = "https://files.pythonhosted.org/packages/8a/10/17059b2db5a032fd9323c41c39e9d1f5f9d0c8f04d1e4e3e788573086e61/frozenlist-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a6483e309ca809f1efd154b4d37dc6d9f61037d6c6a81c2dc7a15cb22c8c5dca", size = 49984, upload-time = "2025-10-06T05:37:57.049Z" }, - { url = "https://files.pythonhosted.org/packages/4b/de/ad9d82ca8e5fa8f0c636e64606553c79e2b859ad253030b62a21fe9986f5/frozenlist-1.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1b9290cf81e95e93fdf90548ce9d3c1211cf574b8e3f4b3b7cb0537cf2227068", size = 50240, upload-time = "2025-10-06T05:37:58.145Z" }, - { url = "https://files.pythonhosted.org/packages/4e/45/3dfb7767c2a67d123650122b62ce13c731b6c745bc14424eea67678b508c/frozenlist-1.8.0-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:59a6a5876ca59d1b63af8cd5e7ffffb024c3dc1e9cf9301b21a2e76286505c95", size = 219472, upload-time = "2025-10-06T05:37:59.239Z" }, - { url = "https://files.pythonhosted.org/packages/0b/bf/5bf23d913a741b960d5c1dac7c1985d8a2a1d015772b2d18ea168b08e7ff/frozenlist-1.8.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6dc4126390929823e2d2d9dc79ab4046ed74680360fc5f38b585c12c66cdf459", size = 221531, upload-time = "2025-10-06T05:38:00.521Z" }, - { url = "https://files.pythonhosted.org/packages/d0/03/27ec393f3b55860859f4b74cdc8c2a4af3dbf3533305e8eacf48a4fd9a54/frozenlist-1.8.0-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:332db6b2563333c5671fecacd085141b5800cb866be16d5e3eb15a2086476675", size = 219211, upload-time = "2025-10-06T05:38:01.842Z" }, - { url = "https://files.pythonhosted.org/packages/3a/ad/0fd00c404fa73fe9b169429e9a972d5ed807973c40ab6b3cf9365a33d360/frozenlist-1.8.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9ff15928d62a0b80bb875655c39bf517938c7d589554cbd2669be42d97c2cb61", size = 231775, upload-time = "2025-10-06T05:38:03.384Z" }, - { url = "https://files.pythonhosted.org/packages/8a/c3/86962566154cb4d2995358bc8331bfc4ea19d07db1a96f64935a1607f2b6/frozenlist-1.8.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7bf6cdf8e07c8151fba6fe85735441240ec7f619f935a5205953d58009aef8c6", size = 236631, upload-time = "2025-10-06T05:38:04.609Z" }, - { url = "https://files.pythonhosted.org/packages/ea/9e/6ffad161dbd83782d2c66dc4d378a9103b31770cb1e67febf43aea42d202/frozenlist-1.8.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:48e6d3f4ec5c7273dfe83ff27c91083c6c9065af655dc2684d2c200c94308bb5", size = 218632, upload-time = "2025-10-06T05:38:05.917Z" }, - { url = "https://files.pythonhosted.org/packages/58/b2/4677eee46e0a97f9b30735e6ad0bf6aba3e497986066eb68807ac85cf60f/frozenlist-1.8.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:1a7607e17ad33361677adcd1443edf6f5da0ce5e5377b798fba20fae194825f3", size = 235967, upload-time = "2025-10-06T05:38:07.614Z" }, - { url = "https://files.pythonhosted.org/packages/05/f3/86e75f8639c5a93745ca7addbbc9de6af56aebb930d233512b17e46f6493/frozenlist-1.8.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:5a3a935c3a4e89c733303a2d5a7c257ea44af3a56c8202df486b7f5de40f37e1", size = 228799, upload-time = "2025-10-06T05:38:08.845Z" }, - { url = "https://files.pythonhosted.org/packages/30/00/39aad3a7f0d98f5eb1d99a3c311215674ed87061aecee7851974b335c050/frozenlist-1.8.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:940d4a017dbfed9daf46a3b086e1d2167e7012ee297fef9e1c545c4d022f5178", size = 230566, upload-time = "2025-10-06T05:38:10.52Z" }, - { url = "https://files.pythonhosted.org/packages/0d/4d/aa144cac44568d137846ddc4d5210fb5d9719eb1d7ec6fa2728a54b5b94a/frozenlist-1.8.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b9be22a69a014bc47e78072d0ecae716f5eb56c15238acca0f43d6eb8e4a5bda", size = 217715, upload-time = "2025-10-06T05:38:11.832Z" }, - { url = "https://files.pythonhosted.org/packages/64/4c/8f665921667509d25a0dd72540513bc86b356c95541686f6442a3283019f/frozenlist-1.8.0-cp39-cp39-win32.whl", hash = "sha256:1aa77cb5697069af47472e39612976ed05343ff2e84a3dcf15437b232cbfd087", size = 39933, upload-time = "2025-10-06T05:38:13.061Z" }, - { url = "https://files.pythonhosted.org/packages/79/bd/bcc926f87027fad5e59926ff12d136e1082a115025d33c032d1cd69ab377/frozenlist-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:7398c222d1d405e796970320036b1b563892b65809d9e5261487bb2c7f7b5c6a", size = 44121, upload-time = "2025-10-06T05:38:14.572Z" }, - { url = "https://files.pythonhosted.org/packages/4c/07/9c2e4eb7584af4b705237b971b89a4155a8e57599c4483a131a39256a9a0/frozenlist-1.8.0-cp39-cp39-win_arm64.whl", hash = "sha256:b4f3b365f31c6cd4af24545ca0a244a53688cad8834e32f56831c4923b50a103", size = 40312, upload-time = "2025-10-06T05:38:15.699Z" }, - { url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" }, -] - -[[package]] -name = "h11" -version = "0.16.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, -] - -[[package]] -name = "httpcore" -version = "1.0.9" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "h11" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, -] - -[[package]] -name = "httpx" -version = "0.28.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio" }, - { name = "certifi" }, - { name = "httpcore" }, - { name = "idna" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, -] - -[[package]] -name = "httpx-aiohttp" -version = "0.1.12" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "aiohttp" }, - { name = "httpx" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/63/2c/b894861cecf030fb45675ea24aa55b5722e97c602a163d872fca66c5a6d8/httpx_aiohttp-0.1.12.tar.gz", hash = "sha256:81feec51fd82c0ecfa0e9aaf1b1a6c2591260d5e2bcbeb7eb0277a78e610df2c", size = 275945, upload-time = "2025-12-12T10:12:15.283Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/16/8d/85c9701e9af72ca132a1783e2a54364a90c6da832304416a30fc11196ab2/httpx_aiohttp-0.1.12-py3-none-any.whl", hash = "sha256:5b0eac39a7f360fa7867a60bcb46bb1024eada9c01cbfecdb54dc1edb3fb7141", size = 6367, upload-time = "2025-12-12T10:12:14.018Z" }, -] - -[[package]] -name = "idna" -version = "3.11" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" }, -] - -[[package]] -name = "importlib-metadata" -version = "8.7.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "zipp" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f3/49/3b30cad09e7771a4982d9975a8cbf64f00d4a1ececb53297f1d9a7be1b10/importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb", size = 57107, upload-time = "2025-12-21T10:00:19.278Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl", hash = "sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151", size = 27865, upload-time = "2025-12-21T10:00:18.329Z" }, -] - -[[package]] -name = "iniconfig" -version = "2.1.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload-time = "2025-03-19T20:09:59.721Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" }, -] - -[[package]] -name = "iniconfig" -version = "2.3.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version == '3.11.*' and sys_platform == 'emscripten'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.10.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, -] - -[[package]] -name = "markdown-it-py" -version = "3.0.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "mdurl", marker = "python_full_version < '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload-time = "2023-06-03T06:41:14.443Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload-time = "2023-06-03T06:41:11.019Z" }, -] - -[[package]] -name = "markdown-it-py" -version = "4.0.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version == '3.11.*' and sys_platform == 'emscripten'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.10.*'", -] -dependencies = [ - { name = "mdurl", marker = "python_full_version >= '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070, upload-time = "2025-08-11T12:57:52.854Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147", size = 87321, upload-time = "2025-08-11T12:57:51.923Z" }, -] - -[[package]] -name = "mdurl" -version = "0.1.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, -] - -[[package]] -name = "multidict" -version = "6.7.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/80/1e/5492c365f222f907de1039b91f922b93fa4f764c713ee858d235495d8f50/multidict-6.7.0.tar.gz", hash = "sha256:c6e99d9a65ca282e578dfea819cfa9c0a62b2499d8677392e09feaf305e9e6f5", size = 101834, upload-time = "2025-10-06T14:52:30.657Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a9/63/7bdd4adc330abcca54c85728db2327130e49e52e8c3ce685cec44e0f2e9f/multidict-6.7.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9f474ad5acda359c8758c8accc22032c6abe6dc87a8be2440d097785e27a9349", size = 77153, upload-time = "2025-10-06T14:48:26.409Z" }, - { url = "https://files.pythonhosted.org/packages/3f/bb/b6c35ff175ed1a3142222b78455ee31be71a8396ed3ab5280fbe3ebe4e85/multidict-6.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4b7a9db5a870f780220e931d0002bbfd88fb53aceb6293251e2c839415c1b20e", size = 44993, upload-time = "2025-10-06T14:48:28.4Z" }, - { url = "https://files.pythonhosted.org/packages/e0/1f/064c77877c5fa6df6d346e68075c0f6998547afe952d6471b4c5f6a7345d/multidict-6.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:03ca744319864e92721195fa28c7a3b2bc7b686246b35e4078c1e4d0eb5466d3", size = 44607, upload-time = "2025-10-06T14:48:29.581Z" }, - { url = "https://files.pythonhosted.org/packages/04/7a/bf6aa92065dd47f287690000b3d7d332edfccb2277634cadf6a810463c6a/multidict-6.7.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f0e77e3c0008bc9316e662624535b88d360c3a5d3f81e15cf12c139a75250046", size = 241847, upload-time = "2025-10-06T14:48:32.107Z" }, - { url = "https://files.pythonhosted.org/packages/94/39/297a8de920f76eda343e4ce05f3b489f0ab3f9504f2576dfb37b7c08ca08/multidict-6.7.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:08325c9e5367aa379a3496aa9a022fe8837ff22e00b94db256d3a1378c76ab32", size = 242616, upload-time = "2025-10-06T14:48:34.054Z" }, - { url = "https://files.pythonhosted.org/packages/39/3a/d0eee2898cfd9d654aea6cb8c4addc2f9756e9a7e09391cfe55541f917f7/multidict-6.7.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e2862408c99f84aa571ab462d25236ef9cb12a602ea959ba9c9009a54902fc73", size = 222333, upload-time = "2025-10-06T14:48:35.9Z" }, - { url = "https://files.pythonhosted.org/packages/05/48/3b328851193c7a4240815b71eea165b49248867bbb6153a0aee227a0bb47/multidict-6.7.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4d72a9a2d885f5c208b0cb91ff2ed43636bb7e345ec839ff64708e04f69a13cc", size = 253239, upload-time = "2025-10-06T14:48:37.302Z" }, - { url = "https://files.pythonhosted.org/packages/b1/ca/0706a98c8d126a89245413225ca4a3fefc8435014de309cf8b30acb68841/multidict-6.7.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:478cc36476687bac1514d651cbbaa94b86b0732fb6855c60c673794c7dd2da62", size = 251618, upload-time = "2025-10-06T14:48:38.963Z" }, - { url = "https://files.pythonhosted.org/packages/5e/4f/9c7992f245554d8b173f6f0a048ad24b3e645d883f096857ec2c0822b8bd/multidict-6.7.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6843b28b0364dc605f21481c90fadb5f60d9123b442eb8a726bb74feef588a84", size = 241655, upload-time = "2025-10-06T14:48:40.312Z" }, - { url = "https://files.pythonhosted.org/packages/31/79/26a85991ae67efd1c0b1fc2e0c275b8a6aceeb155a68861f63f87a798f16/multidict-6.7.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:23bfeee5316266e5ee2d625df2d2c602b829435fc3a235c2ba2131495706e4a0", size = 239245, upload-time = "2025-10-06T14:48:41.848Z" }, - { url = "https://files.pythonhosted.org/packages/14/1e/75fa96394478930b79d0302eaf9a6c69f34005a1a5251ac8b9c336486ec9/multidict-6.7.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:680878b9f3d45c31e1f730eef731f9b0bc1da456155688c6745ee84eb818e90e", size = 233523, upload-time = "2025-10-06T14:48:43.749Z" }, - { url = "https://files.pythonhosted.org/packages/b2/5e/085544cb9f9c4ad2b5d97467c15f856df8d9bac410cffd5c43991a5d878b/multidict-6.7.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:eb866162ef2f45063acc7a53a88ef6fe8bf121d45c30ea3c9cd87ce7e191a8d4", size = 243129, upload-time = "2025-10-06T14:48:45.225Z" }, - { url = "https://files.pythonhosted.org/packages/b9/c3/e9d9e2f20c9474e7a8fcef28f863c5cbd29bb5adce6b70cebe8bdad0039d/multidict-6.7.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:df0e3bf7993bdbeca5ac25aa859cf40d39019e015c9c91809ba7093967f7a648", size = 248999, upload-time = "2025-10-06T14:48:46.703Z" }, - { url = "https://files.pythonhosted.org/packages/b5/3f/df171b6efa3239ae33b97b887e42671cd1d94d460614bfb2c30ffdab3b95/multidict-6.7.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:661709cdcd919a2ece2234f9bae7174e5220c80b034585d7d8a755632d3e2111", size = 243711, upload-time = "2025-10-06T14:48:48.146Z" }, - { url = "https://files.pythonhosted.org/packages/3c/2f/9b5564888c4e14b9af64c54acf149263721a283aaf4aa0ae89b091d5d8c1/multidict-6.7.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:096f52730c3fb8ed419db2d44391932b63891b2c5ed14850a7e215c0ba9ade36", size = 237504, upload-time = "2025-10-06T14:48:49.447Z" }, - { url = "https://files.pythonhosted.org/packages/6c/3a/0bd6ca0f7d96d790542d591c8c3354c1e1b6bfd2024d4d92dc3d87485ec7/multidict-6.7.0-cp310-cp310-win32.whl", hash = "sha256:afa8a2978ec65d2336305550535c9c4ff50ee527914328c8677b3973ade52b85", size = 41422, upload-time = "2025-10-06T14:48:50.789Z" }, - { url = "https://files.pythonhosted.org/packages/00/35/f6a637ea2c75f0d3b7c7d41b1189189acff0d9deeb8b8f35536bb30f5e33/multidict-6.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:b15b3afff74f707b9275d5ba6a91ae8f6429c3ffb29bbfd216b0b375a56f13d7", size = 46050, upload-time = "2025-10-06T14:48:51.938Z" }, - { url = "https://files.pythonhosted.org/packages/e7/b8/f7bf8329b39893d02d9d95cf610c75885d12fc0f402b1c894e1c8e01c916/multidict-6.7.0-cp310-cp310-win_arm64.whl", hash = "sha256:4b73189894398d59131a66ff157837b1fafea9974be486d036bb3d32331fdbf0", size = 43153, upload-time = "2025-10-06T14:48:53.146Z" }, - { url = "https://files.pythonhosted.org/packages/34/9e/5c727587644d67b2ed479041e4b1c58e30afc011e3d45d25bbe35781217c/multidict-6.7.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4d409aa42a94c0b3fa617708ef5276dfe81012ba6753a0370fcc9d0195d0a1fc", size = 76604, upload-time = "2025-10-06T14:48:54.277Z" }, - { url = "https://files.pythonhosted.org/packages/17/e4/67b5c27bd17c085a5ea8f1ec05b8a3e5cba0ca734bfcad5560fb129e70ca/multidict-6.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:14c9e076eede3b54c636f8ce1c9c252b5f057c62131211f0ceeec273810c9721", size = 44715, upload-time = "2025-10-06T14:48:55.445Z" }, - { url = "https://files.pythonhosted.org/packages/4d/e1/866a5d77be6ea435711bef2a4291eed11032679b6b28b56b4776ab06ba3e/multidict-6.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4c09703000a9d0fa3c3404b27041e574cc7f4df4c6563873246d0e11812a94b6", size = 44332, upload-time = "2025-10-06T14:48:56.706Z" }, - { url = "https://files.pythonhosted.org/packages/31/61/0c2d50241ada71ff61a79518db85ada85fdabfcf395d5968dae1cbda04e5/multidict-6.7.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a265acbb7bb33a3a2d626afbe756371dce0279e7b17f4f4eda406459c2b5ff1c", size = 245212, upload-time = "2025-10-06T14:48:58.042Z" }, - { url = "https://files.pythonhosted.org/packages/ac/e0/919666a4e4b57fff1b57f279be1c9316e6cdc5de8a8b525d76f6598fefc7/multidict-6.7.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51cb455de290ae462593e5b1cb1118c5c22ea7f0d3620d9940bf695cea5a4bd7", size = 246671, upload-time = "2025-10-06T14:49:00.004Z" }, - { url = "https://files.pythonhosted.org/packages/a1/cc/d027d9c5a520f3321b65adea289b965e7bcbd2c34402663f482648c716ce/multidict-6.7.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:db99677b4457c7a5c5a949353e125ba72d62b35f74e26da141530fbb012218a7", size = 225491, upload-time = "2025-10-06T14:49:01.393Z" }, - { url = "https://files.pythonhosted.org/packages/75/c4/bbd633980ce6155a28ff04e6a6492dd3335858394d7bb752d8b108708558/multidict-6.7.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f470f68adc395e0183b92a2f4689264d1ea4b40504a24d9882c27375e6662bb9", size = 257322, upload-time = "2025-10-06T14:49:02.745Z" }, - { url = "https://files.pythonhosted.org/packages/4c/6d/d622322d344f1f053eae47e033b0b3f965af01212de21b10bcf91be991fb/multidict-6.7.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0db4956f82723cc1c270de9c6e799b4c341d327762ec78ef82bb962f79cc07d8", size = 254694, upload-time = "2025-10-06T14:49:04.15Z" }, - { url = "https://files.pythonhosted.org/packages/a8/9f/78f8761c2705d4c6d7516faed63c0ebdac569f6db1bef95e0d5218fdc146/multidict-6.7.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3e56d780c238f9e1ae66a22d2adf8d16f485381878250db8d496623cd38b22bd", size = 246715, upload-time = "2025-10-06T14:49:05.967Z" }, - { url = "https://files.pythonhosted.org/packages/78/59/950818e04f91b9c2b95aab3d923d9eabd01689d0dcd889563988e9ea0fd8/multidict-6.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9d14baca2ee12c1a64740d4531356ba50b82543017f3ad6de0deb943c5979abb", size = 243189, upload-time = "2025-10-06T14:49:07.37Z" }, - { url = "https://files.pythonhosted.org/packages/7a/3d/77c79e1934cad2ee74991840f8a0110966d9599b3af95964c0cd79bb905b/multidict-6.7.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:295a92a76188917c7f99cda95858c822f9e4aae5824246bba9b6b44004ddd0a6", size = 237845, upload-time = "2025-10-06T14:49:08.759Z" }, - { url = "https://files.pythonhosted.org/packages/63/1b/834ce32a0a97a3b70f86437f685f880136677ac00d8bce0027e9fd9c2db7/multidict-6.7.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:39f1719f57adbb767ef592a50ae5ebb794220d1188f9ca93de471336401c34d2", size = 246374, upload-time = "2025-10-06T14:49:10.574Z" }, - { url = "https://files.pythonhosted.org/packages/23/ef/43d1c3ba205b5dec93dc97f3fba179dfa47910fc73aaaea4f7ceb41cec2a/multidict-6.7.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:0a13fb8e748dfc94749f622de065dd5c1def7e0d2216dba72b1d8069a389c6ff", size = 253345, upload-time = "2025-10-06T14:49:12.331Z" }, - { url = "https://files.pythonhosted.org/packages/6b/03/eaf95bcc2d19ead522001f6a650ef32811aa9e3624ff0ad37c445c7a588c/multidict-6.7.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e3aa16de190d29a0ea1b48253c57d99a68492c8dd8948638073ab9e74dc9410b", size = 246940, upload-time = "2025-10-06T14:49:13.821Z" }, - { url = "https://files.pythonhosted.org/packages/e8/df/ec8a5fd66ea6cd6f525b1fcbb23511b033c3e9bc42b81384834ffa484a62/multidict-6.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a048ce45dcdaaf1defb76b2e684f997fb5abf74437b6cb7b22ddad934a964e34", size = 242229, upload-time = "2025-10-06T14:49:15.603Z" }, - { url = "https://files.pythonhosted.org/packages/8a/a2/59b405d59fd39ec86d1142630e9049243015a5f5291ba49cadf3c090c541/multidict-6.7.0-cp311-cp311-win32.whl", hash = "sha256:a90af66facec4cebe4181b9e62a68be65e45ac9b52b67de9eec118701856e7ff", size = 41308, upload-time = "2025-10-06T14:49:16.871Z" }, - { url = "https://files.pythonhosted.org/packages/32/0f/13228f26f8b882c34da36efa776c3b7348455ec383bab4a66390e42963ae/multidict-6.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:95b5ffa4349df2887518bb839409bcf22caa72d82beec453216802f475b23c81", size = 46037, upload-time = "2025-10-06T14:49:18.457Z" }, - { url = "https://files.pythonhosted.org/packages/84/1f/68588e31b000535a3207fd3c909ebeec4fb36b52c442107499c18a896a2a/multidict-6.7.0-cp311-cp311-win_arm64.whl", hash = "sha256:329aa225b085b6f004a4955271a7ba9f1087e39dcb7e65f6284a988264a63912", size = 43023, upload-time = "2025-10-06T14:49:19.648Z" }, - { url = "https://files.pythonhosted.org/packages/c2/9e/9f61ac18d9c8b475889f32ccfa91c9f59363480613fc807b6e3023d6f60b/multidict-6.7.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:8a3862568a36d26e650a19bb5cbbba14b71789032aebc0423f8cc5f150730184", size = 76877, upload-time = "2025-10-06T14:49:20.884Z" }, - { url = "https://files.pythonhosted.org/packages/38/6f/614f09a04e6184f8824268fce4bc925e9849edfa654ddd59f0b64508c595/multidict-6.7.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:960c60b5849b9b4f9dcc9bea6e3626143c252c74113df2c1540aebce70209b45", size = 45467, upload-time = "2025-10-06T14:49:22.054Z" }, - { url = "https://files.pythonhosted.org/packages/b3/93/c4f67a436dd026f2e780c433277fff72be79152894d9fc36f44569cab1a6/multidict-6.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2049be98fb57a31b4ccf870bf377af2504d4ae35646a19037ec271e4c07998aa", size = 43834, upload-time = "2025-10-06T14:49:23.566Z" }, - { url = "https://files.pythonhosted.org/packages/7f/f5/013798161ca665e4a422afbc5e2d9e4070142a9ff8905e482139cd09e4d0/multidict-6.7.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0934f3843a1860dd465d38895c17fce1f1cb37295149ab05cd1b9a03afacb2a7", size = 250545, upload-time = "2025-10-06T14:49:24.882Z" }, - { url = "https://files.pythonhosted.org/packages/71/2f/91dbac13e0ba94669ea5119ba267c9a832f0cb65419aca75549fcf09a3dc/multidict-6.7.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b3e34f3a1b8131ba06f1a73adab24f30934d148afcd5f5de9a73565a4404384e", size = 258305, upload-time = "2025-10-06T14:49:26.778Z" }, - { url = "https://files.pythonhosted.org/packages/ef/b0/754038b26f6e04488b48ac621f779c341338d78503fb45403755af2df477/multidict-6.7.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:efbb54e98446892590dc2458c19c10344ee9a883a79b5cec4bc34d6656e8d546", size = 242363, upload-time = "2025-10-06T14:49:28.562Z" }, - { url = "https://files.pythonhosted.org/packages/87/15/9da40b9336a7c9fa606c4cf2ed80a649dffeb42b905d4f63a1d7eb17d746/multidict-6.7.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a35c5fc61d4f51eb045061e7967cfe3123d622cd500e8868e7c0c592a09fedc4", size = 268375, upload-time = "2025-10-06T14:49:29.96Z" }, - { url = "https://files.pythonhosted.org/packages/82/72/c53fcade0cc94dfaad583105fd92b3a783af2091eddcb41a6d5a52474000/multidict-6.7.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29fe6740ebccba4175af1b9b87bf553e9c15cd5868ee967e010efcf94e4fd0f1", size = 269346, upload-time = "2025-10-06T14:49:31.404Z" }, - { url = "https://files.pythonhosted.org/packages/0d/e2/9baffdae21a76f77ef8447f1a05a96ec4bc0a24dae08767abc0a2fe680b8/multidict-6.7.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:123e2a72e20537add2f33a79e605f6191fba2afda4cbb876e35c1a7074298a7d", size = 256107, upload-time = "2025-10-06T14:49:32.974Z" }, - { url = "https://files.pythonhosted.org/packages/3c/06/3f06f611087dc60d65ef775f1fb5aca7c6d61c6db4990e7cda0cef9b1651/multidict-6.7.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b284e319754366c1aee2267a2036248b24eeb17ecd5dc16022095e747f2f4304", size = 253592, upload-time = "2025-10-06T14:49:34.52Z" }, - { url = "https://files.pythonhosted.org/packages/20/24/54e804ec7945b6023b340c412ce9c3f81e91b3bf5fa5ce65558740141bee/multidict-6.7.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:803d685de7be4303b5a657b76e2f6d1240e7e0a8aa2968ad5811fa2285553a12", size = 251024, upload-time = "2025-10-06T14:49:35.956Z" }, - { url = "https://files.pythonhosted.org/packages/14/48/011cba467ea0b17ceb938315d219391d3e421dfd35928e5dbdc3f4ae76ef/multidict-6.7.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c04a328260dfd5db8c39538f999f02779012268f54614902d0afc775d44e0a62", size = 251484, upload-time = "2025-10-06T14:49:37.631Z" }, - { url = "https://files.pythonhosted.org/packages/0d/2f/919258b43bb35b99fa127435cfb2d91798eb3a943396631ef43e3720dcf4/multidict-6.7.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8a19cdb57cd3df4cd865849d93ee14920fb97224300c88501f16ecfa2604b4e0", size = 263579, upload-time = "2025-10-06T14:49:39.502Z" }, - { url = "https://files.pythonhosted.org/packages/31/22/a0e884d86b5242b5a74cf08e876bdf299e413016b66e55511f7a804a366e/multidict-6.7.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9b2fd74c52accced7e75de26023b7dccee62511a600e62311b918ec5c168fc2a", size = 259654, upload-time = "2025-10-06T14:49:41.32Z" }, - { url = "https://files.pythonhosted.org/packages/b2/e5/17e10e1b5c5f5a40f2fcbb45953c9b215f8a4098003915e46a93f5fcaa8f/multidict-6.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3e8bfdd0e487acf992407a140d2589fe598238eaeffa3da8448d63a63cd363f8", size = 251511, upload-time = "2025-10-06T14:49:46.021Z" }, - { url = "https://files.pythonhosted.org/packages/e3/9a/201bb1e17e7af53139597069c375e7b0dcbd47594604f65c2d5359508566/multidict-6.7.0-cp312-cp312-win32.whl", hash = "sha256:dd32a49400a2c3d52088e120ee00c1e3576cbff7e10b98467962c74fdb762ed4", size = 41895, upload-time = "2025-10-06T14:49:48.718Z" }, - { url = "https://files.pythonhosted.org/packages/46/e2/348cd32faad84eaf1d20cce80e2bb0ef8d312c55bca1f7fa9865e7770aaf/multidict-6.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:92abb658ef2d7ef22ac9f8bb88e8b6c3e571671534e029359b6d9e845923eb1b", size = 46073, upload-time = "2025-10-06T14:49:50.28Z" }, - { url = "https://files.pythonhosted.org/packages/25/ec/aad2613c1910dce907480e0c3aa306905830f25df2e54ccc9dea450cb5aa/multidict-6.7.0-cp312-cp312-win_arm64.whl", hash = "sha256:490dab541a6a642ce1a9d61a4781656b346a55c13038f0b1244653828e3a83ec", size = 43226, upload-time = "2025-10-06T14:49:52.304Z" }, - { url = "https://files.pythonhosted.org/packages/d2/86/33272a544eeb36d66e4d9a920602d1a2f57d4ebea4ef3cdfe5a912574c95/multidict-6.7.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:bee7c0588aa0076ce77c0ea5d19a68d76ad81fcd9fe8501003b9a24f9d4000f6", size = 76135, upload-time = "2025-10-06T14:49:54.26Z" }, - { url = "https://files.pythonhosted.org/packages/91/1c/eb97db117a1ebe46d457a3d235a7b9d2e6dcab174f42d1b67663dd9e5371/multidict-6.7.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7ef6b61cad77091056ce0e7ce69814ef72afacb150b7ac6a3e9470def2198159", size = 45117, upload-time = "2025-10-06T14:49:55.82Z" }, - { url = "https://files.pythonhosted.org/packages/f1/d8/6c3442322e41fb1dd4de8bd67bfd11cd72352ac131f6368315617de752f1/multidict-6.7.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9c0359b1ec12b1d6849c59f9d319610b7f20ef990a6d454ab151aa0e3b9f78ca", size = 43472, upload-time = "2025-10-06T14:49:57.048Z" }, - { url = "https://files.pythonhosted.org/packages/75/3f/e2639e80325af0b6c6febdf8e57cc07043ff15f57fa1ef808f4ccb5ac4cd/multidict-6.7.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cd240939f71c64bd658f186330603aac1a9a81bf6273f523fca63673cb7378a8", size = 249342, upload-time = "2025-10-06T14:49:58.368Z" }, - { url = "https://files.pythonhosted.org/packages/5d/cc/84e0585f805cbeaa9cbdaa95f9a3d6aed745b9d25700623ac89a6ecff400/multidict-6.7.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a60a4d75718a5efa473ebd5ab685786ba0c67b8381f781d1be14da49f1a2dc60", size = 257082, upload-time = "2025-10-06T14:49:59.89Z" }, - { url = "https://files.pythonhosted.org/packages/b0/9c/ac851c107c92289acbbf5cfb485694084690c1b17e555f44952c26ddc5bd/multidict-6.7.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:53a42d364f323275126aff81fb67c5ca1b7a04fda0546245730a55c8c5f24bc4", size = 240704, upload-time = "2025-10-06T14:50:01.485Z" }, - { url = "https://files.pythonhosted.org/packages/50/cc/5f93e99427248c09da95b62d64b25748a5f5c98c7c2ab09825a1d6af0e15/multidict-6.7.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3b29b980d0ddbecb736735ee5bef69bb2ddca56eff603c86f3f29a1128299b4f", size = 266355, upload-time = "2025-10-06T14:50:02.955Z" }, - { url = "https://files.pythonhosted.org/packages/ec/0c/2ec1d883ceb79c6f7f6d7ad90c919c898f5d1c6ea96d322751420211e072/multidict-6.7.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f8a93b1c0ed2d04b97a5e9336fd2d33371b9a6e29ab7dd6503d63407c20ffbaf", size = 267259, upload-time = "2025-10-06T14:50:04.446Z" }, - { url = "https://files.pythonhosted.org/packages/c6/2d/f0b184fa88d6630aa267680bdb8623fb69cb0d024b8c6f0d23f9a0f406d3/multidict-6.7.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9ff96e8815eecacc6645da76c413eb3b3d34cfca256c70b16b286a687d013c32", size = 254903, upload-time = "2025-10-06T14:50:05.98Z" }, - { url = "https://files.pythonhosted.org/packages/06/c9/11ea263ad0df7dfabcad404feb3c0dd40b131bc7f232d5537f2fb1356951/multidict-6.7.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7516c579652f6a6be0e266aec0acd0db80829ca305c3d771ed898538804c2036", size = 252365, upload-time = "2025-10-06T14:50:07.511Z" }, - { url = "https://files.pythonhosted.org/packages/41/88/d714b86ee2c17d6e09850c70c9d310abac3d808ab49dfa16b43aba9d53fd/multidict-6.7.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:040f393368e63fb0f3330e70c26bfd336656bed925e5cbe17c9da839a6ab13ec", size = 250062, upload-time = "2025-10-06T14:50:09.074Z" }, - { url = "https://files.pythonhosted.org/packages/15/fe/ad407bb9e818c2b31383f6131ca19ea7e35ce93cf1310fce69f12e89de75/multidict-6.7.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b3bc26a951007b1057a1c543af845f1c7e3e71cc240ed1ace7bf4484aa99196e", size = 249683, upload-time = "2025-10-06T14:50:10.714Z" }, - { url = "https://files.pythonhosted.org/packages/8c/a4/a89abdb0229e533fb925e7c6e5c40201c2873efebc9abaf14046a4536ee6/multidict-6.7.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7b022717c748dd1992a83e219587aabe45980d88969f01b316e78683e6285f64", size = 261254, upload-time = "2025-10-06T14:50:12.28Z" }, - { url = "https://files.pythonhosted.org/packages/8d/aa/0e2b27bd88b40a4fb8dc53dd74eecac70edaa4c1dd0707eb2164da3675b3/multidict-6.7.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:9600082733859f00d79dee64effc7aef1beb26adb297416a4ad2116fd61374bd", size = 257967, upload-time = "2025-10-06T14:50:14.16Z" }, - { url = "https://files.pythonhosted.org/packages/d0/8e/0c67b7120d5d5f6d874ed85a085f9dc770a7f9d8813e80f44a9fec820bb7/multidict-6.7.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:94218fcec4d72bc61df51c198d098ce2b378e0ccbac41ddbed5ef44092913288", size = 250085, upload-time = "2025-10-06T14:50:15.639Z" }, - { url = "https://files.pythonhosted.org/packages/ba/55/b73e1d624ea4b8fd4dd07a3bb70f6e4c7c6c5d9d640a41c6ffe5cdbd2a55/multidict-6.7.0-cp313-cp313-win32.whl", hash = "sha256:a37bd74c3fa9d00be2d7b8eca074dc56bd8077ddd2917a839bd989612671ed17", size = 41713, upload-time = "2025-10-06T14:50:17.066Z" }, - { url = "https://files.pythonhosted.org/packages/32/31/75c59e7d3b4205075b4c183fa4ca398a2daf2303ddf616b04ae6ef55cffe/multidict-6.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:30d193c6cc6d559db42b6bcec8a5d395d34d60c9877a0b71ecd7c204fcf15390", size = 45915, upload-time = "2025-10-06T14:50:18.264Z" }, - { url = "https://files.pythonhosted.org/packages/31/2a/8987831e811f1184c22bc2e45844934385363ee61c0a2dcfa8f71b87e608/multidict-6.7.0-cp313-cp313-win_arm64.whl", hash = "sha256:ea3334cabe4d41b7ccd01e4d349828678794edbc2d3ae97fc162a3312095092e", size = 43077, upload-time = "2025-10-06T14:50:19.853Z" }, - { url = "https://files.pythonhosted.org/packages/e8/68/7b3a5170a382a340147337b300b9eb25a9ddb573bcdfff19c0fa3f31ffba/multidict-6.7.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:ad9ce259f50abd98a1ca0aa6e490b58c316a0fce0617f609723e40804add2c00", size = 83114, upload-time = "2025-10-06T14:50:21.223Z" }, - { url = "https://files.pythonhosted.org/packages/55/5c/3fa2d07c84df4e302060f555bbf539310980362236ad49f50eeb0a1c1eb9/multidict-6.7.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07f5594ac6d084cbb5de2df218d78baf55ef150b91f0ff8a21cc7a2e3a5a58eb", size = 48442, upload-time = "2025-10-06T14:50:22.871Z" }, - { url = "https://files.pythonhosted.org/packages/fc/56/67212d33239797f9bd91962bb899d72bb0f4c35a8652dcdb8ed049bef878/multidict-6.7.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0591b48acf279821a579282444814a2d8d0af624ae0bc600aa4d1b920b6e924b", size = 46885, upload-time = "2025-10-06T14:50:24.258Z" }, - { url = "https://files.pythonhosted.org/packages/46/d1/908f896224290350721597a61a69cd19b89ad8ee0ae1f38b3f5cd12ea2ac/multidict-6.7.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:749a72584761531d2b9467cfbdfd29487ee21124c304c4b6cb760d8777b27f9c", size = 242588, upload-time = "2025-10-06T14:50:25.716Z" }, - { url = "https://files.pythonhosted.org/packages/ab/67/8604288bbd68680eee0ab568fdcb56171d8b23a01bcd5cb0c8fedf6e5d99/multidict-6.7.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b4c3d199f953acd5b446bf7c0de1fe25d94e09e79086f8dc2f48a11a129cdf1", size = 249966, upload-time = "2025-10-06T14:50:28.192Z" }, - { url = "https://files.pythonhosted.org/packages/20/33/9228d76339f1ba51e3efef7da3ebd91964d3006217aae13211653193c3ff/multidict-6.7.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:9fb0211dfc3b51efea2f349ec92c114d7754dd62c01f81c3e32b765b70c45c9b", size = 228618, upload-time = "2025-10-06T14:50:29.82Z" }, - { url = "https://files.pythonhosted.org/packages/f8/2d/25d9b566d10cab1c42b3b9e5b11ef79c9111eaf4463b8c257a3bd89e0ead/multidict-6.7.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a027ec240fe73a8d6281872690b988eed307cd7d91b23998ff35ff577ca688b5", size = 257539, upload-time = "2025-10-06T14:50:31.731Z" }, - { url = "https://files.pythonhosted.org/packages/b6/b1/8d1a965e6637fc33de3c0d8f414485c2b7e4af00f42cab3d84e7b955c222/multidict-6.7.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1d964afecdf3a8288789df2f5751dc0a8261138c3768d9af117ed384e538fad", size = 256345, upload-time = "2025-10-06T14:50:33.26Z" }, - { url = "https://files.pythonhosted.org/packages/ba/0c/06b5a8adbdeedada6f4fb8d8f193d44a347223b11939b42953eeb6530b6b/multidict-6.7.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:caf53b15b1b7df9fbd0709aa01409000a2b4dd03a5f6f5cc548183c7c8f8b63c", size = 247934, upload-time = "2025-10-06T14:50:34.808Z" }, - { url = "https://files.pythonhosted.org/packages/8f/31/b2491b5fe167ca044c6eb4b8f2c9f3b8a00b24c432c365358eadac5d7625/multidict-6.7.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:654030da3197d927f05a536a66186070e98765aa5142794c9904555d3a9d8fb5", size = 245243, upload-time = "2025-10-06T14:50:36.436Z" }, - { url = "https://files.pythonhosted.org/packages/61/1a/982913957cb90406c8c94f53001abd9eafc271cb3e70ff6371590bec478e/multidict-6.7.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:2090d3718829d1e484706a2f525e50c892237b2bf9b17a79b059cb98cddc2f10", size = 235878, upload-time = "2025-10-06T14:50:37.953Z" }, - { url = "https://files.pythonhosted.org/packages/be/c0/21435d804c1a1cf7a2608593f4d19bca5bcbd7a81a70b253fdd1c12af9c0/multidict-6.7.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2d2cfeec3f6f45651b3d408c4acec0ebf3daa9bc8a112a084206f5db5d05b754", size = 243452, upload-time = "2025-10-06T14:50:39.574Z" }, - { url = "https://files.pythonhosted.org/packages/54/0a/4349d540d4a883863191be6eb9a928846d4ec0ea007d3dcd36323bb058ac/multidict-6.7.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:4ef089f985b8c194d341eb2c24ae6e7408c9a0e2e5658699c92f497437d88c3c", size = 252312, upload-time = "2025-10-06T14:50:41.612Z" }, - { url = "https://files.pythonhosted.org/packages/26/64/d5416038dbda1488daf16b676e4dbfd9674dde10a0cc8f4fc2b502d8125d/multidict-6.7.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e93a0617cd16998784bf4414c7e40f17a35d2350e5c6f0bd900d3a8e02bd3762", size = 246935, upload-time = "2025-10-06T14:50:43.972Z" }, - { url = "https://files.pythonhosted.org/packages/9f/8c/8290c50d14e49f35e0bd4abc25e1bc7711149ca9588ab7d04f886cdf03d9/multidict-6.7.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f0feece2ef8ebc42ed9e2e8c78fc4aa3cf455733b507c09ef7406364c94376c6", size = 243385, upload-time = "2025-10-06T14:50:45.648Z" }, - { url = "https://files.pythonhosted.org/packages/ef/a0/f83ae75e42d694b3fbad3e047670e511c138be747bc713cf1b10d5096416/multidict-6.7.0-cp313-cp313t-win32.whl", hash = "sha256:19a1d55338ec1be74ef62440ca9e04a2f001a04d0cc49a4983dc320ff0f3212d", size = 47777, upload-time = "2025-10-06T14:50:47.154Z" }, - { url = "https://files.pythonhosted.org/packages/dc/80/9b174a92814a3830b7357307a792300f42c9e94664b01dee8e457551fa66/multidict-6.7.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3da4fb467498df97e986af166b12d01f05d2e04f978a9c1c680ea1988e0bc4b6", size = 53104, upload-time = "2025-10-06T14:50:48.851Z" }, - { url = "https://files.pythonhosted.org/packages/cc/28/04baeaf0428d95bb7a7bea0e691ba2f31394338ba424fb0679a9ed0f4c09/multidict-6.7.0-cp313-cp313t-win_arm64.whl", hash = "sha256:b4121773c49a0776461f4a904cdf6264c88e42218aaa8407e803ca8025872792", size = 45503, upload-time = "2025-10-06T14:50:50.16Z" }, - { url = "https://files.pythonhosted.org/packages/e2/b1/3da6934455dd4b261d4c72f897e3a5728eba81db59959f3a639245891baa/multidict-6.7.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3bab1e4aff7adaa34410f93b1f8e57c4b36b9af0426a76003f441ee1d3c7e842", size = 75128, upload-time = "2025-10-06T14:50:51.92Z" }, - { url = "https://files.pythonhosted.org/packages/14/2c/f069cab5b51d175a1a2cb4ccdf7a2c2dabd58aa5bd933fa036a8d15e2404/multidict-6.7.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b8512bac933afc3e45fb2b18da8e59b78d4f408399a960339598374d4ae3b56b", size = 44410, upload-time = "2025-10-06T14:50:53.275Z" }, - { url = "https://files.pythonhosted.org/packages/42/e2/64bb41266427af6642b6b128e8774ed84c11b80a90702c13ac0a86bb10cc/multidict-6.7.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:79dcf9e477bc65414ebfea98ffd013cb39552b5ecd62908752e0e413d6d06e38", size = 43205, upload-time = "2025-10-06T14:50:54.911Z" }, - { url = "https://files.pythonhosted.org/packages/02/68/6b086fef8a3f1a8541b9236c594f0c9245617c29841f2e0395d979485cde/multidict-6.7.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:31bae522710064b5cbeddaf2e9f32b1abab70ac6ac91d42572502299e9953128", size = 245084, upload-time = "2025-10-06T14:50:56.369Z" }, - { url = "https://files.pythonhosted.org/packages/15/ee/f524093232007cd7a75c1d132df70f235cfd590a7c9eaccd7ff422ef4ae8/multidict-6.7.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a0df7ff02397bb63e2fd22af2c87dfa39e8c7f12947bc524dbdc528282c7e34", size = 252667, upload-time = "2025-10-06T14:50:57.991Z" }, - { url = "https://files.pythonhosted.org/packages/02/a5/eeb3f43ab45878f1895118c3ef157a480db58ede3f248e29b5354139c2c9/multidict-6.7.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7a0222514e8e4c514660e182d5156a415c13ef0aabbd71682fc714e327b95e99", size = 233590, upload-time = "2025-10-06T14:50:59.589Z" }, - { url = "https://files.pythonhosted.org/packages/6a/1e/76d02f8270b97269d7e3dbd45644b1785bda457b474315f8cf999525a193/multidict-6.7.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2397ab4daaf2698eb51a76721e98db21ce4f52339e535725de03ea962b5a3202", size = 264112, upload-time = "2025-10-06T14:51:01.183Z" }, - { url = "https://files.pythonhosted.org/packages/76/0b/c28a70ecb58963847c2a8efe334904cd254812b10e535aefb3bcce513918/multidict-6.7.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8891681594162635948a636c9fe0ff21746aeb3dd5463f6e25d9bea3a8a39ca1", size = 261194, upload-time = "2025-10-06T14:51:02.794Z" }, - { url = "https://files.pythonhosted.org/packages/b4/63/2ab26e4209773223159b83aa32721b4021ffb08102f8ac7d689c943fded1/multidict-6.7.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18706cc31dbf402a7945916dd5cddf160251b6dab8a2c5f3d6d5a55949f676b3", size = 248510, upload-time = "2025-10-06T14:51:04.724Z" }, - { url = "https://files.pythonhosted.org/packages/93/cd/06c1fa8282af1d1c46fd55c10a7930af652afdce43999501d4d68664170c/multidict-6.7.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f844a1bbf1d207dd311a56f383f7eda2d0e134921d45751842d8235e7778965d", size = 248395, upload-time = "2025-10-06T14:51:06.306Z" }, - { url = "https://files.pythonhosted.org/packages/99/ac/82cb419dd6b04ccf9e7e61befc00c77614fc8134362488b553402ecd55ce/multidict-6.7.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:d4393e3581e84e5645506923816b9cc81f5609a778c7e7534054091acc64d1c6", size = 239520, upload-time = "2025-10-06T14:51:08.091Z" }, - { url = "https://files.pythonhosted.org/packages/fa/f3/a0f9bf09493421bd8716a362e0cd1d244f5a6550f5beffdd6b47e885b331/multidict-6.7.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:fbd18dc82d7bf274b37aa48d664534330af744e03bccf696d6f4c6042e7d19e7", size = 245479, upload-time = "2025-10-06T14:51:10.365Z" }, - { url = "https://files.pythonhosted.org/packages/8d/01/476d38fc73a212843f43c852b0eee266b6971f0e28329c2184a8df90c376/multidict-6.7.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:b6234e14f9314731ec45c42fc4554b88133ad53a09092cc48a88e771c125dadb", size = 258903, upload-time = "2025-10-06T14:51:12.466Z" }, - { url = "https://files.pythonhosted.org/packages/49/6d/23faeb0868adba613b817d0e69c5f15531b24d462af8012c4f6de4fa8dc3/multidict-6.7.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:08d4379f9744d8f78d98c8673c06e202ffa88296f009c71bbafe8a6bf847d01f", size = 252333, upload-time = "2025-10-06T14:51:14.48Z" }, - { url = "https://files.pythonhosted.org/packages/1e/cc/48d02ac22b30fa247f7dad82866e4b1015431092f4ba6ebc7e77596e0b18/multidict-6.7.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9fe04da3f79387f450fd0061d4dd2e45a72749d31bf634aecc9e27f24fdc4b3f", size = 243411, upload-time = "2025-10-06T14:51:16.072Z" }, - { url = "https://files.pythonhosted.org/packages/4a/03/29a8bf5a18abf1fe34535c88adbdfa88c9fb869b5a3b120692c64abe8284/multidict-6.7.0-cp314-cp314-win32.whl", hash = "sha256:fbafe31d191dfa7c4c51f7a6149c9fb7e914dcf9ffead27dcfd9f1ae382b3885", size = 40940, upload-time = "2025-10-06T14:51:17.544Z" }, - { url = "https://files.pythonhosted.org/packages/82/16/7ed27b680791b939de138f906d5cf2b4657b0d45ca6f5dd6236fdddafb1a/multidict-6.7.0-cp314-cp314-win_amd64.whl", hash = "sha256:2f67396ec0310764b9222a1728ced1ab638f61aadc6226f17a71dd9324f9a99c", size = 45087, upload-time = "2025-10-06T14:51:18.875Z" }, - { url = "https://files.pythonhosted.org/packages/cd/3c/e3e62eb35a1950292fe39315d3c89941e30a9d07d5d2df42965ab041da43/multidict-6.7.0-cp314-cp314-win_arm64.whl", hash = "sha256:ba672b26069957ee369cfa7fc180dde1fc6f176eaf1e6beaf61fbebbd3d9c000", size = 42368, upload-time = "2025-10-06T14:51:20.225Z" }, - { url = "https://files.pythonhosted.org/packages/8b/40/cd499bd0dbc5f1136726db3153042a735fffd0d77268e2ee20d5f33c010f/multidict-6.7.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:c1dcc7524066fa918c6a27d61444d4ee7900ec635779058571f70d042d86ed63", size = 82326, upload-time = "2025-10-06T14:51:21.588Z" }, - { url = "https://files.pythonhosted.org/packages/13/8a/18e031eca251c8df76daf0288e6790561806e439f5ce99a170b4af30676b/multidict-6.7.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:27e0b36c2d388dc7b6ced3406671b401e84ad7eb0656b8f3a2f46ed0ce483718", size = 48065, upload-time = "2025-10-06T14:51:22.93Z" }, - { url = "https://files.pythonhosted.org/packages/40/71/5e6701277470a87d234e433fb0a3a7deaf3bcd92566e421e7ae9776319de/multidict-6.7.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2a7baa46a22e77f0988e3b23d4ede5513ebec1929e34ee9495be535662c0dfe2", size = 46475, upload-time = "2025-10-06T14:51:24.352Z" }, - { url = "https://files.pythonhosted.org/packages/fe/6a/bab00cbab6d9cfb57afe1663318f72ec28289ea03fd4e8236bb78429893a/multidict-6.7.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7bf77f54997a9166a2f5675d1201520586439424c2511723a7312bdb4bcc034e", size = 239324, upload-time = "2025-10-06T14:51:25.822Z" }, - { url = "https://files.pythonhosted.org/packages/2a/5f/8de95f629fc22a7769ade8b41028e3e5a822c1f8904f618d175945a81ad3/multidict-6.7.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e011555abada53f1578d63389610ac8a5400fc70ce71156b0aa30d326f1a5064", size = 246877, upload-time = "2025-10-06T14:51:27.604Z" }, - { url = "https://files.pythonhosted.org/packages/23/b4/38881a960458f25b89e9f4a4fdcb02ac101cfa710190db6e5528841e67de/multidict-6.7.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:28b37063541b897fd6a318007373930a75ca6d6ac7c940dbe14731ffdd8d498e", size = 225824, upload-time = "2025-10-06T14:51:29.664Z" }, - { url = "https://files.pythonhosted.org/packages/1e/39/6566210c83f8a261575f18e7144736059f0c460b362e96e9cf797a24b8e7/multidict-6.7.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:05047ada7a2fde2631a0ed706f1fd68b169a681dfe5e4cf0f8e4cb6618bbc2cd", size = 253558, upload-time = "2025-10-06T14:51:31.684Z" }, - { url = "https://files.pythonhosted.org/packages/00/a3/67f18315100f64c269f46e6c0319fa87ba68f0f64f2b8e7fd7c72b913a0b/multidict-6.7.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:716133f7d1d946a4e1b91b1756b23c088881e70ff180c24e864c26192ad7534a", size = 252339, upload-time = "2025-10-06T14:51:33.699Z" }, - { url = "https://files.pythonhosted.org/packages/c8/2a/1cb77266afee2458d82f50da41beba02159b1d6b1f7973afc9a1cad1499b/multidict-6.7.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d1bed1b467ef657f2a0ae62844a607909ef1c6889562de5e1d505f74457d0b96", size = 244895, upload-time = "2025-10-06T14:51:36.189Z" }, - { url = "https://files.pythonhosted.org/packages/dd/72/09fa7dd487f119b2eb9524946ddd36e2067c08510576d43ff68469563b3b/multidict-6.7.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ca43bdfa5d37bd6aee89d85e1d0831fb86e25541be7e9d376ead1b28974f8e5e", size = 241862, upload-time = "2025-10-06T14:51:41.291Z" }, - { url = "https://files.pythonhosted.org/packages/65/92/bc1f8bd0853d8669300f732c801974dfc3702c3eeadae2f60cef54dc69d7/multidict-6.7.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:44b546bd3eb645fd26fb949e43c02a25a2e632e2ca21a35e2e132c8105dc8599", size = 232376, upload-time = "2025-10-06T14:51:43.55Z" }, - { url = "https://files.pythonhosted.org/packages/09/86/ac39399e5cb9d0c2ac8ef6e10a768e4d3bc933ac808d49c41f9dc23337eb/multidict-6.7.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:a6ef16328011d3f468e7ebc326f24c1445f001ca1dec335b2f8e66bed3006394", size = 240272, upload-time = "2025-10-06T14:51:45.265Z" }, - { url = "https://files.pythonhosted.org/packages/3d/b6/fed5ac6b8563ec72df6cb1ea8dac6d17f0a4a1f65045f66b6d3bf1497c02/multidict-6.7.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:5aa873cbc8e593d361ae65c68f85faadd755c3295ea2c12040ee146802f23b38", size = 248774, upload-time = "2025-10-06T14:51:46.836Z" }, - { url = "https://files.pythonhosted.org/packages/6b/8d/b954d8c0dc132b68f760aefd45870978deec6818897389dace00fcde32ff/multidict-6.7.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:3d7b6ccce016e29df4b7ca819659f516f0bc7a4b3efa3bb2012ba06431b044f9", size = 242731, upload-time = "2025-10-06T14:51:48.541Z" }, - { url = "https://files.pythonhosted.org/packages/16/9d/a2dac7009125d3540c2f54e194829ea18ac53716c61b655d8ed300120b0f/multidict-6.7.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:171b73bd4ee683d307599b66793ac80981b06f069b62eea1c9e29c9241aa66b0", size = 240193, upload-time = "2025-10-06T14:51:50.355Z" }, - { url = "https://files.pythonhosted.org/packages/39/ca/c05f144128ea232ae2178b008d5011d4e2cea86e4ee8c85c2631b1b94802/multidict-6.7.0-cp314-cp314t-win32.whl", hash = "sha256:b2d7f80c4e1fd010b07cb26820aae86b7e73b681ee4889684fb8d2d4537aab13", size = 48023, upload-time = "2025-10-06T14:51:51.883Z" }, - { url = "https://files.pythonhosted.org/packages/ba/8f/0a60e501584145588be1af5cc829265701ba3c35a64aec8e07cbb71d39bb/multidict-6.7.0-cp314-cp314t-win_amd64.whl", hash = "sha256:09929cab6fcb68122776d575e03c6cc64ee0b8fca48d17e135474b042ce515cd", size = 53507, upload-time = "2025-10-06T14:51:53.672Z" }, - { url = "https://files.pythonhosted.org/packages/7f/ae/3148b988a9c6239903e786eac19c889fab607c31d6efa7fb2147e5680f23/multidict-6.7.0-cp314-cp314t-win_arm64.whl", hash = "sha256:cc41db090ed742f32bd2d2c721861725e6109681eddf835d0a82bd3a5c382827", size = 44804, upload-time = "2025-10-06T14:51:55.415Z" }, - { url = "https://files.pythonhosted.org/packages/90/d7/4cf84257902265c4250769ac49f4eaab81c182ee9aff8bf59d2714dbb174/multidict-6.7.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:363eb68a0a59bd2303216d2346e6c441ba10d36d1f9969fcb6f1ba700de7bb5c", size = 77073, upload-time = "2025-10-06T14:51:57.386Z" }, - { url = "https://files.pythonhosted.org/packages/6d/51/194e999630a656e76c2965a1590d12faa5cd528170f2abaa04423e09fe8d/multidict-6.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d874eb056410ca05fed180b6642e680373688efafc7f077b2a2f61811e873a40", size = 44928, upload-time = "2025-10-06T14:51:58.791Z" }, - { url = "https://files.pythonhosted.org/packages/e5/6b/2a195373c33068c9158e0941d0b46cfcc9c1d894ca2eb137d1128081dff0/multidict-6.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8b55d5497b51afdfde55925e04a022f1de14d4f4f25cdfd4f5d9b0aa96166851", size = 44581, upload-time = "2025-10-06T14:52:00.174Z" }, - { url = "https://files.pythonhosted.org/packages/69/7b/7f4f2e644b6978bf011a5fd9a5ebb7c21de3f38523b1f7897d36a1ac1311/multidict-6.7.0-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f8e5c0031b90ca9ce555e2e8fd5c3b02a25f14989cbc310701823832c99eb687", size = 239901, upload-time = "2025-10-06T14:52:02.416Z" }, - { url = "https://files.pythonhosted.org/packages/3c/b5/952c72786710a031aa204a9adf7db66d7f97a2c6573889d58b9e60fe6702/multidict-6.7.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cf41880c991716f3c7cec48e2f19ae4045fc9db5fc9cff27347ada24d710bb5", size = 240534, upload-time = "2025-10-06T14:52:04.105Z" }, - { url = "https://files.pythonhosted.org/packages/f3/ef/109fe1f2471e4c458c74242c7e4a833f2d9fc8a6813cd7ee345b0bad18f9/multidict-6.7.0-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8cfc12a8630a29d601f48d47787bd7eb730e475e83edb5d6c5084317463373eb", size = 219545, upload-time = "2025-10-06T14:52:06.208Z" }, - { url = "https://files.pythonhosted.org/packages/42/bd/327d91288114967f9fe90dc53de70aa3fec1b9073e46aa32c4828f771a87/multidict-6.7.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3996b50c3237c4aec17459217c1e7bbdead9a22a0fcd3c365564fbd16439dde6", size = 251187, upload-time = "2025-10-06T14:52:08.049Z" }, - { url = "https://files.pythonhosted.org/packages/f4/13/a8b078ebbaceb7819fd28cd004413c33b98f1b70d542a62e6a00b74fb09f/multidict-6.7.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7f5170993a0dd3ab871c74f45c0a21a4e2c37a2f2b01b5f722a2ad9c6650469e", size = 249379, upload-time = "2025-10-06T14:52:09.831Z" }, - { url = "https://files.pythonhosted.org/packages/e3/6d/ab12e1246be4d65d1f55de1e6f6aaa9b8120eddcfdd1d290439c7833d5ce/multidict-6.7.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ec81878ddf0e98817def1e77d4f50dae5ef5b0e4fe796fae3bd674304172416e", size = 239241, upload-time = "2025-10-06T14:52:11.561Z" }, - { url = "https://files.pythonhosted.org/packages/bb/d7/079a93625208c173b8fa756396814397c0fd9fee61ef87b75a748820b86e/multidict-6.7.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9281bf5b34f59afbc6b1e477a372e9526b66ca446f4bf62592839c195a718b32", size = 237418, upload-time = "2025-10-06T14:52:13.671Z" }, - { url = "https://files.pythonhosted.org/packages/c9/29/03777c2212274aa9440918d604dc9d6af0e6b4558c611c32c3dcf1a13870/multidict-6.7.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:68af405971779d8b37198726f2b6fe3955db846fee42db7a4286fc542203934c", size = 232987, upload-time = "2025-10-06T14:52:15.708Z" }, - { url = "https://files.pythonhosted.org/packages/d9/00/11188b68d85a84e8050ee34724d6ded19ad03975caebe0c8dcb2829b37bf/multidict-6.7.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3ba3ef510467abb0667421a286dc906e30eb08569365f5cdb131d7aff7c2dd84", size = 240985, upload-time = "2025-10-06T14:52:17.317Z" }, - { url = "https://files.pythonhosted.org/packages/df/0c/12eef6aeda21859c6cdf7d75bd5516d83be3efe3d8cc45fd1a3037f5b9dc/multidict-6.7.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:b61189b29081a20c7e4e0b49b44d5d44bb0dc92be3c6d06a11cc043f81bf9329", size = 246855, upload-time = "2025-10-06T14:52:19.096Z" }, - { url = "https://files.pythonhosted.org/packages/69/f6/076120fd8bb3975f09228e288e08bff6b9f1bfd5166397c7ba284f622ab2/multidict-6.7.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:fb287618b9c7aa3bf8d825f02d9201b2f13078a5ed3b293c8f4d953917d84d5e", size = 241804, upload-time = "2025-10-06T14:52:21.166Z" }, - { url = "https://files.pythonhosted.org/packages/5f/51/41bb950c81437b88a93e6ddfca1d8763569ae861e638442838c4375f7497/multidict-6.7.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:521f33e377ff64b96c4c556b81c55d0cfffb96a11c194fd0c3f1e56f3d8dd5a4", size = 235321, upload-time = "2025-10-06T14:52:23.208Z" }, - { url = "https://files.pythonhosted.org/packages/5a/cf/5bbd31f055199d56c1f6b04bbadad3ccb24e6d5d4db75db774fc6d6674b8/multidict-6.7.0-cp39-cp39-win32.whl", hash = "sha256:ce8fdc2dca699f8dbf055a61d73eaa10482569ad20ee3c36ef9641f69afa8c91", size = 41435, upload-time = "2025-10-06T14:52:24.735Z" }, - { url = "https://files.pythonhosted.org/packages/af/01/547ffe9c2faec91c26965c152f3fea6cff068b6037401f61d310cc861ff4/multidict-6.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:7e73299c99939f089dd9b2120a04a516b95cdf8c1cd2b18c53ebf0de80b1f18f", size = 46193, upload-time = "2025-10-06T14:52:26.101Z" }, - { url = "https://files.pythonhosted.org/packages/27/77/cfa5461d1d2651d6fc24216c92b4a21d4e385a41c46e0d9f3b070675167b/multidict-6.7.0-cp39-cp39-win_arm64.whl", hash = "sha256:6bdce131e14b04fd34a809b6380dbfd826065c3e2fe8a50dbae659fa0c390546", size = 43118, upload-time = "2025-10-06T14:52:27.876Z" }, - { url = "https://files.pythonhosted.org/packages/b7/da/7d22601b625e241d4f23ef1ebff8acfc60da633c9e7e7922e24d10f592b3/multidict-6.7.0-py3-none-any.whl", hash = "sha256:394fc5c42a333c9ffc3e421a4c85e08580d990e08b99f6bf35b4132114c5dcb3", size = 12317, upload-time = "2025-10-06T14:52:29.272Z" }, -] - -[[package]] -name = "mypy" -version = "1.17.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mypy-extensions" }, - { name = "pathspec" }, - { name = "tomli", marker = "python_full_version < '3.11' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/1e/e3/034322d5a779685218ed69286c32faa505247f1f096251ef66c8fd203b08/mypy-1.17.0.tar.gz", hash = "sha256:e5d7ccc08ba089c06e2f5629c660388ef1fee708444f1dee0b9203fa031dee03", size = 3352114, upload-time = "2025-07-14T20:34:30.181Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/31/e762baa3b73905c856d45ab77b4af850e8159dffffd86a52879539a08c6b/mypy-1.17.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f8e08de6138043108b3b18f09d3f817a4783912e48828ab397ecf183135d84d6", size = 10998313, upload-time = "2025-07-14T20:33:24.519Z" }, - { url = "https://files.pythonhosted.org/packages/1c/c1/25b2f0d46fb7e0b5e2bee61ec3a47fe13eff9e3c2f2234f144858bbe6485/mypy-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce4a17920ec144647d448fc43725b5873548b1aae6c603225626747ededf582d", size = 10128922, upload-time = "2025-07-14T20:34:06.414Z" }, - { url = "https://files.pythonhosted.org/packages/02/78/6d646603a57aa8a2886df1b8881fe777ea60f28098790c1089230cd9c61d/mypy-1.17.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6ff25d151cc057fdddb1cb1881ef36e9c41fa2a5e78d8dd71bee6e4dcd2bc05b", size = 11913524, upload-time = "2025-07-14T20:33:19.109Z" }, - { url = "https://files.pythonhosted.org/packages/4f/19/dae6c55e87ee426fb76980f7e78484450cad1c01c55a1dc4e91c930bea01/mypy-1.17.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:93468cf29aa9a132bceb103bd8475f78cacde2b1b9a94fd978d50d4bdf616c9a", size = 12650527, upload-time = "2025-07-14T20:32:44.095Z" }, - { url = "https://files.pythonhosted.org/packages/86/e1/f916845a235235a6c1e4d4d065a3930113767001d491b8b2e1b61ca56647/mypy-1.17.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:98189382b310f16343151f65dd7e6867386d3e35f7878c45cfa11383d175d91f", size = 12897284, upload-time = "2025-07-14T20:33:38.168Z" }, - { url = "https://files.pythonhosted.org/packages/ae/dc/414760708a4ea1b096bd214d26a24e30ac5e917ef293bc33cdb6fe22d2da/mypy-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:c004135a300ab06a045c1c0d8e3f10215e71d7b4f5bb9a42ab80236364429937", size = 9506493, upload-time = "2025-07-14T20:34:01.093Z" }, - { url = "https://files.pythonhosted.org/packages/d4/24/82efb502b0b0f661c49aa21cfe3e1999ddf64bf5500fc03b5a1536a39d39/mypy-1.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9d4fe5c72fd262d9c2c91c1117d16aac555e05f5beb2bae6a755274c6eec42be", size = 10914150, upload-time = "2025-07-14T20:31:51.985Z" }, - { url = "https://files.pythonhosted.org/packages/03/96/8ef9a6ff8cedadff4400e2254689ca1dc4b420b92c55255b44573de10c54/mypy-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d96b196e5c16f41b4f7736840e8455958e832871990c7ba26bf58175e357ed61", size = 10039845, upload-time = "2025-07-14T20:32:30.527Z" }, - { url = "https://files.pythonhosted.org/packages/df/32/7ce359a56be779d38021d07941cfbb099b41411d72d827230a36203dbb81/mypy-1.17.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:73a0ff2dd10337ceb521c080d4147755ee302dcde6e1a913babd59473904615f", size = 11837246, upload-time = "2025-07-14T20:32:01.28Z" }, - { url = "https://files.pythonhosted.org/packages/82/16/b775047054de4d8dbd668df9137707e54b07fe18c7923839cd1e524bf756/mypy-1.17.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:24cfcc1179c4447854e9e406d3af0f77736d631ec87d31c6281ecd5025df625d", size = 12571106, upload-time = "2025-07-14T20:34:26.942Z" }, - { url = "https://files.pythonhosted.org/packages/a1/cf/fa33eaf29a606102c8d9ffa45a386a04c2203d9ad18bf4eef3e20c43ebc8/mypy-1.17.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3c56f180ff6430e6373db7a1d569317675b0a451caf5fef6ce4ab365f5f2f6c3", size = 12759960, upload-time = "2025-07-14T20:33:42.882Z" }, - { url = "https://files.pythonhosted.org/packages/94/75/3f5a29209f27e739ca57e6350bc6b783a38c7621bdf9cac3ab8a08665801/mypy-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:eafaf8b9252734400f9b77df98b4eee3d2eecab16104680d51341c75702cad70", size = 9503888, upload-time = "2025-07-14T20:32:34.392Z" }, - { url = "https://files.pythonhosted.org/packages/12/e9/e6824ed620bbf51d3bf4d6cbbe4953e83eaf31a448d1b3cfb3620ccb641c/mypy-1.17.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f986f1cab8dbec39ba6e0eaa42d4d3ac6686516a5d3dccd64be095db05ebc6bb", size = 11086395, upload-time = "2025-07-14T20:34:11.452Z" }, - { url = "https://files.pythonhosted.org/packages/ba/51/a4afd1ae279707953be175d303f04a5a7bd7e28dc62463ad29c1c857927e/mypy-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:51e455a54d199dd6e931cd7ea987d061c2afbaf0960f7f66deef47c90d1b304d", size = 10120052, upload-time = "2025-07-14T20:33:09.897Z" }, - { url = "https://files.pythonhosted.org/packages/8a/71/19adfeac926ba8205f1d1466d0d360d07b46486bf64360c54cb5a2bd86a8/mypy-1.17.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3204d773bab5ff4ebbd1f8efa11b498027cd57017c003ae970f310e5b96be8d8", size = 11861806, upload-time = "2025-07-14T20:32:16.028Z" }, - { url = "https://files.pythonhosted.org/packages/0b/64/d6120eca3835baf7179e6797a0b61d6c47e0bc2324b1f6819d8428d5b9ba/mypy-1.17.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1051df7ec0886fa246a530ae917c473491e9a0ba6938cfd0ec2abc1076495c3e", size = 12744371, upload-time = "2025-07-14T20:33:33.503Z" }, - { url = "https://files.pythonhosted.org/packages/1f/dc/56f53b5255a166f5bd0f137eed960e5065f2744509dfe69474ff0ba772a5/mypy-1.17.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f773c6d14dcc108a5b141b4456b0871df638eb411a89cd1c0c001fc4a9d08fc8", size = 12914558, upload-time = "2025-07-14T20:33:56.961Z" }, - { url = "https://files.pythonhosted.org/packages/69/ac/070bad311171badc9add2910e7f89271695a25c136de24bbafc7eded56d5/mypy-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:1619a485fd0e9c959b943c7b519ed26b712de3002d7de43154a489a2d0fd817d", size = 9585447, upload-time = "2025-07-14T20:32:20.594Z" }, - { url = "https://files.pythonhosted.org/packages/be/7b/5f8ab461369b9e62157072156935cec9d272196556bdc7c2ff5f4c7c0f9b/mypy-1.17.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c41aa59211e49d717d92b3bb1238c06d387c9325d3122085113c79118bebb06", size = 11070019, upload-time = "2025-07-14T20:32:07.99Z" }, - { url = "https://files.pythonhosted.org/packages/9c/f8/c49c9e5a2ac0badcc54beb24e774d2499748302c9568f7f09e8730e953fa/mypy-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0e69db1fb65b3114f98c753e3930a00514f5b68794ba80590eb02090d54a5d4a", size = 10114457, upload-time = "2025-07-14T20:33:47.285Z" }, - { url = "https://files.pythonhosted.org/packages/89/0c/fb3f9c939ad9beed3e328008b3fb90b20fda2cddc0f7e4c20dbefefc3b33/mypy-1.17.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:03ba330b76710f83d6ac500053f7727270b6b8553b0423348ffb3af6f2f7b889", size = 11857838, upload-time = "2025-07-14T20:33:14.462Z" }, - { url = "https://files.pythonhosted.org/packages/4c/66/85607ab5137d65e4f54d9797b77d5a038ef34f714929cf8ad30b03f628df/mypy-1.17.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:037bc0f0b124ce46bfde955c647f3e395c6174476a968c0f22c95a8d2f589bba", size = 12731358, upload-time = "2025-07-14T20:32:25.579Z" }, - { url = "https://files.pythonhosted.org/packages/73/d0/341dbbfb35ce53d01f8f2969facbb66486cee9804048bf6c01b048127501/mypy-1.17.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c38876106cb6132259683632b287238858bd58de267d80defb6f418e9ee50658", size = 12917480, upload-time = "2025-07-14T20:34:21.868Z" }, - { url = "https://files.pythonhosted.org/packages/64/63/70c8b7dbfc520089ac48d01367a97e8acd734f65bd07813081f508a8c94c/mypy-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:d30ba01c0f151998f367506fab31c2ac4527e6a7b2690107c7a7f9e3cb419a9c", size = 9589666, upload-time = "2025-07-14T20:34:16.841Z" }, - { url = "https://files.pythonhosted.org/packages/9f/a0/6263dd11941231f688f0a8f2faf90ceac1dc243d148d314a089d2fe25108/mypy-1.17.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:63e751f1b5ab51d6f3d219fe3a2fe4523eaa387d854ad06906c63883fde5b1ab", size = 10988185, upload-time = "2025-07-14T20:33:04.797Z" }, - { url = "https://files.pythonhosted.org/packages/02/13/b8f16d6b0dc80277129559c8e7dbc9011241a0da8f60d031edb0e6e9ac8f/mypy-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f7fb09d05e0f1c329a36dcd30e27564a3555717cde87301fae4fb542402ddfad", size = 10120169, upload-time = "2025-07-14T20:32:38.84Z" }, - { url = "https://files.pythonhosted.org/packages/14/ef/978ba79df0d65af680e20d43121363cf643eb79b04bf3880d01fc8afeb6f/mypy-1.17.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b72c34ce05ac3a1361ae2ebb50757fb6e3624032d91488d93544e9f82db0ed6c", size = 11918121, upload-time = "2025-07-14T20:33:52.328Z" }, - { url = "https://files.pythonhosted.org/packages/f4/10/55ef70b104151a0d8280474f05268ff0a2a79be8d788d5e647257d121309/mypy-1.17.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:434ad499ad8dde8b2f6391ddfa982f41cb07ccda8e3c67781b1bfd4e5f9450a8", size = 12648821, upload-time = "2025-07-14T20:32:59.631Z" }, - { url = "https://files.pythonhosted.org/packages/26/8c/7781fcd2e1eef48fbedd3a422c21fe300a8e03ed5be2eb4bd10246a77f4e/mypy-1.17.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f105f61a5eff52e137fd73bee32958b2add9d9f0a856f17314018646af838e97", size = 12896955, upload-time = "2025-07-14T20:32:49.543Z" }, - { url = "https://files.pythonhosted.org/packages/78/13/03ac759dabe86e98ca7b6681f114f90ee03f3ff8365a57049d311bd4a4e3/mypy-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:ba06254a5a22729853209550d80f94e28690d5530c661f9416a68ac097b13fc4", size = 9512957, upload-time = "2025-07-14T20:33:28.619Z" }, - { url = "https://files.pythonhosted.org/packages/e3/fc/ee058cc4316f219078464555873e99d170bde1d9569abd833300dbeb484a/mypy-1.17.0-py3-none-any.whl", hash = "sha256:15d9d0018237ab058e5de3d8fce61b6fa72cc59cc78fd91f1b474bce12abf496", size = 2283195, upload-time = "2025-07-14T20:31:54.753Z" }, -] - -[[package]] -name = "mypy-extensions" -version = "1.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload-time = "2025-04-22T14:54:24.164Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, -] - -[[package]] -name = "nodeenv" -version = "1.10.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/24/bf/d1bda4f6168e0b2e9e5958945e01910052158313224ada5ce1fb2e1113b8/nodeenv-1.10.0.tar.gz", hash = "sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb", size = 55611, upload-time = "2025-12-20T14:08:54.006Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438, upload-time = "2025-12-20T14:08:52.782Z" }, -] - -[[package]] -name = "numpy" -version = "2.0.2" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/a9/75/10dd1f8116a8b796cb2c737b674e02d02e80454bda953fa7e65d8c12b016/numpy-2.0.2.tar.gz", hash = "sha256:883c987dee1880e2a864ab0dc9892292582510604156762362d9326444636e78", size = 18902015, upload-time = "2024-08-26T20:19:40.945Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/21/91/3495b3237510f79f5d81f2508f9f13fea78ebfdf07538fc7444badda173d/numpy-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51129a29dbe56f9ca83438b706e2e69a39892b5eda6cedcb6b0c9fdc9b0d3ece", size = 21165245, upload-time = "2024-08-26T20:04:14.625Z" }, - { url = "https://files.pythonhosted.org/packages/05/33/26178c7d437a87082d11019292dce6d3fe6f0e9026b7b2309cbf3e489b1d/numpy-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f15975dfec0cf2239224d80e32c3170b1d168335eaedee69da84fbe9f1f9cd04", size = 13738540, upload-time = "2024-08-26T20:04:36.784Z" }, - { url = "https://files.pythonhosted.org/packages/ec/31/cc46e13bf07644efc7a4bf68df2df5fb2a1a88d0cd0da9ddc84dc0033e51/numpy-2.0.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8c5713284ce4e282544c68d1c3b2c7161d38c256d2eefc93c1d683cf47683e66", size = 5300623, upload-time = "2024-08-26T20:04:46.491Z" }, - { url = "https://files.pythonhosted.org/packages/6e/16/7bfcebf27bb4f9d7ec67332ffebee4d1bf085c84246552d52dbb548600e7/numpy-2.0.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:becfae3ddd30736fe1889a37f1f580e245ba79a5855bff5f2a29cb3ccc22dd7b", size = 6901774, upload-time = "2024-08-26T20:04:58.173Z" }, - { url = "https://files.pythonhosted.org/packages/f9/a3/561c531c0e8bf082c5bef509d00d56f82e0ea7e1e3e3a7fc8fa78742a6e5/numpy-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2da5960c3cf0df7eafefd806d4e612c5e19358de82cb3c343631188991566ccd", size = 13907081, upload-time = "2024-08-26T20:05:19.098Z" }, - { url = "https://files.pythonhosted.org/packages/fa/66/f7177ab331876200ac7563a580140643d1179c8b4b6a6b0fc9838de2a9b8/numpy-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:496f71341824ed9f3d2fd36cf3ac57ae2e0165c143b55c3a035ee219413f3318", size = 19523451, upload-time = "2024-08-26T20:05:47.479Z" }, - { url = "https://files.pythonhosted.org/packages/25/7f/0b209498009ad6453e4efc2c65bcdf0ae08a182b2b7877d7ab38a92dc542/numpy-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a61ec659f68ae254e4d237816e33171497e978140353c0c2038d46e63282d0c8", size = 19927572, upload-time = "2024-08-26T20:06:17.137Z" }, - { url = "https://files.pythonhosted.org/packages/3e/df/2619393b1e1b565cd2d4c4403bdd979621e2c4dea1f8532754b2598ed63b/numpy-2.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d731a1c6116ba289c1e9ee714b08a8ff882944d4ad631fd411106a30f083c326", size = 14400722, upload-time = "2024-08-26T20:06:39.16Z" }, - { url = "https://files.pythonhosted.org/packages/22/ad/77e921b9f256d5da36424ffb711ae79ca3f451ff8489eeca544d0701d74a/numpy-2.0.2-cp310-cp310-win32.whl", hash = "sha256:984d96121c9f9616cd33fbd0618b7f08e0cfc9600a7ee1d6fd9b239186d19d97", size = 6472170, upload-time = "2024-08-26T20:06:50.361Z" }, - { url = "https://files.pythonhosted.org/packages/10/05/3442317535028bc29cf0c0dd4c191a4481e8376e9f0db6bcf29703cadae6/numpy-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:c7b0be4ef08607dd04da4092faee0b86607f111d5ae68036f16cc787e250a131", size = 15905558, upload-time = "2024-08-26T20:07:13.881Z" }, - { url = "https://files.pythonhosted.org/packages/8b/cf/034500fb83041aa0286e0fb16e7c76e5c8b67c0711bb6e9e9737a717d5fe/numpy-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:49ca4decb342d66018b01932139c0961a8f9ddc7589611158cb3c27cbcf76448", size = 21169137, upload-time = "2024-08-26T20:07:45.345Z" }, - { url = "https://files.pythonhosted.org/packages/4a/d9/32de45561811a4b87fbdee23b5797394e3d1504b4a7cf40c10199848893e/numpy-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:11a76c372d1d37437857280aa142086476136a8c0f373b2e648ab2c8f18fb195", size = 13703552, upload-time = "2024-08-26T20:08:06.666Z" }, - { url = "https://files.pythonhosted.org/packages/c1/ca/2f384720020c7b244d22508cb7ab23d95f179fcfff33c31a6eeba8d6c512/numpy-2.0.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:807ec44583fd708a21d4a11d94aedf2f4f3c3719035c76a2bbe1fe8e217bdc57", size = 5298957, upload-time = "2024-08-26T20:08:15.83Z" }, - { url = "https://files.pythonhosted.org/packages/0e/78/a3e4f9fb6aa4e6fdca0c5428e8ba039408514388cf62d89651aade838269/numpy-2.0.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8cafab480740e22f8d833acefed5cc87ce276f4ece12fdaa2e8903db2f82897a", size = 6905573, upload-time = "2024-08-26T20:08:27.185Z" }, - { url = "https://files.pythonhosted.org/packages/a0/72/cfc3a1beb2caf4efc9d0b38a15fe34025230da27e1c08cc2eb9bfb1c7231/numpy-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a15f476a45e6e5a3a79d8a14e62161d27ad897381fecfa4a09ed5322f2085669", size = 13914330, upload-time = "2024-08-26T20:08:48.058Z" }, - { url = "https://files.pythonhosted.org/packages/ba/a8/c17acf65a931ce551fee11b72e8de63bf7e8a6f0e21add4c937c83563538/numpy-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13e689d772146140a252c3a28501da66dfecd77490b498b168b501835041f951", size = 19534895, upload-time = "2024-08-26T20:09:16.536Z" }, - { url = "https://files.pythonhosted.org/packages/ba/86/8767f3d54f6ae0165749f84648da9dcc8cd78ab65d415494962c86fac80f/numpy-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9ea91dfb7c3d1c56a0e55657c0afb38cf1eeae4544c208dc465c3c9f3a7c09f9", size = 19937253, upload-time = "2024-08-26T20:09:46.263Z" }, - { url = "https://files.pythonhosted.org/packages/df/87/f76450e6e1c14e5bb1eae6836478b1028e096fd02e85c1c37674606ab752/numpy-2.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c1c9307701fec8f3f7a1e6711f9089c06e6284b3afbbcd259f7791282d660a15", size = 14414074, upload-time = "2024-08-26T20:10:08.483Z" }, - { url = "https://files.pythonhosted.org/packages/5c/ca/0f0f328e1e59f73754f06e1adfb909de43726d4f24c6a3f8805f34f2b0fa/numpy-2.0.2-cp311-cp311-win32.whl", hash = "sha256:a392a68bd329eafac5817e5aefeb39038c48b671afd242710b451e76090e81f4", size = 6470640, upload-time = "2024-08-26T20:10:19.732Z" }, - { url = "https://files.pythonhosted.org/packages/eb/57/3a3f14d3a759dcf9bf6e9eda905794726b758819df4663f217d658a58695/numpy-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:286cd40ce2b7d652a6f22efdfc6d1edf879440e53e76a75955bc0c826c7e64dc", size = 15910230, upload-time = "2024-08-26T20:10:43.413Z" }, - { url = "https://files.pythonhosted.org/packages/45/40/2e117be60ec50d98fa08c2f8c48e09b3edea93cfcabd5a9ff6925d54b1c2/numpy-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:df55d490dea7934f330006d0f81e8551ba6010a5bf035a249ef61a94f21c500b", size = 20895803, upload-time = "2024-08-26T20:11:13.916Z" }, - { url = "https://files.pythonhosted.org/packages/46/92/1b8b8dee833f53cef3e0a3f69b2374467789e0bb7399689582314df02651/numpy-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8df823f570d9adf0978347d1f926b2a867d5608f434a7cff7f7908c6570dcf5e", size = 13471835, upload-time = "2024-08-26T20:11:34.779Z" }, - { url = "https://files.pythonhosted.org/packages/7f/19/e2793bde475f1edaea6945be141aef6c8b4c669b90c90a300a8954d08f0a/numpy-2.0.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9a92ae5c14811e390f3767053ff54eaee3bf84576d99a2456391401323f4ec2c", size = 5038499, upload-time = "2024-08-26T20:11:43.902Z" }, - { url = "https://files.pythonhosted.org/packages/e3/ff/ddf6dac2ff0dd50a7327bcdba45cb0264d0e96bb44d33324853f781a8f3c/numpy-2.0.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:a842d573724391493a97a62ebbb8e731f8a5dcc5d285dfc99141ca15a3302d0c", size = 6633497, upload-time = "2024-08-26T20:11:55.09Z" }, - { url = "https://files.pythonhosted.org/packages/72/21/67f36eac8e2d2cd652a2e69595a54128297cdcb1ff3931cfc87838874bd4/numpy-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05e238064fc0610c840d1cf6a13bf63d7e391717d247f1bf0318172e759e692", size = 13621158, upload-time = "2024-08-26T20:12:14.95Z" }, - { url = "https://files.pythonhosted.org/packages/39/68/e9f1126d757653496dbc096cb429014347a36b228f5a991dae2c6b6cfd40/numpy-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0123ffdaa88fa4ab64835dcbde75dcdf89c453c922f18dced6e27c90d1d0ec5a", size = 19236173, upload-time = "2024-08-26T20:12:44.049Z" }, - { url = "https://files.pythonhosted.org/packages/d1/e9/1f5333281e4ebf483ba1c888b1d61ba7e78d7e910fdd8e6499667041cc35/numpy-2.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:96a55f64139912d61de9137f11bf39a55ec8faec288c75a54f93dfd39f7eb40c", size = 19634174, upload-time = "2024-08-26T20:13:13.634Z" }, - { url = "https://files.pythonhosted.org/packages/71/af/a469674070c8d8408384e3012e064299f7a2de540738a8e414dcfd639996/numpy-2.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec9852fb39354b5a45a80bdab5ac02dd02b15f44b3804e9f00c556bf24b4bded", size = 14099701, upload-time = "2024-08-26T20:13:34.851Z" }, - { url = "https://files.pythonhosted.org/packages/d0/3d/08ea9f239d0e0e939b6ca52ad403c84a2bce1bde301a8eb4888c1c1543f1/numpy-2.0.2-cp312-cp312-win32.whl", hash = "sha256:671bec6496f83202ed2d3c8fdc486a8fc86942f2e69ff0e986140339a63bcbe5", size = 6174313, upload-time = "2024-08-26T20:13:45.653Z" }, - { url = "https://files.pythonhosted.org/packages/b2/b5/4ac39baebf1fdb2e72585c8352c56d063b6126be9fc95bd2bb5ef5770c20/numpy-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:cfd41e13fdc257aa5778496b8caa5e856dc4896d4ccf01841daee1d96465467a", size = 15606179, upload-time = "2024-08-26T20:14:08.786Z" }, - { url = "https://files.pythonhosted.org/packages/43/c1/41c8f6df3162b0c6ffd4437d729115704bd43363de0090c7f913cfbc2d89/numpy-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9059e10581ce4093f735ed23f3b9d283b9d517ff46009ddd485f1747eb22653c", size = 21169942, upload-time = "2024-08-26T20:14:40.108Z" }, - { url = "https://files.pythonhosted.org/packages/39/bc/fd298f308dcd232b56a4031fd6ddf11c43f9917fbc937e53762f7b5a3bb1/numpy-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:423e89b23490805d2a5a96fe40ec507407b8ee786d66f7328be214f9679df6dd", size = 13711512, upload-time = "2024-08-26T20:15:00.985Z" }, - { url = "https://files.pythonhosted.org/packages/96/ff/06d1aa3eeb1c614eda245c1ba4fb88c483bee6520d361641331872ac4b82/numpy-2.0.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:2b2955fa6f11907cf7a70dab0d0755159bca87755e831e47932367fc8f2f2d0b", size = 5306976, upload-time = "2024-08-26T20:15:10.876Z" }, - { url = "https://files.pythonhosted.org/packages/2d/98/121996dcfb10a6087a05e54453e28e58694a7db62c5a5a29cee14c6e047b/numpy-2.0.2-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:97032a27bd9d8988b9a97a8c4d2c9f2c15a81f61e2f21404d7e8ef00cb5be729", size = 6906494, upload-time = "2024-08-26T20:15:22.055Z" }, - { url = "https://files.pythonhosted.org/packages/15/31/9dffc70da6b9bbf7968f6551967fc21156207366272c2a40b4ed6008dc9b/numpy-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e795a8be3ddbac43274f18588329c72939870a16cae810c2b73461c40718ab1", size = 13912596, upload-time = "2024-08-26T20:15:42.452Z" }, - { url = "https://files.pythonhosted.org/packages/b9/14/78635daab4b07c0930c919d451b8bf8c164774e6a3413aed04a6d95758ce/numpy-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b258c385842546006213344c50655ff1555a9338e2e5e02a0756dc3e803dd", size = 19526099, upload-time = "2024-08-26T20:16:11.048Z" }, - { url = "https://files.pythonhosted.org/packages/26/4c/0eeca4614003077f68bfe7aac8b7496f04221865b3a5e7cb230c9d055afd/numpy-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fec9451a7789926bcf7c2b8d187292c9f93ea30284802a0ab3f5be8ab36865d", size = 19932823, upload-time = "2024-08-26T20:16:40.171Z" }, - { url = "https://files.pythonhosted.org/packages/f1/46/ea25b98b13dccaebddf1a803f8c748680d972e00507cd9bc6dcdb5aa2ac1/numpy-2.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9189427407d88ff25ecf8f12469d4d39d35bee1db5d39fc5c168c6f088a6956d", size = 14404424, upload-time = "2024-08-26T20:17:02.604Z" }, - { url = "https://files.pythonhosted.org/packages/c8/a6/177dd88d95ecf07e722d21008b1b40e681a929eb9e329684d449c36586b2/numpy-2.0.2-cp39-cp39-win32.whl", hash = "sha256:905d16e0c60200656500c95b6b8dca5d109e23cb24abc701d41c02d74c6b3afa", size = 6476809, upload-time = "2024-08-26T20:17:13.553Z" }, - { url = "https://files.pythonhosted.org/packages/ea/2b/7fc9f4e7ae5b507c1a3a21f0f15ed03e794c1242ea8a242ac158beb56034/numpy-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:a3f4ab0caa7f053f6797fcd4e1e25caee367db3112ef2b6ef82d749530768c73", size = 15911314, upload-time = "2024-08-26T20:17:36.72Z" }, - { url = "https://files.pythonhosted.org/packages/8f/3b/df5a870ac6a3be3a86856ce195ef42eec7ae50d2a202be1f5a4b3b340e14/numpy-2.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7f0a0c6f12e07fa94133c8a67404322845220c06a9e80e85999afe727f7438b8", size = 21025288, upload-time = "2024-08-26T20:18:07.732Z" }, - { url = "https://files.pythonhosted.org/packages/2c/97/51af92f18d6f6f2d9ad8b482a99fb74e142d71372da5d834b3a2747a446e/numpy-2.0.2-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:312950fdd060354350ed123c0e25a71327d3711584beaef30cdaa93320c392d4", size = 6762793, upload-time = "2024-08-26T20:18:19.125Z" }, - { url = "https://files.pythonhosted.org/packages/12/46/de1fbd0c1b5ccaa7f9a005b66761533e2f6a3e560096682683a223631fe9/numpy-2.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26df23238872200f63518dd2aa984cfca675d82469535dc7162dc2ee52d9dd5c", size = 19334885, upload-time = "2024-08-26T20:18:47.237Z" }, - { url = "https://files.pythonhosted.org/packages/cc/dc/d330a6faefd92b446ec0f0dfea4c3207bb1fef3c4771d19cf4543efd2c78/numpy-2.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a46288ec55ebbd58947d31d72be2c63cbf839f0a63b49cb755022310792a3385", size = 15828784, upload-time = "2024-08-26T20:19:11.19Z" }, -] - -[[package]] -name = "numpy" -version = "2.2.6" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version == '3.10.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245, upload-time = "2025-05-17T21:27:58.555Z" }, - { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048, upload-time = "2025-05-17T21:28:21.406Z" }, - { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542, upload-time = "2025-05-17T21:28:30.931Z" }, - { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301, upload-time = "2025-05-17T21:28:41.613Z" }, - { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320, upload-time = "2025-05-17T21:29:02.78Z" }, - { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050, upload-time = "2025-05-17T21:29:27.675Z" }, - { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034, upload-time = "2025-05-17T21:29:51.102Z" }, - { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185, upload-time = "2025-05-17T21:30:18.703Z" }, - { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149, upload-time = "2025-05-17T21:30:29.788Z" }, - { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620, upload-time = "2025-05-17T21:30:48.994Z" }, - { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963, upload-time = "2025-05-17T21:31:19.36Z" }, - { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743, upload-time = "2025-05-17T21:31:41.087Z" }, - { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616, upload-time = "2025-05-17T21:31:50.072Z" }, - { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579, upload-time = "2025-05-17T21:32:01.712Z" }, - { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005, upload-time = "2025-05-17T21:32:23.332Z" }, - { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570, upload-time = "2025-05-17T21:32:47.991Z" }, - { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548, upload-time = "2025-05-17T21:33:11.728Z" }, - { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521, upload-time = "2025-05-17T21:33:39.139Z" }, - { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866, upload-time = "2025-05-17T21:33:50.273Z" }, - { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455, upload-time = "2025-05-17T21:34:09.135Z" }, - { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348, upload-time = "2025-05-17T21:34:39.648Z" }, - { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362, upload-time = "2025-05-17T21:35:01.241Z" }, - { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103, upload-time = "2025-05-17T21:35:10.622Z" }, - { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382, upload-time = "2025-05-17T21:35:21.414Z" }, - { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462, upload-time = "2025-05-17T21:35:42.174Z" }, - { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618, upload-time = "2025-05-17T21:36:06.711Z" }, - { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511, upload-time = "2025-05-17T21:36:29.965Z" }, - { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783, upload-time = "2025-05-17T21:36:56.883Z" }, - { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506, upload-time = "2025-05-17T21:37:07.368Z" }, - { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190, upload-time = "2025-05-17T21:37:26.213Z" }, - { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828, upload-time = "2025-05-17T21:37:56.699Z" }, - { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006, upload-time = "2025-05-17T21:38:18.291Z" }, - { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765, upload-time = "2025-05-17T21:38:27.319Z" }, - { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736, upload-time = "2025-05-17T21:38:38.141Z" }, - { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719, upload-time = "2025-05-17T21:38:58.433Z" }, - { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072, upload-time = "2025-05-17T21:39:22.638Z" }, - { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213, upload-time = "2025-05-17T21:39:45.865Z" }, - { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632, upload-time = "2025-05-17T21:40:13.331Z" }, - { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532, upload-time = "2025-05-17T21:43:46.099Z" }, - { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885, upload-time = "2025-05-17T21:44:05.145Z" }, - { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467, upload-time = "2025-05-17T21:40:44Z" }, - { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144, upload-time = "2025-05-17T21:41:05.695Z" }, - { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217, upload-time = "2025-05-17T21:41:15.903Z" }, - { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014, upload-time = "2025-05-17T21:41:27.321Z" }, - { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935, upload-time = "2025-05-17T21:41:49.738Z" }, - { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122, upload-time = "2025-05-17T21:42:14.046Z" }, - { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143, upload-time = "2025-05-17T21:42:37.464Z" }, - { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260, upload-time = "2025-05-17T21:43:05.189Z" }, - { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225, upload-time = "2025-05-17T21:43:16.254Z" }, - { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374, upload-time = "2025-05-17T21:43:35.479Z" }, - { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391, upload-time = "2025-05-17T21:44:35.948Z" }, - { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754, upload-time = "2025-05-17T21:44:47.446Z" }, - { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476, upload-time = "2025-05-17T21:45:11.871Z" }, - { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666, upload-time = "2025-05-17T21:45:31.426Z" }, -] - -[[package]] -name = "numpy" -version = "2.4.6" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'emscripten'", - "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", -] -sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807, upload-time = "2026-05-18T23:37:14.07Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194, upload-time = "2026-05-18T23:33:13.503Z" }, - { url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111, upload-time = "2026-05-18T23:33:17.795Z" }, - { url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159, upload-time = "2026-05-18T23:33:20.654Z" }, - { url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936, upload-time = "2026-05-18T23:33:22.987Z" }, - { url = "https://files.pythonhosted.org/packages/33/a8/6fa8c1a345a8c85dbb21932c447bee07c30a2c2a3f31e369c0a84b300147/numpy-2.4.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47", size = 15966692, upload-time = "2026-05-18T23:33:26.62Z" }, - { url = "https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93", size = 16918164, upload-time = "2026-05-18T23:33:29.955Z" }, - { url = "https://files.pythonhosted.org/packages/c5/80/3615be3313f7e7696609bc194b9f0101da809df79e859bdb84e0cd043f46/numpy-2.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8", size = 17322877, upload-time = "2026-05-18T23:33:34.724Z" }, - { url = "https://files.pythonhosted.org/packages/ca/ac/a691e0fe2675e370d0e08ff905adc49a1c8830e8cae03efe4477e92cd55d/numpy-2.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6", size = 18651487, upload-time = "2026-05-18T23:33:38.217Z" }, - { url = "https://files.pythonhosted.org/packages/15/a7/9bc1cd626d7bf6869bfedf27b91b6ab5dd607758bf8e959d6fa80c6a59cb/numpy-2.4.6-cp311-cp311-win32.whl", hash = "sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8", size = 6233945, upload-time = "2026-05-18T23:33:41.331Z" }, - { url = "https://files.pythonhosted.org/packages/c5/31/7fc6239c12bce7e931463251cca4426c465e1876ba3cc785402ef4dd8f4e/numpy-2.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147", size = 12608406, upload-time = "2026-05-18T23:33:44.131Z" }, - { url = "https://files.pythonhosted.org/packages/27/83/140f85a466595a16382996a1bf06b2b54bcd597488921b0c9daaeeda72af/numpy-2.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577", size = 10479528, upload-time = "2026-05-18T23:33:50.725Z" }, - { url = "https://files.pythonhosted.org/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1", size = 16689119, upload-time = "2026-05-18T23:33:54.065Z" }, - { url = "https://files.pythonhosted.org/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb", size = 14699246, upload-time = "2026-05-18T23:33:57.621Z" }, - { url = "https://files.pythonhosted.org/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41", size = 5204410, upload-time = "2026-05-18T23:34:00.302Z" }, - { url = "https://files.pythonhosted.org/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698", size = 6551240, upload-time = "2026-05-18T23:34:02.852Z" }, - { url = "https://files.pythonhosted.org/packages/c9/c6/50a46a6205feba2343f1d6d17438107c5dc491ed1c736e6ea68689fd906b/numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f", size = 15671012, upload-time = "2026-05-18T23:34:05.485Z" }, - { url = "https://files.pythonhosted.org/packages/99/60/14115e6364fa676c5397c2ad3004e527e9aa487abf5d0706ec81bbd08529/numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853", size = 16645538, upload-time = "2026-05-18T23:34:09.265Z" }, - { url = "https://files.pythonhosted.org/packages/ae/c5/693cbe59e57db94d2231fa519ca3978dc9e19da5a8f088588f5c6e947ff2/numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a", size = 17020706, upload-time = "2026-05-18T23:34:13.053Z" }, - { url = "https://files.pythonhosted.org/packages/ef/fc/85b7c4eff9b4966ade25c2273cf7e7012e92366c032058653934b37de044/numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2", size = 18368541, upload-time = "2026-05-18T23:34:17.024Z" }, - { url = "https://files.pythonhosted.org/packages/f6/81/e1b27545deedce7f4a0b348618c6b62d74e36a4dc9ccd42f3eb2f85eee32/numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45", size = 5962825, upload-time = "2026-05-18T23:34:20.3Z" }, - { url = "https://files.pythonhosted.org/packages/ab/ca/feab00bd44aa5fe1ad2c18f08b4d3bb92e26484b0b1d1443897809ed528c/numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751", size = 12321687, upload-time = "2026-05-18T23:34:23.095Z" }, - { url = "https://files.pythonhosted.org/packages/63/cf/5a6d34850a39d1093558564f77ee8e8e0bee5061151b8f05a55711001ec7/numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8", size = 10221482, upload-time = "2026-05-18T23:34:25.876Z" }, - { url = "https://files.pythonhosted.org/packages/fb/82/bdab26d7438c6791ca31b7c024ca37c1eab8b726ba236129005cd4a06e45/numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0", size = 16684648, upload-time = "2026-05-18T23:34:29.41Z" }, - { url = "https://files.pythonhosted.org/packages/1b/30/a80189bcc7f5e4258b3fbc3968d909d1756f54d023299ecc39ad6fdb9ef8/numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb", size = 14693902, upload-time = "2026-05-18T23:34:33.013Z" }, - { url = "https://files.pythonhosted.org/packages/97/12/70b5d0d7c15e1ebb8a6a84a8caa1d19e181d84fb58bb6d70aca29099dec1/numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f", size = 5198992, upload-time = "2026-05-18T23:34:36.132Z" }, - { url = "https://files.pythonhosted.org/packages/ba/8c/ebd2a8f8a83541f8d38cc5667e8c2b69cecfd30da6e45693e8158857d44b/numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3", size = 6546944, upload-time = "2026-05-18T23:34:38.484Z" }, - { url = "https://files.pythonhosted.org/packages/bb/c5/7b863a97a91671a0338f4253bd3b5a3d3852f0692dae91711c9f4a10e787/numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b", size = 15669392, upload-time = "2026-05-18T23:34:41.257Z" }, - { url = "https://files.pythonhosted.org/packages/a5/9d/3584b9984ca4c047aea75214ce1a4c4c73d849bd71b604264b7f5653f8a8/numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089", size = 16633220, upload-time = "2026-05-18T23:34:45.075Z" }, - { url = "https://files.pythonhosted.org/packages/05/ae/7c67fba23bd98caec7c99261f3a16072ade14813486b0282cb29846de832/numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a", size = 17020800, upload-time = "2026-05-18T23:34:49.065Z" }, - { url = "https://files.pythonhosted.org/packages/d9/5d/3b6725cb31d983c5e66916f5d36f6d7e5521129e4c4404d64f918292a5b6/numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605", size = 18357600, upload-time = "2026-05-18T23:34:52.709Z" }, - { url = "https://files.pythonhosted.org/packages/f7/da/2ccc6c2fe8898dee01d90c75c5f5f914a23daf99e3e0f59516a08760c8b5/numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91", size = 5961134, upload-time = "2026-05-18T23:34:55.618Z" }, - { url = "https://files.pythonhosted.org/packages/b5/cd/9cc4dc876fb065d5c220aae4d5e14826b2715331bb7618ce1fb07a679d99/numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359", size = 12318598, upload-time = "2026-05-18T23:34:58.928Z" }, - { url = "https://files.pythonhosted.org/packages/39/1e/c0bcba1f8694116485fe28fd1be698c278fcda4141c5b0e53a2aed8b12a8/numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778", size = 10222272, upload-time = "2026-05-18T23:35:02.167Z" }, - { url = "https://files.pythonhosted.org/packages/63/6d/cc5619247c8f4204e507f5883528372e4ac4bb189e579fb859a12e480b1f/numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1", size = 14821197, upload-time = "2026-05-18T23:35:05.468Z" }, - { url = "https://files.pythonhosted.org/packages/00/58/f1c39161c87d9e9bed660f1ed4bafc0e403d5ec9650b6dd77aead07d489b/numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe", size = 5326287, upload-time = "2026-05-18T23:35:08.693Z" }, - { url = "https://files.pythonhosted.org/packages/af/57/3917ab0fd97f271a8694513581b8a36c655f111c446852c302f04ccdb6fc/numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997", size = 6646763, upload-time = "2026-05-18T23:35:11.459Z" }, - { url = "https://files.pythonhosted.org/packages/eb/0f/037e64c494b67581ae18193d770adef354c41f3f2c8ebf865602d949bf8f/numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20", size = 15728070, upload-time = "2026-05-18T23:35:14.79Z" }, - { url = "https://files.pythonhosted.org/packages/21/a6/5d2bae9c9542eb4df16dc9c46dc79c186e9bad53805dfa5399a6023c6db0/numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d", size = 16681752, upload-time = "2026-05-18T23:35:18.836Z" }, - { url = "https://files.pythonhosted.org/packages/92/14/23d1dfb410ae362cd59ce53e936b1513d545eb40db3949ced632e19a459e/numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67", size = 17086024, upload-time = "2026-05-18T23:35:22.52Z" }, - { url = "https://files.pythonhosted.org/packages/4b/6e/23595a2c642cdf3bc567877064bdd7f91c8b0038a4453cf2daf7248eafe9/numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd", size = 18403398, upload-time = "2026-05-18T23:35:26.398Z" }, - { url = "https://files.pythonhosted.org/packages/8a/90/0ac3bc947217e66dec77e7cbc6a1979d1af70b6461b82f620d3bccd5e4c8/numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab", size = 6084971, upload-time = "2026-05-18T23:35:29.387Z" }, - { url = "https://files.pythonhosted.org/packages/77/71/5673e351671a1d2bd6063b91b44f70c0affea7d1516fa7a6572941ba4aa1/numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75", size = 12458532, upload-time = "2026-05-18T23:35:32.175Z" }, - { url = "https://files.pythonhosted.org/packages/3f/88/19d3503c5046e688f049274b27a3ef3d771152fa80d3ba3d01a3dff61abe/numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd", size = 10291881, upload-time = "2026-05-18T23:35:35.465Z" }, - { url = "https://files.pythonhosted.org/packages/f8/91/3ab2044d05fd16d343c5ac2e69b127f1b2854040dd20b193257c78028bd3/numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079", size = 16683458, upload-time = "2026-05-18T23:35:38.353Z" }, - { url = "https://files.pythonhosted.org/packages/8e/62/764ce66fa4147ae6d73071a3abf804ffe606f174618697c571acdf26a7c9/numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7", size = 14704559, upload-time = "2026-05-18T23:35:42.14Z" }, - { url = "https://files.pythonhosted.org/packages/60/61/23f27c172f022e04025b7dc2367f4d63c1a398120607ec896228649a6f48/numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5", size = 5209716, upload-time = "2026-05-18T23:35:45.377Z" }, - { url = "https://files.pythonhosted.org/packages/03/71/21cf70dc6ea3e3acb95fc53a265b2fc248b981f0194ceb5b475271b8809d/numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096", size = 6543947, upload-time = "2026-05-18T23:35:47.926Z" }, - { url = "https://files.pythonhosted.org/packages/d5/91/64288395ee1799bd2e0b04a305dce9666da90c961e1f3fe982a05ee1c036/numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b", size = 15685197, upload-time = "2026-05-18T23:35:50.863Z" }, - { url = "https://files.pythonhosted.org/packages/f3/eb/ebffaa97dc55502df69584a8f0dcf07f69a3e0b3e2323670a2722db9aa39/numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8", size = 16638245, upload-time = "2026-05-18T23:35:54.752Z" }, - { url = "https://files.pythonhosted.org/packages/b8/0b/54f9da33128d7e350fab89c7455902eeae70349ee52bddb448dc4a576f45/numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402", size = 17036587, upload-time = "2026-05-18T23:35:58.355Z" }, - { url = "https://files.pythonhosted.org/packages/b6/f0/fdebc1052db1cc37c64beb22072d67cd6d1c71adca1299f53dec2b5e20d3/numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb", size = 18363226, upload-time = "2026-05-18T23:36:02.845Z" }, - { url = "https://files.pythonhosted.org/packages/aa/b4/298628d98c72b57e57f7165ae6a481a1deaf6f3c28262a6e4c739c275930/numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1", size = 6010196, upload-time = "2026-05-18T23:36:05.92Z" }, - { url = "https://files.pythonhosted.org/packages/df/ac/46de6dda46478f7942f839e094970be2d4a861e005c4b3bf07c92e291a09/numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261", size = 12450334, upload-time = "2026-05-18T23:36:09.107Z" }, - { url = "https://files.pythonhosted.org/packages/78/92/b8b798ac784102c0da830d2257d59358e3d3d90d1e2b3f2575dad976c5cf/numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6", size = 10495678, upload-time = "2026-05-18T23:36:12.766Z" }, - { url = "https://files.pythonhosted.org/packages/30/34/ec28d1aa8115971537c01469ab2011ee96827930f0a124de1000cc2a7ed7/numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a", size = 14823672, upload-time = "2026-05-18T23:36:16.473Z" }, - { url = "https://files.pythonhosted.org/packages/16/bd/f6d1fede4e54e8042a7ff97bb495510f3c220f94bcd9e8b228e87c92cc0d/numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e", size = 5328731, upload-time = "2026-05-18T23:36:19.767Z" }, - { url = "https://files.pythonhosted.org/packages/f4/f0/e105b9e2fd728a9910103884decd6951d9dd73896b914a98d9a231de02ee/numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e", size = 6649805, upload-time = "2026-05-18T23:36:22.266Z" }, - { url = "https://files.pythonhosted.org/packages/82/dd/1206a7ca6ab15e3f02069707ca96222e202af681bb73756da7527f3cb837/numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43", size = 15730496, upload-time = "2026-05-18T23:36:25.713Z" }, - { url = "https://files.pythonhosted.org/packages/51/e7/38d3ea825dcab85a591734decb2f6c67caa7c8367d374df1a1c3842f9b07/numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e", size = 16679616, upload-time = "2026-05-18T23:36:29.652Z" }, - { url = "https://files.pythonhosted.org/packages/93/b7/caabfdf53edf663e0b4eb74d7d405d83baef09eb5e83bcd32d601d72b93e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895", size = 17085145, upload-time = "2026-05-18T23:36:33.449Z" }, - { url = "https://files.pythonhosted.org/packages/f9/45/68d7c33a6bcf3e5aa3bdbd57a367e6f615286dfd6482f97e8ffeb734306e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4", size = 18403813, upload-time = "2026-05-18T23:36:37.369Z" }, - { url = "https://files.pythonhosted.org/packages/9c/50/0753655aa844c99cd9e018aacf76f130f1bd81d881bb74bc0aef5d73a8ba/numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063", size = 6156982, upload-time = "2026-05-18T23:36:40.817Z" }, - { url = "https://files.pythonhosted.org/packages/b2/d4/7c67becf668f973cb490cec3e98dfd799d866f9c989a54d355672cfa0db6/numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627", size = 12638908, upload-time = "2026-05-18T23:36:43.996Z" }, - { url = "https://files.pythonhosted.org/packages/43/bb/e1c71a4295b1b1d1393d50dbb4f2a36283c6859d9d3892e84f00ec5a91d5/numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66", size = 10565867, upload-time = "2026-05-18T23:36:47.114Z" }, - { url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511, upload-time = "2026-05-18T23:36:50.673Z" }, - { url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064, upload-time = "2026-05-18T23:36:53.879Z" }, - { url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157, upload-time = "2026-05-18T23:36:57.194Z" }, - { url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728, upload-time = "2026-05-18T23:36:59.575Z" }, - { url = "https://files.pythonhosted.org/packages/1a/9c/c531f2293b91265d8b48e9b329f54fdd7ffae73cb4134ea10cca4237e9cc/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0", size = 15798374, upload-time = "2026-05-18T23:37:02.674Z" }, - { url = "https://files.pythonhosted.org/packages/1a/b0/413077f6b1153ed3cba361401c6783bbad6114804a000cc22eb71c13e190/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02", size = 16747286, upload-time = "2026-05-18T23:37:06.327Z" }, - { url = "https://files.pythonhosted.org/packages/15/ce/e5ec180bc41812edcd8daeb8639d205622c0e8c02259d8ab25a0201b3c2a/numpy-2.4.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73", size = 12504263, upload-time = "2026-05-18T23:37:09.715Z" }, -] - -[[package]] -name = "numpy" -version = "2.5.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", -] -sdist = { url = "https://files.pythonhosted.org/packages/22/fd/89965aa4ac08c74998539fcbf24fa3540f3e15237fbeb6bcf9c908f4aade/numpy-2.5.1.tar.gz", hash = "sha256:a48a113e6afea91f5608793bafa7ef2ad481fefbda87ec5069f483de61cb9fa3", size = 20755553, upload-time = "2026-07-04T17:08:00.933Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/62/7b/14687aa674250e5e546f616f486b0d56d3631cd5b2415739141ce40bdcea/numpy-2.5.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2c889b56fe48b1018f764b0eec8df59ab654e9148aa91faa12596043500de277", size = 16801574, upload-time = "2026-07-04T17:06:12.423Z" }, - { url = "https://files.pythonhosted.org/packages/e1/19/cc5bb2a3f2913d27d6dbb2c78d25921fabaedc6741d4a5a615a11f3c5bf3/numpy-2.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ab451b59c5643c570974c43aef780703ef1d3b4965d2be07afd530615a9358d1", size = 11772250, upload-time = "2026-07-04T17:06:15.726Z" }, - { url = "https://files.pythonhosted.org/packages/42/77/fdf34a71dd30f54979b18603bee915e0aaf825b07afe79acd60b04b691e2/numpy-2.5.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:78798bd5b9ad744056af8efa90e3b9ddaa53272a0848a483084a1cc0a13b2dc0", size = 5331516, upload-time = "2026-07-04T17:06:17.913Z" }, - { url = "https://files.pythonhosted.org/packages/ce/e2/eb7efa015b4cce41e2517bf182a7fce0d7d5b9d9ed76a29bfa0f4fe4505c/numpy-2.5.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:2ae0ca40bcb22d6ba59c1dfd5446f49940b0f2d821fde133f10dda11f816b84e", size = 6664863, upload-time = "2026-07-04T17:06:20.02Z" }, - { url = "https://files.pythonhosted.org/packages/a9/4b/a2b32dd94ee9ffbeecb28152240042a3949db33b1c834d44090b80e1b3b8/numpy-2.5.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:61ac47e772e6b8ea489e1d2f441a34c5c3ac17327e7ce294cbdf535795ad4e75", size = 15167977, upload-time = "2026-07-04T17:06:21.621Z" }, - { url = "https://files.pythonhosted.org/packages/b8/a9/6e73d68500f80773f65f0654ea932019d6694329a0eb0ed0533de38df376/numpy-2.5.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:59fda5e192b570217ec2580c96f00e9a7e12ef6866a900eb089b62c1a32545ca", size = 16672469, upload-time = "2026-07-04T17:06:24.064Z" }, - { url = "https://files.pythonhosted.org/packages/24/7d/ad3e59015135f5261c95fd4cafeff159c955febd83a99a1d9250c4233815/numpy-2.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f7119ebff1a9829e9f431a4f9d28e703023bb6b9fe7c8f724467dbfc27c94ab3", size = 16527531, upload-time = "2026-07-04T17:06:26.69Z" }, - { url = "https://files.pythonhosted.org/packages/83/d0/a39b2fbcde9cb17a1dac678f254b33a6336298af9df338824c685425d5e8/numpy-2.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e824c2acf8862052246be5a44c15da1777940c60d010dd2aab897824d9c430f9", size = 18431940, upload-time = "2026-07-04T17:06:29.521Z" }, - { url = "https://files.pythonhosted.org/packages/04/12/cff070947791c1ed425ff76413189adbdc2fbe215eba7ce7fa454a03c7f8/numpy-2.5.1-cp312-cp312-win32.whl", hash = "sha256:08d60c810432eb83360958dea0999ac4cfb94531ea8efcbf0b7f277c2068aeb2", size = 6066764, upload-time = "2026-07-04T17:06:32.571Z" }, - { url = "https://files.pythonhosted.org/packages/65/66/53f31807a48a750f9d748da273bc3fcedd12b27ff1f3e373bfec55ef2dc0/numpy-2.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:f7d60026c0bdb1380e83bfa7a0419c4577ee4b9a08880afcb6dadeb74c649fa2", size = 12430966, upload-time = "2026-07-04T17:06:34.926Z" }, - { url = "https://files.pythonhosted.org/packages/2b/2a/d1a88066b1c14186f5d3c0d18c94f17b064511982bab0578d49ee9d43c29/numpy-2.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:17a25e09640602e10bc8de0e6fa2b3fd68eedd84ba6d7842dc8f32f9ab87bd0b", size = 10350488, upload-time = "2026-07-04T17:06:37.785Z" }, - { url = "https://files.pythonhosted.org/packages/eb/07/ec2a3f0c91761581d4b7104a740791800025983f9a4dc4e73f91a99aeac4/numpy-2.5.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0bfebd8695f9863592fe744be833a258120b14a9f39da255e8aa8fade2c0ddd1", size = 16796419, upload-time = "2026-07-04T17:06:40.37Z" }, - { url = "https://files.pythonhosted.org/packages/ab/ab/ddb499fc4f8780354395face5b65c7fd107bcd6e1d667a5f07d046956f6f/numpy-2.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:30b44a6b53a7ae63c54c089a8726e5563ed302716c5b7ccc85afade40b0e7ff6", size = 11765832, upload-time = "2026-07-04T17:06:42.768Z" }, - { url = "https://files.pythonhosted.org/packages/88/b3/3c28c558a09fc72100c646dac6d2fce8e834c471b0edca01a29996706117/numpy-2.5.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:6165343f81b56ef8f514f396989e529b61d9dc709b99421b07e9f3e698e2287d", size = 5325143, upload-time = "2026-07-04T17:06:45.466Z" }, - { url = "https://files.pythonhosted.org/packages/5e/0e/ce19b985bb15c596f4f05954e76cccc77c845083b3b8f938a6c68e523128/numpy-2.5.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4939237038ada79308dda3204ac6462df056b5672b2e25db1149cf873668b3e1", size = 6659749, upload-time = "2026-07-04T17:06:47.288Z" }, - { url = "https://files.pythonhosted.org/packages/2e/20/1ee6614d64332a1bba6411f38e68cb79eec1b2459e20a623777c5c5492a2/numpy-2.5.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c6759f538fb912fc46de0a6b1758ccf7b57bc7c7ebebc23974fdac3de8db0cd", size = 15164716, upload-time = "2026-07-04T17:06:49.494Z" }, - { url = "https://files.pythonhosted.org/packages/ed/a7/2bcd3fdbb87804755c35b729bf8709d62025c5f4cfd7d5b2415997097515/numpy-2.5.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9726558e8db4a5bf7929a70ae50f63abda4daf0efe810e3bfbab95976f75fc1a", size = 16661440, upload-time = "2026-07-04T17:06:52.061Z" }, - { url = "https://files.pythonhosted.org/packages/fc/d7/a41e3310c886fe457d36e670bbf24fae411aca8a7b6ad92a32afd924077c/numpy-2.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3935f3b419b244a02732676fa5317a9193cc596a4c0646db07e5b421229ac9f7", size = 16526305, upload-time = "2026-07-04T17:06:54.605Z" }, - { url = "https://files.pythonhosted.org/packages/53/75/4333a9a707c1edd3a4e1a0c58eca52c0f31e55089fa80db02b5565b24df7/numpy-2.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dc932a65ded7ce9013d120845a2514dcccb1a67bfc8deb8d37633762951904a6", size = 18423008, upload-time = "2026-07-04T17:06:57.54Z" }, - { url = "https://files.pythonhosted.org/packages/ee/90/e314a32b1c11a2ffe818ddad3a57b50b4b6e1b6c487192eb50cdef0415d0/numpy-2.5.1-cp313-cp313-win32.whl", hash = "sha256:4b4ff1608417eb7a59da7b967bbb798cacfe071d2caf526a24281cd562072ed9", size = 6063885, upload-time = "2026-07-04T17:07:00.14Z" }, - { url = "https://files.pythonhosted.org/packages/10/70/800b3fca480af32df9e8ea9f3d4a0c8feb4b32d7f195d174eabbda4829ad/numpy-2.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:6c3fe51bc6a16453d452997053454f309e8e0ed7b42d6b361ce4ac8c32913d74", size = 12425674, upload-time = "2026-07-04T17:07:02.387Z" }, - { url = "https://files.pythonhosted.org/packages/8b/0b/196350c122f50f6ca56846f2d71efd5e0d24b7b2e07355e019b2e2c7a11e/numpy-2.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:f7feb014281029e628ba2d5a007407443b06e418b6fe451d1e2adcbc8eba0107", size = 10350256, upload-time = "2026-07-04T17:07:04.878Z" }, - { url = "https://files.pythonhosted.org/packages/db/f4/731b6085a83faf6ca843394cbd5e217280c214399f7e8b21b9f552af0ae2/numpy-2.5.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:7c786fe9a5bbe360022e584c5a34cf6b54265c71bd7ec8ac3d8fec38968071f8", size = 16795063, upload-time = "2026-07-04T17:07:07.374Z" }, - { url = "https://files.pythonhosted.org/packages/bf/64/0e215f2048dd11a55bb989ed41b3585ef57452404e638d703a211a3e4157/numpy-2.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:32985c896d897419ef8da6917872d80b78ad0ea26d85b23245c7366ffde76d75", size = 11776652, upload-time = "2026-07-04T17:07:09.907Z" }, - { url = "https://files.pythonhosted.org/packages/b5/59/2b844c7a6e9deff69b404a66221e1542937734f65d5e6e39411876053862/numpy-2.5.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:efd736408cc97c79b9e6917338dfc8f06013b2274f992e96b1d9a81a71e2a2c2", size = 5335944, upload-time = "2026-07-04T17:07:12.227Z" }, - { url = "https://files.pythonhosted.org/packages/86/51/9bf7cb2cabcebc9e017e4ec7e6322b378317a542c08b4cb68479c1efc716/numpy-2.5.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:ab84dc6b074fa881cae55bea94cc4f68e285181ba7f32497bf7dee6b1496165b", size = 6656266, upload-time = "2026-07-04T17:07:14.368Z" }, - { url = "https://files.pythonhosted.org/packages/83/3e/fb7615b211b82a32f44d5180a6d421b61f84d4fadd578b48ba4ac34e189f/numpy-2.5.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:caf3e317d33d60c37986b452613f4ab51246d0691350c03d0cb4a898627f4a95", size = 15179720, upload-time = "2026-07-04T17:07:16.272Z" }, - { url = "https://files.pythonhosted.org/packages/41/5f/0f992cb24560673496c5d68de61913b57166ce530ffda07c1f280e0cc464/numpy-2.5.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:54ad769f17bc2d833b620851989f62054fb9ab93c969d9e1dc3c8e3d56beea21", size = 16664835, upload-time = "2026-07-04T17:07:19.021Z" }, - { url = "https://files.pythonhosted.org/packages/a2/2f/97d6475ee91afe2587797d09446f9d3e475ad4cb681662d824809327b75a/numpy-2.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c12afb53450fa976d4c681c50a7423729a4c51c0465ed9f32b8a9cabbc472373", size = 16539135, upload-time = "2026-07-04T17:07:22.015Z" }, - { url = "https://files.pythonhosted.org/packages/c4/5b/4db81e4ba0be7e2776b1de68c82aa862c7f8ec27e1b4927d4ae075e20678/numpy-2.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e8c11c405efc5ff6816d5983c96cdfa215bab3428961243af3ff59b228490438", size = 18426684, upload-time = "2026-07-04T17:07:24.941Z" }, - { url = "https://files.pythonhosted.org/packages/1f/64/c0ba2d90724d450279a7df8f32057241070250a26a7e2b5337d77347f481/numpy-2.5.1-cp314-cp314-win32.whl", hash = "sha256:f2479a47f8d5932d1718168a681ad6e536a9df484c83cfcf9de365e164537ace", size = 6116103, upload-time = "2026-07-04T17:07:27.622Z" }, - { url = "https://files.pythonhosted.org/packages/c1/1a/837f9ed7405adcd7a40538792eb169eddd8fa5630c16a1ef49dae71a30f4/numpy-2.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:24d0eb82c0541d3415a33425db64ae439dffccd7b4dbcb30e7c35120205c506a", size = 12562177, upload-time = "2026-07-04T17:07:29.887Z" }, - { url = "https://files.pythonhosted.org/packages/22/ed/49707938b6dd0a78a9178dd93227dc89e4c11af47f5c798d70366e8d0483/numpy-2.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:5a4c988b38d261deeeaad9954e3deb091ad905c94e8bb6708654ef1d97f286b0", size = 10627739, upload-time = "2026-07-04T17:07:32.568Z" }, - { url = "https://files.pythonhosted.org/packages/a6/c7/bb4b882cfe7f299cbc8b66e42e7dd78cf9d14e40f9469fc5e3db7e15b3bd/numpy-2.5.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a33276be12fa045805f477f22482088b66bb758ffbe89a9d21457de863a32e22", size = 11894709, upload-time = "2026-07-04T17:07:34.941Z" }, - { url = "https://files.pythonhosted.org/packages/40/3f/5af7f4a7f6224aef48017aa82bb6174c7a659d724be0c75017b7e64a55b4/numpy-2.5.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:f089d7b00756190aacf1f5d34bdf38c3c430ac82b4f868f8cede73380460fce7", size = 5453810, upload-time = "2026-07-04T17:07:37.495Z" }, - { url = "https://files.pythonhosted.org/packages/20/c9/3474309bc94d634d3f9c3eddf03250ecb8c22cd948ef16fef69a77cc5d7b/numpy-2.5.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:09e9bfd8d2cf479c7d174804fb3811c53a8e9f20a37444008606b57d6b7a826d", size = 6761189, upload-time = "2026-07-04T17:07:39.563Z" }, - { url = "https://files.pythonhosted.org/packages/90/8a/558ae39fdd55d7e7f7fef9a84a6e964ac6b23edbd2a07e52bb084500507d/numpy-2.5.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e68d8dd1e7eba712948f2053a29ec86917bc70ba1358df869d9f06649ef9cf09", size = 15225039, upload-time = "2026-07-04T17:07:41.682Z" }, - { url = "https://files.pythonhosted.org/packages/63/27/ca7392b2d030277bdf0273e7d23255b3ee57d57a7c170a6f4fb3981e1e5d/numpy-2.5.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:99d5095fa265a0c4152e7bb12759e14381ef5496152f1ce58f44bdf55c44beb4", size = 16701306, upload-time = "2026-07-04T17:07:44.611Z" }, - { url = "https://files.pythonhosted.org/packages/02/42/03d53ae7996c44d4374a8262e9dc41671fd56cbb98f7d47ef85cf5da4c6b/numpy-2.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ab87a91b3cc3382b8956095bd8f95e00cf679bb81554339be1a2ba404a1473c1", size = 16589955, upload-time = "2026-07-04T17:07:47.694Z" }, - { url = "https://files.pythonhosted.org/packages/7b/15/6c1784ae469640e65db111e9a34b3d0f14d91e8a38b9ce34810ced370dbb/numpy-2.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:224ca51130ef7da85bea2191625181cb4f337f9cb64b471f10c1a12aa8b60077", size = 18464252, upload-time = "2026-07-04T17:07:50.684Z" }, - { url = "https://files.pythonhosted.org/packages/94/a8/f98e50356cf167df656c526c2dfeec2d7dde182f2a3da4b458a5938e2776/numpy-2.5.1-cp314-cp314t-win32.whl", hash = "sha256:6eab239876581b2b3c5a242281b6007bbdbcd1c7085d7709bb57c5929b11e6bf", size = 6263298, upload-time = "2026-07-04T17:07:53.445Z" }, - { url = "https://files.pythonhosted.org/packages/72/ac/96ae880cdecad0b3275d9359fcec72667b49a4863c9f12942e43679dda02/numpy-2.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:83ce9c80d5b521b0d77ddcbe5447c218d247929b6cc056ca5351342accfff0af", size = 12748623, upload-time = "2026-07-04T17:07:55.384Z" }, - { url = "https://files.pythonhosted.org/packages/a1/5a/4d2b1601df3602dba7a14f3348ba9bfe94a18adb428e693df6154c293831/numpy-2.5.1-cp314-cp314t-win_arm64.whl", hash = "sha256:5a6db61f9aaa57e369905c67d852045d3c4f7126405b29d09b19dec118e9c9cb", size = 10697674, upload-time = "2026-07-04T17:07:58.506Z" }, -] - -[[package]] -name = "packaging" -version = "25.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload-time = "2025-04-19T11:48:59.673Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, -] - -[[package]] -name = "pandas" -version = "2.3.3" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version == '3.10.*'", - "python_full_version < '3.10'", -] -dependencies = [ - { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "python-dateutil", marker = "python_full_version < '3.11' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "pytz", marker = "python_full_version < '3.11' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "tzdata", marker = "python_full_version < '3.11' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223, upload-time = "2025-09-29T23:34:51.853Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3d/f7/f425a00df4fcc22b292c6895c6831c0c8ae1d9fac1e024d16f98a9ce8749/pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c", size = 11555763, upload-time = "2025-09-29T23:16:53.287Z" }, - { url = "https://files.pythonhosted.org/packages/13/4f/66d99628ff8ce7857aca52fed8f0066ce209f96be2fede6cef9f84e8d04f/pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a", size = 10801217, upload-time = "2025-09-29T23:17:04.522Z" }, - { url = "https://files.pythonhosted.org/packages/1d/03/3fc4a529a7710f890a239cc496fc6d50ad4a0995657dccc1d64695adb9f4/pandas-2.3.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1", size = 12148791, upload-time = "2025-09-29T23:17:18.444Z" }, - { url = "https://files.pythonhosted.org/packages/40/a8/4dac1f8f8235e5d25b9955d02ff6f29396191d4e665d71122c3722ca83c5/pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838", size = 12769373, upload-time = "2025-09-29T23:17:35.846Z" }, - { url = "https://files.pythonhosted.org/packages/df/91/82cc5169b6b25440a7fc0ef3a694582418d875c8e3ebf796a6d6470aa578/pandas-2.3.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250", size = 13200444, upload-time = "2025-09-29T23:17:49.341Z" }, - { url = "https://files.pythonhosted.org/packages/10/ae/89b3283800ab58f7af2952704078555fa60c807fff764395bb57ea0b0dbd/pandas-2.3.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4", size = 13858459, upload-time = "2025-09-29T23:18:03.722Z" }, - { url = "https://files.pythonhosted.org/packages/85/72/530900610650f54a35a19476eca5104f38555afccda1aa11a92ee14cb21d/pandas-2.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826", size = 11346086, upload-time = "2025-09-29T23:18:18.505Z" }, - { url = "https://files.pythonhosted.org/packages/c1/fa/7ac648108144a095b4fb6aa3de1954689f7af60a14cf25583f4960ecb878/pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523", size = 11578790, upload-time = "2025-09-29T23:18:30.065Z" }, - { url = "https://files.pythonhosted.org/packages/9b/35/74442388c6cf008882d4d4bdfc4109be87e9b8b7ccd097ad1e7f006e2e95/pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45", size = 10833831, upload-time = "2025-09-29T23:38:56.071Z" }, - { url = "https://files.pythonhosted.org/packages/fe/e4/de154cbfeee13383ad58d23017da99390b91d73f8c11856f2095e813201b/pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66", size = 12199267, upload-time = "2025-09-29T23:18:41.627Z" }, - { url = "https://files.pythonhosted.org/packages/bf/c9/63f8d545568d9ab91476b1818b4741f521646cbdd151c6efebf40d6de6f7/pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b", size = 12789281, upload-time = "2025-09-29T23:18:56.834Z" }, - { url = "https://files.pythonhosted.org/packages/f2/00/a5ac8c7a0e67fd1a6059e40aa08fa1c52cc00709077d2300e210c3ce0322/pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791", size = 13240453, upload-time = "2025-09-29T23:19:09.247Z" }, - { url = "https://files.pythonhosted.org/packages/27/4d/5c23a5bc7bd209231618dd9e606ce076272c9bc4f12023a70e03a86b4067/pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151", size = 13890361, upload-time = "2025-09-29T23:19:25.342Z" }, - { url = "https://files.pythonhosted.org/packages/8e/59/712db1d7040520de7a4965df15b774348980e6df45c129b8c64d0dbe74ef/pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c", size = 11348702, upload-time = "2025-09-29T23:19:38.296Z" }, - { url = "https://files.pythonhosted.org/packages/9c/fb/231d89e8637c808b997d172b18e9d4a4bc7bf31296196c260526055d1ea0/pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53", size = 11597846, upload-time = "2025-09-29T23:19:48.856Z" }, - { url = "https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35", size = 10729618, upload-time = "2025-09-29T23:39:08.659Z" }, - { url = "https://files.pythonhosted.org/packages/57/56/cf2dbe1a3f5271370669475ead12ce77c61726ffd19a35546e31aa8edf4e/pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908", size = 11737212, upload-time = "2025-09-29T23:19:59.765Z" }, - { url = "https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89", size = 12362693, upload-time = "2025-09-29T23:20:14.098Z" }, - { url = "https://files.pythonhosted.org/packages/a6/de/8b1895b107277d52f2b42d3a6806e69cfef0d5cf1d0ba343470b9d8e0a04/pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98", size = 12771002, upload-time = "2025-09-29T23:20:26.76Z" }, - { url = "https://files.pythonhosted.org/packages/87/21/84072af3187a677c5893b170ba2c8fbe450a6ff911234916da889b698220/pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084", size = 13450971, upload-time = "2025-09-29T23:20:41.344Z" }, - { url = "https://files.pythonhosted.org/packages/86/41/585a168330ff063014880a80d744219dbf1dd7a1c706e75ab3425a987384/pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b", size = 10992722, upload-time = "2025-09-29T23:20:54.139Z" }, - { url = "https://files.pythonhosted.org/packages/cd/4b/18b035ee18f97c1040d94debd8f2e737000ad70ccc8f5513f4eefad75f4b/pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713", size = 11544671, upload-time = "2025-09-29T23:21:05.024Z" }, - { url = "https://files.pythonhosted.org/packages/31/94/72fac03573102779920099bcac1c3b05975c2cb5f01eac609faf34bed1ca/pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8", size = 10680807, upload-time = "2025-09-29T23:21:15.979Z" }, - { url = "https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", size = 11709872, upload-time = "2025-09-29T23:21:27.165Z" }, - { url = "https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", size = 12306371, upload-time = "2025-09-29T23:21:40.532Z" }, - { url = "https://files.pythonhosted.org/packages/33/81/a3afc88fca4aa925804a27d2676d22dcd2031c2ebe08aabd0ae55b9ff282/pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", size = 12765333, upload-time = "2025-09-29T23:21:55.77Z" }, - { url = "https://files.pythonhosted.org/packages/8d/0f/b4d4ae743a83742f1153464cf1a8ecfafc3ac59722a0b5c8602310cb7158/pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", size = 13418120, upload-time = "2025-09-29T23:22:10.109Z" }, - { url = "https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee", size = 10993991, upload-time = "2025-09-29T23:25:04.889Z" }, - { url = "https://files.pythonhosted.org/packages/f9/ca/3f8d4f49740799189e1395812f3bf23b5e8fc7c190827d55a610da72ce55/pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5", size = 12048227, upload-time = "2025-09-29T23:22:24.343Z" }, - { url = "https://files.pythonhosted.org/packages/0e/5a/f43efec3e8c0cc92c4663ccad372dbdff72b60bdb56b2749f04aa1d07d7e/pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21", size = 11411056, upload-time = "2025-09-29T23:22:37.762Z" }, - { url = "https://files.pythonhosted.org/packages/46/b1/85331edfc591208c9d1a63a06baa67b21d332e63b7a591a5ba42a10bb507/pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", size = 11645189, upload-time = "2025-09-29T23:22:51.688Z" }, - { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912, upload-time = "2025-09-29T23:23:05.042Z" }, - { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160, upload-time = "2025-09-29T23:23:28.57Z" }, - { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233, upload-time = "2025-09-29T23:24:24.876Z" }, - { url = "https://files.pythonhosted.org/packages/04/fd/74903979833db8390b73b3a8a7d30d146d710bd32703724dd9083950386f/pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0", size = 11540635, upload-time = "2025-09-29T23:25:52.486Z" }, - { url = "https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593", size = 10759079, upload-time = "2025-09-29T23:26:33.204Z" }, - { url = "https://files.pythonhosted.org/packages/ca/05/d01ef80a7a3a12b2f8bbf16daba1e17c98a2f039cbc8e2f77a2c5a63d382/pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c", size = 11814049, upload-time = "2025-09-29T23:27:15.384Z" }, - { url = "https://files.pythonhosted.org/packages/15/b2/0e62f78c0c5ba7e3d2c5945a82456f4fac76c480940f805e0b97fcbc2f65/pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b", size = 12332638, upload-time = "2025-09-29T23:27:51.625Z" }, - { url = "https://files.pythonhosted.org/packages/c5/33/dd70400631b62b9b29c3c93d2feee1d0964dc2bae2e5ad7a6c73a7f25325/pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6", size = 12886834, upload-time = "2025-09-29T23:28:21.289Z" }, - { url = "https://files.pythonhosted.org/packages/d3/18/b5d48f55821228d0d2692b34fd5034bb185e854bdb592e9c640f6290e012/pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3", size = 13409925, upload-time = "2025-09-29T23:28:58.261Z" }, - { url = "https://files.pythonhosted.org/packages/a6/3d/124ac75fcd0ecc09b8fdccb0246ef65e35b012030defb0e0eba2cbbbe948/pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5", size = 11109071, upload-time = "2025-09-29T23:32:27.484Z" }, - { url = "https://files.pythonhosted.org/packages/89/9c/0e21c895c38a157e0faa1fb64587a9226d6dd46452cac4532d80c3c4a244/pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec", size = 12048504, upload-time = "2025-09-29T23:29:31.47Z" }, - { url = "https://files.pythonhosted.org/packages/d7/82/b69a1c95df796858777b68fbe6a81d37443a33319761d7c652ce77797475/pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7", size = 11410702, upload-time = "2025-09-29T23:29:54.591Z" }, - { url = "https://files.pythonhosted.org/packages/f9/88/702bde3ba0a94b8c73a0181e05144b10f13f29ebfc2150c3a79062a8195d/pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450", size = 11634535, upload-time = "2025-09-29T23:30:21.003Z" }, - { url = "https://files.pythonhosted.org/packages/a4/1e/1bac1a839d12e6a82ec6cb40cda2edde64a2013a66963293696bbf31fbbb/pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", size = 12121582, upload-time = "2025-09-29T23:30:43.391Z" }, - { url = "https://files.pythonhosted.org/packages/44/91/483de934193e12a3b1d6ae7c8645d083ff88dec75f46e827562f1e4b4da6/pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", size = 12699963, upload-time = "2025-09-29T23:31:10.009Z" }, - { url = "https://files.pythonhosted.org/packages/70/44/5191d2e4026f86a2a109053e194d3ba7a31a2d10a9c2348368c63ed4e85a/pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", size = 13202175, upload-time = "2025-09-29T23:31:59.173Z" }, - { url = "https://files.pythonhosted.org/packages/56/b4/52eeb530a99e2a4c55ffcd352772b599ed4473a0f892d127f4147cf0f88e/pandas-2.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c503ba5216814e295f40711470446bc3fd00f0faea8a086cbc688808e26f92a2", size = 11567720, upload-time = "2025-09-29T23:33:06.209Z" }, - { url = "https://files.pythonhosted.org/packages/48/4a/2d8b67632a021bced649ba940455ed441ca854e57d6e7658a6024587b083/pandas-2.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a637c5cdfa04b6d6e2ecedcb81fc52ffb0fd78ce2ebccc9ea964df9f658de8c8", size = 10810302, upload-time = "2025-09-29T23:33:35.846Z" }, - { url = "https://files.pythonhosted.org/packages/13/e6/d2465010ee0569a245c975dc6967b801887068bc893e908239b1f4b6c1ac/pandas-2.3.3-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:854d00d556406bffe66a4c0802f334c9ad5a96b4f1f868adf036a21b11ef13ff", size = 12154874, upload-time = "2025-09-29T23:33:49.939Z" }, - { url = "https://files.pythonhosted.org/packages/1f/18/aae8c0aa69a386a3255940e9317f793808ea79d0a525a97a903366bb2569/pandas-2.3.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf1f8a81d04ca90e32a0aceb819d34dbd378a98bf923b6398b9a3ec0bf44de29", size = 12790141, upload-time = "2025-09-29T23:34:05.655Z" }, - { url = "https://files.pythonhosted.org/packages/f7/26/617f98de789de00c2a444fbe6301bb19e66556ac78cff933d2c98f62f2b4/pandas-2.3.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:23ebd657a4d38268c7dfbdf089fbc31ea709d82e4923c5ffd4fbd5747133ce73", size = 13208697, upload-time = "2025-09-29T23:34:21.835Z" }, - { url = "https://files.pythonhosted.org/packages/b9/fb/25709afa4552042bd0e15717c75e9b4a2294c3dc4f7e6ea50f03c5136600/pandas-2.3.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5554c929ccc317d41a5e3d1234f3be588248e61f08a74dd17c9eabb535777dc9", size = 13879233, upload-time = "2025-09-29T23:34:35.079Z" }, - { url = "https://files.pythonhosted.org/packages/98/af/7be05277859a7bc399da8ba68b88c96b27b48740b6cf49688899c6eb4176/pandas-2.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:d3e28b3e83862ccf4d85ff19cf8c20b2ae7e503881711ff2d534dc8f761131aa", size = 11359119, upload-time = "2025-09-29T23:34:46.339Z" }, -] - -[[package]] -name = "pandas" -version = "3.0.3" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version == '3.11.*' and sys_platform == 'emscripten'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", -] -dependencies = [ - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "python-dateutil", marker = "python_full_version >= '3.11' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "tzdata", marker = "(python_full_version >= '3.11' and sys_platform == 'emscripten') or (python_full_version >= '3.11' and sys_platform == 'win32') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2') or (sys_platform == 'emscripten' and extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2') or (sys_platform == 'win32' and extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f8/87/4341c6252d1c47b08768c3d25ac487362bf403f0313ddae4a2a26c9b1b4c/pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc", size = 4651414, upload-time = "2026-05-11T18:54:29.21Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/42/16/b5c76b838fd9bf6ce84d3a53346b8874ec05c5f0040d75ef2c320100cd2a/pandas-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:455f6f8139d4282188f526868dbc3c828470e88a3d9d59a891bd46a455f21b98", size = 10338495, upload-time = "2026-05-11T18:52:11.558Z" }, - { url = "https://files.pythonhosted.org/packages/5a/b0/a4ffc4ae74d2d822200dcc46898987d8eb6032d1e2b219cae39da6f5cbcc/pandas-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4e15135e2ee5df1063313e2425ceef8ac0f4ae775893815b0923651b806a5639", size = 9938250, upload-time = "2026-05-11T18:52:17.005Z" }, - { url = "https://files.pythonhosted.org/packages/2e/b2/3323601a52caee42c019e370090ca4544b241437240ca04f786cce82b0cf/pandas-3.0.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:05f1f1752b8533ea03f7f39a9c15b1a058d067bb48f4748948e7a8691e0510f2", size = 10770558, upload-time = "2026-05-11T18:52:19.865Z" }, - { url = "https://files.pythonhosted.org/packages/32/f1/bbecd2f867b97abebe0f9b53d750f862251b40337e061b36676ded3d920f/pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a1e45c80cceb3b4a21bc5939d52e8cbd8d9b7305309219d59e9754d9ce09e27", size = 11274611, upload-time = "2026-05-11T18:52:22.622Z" }, - { url = "https://files.pythonhosted.org/packages/7f/4f/eafabf2d5fae5adf143b4d18d3706c5efdc368a7c4eb1ee8a3eddabbd0f6/pandas-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:14da8316da4d0c5a77618425996bfb1248ca87fc2c1486e6fde4652bd18b5824", size = 11784670, upload-time = "2026-05-11T18:52:25.4Z" }, - { url = "https://files.pythonhosted.org/packages/49/44/1eb20389301b57b19cc099a1c2f662501f72f08a65f912d05822613c1532/pandas-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a55066a0505dae0ba2b50a46637db34b46f9094c65c5d4800794ef6335010938", size = 12353708, upload-time = "2026-05-11T18:52:28.139Z" }, - { url = "https://files.pythonhosted.org/packages/eb/62/c321f13b5ba1819fc8dca456c7fce578da2dcfecff1abbf0eaddf8406c0f/pandas-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6674ab18ad8c57802867264b00e15e7bb904700cdd9046e3b2fa1fce237439ea", size = 9907609, upload-time = "2026-05-11T18:52:30.982Z" }, - { url = "https://files.pythonhosted.org/packages/53/85/1b7f563ebc6357c27233a02a96b589bcce1fa9c6eb89fb4f0e56421d277e/pandas-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:5cc09a68b3120e0f54870dede8287a7bb1fa463907e4fcec1ea77cab6179bf7a", size = 9165596, upload-time = "2026-05-11T18:52:33.334Z" }, - { url = "https://files.pythonhosted.org/packages/24/f1/392f8c5bfc16f66a0d2d41561c01627c228fe7ed2a0d056ef11315042570/pandas-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fed2ff7fd9779120e388e285fc029bd5cf9490cdd2e4166a9ee22c0e49a9ab09", size = 10357846, upload-time = "2026-05-11T18:52:36.143Z" }, - { url = "https://files.pythonhosted.org/packages/cf/3d/b16412745651e855f357e5e66930248688378853a6e2698a214e331fba1f/pandas-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b168fc218fd80a6cbdbdbc1a97ddc7889ed057d7eb45f50d866ceab5f39904c4", size = 9899550, upload-time = "2026-05-11T18:52:38.976Z" }, - { url = "https://files.pythonhosted.org/packages/31/a8/fa2535168fffcedf67f4f6de28d2dd903a747ca7c8ea6989451aaeb3a92f/pandas-3.0.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0383c72c75cdcca61a9e116e611143902dbfd08bff356829c2f6d1cf40a9ca8c", size = 10412965, upload-time = "2026-05-11T18:52:41.915Z" }, - { url = "https://files.pythonhosted.org/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6dc0b3fd2169c9157deed50b4d519553a3655c8c6a96027136d654592be973a9", size = 10894600, upload-time = "2026-05-11T18:52:45.02Z" }, - { url = "https://files.pythonhosted.org/packages/c9/a4/2eb28f2fccb4ced4a2c79ab2a5dee9ade1ebf44922ebad6fea158c9f95d4/pandas-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e65d5407dc0b394f509699650e4a2ec01c0514f21850f453fa60f3be79a5dbf", size = 11422824, upload-time = "2026-05-11T18:52:48.058Z" }, - { url = "https://files.pythonhosted.org/packages/f8/45/830bb57f533a4604b355e07edcb8ea18cf88b5f94e5fca92f27052d7c597/pandas-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f8894dc474d648fe7b6ff0ca9b0bd73950d19952bc1a6534540762c5d79d305c", size = 11950889, upload-time = "2026-05-11T18:52:50.905Z" }, - { url = "https://files.pythonhosted.org/packages/b9/c5/fc1b368f303087d20e8c9bf3d6ceb186263cfac0ade735cd938538bea839/pandas-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:c7be265b62cef88e253a941e4698604973736dcfe242fdb5198f0f7bc473cdcc", size = 9755463, upload-time = "2026-05-11T18:52:53.386Z" }, - { url = "https://files.pythonhosted.org/packages/86/bd/fda8f9705b1b09c6ebe14bfc0fa0e4ec8584d54ea673628f157ff55131af/pandas-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:557409bc4178e70ee8d9ddb494798e51ebf6ea59330f6be22c51bab2a7db6c49", size = 9066158, upload-time = "2026-05-11T18:52:56.038Z" }, - { url = "https://files.pythonhosted.org/packages/c5/90/62d8302883c44308c477e222c3daf7c813a34c8e96985882fbd53d964352/pandas-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:67b3b64c11910cfa29f4e94a14d3bff9ee693b6fc76055e7cad549cee0aec5fa", size = 10331071, upload-time = "2026-05-11T18:52:58.838Z" }, - { url = "https://files.pythonhosted.org/packages/7f/ae/6a6493c783a101f165e4356953ba3c74d6f77f0042fa7d753da9dfbb640c/pandas-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:39436b377d56d2a2e52d0395bdbee171f01068e99af5250509aceeb929f765c7", size = 9875690, upload-time = "2026-05-11T18:53:01.431Z" }, - { url = "https://files.pythonhosted.org/packages/62/7c/5df8e9f56c69a2769fbe9382a5ef8f2658c007e376434e1e2cbb57ad895f/pandas-3.0.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4be06d68f9ddcfc645b87534911da79a8fbffc7573c80e0edcf42a5020624d8", size = 10381634, upload-time = "2026-05-11T18:53:04.393Z" }, - { url = "https://files.pythonhosted.org/packages/99/68/1237369725aa617bb358263d535803e3053fdbc593513ec5ed9c9896b5b6/pandas-3.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4eeb6830daf35a71cc09649bd823e2b542dac246cdee9614c6e4bd65028cd6a", size = 10891243, upload-time = "2026-05-11T18:53:07.643Z" }, - { url = "https://files.pythonhosted.org/packages/25/93/77d108e8af7222b4a503ebde0e30215b1c2e4f8e53a526431890f22d5586/pandas-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1928e07221f82db493cd4af1e23c1bfca524a19a4699887975bff68f49a72bfb", size = 11388659, upload-time = "2026-05-11T18:53:10.634Z" }, - { url = "https://files.pythonhosted.org/packages/d0/bd/eff5b4399f332ac386c853f6cd2bd3fa2ca0061b9f36ecd9c4d7c4265649/pandas-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51b1fe551acb77dac643c6fda86084d8d446c10fe64b06a9cc29c4cc8540e7f2", size = 11942880, upload-time = "2026-05-11T18:53:13.536Z" }, - { url = "https://files.pythonhosted.org/packages/2c/20/559ace4200982c3887d0b86bfd0d856a2143ef8ddab63cc07934951a964c/pandas-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:a82d532a3351d435432cd913edbccaf8b8e01d4dd0e5ced5a8d2e8ecd94c7e44", size = 9757091, upload-time = "2026-05-11T18:53:16.306Z" }, - { url = "https://files.pythonhosted.org/packages/3a/66/69055a09fe200f29f922a3eeec4804611900b95f52d932ece3393c3c0c19/pandas-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:275c14e0fce14a2ec20eee474aecd305478ea3c1e6f6a9d8fe219a165542717e", size = 9057282, upload-time = "2026-05-11T18:53:18.768Z" }, - { url = "https://files.pythonhosted.org/packages/57/0e/efe801b0e6811e8e650cd21b7f2608e30f08a7067e2bf6e8752b0d56ee3c/pandas-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:46997386d528eb40376ecd6b033cf4a8a1e5282580f68f43de875b78cba2199d", size = 10767016, upload-time = "2026-05-11T18:53:21.227Z" }, - { url = "https://files.pythonhosted.org/packages/ea/dc/eb55135a1d5f0f0519f28da1f609a206d2cad1f9c35c32d51e38dd7261ae/pandas-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:261e308dfb22448384b7580cf719d2f998fe2966c92893c3e77d14008af1f066", size = 10420210, upload-time = "2026-05-11T18:53:23.982Z" }, - { url = "https://files.pythonhosted.org/packages/c6/3e/b1d5d955ce33ffecb407465a60bc32769d74fcf68224b7ae67ae11d4dea4/pandas-3.0.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd1a5d1def6a46002e964510bdc67c368aa0951df5d1d9f8365336f5a1f490cd", size = 10336126, upload-time = "2026-05-11T18:53:26.731Z" }, - { url = "https://files.pythonhosted.org/packages/f5/76/a01261711ab60a22d71b862f0de20e4c504bf80457270ad8cb42110f6abc/pandas-3.0.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d72828c20c6d6e83e1e22a6a3b47b326b71664112fa9705dcbccfd7a39b62085", size = 10728051, upload-time = "2026-05-11T18:53:29.125Z" }, - { url = "https://files.pythonhosted.org/packages/e9/21/ea191195e587b18cf682e97f433f81b2d0fbe341380e80a3e0d6e4403c8e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d26cbe1fcfc12e8fd900e2454163e466b2d3af84f7c75481df7683ffc073d870", size = 11350796, upload-time = "2026-05-11T18:53:32.056Z" }, - { url = "https://files.pythonhosted.org/packages/64/69/f0eaaf54939f0e8c6768fd06be9af2cef9b36048b96dfb9e1b2c685a807e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e91cec1879ada0624fc3dc9953c5cbd60208e59c0db28f540c5d6d47502422f", size = 11799741, upload-time = "2026-05-11T18:53:34.985Z" }, - { url = "https://files.pythonhosted.org/packages/45/a4/865e0e510cae5fc2194de4db28be638952de942571ba9125934fd9c01d47/pandas-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:08d789b41f87e0905880e293cedf6197ce71fe67cc081358b1e148a491b9bd13", size = 10499958, upload-time = "2026-05-11T18:53:37.857Z" }, - { url = "https://files.pythonhosted.org/packages/86/54/effdcc3c0ff7a08037889200e148ebe94c16c4f653be078c7b3675955df1/pandas-3.0.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3650109c0f22879df8bd6179ab9ee3d7f1d1d4e7e0094a3f0032d9f51e2e64ac", size = 10336065, upload-time = "2026-05-11T18:53:41.099Z" }, - { url = "https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bab900348131a7db1f69a7309ef141fd5680f1487094193bcbbb61791573bf8f", size = 9926101, upload-time = "2026-05-11T18:53:43.515Z" }, - { url = "https://files.pythonhosted.org/packages/ae/e9/e35cf11c8a136e757b956f5f0efdcaa50aecde85ea055f1898dfc68262f3/pandas-3.0.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba7e08b9ac1d54569cd1e256e3668975ed624d6826f7b68df0342b012007bddb", size = 10457553, upload-time = "2026-05-11T18:53:46.394Z" }, - { url = "https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d71c63ae4ebdbf70209742096f1fc46a83a0613c99d4b23766cced9ff8cd62a", size = 10914065, upload-time = "2026-05-11T18:53:49.134Z" }, - { url = "https://files.pythonhosted.org/packages/c4/c2/1ef644445fcd72e3627bceec77e3560636f87ddce4ed841afe76b83b5bf9/pandas-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e3a2ec42c98ffa2565a67e08e218d06d72576d758d90facb7c00805194d8f360", size = 11459188, upload-time = "2026-05-11T18:53:52.527Z" }, - { url = "https://files.pythonhosted.org/packages/7e/49/4d8d4f42cbc9c4adc7a1870f269c02cbd6cd40d059622c06fb298addcbad/pandas-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:335f62418ed562cfc3c49e9e196375c28b729dcef8543abf4f9438e381bf3c76", size = 11982966, upload-time = "2026-05-11T18:53:55.043Z" }, - { url = "https://files.pythonhosted.org/packages/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:3c20a521bbb85902f79f7270c80a59e1b5452d96d170c034f207181870f97ac5", size = 9876755, upload-time = "2026-05-11T18:53:58.067Z" }, - { url = "https://files.pythonhosted.org/packages/2a/af/33c469653b0ba03b50c3a98192d4c07f0c75c66b263ceb097fce0ee97d31/pandas-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:a2d2dff8a04f3917b55ab3910c32990f8ddf7eceba114947838cefa976a68977", size = 9198658, upload-time = "2026-05-11T18:54:00.733Z" }, - { url = "https://files.pythonhosted.org/packages/a2/fa/b8c257bd76b8bd060c3a9151c1fca05e9b9c5e3af5d0f549c0356f6d143d/pandas-3.0.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:0d589105b3c14645af1738ff279b2995102d8f7a03b0a66dc8d95550eb513e04", size = 10787242, upload-time = "2026-05-11T18:54:03.564Z" }, - { url = "https://files.pythonhosted.org/packages/54/eb/f19206ffb0bf1919002969aa448b4702c6594845156a6f8050674855aac3/pandas-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:13fc1e853d9e04743d11ba75a985ccbc2a317fe07d8af61e445a6fd24dacd6a6", size = 10436369, upload-time = "2026-05-11T18:54:06.311Z" }, - { url = "https://files.pythonhosted.org/packages/fd/24/c7c39fb4fe22b71a0c2d78bf0c585c600092d85f94f086d2b3b2f6ca27e2/pandas-3.0.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:819959dab7bbd0049c15623fbac4e29a191b9528160a61fb1032242d8ced2d9c", size = 10358306, upload-time = "2026-05-11T18:54:09.085Z" }, - { url = "https://files.pythonhosted.org/packages/16/ec/dd2a9eb7fa1204df88c0864164e35b228ac581062ac612ba0a67fd812e4c/pandas-3.0.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:60ae316d3fd75d1858d450d0db0103ea2be3e7d4a95ec2f064f7e2ae63f7b028", size = 10758394, upload-time = "2026-05-11T18:54:11.956Z" }, - { url = "https://files.pythonhosted.org/packages/95/6e/00c61ea8e85b4f6d8d35e11852a1a4998fc7fafc91c6a602d1cc9c972d64/pandas-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bd3a518890b400d32f9023722dc9a9a5c969f00b415419a3c06c043f09bb5d7d", size = 11375717, upload-time = "2026-05-11T18:54:14.539Z" }, - { url = "https://files.pythonhosted.org/packages/31/89/8fc1c268969fac43688d65fd92e67df24bd128d53cb4d2eee534cd307399/pandas-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9c39be2d709d01fa972a0cabc522389fceca4f3969332ba25a7d6c5802cf976a", size = 11828897, upload-time = "2026-05-11T18:54:17.146Z" }, - { url = "https://files.pythonhosted.org/packages/56/3b/e7d20dea247a3e6dc0bd8a6953854afbedc03951def4e7371e05e7263e25/pandas-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4db8c527972a821cf5286b40ccc57642a39bc62e62022b42f99f8a67fca8c3a1", size = 10900855, upload-time = "2026-05-11T18:54:19.72Z" }, - { url = "https://files.pythonhosted.org/packages/0f/54/68a0978d1ef8502b8492099beaa6e7a0c1b32e3b5d4f677f5810cb08711c/pandas-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b2c95f8bfc1ee412bf482605d7bfd30c12d1d26bd59fdd91efeef1d4718decb1", size = 9466464, upload-time = "2026-05-11T18:54:22.754Z" }, -] - -[[package]] -name = "pathspec" -version = "1.0.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4c/b2/bb8e495d5262bfec41ab5cb18f522f1012933347fb5d9e62452d446baca2/pathspec-1.0.3.tar.gz", hash = "sha256:bac5cf97ae2c2876e2d25ebb15078eb04d76e4b98921ee31c6f85ade8b59444d", size = 130841, upload-time = "2026-01-09T15:46:46.009Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/32/2b/121e912bd60eebd623f873fd090de0e84f322972ab25a7f9044c056804ed/pathspec-1.0.3-py3-none-any.whl", hash = "sha256:e80767021c1cc524aa3fb14bedda9c34406591343cc42797b386ce7b9354fb6c", size = 55021, upload-time = "2026-01-09T15:46:44.652Z" }, -] - -[[package]] -name = "pluggy" -version = "1.6.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, -] - -[[package]] -name = "profound" -version = "0.53.0" -source = { editable = "." } -dependencies = [ - { name = "anyio" }, - { name = "distro" }, - { name = "httpx" }, - { name = "pydantic", version = "1.10.26", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'group-8-profound-pydantic-v1'" }, - { name = "pydantic", version = "2.12.5", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'group-8-profound-pydantic-v2' or extra != 'group-8-profound-pydantic-v1'" }, - { name = "sniffio" }, - { name = "typing-extensions" }, -] - -[package.optional-dependencies] -aiohttp = [ - { name = "aiohttp" }, - { name = "httpx-aiohttp" }, -] - -[package.dev-dependencies] -dev = [ - { name = "dirty-equals" }, - { name = "importlib-metadata" }, - { name = "mypy" }, - { name = "pyright" }, - { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "pytest", version = "9.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "pytest-asyncio", version = "1.2.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "pytest-asyncio", version = "1.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "pytest-xdist" }, - { name = "respx" }, - { name = "rich" }, - { name = "ruff" }, - { name = "time-machine", version = "2.19.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "time-machine", version = "3.2.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, -] -pydantic-v1 = [ - { name = "pydantic", version = "1.10.26", source = { registry = "https://pypi.org/simple" } }, -] -pydantic-v2 = [ - { name = "pydantic", version = "2.12.5", source = { registry = "https://pypi.org/simple" } }, -] - -[package.metadata] -requires-dist = [ - { name = "aiohttp", marker = "extra == 'aiohttp'" }, - { name = "anyio", specifier = ">=3.5.0,<5" }, - { name = "distro", specifier = ">=1.7.0,<2" }, - { name = "httpx", specifier = ">=0.23.0,<1" }, - { name = "httpx-aiohttp", marker = "extra == 'aiohttp'", specifier = ">=0.1.9" }, - { name = "pydantic", specifier = ">=1.9.0,<3" }, - { name = "sniffio" }, - { name = "typing-extensions", specifier = ">=4.14,<5" }, -] -provides-extras = ["aiohttp"] - -[package.metadata.requires-dev] -dev = [ - { name = "dirty-equals", specifier = ">=0.6.0" }, - { name = "importlib-metadata", specifier = ">=6.7.0" }, - { name = "mypy", specifier = "==1.17" }, - { name = "pyright", specifier = "==1.1.399" }, - { name = "pytest" }, - { name = "pytest-asyncio" }, - { name = "pytest-xdist", specifier = ">=3.6.1" }, - { name = "respx" }, - { name = "rich", specifier = ">=13.7.1" }, - { name = "ruff" }, - { name = "time-machine" }, -] -pydantic-v1 = [{ name = "pydantic", specifier = ">=1.9.0,<2" }] -pydantic-v2 = [ - { name = "pydantic", marker = "python_full_version < '3.14'", specifier = "~=2.0" }, - { name = "pydantic", marker = "python_full_version >= '3.14'", specifier = "~=2.12" }, -] - -[[package]] -name = "profound-examples" -version = "0.1.0" -source = { virtual = "examples" } -dependencies = [ - { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "profound" }, - { name = "pytz" }, -] - -[package.dev-dependencies] -dev = [ - { name = "ruff" }, -] - -[package.metadata] -requires-dist = [ - { name = "pandas", specifier = ">=2.3.3" }, - { name = "profound", editable = "." }, - { name = "pytz", specifier = ">=2025.2" }, -] - -[package.metadata.requires-dev] -dev = [{ name = "ruff", specifier = ">=0.14.13" }] - -[[package]] -name = "propcache" -version = "0.4.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9e/da/e9fc233cf63743258bff22b3dfa7ea5baef7b5bc324af47a0ad89b8ffc6f/propcache-0.4.1.tar.gz", hash = "sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d", size = 46442, upload-time = "2025-10-08T19:49:02.291Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/0e/934b541323035566a9af292dba85a195f7b78179114f2c6ebb24551118a9/propcache-0.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c2d1fa3201efaf55d730400d945b5b3ab6e672e100ba0f9a409d950ab25d7db", size = 79534, upload-time = "2025-10-08T19:46:02.083Z" }, - { url = "https://files.pythonhosted.org/packages/a1/6b/db0d03d96726d995dc7171286c6ba9d8d14251f37433890f88368951a44e/propcache-0.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1eb2994229cc8ce7fe9b3db88f5465f5fd8651672840b2e426b88cdb1a30aac8", size = 45526, upload-time = "2025-10-08T19:46:03.884Z" }, - { url = "https://files.pythonhosted.org/packages/e4/c3/82728404aea669e1600f304f2609cde9e665c18df5a11cdd57ed73c1dceb/propcache-0.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:66c1f011f45a3b33d7bcb22daed4b29c0c9e2224758b6be00686731e1b46f925", size = 47263, upload-time = "2025-10-08T19:46:05.405Z" }, - { url = "https://files.pythonhosted.org/packages/df/1b/39313ddad2bf9187a1432654c38249bab4562ef535ef07f5eb6eb04d0b1b/propcache-0.4.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9a52009f2adffe195d0b605c25ec929d26b36ef986ba85244891dee3b294df21", size = 201012, upload-time = "2025-10-08T19:46:07.165Z" }, - { url = "https://files.pythonhosted.org/packages/5b/01/f1d0b57d136f294a142acf97f4ed58c8e5b974c21e543000968357115011/propcache-0.4.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5d4e2366a9c7b837555cf02fb9be2e3167d333aff716332ef1b7c3a142ec40c5", size = 209491, upload-time = "2025-10-08T19:46:08.909Z" }, - { url = "https://files.pythonhosted.org/packages/a1/c8/038d909c61c5bb039070b3fb02ad5cccdb1dde0d714792e251cdb17c9c05/propcache-0.4.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9d2b6caef873b4f09e26ea7e33d65f42b944837563a47a94719cc3544319a0db", size = 215319, upload-time = "2025-10-08T19:46:10.7Z" }, - { url = "https://files.pythonhosted.org/packages/08/57/8c87e93142b2c1fa2408e45695205a7ba05fb5db458c0bf5c06ba0e09ea6/propcache-0.4.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2b16ec437a8c8a965ecf95739448dd938b5c7f56e67ea009f4300d8df05f32b7", size = 196856, upload-time = "2025-10-08T19:46:12.003Z" }, - { url = "https://files.pythonhosted.org/packages/42/df/5615fec76aa561987a534759b3686008a288e73107faa49a8ae5795a9f7a/propcache-0.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:296f4c8ed03ca7476813fe666c9ea97869a8d7aec972618671b33a38a5182ef4", size = 193241, upload-time = "2025-10-08T19:46:13.495Z" }, - { url = "https://files.pythonhosted.org/packages/d5/21/62949eb3a7a54afe8327011c90aca7e03547787a88fb8bd9726806482fea/propcache-0.4.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:1f0978529a418ebd1f49dad413a2b68af33f85d5c5ca5c6ca2a3bed375a7ac60", size = 190552, upload-time = "2025-10-08T19:46:14.938Z" }, - { url = "https://files.pythonhosted.org/packages/30/ee/ab4d727dd70806e5b4de96a798ae7ac6e4d42516f030ee60522474b6b332/propcache-0.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fd138803047fb4c062b1c1dd95462f5209456bfab55c734458f15d11da288f8f", size = 200113, upload-time = "2025-10-08T19:46:16.695Z" }, - { url = "https://files.pythonhosted.org/packages/8a/0b/38b46208e6711b016aa8966a3ac793eee0d05c7159d8342aa27fc0bc365e/propcache-0.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8c9b3cbe4584636d72ff556d9036e0c9317fa27b3ac1f0f558e7e84d1c9c5900", size = 200778, upload-time = "2025-10-08T19:46:18.023Z" }, - { url = "https://files.pythonhosted.org/packages/cf/81/5abec54355ed344476bee711e9f04815d4b00a311ab0535599204eecc257/propcache-0.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f93243fdc5657247533273ac4f86ae106cc6445a0efacb9a1bfe982fcfefd90c", size = 193047, upload-time = "2025-10-08T19:46:19.449Z" }, - { url = "https://files.pythonhosted.org/packages/ec/b6/1f237c04e32063cb034acd5f6ef34ef3a394f75502e72703545631ab1ef6/propcache-0.4.1-cp310-cp310-win32.whl", hash = "sha256:a0ee98db9c5f80785b266eb805016e36058ac72c51a064040f2bc43b61101cdb", size = 38093, upload-time = "2025-10-08T19:46:20.643Z" }, - { url = "https://files.pythonhosted.org/packages/a6/67/354aac4e0603a15f76439caf0427781bcd6797f370377f75a642133bc954/propcache-0.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:1cdb7988c4e5ac7f6d175a28a9aa0c94cb6f2ebe52756a3c0cda98d2809a9e37", size = 41638, upload-time = "2025-10-08T19:46:21.935Z" }, - { url = "https://files.pythonhosted.org/packages/e0/e1/74e55b9fd1a4c209ff1a9a824bf6c8b3d1fc5a1ac3eabe23462637466785/propcache-0.4.1-cp310-cp310-win_arm64.whl", hash = "sha256:d82ad62b19645419fe79dd63b3f9253e15b30e955c0170e5cebc350c1844e581", size = 38229, upload-time = "2025-10-08T19:46:23.368Z" }, - { url = "https://files.pythonhosted.org/packages/8c/d4/4e2c9aaf7ac2242b9358f98dccd8f90f2605402f5afeff6c578682c2c491/propcache-0.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:60a8fda9644b7dfd5dece8c61d8a85e271cb958075bfc4e01083c148b61a7caf", size = 80208, upload-time = "2025-10-08T19:46:24.597Z" }, - { url = "https://files.pythonhosted.org/packages/c2/21/d7b68e911f9c8e18e4ae43bdbc1e1e9bbd971f8866eb81608947b6f585ff/propcache-0.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c30b53e7e6bda1d547cabb47c825f3843a0a1a42b0496087bb58d8fedf9f41b5", size = 45777, upload-time = "2025-10-08T19:46:25.733Z" }, - { url = "https://files.pythonhosted.org/packages/d3/1d/11605e99ac8ea9435651ee71ab4cb4bf03f0949586246476a25aadfec54a/propcache-0.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6918ecbd897443087a3b7cd978d56546a812517dcaaca51b49526720571fa93e", size = 47647, upload-time = "2025-10-08T19:46:27.304Z" }, - { url = "https://files.pythonhosted.org/packages/58/1a/3c62c127a8466c9c843bccb503d40a273e5cc69838805f322e2826509e0d/propcache-0.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3d902a36df4e5989763425a8ab9e98cd8ad5c52c823b34ee7ef307fd50582566", size = 214929, upload-time = "2025-10-08T19:46:28.62Z" }, - { url = "https://files.pythonhosted.org/packages/56/b9/8fa98f850960b367c4b8fe0592e7fc341daa7a9462e925228f10a60cf74f/propcache-0.4.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a9695397f85973bb40427dedddf70d8dc4a44b22f1650dd4af9eedf443d45165", size = 221778, upload-time = "2025-10-08T19:46:30.358Z" }, - { url = "https://files.pythonhosted.org/packages/46/a6/0ab4f660eb59649d14b3d3d65c439421cf2f87fe5dd68591cbe3c1e78a89/propcache-0.4.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2bb07ffd7eaad486576430c89f9b215f9e4be68c4866a96e97db9e97fead85dc", size = 228144, upload-time = "2025-10-08T19:46:32.607Z" }, - { url = "https://files.pythonhosted.org/packages/52/6a/57f43e054fb3d3a56ac9fc532bc684fc6169a26c75c353e65425b3e56eef/propcache-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd6f30fdcf9ae2a70abd34da54f18da086160e4d7d9251f81f3da0ff84fc5a48", size = 210030, upload-time = "2025-10-08T19:46:33.969Z" }, - { url = "https://files.pythonhosted.org/packages/40/e2/27e6feebb5f6b8408fa29f5efbb765cd54c153ac77314d27e457a3e993b7/propcache-0.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fc38cba02d1acba4e2869eef1a57a43dfbd3d49a59bf90dda7444ec2be6a5570", size = 208252, upload-time = "2025-10-08T19:46:35.309Z" }, - { url = "https://files.pythonhosted.org/packages/9e/f8/91c27b22ccda1dbc7967f921c42825564fa5336a01ecd72eb78a9f4f53c2/propcache-0.4.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:67fad6162281e80e882fb3ec355398cf72864a54069d060321f6cd0ade95fe85", size = 202064, upload-time = "2025-10-08T19:46:36.993Z" }, - { url = "https://files.pythonhosted.org/packages/f2/26/7f00bd6bd1adba5aafe5f4a66390f243acab58eab24ff1a08bebb2ef9d40/propcache-0.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f10207adf04d08bec185bae14d9606a1444715bc99180f9331c9c02093e1959e", size = 212429, upload-time = "2025-10-08T19:46:38.398Z" }, - { url = "https://files.pythonhosted.org/packages/84/89/fd108ba7815c1117ddca79c228f3f8a15fc82a73bca8b142eb5de13b2785/propcache-0.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e9b0d8d0845bbc4cfcdcbcdbf5086886bc8157aa963c31c777ceff7846c77757", size = 216727, upload-time = "2025-10-08T19:46:39.732Z" }, - { url = "https://files.pythonhosted.org/packages/79/37/3ec3f7e3173e73f1d600495d8b545b53802cbf35506e5732dd8578db3724/propcache-0.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:981333cb2f4c1896a12f4ab92a9cc8f09ea664e9b7dbdc4eff74627af3a11c0f", size = 205097, upload-time = "2025-10-08T19:46:41.025Z" }, - { url = "https://files.pythonhosted.org/packages/61/b0/b2631c19793f869d35f47d5a3a56fb19e9160d3c119f15ac7344fc3ccae7/propcache-0.4.1-cp311-cp311-win32.whl", hash = "sha256:f1d2f90aeec838a52f1c1a32fe9a619fefd5e411721a9117fbf82aea638fe8a1", size = 38084, upload-time = "2025-10-08T19:46:42.693Z" }, - { url = "https://files.pythonhosted.org/packages/f4/78/6cce448e2098e9f3bfc91bb877f06aa24b6ccace872e39c53b2f707c4648/propcache-0.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:364426a62660f3f699949ac8c621aad6977be7126c5807ce48c0aeb8e7333ea6", size = 41637, upload-time = "2025-10-08T19:46:43.778Z" }, - { url = "https://files.pythonhosted.org/packages/9c/e9/754f180cccd7f51a39913782c74717c581b9cc8177ad0e949f4d51812383/propcache-0.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:e53f3a38d3510c11953f3e6a33f205c6d1b001129f972805ca9b42fc308bc239", size = 38064, upload-time = "2025-10-08T19:46:44.872Z" }, - { url = "https://files.pythonhosted.org/packages/a2/0f/f17b1b2b221d5ca28b4b876e8bb046ac40466513960646bda8e1853cdfa2/propcache-0.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e153e9cd40cc8945138822807139367f256f89c6810c2634a4f6902b52d3b4e2", size = 80061, upload-time = "2025-10-08T19:46:46.075Z" }, - { url = "https://files.pythonhosted.org/packages/76/47/8ccf75935f51448ba9a16a71b783eb7ef6b9ee60f5d14c7f8a8a79fbeed7/propcache-0.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cd547953428f7abb73c5ad82cbb32109566204260d98e41e5dfdc682eb7f8403", size = 46037, upload-time = "2025-10-08T19:46:47.23Z" }, - { url = "https://files.pythonhosted.org/packages/0a/b6/5c9a0e42df4d00bfb4a3cbbe5cf9f54260300c88a0e9af1f47ca5ce17ac0/propcache-0.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f048da1b4f243fc44f205dfd320933a951b8d89e0afd4c7cacc762a8b9165207", size = 47324, upload-time = "2025-10-08T19:46:48.384Z" }, - { url = "https://files.pythonhosted.org/packages/9e/d3/6c7ee328b39a81ee877c962469f1e795f9db87f925251efeb0545e0020d0/propcache-0.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ec17c65562a827bba85e3872ead335f95405ea1674860d96483a02f5c698fa72", size = 225505, upload-time = "2025-10-08T19:46:50.055Z" }, - { url = "https://files.pythonhosted.org/packages/01/5d/1c53f4563490b1d06a684742cc6076ef944bc6457df6051b7d1a877c057b/propcache-0.4.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:405aac25c6394ef275dee4c709be43745d36674b223ba4eb7144bf4d691b7367", size = 230242, upload-time = "2025-10-08T19:46:51.815Z" }, - { url = "https://files.pythonhosted.org/packages/20/e1/ce4620633b0e2422207c3cb774a0ee61cac13abc6217763a7b9e2e3f4a12/propcache-0.4.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0013cb6f8dde4b2a2f66903b8ba740bdfe378c943c4377a200551ceb27f379e4", size = 238474, upload-time = "2025-10-08T19:46:53.208Z" }, - { url = "https://files.pythonhosted.org/packages/46/4b/3aae6835b8e5f44ea6a68348ad90f78134047b503765087be2f9912140ea/propcache-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15932ab57837c3368b024473a525e25d316d8353016e7cc0e5ba9eb343fbb1cf", size = 221575, upload-time = "2025-10-08T19:46:54.511Z" }, - { url = "https://files.pythonhosted.org/packages/6e/a5/8a5e8678bcc9d3a1a15b9a29165640d64762d424a16af543f00629c87338/propcache-0.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:031dce78b9dc099f4c29785d9cf5577a3faf9ebf74ecbd3c856a7b92768c3df3", size = 216736, upload-time = "2025-10-08T19:46:56.212Z" }, - { url = "https://files.pythonhosted.org/packages/f1/63/b7b215eddeac83ca1c6b934f89d09a625aa9ee4ba158338854c87210cc36/propcache-0.4.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ab08df6c9a035bee56e31af99be621526bd237bea9f32def431c656b29e41778", size = 213019, upload-time = "2025-10-08T19:46:57.595Z" }, - { url = "https://files.pythonhosted.org/packages/57/74/f580099a58c8af587cac7ba19ee7cb418506342fbbe2d4a4401661cca886/propcache-0.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4d7af63f9f93fe593afbf104c21b3b15868efb2c21d07d8732c0c4287e66b6a6", size = 220376, upload-time = "2025-10-08T19:46:59.067Z" }, - { url = "https://files.pythonhosted.org/packages/c4/ee/542f1313aff7eaf19c2bb758c5d0560d2683dac001a1c96d0774af799843/propcache-0.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cfc27c945f422e8b5071b6e93169679e4eb5bf73bbcbf1ba3ae3a83d2f78ebd9", size = 226988, upload-time = "2025-10-08T19:47:00.544Z" }, - { url = "https://files.pythonhosted.org/packages/8f/18/9c6b015dd9c6930f6ce2229e1f02fb35298b847f2087ea2b436a5bfa7287/propcache-0.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:35c3277624a080cc6ec6f847cbbbb5b49affa3598c4535a0a4682a697aaa5c75", size = 215615, upload-time = "2025-10-08T19:47:01.968Z" }, - { url = "https://files.pythonhosted.org/packages/80/9e/e7b85720b98c45a45e1fca6a177024934dc9bc5f4d5dd04207f216fc33ed/propcache-0.4.1-cp312-cp312-win32.whl", hash = "sha256:671538c2262dadb5ba6395e26c1731e1d52534bfe9ae56d0b5573ce539266aa8", size = 38066, upload-time = "2025-10-08T19:47:03.503Z" }, - { url = "https://files.pythonhosted.org/packages/54/09/d19cff2a5aaac632ec8fc03737b223597b1e347416934c1b3a7df079784c/propcache-0.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:cb2d222e72399fcf5890d1d5cc1060857b9b236adff2792ff48ca2dfd46c81db", size = 41655, upload-time = "2025-10-08T19:47:04.973Z" }, - { url = "https://files.pythonhosted.org/packages/68/ab/6b5c191bb5de08036a8c697b265d4ca76148efb10fa162f14af14fb5f076/propcache-0.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:204483131fb222bdaaeeea9f9e6c6ed0cac32731f75dfc1d4a567fc1926477c1", size = 37789, upload-time = "2025-10-08T19:47:06.077Z" }, - { url = "https://files.pythonhosted.org/packages/bf/df/6d9c1b6ac12b003837dde8a10231a7344512186e87b36e855bef32241942/propcache-0.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:43eedf29202c08550aac1d14e0ee619b0430aaef78f85864c1a892294fbc28cf", size = 77750, upload-time = "2025-10-08T19:47:07.648Z" }, - { url = "https://files.pythonhosted.org/packages/8b/e8/677a0025e8a2acf07d3418a2e7ba529c9c33caf09d3c1f25513023c1db56/propcache-0.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d62cdfcfd89ccb8de04e0eda998535c406bf5e060ffd56be6c586cbcc05b3311", size = 44780, upload-time = "2025-10-08T19:47:08.851Z" }, - { url = "https://files.pythonhosted.org/packages/89/a4/92380f7ca60f99ebae761936bc48a72a639e8a47b29050615eef757cb2a7/propcache-0.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cae65ad55793da34db5f54e4029b89d3b9b9490d8abe1b4c7ab5d4b8ec7ebf74", size = 46308, upload-time = "2025-10-08T19:47:09.982Z" }, - { url = "https://files.pythonhosted.org/packages/2d/48/c5ac64dee5262044348d1d78a5f85dd1a57464a60d30daee946699963eb3/propcache-0.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:333ddb9031d2704a301ee3e506dc46b1fe5f294ec198ed6435ad5b6a085facfe", size = 208182, upload-time = "2025-10-08T19:47:11.319Z" }, - { url = "https://files.pythonhosted.org/packages/c6/0c/cd762dd011a9287389a6a3eb43aa30207bde253610cca06824aeabfe9653/propcache-0.4.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:fd0858c20f078a32cf55f7e81473d96dcf3b93fd2ccdb3d40fdf54b8573df3af", size = 211215, upload-time = "2025-10-08T19:47:13.146Z" }, - { url = "https://files.pythonhosted.org/packages/30/3e/49861e90233ba36890ae0ca4c660e95df565b2cd15d4a68556ab5865974e/propcache-0.4.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:678ae89ebc632c5c204c794f8dab2837c5f159aeb59e6ed0539500400577298c", size = 218112, upload-time = "2025-10-08T19:47:14.913Z" }, - { url = "https://files.pythonhosted.org/packages/f1/8b/544bc867e24e1bd48f3118cecd3b05c694e160a168478fa28770f22fd094/propcache-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d472aeb4fbf9865e0c6d622d7f4d54a4e101a89715d8904282bb5f9a2f476c3f", size = 204442, upload-time = "2025-10-08T19:47:16.277Z" }, - { url = "https://files.pythonhosted.org/packages/50/a6/4282772fd016a76d3e5c0df58380a5ea64900afd836cec2c2f662d1b9bb3/propcache-0.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4d3df5fa7e36b3225954fba85589da77a0fe6a53e3976de39caf04a0db4c36f1", size = 199398, upload-time = "2025-10-08T19:47:17.962Z" }, - { url = "https://files.pythonhosted.org/packages/3e/ec/d8a7cd406ee1ddb705db2139f8a10a8a427100347bd698e7014351c7af09/propcache-0.4.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:ee17f18d2498f2673e432faaa71698032b0127ebf23ae5974eeaf806c279df24", size = 196920, upload-time = "2025-10-08T19:47:19.355Z" }, - { url = "https://files.pythonhosted.org/packages/f6/6c/f38ab64af3764f431e359f8baf9e0a21013e24329e8b85d2da32e8ed07ca/propcache-0.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:580e97762b950f993ae618e167e7be9256b8353c2dcd8b99ec100eb50f5286aa", size = 203748, upload-time = "2025-10-08T19:47:21.338Z" }, - { url = "https://files.pythonhosted.org/packages/d6/e3/fa846bd70f6534d647886621388f0a265254d30e3ce47e5c8e6e27dbf153/propcache-0.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:501d20b891688eb8e7aa903021f0b72d5a55db40ffaab27edefd1027caaafa61", size = 205877, upload-time = "2025-10-08T19:47:23.059Z" }, - { url = "https://files.pythonhosted.org/packages/e2/39/8163fc6f3133fea7b5f2827e8eba2029a0277ab2c5beee6c1db7b10fc23d/propcache-0.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a0bd56e5b100aef69bd8562b74b46254e7c8812918d3baa700c8a8009b0af66", size = 199437, upload-time = "2025-10-08T19:47:24.445Z" }, - { url = "https://files.pythonhosted.org/packages/93/89/caa9089970ca49c7c01662bd0eeedfe85494e863e8043565aeb6472ce8fe/propcache-0.4.1-cp313-cp313-win32.whl", hash = "sha256:bcc9aaa5d80322bc2fb24bb7accb4a30f81e90ab8d6ba187aec0744bc302ad81", size = 37586, upload-time = "2025-10-08T19:47:25.736Z" }, - { url = "https://files.pythonhosted.org/packages/f5/ab/f76ec3c3627c883215b5c8080debb4394ef5a7a29be811f786415fc1e6fd/propcache-0.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:381914df18634f5494334d201e98245c0596067504b9372d8cf93f4bb23e025e", size = 40790, upload-time = "2025-10-08T19:47:26.847Z" }, - { url = "https://files.pythonhosted.org/packages/59/1b/e71ae98235f8e2ba5004d8cb19765a74877abf189bc53fc0c80d799e56c3/propcache-0.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:8873eb4460fd55333ea49b7d189749ecf6e55bf85080f11b1c4530ed3034cba1", size = 37158, upload-time = "2025-10-08T19:47:27.961Z" }, - { url = "https://files.pythonhosted.org/packages/83/ce/a31bbdfc24ee0dcbba458c8175ed26089cf109a55bbe7b7640ed2470cfe9/propcache-0.4.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:92d1935ee1f8d7442da9c0c4fa7ac20d07e94064184811b685f5c4fada64553b", size = 81451, upload-time = "2025-10-08T19:47:29.445Z" }, - { url = "https://files.pythonhosted.org/packages/25/9c/442a45a470a68456e710d96cacd3573ef26a1d0a60067e6a7d5e655621ed/propcache-0.4.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:473c61b39e1460d386479b9b2f337da492042447c9b685f28be4f74d3529e566", size = 46374, upload-time = "2025-10-08T19:47:30.579Z" }, - { url = "https://files.pythonhosted.org/packages/f4/bf/b1d5e21dbc3b2e889ea4327044fb16312a736d97640fb8b6aa3f9c7b3b65/propcache-0.4.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c0ef0aaafc66fbd87842a3fe3902fd889825646bc21149eafe47be6072725835", size = 48396, upload-time = "2025-10-08T19:47:31.79Z" }, - { url = "https://files.pythonhosted.org/packages/f4/04/5b4c54a103d480e978d3c8a76073502b18db0c4bc17ab91b3cb5092ad949/propcache-0.4.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f95393b4d66bfae908c3ca8d169d5f79cd65636ae15b5e7a4f6e67af675adb0e", size = 275950, upload-time = "2025-10-08T19:47:33.481Z" }, - { url = "https://files.pythonhosted.org/packages/b4/c1/86f846827fb969c4b78b0af79bba1d1ea2156492e1b83dea8b8a6ae27395/propcache-0.4.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c07fda85708bc48578467e85099645167a955ba093be0a2dcba962195676e859", size = 273856, upload-time = "2025-10-08T19:47:34.906Z" }, - { url = "https://files.pythonhosted.org/packages/36/1d/fc272a63c8d3bbad6878c336c7a7dea15e8f2d23a544bda43205dfa83ada/propcache-0.4.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:af223b406d6d000830c6f65f1e6431783fc3f713ba3e6cc8c024d5ee96170a4b", size = 280420, upload-time = "2025-10-08T19:47:36.338Z" }, - { url = "https://files.pythonhosted.org/packages/07/0c/01f2219d39f7e53d52e5173bcb09c976609ba30209912a0680adfb8c593a/propcache-0.4.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a78372c932c90ee474559c5ddfffd718238e8673c340dc21fe45c5b8b54559a0", size = 263254, upload-time = "2025-10-08T19:47:37.692Z" }, - { url = "https://files.pythonhosted.org/packages/2d/18/cd28081658ce597898f0c4d174d4d0f3c5b6d4dc27ffafeef835c95eb359/propcache-0.4.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:564d9f0d4d9509e1a870c920a89b2fec951b44bf5ba7d537a9e7c1ccec2c18af", size = 261205, upload-time = "2025-10-08T19:47:39.659Z" }, - { url = "https://files.pythonhosted.org/packages/7a/71/1f9e22eb8b8316701c2a19fa1f388c8a3185082607da8e406a803c9b954e/propcache-0.4.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:17612831fda0138059cc5546f4d12a2aacfb9e47068c06af35c400ba58ba7393", size = 247873, upload-time = "2025-10-08T19:47:41.084Z" }, - { url = "https://files.pythonhosted.org/packages/4a/65/3d4b61f36af2b4eddba9def857959f1016a51066b4f1ce348e0cf7881f58/propcache-0.4.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:41a89040cb10bd345b3c1a873b2bf36413d48da1def52f268a055f7398514874", size = 262739, upload-time = "2025-10-08T19:47:42.51Z" }, - { url = "https://files.pythonhosted.org/packages/2a/42/26746ab087faa77c1c68079b228810436ccd9a5ce9ac85e2b7307195fd06/propcache-0.4.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e35b88984e7fa64aacecea39236cee32dd9bd8c55f57ba8a75cf2399553f9bd7", size = 263514, upload-time = "2025-10-08T19:47:43.927Z" }, - { url = "https://files.pythonhosted.org/packages/94/13/630690fe201f5502d2403dd3cfd451ed8858fe3c738ee88d095ad2ff407b/propcache-0.4.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f8b465489f927b0df505cbe26ffbeed4d6d8a2bbc61ce90eb074ff129ef0ab1", size = 257781, upload-time = "2025-10-08T19:47:45.448Z" }, - { url = "https://files.pythonhosted.org/packages/92/f7/1d4ec5841505f423469efbfc381d64b7b467438cd5a4bbcbb063f3b73d27/propcache-0.4.1-cp313-cp313t-win32.whl", hash = "sha256:2ad890caa1d928c7c2965b48f3a3815c853180831d0e5503d35cf00c472f4717", size = 41396, upload-time = "2025-10-08T19:47:47.202Z" }, - { url = "https://files.pythonhosted.org/packages/48/f0/615c30622316496d2cbbc29f5985f7777d3ada70f23370608c1d3e081c1f/propcache-0.4.1-cp313-cp313t-win_amd64.whl", hash = "sha256:f7ee0e597f495cf415bcbd3da3caa3bd7e816b74d0d52b8145954c5e6fd3ff37", size = 44897, upload-time = "2025-10-08T19:47:48.336Z" }, - { url = "https://files.pythonhosted.org/packages/fd/ca/6002e46eccbe0e33dcd4069ef32f7f1c9e243736e07adca37ae8c4830ec3/propcache-0.4.1-cp313-cp313t-win_arm64.whl", hash = "sha256:929d7cbe1f01bb7baffb33dc14eb5691c95831450a26354cd210a8155170c93a", size = 39789, upload-time = "2025-10-08T19:47:49.876Z" }, - { url = "https://files.pythonhosted.org/packages/8e/5c/bca52d654a896f831b8256683457ceddd490ec18d9ec50e97dfd8fc726a8/propcache-0.4.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3f7124c9d820ba5548d431afb4632301acf965db49e666aa21c305cbe8c6de12", size = 78152, upload-time = "2025-10-08T19:47:51.051Z" }, - { url = "https://files.pythonhosted.org/packages/65/9b/03b04e7d82a5f54fb16113d839f5ea1ede58a61e90edf515f6577c66fa8f/propcache-0.4.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c0d4b719b7da33599dfe3b22d3db1ef789210a0597bc650b7cee9c77c2be8c5c", size = 44869, upload-time = "2025-10-08T19:47:52.594Z" }, - { url = "https://files.pythonhosted.org/packages/b2/fa/89a8ef0468d5833a23fff277b143d0573897cf75bd56670a6d28126c7d68/propcache-0.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9f302f4783709a78240ebc311b793f123328716a60911d667e0c036bc5dcbded", size = 46596, upload-time = "2025-10-08T19:47:54.073Z" }, - { url = "https://files.pythonhosted.org/packages/86/bd/47816020d337f4a746edc42fe8d53669965138f39ee117414c7d7a340cfe/propcache-0.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c80ee5802e3fb9ea37938e7eecc307fb984837091d5fd262bb37238b1ae97641", size = 206981, upload-time = "2025-10-08T19:47:55.715Z" }, - { url = "https://files.pythonhosted.org/packages/df/f6/c5fa1357cc9748510ee55f37173eb31bfde6d94e98ccd9e6f033f2fc06e1/propcache-0.4.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ed5a841e8bb29a55fb8159ed526b26adc5bdd7e8bd7bf793ce647cb08656cdf4", size = 211490, upload-time = "2025-10-08T19:47:57.499Z" }, - { url = "https://files.pythonhosted.org/packages/80/1e/e5889652a7c4a3846683401a48f0f2e5083ce0ec1a8a5221d8058fbd1adf/propcache-0.4.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:55c72fd6ea2da4c318e74ffdf93c4fe4e926051133657459131a95c846d16d44", size = 215371, upload-time = "2025-10-08T19:47:59.317Z" }, - { url = "https://files.pythonhosted.org/packages/b2/f2/889ad4b2408f72fe1a4f6a19491177b30ea7bf1a0fd5f17050ca08cfc882/propcache-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8326e144341460402713f91df60ade3c999d601e7eb5ff8f6f7862d54de0610d", size = 201424, upload-time = "2025-10-08T19:48:00.67Z" }, - { url = "https://files.pythonhosted.org/packages/27/73/033d63069b57b0812c8bd19f311faebeceb6ba31b8f32b73432d12a0b826/propcache-0.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:060b16ae65bc098da7f6d25bf359f1f31f688384858204fe5d652979e0015e5b", size = 197566, upload-time = "2025-10-08T19:48:02.604Z" }, - { url = "https://files.pythonhosted.org/packages/dc/89/ce24f3dc182630b4e07aa6d15f0ff4b14ed4b9955fae95a0b54c58d66c05/propcache-0.4.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:89eb3fa9524f7bec9de6e83cf3faed9d79bffa560672c118a96a171a6f55831e", size = 193130, upload-time = "2025-10-08T19:48:04.499Z" }, - { url = "https://files.pythonhosted.org/packages/a9/24/ef0d5fd1a811fb5c609278d0209c9f10c35f20581fcc16f818da959fc5b4/propcache-0.4.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:dee69d7015dc235f526fe80a9c90d65eb0039103fe565776250881731f06349f", size = 202625, upload-time = "2025-10-08T19:48:06.213Z" }, - { url = "https://files.pythonhosted.org/packages/f5/02/98ec20ff5546f68d673df2f7a69e8c0d076b5abd05ca882dc7ee3a83653d/propcache-0.4.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5558992a00dfd54ccbc64a32726a3357ec93825a418a401f5cc67df0ac5d9e49", size = 204209, upload-time = "2025-10-08T19:48:08.432Z" }, - { url = "https://files.pythonhosted.org/packages/a0/87/492694f76759b15f0467a2a93ab68d32859672b646aa8a04ce4864e7932d/propcache-0.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c9b822a577f560fbd9554812526831712c1436d2c046cedee4c3796d3543b144", size = 197797, upload-time = "2025-10-08T19:48:09.968Z" }, - { url = "https://files.pythonhosted.org/packages/ee/36/66367de3575db1d2d3f3d177432bd14ee577a39d3f5d1b3d5df8afe3b6e2/propcache-0.4.1-cp314-cp314-win32.whl", hash = "sha256:ab4c29b49d560fe48b696cdcb127dd36e0bc2472548f3bf56cc5cb3da2b2984f", size = 38140, upload-time = "2025-10-08T19:48:11.232Z" }, - { url = "https://files.pythonhosted.org/packages/0c/2a/a758b47de253636e1b8aef181c0b4f4f204bf0dd964914fb2af90a95b49b/propcache-0.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:5a103c3eb905fcea0ab98be99c3a9a5ab2de60228aa5aceedc614c0281cf6153", size = 41257, upload-time = "2025-10-08T19:48:12.707Z" }, - { url = "https://files.pythonhosted.org/packages/34/5e/63bd5896c3fec12edcbd6f12508d4890d23c265df28c74b175e1ef9f4f3b/propcache-0.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:74c1fb26515153e482e00177a1ad654721bf9207da8a494a0c05e797ad27b992", size = 38097, upload-time = "2025-10-08T19:48:13.923Z" }, - { url = "https://files.pythonhosted.org/packages/99/85/9ff785d787ccf9bbb3f3106f79884a130951436f58392000231b4c737c80/propcache-0.4.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:824e908bce90fb2743bd6b59db36eb4f45cd350a39637c9f73b1c1ea66f5b75f", size = 81455, upload-time = "2025-10-08T19:48:15.16Z" }, - { url = "https://files.pythonhosted.org/packages/90/85/2431c10c8e7ddb1445c1f7c4b54d886e8ad20e3c6307e7218f05922cad67/propcache-0.4.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:c2b5e7db5328427c57c8e8831abda175421b709672f6cfc3d630c3b7e2146393", size = 46372, upload-time = "2025-10-08T19:48:16.424Z" }, - { url = "https://files.pythonhosted.org/packages/01/20/b0972d902472da9bcb683fa595099911f4d2e86e5683bcc45de60dd05dc3/propcache-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6f6ff873ed40292cd4969ef5310179afd5db59fdf055897e282485043fc80ad0", size = 48411, upload-time = "2025-10-08T19:48:17.577Z" }, - { url = "https://files.pythonhosted.org/packages/e2/e3/7dc89f4f21e8f99bad3d5ddb3a3389afcf9da4ac69e3deb2dcdc96e74169/propcache-0.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49a2dc67c154db2c1463013594c458881a069fcf98940e61a0569016a583020a", size = 275712, upload-time = "2025-10-08T19:48:18.901Z" }, - { url = "https://files.pythonhosted.org/packages/20/67/89800c8352489b21a8047c773067644e3897f02ecbbd610f4d46b7f08612/propcache-0.4.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:005f08e6a0529984491e37d8dbc3dd86f84bd78a8ceb5fa9a021f4c48d4984be", size = 273557, upload-time = "2025-10-08T19:48:20.762Z" }, - { url = "https://files.pythonhosted.org/packages/e2/a1/b52b055c766a54ce6d9c16d9aca0cad8059acd9637cdf8aa0222f4a026ef/propcache-0.4.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5c3310452e0d31390da9035c348633b43d7e7feb2e37be252be6da45abd1abcc", size = 280015, upload-time = "2025-10-08T19:48:22.592Z" }, - { url = "https://files.pythonhosted.org/packages/48/c8/33cee30bd890672c63743049f3c9e4be087e6780906bfc3ec58528be59c1/propcache-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c3c70630930447f9ef1caac7728c8ad1c56bc5015338b20fed0d08ea2480b3a", size = 262880, upload-time = "2025-10-08T19:48:23.947Z" }, - { url = "https://files.pythonhosted.org/packages/0c/b1/8f08a143b204b418285c88b83d00edbd61afbc2c6415ffafc8905da7038b/propcache-0.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8e57061305815dfc910a3634dcf584f08168a8836e6999983569f51a8544cd89", size = 260938, upload-time = "2025-10-08T19:48:25.656Z" }, - { url = "https://files.pythonhosted.org/packages/cf/12/96e4664c82ca2f31e1c8dff86afb867348979eb78d3cb8546a680287a1e9/propcache-0.4.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:521a463429ef54143092c11a77e04056dd00636f72e8c45b70aaa3140d639726", size = 247641, upload-time = "2025-10-08T19:48:27.207Z" }, - { url = "https://files.pythonhosted.org/packages/18/ed/e7a9cfca28133386ba52278136d42209d3125db08d0a6395f0cba0c0285c/propcache-0.4.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:120c964da3fdc75e3731aa392527136d4ad35868cc556fd09bb6d09172d9a367", size = 262510, upload-time = "2025-10-08T19:48:28.65Z" }, - { url = "https://files.pythonhosted.org/packages/f5/76/16d8bf65e8845dd62b4e2b57444ab81f07f40caa5652b8969b87ddcf2ef6/propcache-0.4.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:d8f353eb14ee3441ee844ade4277d560cdd68288838673273b978e3d6d2c8f36", size = 263161, upload-time = "2025-10-08T19:48:30.133Z" }, - { url = "https://files.pythonhosted.org/packages/e7/70/c99e9edb5d91d5ad8a49fa3c1e8285ba64f1476782fed10ab251ff413ba1/propcache-0.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ab2943be7c652f09638800905ee1bab2c544e537edb57d527997a24c13dc1455", size = 257393, upload-time = "2025-10-08T19:48:31.567Z" }, - { url = "https://files.pythonhosted.org/packages/08/02/87b25304249a35c0915d236575bc3574a323f60b47939a2262b77632a3ee/propcache-0.4.1-cp314-cp314t-win32.whl", hash = "sha256:05674a162469f31358c30bcaa8883cb7829fa3110bf9c0991fe27d7896c42d85", size = 42546, upload-time = "2025-10-08T19:48:32.872Z" }, - { url = "https://files.pythonhosted.org/packages/cb/ef/3c6ecf8b317aa982f309835e8f96987466123c6e596646d4e6a1dfcd080f/propcache-0.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:990f6b3e2a27d683cb7602ed6c86f15ee6b43b1194736f9baaeb93d0016633b1", size = 46259, upload-time = "2025-10-08T19:48:34.226Z" }, - { url = "https://files.pythonhosted.org/packages/c4/2d/346e946d4951f37eca1e4f55be0f0174c52cd70720f84029b02f296f4a38/propcache-0.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ecef2343af4cc68e05131e45024ba34f6095821988a9d0a02aa7c73fcc448aa9", size = 40428, upload-time = "2025-10-08T19:48:35.441Z" }, - { url = "https://files.pythonhosted.org/packages/9b/01/0ebaec9003f5d619a7475165961f8e3083cf8644d704b60395df3601632d/propcache-0.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3d233076ccf9e450c8b3bc6720af226b898ef5d051a2d145f7d765e6e9f9bcff", size = 80277, upload-time = "2025-10-08T19:48:36.647Z" }, - { url = "https://files.pythonhosted.org/packages/34/58/04af97ac586b4ef6b9026c3fd36ee7798b737a832f5d3440a4280dcebd3a/propcache-0.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:357f5bb5c377a82e105e44bd3d52ba22b616f7b9773714bff93573988ef0a5fb", size = 45865, upload-time = "2025-10-08T19:48:37.859Z" }, - { url = "https://files.pythonhosted.org/packages/7c/19/b65d98ae21384518b291d9939e24a8aeac4fdb5101b732576f8f7540e834/propcache-0.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cbc3b6dfc728105b2a57c06791eb07a94229202ea75c59db644d7d496b698cac", size = 47636, upload-time = "2025-10-08T19:48:39.038Z" }, - { url = "https://files.pythonhosted.org/packages/b3/0f/317048c6d91c356c7154dca5af019e6effeb7ee15fa6a6db327cc19e12b4/propcache-0.4.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:182b51b421f0501952d938dc0b0eb45246a5b5153c50d42b495ad5fb7517c888", size = 201126, upload-time = "2025-10-08T19:48:40.774Z" }, - { url = "https://files.pythonhosted.org/packages/71/69/0b2a7a5a6ee83292b4b997dbd80549d8ce7d40b6397c1646c0d9495f5a85/propcache-0.4.1-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4b536b39c5199b96fc6245eb5fb796c497381d3942f169e44e8e392b29c9ebcc", size = 209837, upload-time = "2025-10-08T19:48:42.167Z" }, - { url = "https://files.pythonhosted.org/packages/a5/92/c699ac495a6698df6e497fc2de27af4b6ace10d8e76528357ce153722e45/propcache-0.4.1-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:db65d2af507bbfbdcedb254a11149f894169d90488dd3e7190f7cdcb2d6cd57a", size = 215578, upload-time = "2025-10-08T19:48:43.56Z" }, - { url = "https://files.pythonhosted.org/packages/b3/ee/14de81c5eb02c0ee4f500b4e39c4e1bd0677c06e72379e6ab18923c773fc/propcache-0.4.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd2dbc472da1f772a4dae4fa24be938a6c544671a912e30529984dd80400cd88", size = 197187, upload-time = "2025-10-08T19:48:45.309Z" }, - { url = "https://files.pythonhosted.org/packages/1d/94/48dce9aaa6d8dd5a0859bad75158ec522546d4ac23f8e2f05fac469477dd/propcache-0.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:daede9cd44e0f8bdd9e6cc9a607fc81feb80fae7a5fc6cecaff0e0bb32e42d00", size = 193478, upload-time = "2025-10-08T19:48:47.743Z" }, - { url = "https://files.pythonhosted.org/packages/60/b5/0516b563e801e1ace212afde869a0596a0d7115eec0b12d296d75633fb29/propcache-0.4.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:71b749281b816793678ae7f3d0d84bd36e694953822eaad408d682efc5ca18e0", size = 190650, upload-time = "2025-10-08T19:48:49.373Z" }, - { url = "https://files.pythonhosted.org/packages/24/89/e0f7d4a5978cd56f8cd67735f74052f257dc471ec901694e430f0d1572fe/propcache-0.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:0002004213ee1f36cfb3f9a42b5066100c44276b9b72b4e1504cddd3d692e86e", size = 200251, upload-time = "2025-10-08T19:48:51.4Z" }, - { url = "https://files.pythonhosted.org/packages/06/7d/a1fac863d473876ed4406c914f2e14aa82d2f10dd207c9e16fc383cc5a24/propcache-0.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:fe49d0a85038f36ba9e3ffafa1103e61170b28e95b16622e11be0a0ea07c6781", size = 200919, upload-time = "2025-10-08T19:48:53.227Z" }, - { url = "https://files.pythonhosted.org/packages/c3/4e/f86a256ff24944cf5743e4e6c6994e3526f6acfcfb55e21694c2424f758c/propcache-0.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:99d43339c83aaf4d32bda60928231848eee470c6bda8d02599cc4cebe872d183", size = 193211, upload-time = "2025-10-08T19:48:55.027Z" }, - { url = "https://files.pythonhosted.org/packages/6e/3f/3fbad5f4356b068f1b047d300a6ff2c66614d7030f078cd50be3fec04228/propcache-0.4.1-cp39-cp39-win32.whl", hash = "sha256:a129e76735bc792794d5177069691c3217898b9f5cee2b2661471e52ffe13f19", size = 38314, upload-time = "2025-10-08T19:48:56.792Z" }, - { url = "https://files.pythonhosted.org/packages/a4/45/d78d136c3a3d215677abb886785aae744da2c3005bcb99e58640c56529b1/propcache-0.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:948dab269721ae9a87fd16c514a0a2c2a1bdb23a9a61b969b0f9d9ee2968546f", size = 41912, upload-time = "2025-10-08T19:48:57.995Z" }, - { url = "https://files.pythonhosted.org/packages/fc/2a/b0632941f25139f4e58450b307242951f7c2717a5704977c6d5323a800af/propcache-0.4.1-cp39-cp39-win_arm64.whl", hash = "sha256:5fd37c406dd6dc85aa743e214cef35dc54bbdd1419baac4f6ae5e5b1a2976938", size = 38450, upload-time = "2025-10-08T19:48:59.349Z" }, - { url = "https://files.pythonhosted.org/packages/5b/5a/bc7b4a4ef808fa59a816c17b20c4bef6884daebbdf627ff2a161da67da19/propcache-0.4.1-py3-none-any.whl", hash = "sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237", size = 13305, upload-time = "2025-10-08T19:49:00.792Z" }, -] - -[[package]] -name = "pydantic" -version = "1.10.26" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version == '3.11.*' and sys_platform == 'emscripten'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.10.*'", - "python_full_version < '3.10'", -] -dependencies = [ - { name = "typing-extensions", marker = "extra == 'group-8-profound-pydantic-v1'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/7b/da/fd89f987a376c807cd81ea0eff4589aade783bbb702637b4734ef2c743a2/pydantic-1.10.26.tar.gz", hash = "sha256:8c6aa39b494c5af092e690127c283d84f363ac36017106a9e66cb33a22ac412e", size = 357906, upload-time = "2025-12-18T15:47:46.557Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/71/08/2587a6d4314e7539eec84acd062cb7b037638edb57a0335d20e4c5b8878c/pydantic-1.10.26-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f7ae36fa0ecef8d39884120f212e16c06bb096a38f523421278e2f39c1784546", size = 2444588, upload-time = "2025-12-18T15:46:28.882Z" }, - { url = "https://files.pythonhosted.org/packages/47/e6/10df5f08c105bcbb4adbee7d1108ff4b347702b110fed058f6a03f1c6b73/pydantic-1.10.26-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d95a76cf503f0f72ed7812a91de948440b2bf564269975738a4751e4fadeb572", size = 2255972, upload-time = "2025-12-18T15:46:31.72Z" }, - { url = "https://files.pythonhosted.org/packages/ba/7d/fdb961e7adc2c31f394feba6f560ef2c74c446f0285e2c2eb87d2b7206c7/pydantic-1.10.26-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a943ce8e00ad708ed06a1d9df5b4fd28f5635a003b82a4908ece6f24c0b18464", size = 2857175, upload-time = "2025-12-18T15:46:34Z" }, - { url = "https://files.pythonhosted.org/packages/8f/6c/f21e27dda475d4c562bd01b5874284dd3180f336c1e669413b743ca8b278/pydantic-1.10.26-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:465ad8edb29b15c10b779b16431fe8e77c380098badf6db367b7a1d3e572cf53", size = 2947001, upload-time = "2025-12-18T15:46:35.922Z" }, - { url = "https://files.pythonhosted.org/packages/6d/f6/27ea206232cbb6ec24dc4e4e8888a9a734f96a1eaf13504be4b30ef26aa7/pydantic-1.10.26-cp310-cp310-win_amd64.whl", hash = "sha256:80e6be6272839c8a7641d26ad569ab77772809dd78f91d0068dc0fc97f071945", size = 2066217, upload-time = "2025-12-18T15:46:37.614Z" }, - { url = "https://files.pythonhosted.org/packages/1d/c1/d521e64c8130e1ad9d22c270bed3fabcc0940c9539b076b639c88fd32a8d/pydantic-1.10.26-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:116233e53889bcc536f617e38c1b8337d7fa9c280f0fd7a4045947515a785637", size = 2428347, upload-time = "2025-12-18T15:46:39.41Z" }, - { url = "https://files.pythonhosted.org/packages/2c/08/f4b804a00c16e3ea994cb640a7c25c579b4f1fa674cde6a19fa0dfb0ae4f/pydantic-1.10.26-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c3cfdd361addb6eb64ccd26ac356ad6514cee06a61ab26b27e16b5ed53108f77", size = 2212605, upload-time = "2025-12-18T15:46:41.006Z" }, - { url = "https://files.pythonhosted.org/packages/5d/78/0df4b9efef29bbc5e39f247fcba99060d15946b4463d82a5589cf7923d71/pydantic-1.10.26-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0e4451951a9a93bf9a90576f3e25240b47ee49ab5236adccb8eff6ac943adf0f", size = 2753560, upload-time = "2025-12-18T15:46:43.215Z" }, - { url = "https://files.pythonhosted.org/packages/68/66/6ab6c1d3a116d05d2508fce64f96e35242938fac07544d611e11d0d363a0/pydantic-1.10.26-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9858ed44c6bea5f29ffe95308db9e62060791c877766c67dd5f55d072c8612b5", size = 2859235, upload-time = "2025-12-18T15:46:45.112Z" }, - { url = "https://files.pythonhosted.org/packages/61/4e/f1676bb0fcdf6ed2ce4670d7d1fc1d6c3a06d84497644acfbe02649503f1/pydantic-1.10.26-cp311-cp311-win_amd64.whl", hash = "sha256:ac1089f723e2106ebde434377d31239e00870a7563245072968e5af5cc4d33df", size = 2066646, upload-time = "2025-12-18T15:46:46.816Z" }, - { url = "https://files.pythonhosted.org/packages/02/6c/cd97a5a776c4515e6ee2ae81c2f2c5be51376dda6c31f965d7746ce0019f/pydantic-1.10.26-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:468d5b9cacfcaadc76ed0a4645354ab6f263ec01a63fb6d05630ea1df6ae453f", size = 2433795, upload-time = "2025-12-18T15:46:49.321Z" }, - { url = "https://files.pythonhosted.org/packages/47/12/de20affa30dcef728fcf9cc98e13ff4438c7a630de8d2f90eb38eba0891c/pydantic-1.10.26-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2c1b0b914be31671000ca25cf7ea17fcaaa68cfeadf6924529c5c5aa24b7ab1f", size = 2227387, upload-time = "2025-12-18T15:46:50.877Z" }, - { url = "https://files.pythonhosted.org/packages/7b/1d/9d65dcc5b8c17ba590f1f9f486e9306346831902318b7ee93f63516f4003/pydantic-1.10.26-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:15b13b9f8ba8867095769e1156e0d7fbafa1f65b898dd40fd1c02e34430973cb", size = 2629594, upload-time = "2025-12-18T15:46:53.42Z" }, - { url = "https://files.pythonhosted.org/packages/3f/76/acb41409356789e23e1a7ef58f93821410c96409183ce314ddb58d97f23e/pydantic-1.10.26-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad7025ca324ae263d4313998e25078dcaec5f9ed0392c06dedb57e053cc8086b", size = 2745305, upload-time = "2025-12-18T15:46:55.987Z" }, - { url = "https://files.pythonhosted.org/packages/22/72/a98c0c5e527a66057d969fedd61675223c7975ade61acebbca9f1abd6dc0/pydantic-1.10.26-cp312-cp312-win_amd64.whl", hash = "sha256:4482b299874dabb88a6c3759e3d85c6557c407c3b586891f7d808d8a38b66b9c", size = 1937647, upload-time = "2025-12-18T15:46:57.905Z" }, - { url = "https://files.pythonhosted.org/packages/28/b9/17a5a5a421c23ac27486b977724a42c9d5f8b7f0f4aab054251066223900/pydantic-1.10.26-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1ae7913bb40a96c87e3d3f6fe4e918ef53bf181583de4e71824360a9b11aef1c", size = 2494599, upload-time = "2025-12-18T15:47:00.209Z" }, - { url = "https://files.pythonhosted.org/packages/e6/8e/6e3bd4241076cf227b443d7577245dd5d181ecf40b3182fcb908bc8c197d/pydantic-1.10.26-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8154c13f58d4de5d3a856bb6c909c7370f41fb876a5952a503af6b975265f4ba", size = 2254391, upload-time = "2025-12-18T15:47:02.268Z" }, - { url = "https://files.pythonhosted.org/packages/a8/30/a1c4092eda2145ecbead6c92db489b223e101e1ba0da82576d0cf73dd422/pydantic-1.10.26-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f8af0507bf6118b054a9765fb2e402f18a8b70c964f420d95b525eb711122d62", size = 2609445, upload-time = "2025-12-18T15:47:04.909Z" }, - { url = "https://files.pythonhosted.org/packages/3a/2a/0491f1729ee4b7b6bc859ec22f69752f0c09bee1b66ac6f5f701136f34c3/pydantic-1.10.26-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dcb5a7318fb43189fde6af6f21ac7149c4bcbcfffc54bc87b5becddc46084847", size = 2732124, upload-time = "2025-12-18T15:47:07.464Z" }, - { url = "https://files.pythonhosted.org/packages/2a/56/b59f3b2f84e1df2b04ae768a1bb04d9f0288ff71b67cdcbb07683757b2c0/pydantic-1.10.26-cp313-cp313-win_amd64.whl", hash = "sha256:71cde228bc0600cf8619f0ee62db050d1880dcc477eba0e90b23011b4ee0f314", size = 1939888, upload-time = "2025-12-18T15:47:09.618Z" }, - { url = "https://files.pythonhosted.org/packages/d2/8b/0c3dc02d4b97790b0f199bf933f677c14e7be4a8d21307c5f2daae06aa41/pydantic-1.10.26-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:6b40730cc81d53d515dc0b8bb5c9b43fadb9bed46de4a3c03bd95e8571616dba", size = 2502689, upload-time = "2025-12-18T15:47:12.308Z" }, - { url = "https://files.pythonhosted.org/packages/d4/9d/d31aeea45542b2ae4b09ecba92b88aaba696b801c31919811aa979a1242d/pydantic-1.10.26-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c3bbb9c0eecdf599e4db9b372fa9cc55be12e80a0d9c6d307950a39050cb0e37", size = 2269494, upload-time = "2025-12-18T15:47:14.53Z" }, - { url = "https://files.pythonhosted.org/packages/78/c1/3a4d069593283ca4dd0006039ba33644e21e432cddc09da706ac50441610/pydantic-1.10.26-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cc2e3fe7bc4993626ef6b6fa855defafa1d6f8996aa1caef2deb83c5ac4d043a", size = 2620047, upload-time = "2025-12-18T15:47:17.089Z" }, - { url = "https://files.pythonhosted.org/packages/e0/0e/340c3d29197d99c15ab04093d43bb9c9d0fd17c2a34b80cb9d36ed732b09/pydantic-1.10.26-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:36d9e46b588aaeb1dcd2409fa4c467fe0b331f3cc9f227b03a7a00643704e962", size = 2747625, upload-time = "2025-12-18T15:47:19.21Z" }, - { url = "https://files.pythonhosted.org/packages/1e/58/f12ab3727339b172c830b32151919456b67787cdfe8808b2568b322fb15c/pydantic-1.10.26-cp314-cp314-win_amd64.whl", hash = "sha256:81ce3c8616d12a7be31b4aadfd3434f78f6b44b75adbfaec2fe1ad4f7f999b8c", size = 1976436, upload-time = "2025-12-18T15:47:21.384Z" }, - { url = "https://files.pythonhosted.org/packages/e1/8a/3a5a6267d5f03617b5c0f1985aa9fdfbafd33a50ef6dadd866a15ed4d123/pydantic-1.10.26-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:502b9d30d18a2dfaf81b7302f6ba0e5853474b1c96212449eb4db912cb604b7d", size = 2457039, upload-time = "2025-12-18T15:47:34.584Z" }, - { url = "https://files.pythonhosted.org/packages/f3/fa/343ac0db26918a033ac6256c036d72c3b6eb1196b7de622e2e8a94b19079/pydantic-1.10.26-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0d8f6087bf697dec3bf7ffcd7fe8362674f16519f3151789f33cbe8f1d19fc15", size = 2266441, upload-time = "2025-12-18T15:47:36.807Z" }, - { url = "https://files.pythonhosted.org/packages/fc/36/1ab48136578608dba2f2a62e452f3db2083b474d4e49be5749c6ae0c123c/pydantic-1.10.26-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:dd40a99c358419910c85e6f5d22f9c56684c25b5e7abc40879b3b4a52f34ae90", size = 2869383, upload-time = "2025-12-18T15:47:38.883Z" }, - { url = "https://files.pythonhosted.org/packages/a2/25/41dbf1bffc31eb242cece8080561a4133eaeb513372dec36a84477a3fb71/pydantic-1.10.26-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ce3293b86ca9f4125df02ff0a70be91bc7946522467cbd98e7f1493f340616ba", size = 2963582, upload-time = "2025-12-18T15:47:40.854Z" }, - { url = "https://files.pythonhosted.org/packages/61/2f/f072ae160a300c85eb9f059915101fd33dacf12d8df08c2b804acb3b95d1/pydantic-1.10.26-cp39-cp39-win_amd64.whl", hash = "sha256:1a4e3062b71ab1d5df339ba12c48f9ed5817c5de6cb92a961dd5c64bb32e7b96", size = 2075530, upload-time = "2025-12-18T15:47:43.181Z" }, - { url = "https://files.pythonhosted.org/packages/1f/98/556e82f00b98486def0b8af85da95e69d2be7e367cf2431408e108bc3095/pydantic-1.10.26-py3-none-any.whl", hash = "sha256:c43ad70dc3ce7787543d563792426a16fd7895e14be4b194b5665e36459dd917", size = 166975, upload-time = "2025-12-18T15:47:44.927Z" }, -] - -[[package]] -name = "pydantic" -version = "2.12.5" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version == '3.11.*' and sys_platform == 'emscripten'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.10.*'", - "python_full_version < '3.10'", -] -dependencies = [ - { name = "annotated-types", marker = "extra == 'group-8-profound-pydantic-v2' or extra != 'group-8-profound-pydantic-v1'" }, - { name = "pydantic-core", marker = "extra == 'group-8-profound-pydantic-v2' or extra != 'group-8-profound-pydantic-v1'" }, - { name = "typing-extensions", marker = "extra == 'group-8-profound-pydantic-v2' or extra != 'group-8-profound-pydantic-v1'" }, - { name = "typing-inspection", marker = "extra == 'group-8-profound-pydantic-v2' or extra != 'group-8-profound-pydantic-v1'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/69/44/36f1a6e523abc58ae5f928898e4aca2e0ea509b5aa6f6f392a5d882be928/pydantic-2.12.5.tar.gz", hash = "sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49", size = 821591, upload-time = "2025-11-26T15:11:46.471Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl", hash = "sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d", size = 463580, upload-time = "2025-11-26T15:11:44.605Z" }, -] - -[[package]] -name = "pydantic-core" -version = "2.41.5" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "extra == 'group-8-profound-pydantic-v2' or extra != 'group-8-profound-pydantic-v1'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/71/70/23b021c950c2addd24ec408e9ab05d59b035b39d97cdc1130e1bce647bb6/pydantic_core-2.41.5.tar.gz", hash = "sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e", size = 460952, upload-time = "2025-11-04T13:43:49.098Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c6/90/32c9941e728d564b411d574d8ee0cf09b12ec978cb22b294995bae5549a5/pydantic_core-2.41.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:77b63866ca88d804225eaa4af3e664c5faf3568cea95360d21f4725ab6e07146", size = 2107298, upload-time = "2025-11-04T13:39:04.116Z" }, - { url = "https://files.pythonhosted.org/packages/fb/a8/61c96a77fe28993d9a6fb0f4127e05430a267b235a124545d79fea46dd65/pydantic_core-2.41.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dfa8a0c812ac681395907e71e1274819dec685fec28273a28905df579ef137e2", size = 1901475, upload-time = "2025-11-04T13:39:06.055Z" }, - { url = "https://files.pythonhosted.org/packages/5d/b6/338abf60225acc18cdc08b4faef592d0310923d19a87fba1faf05af5346e/pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5921a4d3ca3aee735d9fd163808f5e8dd6c6972101e4adbda9a4667908849b97", size = 1918815, upload-time = "2025-11-04T13:39:10.41Z" }, - { url = "https://files.pythonhosted.org/packages/d1/1c/2ed0433e682983d8e8cba9c8d8ef274d4791ec6a6f24c58935b90e780e0a/pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e25c479382d26a2a41b7ebea1043564a937db462816ea07afa8a44c0866d52f9", size = 2065567, upload-time = "2025-11-04T13:39:12.244Z" }, - { url = "https://files.pythonhosted.org/packages/b3/24/cf84974ee7d6eae06b9e63289b7b8f6549d416b5c199ca2d7ce13bbcf619/pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f547144f2966e1e16ae626d8ce72b4cfa0caedc7fa28052001c94fb2fcaa1c52", size = 2230442, upload-time = "2025-11-04T13:39:13.962Z" }, - { url = "https://files.pythonhosted.org/packages/fd/21/4e287865504b3edc0136c89c9c09431be326168b1eb7841911cbc877a995/pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f52298fbd394f9ed112d56f3d11aabd0d5bd27beb3084cc3d8ad069483b8941", size = 2350956, upload-time = "2025-11-04T13:39:15.889Z" }, - { url = "https://files.pythonhosted.org/packages/a8/76/7727ef2ffa4b62fcab916686a68a0426b9b790139720e1934e8ba797e238/pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:100baa204bb412b74fe285fb0f3a385256dad1d1879f0a5cb1499ed2e83d132a", size = 2068253, upload-time = "2025-11-04T13:39:17.403Z" }, - { url = "https://files.pythonhosted.org/packages/d5/8c/a4abfc79604bcb4c748e18975c44f94f756f08fb04218d5cb87eb0d3a63e/pydantic_core-2.41.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:05a2c8852530ad2812cb7914dc61a1125dc4e06252ee98e5638a12da6cc6fb6c", size = 2177050, upload-time = "2025-11-04T13:39:19.351Z" }, - { url = "https://files.pythonhosted.org/packages/67/b1/de2e9a9a79b480f9cb0b6e8b6ba4c50b18d4e89852426364c66aa82bb7b3/pydantic_core-2.41.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:29452c56df2ed968d18d7e21f4ab0ac55e71dc59524872f6fc57dcf4a3249ed2", size = 2147178, upload-time = "2025-11-04T13:39:21Z" }, - { url = "https://files.pythonhosted.org/packages/16/c1/dfb33f837a47b20417500efaa0378adc6635b3c79e8369ff7a03c494b4ac/pydantic_core-2.41.5-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:d5160812ea7a8a2ffbe233d8da666880cad0cbaf5d4de74ae15c313213d62556", size = 2341833, upload-time = "2025-11-04T13:39:22.606Z" }, - { url = "https://files.pythonhosted.org/packages/47/36/00f398642a0f4b815a9a558c4f1dca1b4020a7d49562807d7bc9ff279a6c/pydantic_core-2.41.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:df3959765b553b9440adfd3c795617c352154e497a4eaf3752555cfb5da8fc49", size = 2321156, upload-time = "2025-11-04T13:39:25.843Z" }, - { url = "https://files.pythonhosted.org/packages/7e/70/cad3acd89fde2010807354d978725ae111ddf6d0ea46d1ea1775b5c1bd0c/pydantic_core-2.41.5-cp310-cp310-win32.whl", hash = "sha256:1f8d33a7f4d5a7889e60dc39856d76d09333d8a6ed0f5f1190635cbec70ec4ba", size = 1989378, upload-time = "2025-11-04T13:39:27.92Z" }, - { url = "https://files.pythonhosted.org/packages/76/92/d338652464c6c367e5608e4488201702cd1cbb0f33f7b6a85a60fe5f3720/pydantic_core-2.41.5-cp310-cp310-win_amd64.whl", hash = "sha256:62de39db01b8d593e45871af2af9e497295db8d73b085f6bfd0b18c83c70a8f9", size = 2013622, upload-time = "2025-11-04T13:39:29.848Z" }, - { url = "https://files.pythonhosted.org/packages/e8/72/74a989dd9f2084b3d9530b0915fdda64ac48831c30dbf7c72a41a5232db8/pydantic_core-2.41.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a3a52f6156e73e7ccb0f8cced536adccb7042be67cb45f9562e12b319c119da6", size = 2105873, upload-time = "2025-11-04T13:39:31.373Z" }, - { url = "https://files.pythonhosted.org/packages/12/44/37e403fd9455708b3b942949e1d7febc02167662bf1a7da5b78ee1ea2842/pydantic_core-2.41.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7f3bf998340c6d4b0c9a2f02d6a400e51f123b59565d74dc60d252ce888c260b", size = 1899826, upload-time = "2025-11-04T13:39:32.897Z" }, - { url = "https://files.pythonhosted.org/packages/33/7f/1d5cab3ccf44c1935a359d51a8a2a9e1a654b744b5e7f80d41b88d501eec/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:378bec5c66998815d224c9ca994f1e14c0c21cb95d2f52b6021cc0b2a58f2a5a", size = 1917869, upload-time = "2025-11-04T13:39:34.469Z" }, - { url = "https://files.pythonhosted.org/packages/6e/6a/30d94a9674a7fe4f4744052ed6c5e083424510be1e93da5bc47569d11810/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7b576130c69225432866fe2f4a469a85a54ade141d96fd396dffcf607b558f8", size = 2063890, upload-time = "2025-11-04T13:39:36.053Z" }, - { url = "https://files.pythonhosted.org/packages/50/be/76e5d46203fcb2750e542f32e6c371ffa9b8ad17364cf94bb0818dbfb50c/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6cb58b9c66f7e4179a2d5e0f849c48eff5c1fca560994d6eb6543abf955a149e", size = 2229740, upload-time = "2025-11-04T13:39:37.753Z" }, - { url = "https://files.pythonhosted.org/packages/d3/ee/fed784df0144793489f87db310a6bbf8118d7b630ed07aa180d6067e653a/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:88942d3a3dff3afc8288c21e565e476fc278902ae4d6d134f1eeda118cc830b1", size = 2350021, upload-time = "2025-11-04T13:39:40.94Z" }, - { url = "https://files.pythonhosted.org/packages/c8/be/8fed28dd0a180dca19e72c233cbf58efa36df055e5b9d90d64fd1740b828/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f31d95a179f8d64d90f6831d71fa93290893a33148d890ba15de25642c5d075b", size = 2066378, upload-time = "2025-11-04T13:39:42.523Z" }, - { url = "https://files.pythonhosted.org/packages/b0/3b/698cf8ae1d536a010e05121b4958b1257f0b5522085e335360e53a6b1c8b/pydantic_core-2.41.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c1df3d34aced70add6f867a8cf413e299177e0c22660cc767218373d0779487b", size = 2175761, upload-time = "2025-11-04T13:39:44.553Z" }, - { url = "https://files.pythonhosted.org/packages/b8/ba/15d537423939553116dea94ce02f9c31be0fa9d0b806d427e0308ec17145/pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4009935984bd36bd2c774e13f9a09563ce8de4abaa7226f5108262fa3e637284", size = 2146303, upload-time = "2025-11-04T13:39:46.238Z" }, - { url = "https://files.pythonhosted.org/packages/58/7f/0de669bf37d206723795f9c90c82966726a2ab06c336deba4735b55af431/pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:34a64bc3441dc1213096a20fe27e8e128bd3ff89921706e83c0b1ac971276594", size = 2340355, upload-time = "2025-11-04T13:39:48.002Z" }, - { url = "https://files.pythonhosted.org/packages/e5/de/e7482c435b83d7e3c3ee5ee4451f6e8973cff0eb6007d2872ce6383f6398/pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c9e19dd6e28fdcaa5a1de679aec4141f691023916427ef9bae8584f9c2fb3b0e", size = 2319875, upload-time = "2025-11-04T13:39:49.705Z" }, - { url = "https://files.pythonhosted.org/packages/fe/e6/8c9e81bb6dd7560e33b9053351c29f30c8194b72f2d6932888581f503482/pydantic_core-2.41.5-cp311-cp311-win32.whl", hash = "sha256:2c010c6ded393148374c0f6f0bf89d206bf3217f201faa0635dcd56bd1520f6b", size = 1987549, upload-time = "2025-11-04T13:39:51.842Z" }, - { url = "https://files.pythonhosted.org/packages/11/66/f14d1d978ea94d1bc21fc98fcf570f9542fe55bfcc40269d4e1a21c19bf7/pydantic_core-2.41.5-cp311-cp311-win_amd64.whl", hash = "sha256:76ee27c6e9c7f16f47db7a94157112a2f3a00e958bc626e2f4ee8bec5c328fbe", size = 2011305, upload-time = "2025-11-04T13:39:53.485Z" }, - { url = "https://files.pythonhosted.org/packages/56/d8/0e271434e8efd03186c5386671328154ee349ff0354d83c74f5caaf096ed/pydantic_core-2.41.5-cp311-cp311-win_arm64.whl", hash = "sha256:4bc36bbc0b7584de96561184ad7f012478987882ebf9f9c389b23f432ea3d90f", size = 1972902, upload-time = "2025-11-04T13:39:56.488Z" }, - { url = "https://files.pythonhosted.org/packages/5f/5d/5f6c63eebb5afee93bcaae4ce9a898f3373ca23df3ccaef086d0233a35a7/pydantic_core-2.41.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7", size = 2110990, upload-time = "2025-11-04T13:39:58.079Z" }, - { url = "https://files.pythonhosted.org/packages/aa/32/9c2e8ccb57c01111e0fd091f236c7b371c1bccea0fa85247ac55b1e2b6b6/pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0", size = 1896003, upload-time = "2025-11-04T13:39:59.956Z" }, - { url = "https://files.pythonhosted.org/packages/68/b8/a01b53cb0e59139fbc9e4fda3e9724ede8de279097179be4ff31f1abb65a/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69", size = 1919200, upload-time = "2025-11-04T13:40:02.241Z" }, - { url = "https://files.pythonhosted.org/packages/38/de/8c36b5198a29bdaade07b5985e80a233a5ac27137846f3bc2d3b40a47360/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed2e99c456e3fadd05c991f8f437ef902e00eedf34320ba2b0842bd1c3ca3a75", size = 2052578, upload-time = "2025-11-04T13:40:04.401Z" }, - { url = "https://files.pythonhosted.org/packages/00/b5/0e8e4b5b081eac6cb3dbb7e60a65907549a1ce035a724368c330112adfdd/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65840751b72fbfd82c3c640cff9284545342a4f1eb1586ad0636955b261b0b05", size = 2208504, upload-time = "2025-11-04T13:40:06.072Z" }, - { url = "https://files.pythonhosted.org/packages/77/56/87a61aad59c7c5b9dc8caad5a41a5545cba3810c3e828708b3d7404f6cef/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e536c98a7626a98feb2d3eaf75944ef6f3dbee447e1f841eae16f2f0a72d8ddc", size = 2335816, upload-time = "2025-11-04T13:40:07.835Z" }, - { url = "https://files.pythonhosted.org/packages/0d/76/941cc9f73529988688a665a5c0ecff1112b3d95ab48f81db5f7606f522d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c", size = 2075366, upload-time = "2025-11-04T13:40:09.804Z" }, - { url = "https://files.pythonhosted.org/packages/d3/43/ebef01f69baa07a482844faaa0a591bad1ef129253ffd0cdaa9d8a7f72d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d38548150c39b74aeeb0ce8ee1d8e82696f4a4e16ddc6de7b1d8823f7de4b9b5", size = 2171698, upload-time = "2025-11-04T13:40:12.004Z" }, - { url = "https://files.pythonhosted.org/packages/b1/87/41f3202e4193e3bacfc2c065fab7706ebe81af46a83d3e27605029c1f5a6/pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c23e27686783f60290e36827f9c626e63154b82b116d7fe9adba1fda36da706c", size = 2132603, upload-time = "2025-11-04T13:40:13.868Z" }, - { url = "https://files.pythonhosted.org/packages/49/7d/4c00df99cb12070b6bccdef4a195255e6020a550d572768d92cc54dba91a/pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:482c982f814460eabe1d3bb0adfdc583387bd4691ef00b90575ca0d2b6fe2294", size = 2329591, upload-time = "2025-11-04T13:40:15.672Z" }, - { url = "https://files.pythonhosted.org/packages/cc/6a/ebf4b1d65d458f3cda6a7335d141305dfa19bdc61140a884d165a8a1bbc7/pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1", size = 2319068, upload-time = "2025-11-04T13:40:17.532Z" }, - { url = "https://files.pythonhosted.org/packages/49/3b/774f2b5cd4192d5ab75870ce4381fd89cf218af999515baf07e7206753f0/pydantic_core-2.41.5-cp312-cp312-win32.whl", hash = "sha256:b74557b16e390ec12dca509bce9264c3bbd128f8a2c376eaa68003d7f327276d", size = 1985908, upload-time = "2025-11-04T13:40:19.309Z" }, - { url = "https://files.pythonhosted.org/packages/86/45/00173a033c801cacf67c190fef088789394feaf88a98a7035b0e40d53dc9/pydantic_core-2.41.5-cp312-cp312-win_amd64.whl", hash = "sha256:1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815", size = 2020145, upload-time = "2025-11-04T13:40:21.548Z" }, - { url = "https://files.pythonhosted.org/packages/f9/22/91fbc821fa6d261b376a3f73809f907cec5ca6025642c463d3488aad22fb/pydantic_core-2.41.5-cp312-cp312-win_arm64.whl", hash = "sha256:1746d4a3d9a794cacae06a5eaaccb4b8643a131d45fbc9af23e353dc0a5ba5c3", size = 1976179, upload-time = "2025-11-04T13:40:23.393Z" }, - { url = "https://files.pythonhosted.org/packages/87/06/8806241ff1f70d9939f9af039c6c35f2360cf16e93c2ca76f184e76b1564/pydantic_core-2.41.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9", size = 2120403, upload-time = "2025-11-04T13:40:25.248Z" }, - { url = "https://files.pythonhosted.org/packages/94/02/abfa0e0bda67faa65fef1c84971c7e45928e108fe24333c81f3bfe35d5f5/pydantic_core-2.41.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34", size = 1896206, upload-time = "2025-11-04T13:40:27.099Z" }, - { url = "https://files.pythonhosted.org/packages/15/df/a4c740c0943e93e6500f9eb23f4ca7ec9bf71b19e608ae5b579678c8d02f/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0", size = 1919307, upload-time = "2025-11-04T13:40:29.806Z" }, - { url = "https://files.pythonhosted.org/packages/9a/e3/6324802931ae1d123528988e0e86587c2072ac2e5394b4bc2bc34b61ff6e/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33", size = 2063258, upload-time = "2025-11-04T13:40:33.544Z" }, - { url = "https://files.pythonhosted.org/packages/c9/d4/2230d7151d4957dd79c3044ea26346c148c98fbf0ee6ebd41056f2d62ab5/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e", size = 2214917, upload-time = "2025-11-04T13:40:35.479Z" }, - { url = "https://files.pythonhosted.org/packages/e6/9f/eaac5df17a3672fef0081b6c1bb0b82b33ee89aa5cec0d7b05f52fd4a1fa/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2", size = 2332186, upload-time = "2025-11-04T13:40:37.436Z" }, - { url = "https://files.pythonhosted.org/packages/cf/4e/35a80cae583a37cf15604b44240e45c05e04e86f9cfd766623149297e971/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586", size = 2073164, upload-time = "2025-11-04T13:40:40.289Z" }, - { url = "https://files.pythonhosted.org/packages/bf/e3/f6e262673c6140dd3305d144d032f7bd5f7497d3871c1428521f19f9efa2/pydantic_core-2.41.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d", size = 2179146, upload-time = "2025-11-04T13:40:42.809Z" }, - { url = "https://files.pythonhosted.org/packages/75/c7/20bd7fc05f0c6ea2056a4565c6f36f8968c0924f19b7d97bbfea55780e73/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740", size = 2137788, upload-time = "2025-11-04T13:40:44.752Z" }, - { url = "https://files.pythonhosted.org/packages/3a/8d/34318ef985c45196e004bc46c6eab2eda437e744c124ef0dbe1ff2c9d06b/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e", size = 2340133, upload-time = "2025-11-04T13:40:46.66Z" }, - { url = "https://files.pythonhosted.org/packages/9c/59/013626bf8c78a5a5d9350d12e7697d3d4de951a75565496abd40ccd46bee/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858", size = 2324852, upload-time = "2025-11-04T13:40:48.575Z" }, - { url = "https://files.pythonhosted.org/packages/1a/d9/c248c103856f807ef70c18a4f986693a46a8ffe1602e5d361485da502d20/pydantic_core-2.41.5-cp313-cp313-win32.whl", hash = "sha256:650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36", size = 1994679, upload-time = "2025-11-04T13:40:50.619Z" }, - { url = "https://files.pythonhosted.org/packages/9e/8b/341991b158ddab181cff136acd2552c9f35bd30380422a639c0671e99a91/pydantic_core-2.41.5-cp313-cp313-win_amd64.whl", hash = "sha256:79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11", size = 2019766, upload-time = "2025-11-04T13:40:52.631Z" }, - { url = "https://files.pythonhosted.org/packages/73/7d/f2f9db34af103bea3e09735bb40b021788a5e834c81eedb541991badf8f5/pydantic_core-2.41.5-cp313-cp313-win_arm64.whl", hash = "sha256:3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd", size = 1981005, upload-time = "2025-11-04T13:40:54.734Z" }, - { url = "https://files.pythonhosted.org/packages/ea/28/46b7c5c9635ae96ea0fbb779e271a38129df2550f763937659ee6c5dbc65/pydantic_core-2.41.5-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a", size = 2119622, upload-time = "2025-11-04T13:40:56.68Z" }, - { url = "https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14", size = 1891725, upload-time = "2025-11-04T13:40:58.807Z" }, - { url = "https://files.pythonhosted.org/packages/23/04/e89c29e267b8060b40dca97bfc64a19b2a3cf99018167ea1677d96368273/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1", size = 1915040, upload-time = "2025-11-04T13:41:00.853Z" }, - { url = "https://files.pythonhosted.org/packages/84/a3/15a82ac7bd97992a82257f777b3583d3e84bdb06ba6858f745daa2ec8a85/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66", size = 2063691, upload-time = "2025-11-04T13:41:03.504Z" }, - { url = "https://files.pythonhosted.org/packages/74/9b/0046701313c6ef08c0c1cf0e028c67c770a4e1275ca73131563c5f2a310a/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869", size = 2213897, upload-time = "2025-11-04T13:41:05.804Z" }, - { url = "https://files.pythonhosted.org/packages/8a/cd/6bac76ecd1b27e75a95ca3a9a559c643b3afcd2dd62086d4b7a32a18b169/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2", size = 2333302, upload-time = "2025-11-04T13:41:07.809Z" }, - { url = "https://files.pythonhosted.org/packages/4c/d2/ef2074dc020dd6e109611a8be4449b98cd25e1b9b8a303c2f0fca2f2bcf7/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375", size = 2064877, upload-time = "2025-11-04T13:41:09.827Z" }, - { url = "https://files.pythonhosted.org/packages/18/66/e9db17a9a763d72f03de903883c057b2592c09509ccfe468187f2a2eef29/pydantic_core-2.41.5-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553", size = 2180680, upload-time = "2025-11-04T13:41:12.379Z" }, - { url = "https://files.pythonhosted.org/packages/d3/9e/3ce66cebb929f3ced22be85d4c2399b8e85b622db77dad36b73c5387f8f8/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90", size = 2138960, upload-time = "2025-11-04T13:41:14.627Z" }, - { url = "https://files.pythonhosted.org/packages/a6/62/205a998f4327d2079326b01abee48e502ea739d174f0a89295c481a2272e/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07", size = 2339102, upload-time = "2025-11-04T13:41:16.868Z" }, - { url = "https://files.pythonhosted.org/packages/3c/0d/f05e79471e889d74d3d88f5bd20d0ed189ad94c2423d81ff8d0000aab4ff/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb", size = 2326039, upload-time = "2025-11-04T13:41:18.934Z" }, - { url = "https://files.pythonhosted.org/packages/ec/e1/e08a6208bb100da7e0c4b288eed624a703f4d129bde2da475721a80cab32/pydantic_core-2.41.5-cp314-cp314-win32.whl", hash = "sha256:aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23", size = 1995126, upload-time = "2025-11-04T13:41:21.418Z" }, - { url = "https://files.pythonhosted.org/packages/48/5d/56ba7b24e9557f99c9237e29f5c09913c81eeb2f3217e40e922353668092/pydantic_core-2.41.5-cp314-cp314-win_amd64.whl", hash = "sha256:8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf", size = 2015489, upload-time = "2025-11-04T13:41:24.076Z" }, - { url = "https://files.pythonhosted.org/packages/4e/bb/f7a190991ec9e3e0ba22e4993d8755bbc4a32925c0b5b42775c03e8148f9/pydantic_core-2.41.5-cp314-cp314-win_arm64.whl", hash = "sha256:e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0", size = 1977288, upload-time = "2025-11-04T13:41:26.33Z" }, - { url = "https://files.pythonhosted.org/packages/92/ed/77542d0c51538e32e15afe7899d79efce4b81eee631d99850edc2f5e9349/pydantic_core-2.41.5-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a", size = 2120255, upload-time = "2025-11-04T13:41:28.569Z" }, - { url = "https://files.pythonhosted.org/packages/bb/3d/6913dde84d5be21e284439676168b28d8bbba5600d838b9dca99de0fad71/pydantic_core-2.41.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3", size = 1863760, upload-time = "2025-11-04T13:41:31.055Z" }, - { url = "https://files.pythonhosted.org/packages/5a/f0/e5e6b99d4191da102f2b0eb9687aaa7f5bea5d9964071a84effc3e40f997/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c", size = 1878092, upload-time = "2025-11-04T13:41:33.21Z" }, - { url = "https://files.pythonhosted.org/packages/71/48/36fb760642d568925953bcc8116455513d6e34c4beaa37544118c36aba6d/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612", size = 2053385, upload-time = "2025-11-04T13:41:35.508Z" }, - { url = "https://files.pythonhosted.org/packages/20/25/92dc684dd8eb75a234bc1c764b4210cf2646479d54b47bf46061657292a8/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d", size = 2218832, upload-time = "2025-11-04T13:41:37.732Z" }, - { url = "https://files.pythonhosted.org/packages/e2/09/f53e0b05023d3e30357d82eb35835d0f6340ca344720a4599cd663dca599/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9", size = 2327585, upload-time = "2025-11-04T13:41:40Z" }, - { url = "https://files.pythonhosted.org/packages/aa/4e/2ae1aa85d6af35a39b236b1b1641de73f5a6ac4d5a7509f77b814885760c/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660", size = 2041078, upload-time = "2025-11-04T13:41:42.323Z" }, - { url = "https://files.pythonhosted.org/packages/cd/13/2e215f17f0ef326fc72afe94776edb77525142c693767fc347ed6288728d/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9", size = 2173914, upload-time = "2025-11-04T13:41:45.221Z" }, - { url = "https://files.pythonhosted.org/packages/02/7a/f999a6dcbcd0e5660bc348a3991c8915ce6599f4f2c6ac22f01d7a10816c/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3", size = 2129560, upload-time = "2025-11-04T13:41:47.474Z" }, - { url = "https://files.pythonhosted.org/packages/3a/b1/6c990ac65e3b4c079a4fb9f5b05f5b013afa0f4ed6780a3dd236d2cbdc64/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf", size = 2329244, upload-time = "2025-11-04T13:41:49.992Z" }, - { url = "https://files.pythonhosted.org/packages/d9/02/3c562f3a51afd4d88fff8dffb1771b30cfdfd79befd9883ee094f5b6c0d8/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470", size = 2331955, upload-time = "2025-11-04T13:41:54.079Z" }, - { url = "https://files.pythonhosted.org/packages/5c/96/5fb7d8c3c17bc8c62fdb031c47d77a1af698f1d7a406b0f79aaa1338f9ad/pydantic_core-2.41.5-cp314-cp314t-win32.whl", hash = "sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa", size = 1988906, upload-time = "2025-11-04T13:41:56.606Z" }, - { url = "https://files.pythonhosted.org/packages/22/ed/182129d83032702912c2e2d8bbe33c036f342cc735737064668585dac28f/pydantic_core-2.41.5-cp314-cp314t-win_amd64.whl", hash = "sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c", size = 1981607, upload-time = "2025-11-04T13:41:58.889Z" }, - { url = "https://files.pythonhosted.org/packages/9f/ed/068e41660b832bb0b1aa5b58011dea2a3fe0ba7861ff38c4d4904c1c1a99/pydantic_core-2.41.5-cp314-cp314t-win_arm64.whl", hash = "sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008", size = 1974769, upload-time = "2025-11-04T13:42:01.186Z" }, - { url = "https://files.pythonhosted.org/packages/54/db/160dffb57ed9a3705c4cbcbff0ac03bdae45f1ca7d58ab74645550df3fbd/pydantic_core-2.41.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:8bfeaf8735be79f225f3fefab7f941c712aaca36f1128c9d7e2352ee1aa87bdf", size = 2107999, upload-time = "2025-11-04T13:42:03.885Z" }, - { url = "https://files.pythonhosted.org/packages/a3/7d/88e7de946f60d9263cc84819f32513520b85c0f8322f9b8f6e4afc938383/pydantic_core-2.41.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:346285d28e4c8017da95144c7f3acd42740d637ff41946af5ce6e5e420502dd5", size = 1929745, upload-time = "2025-11-04T13:42:06.075Z" }, - { url = "https://files.pythonhosted.org/packages/d5/c2/aef51e5b283780e85e99ff19db0f05842d2d4a8a8cd15e63b0280029b08f/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a75dafbf87d6276ddc5b2bf6fae5254e3d0876b626eb24969a574fff9149ee5d", size = 1920220, upload-time = "2025-11-04T13:42:08.457Z" }, - { url = "https://files.pythonhosted.org/packages/c7/97/492ab10f9ac8695cd76b2fdb24e9e61f394051df71594e9bcc891c9f586e/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7b93a4d08587e2b7e7882de461e82b6ed76d9026ce91ca7915e740ecc7855f60", size = 2067296, upload-time = "2025-11-04T13:42:10.817Z" }, - { url = "https://files.pythonhosted.org/packages/ec/23/984149650e5269c59a2a4c41d234a9570adc68ab29981825cfaf4cfad8f4/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e8465ab91a4bd96d36dde3263f06caa6a8a6019e4113f24dc753d79a8b3a3f82", size = 2231548, upload-time = "2025-11-04T13:42:13.843Z" }, - { url = "https://files.pythonhosted.org/packages/71/0c/85bcbb885b9732c28bec67a222dbed5ed2d77baee1f8bba2002e8cd00c5c/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:299e0a22e7ae2b85c1a57f104538b2656e8ab1873511fd718a1c1c6f149b77b5", size = 2362571, upload-time = "2025-11-04T13:42:16.208Z" }, - { url = "https://files.pythonhosted.org/packages/c0/4a/412d2048be12c334003e9b823a3fa3d038e46cc2d64dd8aab50b31b65499/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:707625ef0983fcfb461acfaf14de2067c5942c6bb0f3b4c99158bed6fedd3cf3", size = 2068175, upload-time = "2025-11-04T13:42:18.911Z" }, - { url = "https://files.pythonhosted.org/packages/73/f4/c58b6a776b502d0a5540ad02e232514285513572060f0d78f7832ca3c98b/pydantic_core-2.41.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f41eb9797986d6ebac5e8edff36d5cef9de40def462311b3eb3eeded1431e425", size = 2177203, upload-time = "2025-11-04T13:42:22.578Z" }, - { url = "https://files.pythonhosted.org/packages/ed/ae/f06ea4c7e7a9eead3d165e7623cd2ea0cb788e277e4f935af63fc98fa4e6/pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0384e2e1021894b1ff5a786dbf94771e2986ebe2869533874d7e43bc79c6f504", size = 2148191, upload-time = "2025-11-04T13:42:24.89Z" }, - { url = "https://files.pythonhosted.org/packages/c1/57/25a11dcdc656bf5f8b05902c3c2934ac3ea296257cc4a3f79a6319e61856/pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:f0cd744688278965817fd0839c4a4116add48d23890d468bc436f78beb28abf5", size = 2343907, upload-time = "2025-11-04T13:42:27.683Z" }, - { url = "https://files.pythonhosted.org/packages/96/82/e33d5f4933d7a03327c0c43c65d575e5919d4974ffc026bc917a5f7b9f61/pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:753e230374206729bf0a807954bcc6c150d3743928a73faffee51ac6557a03c3", size = 2322174, upload-time = "2025-11-04T13:42:30.776Z" }, - { url = "https://files.pythonhosted.org/packages/81/45/4091be67ce9f469e81656f880f3506f6a5624121ec5eb3eab37d7581897d/pydantic_core-2.41.5-cp39-cp39-win32.whl", hash = "sha256:873e0d5b4fb9b89ef7c2d2a963ea7d02879d9da0da8d9d4933dee8ee86a8b460", size = 1990353, upload-time = "2025-11-04T13:42:33.111Z" }, - { url = "https://files.pythonhosted.org/packages/44/8a/a98aede18db6e9cd5d66bcacd8a409fcf8134204cdede2e7de35c5a2c5ef/pydantic_core-2.41.5-cp39-cp39-win_amd64.whl", hash = "sha256:e4f4a984405e91527a0d62649ee21138f8e3d0ef103be488c1dc11a80d7f184b", size = 2015698, upload-time = "2025-11-04T13:42:35.484Z" }, - { url = "https://files.pythonhosted.org/packages/11/72/90fda5ee3b97e51c494938a4a44c3a35a9c96c19bba12372fb9c634d6f57/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:b96d5f26b05d03cc60f11a7761a5ded1741da411e7fe0909e27a5e6a0cb7b034", size = 2115441, upload-time = "2025-11-04T13:42:39.557Z" }, - { url = "https://files.pythonhosted.org/packages/1f/53/8942f884fa33f50794f119012dc6a1a02ac43a56407adaac20463df8e98f/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:634e8609e89ceecea15e2d61bc9ac3718caaaa71963717bf3c8f38bfde64242c", size = 1930291, upload-time = "2025-11-04T13:42:42.169Z" }, - { url = "https://files.pythonhosted.org/packages/79/c8/ecb9ed9cd942bce09fc888ee960b52654fbdbede4ba6c2d6e0d3b1d8b49c/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:93e8740d7503eb008aa2df04d3b9735f845d43ae845e6dcd2be0b55a2da43cd2", size = 1948632, upload-time = "2025-11-04T13:42:44.564Z" }, - { url = "https://files.pythonhosted.org/packages/2e/1b/687711069de7efa6af934e74f601e2a4307365e8fdc404703afc453eab26/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f15489ba13d61f670dcc96772e733aad1a6f9c429cc27574c6cdaed82d0146ad", size = 2138905, upload-time = "2025-11-04T13:42:47.156Z" }, - { url = "https://files.pythonhosted.org/packages/09/32/59b0c7e63e277fa7911c2fc70ccfb45ce4b98991e7ef37110663437005af/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd", size = 2110495, upload-time = "2025-11-04T13:42:49.689Z" }, - { url = "https://files.pythonhosted.org/packages/aa/81/05e400037eaf55ad400bcd318c05bb345b57e708887f07ddb2d20e3f0e98/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc", size = 1915388, upload-time = "2025-11-04T13:42:52.215Z" }, - { url = "https://files.pythonhosted.org/packages/6e/0d/e3549b2399f71d56476b77dbf3cf8937cec5cd70536bdc0e374a421d0599/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56", size = 1942879, upload-time = "2025-11-04T13:42:56.483Z" }, - { url = "https://files.pythonhosted.org/packages/f7/07/34573da085946b6a313d7c42f82f16e8920bfd730665de2d11c0c37a74b5/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b", size = 2139017, upload-time = "2025-11-04T13:42:59.471Z" }, - { url = "https://files.pythonhosted.org/packages/e6/b0/1a2aa41e3b5a4ba11420aba2d091b2d17959c8d1519ece3627c371951e73/pydantic_core-2.41.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b5819cd790dbf0c5eb9f82c73c16b39a65dd6dd4d1439dcdea7816ec9adddab8", size = 2103351, upload-time = "2025-11-04T13:43:02.058Z" }, - { url = "https://files.pythonhosted.org/packages/a4/ee/31b1f0020baaf6d091c87900ae05c6aeae101fa4e188e1613c80e4f1ea31/pydantic_core-2.41.5-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5a4e67afbc95fa5c34cf27d9089bca7fcab4e51e57278d710320a70b956d1b9a", size = 1925363, upload-time = "2025-11-04T13:43:05.159Z" }, - { url = "https://files.pythonhosted.org/packages/e1/89/ab8e86208467e467a80deaca4e434adac37b10a9d134cd2f99b28a01e483/pydantic_core-2.41.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ece5c59f0ce7d001e017643d8d24da587ea1f74f6993467d85ae8a5ef9d4f42b", size = 2135615, upload-time = "2025-11-04T13:43:08.116Z" }, - { url = "https://files.pythonhosted.org/packages/99/0a/99a53d06dd0348b2008f2f30884b34719c323f16c3be4e6cc1203b74a91d/pydantic_core-2.41.5-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:16f80f7abe3351f8ea6858914ddc8c77e02578544a0ebc15b4c2e1a0e813b0b2", size = 2175369, upload-time = "2025-11-04T13:43:12.49Z" }, - { url = "https://files.pythonhosted.org/packages/6d/94/30ca3b73c6d485b9bb0bc66e611cff4a7138ff9736b7e66bcf0852151636/pydantic_core-2.41.5-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:33cb885e759a705b426baada1fe68cbb0a2e68e34c5d0d0289a364cf01709093", size = 2144218, upload-time = "2025-11-04T13:43:15.431Z" }, - { url = "https://files.pythonhosted.org/packages/87/57/31b4f8e12680b739a91f472b5671294236b82586889ef764b5fbc6669238/pydantic_core-2.41.5-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:c8d8b4eb992936023be7dee581270af5c6e0697a8559895f527f5b7105ecd36a", size = 2329951, upload-time = "2025-11-04T13:43:18.062Z" }, - { url = "https://files.pythonhosted.org/packages/7d/73/3c2c8edef77b8f7310e6fb012dbc4b8551386ed575b9eb6fb2506e28a7eb/pydantic_core-2.41.5-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:242a206cd0318f95cd21bdacff3fcc3aab23e79bba5cac3db5a841c9ef9c6963", size = 2318428, upload-time = "2025-11-04T13:43:20.679Z" }, - { url = "https://files.pythonhosted.org/packages/2f/02/8559b1f26ee0d502c74f9cca5c0d2fd97e967e083e006bbbb4e97f3a043a/pydantic_core-2.41.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d3a978c4f57a597908b7e697229d996d77a6d3c94901e9edee593adada95ce1a", size = 2147009, upload-time = "2025-11-04T13:43:23.286Z" }, - { url = "https://files.pythonhosted.org/packages/5f/9b/1b3f0e9f9305839d7e84912f9e8bfbd191ed1b1ef48083609f0dabde978c/pydantic_core-2.41.5-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b2379fa7ed44ddecb5bfe4e48577d752db9fc10be00a6b7446e9663ba143de26", size = 2101980, upload-time = "2025-11-04T13:43:25.97Z" }, - { url = "https://files.pythonhosted.org/packages/a4/ed/d71fefcb4263df0da6a85b5d8a7508360f2f2e9b3bf5814be9c8bccdccc1/pydantic_core-2.41.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:266fb4cbf5e3cbd0b53669a6d1b039c45e3ce651fd5442eff4d07c2cc8d66808", size = 1923865, upload-time = "2025-11-04T13:43:28.763Z" }, - { url = "https://files.pythonhosted.org/packages/ce/3a/626b38db460d675f873e4444b4bb030453bbe7b4ba55df821d026a0493c4/pydantic_core-2.41.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58133647260ea01e4d0500089a8c4f07bd7aa6ce109682b1426394988d8aaacc", size = 2134256, upload-time = "2025-11-04T13:43:31.71Z" }, - { url = "https://files.pythonhosted.org/packages/83/d9/8412d7f06f616bbc053d30cb4e5f76786af3221462ad5eee1f202021eb4e/pydantic_core-2.41.5-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:287dad91cfb551c363dc62899a80e9e14da1f0e2b6ebde82c806612ca2a13ef1", size = 2174762, upload-time = "2025-11-04T13:43:34.744Z" }, - { url = "https://files.pythonhosted.org/packages/55/4c/162d906b8e3ba3a99354e20faa1b49a85206c47de97a639510a0e673f5da/pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:03b77d184b9eb40240ae9fd676ca364ce1085f203e1b1256f8ab9984dca80a84", size = 2143141, upload-time = "2025-11-04T13:43:37.701Z" }, - { url = "https://files.pythonhosted.org/packages/1f/f2/f11dd73284122713f5f89fc940f370d035fa8e1e078d446b3313955157fe/pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:a668ce24de96165bb239160b3d854943128f4334822900534f2fe947930e5770", size = 2330317, upload-time = "2025-11-04T13:43:40.406Z" }, - { url = "https://files.pythonhosted.org/packages/88/9d/b06ca6acfe4abb296110fb1273a4d848a0bfb2ff65f3ee92127b3244e16b/pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f14f8f046c14563f8eb3f45f499cc658ab8d10072961e07225e507adb700e93f", size = 2316992, upload-time = "2025-11-04T13:43:43.602Z" }, - { url = "https://files.pythonhosted.org/packages/36/c7/cfc8e811f061c841d7990b0201912c3556bfeb99cdcb7ed24adc8d6f8704/pydantic_core-2.41.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:56121965f7a4dc965bff783d70b907ddf3d57f6eba29b6d2e5dabfaf07799c51", size = 2145302, upload-time = "2025-11-04T13:43:46.64Z" }, -] - -[[package]] -name = "pygments" -version = "2.19.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, -] - -[[package]] -name = "pyright" -version = "1.1.399" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "nodeenv" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/db/9d/d91d5f6d26b2db95476fefc772e2b9a16d54c6bd0ea6bb5c1b6d635ab8b4/pyright-1.1.399.tar.gz", hash = "sha256:439035d707a36c3d1b443aec980bc37053fbda88158eded24b8eedcf1c7b7a1b", size = 3856954, upload-time = "2025-04-10T04:40:25.703Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/b5/380380c9e7a534cb1783c70c3e8ac6d1193c599650a55838d0557586796e/pyright-1.1.399-py3-none-any.whl", hash = "sha256:55f9a875ddf23c9698f24208c764465ffdfd38be6265f7faf9a176e1dc549f3b", size = 5592584, upload-time = "2025-04-10T04:40:23.502Z" }, -] - -[[package]] -name = "pytest" -version = "8.4.2" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "colorama", marker = "(python_full_version < '3.10' and sys_platform == 'win32') or (python_full_version >= '3.10' and extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2') or (sys_platform != 'win32' and extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "exceptiongroup", marker = "python_full_version < '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "iniconfig", version = "2.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "packaging", marker = "python_full_version < '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "pluggy", marker = "python_full_version < '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "pygments", marker = "python_full_version < '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "tomli", marker = "python_full_version < '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a3/5c/00a0e072241553e1a7496d638deababa67c5058571567b92a7eaa258397c/pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01", size = 1519618, upload-time = "2025-09-04T14:34:22.711Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a8/a4/20da314d277121d6534b3a980b29035dcd51e6744bd79075a6ce8fa4eb8d/pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79", size = 365750, upload-time = "2025-09-04T14:34:20.226Z" }, -] - -[[package]] -name = "pytest" -version = "9.0.2" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version == '3.11.*' and sys_platform == 'emscripten'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.10.*'", -] -dependencies = [ - { name = "colorama", marker = "(python_full_version >= '3.10' and sys_platform == 'win32') or (python_full_version < '3.10' and extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2') or (sys_platform != 'win32' and extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "exceptiongroup", marker = "python_full_version == '3.10.*' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "iniconfig", version = "2.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "packaging", marker = "python_full_version >= '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "pluggy", marker = "python_full_version >= '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "pygments", marker = "python_full_version >= '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "tomli", marker = "python_full_version == '3.10.*' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size = 1568901, upload-time = "2025-12-06T21:30:51.014Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl", hash = "sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b", size = 374801, upload-time = "2025-12-06T21:30:49.154Z" }, -] - -[[package]] -name = "pytest-asyncio" -version = "1.2.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "backports-asyncio-runner", marker = "python_full_version < '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "typing-extensions", marker = "python_full_version < '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/42/86/9e3c5f48f7b7b638b216e4b9e645f54d199d7abbbab7a64a13b4e12ba10f/pytest_asyncio-1.2.0.tar.gz", hash = "sha256:c609a64a2a8768462d0c99811ddb8bd2583c33fd33cf7f21af1c142e824ffb57", size = 50119, upload-time = "2025-09-12T07:33:53.816Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/93/2fa34714b7a4ae72f2f8dad66ba17dd9a2c793220719e736dda28b7aec27/pytest_asyncio-1.2.0-py3-none-any.whl", hash = "sha256:8e17ae5e46d8e7efe51ab6494dd2010f4ca8dae51652aa3c8d55acf50bfb2e99", size = 15095, upload-time = "2025-09-12T07:33:52.639Z" }, -] - -[[package]] -name = "pytest-asyncio" -version = "1.3.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version == '3.11.*' and sys_platform == 'emscripten'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.10.*'", -] -dependencies = [ - { name = "backports-asyncio-runner", marker = "python_full_version == '3.10.*' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "pytest", version = "9.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "typing-extensions", marker = "(python_full_version >= '3.10' and python_full_version < '3.13') or (python_full_version < '3.10' and extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2') or (python_full_version >= '3.13' and extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/90/2c/8af215c0f776415f3590cac4f9086ccefd6fd463befeae41cd4d3f193e5a/pytest_asyncio-1.3.0.tar.gz", hash = "sha256:d7f52f36d231b80ee124cd216ffb19369aa168fc10095013c6b014a34d3ee9e5", size = 50087, upload-time = "2025-11-10T16:07:47.256Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl", hash = "sha256:611e26147c7f77640e6d0a92a38ed17c3e9848063698d5c93d5aa7aa11cebff5", size = 15075, upload-time = "2025-11-10T16:07:45.537Z" }, -] - -[[package]] -name = "pytest-xdist" -version = "3.8.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "execnet" }, - { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "pytest", version = "9.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/78/b4/439b179d1ff526791eb921115fca8e44e596a13efeda518b9d845a619450/pytest_xdist-3.8.0.tar.gz", hash = "sha256:7e578125ec9bc6050861aa93f2d59f1d8d085595d6551c2c90b6f4fad8d3a9f1", size = 88069, upload-time = "2025-07-01T13:30:59.346Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl", hash = "sha256:202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88", size = 46396, upload-time = "2025-07-01T13:30:56.632Z" }, -] - -[[package]] -name = "python-dateutil" -version = "2.9.0.post0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "six" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, -] - -[[package]] -name = "pytz" -version = "2026.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ff/46/dd499ec9038423421951e4fad73051febaa13d2df82b4064f87af8b8c0c3/pytz-2026.2.tar.gz", hash = "sha256:0e60b47b29f21574376f218fe21abc009894a2321ea16c6754f3cad6eb7cdd6a", size = 320861, upload-time = "2026-05-04T01:35:29.667Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/dd/96da98f892250475bdf2328112d7468abdd4acc7b902b6af23f4ed958ea0/pytz-2026.2-py2.py3-none-any.whl", hash = "sha256:04156e608bee23d3792fd45c94ae47fae1036688e75032eea2e3bf0323d1f126", size = 510141, upload-time = "2026-05-04T01:35:27.408Z" }, -] - -[[package]] -name = "respx" -version = "0.22.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "httpx" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f4/7c/96bd0bc759cf009675ad1ee1f96535edcb11e9666b985717eb8c87192a95/respx-0.22.0.tar.gz", hash = "sha256:3c8924caa2a50bd71aefc07aa812f2466ff489f1848c96e954a5362d17095d91", size = 28439, upload-time = "2024-12-19T22:33:59.374Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8e/67/afbb0978d5399bc9ea200f1d4489a23c9a1dad4eee6376242b8182389c79/respx-0.22.0-py2.py3-none-any.whl", hash = "sha256:631128d4c9aba15e56903fb5f66fb1eff412ce28dd387ca3a81339e52dbd3ad0", size = 25127, upload-time = "2024-12-19T22:33:57.837Z" }, -] - -[[package]] -name = "rich" -version = "14.2.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "markdown-it-py", version = "3.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "markdown-it-py", version = "4.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, - { name = "pygments" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/fb/d2/8920e102050a0de7bfabeb4c4614a49248cf8d5d7a8d01885fbb24dc767a/rich-14.2.0.tar.gz", hash = "sha256:73ff50c7c0c1c77c8243079283f4edb376f0f6442433aecb8ce7e6d0b92d1fe4", size = 219990, upload-time = "2025-10-09T14:16:53.064Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl", hash = "sha256:76bc51fe2e57d2b1be1f96c524b890b816e334ab4c1e45888799bfaab0021edd", size = 243393, upload-time = "2025-10-09T14:16:51.245Z" }, -] - -[[package]] -name = "ruff" -version = "0.14.13" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/50/0a/1914efb7903174b381ee2ffeebb4253e729de57f114e63595114c8ca451f/ruff-0.14.13.tar.gz", hash = "sha256:83cd6c0763190784b99650a20fec7633c59f6ebe41c5cc9d45ee42749563ad47", size = 6059504, upload-time = "2026-01-15T20:15:16.918Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c3/ae/0deefbc65ca74b0ab1fd3917f94dc3b398233346a74b8bbb0a916a1a6bf6/ruff-0.14.13-py3-none-linux_armv6l.whl", hash = "sha256:76f62c62cd37c276cb03a275b198c7c15bd1d60c989f944db08a8c1c2dbec18b", size = 13062418, upload-time = "2026-01-15T20:14:50.779Z" }, - { url = "https://files.pythonhosted.org/packages/47/df/5916604faa530a97a3c154c62a81cb6b735c0cb05d1e26d5ad0f0c8ac48a/ruff-0.14.13-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:914a8023ece0528d5cc33f5a684f5f38199bbb566a04815c2c211d8f40b5d0ed", size = 13442344, upload-time = "2026-01-15T20:15:07.94Z" }, - { url = "https://files.pythonhosted.org/packages/4c/f3/e0e694dd69163c3a1671e102aa574a50357536f18a33375050334d5cd517/ruff-0.14.13-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d24899478c35ebfa730597a4a775d430ad0d5631b8647a3ab368c29b7e7bd063", size = 12354720, upload-time = "2026-01-15T20:15:09.854Z" }, - { url = "https://files.pythonhosted.org/packages/c3/e8/67f5fcbbaee25e8fc3b56cc33e9892eca7ffe09f773c8e5907757a7e3bdb/ruff-0.14.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9aaf3870f14d925bbaf18b8a2347ee0ae7d95a2e490e4d4aea6813ed15ebc80e", size = 12774493, upload-time = "2026-01-15T20:15:20.908Z" }, - { url = "https://files.pythonhosted.org/packages/6b/ce/d2e9cb510870b52a9565d885c0d7668cc050e30fa2c8ac3fb1fda15c083d/ruff-0.14.13-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac5b7f63dd3b27cc811850f5ffd8fff845b00ad70e60b043aabf8d6ecc304e09", size = 12815174, upload-time = "2026-01-15T20:15:05.74Z" }, - { url = "https://files.pythonhosted.org/packages/88/00/c38e5da58beebcf4fa32d0ddd993b63dfacefd02ab7922614231330845bf/ruff-0.14.13-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78d2b1097750d90ba82ce4ba676e85230a0ed694178ca5e61aa9b459970b3eb9", size = 13680909, upload-time = "2026-01-15T20:15:14.537Z" }, - { url = "https://files.pythonhosted.org/packages/61/61/cd37c9dd5bd0a3099ba79b2a5899ad417d8f3b04038810b0501a80814fd7/ruff-0.14.13-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:7d0bf87705acbbcb8d4c24b2d77fbb73d40210a95c3903b443cd9e30824a5032", size = 15144215, upload-time = "2026-01-15T20:15:22.886Z" }, - { url = "https://files.pythonhosted.org/packages/56/8a/85502d7edbf98c2df7b8876f316c0157359165e16cdf98507c65c8d07d3d/ruff-0.14.13-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3eb5da8e2c9e9f13431032fdcbe7681de9ceda5835efee3269417c13f1fed5c", size = 14706067, upload-time = "2026-01-15T20:14:48.271Z" }, - { url = "https://files.pythonhosted.org/packages/7e/2f/de0df127feb2ee8c1e54354dc1179b4a23798f0866019528c938ba439aca/ruff-0.14.13-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:642442b42957093811cd8d2140dfadd19c7417030a7a68cf8d51fcdd5f217427", size = 14133916, upload-time = "2026-01-15T20:14:57.357Z" }, - { url = "https://files.pythonhosted.org/packages/0d/77/9b99686bb9fe07a757c82f6f95e555c7a47801a9305576a9c67e0a31d280/ruff-0.14.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4acdf009f32b46f6e8864af19cbf6841eaaed8638e65c8dac845aea0d703c841", size = 13859207, upload-time = "2026-01-15T20:14:55.111Z" }, - { url = "https://files.pythonhosted.org/packages/7d/46/2bdcb34a87a179a4d23022d818c1c236cb40e477faf0d7c9afb6813e5876/ruff-0.14.13-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:591a7f68860ea4e003917d19b5c4f5ac39ff558f162dc753a2c5de897fd5502c", size = 14043686, upload-time = "2026-01-15T20:14:52.841Z" }, - { url = "https://files.pythonhosted.org/packages/1a/a9/5c6a4f56a0512c691cf143371bcf60505ed0f0860f24a85da8bd123b2bf1/ruff-0.14.13-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:774c77e841cc6e046fc3e91623ce0903d1cd07e3a36b1a9fe79b81dab3de506b", size = 12663837, upload-time = "2026-01-15T20:15:18.921Z" }, - { url = "https://files.pythonhosted.org/packages/fe/bb/b920016ece7651fa7fcd335d9d199306665486694d4361547ccb19394c44/ruff-0.14.13-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:61f4e40077a1248436772bb6512db5fc4457fe4c49e7a94ea7c5088655dd21ae", size = 12805867, upload-time = "2026-01-15T20:14:59.272Z" }, - { url = "https://files.pythonhosted.org/packages/7d/b3/0bd909851e5696cd21e32a8fc25727e5f58f1934b3596975503e6e85415c/ruff-0.14.13-py3-none-musllinux_1_2_i686.whl", hash = "sha256:6d02f1428357fae9e98ac7aa94b7e966fd24151088510d32cf6f902d6c09235e", size = 13208528, upload-time = "2026-01-15T20:15:03.732Z" }, - { url = "https://files.pythonhosted.org/packages/3b/3b/e2d94cb613f6bbd5155a75cbe072813756363eba46a3f2177a1fcd0cd670/ruff-0.14.13-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e399341472ce15237be0c0ae5fbceca4b04cd9bebab1a2b2c979e015455d8f0c", size = 13929242, upload-time = "2026-01-15T20:15:11.918Z" }, - { url = "https://files.pythonhosted.org/packages/6a/c5/abd840d4132fd51a12f594934af5eba1d5d27298a6f5b5d6c3be45301caf/ruff-0.14.13-py3-none-win32.whl", hash = "sha256:ef720f529aec113968b45dfdb838ac8934e519711da53a0456038a0efecbd680", size = 12919024, upload-time = "2026-01-15T20:14:43.647Z" }, - { url = "https://files.pythonhosted.org/packages/c2/55/6384b0b8ce731b6e2ade2b5449bf07c0e4c31e8a2e68ea65b3bafadcecc5/ruff-0.14.13-py3-none-win_amd64.whl", hash = "sha256:6070bd026e409734b9257e03e3ef18c6e1a216f0435c6751d7a8ec69cb59abef", size = 14097887, upload-time = "2026-01-15T20:15:01.48Z" }, - { url = "https://files.pythonhosted.org/packages/4d/e1/7348090988095e4e39560cfc2f7555b1b2a7357deba19167b600fdf5215d/ruff-0.14.13-py3-none-win_arm64.whl", hash = "sha256:7ab819e14f1ad9fe39f246cfcc435880ef7a9390d81a2b6ac7e01039083dd247", size = 13080224, upload-time = "2026-01-15T20:14:45.853Z" }, -] - -[[package]] -name = "six" -version = "1.17.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, -] - -[[package]] -name = "sniffio" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, -] - -[[package]] -name = "time-machine" -version = "2.19.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "python-dateutil", marker = "python_full_version < '3.10' or (extra == 'group-8-profound-pydantic-v1' and extra == 'group-8-profound-pydantic-v2')" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f8/a4/1b5fdd165f61b67f445fac2a7feb0c655118edef429cd09ff5a8067f7f1d/time_machine-2.19.0.tar.gz", hash = "sha256:7c5065a8b3f2bbb449422c66ef71d114d3f909c276a6469642ecfffb6a0fcd29", size = 14576, upload-time = "2025-08-19T17:22:08.402Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9d/8f/19125611ebbcb3a14da14cd982b9eb4573e2733db60c9f1fbf6a39534f40/time_machine-2.19.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b5169018ef47206997b46086ce01881cd3a4666fd2998c9d76a87858ca3e49e9", size = 19659, upload-time = "2025-08-19T17:20:30.062Z" }, - { url = "https://files.pythonhosted.org/packages/74/da/9b0a928321e7822a3ff96dbd1eae089883848e30e9e1b149b85fb96ba56b/time_machine-2.19.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:85bb7ed440fccf6f6d0c8f7d68d849e7c3d1f771d5e0b2cdf871fa6561da569f", size = 15157, upload-time = "2025-08-19T17:20:31.931Z" }, - { url = "https://files.pythonhosted.org/packages/36/ff/d7e943422038f5f2161fe2c2d791e64a45be691ef946020b20f3a6efc4d4/time_machine-2.19.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a3b12028af1cdc09ccd595be2168b7b26f206c1e190090b048598fbe278beb8e", size = 32860, upload-time = "2025-08-19T17:20:33.241Z" }, - { url = "https://files.pythonhosted.org/packages/fc/80/2b0f1070ed9808ee7da7a6da62a4a0b776957cb4d861578348f86446e778/time_machine-2.19.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c261f073086cf081d1443cbf7684148c662659d3d139d06b772bfe3fe7cc71a6", size = 34510, upload-time = "2025-08-19T17:20:34.221Z" }, - { url = "https://files.pythonhosted.org/packages/ef/b4/48038691c8d89924b36c83335a73adeeb68c884f5a1da08a5b17b8a956f3/time_machine-2.19.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:011954d951230a9f1079f22b39ed1a3a9abb50ee297dfb8c557c46351659d94d", size = 36204, upload-time = "2025-08-19T17:20:35.163Z" }, - { url = "https://files.pythonhosted.org/packages/37/2e/60e8adb541df195e83cb74b720b2cfb1f22ed99c5a7f8abf2a9ab3442cb5/time_machine-2.19.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b0f83308b29c7872006803f2e77318874eb84d0654f2afe0e48e3822e7a2e39b", size = 34936, upload-time = "2025-08-19T17:20:36.61Z" }, - { url = "https://files.pythonhosted.org/packages/5e/72/e8cee59c6cd99dd3b25b8001a0253e779a286aa8f44d5b40777cbd66210b/time_machine-2.19.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:39733ef844e2984620ec9382a42d00cccc4757d75a5dd572be8c2572e86e50b9", size = 32932, upload-time = "2025-08-19T17:20:37.901Z" }, - { url = "https://files.pythonhosted.org/packages/2c/eb/83f300d93c1504965d944e03679f1c943a923bce2d0fdfadef0e2e22cc13/time_machine-2.19.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f8db99f6334432e9ffbf00c215caf2ae9773f17cec08304d77e9e90febc3507b", size = 34010, upload-time = "2025-08-19T17:20:39.202Z" }, - { url = "https://files.pythonhosted.org/packages/e1/77/f35f2500e04daac5033a22fbfd17e68467822b8406ee77966bf222ccaa26/time_machine-2.19.0-cp310-cp310-win32.whl", hash = "sha256:72bf66cd19e27ffd26516b9cbe676d50c2e0b026153289765dfe0cf406708128", size = 17121, upload-time = "2025-08-19T17:20:40.108Z" }, - { url = "https://files.pythonhosted.org/packages/db/df/32d3e0404be1760a64a44caab2af34b07e952bfe00a23134fea9ddba3e8a/time_machine-2.19.0-cp310-cp310-win_amd64.whl", hash = "sha256:46f1c945934ce3d6b4f388b8e581fce7f87ec891ea90d7128e19520e434f96f0", size = 17957, upload-time = "2025-08-19T17:20:41.079Z" }, - { url = "https://files.pythonhosted.org/packages/66/df/598a71a1afb4b509a4587273b76590b16d9110a3e9106f01eedc68d02bb2/time_machine-2.19.0-cp310-cp310-win_arm64.whl", hash = "sha256:fb4897c7a5120a4fd03f0670f332d83b7e55645886cd8864a71944c4c2e5b35b", size = 16821, upload-time = "2025-08-19T17:20:41.967Z" }, - { url = "https://files.pythonhosted.org/packages/1d/ed/4815ebcc9b6c14273f692b9be38a9b09eae52a7e532407cc61a51912b121/time_machine-2.19.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5ee91664880434d98e41585c3446dac7180ec408c786347451ddfca110d19296", size = 19342, upload-time = "2025-08-19T17:20:43.207Z" }, - { url = "https://files.pythonhosted.org/packages/ee/08/154cce8b11b60d8238b0b751b8901d369999f4e8f7c3a5f917caa5d95b0b/time_machine-2.19.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ed3732b83a893d1c7b8cabde762968b4dc5680ee0d305b3ecca9bb516f4e3862", size = 14978, upload-time = "2025-08-19T17:20:44.134Z" }, - { url = "https://files.pythonhosted.org/packages/c7/b7/b689d8c8eeca7af375cfcd64973e49e83aa817cc00f80f98548d42c0eb50/time_machine-2.19.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:6ba0303e9cc9f7f947e344f501e26bedfb68fab521e3c2729d370f4f332d2d55", size = 30964, upload-time = "2025-08-19T17:20:45.366Z" }, - { url = "https://files.pythonhosted.org/packages/80/91/38bf9c79674e95ce32e23c267055f281dff651eec77ed32a677db3dc011a/time_machine-2.19.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2851825b524a988ee459c37c1c26bdfaa7eff78194efb2b562ea497a6f375b0a", size = 32606, upload-time = "2025-08-19T17:20:46.693Z" }, - { url = "https://files.pythonhosted.org/packages/19/4a/e9222d85d4de68975a5e799f539a9d32f3a134a9101fca0a61fa6aa33d68/time_machine-2.19.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:68d32b09ecfd7fef59255c091e8e7c24dd117f882c4880b5c7ab8c5c32a98f89", size = 34405, upload-time = "2025-08-19T17:20:48.032Z" }, - { url = "https://files.pythonhosted.org/packages/14/e2/09480d608d42d6876f9ff74593cfc9197a7eb2c31381a74fb2b145575b65/time_machine-2.19.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:60c46ab527bf2fa144b530f639cc9e12803524c9e1f111dc8c8f493bb6586eeb", size = 33181, upload-time = "2025-08-19T17:20:48.937Z" }, - { url = "https://files.pythonhosted.org/packages/84/64/f9359e000fad32d9066305c48abc527241d608bcdf77c19d67d66e268455/time_machine-2.19.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:56f26ab9f0201c453d18fe76bb7d1cf05fe58c1b9d9cb0c7d243d05132e01292", size = 31036, upload-time = "2025-08-19T17:20:50.276Z" }, - { url = "https://files.pythonhosted.org/packages/71/0d/fab2aacec71e3e482bd7fce0589381f9414a4a97f8766bddad04ad047b7b/time_machine-2.19.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6c806cf3c1185baa1d807b7f51bed0db7a6506832c961d5d1b4c94c775749bc0", size = 32145, upload-time = "2025-08-19T17:20:51.449Z" }, - { url = "https://files.pythonhosted.org/packages/44/fb/faeba2405fb27553f7b28db441a500e2064ffdb2dcba001ee315fdd2c121/time_machine-2.19.0-cp311-cp311-win32.whl", hash = "sha256:b30039dfd89855c12138095bee39c540b4633cbc3684580d684ef67a99a91587", size = 17004, upload-time = "2025-08-19T17:20:52.38Z" }, - { url = "https://files.pythonhosted.org/packages/2f/84/87e483d660ca669426192969280366635c845c3154a9fe750be546ed3afc/time_machine-2.19.0-cp311-cp311-win_amd64.whl", hash = "sha256:13ed8b34430f1de79905877f5600adffa626793ab4546a70a99fb72c6a3350d8", size = 17822, upload-time = "2025-08-19T17:20:53.348Z" }, - { url = "https://files.pythonhosted.org/packages/41/f4/ebf7bbf5047854a528adaf54a5e8780bc5f7f0104c298ab44566a3053bf8/time_machine-2.19.0-cp311-cp311-win_arm64.whl", hash = "sha256:cc29a50a0257d8750b08056b66d7225daab47606832dea1a69e8b017323bf511", size = 16680, upload-time = "2025-08-19T17:20:54.26Z" }, - { url = "https://files.pythonhosted.org/packages/9b/aa/7e00614d339e4d687f6e96e312a1566022528427d237ec639df66c4547bc/time_machine-2.19.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:c85cf437dc3c07429456d8d6670ac90ecbd8241dcd0fbf03e8db2800576f91ff", size = 19308, upload-time = "2025-08-19T17:20:55.25Z" }, - { url = "https://files.pythonhosted.org/packages/ab/3c/bde3c757394f5bca2fbc1528d4117960a26c38f9b160bf471b38d2378d8f/time_machine-2.19.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d9238897e8ef54acdf59f5dff16f59ca0720e7c02d820c56b4397c11db5d3eb9", size = 15019, upload-time = "2025-08-19T17:20:56.204Z" }, - { url = "https://files.pythonhosted.org/packages/c8/e0/8ca916dd918018352d377f1f5226ee071cfbeb7dbbde2b03d14a411ac2b1/time_machine-2.19.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:e312c7d5d6bfffb96c6a7b39ff29e3046de100d7efaa3c01552654cfbd08f14c", size = 33079, upload-time = "2025-08-19T17:20:57.166Z" }, - { url = "https://files.pythonhosted.org/packages/48/69/184a0209f02dd0cb5e01e8d13cd4c97a5f389c4e3d09b95160dd676ad1e7/time_machine-2.19.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:714c40b2c90d1c57cc403382d5a9cf16e504cb525bfe9650095317da3c3d62b5", size = 34925, upload-time = "2025-08-19T17:20:58.117Z" }, - { url = "https://files.pythonhosted.org/packages/43/42/4bbf4309e8e57cea1086eb99052d97ff6ddecc1ab6a3b07aa4512f8bf963/time_machine-2.19.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2eaa1c675d500dc3ccae19e9fb1feff84458a68c132bbea47a80cc3dd2df7072", size = 36384, upload-time = "2025-08-19T17:20:59.108Z" }, - { url = "https://files.pythonhosted.org/packages/b1/af/9f510dc1719157348c1a2e87423aed406589070b54b503cb237d9bf3a4fe/time_machine-2.19.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e77a414e9597988af53b2b2e67242c9d2f409769df0d264b6d06fda8ca3360d4", size = 34881, upload-time = "2025-08-19T17:21:00.116Z" }, - { url = "https://files.pythonhosted.org/packages/ca/28/61764a635c70cc76c76ba582dfdc1a84834cddaeb96789023af5214426b2/time_machine-2.19.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cd93996970e11c382b04d4937c3cd0b0167adeef14725ece35aae88d8a01733c", size = 32931, upload-time = "2025-08-19T17:21:01.095Z" }, - { url = "https://files.pythonhosted.org/packages/b6/e0/f028d93b266e6ade8aca5851f76ebbc605b2905cdc29981a2943b43e1a6c/time_machine-2.19.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8e20a6d8d6e23174bd7e931e134d9610b136db460b249d07e84ecdad029ec352", size = 34241, upload-time = "2025-08-19T17:21:02.052Z" }, - { url = "https://files.pythonhosted.org/packages/7d/a6/36d1950ed1d3f613158024cf1dcc73db1d9ef0b9117cf51ef2e37dc06499/time_machine-2.19.0-cp312-cp312-win32.whl", hash = "sha256:95afc9bc65228b27be80c2756799c20b8eb97c4ef382a9b762b6d7888bc84099", size = 17021, upload-time = "2025-08-19T17:21:03.374Z" }, - { url = "https://files.pythonhosted.org/packages/b1/0d/e2dce93355abda3cac69e77fe96566757e98b8fe7fdcbddce89c9ced3f5f/time_machine-2.19.0-cp312-cp312-win_amd64.whl", hash = "sha256:e84909af950e2448f4e2562ea5759c946248c99ab380d2b47d79b62bd76fa236", size = 17857, upload-time = "2025-08-19T17:21:04.331Z" }, - { url = "https://files.pythonhosted.org/packages/eb/28/50ae6fb83b7feeeca7a461c0dc156cf7ef5e6ef594a600d06634fde6a2cb/time_machine-2.19.0-cp312-cp312-win_arm64.whl", hash = "sha256:0390a1ea9fa7e9d772a39b7c61b34fdcca80eb9ffac339cc0441c6c714c81470", size = 16677, upload-time = "2025-08-19T17:21:05.39Z" }, - { url = "https://files.pythonhosted.org/packages/a9/b8/24ebce67aa531bae2cbe164bb3f4abc6467dc31f3aead35e77f5a075ea3e/time_machine-2.19.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:5e172866753e6041d3b29f3037dc47c20525176a494a71bbd0998dfdc4f11f2f", size = 19373, upload-time = "2025-08-19T17:21:06.701Z" }, - { url = "https://files.pythonhosted.org/packages/53/a5/c9a5240fd2f845d3ff9fa26f8c8eaa29f7239af9d65007e61d212250f15b/time_machine-2.19.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f70f68379bd6f542ae6775cce9a4fa3dcc20bf7959c42eaef871c14469e18097", size = 15056, upload-time = "2025-08-19T17:21:07.667Z" }, - { url = "https://files.pythonhosted.org/packages/b9/92/66cce5d2fb2a5e68459aca85fd18a7e2d216f725988940cd83f96630f2f1/time_machine-2.19.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:e69e0b0f694728a00e72891ef8dd00c7542952cb1c87237db594b6b27d504a96", size = 33172, upload-time = "2025-08-19T17:21:08.619Z" }, - { url = "https://files.pythonhosted.org/packages/ae/20/b499e9ab4364cd466016c33dcdf4f56629ca4c20b865bd4196d229f31d92/time_machine-2.19.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3ae0a8b869574301ec5637e32c270c7384cca5cd6e230f07af9d29271a7fa293", size = 35042, upload-time = "2025-08-19T17:21:09.622Z" }, - { url = "https://files.pythonhosted.org/packages/41/32/b252d3d32791eb16c07d553c820dbc33d9c7fa771de3d1c602190bded2b7/time_machine-2.19.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:554e4317de90e2f7605ff80d153c8bb56b38c0d0c0279feb17e799521e987b8c", size = 36535, upload-time = "2025-08-19T17:21:10.571Z" }, - { url = "https://files.pythonhosted.org/packages/98/cf/4d0470062b9742e1b040ab81bad04d1a5d1de09806507bb6188989cfa1a7/time_machine-2.19.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6567a5ec5538ed550539ac29be11b3cb36af1f9894e2a72940cba0292cc7c3c9", size = 34945, upload-time = "2025-08-19T17:21:11.538Z" }, - { url = "https://files.pythonhosted.org/packages/24/71/2f741b29d98b1c18f6777a32236497c3d3264b6077e431cea4695684c8a1/time_machine-2.19.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:82e9ffe8dfff07b0d810a2ad015a82cd78c6a237f6c7cf185fa7f747a3256f8a", size = 33014, upload-time = "2025-08-19T17:21:12.858Z" }, - { url = "https://files.pythonhosted.org/packages/e8/83/ca8dba6106562843fd99f672e5aaf95badbc10f4f13f7cfe8d8640a7019d/time_machine-2.19.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7e1c4e578cdd69b3531d8dd3fbcb92a0cd879dadb912ee37af99c3a9e3c0d285", size = 34350, upload-time = "2025-08-19T17:21:13.923Z" }, - { url = "https://files.pythonhosted.org/packages/21/7f/34fe540450e18d0a993240100e4b86e8d03d831b92af8bb6ddb2662dc6fc/time_machine-2.19.0-cp313-cp313-win32.whl", hash = "sha256:72dbd4cbc3d96dec9dd281ddfbb513982102776b63e4e039f83afb244802a9e5", size = 17047, upload-time = "2025-08-19T17:21:14.874Z" }, - { url = "https://files.pythonhosted.org/packages/bf/5d/c8be73df82c7ebe7cd133279670e89b8b110af3ce1412c551caa9d08e625/time_machine-2.19.0-cp313-cp313-win_amd64.whl", hash = "sha256:e17e3e089ac95f9a145ce07ff615e3c85674f7de36f2d92aaf588493a23ffb4b", size = 17868, upload-time = "2025-08-19T17:21:15.819Z" }, - { url = "https://files.pythonhosted.org/packages/92/13/2dfd3b8fb285308f61cd7aa9bfa96f46ddf916e3549a0f0afd094c556599/time_machine-2.19.0-cp313-cp313-win_arm64.whl", hash = "sha256:149072aff8e3690e14f4916103d898ea0d5d9c95531b6aa0995251c299533f7b", size = 16710, upload-time = "2025-08-19T17:21:16.748Z" }, - { url = "https://files.pythonhosted.org/packages/05/c1/deebb361727d2c5790f9d4d874be1b19afd41f4375581df465e6718b46a2/time_machine-2.19.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:f3589fee1ed0ab6ee424a55b0ea1ec694c4ba64cc26895bcd7d99f3d1bc6a28a", size = 20053, upload-time = "2025-08-19T17:21:17.704Z" }, - { url = "https://files.pythonhosted.org/packages/45/e8/fe3376951e6118d8ec1d1f94066a169b791424fe4a26c7dfc069b153ee08/time_machine-2.19.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7887e85275c4975fe54df03dcdd5f38bd36be973adc68a8c77e17441c3b443d6", size = 15423, upload-time = "2025-08-19T17:21:18.668Z" }, - { url = "https://files.pythonhosted.org/packages/9c/c7/f88d95cd1a87c650cf3749b4d64afdaf580297aa18ad7f4b44ec9d252dfc/time_machine-2.19.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ce0be294c209928563fcce1c587963e60ec803436cf1e181acd5bc1e425d554b", size = 39630, upload-time = "2025-08-19T17:21:19.645Z" }, - { url = "https://files.pythonhosted.org/packages/cc/5d/65a5c48a65357e56ec6f032972e4abd1c02d4fca4b0717a3aaefd19014d4/time_machine-2.19.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a62fd1ab380012c86f4c042010418ed45eb31604f4bf4453e17c9fa60bc56a29", size = 41242, upload-time = "2025-08-19T17:21:20.979Z" }, - { url = "https://files.pythonhosted.org/packages/f6/f9/fe5209e1615fde0a8cad6c4e857157b150333ed1fe31a7632b08cfe0ebdd/time_machine-2.19.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b25ec853a4530a5800731257f93206b12cbdee85ede964ebf8011b66086a7914", size = 44278, upload-time = "2025-08-19T17:21:21.984Z" }, - { url = "https://files.pythonhosted.org/packages/4a/3a/a5e5fe9c5d614cde0a9387ff35e8dfd12c5ef6384e4c1a21b04e6e0b905d/time_machine-2.19.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a430e4d0e0556f021a9c78e9b9f68e5e8910bdace4aa34ed4d1a73e239ed9384", size = 42321, upload-time = "2025-08-19T17:21:23.755Z" }, - { url = "https://files.pythonhosted.org/packages/a1/c5/56eca774e9162bc1ce59111d2bd69140dc8908c9478c92ec7bd15d547600/time_machine-2.19.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2415b7495ec4364c8067071e964fbadfe746dd4cdb43983f2f0bd6ebed13315c", size = 39270, upload-time = "2025-08-19T17:21:26.009Z" }, - { url = "https://files.pythonhosted.org/packages/9b/69/5dd0c420667578169a12acc8c8fd7452e8cfb181e41c9b4ac7e88fa36686/time_machine-2.19.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dbfc6b90c10f288594e1bf89a728a98cc0030791fd73541bbdc6b090aff83143", size = 40193, upload-time = "2025-08-19T17:21:27.054Z" }, - { url = "https://files.pythonhosted.org/packages/75/a7/de974d421bd55c9355583427c2a38fb0237bb5fd6614af492ba89dacb2f9/time_machine-2.19.0-cp313-cp313t-win32.whl", hash = "sha256:16f5d81f650c0a4d117ab08036dc30b5f8b262e11a4a0becc458e7f1c011b228", size = 17542, upload-time = "2025-08-19T17:21:28.674Z" }, - { url = "https://files.pythonhosted.org/packages/76/0a/aa0d05becd5d06ae8d3f16d657dc8cc9400c8d79aef80299de196467ff12/time_machine-2.19.0-cp313-cp313t-win_amd64.whl", hash = "sha256:645699616ec14e147094f601e6ab9553ff6cea37fad9c42720a6d7ed04bcd5dc", size = 18703, upload-time = "2025-08-19T17:21:29.663Z" }, - { url = "https://files.pythonhosted.org/packages/1f/c0/f785a4c7c73aa176510f7c48b84b49c26be84af0d534deb222e0327f750e/time_machine-2.19.0-cp313-cp313t-win_arm64.whl", hash = "sha256:b32daa965d13237536ea3afaa5ad61ade2b2d9314bc3a20196a0d2e1d7b57c6a", size = 17020, upload-time = "2025-08-19T17:21:30.653Z" }, - { url = "https://files.pythonhosted.org/packages/ed/97/c5fb51def06c0b2b6735332ad118ab35b4d9b85368792e5b638e99b1b686/time_machine-2.19.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:31cb43c8fd2d961f31bed0ff4e0026964d2b35e5de9e0fabbfecf756906d3612", size = 19360, upload-time = "2025-08-19T17:21:31.94Z" }, - { url = "https://files.pythonhosted.org/packages/2d/4e/2d795f7d6b7f5205ffe737a05bb1cf19d8038233b797062b2ef412b8512b/time_machine-2.19.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:bdf481a75afc6bff3e520db594501975b652f7def21cd1de6aa971d35ba644e6", size = 15033, upload-time = "2025-08-19T17:21:32.934Z" }, - { url = "https://files.pythonhosted.org/packages/dd/32/9bad501e360b4e758c58fae616ca5f8c7ad974b343f2463a15b2bf77a366/time_machine-2.19.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:00bee4bb950ac6a08d62af78e4da0cf2b4fc2abf0de2320d0431bf610db06e7c", size = 33379, upload-time = "2025-08-19T17:21:33.925Z" }, - { url = "https://files.pythonhosted.org/packages/a3/45/eda0ca4d793dfd162478d6163759b1c6ce7f6e61daa7fd7d62b31f21f87f/time_machine-2.19.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9f02199490906582302ce09edd32394fb393271674c75d7aa76c7a3245f16003", size = 35123, upload-time = "2025-08-19T17:21:34.945Z" }, - { url = "https://files.pythonhosted.org/packages/f0/5a/97e16325442ae5731fcaac794f0a1ef9980eff8a5491e58201d7eb814a34/time_machine-2.19.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e35726c7ba625f844c13b1fc0d4f81f394eefaee1d3a094a9093251521f2ef15", size = 36588, upload-time = "2025-08-19T17:21:35.975Z" }, - { url = "https://files.pythonhosted.org/packages/e8/9d/bf0b2ccc930cc4a316f26f1c78d3f313cd0fa13bb7480369b730a8f129db/time_machine-2.19.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:304315023999cd401ff02698870932b893369e1cfeb2248d09f6490507a92e97", size = 35013, upload-time = "2025-08-19T17:21:37.017Z" }, - { url = "https://files.pythonhosted.org/packages/f0/5a/39ac6a3078174f9715d88364871348b249631f12e76de1b862433b3f8862/time_machine-2.19.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:9765d4f003f263ea8bfd90d2d15447ca4b3dfa181922cf6cf808923b02ac180a", size = 33303, upload-time = "2025-08-19T17:21:38.352Z" }, - { url = "https://files.pythonhosted.org/packages/b3/ac/d8646baf9f95f2e792a6d7a7b35e92fca253c4a992afff801beafae0e5c2/time_machine-2.19.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7837ef3fd5911eb9b480909bb93d922737b6bdecea99dfcedb0a03807de9b2d3", size = 34440, upload-time = "2025-08-19T17:21:39.382Z" }, - { url = "https://files.pythonhosted.org/packages/ce/8b/8b6568c5ae966d80ead03ab537be3c6acf2af06fb501c2d466a3162c6295/time_machine-2.19.0-cp314-cp314-win32.whl", hash = "sha256:4bb5bd43b1bdfac3007b920b51d8e761f024ed465cfeec63ac4296922a4ec428", size = 17162, upload-time = "2025-08-19T17:21:40.381Z" }, - { url = "https://files.pythonhosted.org/packages/46/a5/211c1ab4566eba5308b2dc001b6349e3a032e3f6afa67ca2f27ea6b27af5/time_machine-2.19.0-cp314-cp314-win_amd64.whl", hash = "sha256:f583bbd0aa8ab4a7c45a684bf636d9e042d466e30bcbae1d13e7541e2cbe7207", size = 18040, upload-time = "2025-08-19T17:21:41.363Z" }, - { url = "https://files.pythonhosted.org/packages/b8/fc/4c2fb705f6371cb83824da45a8b967514a922fc092a0ef53979334d97a70/time_machine-2.19.0-cp314-cp314-win_arm64.whl", hash = "sha256:f379c6f8a6575a8284592179cf528ce89373f060301323edcc44f1fa1d37be12", size = 16752, upload-time = "2025-08-19T17:21:42.336Z" }, - { url = "https://files.pythonhosted.org/packages/79/ab/6437d18f31c666b5116c97572a282ac2590a82a0a9867746a6647eaf4613/time_machine-2.19.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:a3b8981f9c663b0906b05ab4d0ca211fae4b63b47c6ec26de5374fe56c836162", size = 20057, upload-time = "2025-08-19T17:21:43.35Z" }, - { url = "https://files.pythonhosted.org/packages/6c/a2/e03639ec2ba7200328bbcad8a2b2b1d5fccca9cceb9481b164a1cabdcb33/time_machine-2.19.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8e9c6363893e7f52c226afbebb23e825259222d100e67dfd24c8a6d35f1a1907", size = 15430, upload-time = "2025-08-19T17:21:44.725Z" }, - { url = "https://files.pythonhosted.org/packages/5d/ff/39e63a48e840f3e36ce24846ee51dd99c6dba635659b1750a2993771e88e/time_machine-2.19.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:206fcd6c9a6f00cac83db446ad1effc530a8cec244d2780af62db3a2d0a9871b", size = 39622, upload-time = "2025-08-19T17:21:45.821Z" }, - { url = "https://files.pythonhosted.org/packages/9a/2e/ee5ac79c4954768705801e54817c7d58e07e25a0bb227e775f501f3e2122/time_machine-2.19.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bf33016a1403c123373ffaeff25e26e69d63bf2c63b6163932efed94160db7ef", size = 41235, upload-time = "2025-08-19T17:21:46.783Z" }, - { url = "https://files.pythonhosted.org/packages/3a/3e/9af5f39525e779185c77285b8bbae15340eeeaa0afb33d458bc8b47d459b/time_machine-2.19.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9247c4bb9bbd3ff584ef4efbdec8efd9f37aa08bcfc4728bde1e489c2cb445bd", size = 44276, upload-time = "2025-08-19T17:21:47.759Z" }, - { url = "https://files.pythonhosted.org/packages/59/fe/572c7443cc27140bbeae3947279bbd4a120f9e8622253a20637f260b7813/time_machine-2.19.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:77f9bb0b86758d1f2d9352642c874946ad5815df53ef4ca22eb9d532179fe50d", size = 42330, upload-time = "2025-08-19T17:21:48.881Z" }, - { url = "https://files.pythonhosted.org/packages/cf/24/1a81c2e08ee7dae13ec8ceed27a29afa980c3d63852e42f1e023bf0faa03/time_machine-2.19.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:0b529e262df3b9c449f427385f4d98250828c879168c2e00eec844439f40b370", size = 39281, upload-time = "2025-08-19T17:21:49.907Z" }, - { url = "https://files.pythonhosted.org/packages/d2/60/6f0d6e5108978ca1a2a4ffb4d1c7e176d9199bb109fd44efe2680c60b52a/time_machine-2.19.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9199246e31cdc810e5d89cb71d09144c4d745960fdb0824da4994d152aca3303", size = 40201, upload-time = "2025-08-19T17:21:50.953Z" }, - { url = "https://files.pythonhosted.org/packages/73/b9/3ea4951e8293b0643feb98c0b9a176fa822154f1810835db3f282968ab10/time_machine-2.19.0-cp314-cp314t-win32.whl", hash = "sha256:0fe81bae55b7aefc2c2a34eb552aa82e6c61a86b3353a3c70df79b9698cb02ca", size = 17743, upload-time = "2025-08-19T17:21:51.948Z" }, - { url = "https://files.pythonhosted.org/packages/e4/8b/cd802884ca8a98e2b6cdc2397d57dd12ff8a7d1481e06fc3fad3d4e7e5ff/time_machine-2.19.0-cp314-cp314t-win_amd64.whl", hash = "sha256:7253791b8d7e7399fbeed7a8193cb01bc004242864306288797056badbdaf80b", size = 18956, upload-time = "2025-08-19T17:21:52.997Z" }, - { url = "https://files.pythonhosted.org/packages/c6/49/cabb1593896082fd55e34768029b8b0ca23c9be8b2dc127e0fc14796d33e/time_machine-2.19.0-cp314-cp314t-win_arm64.whl", hash = "sha256:536bd1ac31ab06a1522e7bf287602188f502dc19d122b1502c4f60b1e8efac79", size = 17068, upload-time = "2025-08-19T17:21:54.064Z" }, - { url = "https://files.pythonhosted.org/packages/d6/05/0608376c3167afe6cf7cdfd2b05c142ea4c42616eee9ba06d1799965806a/time_machine-2.19.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d8bb00b30ec9fe56d01e9812df1ffe39f331437cef9bfaebcc81c83f7f8f8ee2", size = 19659, upload-time = "2025-08-19T17:21:55.426Z" }, - { url = "https://files.pythonhosted.org/packages/11/c4/72eb8c7b36830cf36c51d7bc2f1ac313d68881c3a58040fb6b42c4523d20/time_machine-2.19.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d821c60efc08a97cc11e5482798e6fd5eba5c0f22a02db246b50895dbdc0de41", size = 15153, upload-time = "2025-08-19T17:21:56.505Z" }, - { url = "https://files.pythonhosted.org/packages/89/1a/0782e1f5c8ab8809ebd992709e1bb69d67600191baa023af7a5d32023a3c/time_machine-2.19.0-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:fb051aec7b3b6e96a200d911c225901e6133ff3da11e470e24111a53bbc13637", size = 32555, upload-time = "2025-08-19T17:21:57.74Z" }, - { url = "https://files.pythonhosted.org/packages/94/b0/8ef58e2f6321851d5900ca3d18044938832c2ed42a2ac7570ca6aa29768a/time_machine-2.19.0-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fe59909d95a2ef5e01ce3354fdea3908404c2932c2069f00f66dff6f27e9363e", size = 34185, upload-time = "2025-08-19T17:21:59.361Z" }, - { url = "https://files.pythonhosted.org/packages/82/74/ce0c9867f788c1fb22c417ec1aae47a24117e53d51f6ff97d7c6ca5392f6/time_machine-2.19.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:29e84b8682645b16eb6f9e8ec11c35324ad091841a11cf4fc3fc7f6119094c89", size = 35917, upload-time = "2025-08-19T17:22:00.421Z" }, - { url = "https://files.pythonhosted.org/packages/d2/70/6f97a8f552dbaa66feb10170b5726dab74bc531673d1ed9d6f271547e54c/time_machine-2.19.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4a11f1c0e0d06023dc01614c964e256138913551d3ae6dca5148f79081156336", size = 34584, upload-time = "2025-08-19T17:22:01.447Z" }, - { url = "https://files.pythonhosted.org/packages/48/c8/cf139088ce537c15d7f03cf56ec317d3a5cfb520e30aa711ea0248d0ae8a/time_machine-2.19.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:57a235a6307c54df50e69f1906e2f199e47da91bde4b886ee05aff57fe4b6bf6", size = 32608, upload-time = "2025-08-19T17:22:02.548Z" }, - { url = "https://files.pythonhosted.org/packages/b1/17/0ec41ef7a30c6753fb226a28b74162b264b35724905ced4098f2f5076ded/time_machine-2.19.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:426aba552f7af9604adad9ef570c859af7c1081d878db78089fac159cd911b0a", size = 33686, upload-time = "2025-08-19T17:22:03.606Z" }, - { url = "https://files.pythonhosted.org/packages/b0/19/586f15159083ec84f178d494c60758c46603b00c9641b04deb63f1950128/time_machine-2.19.0-cp39-cp39-win32.whl", hash = "sha256:67772c7197a3a712d1b970ed545c6e98db73524bd90e245fd3c8fa7ad7630768", size = 17133, upload-time = "2025-08-19T17:22:04.989Z" }, - { url = "https://files.pythonhosted.org/packages/6a/c2/bfe4b906a9fe0bf2d011534314212ed752d6b8f392c9c82f6ac63dccc5ab/time_machine-2.19.0-cp39-cp39-win_amd64.whl", hash = "sha256:011d7859089263204dc5fdf83dce7388f986fe833c9381d6106b4edfda2ebd3e", size = 17972, upload-time = "2025-08-19T17:22:06.026Z" }, - { url = "https://files.pythonhosted.org/packages/5d/73/182343eba05aa5787732aaa68f3b3feb5e40ddf86b928ae941be45646393/time_machine-2.19.0-cp39-cp39-win_arm64.whl", hash = "sha256:e1af66550fa4685434f00002808a525f176f1f92746646c0019bb86fbff48b27", size = 16820, upload-time = "2025-08-19T17:22:07.227Z" }, -] - -[[package]] -name = "time-machine" -version = "3.2.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version == '3.11.*' and sys_platform == 'emscripten'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.10.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/02/fc/37b02f6094dbb1f851145330460532176ed2f1dc70511a35828166c41e52/time_machine-3.2.0.tar.gz", hash = "sha256:a4ddd1cea17b8950e462d1805a42b20c81eb9aafc8f66b392dd5ce997e037d79", size = 14804, upload-time = "2025-12-17T23:33:02.599Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9c/31/6bf41cb4a326230518d9b76c910dfc11d4fc23444d1cbfdf2d7652bd99f4/time_machine-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:68142c070e78b62215d8029ec7394905083a4f9aacb0a2a11514ce70b5951b13", size = 19447, upload-time = "2025-12-17T23:31:30.181Z" }, - { url = "https://files.pythonhosted.org/packages/fa/14/d71ce771712e1cbfa15d8c24452225109262b16cb6caaf967e9f60662b67/time_machine-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:161bbd0648802ffdfcb4bb297ecb26b3009684a47d3a4dedb90bc549df4fa2ad", size = 15432, upload-time = "2025-12-17T23:31:31.381Z" }, - { url = "https://files.pythonhosted.org/packages/8b/d6/dcb43a11f8029561996fad58ff9d3dc5e6d7f32b74f0745a2965d7e4b4f3/time_machine-3.2.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1359ba8c258be695ba69253bc84db882fd616fe69b426cc6056536da2c7bf68e", size = 32956, upload-time = "2025-12-17T23:31:32.469Z" }, - { url = "https://files.pythonhosted.org/packages/77/da/d802cd3c335c414f9b11b479f7459aa72df5de6485c799966cfdf8856d53/time_machine-3.2.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c85b169998ca2c24a78fb214586ec11c4cad56d9c38f55ad8326235cb481c884", size = 34556, upload-time = "2025-12-17T23:31:33.946Z" }, - { url = "https://files.pythonhosted.org/packages/85/ee/51ad553514ab0b940c7c82c6e1519dd10fd06ac07b32039a1d153ef09c88/time_machine-3.2.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:65b9367cb8a10505bc8f67da0da514ba20fa816fc47e11f434f7c60350322b4c", size = 36101, upload-time = "2025-12-17T23:31:35.462Z" }, - { url = "https://files.pythonhosted.org/packages/11/39/938b111b5bb85a2b07502d0f9d8a704fc75bd760d62e76bce23c89ed16c9/time_machine-3.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9faca6a0f1973d7df3233c951fc2a11ff0c54df74087d8aaf41ae3deb19d0893", size = 34905, upload-time = "2025-12-17T23:31:36.543Z" }, - { url = "https://files.pythonhosted.org/packages/dd/50/0951f73b23e76455de0b4a3a58ac5a24bd8d10489624b1c5e03f10c6fc0b/time_machine-3.2.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:213b1ada7f385d467e598999b642eda4a8e89ae10ad5dc4f5d8f672cbf604261", size = 33012, upload-time = "2025-12-17T23:31:37.967Z" }, - { url = "https://files.pythonhosted.org/packages/4f/95/5304912d3dcecc4e14ed222dbe0396352efdf8497534abc3c9edd67a7528/time_machine-3.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:160b6afd94c39855af04d39c58e4cf602406abd6d79427ab80e830ea71789cfb", size = 34104, upload-time = "2025-12-17T23:31:39.449Z" }, - { url = "https://files.pythonhosted.org/packages/d4/1c/af56518652ec7adac4ced193b7a42c4ff354fef28a412b3b5ffa5763aead/time_machine-3.2.0-cp310-cp310-win32.whl", hash = "sha256:c15d9ac257c78c124d112e4fc91fa9f3dcb004bdda913c19f0e7368d713cf080", size = 17468, upload-time = "2025-12-17T23:31:40.432Z" }, - { url = "https://files.pythonhosted.org/packages/48/15/0213f00ca3cf6fe1c9fdbd7fd467e801052fc85534f30c0e4684bd474190/time_machine-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:3bf0f428487f93b8fe9d27aa01eccc817885da3290b467341b4a4a795e1d1891", size = 18313, upload-time = "2025-12-17T23:31:41.617Z" }, - { url = "https://files.pythonhosted.org/packages/77/e4/811f96aa7a634b2b264d9a476f3400e710744dda503b4ad87a5c76db32c9/time_machine-3.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:347f6be2129fcd35b1c94b9387fcb2cbe7949b1e649228c5f22949a811b78976", size = 17037, upload-time = "2025-12-17T23:31:42.924Z" }, - { url = "https://files.pythonhosted.org/packages/f5/e1/03aae5fbaa53859f665094af696338fc7cae733d926a024af69982712350/time_machine-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c188a9dda9fcf975022f1b325b466651b96a4dfc223c523ed7ed8d979f9bf3e8", size = 19143, upload-time = "2025-12-17T23:31:44.258Z" }, - { url = "https://files.pythonhosted.org/packages/75/8f/98cb17bebb52b22ff4ec26984dd44280f9c71353c3bae0640a470e6683e5/time_machine-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:17245f1cc2dd13f9d63a174be59bb2684a9e5e0a112ab707e37be92068cd655f", size = 15273, upload-time = "2025-12-17T23:31:45.246Z" }, - { url = "https://files.pythonhosted.org/packages/dd/2f/ca11e4a7897234bb9331fcc5f4ed4714481ba4012370cc79a0ae8c42ea0a/time_machine-3.2.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d9bd1de1996e76efd36ae15970206c5089fb3728356794455bd5cd8d392b5537", size = 31049, upload-time = "2025-12-17T23:31:46.613Z" }, - { url = "https://files.pythonhosted.org/packages/cf/ad/d17d83a59943094e6b6c6a3743caaf6811b12203c3e07a30cc7bcc2ab7ee/time_machine-3.2.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:98493cd50e8b7f941eab69b9e18e697ad69db1a0ec1959f78f3d7b0387107e5c", size = 32632, upload-time = "2025-12-17T23:31:47.72Z" }, - { url = "https://files.pythonhosted.org/packages/71/50/d60576d047a0dfb5638cdfb335e9c3deb6e8528544fa0b3966a8480f72b7/time_machine-3.2.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:31f2a33d595d9f91eb9bc7f157f0dc5721f5789f4c4a9e8b852cdedb2a7d9b16", size = 34289, upload-time = "2025-12-17T23:31:48.913Z" }, - { url = "https://files.pythonhosted.org/packages/fa/fe/4afa602dbdebddde6d0ea4a7fe849e49b9bb85dc3fb415725a87ccb4b471/time_machine-3.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9f78ac4213c10fbc44283edd1a29cfb7d3382484f4361783ddc057292aaa1889", size = 33175, upload-time = "2025-12-17T23:31:50.611Z" }, - { url = "https://files.pythonhosted.org/packages/0d/87/c152e23977c1d7d7c94eb3ed3ea45cc55971796205125c6fdff40db2c60f/time_machine-3.2.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c1326b09e947b360926d529a96d1d9e126ce120359b63b506ecdc6ee20755c23", size = 31170, upload-time = "2025-12-17T23:31:51.645Z" }, - { url = "https://files.pythonhosted.org/packages/80/af/54acf51d0f3ade3b51eab73df6192937c9a938753ef5456dff65eb8630be/time_machine-3.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9f2949f03d15264cc15c38918a2cda8966001f0f4ebe190cbfd9c56d91aed8ac", size = 32292, upload-time = "2025-12-17T23:31:52.803Z" }, - { url = "https://files.pythonhosted.org/packages/cc/bc/3745963f36e75661a807196428639327a366f4332f35f1f775c074d4062f/time_machine-3.2.0-cp311-cp311-win32.whl", hash = "sha256:6dfe48e0499e6e16751476b9799e67be7514e6ef04cdf39571ef95a279645831", size = 17349, upload-time = "2025-12-17T23:31:54.19Z" }, - { url = "https://files.pythonhosted.org/packages/82/a2/057469232a99d1f5a0160ae7c5bae7b095c9168b333dd598fcbcfbc1c87b/time_machine-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:809bdf267a29189c304154873620fe0bcc0c9513295fa46b19e21658231c4915", size = 18191, upload-time = "2025-12-17T23:31:55.472Z" }, - { url = "https://files.pythonhosted.org/packages/79/d8/bf9c8de57262ee7130d92a6ed49ed6a6e40a36317e46979428d373630c12/time_machine-3.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:a3f4c17fa90f54902a3f8692c75caf67be87edc3429eeb71cb4595da58198f8e", size = 16905, upload-time = "2025-12-17T23:31:56.658Z" }, - { url = "https://files.pythonhosted.org/packages/71/8b/080c8eedcd67921a52ba5bd0e075362062509ab63c86fc1a0442fad241a6/time_machine-3.2.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:cc4bee5b0214d7dc4ebc91f4a4c600f1a598e9b5606ac751f42cb6f6740b1dbb", size = 19255, upload-time = "2025-12-17T23:31:58.057Z" }, - { url = "https://files.pythonhosted.org/packages/66/17/0e5291e9eb705bf8a5a1305f826e979af307bbeb79def4ddbf4b3f9a81e0/time_machine-3.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3ca036304b4460ae2fdc1b52dd8b1fa7cf1464daa427fc49567413c09aa839c1", size = 15360, upload-time = "2025-12-17T23:31:59.048Z" }, - { url = "https://files.pythonhosted.org/packages/8b/e8/9ab87b71d2e2b62463b9b058b7ae7ac09fb57f8fcd88729dec169d304340/time_machine-3.2.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5442735b41d7a2abc2f04579b4ca6047ed4698a8338a4fec92c7c9423e7938cb", size = 33029, upload-time = "2025-12-17T23:32:00.413Z" }, - { url = "https://files.pythonhosted.org/packages/4b/26/b5ca19da6f25ea905b3e10a0ea95d697c1aeba0404803a43c68f1af253e6/time_machine-3.2.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:97da3e971e505cb637079fb07ab0bcd36e33279f8ecac888ff131f45ef1e4d8d", size = 34579, upload-time = "2025-12-17T23:32:01.431Z" }, - { url = "https://files.pythonhosted.org/packages/79/ca/6ac7ad5f10ea18cc1d9de49716ba38c32132c7b64532430d92ef240c116b/time_machine-3.2.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3cdda6dee4966e38aeb487309bb414c6cb23a81fc500291c77a8fcd3098832e7", size = 35961, upload-time = "2025-12-17T23:32:02.521Z" }, - { url = "https://files.pythonhosted.org/packages/33/67/390dd958bed395ab32d79a9fe61fe111825c0dd4ded54dbba7e867f171e6/time_machine-3.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:33d9efd302a6998bcc8baa4d84f259f8a4081105bd3d7f7af7f1d0abd3b1c8aa", size = 34668, upload-time = "2025-12-17T23:32:03.585Z" }, - { url = "https://files.pythonhosted.org/packages/da/57/c88fff034a4e9538b3ae7c68c9cfb283670b14d17522c5a8bc17d29f9a4b/time_machine-3.2.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3a0b0a33971f14145853c9bd95a6ab0353cf7e0019fa2a7aa1ae9fddfe8eab50", size = 32891, upload-time = "2025-12-17T23:32:04.656Z" }, - { url = "https://files.pythonhosted.org/packages/2d/70/ebbb76022dba0fec8f9156540fc647e4beae1680c787c01b1b6200e56d70/time_machine-3.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2d0be9e5f22c38082d247a2cdcd8a936504e9db60b7b3606855fb39f299e9548", size = 34080, upload-time = "2025-12-17T23:32:06.146Z" }, - { url = "https://files.pythonhosted.org/packages/db/9a/2ca9e7af3df540dc1c79e3de588adeddb7dcc2107829248e6969c4f14167/time_machine-3.2.0-cp312-cp312-win32.whl", hash = "sha256:3f74623648b936fdce5f911caf386c0a0b579456410975de8c0dfeaaffece1d8", size = 17371, upload-time = "2025-12-17T23:32:07.164Z" }, - { url = "https://files.pythonhosted.org/packages/d8/ce/21d23efc9c2151939af1b7ee4e60d86d661b74ef32b8eaa148f6fe8c899c/time_machine-3.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:34e26a41d994b5e4b205136a90e9578470386749cc9a2ecf51ca18f83ce25e23", size = 18132, upload-time = "2025-12-17T23:32:08.447Z" }, - { url = "https://files.pythonhosted.org/packages/2f/34/c2b70be483accf6db9e5d6c3139bce3c38fe51f898ccf64e8d3fe14fbf4d/time_machine-3.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:0615d3d82c418d6293f271c348945c5091a71f37e37173653d5c26d0e74b13a8", size = 16930, upload-time = "2025-12-17T23:32:09.477Z" }, - { url = "https://files.pythonhosted.org/packages/ee/cd/43ad5efc88298af3c59b66769cea7f055567a85071579ed40536188530c1/time_machine-3.2.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c421a8eb85a4418a7675a41bf8660224318c46cc62e4751c8f1ceca752059090", size = 19318, upload-time = "2025-12-17T23:32:10.518Z" }, - { url = "https://files.pythonhosted.org/packages/b0/f6/084010ef7f4a3f38b5a4900923d7c85b29e797655c4f6ee4ce54d903cca8/time_machine-3.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8f4e758f7727d0058c4950c66b58200c187072122d6f7a98b610530a4233ea7b", size = 15390, upload-time = "2025-12-17T23:32:11.625Z" }, - { url = "https://files.pythonhosted.org/packages/25/aa/1cabb74134f492270dc6860cb7865859bf40ecf828be65972827646e91ad/time_machine-3.2.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:154bd3f75c81f70218b2585cc12b60762fb2665c507eec5ec5037d8756d9b4e0", size = 33115, upload-time = "2025-12-17T23:32:13.219Z" }, - { url = "https://files.pythonhosted.org/packages/5e/03/78c5d7dfa366924eb4dbfcc3fc917c39a4280ca234b12819cc1f16c03d88/time_machine-3.2.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d50cfe5ebea422c896ad8d278af9648412b7533b8ea6adeeee698a3fd9b1d3b7", size = 34705, upload-time = "2025-12-17T23:32:14.29Z" }, - { url = "https://files.pythonhosted.org/packages/86/93/d5e877c24541f674c6869ff6e9c56833369796010190252e92c9d7ae5f0f/time_machine-3.2.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:636576501724bd6a9124e69d86e5aef263479e89ef739c5db361469f0463a0a1", size = 36104, upload-time = "2025-12-17T23:32:15.354Z" }, - { url = "https://files.pythonhosted.org/packages/22/1c/d4bae72f388f67efc9609f89b012e434bb19d9549c7a7b47d6c7d9e5c55d/time_machine-3.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:40e6f40c57197fcf7ec32d2c563f4df0a82c42cdcc3cab27f688e98f6060df10", size = 34765, upload-time = "2025-12-17T23:32:16.434Z" }, - { url = "https://files.pythonhosted.org/packages/1d/c3/ac378cf301d527d8dfad2f0db6bad0dfb1ab73212eaa56d6b96ee5d9d20b/time_machine-3.2.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:a1bcf0b846bbfc19a79bc19e3fa04d8c7b1e8101c1b70340ffdb689cd801ea53", size = 33010, upload-time = "2025-12-17T23:32:17.532Z" }, - { url = "https://files.pythonhosted.org/packages/06/35/7ce897319accda7a6970b288a9a8c52d25227342a7508505a2b3d235b649/time_machine-3.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ae55a56c179f4fe7a62575ad5148b6ed82f6c7e5cf2f9a9ec65f2f5b067db5f5", size = 34185, upload-time = "2025-12-17T23:32:18.566Z" }, - { url = "https://files.pythonhosted.org/packages/bf/28/f922022269749cb02eee2b62919671153c4088994fa955a6b0e50327ff81/time_machine-3.2.0-cp313-cp313-win32.whl", hash = "sha256:a66fe55a107e46916007a391d4030479df8864ec6ad6f6a6528221befc5c886e", size = 17397, upload-time = "2025-12-17T23:32:19.605Z" }, - { url = "https://files.pythonhosted.org/packages/ee/dc/fd87cde397f4a7bea493152f0aca8fd569ec709cad9e0f2ca7011eb8c7f7/time_machine-3.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:30c9ce57165df913e4f74e285a8ab829ff9b7aa3e5ec0973f88f642b9a7b3d15", size = 18139, upload-time = "2025-12-17T23:32:20.991Z" }, - { url = "https://files.pythonhosted.org/packages/75/81/b8ce58233addc5d7d54d2fabc49dcbc02d79e3f079d150aa1bec3d5275ef/time_machine-3.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:89cad7e179e9bdcc84dcf09efe52af232c4cc7a01b3de868356bbd59d95bd9b8", size = 16964, upload-time = "2025-12-17T23:32:22.075Z" }, - { url = "https://files.pythonhosted.org/packages/67/e7/487f0ba5fe6c58186a5e1af2a118dfa2c160fedb37ef53a7e972d410408e/time_machine-3.2.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:59d71545e62525a4b85b6de9ab5c02ee3c61110fd7f636139914a2335dcbfc9c", size = 20000, upload-time = "2025-12-17T23:32:23.058Z" }, - { url = "https://files.pythonhosted.org/packages/e1/17/eb2c0054c8d44dd42df84ccd434539249a9c7d0b8eb53f799be2102500ab/time_machine-3.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:999672c621c35362bc28e03ca0c7df21500195540773c25993421fd8d6cc5003", size = 15657, upload-time = "2025-12-17T23:32:24.125Z" }, - { url = "https://files.pythonhosted.org/packages/43/21/93443b5d1dd850f8bb9442e90d817a9033dcce6bfbdd3aabbb9786251c80/time_machine-3.2.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5faf7397f0580c7b9d67288522c8d7863e85f0cffadc0f1fccdb2c3dfce5783e", size = 39216, upload-time = "2025-12-17T23:32:25.542Z" }, - { url = "https://files.pythonhosted.org/packages/9f/9e/18544cf8acc72bb1dc03762231c82ecc259733f4bb6770a7bbe5cd138603/time_machine-3.2.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d3dd886ec49f1fa5a00e844f5947e5c0f98ce574750c24b7424c6f77fc1c3e87", size = 40764, upload-time = "2025-12-17T23:32:26.643Z" }, - { url = "https://files.pythonhosted.org/packages/27/f7/9fe9ce2795636a3a7467307af6bdf38bb613ddb701a8a5cd50ec713beb5e/time_machine-3.2.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:da0ecd96bc7bbe450acaaabe569d84e81688f1be8ad58d1470e42371d145fb53", size = 43526, upload-time = "2025-12-17T23:32:27.693Z" }, - { url = "https://files.pythonhosted.org/packages/03/c1/a93e975ba9dec22e87ec92d18c28e67d36bd536f9119ffa439b2892b0c9c/time_machine-3.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:158220e946c1c4fb8265773a0282c88c35a7e3bb5d78e3561214e3b3231166f3", size = 41727, upload-time = "2025-12-17T23:32:28.985Z" }, - { url = "https://files.pythonhosted.org/packages/5f/fb/e3633e5a6bbed1c76bb2e9810dabc2f8467532ffcd29b9aed404b473061a/time_machine-3.2.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8c1aee29bc54356f248d5d7dfdd131e12ca825e850a08c0ebdb022266d073013", size = 38952, upload-time = "2025-12-17T23:32:30.031Z" }, - { url = "https://files.pythonhosted.org/packages/82/3d/02e9fb2526b3d6b1b45bc8e4d912d95d1cd699d1a3f6df985817d37a0600/time_machine-3.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c8ed2224f09d25b1c2fc98683613aca12f90f682a427eabb68fc824d27014e4a", size = 39829, upload-time = "2025-12-17T23:32:31.075Z" }, - { url = "https://files.pythonhosted.org/packages/85/c8/c14265212436da8e0814c45463987b3f57de3eca4de023cc2eabb0c62ef3/time_machine-3.2.0-cp313-cp313t-win32.whl", hash = "sha256:3498719f8dab51da76d29a20c1b5e52ee7db083dddf3056af7fa69c1b94e1fe6", size = 17852, upload-time = "2025-12-17T23:32:32.079Z" }, - { url = "https://files.pythonhosted.org/packages/1d/bc/8acb13cf6149f47508097b158a9a8bec9ec4530a70cb406124e8023581f5/time_machine-3.2.0-cp313-cp313t-win_amd64.whl", hash = "sha256:e0d90bee170b219e1d15e6a58164aa808f5170090e4f090bd0670303e34181b1", size = 18918, upload-time = "2025-12-17T23:32:33.106Z" }, - { url = "https://files.pythonhosted.org/packages/24/87/c443ee508c2708fd2514ccce9052f5e48888783ce690506919629ebc8eb0/time_machine-3.2.0-cp313-cp313t-win_arm64.whl", hash = "sha256:051de220fdb6e20d648111bbad423d9506fdbb2e44d4429cef3dc0382abf1fc2", size = 17261, upload-time = "2025-12-17T23:32:34.446Z" }, - { url = "https://files.pythonhosted.org/packages/61/70/b4b980d126ed155c78d1879c50d60c8dcbd47bd11cb14ee7be50e0dfc07f/time_machine-3.2.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:1398980c017fe5744d66f419e0115ee48a53b00b146d738e1416c225eb610b82", size = 19303, upload-time = "2025-12-17T23:32:35.796Z" }, - { url = "https://files.pythonhosted.org/packages/73/73/eaa33603c69a68fe2b6f54f9dd75481693d62f1d29676531002be06e2d1c/time_machine-3.2.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:4f8f4e35f4191ef70c2ab8ff490761ee9051b891afce2bf86dde3918eb7b537b", size = 15431, upload-time = "2025-12-17T23:32:37.244Z" }, - { url = "https://files.pythonhosted.org/packages/76/10/b81e138e86cc7bab40cdb59d294b341e172201f4a6c84bb0ec080407977a/time_machine-3.2.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:6db498686ecf6163c5aa8cf0bcd57bbe0f4081184f247edf3ee49a2612b584f9", size = 33206, upload-time = "2025-12-17T23:32:38.713Z" }, - { url = "https://files.pythonhosted.org/packages/d3/72/4deab446b579e8bd5dca91de98595c5d6bd6a17ce162abf5c5f2ce40d3d8/time_machine-3.2.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:027c1807efb74d0cd58ad16524dec94212fbe900115d70b0123399883657ac0f", size = 34792, upload-time = "2025-12-17T23:32:40.223Z" }, - { url = "https://files.pythonhosted.org/packages/2c/39/439c6b587ddee76d533fe972289d0646e0a5520e14dc83d0a30aeb5565f7/time_machine-3.2.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92432610c05676edd5e6946a073c6f0c926923123ce7caee1018dc10782c713d", size = 36187, upload-time = "2025-12-17T23:32:41.705Z" }, - { url = "https://files.pythonhosted.org/packages/4b/db/2da4368db15180989bab83746a857bde05ad16e78f326801c142bb747a06/time_machine-3.2.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c25586b62480eb77ef3d953fba273209478e1ef49654592cd6a52a68dfe56a67", size = 34855, upload-time = "2025-12-17T23:32:42.817Z" }, - { url = "https://files.pythonhosted.org/packages/88/84/120a431fee50bc4c241425bee4d3a4910df4923b7ab5f7dff1bf0c772f08/time_machine-3.2.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:6bf3a2fa738d15e0b95d14469a0b8ea42635467408d8b490e263d5d45c9a177f", size = 33222, upload-time = "2025-12-17T23:32:43.94Z" }, - { url = "https://files.pythonhosted.org/packages/f9/ea/89cfda82bb8c57ff91bb9a26751aa234d6d90e9b4d5ab0ad9dce0f9f0329/time_machine-3.2.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ce76b82276d7ad2a66cdc85dad4df19d1422b69183170a34e8fbc4c3f35502f7", size = 34270, upload-time = "2025-12-17T23:32:45.037Z" }, - { url = "https://files.pythonhosted.org/packages/8a/aa/235357da4f69a51a8d35fcbfcfa77cdc7dc24f62ae54025006570bda7e2d/time_machine-3.2.0-cp314-cp314-win32.whl", hash = "sha256:14d6778273c543441863dff712cd1d7803dee946b18de35921eb8df10714539d", size = 17544, upload-time = "2025-12-17T23:32:46.099Z" }, - { url = "https://files.pythonhosted.org/packages/7b/51/6c8405a7276be79693b792cff22ce41067ec05db26a7d02f2d5b06324434/time_machine-3.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:cbf821da96dbc80d349fa9e7c36e670b41d68a878d28c8850057992fed430eef", size = 18423, upload-time = "2025-12-17T23:32:47.468Z" }, - { url = "https://files.pythonhosted.org/packages/d9/03/a3cf419e20c35fc203c6e4fed48b5b667c1a2b4da456d9971e605f73ecef/time_machine-3.2.0-cp314-cp314-win_arm64.whl", hash = "sha256:71c75d71f8e68abc8b669bca26ed2ddd558430a6c171e32b8620288565f18c0e", size = 17050, upload-time = "2025-12-17T23:32:48.91Z" }, - { url = "https://files.pythonhosted.org/packages/86/a1/142de946dc4393f910bf4564b5c3ba819906e1f49b06c9cb557519c849e4/time_machine-3.2.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:4e374779021446fc2b5c29d80457ec9a3b1a5df043dc2aae07d7c1415d52323c", size = 19991, upload-time = "2025-12-17T23:32:49.933Z" }, - { url = "https://files.pythonhosted.org/packages/ee/62/7f17def6289901f94726921811a16b9adce46e666362c75d45730c60274f/time_machine-3.2.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:122310a6af9c36e9a636da32830e591e7923e8a07bdd0a43276c3a36c6821c90", size = 15707, upload-time = "2025-12-17T23:32:50.969Z" }, - { url = "https://files.pythonhosted.org/packages/5d/d3/3502fb9bd3acb159c18844b26c43220201a0d4a622c0c853785d07699a92/time_machine-3.2.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ba3eeb0f018cc362dd8128befa3426696a2e16dd223c3fb695fde184892d4d8c", size = 39207, upload-time = "2025-12-17T23:32:52.033Z" }, - { url = "https://files.pythonhosted.org/packages/5a/be/8b27f4aa296fda14a5a2ad7f588ddd450603c33415ab3f8e85b2f1a44678/time_machine-3.2.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:77d38ba664b381a7793f8786efc13b5004f0d5f672dae814430445b8202a67a6", size = 40764, upload-time = "2025-12-17T23:32:53.167Z" }, - { url = "https://files.pythonhosted.org/packages/42/cd/fe4c4e5c8ab6d48fab3624c32be9116fb120173a35fe67e482e5cf68b3d2/time_machine-3.2.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f09abeb8f03f044d72712207e0489a62098ad3ad16dac38927fcf80baca4d6a7", size = 43508, upload-time = "2025-12-17T23:32:54.597Z" }, - { url = "https://files.pythonhosted.org/packages/b4/28/5a3ba2fce85b97655a425d6bb20a441550acd2b304c96b2c19d3839f721a/time_machine-3.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6b28367ce4f73987a55e230e1d30a57a3af85da8eb1a140074eb6e8c7e6ef19f", size = 41712, upload-time = "2025-12-17T23:32:55.781Z" }, - { url = "https://files.pythonhosted.org/packages/81/58/e38084be7fdabb4835db68a3a47e58c34182d79fc35df1ecbe0db2c5359f/time_machine-3.2.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:903c7751c904581da9f7861c3015bed7cdc40047321291d3694a3cdc783bbca3", size = 38939, upload-time = "2025-12-17T23:32:56.867Z" }, - { url = "https://files.pythonhosted.org/packages/40/d0/ad3feb0a392ef4e0c08bc32024950373ddc0669002cbdcbb9f3bf0c2d114/time_machine-3.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:528217cad85ede5f85c8bc78b0341868d3c3cfefc6ecb5b622e1cacb6c73247b", size = 39837, upload-time = "2025-12-17T23:32:58.283Z" }, - { url = "https://files.pythonhosted.org/packages/5b/9e/5f4b2ea63b267bd78f3245e76f5528836611b5f2d30b5e7300a722fe4428/time_machine-3.2.0-cp314-cp314t-win32.whl", hash = "sha256:75724762ffd517e7e80aaec1fad1ff5a7414bd84e2b3ee7a0bacfeb67c14926e", size = 18091, upload-time = "2025-12-17T23:32:59.403Z" }, - { url = "https://files.pythonhosted.org/packages/39/6f/456b1f4d2700ae02b19eba830f870596a4b89b74bac3b6c80666f1b108c5/time_machine-3.2.0-cp314-cp314t-win_amd64.whl", hash = "sha256:2526abbd053c5bca898d1b3e7898eec34626b12206718d8c7ce88fd12c1c9c5c", size = 19208, upload-time = "2025-12-17T23:33:00.488Z" }, - { url = "https://files.pythonhosted.org/packages/2f/22/8063101427ecd3d2652aada4d21d0876b07a3dc789125bca2ee858fec3ed/time_machine-3.2.0-cp314-cp314t-win_arm64.whl", hash = "sha256:7f2fb6784b414edbe2c0b558bfaab0c251955ba27edd62946cce4a01675a992c", size = 17359, upload-time = "2025-12-17T23:33:01.54Z" }, -] - -[[package]] -name = "tomli" -version = "2.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/82/30/31573e9457673ab10aa432461bee537ce6cef177667deca369efb79df071/tomli-2.4.0.tar.gz", hash = "sha256:aa89c3f6c277dd275d8e243ad24f3b5e701491a860d5121f2cdd399fbb31fc9c", size = 17477, upload-time = "2026-01-11T11:22:38.165Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/d9/3dc2289e1f3b32eb19b9785b6a006b28ee99acb37d1d47f78d4c10e28bf8/tomli-2.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b5ef256a3fd497d4973c11bf142e9ed78b150d36f5773f1ca6088c230ffc5867", size = 153663, upload-time = "2026-01-11T11:21:45.27Z" }, - { url = "https://files.pythonhosted.org/packages/51/32/ef9f6845e6b9ca392cd3f64f9ec185cc6f09f0a2df3db08cbe8809d1d435/tomli-2.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5572e41282d5268eb09a697c89a7bee84fae66511f87533a6f88bd2f7b652da9", size = 148469, upload-time = "2026-01-11T11:21:46.873Z" }, - { url = "https://files.pythonhosted.org/packages/d6/c2/506e44cce89a8b1b1e047d64bd495c22c9f71f21e05f380f1a950dd9c217/tomli-2.4.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:551e321c6ba03b55676970b47cb1b73f14a0a4dce6a3e1a9458fd6d921d72e95", size = 236039, upload-time = "2026-01-11T11:21:48.503Z" }, - { url = "https://files.pythonhosted.org/packages/b3/40/e1b65986dbc861b7e986e8ec394598187fa8aee85b1650b01dd925ca0be8/tomli-2.4.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e3f639a7a8f10069d0e15408c0b96a2a828cfdec6fca05296ebcdcc28ca7c76", size = 243007, upload-time = "2026-01-11T11:21:49.456Z" }, - { url = "https://files.pythonhosted.org/packages/9c/6f/6e39ce66b58a5b7ae572a0f4352ff40c71e8573633deda43f6a379d56b3e/tomli-2.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1b168f2731796b045128c45982d3a4874057626da0e2ef1fdd722848b741361d", size = 240875, upload-time = "2026-01-11T11:21:50.755Z" }, - { url = "https://files.pythonhosted.org/packages/aa/ad/cb089cb190487caa80204d503c7fd0f4d443f90b95cf4ef5cf5aa0f439b0/tomli-2.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:133e93646ec4300d651839d382d63edff11d8978be23da4cc106f5a18b7d0576", size = 246271, upload-time = "2026-01-11T11:21:51.81Z" }, - { url = "https://files.pythonhosted.org/packages/0b/63/69125220e47fd7a3a27fd0de0c6398c89432fec41bc739823bcc66506af6/tomli-2.4.0-cp311-cp311-win32.whl", hash = "sha256:b6c78bdf37764092d369722d9946cb65b8767bfa4110f902a1b2542d8d173c8a", size = 96770, upload-time = "2026-01-11T11:21:52.647Z" }, - { url = "https://files.pythonhosted.org/packages/1e/0d/a22bb6c83f83386b0008425a6cd1fa1c14b5f3dd4bad05e98cf3dbbf4a64/tomli-2.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:d3d1654e11d724760cdb37a3d7691f0be9db5fbdaef59c9f532aabf87006dbaa", size = 107626, upload-time = "2026-01-11T11:21:53.459Z" }, - { url = "https://files.pythonhosted.org/packages/2f/6d/77be674a3485e75cacbf2ddba2b146911477bd887dda9d8c9dfb2f15e871/tomli-2.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:cae9c19ed12d4e8f3ebf46d1a75090e4c0dc16271c5bce1c833ac168f08fb614", size = 94842, upload-time = "2026-01-11T11:21:54.831Z" }, - { url = "https://files.pythonhosted.org/packages/3c/43/7389a1869f2f26dba52404e1ef13b4784b6b37dac93bac53457e3ff24ca3/tomli-2.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:920b1de295e72887bafa3ad9f7a792f811847d57ea6b1215154030cf131f16b1", size = 154894, upload-time = "2026-01-11T11:21:56.07Z" }, - { url = "https://files.pythonhosted.org/packages/e9/05/2f9bf110b5294132b2edf13fe6ca6ae456204f3d749f623307cbb7a946f2/tomli-2.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7d6d9a4aee98fac3eab4952ad1d73aee87359452d1c086b5ceb43ed02ddb16b8", size = 149053, upload-time = "2026-01-11T11:21:57.467Z" }, - { url = "https://files.pythonhosted.org/packages/e8/41/1eda3ca1abc6f6154a8db4d714a4d35c4ad90adc0bcf700657291593fbf3/tomli-2.4.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:36b9d05b51e65b254ea6c2585b59d2c4cb91c8a3d91d0ed0f17591a29aaea54a", size = 243481, upload-time = "2026-01-11T11:21:58.661Z" }, - { url = "https://files.pythonhosted.org/packages/d2/6d/02ff5ab6c8868b41e7d4b987ce2b5f6a51d3335a70aa144edd999e055a01/tomli-2.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1c8a885b370751837c029ef9bc014f27d80840e48bac415f3412e6593bbc18c1", size = 251720, upload-time = "2026-01-11T11:22:00.178Z" }, - { url = "https://files.pythonhosted.org/packages/7b/57/0405c59a909c45d5b6f146107c6d997825aa87568b042042f7a9c0afed34/tomli-2.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8768715ffc41f0008abe25d808c20c3d990f42b6e2e58305d5da280ae7d1fa3b", size = 247014, upload-time = "2026-01-11T11:22:01.238Z" }, - { url = "https://files.pythonhosted.org/packages/2c/0e/2e37568edd944b4165735687cbaf2fe3648129e440c26d02223672ee0630/tomli-2.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7b438885858efd5be02a9a133caf5812b8776ee0c969fea02c45e8e3f296ba51", size = 251820, upload-time = "2026-01-11T11:22:02.727Z" }, - { url = "https://files.pythonhosted.org/packages/5a/1c/ee3b707fdac82aeeb92d1a113f803cf6d0f37bdca0849cb489553e1f417a/tomli-2.4.0-cp312-cp312-win32.whl", hash = "sha256:0408e3de5ec77cc7f81960c362543cbbd91ef883e3138e81b729fc3eea5b9729", size = 97712, upload-time = "2026-01-11T11:22:03.777Z" }, - { url = "https://files.pythonhosted.org/packages/69/13/c07a9177d0b3bab7913299b9278845fc6eaaca14a02667c6be0b0a2270c8/tomli-2.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:685306e2cc7da35be4ee914fd34ab801a6acacb061b6a7abca922aaf9ad368da", size = 108296, upload-time = "2026-01-11T11:22:04.86Z" }, - { url = "https://files.pythonhosted.org/packages/18/27/e267a60bbeeee343bcc279bb9e8fbed0cbe224bc7b2a3dc2975f22809a09/tomli-2.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:5aa48d7c2356055feef06a43611fc401a07337d5b006be13a30f6c58f869e3c3", size = 94553, upload-time = "2026-01-11T11:22:05.854Z" }, - { url = "https://files.pythonhosted.org/packages/34/91/7f65f9809f2936e1f4ce6268ae1903074563603b2a2bd969ebbda802744f/tomli-2.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:84d081fbc252d1b6a982e1870660e7330fb8f90f676f6e78b052ad4e64714bf0", size = 154915, upload-time = "2026-01-11T11:22:06.703Z" }, - { url = "https://files.pythonhosted.org/packages/20/aa/64dd73a5a849c2e8f216b755599c511badde80e91e9bc2271baa7b2cdbb1/tomli-2.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9a08144fa4cba33db5255f9b74f0b89888622109bd2776148f2597447f92a94e", size = 149038, upload-time = "2026-01-11T11:22:07.56Z" }, - { url = "https://files.pythonhosted.org/packages/9e/8a/6d38870bd3d52c8d1505ce054469a73f73a0fe62c0eaf5dddf61447e32fa/tomli-2.4.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c73add4bb52a206fd0c0723432db123c0c75c280cbd67174dd9d2db228ebb1b4", size = 242245, upload-time = "2026-01-11T11:22:08.344Z" }, - { url = "https://files.pythonhosted.org/packages/59/bb/8002fadefb64ab2669e5b977df3f5e444febea60e717e755b38bb7c41029/tomli-2.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fb2945cbe303b1419e2706e711b7113da57b7db31ee378d08712d678a34e51e", size = 250335, upload-time = "2026-01-11T11:22:09.951Z" }, - { url = "https://files.pythonhosted.org/packages/a5/3d/4cdb6f791682b2ea916af2de96121b3cb1284d7c203d97d92d6003e91c8d/tomli-2.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bbb1b10aa643d973366dc2cb1ad94f99c1726a02343d43cbc011edbfac579e7c", size = 245962, upload-time = "2026-01-11T11:22:11.27Z" }, - { url = "https://files.pythonhosted.org/packages/f2/4a/5f25789f9a460bd858ba9756ff52d0830d825b458e13f754952dd15fb7bb/tomli-2.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4cbcb367d44a1f0c2be408758b43e1ffb5308abe0ea222897d6bfc8e8281ef2f", size = 250396, upload-time = "2026-01-11T11:22:12.325Z" }, - { url = "https://files.pythonhosted.org/packages/aa/2f/b73a36fea58dfa08e8b3a268750e6853a6aac2a349241a905ebd86f3047a/tomli-2.4.0-cp313-cp313-win32.whl", hash = "sha256:7d49c66a7d5e56ac959cb6fc583aff0651094ec071ba9ad43df785abc2320d86", size = 97530, upload-time = "2026-01-11T11:22:13.865Z" }, - { url = "https://files.pythonhosted.org/packages/3b/af/ca18c134b5d75de7e8dc551c5234eaba2e8e951f6b30139599b53de9c187/tomli-2.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:3cf226acb51d8f1c394c1b310e0e0e61fecdd7adcb78d01e294ac297dd2e7f87", size = 108227, upload-time = "2026-01-11T11:22:15.224Z" }, - { url = "https://files.pythonhosted.org/packages/22/c3/b386b832f209fee8073c8138ec50f27b4460db2fdae9ffe022df89a57f9b/tomli-2.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:d20b797a5c1ad80c516e41bc1fb0443ddb5006e9aaa7bda2d71978346aeb9132", size = 94748, upload-time = "2026-01-11T11:22:16.009Z" }, - { url = "https://files.pythonhosted.org/packages/f3/c4/84047a97eb1004418bc10bdbcfebda209fca6338002eba2dc27cc6d13563/tomli-2.4.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:26ab906a1eb794cd4e103691daa23d95c6919cc2fa9160000ac02370cc9dd3f6", size = 154725, upload-time = "2026-01-11T11:22:17.269Z" }, - { url = "https://files.pythonhosted.org/packages/a8/5d/d39038e646060b9d76274078cddf146ced86dc2b9e8bbf737ad5983609a0/tomli-2.4.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:20cedb4ee43278bc4f2fee6cb50daec836959aadaf948db5172e776dd3d993fc", size = 148901, upload-time = "2026-01-11T11:22:18.287Z" }, - { url = "https://files.pythonhosted.org/packages/73/e5/383be1724cb30f4ce44983d249645684a48c435e1cd4f8b5cded8a816d3c/tomli-2.4.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:39b0b5d1b6dd03684b3fb276407ebed7090bbec989fa55838c98560c01113b66", size = 243375, upload-time = "2026-01-11T11:22:19.154Z" }, - { url = "https://files.pythonhosted.org/packages/31/f0/bea80c17971c8d16d3cc109dc3585b0f2ce1036b5f4a8a183789023574f2/tomli-2.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a26d7ff68dfdb9f87a016ecfd1e1c2bacbe3108f4e0f8bcd2228ef9a766c787d", size = 250639, upload-time = "2026-01-11T11:22:20.168Z" }, - { url = "https://files.pythonhosted.org/packages/2c/8f/2853c36abbb7608e3f945d8a74e32ed3a74ee3a1f468f1ffc7d1cb3abba6/tomli-2.4.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:20ffd184fb1df76a66e34bd1b36b4a4641bd2b82954befa32fe8163e79f1a702", size = 246897, upload-time = "2026-01-11T11:22:21.544Z" }, - { url = "https://files.pythonhosted.org/packages/49/f0/6c05e3196ed5337b9fe7ea003e95fd3819a840b7a0f2bf5a408ef1dad8ed/tomli-2.4.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:75c2f8bbddf170e8effc98f5e9084a8751f8174ea6ccf4fca5398436e0320bc8", size = 254697, upload-time = "2026-01-11T11:22:23.058Z" }, - { url = "https://files.pythonhosted.org/packages/f3/f5/2922ef29c9f2951883525def7429967fc4d8208494e5ab524234f06b688b/tomli-2.4.0-cp314-cp314-win32.whl", hash = "sha256:31d556d079d72db7c584c0627ff3a24c5d3fb4f730221d3444f3efb1b2514776", size = 98567, upload-time = "2026-01-11T11:22:24.033Z" }, - { url = "https://files.pythonhosted.org/packages/7b/31/22b52e2e06dd2a5fdbc3ee73226d763b184ff21fc24e20316a44ccc4d96b/tomli-2.4.0-cp314-cp314-win_amd64.whl", hash = "sha256:43e685b9b2341681907759cf3a04e14d7104b3580f808cfde1dfdb60ada85475", size = 108556, upload-time = "2026-01-11T11:22:25.378Z" }, - { url = "https://files.pythonhosted.org/packages/48/3d/5058dff3255a3d01b705413f64f4306a141a8fd7a251e5a495e3f192a998/tomli-2.4.0-cp314-cp314-win_arm64.whl", hash = "sha256:3d895d56bd3f82ddd6faaff993c275efc2ff38e52322ea264122d72729dca2b2", size = 96014, upload-time = "2026-01-11T11:22:26.138Z" }, - { url = "https://files.pythonhosted.org/packages/b8/4e/75dab8586e268424202d3a1997ef6014919c941b50642a1682df43204c22/tomli-2.4.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:5b5807f3999fb66776dbce568cc9a828544244a8eb84b84b9bafc080c99597b9", size = 163339, upload-time = "2026-01-11T11:22:27.143Z" }, - { url = "https://files.pythonhosted.org/packages/06/e3/b904d9ab1016829a776d97f163f183a48be6a4deb87304d1e0116a349519/tomli-2.4.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c084ad935abe686bd9c898e62a02a19abfc9760b5a79bc29644463eaf2840cb0", size = 159490, upload-time = "2026-01-11T11:22:28.399Z" }, - { url = "https://files.pythonhosted.org/packages/e3/5a/fc3622c8b1ad823e8ea98a35e3c632ee316d48f66f80f9708ceb4f2a0322/tomli-2.4.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f2e3955efea4d1cfbcb87bc321e00dc08d2bcb737fd1d5e398af111d86db5df", size = 269398, upload-time = "2026-01-11T11:22:29.345Z" }, - { url = "https://files.pythonhosted.org/packages/fd/33/62bd6152c8bdd4c305ad9faca48f51d3acb2df1f8791b1477d46ff86e7f8/tomli-2.4.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e0fe8a0b8312acf3a88077a0802565cb09ee34107813bba1c7cd591fa6cfc8d", size = 276515, upload-time = "2026-01-11T11:22:30.327Z" }, - { url = "https://files.pythonhosted.org/packages/4b/ff/ae53619499f5235ee4211e62a8d7982ba9e439a0fb4f2f351a93d67c1dd2/tomli-2.4.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:413540dce94673591859c4c6f794dfeaa845e98bf35d72ed59636f869ef9f86f", size = 273806, upload-time = "2026-01-11T11:22:32.56Z" }, - { url = "https://files.pythonhosted.org/packages/47/71/cbca7787fa68d4d0a9f7072821980b39fbb1b6faeb5f5cf02f4a5559fa28/tomli-2.4.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0dc56fef0e2c1c470aeac5b6ca8cc7b640bb93e92d9803ddaf9ea03e198f5b0b", size = 281340, upload-time = "2026-01-11T11:22:33.505Z" }, - { url = "https://files.pythonhosted.org/packages/f5/00/d595c120963ad42474cf6ee7771ad0d0e8a49d0f01e29576ee9195d9ecdf/tomli-2.4.0-cp314-cp314t-win32.whl", hash = "sha256:d878f2a6707cc9d53a1be1414bbb419e629c3d6e67f69230217bb663e76b5087", size = 108106, upload-time = "2026-01-11T11:22:34.451Z" }, - { url = "https://files.pythonhosted.org/packages/de/69/9aa0c6a505c2f80e519b43764f8b4ba93b5a0bbd2d9a9de6e2b24271b9a5/tomli-2.4.0-cp314-cp314t-win_amd64.whl", hash = "sha256:2add28aacc7425117ff6364fe9e06a183bb0251b03f986df0e78e974047571fd", size = 120504, upload-time = "2026-01-11T11:22:35.764Z" }, - { url = "https://files.pythonhosted.org/packages/b3/9f/f1668c281c58cfae01482f7114a4b88d345e4c140386241a1a24dcc9e7bc/tomli-2.4.0-cp314-cp314t-win_arm64.whl", hash = "sha256:2b1e3b80e1d5e52e40e9b924ec43d81570f0e7d09d11081b797bc4692765a3d4", size = 99561, upload-time = "2026-01-11T11:22:36.624Z" }, - { url = "https://files.pythonhosted.org/packages/23/d1/136eb2cb77520a31e1f64cbae9d33ec6df0d78bdf4160398e86eec8a8754/tomli-2.4.0-py3-none-any.whl", hash = "sha256:1f776e7d669ebceb01dee46484485f43a4048746235e683bcdffacdf1fb4785a", size = 14477, upload-time = "2026-01-11T11:22:37.446Z" }, -] - -[[package]] -name = "typing-extensions" -version = "4.15.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, -] - -[[package]] -name = "typing-inspection" -version = "0.4.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "extra == 'group-8-profound-pydantic-v2' or extra != 'group-8-profound-pydantic-v1'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, -] - -[[package]] -name = "tzdata" -version = "2026.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/92/ff/5a28bdfd8c3ebec42564ac7d0e54ca3db65044a9314a97f9564fa7a1e926/tzdata-2026.3.tar.gz", hash = "sha256:4a1518b8993086a7982523e071643f3c0e5f213e75b21318e78bcabfff9d1415", size = 198674, upload-time = "2026-07-10T08:50:37.887Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/6d/b53b99a9f2766d095985947a5782f1702cabb129a34f7a802d7197af832f/tzdata-2026.3-py2.py3-none-any.whl", hash = "sha256:dc096730c87af6cab1b171c9d532be840741ff5d459015e7f6947bd7d7e54931", size = 348168, upload-time = "2026-07-10T08:50:36.46Z" }, -] - -[[package]] -name = "yarl" -version = "1.22.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "idna" }, - { name = "multidict" }, - { name = "propcache" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/57/63/0c6ebca57330cd313f6102b16dd57ffaf3ec4c83403dcb45dbd15c6f3ea1/yarl-1.22.0.tar.gz", hash = "sha256:bebf8557577d4401ba8bd9ff33906f1376c877aa78d1fe216ad01b4d6745af71", size = 187169, upload-time = "2025-10-06T14:12:55.963Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/43/a2204825342f37c337f5edb6637040fa14e365b2fcc2346960201d457579/yarl-1.22.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c7bd6683587567e5a49ee6e336e0612bec8329be1b7d4c8af5687dcdeb67ee1e", size = 140517, upload-time = "2025-10-06T14:08:42.494Z" }, - { url = "https://files.pythonhosted.org/packages/44/6f/674f3e6f02266428c56f704cd2501c22f78e8b2eeb23f153117cc86fb28a/yarl-1.22.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5cdac20da754f3a723cceea5b3448e1a2074866406adeb4ef35b469d089adb8f", size = 93495, upload-time = "2025-10-06T14:08:46.2Z" }, - { url = "https://files.pythonhosted.org/packages/b8/12/5b274d8a0f30c07b91b2f02cba69152600b47830fcfb465c108880fcee9c/yarl-1.22.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07a524d84df0c10f41e3ee918846e1974aba4ec017f990dc735aad487a0bdfdf", size = 94400, upload-time = "2025-10-06T14:08:47.855Z" }, - { url = "https://files.pythonhosted.org/packages/e2/7f/df1b6949b1fa1aa9ff6de6e2631876ad4b73c4437822026e85d8acb56bb1/yarl-1.22.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e1b329cb8146d7b736677a2440e422eadd775d1806a81db2d4cded80a48efc1a", size = 347545, upload-time = "2025-10-06T14:08:49.683Z" }, - { url = "https://files.pythonhosted.org/packages/84/09/f92ed93bd6cd77872ab6c3462df45ca45cd058d8f1d0c9b4f54c1704429f/yarl-1.22.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:75976c6945d85dbb9ee6308cd7ff7b1fb9409380c82d6119bd778d8fcfe2931c", size = 319598, upload-time = "2025-10-06T14:08:51.215Z" }, - { url = "https://files.pythonhosted.org/packages/c3/97/ac3f3feae7d522cf7ccec3d340bb0b2b61c56cb9767923df62a135092c6b/yarl-1.22.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:80ddf7a5f8c86cb3eb4bc9028b07bbbf1f08a96c5c0bc1244be5e8fefcb94147", size = 363893, upload-time = "2025-10-06T14:08:53.144Z" }, - { url = "https://files.pythonhosted.org/packages/06/49/f3219097403b9c84a4d079b1d7bda62dd9b86d0d6e4428c02d46ab2c77fc/yarl-1.22.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d332fc2e3c94dad927f2112395772a4e4fedbcf8f80efc21ed7cdfae4d574fdb", size = 371240, upload-time = "2025-10-06T14:08:55.036Z" }, - { url = "https://files.pythonhosted.org/packages/35/9f/06b765d45c0e44e8ecf0fe15c9eacbbde342bb5b7561c46944f107bfb6c3/yarl-1.22.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0cf71bf877efeac18b38d3930594c0948c82b64547c1cf420ba48722fe5509f6", size = 346965, upload-time = "2025-10-06T14:08:56.722Z" }, - { url = "https://files.pythonhosted.org/packages/c5/69/599e7cea8d0fcb1694323b0db0dda317fa3162f7b90166faddecf532166f/yarl-1.22.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:663e1cadaddae26be034a6ab6072449a8426ddb03d500f43daf952b74553bba0", size = 342026, upload-time = "2025-10-06T14:08:58.563Z" }, - { url = "https://files.pythonhosted.org/packages/95/6f/9dfd12c8bc90fea9eab39832ee32ea48f8e53d1256252a77b710c065c89f/yarl-1.22.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:6dcbb0829c671f305be48a7227918cfcd11276c2d637a8033a99a02b67bf9eda", size = 335637, upload-time = "2025-10-06T14:09:00.506Z" }, - { url = "https://files.pythonhosted.org/packages/57/2e/34c5b4eb9b07e16e873db5b182c71e5f06f9b5af388cdaa97736d79dd9a6/yarl-1.22.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f0d97c18dfd9a9af4490631905a3f131a8e4c9e80a39353919e2cfed8f00aedc", size = 359082, upload-time = "2025-10-06T14:09:01.936Z" }, - { url = "https://files.pythonhosted.org/packages/31/71/fa7e10fb772d273aa1f096ecb8ab8594117822f683bab7d2c5a89914c92a/yarl-1.22.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:437840083abe022c978470b942ff832c3940b2ad3734d424b7eaffcd07f76737", size = 357811, upload-time = "2025-10-06T14:09:03.445Z" }, - { url = "https://files.pythonhosted.org/packages/26/da/11374c04e8e1184a6a03cf9c8f5688d3e5cec83ed6f31ad3481b3207f709/yarl-1.22.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a899cbd98dce6f5d8de1aad31cb712ec0a530abc0a86bd6edaa47c1090138467", size = 351223, upload-time = "2025-10-06T14:09:05.401Z" }, - { url = "https://files.pythonhosted.org/packages/82/8f/e2d01f161b0c034a30410e375e191a5d27608c1f8693bab1a08b089ca096/yarl-1.22.0-cp310-cp310-win32.whl", hash = "sha256:595697f68bd1f0c1c159fcb97b661fc9c3f5db46498043555d04805430e79bea", size = 82118, upload-time = "2025-10-06T14:09:11.148Z" }, - { url = "https://files.pythonhosted.org/packages/62/46/94c76196642dbeae634c7a61ba3da88cd77bed875bf6e4a8bed037505aa6/yarl-1.22.0-cp310-cp310-win_amd64.whl", hash = "sha256:cb95a9b1adaa48e41815a55ae740cfda005758104049a640a398120bf02515ca", size = 86852, upload-time = "2025-10-06T14:09:12.958Z" }, - { url = "https://files.pythonhosted.org/packages/af/af/7df4f179d3b1a6dcb9a4bd2ffbc67642746fcafdb62580e66876ce83fff4/yarl-1.22.0-cp310-cp310-win_arm64.whl", hash = "sha256:b85b982afde6df99ecc996990d4ad7ccbdbb70e2a4ba4de0aecde5922ba98a0b", size = 82012, upload-time = "2025-10-06T14:09:14.664Z" }, - { url = "https://files.pythonhosted.org/packages/4d/27/5ab13fc84c76a0250afd3d26d5936349a35be56ce5785447d6c423b26d92/yarl-1.22.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1ab72135b1f2db3fed3997d7e7dc1b80573c67138023852b6efb336a5eae6511", size = 141607, upload-time = "2025-10-06T14:09:16.298Z" }, - { url = "https://files.pythonhosted.org/packages/6a/a1/d065d51d02dc02ce81501d476b9ed2229d9a990818332242a882d5d60340/yarl-1.22.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:669930400e375570189492dc8d8341301578e8493aec04aebc20d4717f899dd6", size = 94027, upload-time = "2025-10-06T14:09:17.786Z" }, - { url = "https://files.pythonhosted.org/packages/c1/da/8da9f6a53f67b5106ffe902c6fa0164e10398d4e150d85838b82f424072a/yarl-1.22.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:792a2af6d58177ef7c19cbf0097aba92ca1b9cb3ffdd9c7470e156c8f9b5e028", size = 94963, upload-time = "2025-10-06T14:09:19.662Z" }, - { url = "https://files.pythonhosted.org/packages/68/fe/2c1f674960c376e29cb0bec1249b117d11738db92a6ccc4a530b972648db/yarl-1.22.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ea66b1c11c9150f1372f69afb6b8116f2dd7286f38e14ea71a44eee9ec51b9d", size = 368406, upload-time = "2025-10-06T14:09:21.402Z" }, - { url = "https://files.pythonhosted.org/packages/95/26/812a540e1c3c6418fec60e9bbd38e871eaba9545e94fa5eff8f4a8e28e1e/yarl-1.22.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3e2daa88dc91870215961e96a039ec73e4937da13cf77ce17f9cad0c18df3503", size = 336581, upload-time = "2025-10-06T14:09:22.98Z" }, - { url = "https://files.pythonhosted.org/packages/0b/f5/5777b19e26fdf98563985e481f8be3d8a39f8734147a6ebf459d0dab5a6b/yarl-1.22.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba440ae430c00eee41509353628600212112cd5018d5def7e9b05ea7ac34eb65", size = 388924, upload-time = "2025-10-06T14:09:24.655Z" }, - { url = "https://files.pythonhosted.org/packages/86/08/24bd2477bd59c0bbd994fe1d93b126e0472e4e3df5a96a277b0a55309e89/yarl-1.22.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e6438cc8f23a9c1478633d216b16104a586b9761db62bfacb6425bac0a36679e", size = 392890, upload-time = "2025-10-06T14:09:26.617Z" }, - { url = "https://files.pythonhosted.org/packages/46/00/71b90ed48e895667ecfb1eaab27c1523ee2fa217433ed77a73b13205ca4b/yarl-1.22.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c52a6e78aef5cf47a98ef8e934755abf53953379b7d53e68b15ff4420e6683d", size = 365819, upload-time = "2025-10-06T14:09:28.544Z" }, - { url = "https://files.pythonhosted.org/packages/30/2d/f715501cae832651d3282387c6a9236cd26bd00d0ff1e404b3dc52447884/yarl-1.22.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3b06bcadaac49c70f4c88af4ffcfbe3dc155aab3163e75777818092478bcbbe7", size = 363601, upload-time = "2025-10-06T14:09:30.568Z" }, - { url = "https://files.pythonhosted.org/packages/f8/f9/a678c992d78e394e7126ee0b0e4e71bd2775e4334d00a9278c06a6cce96a/yarl-1.22.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:6944b2dc72c4d7f7052683487e3677456050ff77fcf5e6204e98caf785ad1967", size = 358072, upload-time = "2025-10-06T14:09:32.528Z" }, - { url = "https://files.pythonhosted.org/packages/2c/d1/b49454411a60edb6fefdcad4f8e6dbba7d8019e3a508a1c5836cba6d0781/yarl-1.22.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:d5372ca1df0f91a86b047d1277c2aaf1edb32d78bbcefffc81b40ffd18f027ed", size = 385311, upload-time = "2025-10-06T14:09:34.634Z" }, - { url = "https://files.pythonhosted.org/packages/87/e5/40d7a94debb8448c7771a916d1861d6609dddf7958dc381117e7ba36d9e8/yarl-1.22.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:51af598701f5299012b8416486b40fceef8c26fc87dc6d7d1f6fc30609ea0aa6", size = 381094, upload-time = "2025-10-06T14:09:36.268Z" }, - { url = "https://files.pythonhosted.org/packages/35/d8/611cc282502381ad855448643e1ad0538957fc82ae83dfe7762c14069e14/yarl-1.22.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b266bd01fedeffeeac01a79ae181719ff848a5a13ce10075adbefc8f1daee70e", size = 370944, upload-time = "2025-10-06T14:09:37.872Z" }, - { url = "https://files.pythonhosted.org/packages/2d/df/fadd00fb1c90e1a5a8bd731fa3d3de2e165e5a3666a095b04e31b04d9cb6/yarl-1.22.0-cp311-cp311-win32.whl", hash = "sha256:a9b1ba5610a4e20f655258d5a1fdc7ebe3d837bb0e45b581398b99eb98b1f5ca", size = 81804, upload-time = "2025-10-06T14:09:39.359Z" }, - { url = "https://files.pythonhosted.org/packages/b5/f7/149bb6f45f267cb5c074ac40c01c6b3ea6d8a620d34b337f6321928a1b4d/yarl-1.22.0-cp311-cp311-win_amd64.whl", hash = "sha256:078278b9b0b11568937d9509b589ee83ef98ed6d561dfe2020e24a9fd08eaa2b", size = 86858, upload-time = "2025-10-06T14:09:41.068Z" }, - { url = "https://files.pythonhosted.org/packages/2b/13/88b78b93ad3f2f0b78e13bfaaa24d11cbc746e93fe76d8c06bf139615646/yarl-1.22.0-cp311-cp311-win_arm64.whl", hash = "sha256:b6a6f620cfe13ccec221fa312139135166e47ae169f8253f72a0abc0dae94376", size = 81637, upload-time = "2025-10-06T14:09:42.712Z" }, - { url = "https://files.pythonhosted.org/packages/75/ff/46736024fee3429b80a165a732e38e5d5a238721e634ab41b040d49f8738/yarl-1.22.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e340382d1afa5d32b892b3ff062436d592ec3d692aeea3bef3a5cfe11bbf8c6f", size = 142000, upload-time = "2025-10-06T14:09:44.631Z" }, - { url = "https://files.pythonhosted.org/packages/5a/9a/b312ed670df903145598914770eb12de1bac44599549b3360acc96878df8/yarl-1.22.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f1e09112a2c31ffe8d80be1b0988fa6a18c5d5cad92a9ffbb1c04c91bfe52ad2", size = 94338, upload-time = "2025-10-06T14:09:46.372Z" }, - { url = "https://files.pythonhosted.org/packages/ba/f5/0601483296f09c3c65e303d60c070a5c19fcdbc72daa061e96170785bc7d/yarl-1.22.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:939fe60db294c786f6b7c2d2e121576628468f65453d86b0fe36cb52f987bd74", size = 94909, upload-time = "2025-10-06T14:09:48.648Z" }, - { url = "https://files.pythonhosted.org/packages/60/41/9a1fe0b73dbcefce72e46cf149b0e0a67612d60bfc90fb59c2b2efdfbd86/yarl-1.22.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e1651bf8e0398574646744c1885a41198eba53dc8a9312b954073f845c90a8df", size = 372940, upload-time = "2025-10-06T14:09:50.089Z" }, - { url = "https://files.pythonhosted.org/packages/17/7a/795cb6dfee561961c30b800f0ed616b923a2ec6258b5def2a00bf8231334/yarl-1.22.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b8a0588521a26bf92a57a1705b77b8b59044cdceccac7151bd8d229e66b8dedb", size = 345825, upload-time = "2025-10-06T14:09:52.142Z" }, - { url = "https://files.pythonhosted.org/packages/d7/93/a58f4d596d2be2ae7bab1a5846c4d270b894958845753b2c606d666744d3/yarl-1.22.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:42188e6a615c1a75bcaa6e150c3fe8f3e8680471a6b10150c5f7e83f47cc34d2", size = 386705, upload-time = "2025-10-06T14:09:54.128Z" }, - { url = "https://files.pythonhosted.org/packages/61/92/682279d0e099d0e14d7fd2e176bd04f48de1484f56546a3e1313cd6c8e7c/yarl-1.22.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f6d2cb59377d99718913ad9a151030d6f83ef420a2b8f521d94609ecc106ee82", size = 396518, upload-time = "2025-10-06T14:09:55.762Z" }, - { url = "https://files.pythonhosted.org/packages/db/0f/0d52c98b8a885aeda831224b78f3be7ec2e1aa4a62091f9f9188c3c65b56/yarl-1.22.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50678a3b71c751d58d7908edc96d332af328839eea883bb554a43f539101277a", size = 377267, upload-time = "2025-10-06T14:09:57.958Z" }, - { url = "https://files.pythonhosted.org/packages/22/42/d2685e35908cbeaa6532c1fc73e89e7f2efb5d8a7df3959ea8e37177c5a3/yarl-1.22.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1e8fbaa7cec507aa24ea27a01456e8dd4b6fab829059b69844bd348f2d467124", size = 365797, upload-time = "2025-10-06T14:09:59.527Z" }, - { url = "https://files.pythonhosted.org/packages/a2/83/cf8c7bcc6355631762f7d8bdab920ad09b82efa6b722999dfb05afa6cfac/yarl-1.22.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:433885ab5431bc3d3d4f2f9bd15bfa1614c522b0f1405d62c4f926ccd69d04fa", size = 365535, upload-time = "2025-10-06T14:10:01.139Z" }, - { url = "https://files.pythonhosted.org/packages/25/e1/5302ff9b28f0c59cac913b91fe3f16c59a033887e57ce9ca5d41a3a94737/yarl-1.22.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:b790b39c7e9a4192dc2e201a282109ed2985a1ddbd5ac08dc56d0e121400a8f7", size = 382324, upload-time = "2025-10-06T14:10:02.756Z" }, - { url = "https://files.pythonhosted.org/packages/bf/cd/4617eb60f032f19ae3a688dc990d8f0d89ee0ea378b61cac81ede3e52fae/yarl-1.22.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:31f0b53913220599446872d757257be5898019c85e7971599065bc55065dc99d", size = 383803, upload-time = "2025-10-06T14:10:04.552Z" }, - { url = "https://files.pythonhosted.org/packages/59/65/afc6e62bb506a319ea67b694551dab4a7e6fb7bf604e9bd9f3e11d575fec/yarl-1.22.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a49370e8f711daec68d09b821a34e1167792ee2d24d405cbc2387be4f158b520", size = 374220, upload-time = "2025-10-06T14:10:06.489Z" }, - { url = "https://files.pythonhosted.org/packages/e7/3d/68bf18d50dc674b942daec86a9ba922d3113d8399b0e52b9897530442da2/yarl-1.22.0-cp312-cp312-win32.whl", hash = "sha256:70dfd4f241c04bd9239d53b17f11e6ab672b9f1420364af63e8531198e3f5fe8", size = 81589, upload-time = "2025-10-06T14:10:09.254Z" }, - { url = "https://files.pythonhosted.org/packages/c8/9a/6ad1a9b37c2f72874f93e691b2e7ecb6137fb2b899983125db4204e47575/yarl-1.22.0-cp312-cp312-win_amd64.whl", hash = "sha256:8884d8b332a5e9b88e23f60bb166890009429391864c685e17bd73a9eda9105c", size = 87213, upload-time = "2025-10-06T14:10:11.369Z" }, - { url = "https://files.pythonhosted.org/packages/44/c5/c21b562d1680a77634d748e30c653c3ca918beb35555cff24986fff54598/yarl-1.22.0-cp312-cp312-win_arm64.whl", hash = "sha256:ea70f61a47f3cc93bdf8b2f368ed359ef02a01ca6393916bc8ff877427181e74", size = 81330, upload-time = "2025-10-06T14:10:13.112Z" }, - { url = "https://files.pythonhosted.org/packages/ea/f3/d67de7260456ee105dc1d162d43a019ecad6b91e2f51809d6cddaa56690e/yarl-1.22.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8dee9c25c74997f6a750cd317b8ca63545169c098faee42c84aa5e506c819b53", size = 139980, upload-time = "2025-10-06T14:10:14.601Z" }, - { url = "https://files.pythonhosted.org/packages/01/88/04d98af0b47e0ef42597b9b28863b9060bb515524da0a65d5f4db160b2d5/yarl-1.22.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01e73b85a5434f89fc4fe27dcda2aff08ddf35e4d47bbbea3bdcd25321af538a", size = 93424, upload-time = "2025-10-06T14:10:16.115Z" }, - { url = "https://files.pythonhosted.org/packages/18/91/3274b215fd8442a03975ce6bee5fe6aa57a8326b29b9d3d56234a1dca244/yarl-1.22.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:22965c2af250d20c873cdbee8ff958fb809940aeb2e74ba5f20aaf6b7ac8c70c", size = 93821, upload-time = "2025-10-06T14:10:17.993Z" }, - { url = "https://files.pythonhosted.org/packages/61/3a/caf4e25036db0f2da4ca22a353dfeb3c9d3c95d2761ebe9b14df8fc16eb0/yarl-1.22.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4f15793aa49793ec8d1c708ab7f9eded1aa72edc5174cae703651555ed1b601", size = 373243, upload-time = "2025-10-06T14:10:19.44Z" }, - { url = "https://files.pythonhosted.org/packages/6e/9e/51a77ac7516e8e7803b06e01f74e78649c24ee1021eca3d6a739cb6ea49c/yarl-1.22.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5542339dcf2747135c5c85f68680353d5cb9ffd741c0f2e8d832d054d41f35a", size = 342361, upload-time = "2025-10-06T14:10:21.124Z" }, - { url = "https://files.pythonhosted.org/packages/d4/f8/33b92454789dde8407f156c00303e9a891f1f51a0330b0fad7c909f87692/yarl-1.22.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5c401e05ad47a75869c3ab3e35137f8468b846770587e70d71e11de797d113df", size = 387036, upload-time = "2025-10-06T14:10:22.902Z" }, - { url = "https://files.pythonhosted.org/packages/d9/9a/c5db84ea024f76838220280f732970aa4ee154015d7f5c1bfb60a267af6f/yarl-1.22.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:243dda95d901c733f5b59214d28b0120893d91777cb8aa043e6ef059d3cddfe2", size = 397671, upload-time = "2025-10-06T14:10:24.523Z" }, - { url = "https://files.pythonhosted.org/packages/11/c9/cd8538dc2e7727095e0c1d867bad1e40c98f37763e6d995c1939f5fdc7b1/yarl-1.22.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bec03d0d388060058f5d291a813f21c011041938a441c593374da6077fe21b1b", size = 377059, upload-time = "2025-10-06T14:10:26.406Z" }, - { url = "https://files.pythonhosted.org/packages/a1/b9/ab437b261702ced75122ed78a876a6dec0a1b0f5e17a4ac7a9a2482d8abe/yarl-1.22.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0748275abb8c1e1e09301ee3cf90c8a99678a4e92e4373705f2a2570d581273", size = 365356, upload-time = "2025-10-06T14:10:28.461Z" }, - { url = "https://files.pythonhosted.org/packages/b2/9d/8e1ae6d1d008a9567877b08f0ce4077a29974c04c062dabdb923ed98e6fe/yarl-1.22.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:47fdb18187e2a4e18fda2c25c05d8251a9e4a521edaed757fef033e7d8498d9a", size = 361331, upload-time = "2025-10-06T14:10:30.541Z" }, - { url = "https://files.pythonhosted.org/packages/ca/5a/09b7be3905962f145b73beb468cdd53db8aa171cf18c80400a54c5b82846/yarl-1.22.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c7044802eec4524fde550afc28edda0dd5784c4c45f0be151a2d3ba017daca7d", size = 382590, upload-time = "2025-10-06T14:10:33.352Z" }, - { url = "https://files.pythonhosted.org/packages/aa/7f/59ec509abf90eda5048b0bc3e2d7b5099dffdb3e6b127019895ab9d5ef44/yarl-1.22.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:139718f35149ff544caba20fce6e8a2f71f1e39b92c700d8438a0b1d2a631a02", size = 385316, upload-time = "2025-10-06T14:10:35.034Z" }, - { url = "https://files.pythonhosted.org/packages/e5/84/891158426bc8036bfdfd862fabd0e0fa25df4176ec793e447f4b85cf1be4/yarl-1.22.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e1b51bebd221006d3d2f95fbe124b22b247136647ae5dcc8c7acafba66e5ee67", size = 374431, upload-time = "2025-10-06T14:10:37.76Z" }, - { url = "https://files.pythonhosted.org/packages/bb/49/03da1580665baa8bef5e8ed34c6df2c2aca0a2f28bf397ed238cc1bbc6f2/yarl-1.22.0-cp313-cp313-win32.whl", hash = "sha256:d3e32536234a95f513bd374e93d717cf6b2231a791758de6c509e3653f234c95", size = 81555, upload-time = "2025-10-06T14:10:39.649Z" }, - { url = "https://files.pythonhosted.org/packages/9a/ee/450914ae11b419eadd067c6183ae08381cfdfcb9798b90b2b713bbebddda/yarl-1.22.0-cp313-cp313-win_amd64.whl", hash = "sha256:47743b82b76d89a1d20b83e60d5c20314cbd5ba2befc9cda8f28300c4a08ed4d", size = 86965, upload-time = "2025-10-06T14:10:41.313Z" }, - { url = "https://files.pythonhosted.org/packages/98/4d/264a01eae03b6cf629ad69bae94e3b0e5344741e929073678e84bf7a3e3b/yarl-1.22.0-cp313-cp313-win_arm64.whl", hash = "sha256:5d0fcda9608875f7d052eff120c7a5da474a6796fe4d83e152e0e4d42f6d1a9b", size = 81205, upload-time = "2025-10-06T14:10:43.167Z" }, - { url = "https://files.pythonhosted.org/packages/88/fc/6908f062a2f77b5f9f6d69cecb1747260831ff206adcbc5b510aff88df91/yarl-1.22.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:719ae08b6972befcba4310e49edb1161a88cdd331e3a694b84466bd938a6ab10", size = 146209, upload-time = "2025-10-06T14:10:44.643Z" }, - { url = "https://files.pythonhosted.org/packages/65/47/76594ae8eab26210b4867be6f49129861ad33da1f1ebdf7051e98492bf62/yarl-1.22.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:47d8a5c446df1c4db9d21b49619ffdba90e77c89ec6e283f453856c74b50b9e3", size = 95966, upload-time = "2025-10-06T14:10:46.554Z" }, - { url = "https://files.pythonhosted.org/packages/ab/ce/05e9828a49271ba6b5b038b15b3934e996980dd78abdfeb52a04cfb9467e/yarl-1.22.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cfebc0ac8333520d2d0423cbbe43ae43c8838862ddb898f5ca68565e395516e9", size = 97312, upload-time = "2025-10-06T14:10:48.007Z" }, - { url = "https://files.pythonhosted.org/packages/d1/c5/7dffad5e4f2265b29c9d7ec869c369e4223166e4f9206fc2243ee9eea727/yarl-1.22.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4398557cbf484207df000309235979c79c4356518fd5c99158c7d38203c4da4f", size = 361967, upload-time = "2025-10-06T14:10:49.997Z" }, - { url = "https://files.pythonhosted.org/packages/50/b2/375b933c93a54bff7fc041e1a6ad2c0f6f733ffb0c6e642ce56ee3b39970/yarl-1.22.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2ca6fd72a8cd803be290d42f2dec5cdcd5299eeb93c2d929bf060ad9efaf5de0", size = 323949, upload-time = "2025-10-06T14:10:52.004Z" }, - { url = "https://files.pythonhosted.org/packages/66/50/bfc2a29a1d78644c5a7220ce2f304f38248dc94124a326794e677634b6cf/yarl-1.22.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca1f59c4e1ab6e72f0a23c13fca5430f889634166be85dbf1013683e49e3278e", size = 361818, upload-time = "2025-10-06T14:10:54.078Z" }, - { url = "https://files.pythonhosted.org/packages/46/96/f3941a46af7d5d0f0498f86d71275696800ddcdd20426298e572b19b91ff/yarl-1.22.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c5010a52015e7c70f86eb967db0f37f3c8bd503a695a49f8d45700144667708", size = 372626, upload-time = "2025-10-06T14:10:55.767Z" }, - { url = "https://files.pythonhosted.org/packages/c1/42/8b27c83bb875cd89448e42cd627e0fb971fa1675c9ec546393d18826cb50/yarl-1.22.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d7672ecf7557476642c88497c2f8d8542f8e36596e928e9bcba0e42e1e7d71f", size = 341129, upload-time = "2025-10-06T14:10:57.985Z" }, - { url = "https://files.pythonhosted.org/packages/49/36/99ca3122201b382a3cf7cc937b95235b0ac944f7e9f2d5331d50821ed352/yarl-1.22.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3b7c88eeef021579d600e50363e0b6ee4f7f6f728cd3486b9d0f3ee7b946398d", size = 346776, upload-time = "2025-10-06T14:10:59.633Z" }, - { url = "https://files.pythonhosted.org/packages/85/b4/47328bf996acd01a4c16ef9dcd2f59c969f495073616586f78cd5f2efb99/yarl-1.22.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f4afb5c34f2c6fecdcc182dfcfc6af6cccf1aa923eed4d6a12e9d96904e1a0d8", size = 334879, upload-time = "2025-10-06T14:11:01.454Z" }, - { url = "https://files.pythonhosted.org/packages/c2/ad/b77d7b3f14a4283bffb8e92c6026496f6de49751c2f97d4352242bba3990/yarl-1.22.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:59c189e3e99a59cf8d83cbb31d4db02d66cda5a1a4374e8a012b51255341abf5", size = 350996, upload-time = "2025-10-06T14:11:03.452Z" }, - { url = "https://files.pythonhosted.org/packages/81/c8/06e1d69295792ba54d556f06686cbd6a7ce39c22307100e3fb4a2c0b0a1d/yarl-1.22.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:5a3bf7f62a289fa90f1990422dc8dff5a458469ea71d1624585ec3a4c8d6960f", size = 356047, upload-time = "2025-10-06T14:11:05.115Z" }, - { url = "https://files.pythonhosted.org/packages/4b/b8/4c0e9e9f597074b208d18cef227d83aac36184bfbc6eab204ea55783dbc5/yarl-1.22.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:de6b9a04c606978fdfe72666fa216ffcf2d1a9f6a381058d4378f8d7b1e5de62", size = 342947, upload-time = "2025-10-06T14:11:08.137Z" }, - { url = "https://files.pythonhosted.org/packages/e0/e5/11f140a58bf4c6ad7aca69a892bff0ee638c31bea4206748fc0df4ebcb3a/yarl-1.22.0-cp313-cp313t-win32.whl", hash = "sha256:1834bb90991cc2999f10f97f5f01317f99b143284766d197e43cd5b45eb18d03", size = 86943, upload-time = "2025-10-06T14:11:10.284Z" }, - { url = "https://files.pythonhosted.org/packages/31/74/8b74bae38ed7fe6793d0c15a0c8207bbb819cf287788459e5ed230996cdd/yarl-1.22.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff86011bd159a9d2dfc89c34cfd8aff12875980e3bd6a39ff097887520e60249", size = 93715, upload-time = "2025-10-06T14:11:11.739Z" }, - { url = "https://files.pythonhosted.org/packages/69/66/991858aa4b5892d57aef7ee1ba6b4d01ec3b7eb3060795d34090a3ca3278/yarl-1.22.0-cp313-cp313t-win_arm64.whl", hash = "sha256:7861058d0582b847bc4e3a4a4c46828a410bca738673f35a29ba3ca5db0b473b", size = 83857, upload-time = "2025-10-06T14:11:13.586Z" }, - { url = "https://files.pythonhosted.org/packages/46/b3/e20ef504049f1a1c54a814b4b9bed96d1ac0e0610c3b4da178f87209db05/yarl-1.22.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:34b36c2c57124530884d89d50ed2c1478697ad7473efd59cfd479945c95650e4", size = 140520, upload-time = "2025-10-06T14:11:15.465Z" }, - { url = "https://files.pythonhosted.org/packages/e4/04/3532d990fdbab02e5ede063676b5c4260e7f3abea2151099c2aa745acc4c/yarl-1.22.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:0dd9a702591ca2e543631c2a017e4a547e38a5c0f29eece37d9097e04a7ac683", size = 93504, upload-time = "2025-10-06T14:11:17.106Z" }, - { url = "https://files.pythonhosted.org/packages/11/63/ff458113c5c2dac9a9719ac68ee7c947cb621432bcf28c9972b1c0e83938/yarl-1.22.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:594fcab1032e2d2cc3321bb2e51271e7cd2b516c7d9aee780ece81b07ff8244b", size = 94282, upload-time = "2025-10-06T14:11:19.064Z" }, - { url = "https://files.pythonhosted.org/packages/a7/bc/315a56aca762d44a6aaaf7ad253f04d996cb6b27bad34410f82d76ea8038/yarl-1.22.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f3d7a87a78d46a2e3d5b72587ac14b4c16952dd0887dbb051451eceac774411e", size = 372080, upload-time = "2025-10-06T14:11:20.996Z" }, - { url = "https://files.pythonhosted.org/packages/3f/3f/08e9b826ec2e099ea6e7c69a61272f4f6da62cb5b1b63590bb80ca2e4a40/yarl-1.22.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:852863707010316c973162e703bddabec35e8757e67fcb8ad58829de1ebc8590", size = 338696, upload-time = "2025-10-06T14:11:22.847Z" }, - { url = "https://files.pythonhosted.org/packages/e3/9f/90360108e3b32bd76789088e99538febfea24a102380ae73827f62073543/yarl-1.22.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:131a085a53bfe839a477c0845acf21efc77457ba2bcf5899618136d64f3303a2", size = 387121, upload-time = "2025-10-06T14:11:24.889Z" }, - { url = "https://files.pythonhosted.org/packages/98/92/ab8d4657bd5b46a38094cfaea498f18bb70ce6b63508fd7e909bd1f93066/yarl-1.22.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:078a8aefd263f4d4f923a9677b942b445a2be970ca24548a8102689a3a8ab8da", size = 394080, upload-time = "2025-10-06T14:11:27.307Z" }, - { url = "https://files.pythonhosted.org/packages/f5/e7/d8c5a7752fef68205296201f8ec2bf718f5c805a7a7e9880576c67600658/yarl-1.22.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bca03b91c323036913993ff5c738d0842fc9c60c4648e5c8d98331526df89784", size = 372661, upload-time = "2025-10-06T14:11:29.387Z" }, - { url = "https://files.pythonhosted.org/packages/b6/2e/f4d26183c8db0bb82d491b072f3127fb8c381a6206a3a56332714b79b751/yarl-1.22.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:68986a61557d37bb90d3051a45b91fa3d5c516d177dfc6dd6f2f436a07ff2b6b", size = 364645, upload-time = "2025-10-06T14:11:31.423Z" }, - { url = "https://files.pythonhosted.org/packages/80/7c/428e5812e6b87cd00ee8e898328a62c95825bf37c7fa87f0b6bb2ad31304/yarl-1.22.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:4792b262d585ff0dff6bcb787f8492e40698443ec982a3568c2096433660c694", size = 355361, upload-time = "2025-10-06T14:11:33.055Z" }, - { url = "https://files.pythonhosted.org/packages/ec/2a/249405fd26776f8b13c067378ef4d7dd49c9098d1b6457cdd152a99e96a9/yarl-1.22.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ebd4549b108d732dba1d4ace67614b9545b21ece30937a63a65dd34efa19732d", size = 381451, upload-time = "2025-10-06T14:11:35.136Z" }, - { url = "https://files.pythonhosted.org/packages/67/a8/fb6b1adbe98cf1e2dd9fad71003d3a63a1bc22459c6e15f5714eb9323b93/yarl-1.22.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:f87ac53513d22240c7d59203f25cc3beac1e574c6cd681bbfd321987b69f95fd", size = 383814, upload-time = "2025-10-06T14:11:37.094Z" }, - { url = "https://files.pythonhosted.org/packages/d9/f9/3aa2c0e480fb73e872ae2814c43bc1e734740bb0d54e8cb2a95925f98131/yarl-1.22.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:22b029f2881599e2f1b06f8f1db2ee63bd309e2293ba2d566e008ba12778b8da", size = 370799, upload-time = "2025-10-06T14:11:38.83Z" }, - { url = "https://files.pythonhosted.org/packages/50/3c/af9dba3b8b5eeb302f36f16f92791f3ea62e3f47763406abf6d5a4a3333b/yarl-1.22.0-cp314-cp314-win32.whl", hash = "sha256:6a635ea45ba4ea8238463b4f7d0e721bad669f80878b7bfd1f89266e2ae63da2", size = 82990, upload-time = "2025-10-06T14:11:40.624Z" }, - { url = "https://files.pythonhosted.org/packages/ac/30/ac3a0c5bdc1d6efd1b41fa24d4897a4329b3b1e98de9449679dd327af4f0/yarl-1.22.0-cp314-cp314-win_amd64.whl", hash = "sha256:0d6e6885777af0f110b0e5d7e5dda8b704efed3894da26220b7f3d887b839a79", size = 88292, upload-time = "2025-10-06T14:11:42.578Z" }, - { url = "https://files.pythonhosted.org/packages/df/0a/227ab4ff5b998a1b7410abc7b46c9b7a26b0ca9e86c34ba4b8d8bc7c63d5/yarl-1.22.0-cp314-cp314-win_arm64.whl", hash = "sha256:8218f4e98d3c10d683584cb40f0424f4b9fd6e95610232dd75e13743b070ee33", size = 82888, upload-time = "2025-10-06T14:11:44.863Z" }, - { url = "https://files.pythonhosted.org/packages/06/5e/a15eb13db90abd87dfbefb9760c0f3f257ac42a5cac7e75dbc23bed97a9f/yarl-1.22.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:45c2842ff0e0d1b35a6bf1cd6c690939dacb617a70827f715232b2e0494d55d1", size = 146223, upload-time = "2025-10-06T14:11:46.796Z" }, - { url = "https://files.pythonhosted.org/packages/18/82/9665c61910d4d84f41a5bf6837597c89e665fa88aa4941080704645932a9/yarl-1.22.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:d947071e6ebcf2e2bee8fce76e10faca8f7a14808ca36a910263acaacef08eca", size = 95981, upload-time = "2025-10-06T14:11:48.845Z" }, - { url = "https://files.pythonhosted.org/packages/5d/9a/2f65743589809af4d0a6d3aa749343c4b5f4c380cc24a8e94a3c6625a808/yarl-1.22.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:334b8721303e61b00019474cc103bdac3d7b1f65e91f0bfedeec2d56dfe74b53", size = 97303, upload-time = "2025-10-06T14:11:50.897Z" }, - { url = "https://files.pythonhosted.org/packages/b0/ab/5b13d3e157505c43c3b43b5a776cbf7b24a02bc4cccc40314771197e3508/yarl-1.22.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e7ce67c34138a058fd092f67d07a72b8e31ff0c9236e751957465a24b28910c", size = 361820, upload-time = "2025-10-06T14:11:52.549Z" }, - { url = "https://files.pythonhosted.org/packages/fb/76/242a5ef4677615cf95330cfc1b4610e78184400699bdda0acb897ef5e49a/yarl-1.22.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d77e1b2c6d04711478cb1c4ab90db07f1609ccf06a287d5607fcd90dc9863acf", size = 323203, upload-time = "2025-10-06T14:11:54.225Z" }, - { url = "https://files.pythonhosted.org/packages/8c/96/475509110d3f0153b43d06164cf4195c64d16999e0c7e2d8a099adcd6907/yarl-1.22.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4647674b6150d2cae088fc07de2738a84b8bcedebef29802cf0b0a82ab6face", size = 363173, upload-time = "2025-10-06T14:11:56.069Z" }, - { url = "https://files.pythonhosted.org/packages/c9/66/59db471aecfbd559a1fd48aedd954435558cd98c7d0da8b03cc6c140a32c/yarl-1.22.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:efb07073be061c8f79d03d04139a80ba33cbd390ca8f0297aae9cce6411e4c6b", size = 373562, upload-time = "2025-10-06T14:11:58.783Z" }, - { url = "https://files.pythonhosted.org/packages/03/1f/c5d94abc91557384719da10ff166b916107c1b45e4d0423a88457071dd88/yarl-1.22.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e51ac5435758ba97ad69617e13233da53908beccc6cfcd6c34bbed8dcbede486", size = 339828, upload-time = "2025-10-06T14:12:00.686Z" }, - { url = "https://files.pythonhosted.org/packages/5f/97/aa6a143d3afba17b6465733681c70cf175af89f76ec8d9286e08437a7454/yarl-1.22.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:33e32a0dd0c8205efa8e83d04fc9f19313772b78522d1bdc7d9aed706bfd6138", size = 347551, upload-time = "2025-10-06T14:12:02.628Z" }, - { url = "https://files.pythonhosted.org/packages/43/3c/45a2b6d80195959239a7b2a8810506d4eea5487dce61c2a3393e7fc3c52e/yarl-1.22.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:bf4a21e58b9cde0e401e683ebd00f6ed30a06d14e93f7c8fd059f8b6e8f87b6a", size = 334512, upload-time = "2025-10-06T14:12:04.871Z" }, - { url = "https://files.pythonhosted.org/packages/86/a0/c2ab48d74599c7c84cb104ebd799c5813de252bea0f360ffc29d270c2caa/yarl-1.22.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:e4b582bab49ac33c8deb97e058cd67c2c50dac0dd134874106d9c774fd272529", size = 352400, upload-time = "2025-10-06T14:12:06.624Z" }, - { url = "https://files.pythonhosted.org/packages/32/75/f8919b2eafc929567d3d8411f72bdb1a2109c01caaab4ebfa5f8ffadc15b/yarl-1.22.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:0b5bcc1a9c4839e7e30b7b30dd47fe5e7e44fb7054ec29b5bb8d526aa1041093", size = 357140, upload-time = "2025-10-06T14:12:08.362Z" }, - { url = "https://files.pythonhosted.org/packages/cf/72/6a85bba382f22cf78add705d8c3731748397d986e197e53ecc7835e76de7/yarl-1.22.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c0232bce2170103ec23c454e54a57008a9a72b5d1c3105dc2496750da8cfa47c", size = 341473, upload-time = "2025-10-06T14:12:10.994Z" }, - { url = "https://files.pythonhosted.org/packages/35/18/55e6011f7c044dc80b98893060773cefcfdbf60dfefb8cb2f58b9bacbd83/yarl-1.22.0-cp314-cp314t-win32.whl", hash = "sha256:8009b3173bcd637be650922ac455946197d858b3630b6d8787aa9e5c4564533e", size = 89056, upload-time = "2025-10-06T14:12:13.317Z" }, - { url = "https://files.pythonhosted.org/packages/f9/86/0f0dccb6e59a9e7f122c5afd43568b1d31b8ab7dda5f1b01fb5c7025c9a9/yarl-1.22.0-cp314-cp314t-win_amd64.whl", hash = "sha256:9fb17ea16e972c63d25d4a97f016d235c78dd2344820eb35bc034bc32012ee27", size = 96292, upload-time = "2025-10-06T14:12:15.398Z" }, - { url = "https://files.pythonhosted.org/packages/48/b7/503c98092fb3b344a179579f55814b613c1fbb1c23b3ec14a7b008a66a6e/yarl-1.22.0-cp314-cp314t-win_arm64.whl", hash = "sha256:9f6d73c1436b934e3f01df1e1b21ff765cd1d28c77dfb9ace207f746d4610ee1", size = 85171, upload-time = "2025-10-06T14:12:16.935Z" }, - { url = "https://files.pythonhosted.org/packages/94/fd/6480106702a79bcceda5fd9c63cb19a04a6506bd5ce7fd8d9b63742f0021/yarl-1.22.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3aa27acb6de7a23785d81557577491f6c38a5209a254d1191519d07d8fe51748", size = 141301, upload-time = "2025-10-06T14:12:19.01Z" }, - { url = "https://files.pythonhosted.org/packages/42/e1/6d95d21b17a93e793e4ec420a925fe1f6a9342338ca7a563ed21129c0990/yarl-1.22.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:af74f05666a5e531289cb1cc9c883d1de2088b8e5b4de48004e5ca8a830ac859", size = 93864, upload-time = "2025-10-06T14:12:21.05Z" }, - { url = "https://files.pythonhosted.org/packages/32/58/b8055273c203968e89808413ea4c984988b6649baabf10f4522e67c22d2f/yarl-1.22.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:62441e55958977b8167b2709c164c91a6363e25da322d87ae6dd9c6019ceecf9", size = 94706, upload-time = "2025-10-06T14:12:23.287Z" }, - { url = "https://files.pythonhosted.org/packages/18/91/d7bfbc28a88c2895ecd0da6a874def0c147de78afc52c773c28e1aa233a3/yarl-1.22.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b580e71cac3f8113d3135888770903eaf2f507e9421e5697d6ee6d8cd1c7f054", size = 347100, upload-time = "2025-10-06T14:12:28.527Z" }, - { url = "https://files.pythonhosted.org/packages/bd/e8/37a1e7b99721c0564b1fc7b0a4d1f595ef6fb8060d82ca61775b644185f7/yarl-1.22.0-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e81fda2fb4a07eda1a2252b216aa0df23ebcd4d584894e9612e80999a78fd95b", size = 318902, upload-time = "2025-10-06T14:12:30.528Z" }, - { url = "https://files.pythonhosted.org/packages/1c/ef/34724449d7ef2db4f22df644f2dac0b8a275d20f585e526937b3ae47b02d/yarl-1.22.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:99b6fc1d55782461b78221e95fc357b47ad98b041e8e20f47c1411d0aacddc60", size = 363302, upload-time = "2025-10-06T14:12:32.295Z" }, - { url = "https://files.pythonhosted.org/packages/8a/04/88a39a5dad39889f192cce8d66cc4c58dbeca983e83f9b6bf23822a7ed91/yarl-1.22.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:088e4e08f033db4be2ccd1f34cf29fe994772fb54cfe004bbf54db320af56890", size = 370816, upload-time = "2025-10-06T14:12:34.01Z" }, - { url = "https://files.pythonhosted.org/packages/6b/1f/5e895e547129413f56c76be2c3ce4b96c797d2d0ff3e16a817d9269b12e6/yarl-1.22.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e4e1f6f0b4da23e61188676e3ed027ef0baa833a2e633c29ff8530800edccba", size = 346465, upload-time = "2025-10-06T14:12:35.977Z" }, - { url = "https://files.pythonhosted.org/packages/11/13/a750e9fd6f9cc9ed3a52a70fe58ffe505322f0efe0d48e1fd9ffe53281f5/yarl-1.22.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:84fc3ec96fce86ce5aa305eb4aa9358279d1aa644b71fab7b8ed33fe3ba1a7ca", size = 341506, upload-time = "2025-10-06T14:12:37.788Z" }, - { url = "https://files.pythonhosted.org/packages/3c/67/bb6024de76e7186611ebe626aec5b71a2d2ecf9453e795f2dbd80614784c/yarl-1.22.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5dbeefd6ca588b33576a01b0ad58aa934bc1b41ef89dee505bf2932b22ddffba", size = 335030, upload-time = "2025-10-06T14:12:39.775Z" }, - { url = "https://files.pythonhosted.org/packages/a2/be/50b38447fd94a7992996a62b8b463d0579323fcfc08c61bdba949eef8a5d/yarl-1.22.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:14291620375b1060613f4aab9ebf21850058b6b1b438f386cc814813d901c60b", size = 358560, upload-time = "2025-10-06T14:12:41.547Z" }, - { url = "https://files.pythonhosted.org/packages/e2/89/c020b6f547578c4e3dbb6335bf918f26e2f34ad0d1e515d72fd33ac0c635/yarl-1.22.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:a4fcfc8eb2c34148c118dfa02e6427ca278bfd0f3df7c5f99e33d2c0e81eae3e", size = 357290, upload-time = "2025-10-06T14:12:43.861Z" }, - { url = "https://files.pythonhosted.org/packages/8c/52/c49a619ee35a402fa3a7019a4fa8d26878fec0d1243f6968bbf516789578/yarl-1.22.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:029866bde8d7b0878b9c160e72305bbf0a7342bcd20b9999381704ae03308dc8", size = 350700, upload-time = "2025-10-06T14:12:46.868Z" }, - { url = "https://files.pythonhosted.org/packages/ab/c9/f5042d87777bf6968435f04a2bbb15466b2f142e6e47fa4f34d1a3f32f0c/yarl-1.22.0-cp39-cp39-win32.whl", hash = "sha256:4dcc74149ccc8bba31ce1944acee24813e93cfdee2acda3c172df844948ddf7b", size = 82323, upload-time = "2025-10-06T14:12:48.633Z" }, - { url = "https://files.pythonhosted.org/packages/fd/58/d00f7cad9eba20c4eefac2682f34661d1d1b3a942fc0092eb60e78cfb733/yarl-1.22.0-cp39-cp39-win_amd64.whl", hash = "sha256:10619d9fdee46d20edc49d3479e2f8269d0779f1b031e6f7c2aa1c76be04b7ed", size = 87145, upload-time = "2025-10-06T14:12:50.241Z" }, - { url = "https://files.pythonhosted.org/packages/c2/a3/70904f365080780d38b919edd42d224b8c4ce224a86950d2eaa2a24366ad/yarl-1.22.0-cp39-cp39-win_arm64.whl", hash = "sha256:dd7afd3f8b0bfb4e0d9fc3c31bfe8a4ec7debe124cfd90619305def3c8ca8cd2", size = 82173, upload-time = "2025-10-06T14:12:51.869Z" }, - { url = "https://files.pythonhosted.org/packages/73/ae/b48f95715333080afb75a4504487cbe142cae1268afc482d06692d605ae6/yarl-1.22.0-py3-none-any.whl", hash = "sha256:1380560bdba02b6b6c90de54133c81c9f2a453dee9912fe58c1dcced1edb7cff", size = 46814, upload-time = "2025-10-06T14:12:53.872Z" }, -] - -[[package]] -name = "zipp" -version = "3.23.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e3/02/0f2892c661036d50ede074e376733dca2ae7c6eb617489437771209d4180/zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166", size = 25547, upload-time = "2025-06-08T17:06:39.4Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e", size = 10276, upload-time = "2025-06-08T17:06:38.034Z" }, -] From 699a28179f065163098f0a846297bdbb6292fc7a Mon Sep 17 00:00:00 2001 From: scalarbot Date: Mon, 17 Aug 2026 23:05:34 +0000 Subject: [PATCH 2/3] chore(api): regenerate SDK The previous scalar-sdk.manifest.json could not be read as a valid manifest, so changes were not classified. Build: 2yOUzvEbN2BWCdiPLo5vc --- .claude/skills/profound-python-sdk/SKILL.md | 91 + .github/workflows/release-please.yml | 93 + .github/workflows/release-title-edit.yml | 143 + .github/workflows/sdk-ci.yml | 5 + .github/workflows/sdk-release.yml | 10 +- .gitignore | 4 +- LICENSE | 2 +- README.md | 50 +- SKILL.md | 91 + VERSIONING.md | 79 + api.md | 1533 +- openapi.augmented.json | 32703 ++++++++----- pyproject.toml | 14 +- release-please-config.json | 46 + scalar-sdk.manifest.json | 38645 ++++++---------- src/{ => profound}/__init__.py | 13 +- src/{ => profound}/_base_client.py | 37 +- src/{ => profound}/_client.py | 327 +- src/{ => profound}/_compat.py | 0 src/{ => profound}/_constants.py | 0 src/{ => profound}/_event_handler.py | 0 src/{ => profound}/_exceptions.py | 0 src/{ => profound}/_files.py | 0 src/{ => profound}/_models.py | 0 src/{ => profound}/_qs.py | 0 src/{ => profound}/_resource.py | 0 src/{ => profound}/_response.py | 4 +- src/{ => profound}/_send_queue.py | 0 src/{ => profound}/_streaming.py | 0 src/{ => profound}/_types.py | 0 src/{ => profound}/_utils/__init__.py | 0 src/{ => profound}/_utils/_compat.py | 0 src/{ => profound}/_utils/_datetime_parse.py | 0 src/{ => profound}/_utils/_json.py | 0 src/{ => profound}/_utils/_logs.py | 0 src/{ => profound}/_utils/_path.py | 0 src/{ => profound}/_utils/_proxy.py | 0 src/{ => profound}/_utils/_reflection.py | 0 src/{ => profound}/_utils/_resources_proxy.py | 0 src/{ => profound}/_utils/_streams.py | 0 src/{ => profound}/_utils/_sync.py | 0 src/{ => profound}/_utils/_transform.py | 0 src/{ => profound}/_utils/_typing.py | 0 src/{ => profound}/_utils/_utils.py | 0 src/{ => profound}/_version.py | 2 +- src/{ => profound}/py.typed | 0 src/{ => profound}/resources/__init__.py | 66 +- .../resources/agents/__init__.py | 14 - src/profound/resources/agents/agents.py | 333 + src/{ => profound}/resources/agents/runs.py | 94 +- .../resources/content/__init__.py | 0 .../resources/content/content.py | 8 - .../resources/content/optimization.py | 78 +- .../resources/knowledge_bases/__init__.py | 0 .../resources/knowledge_bases/documents.py | 226 +- .../resources/knowledge_bases/folders.py | 133 +- .../knowledge_bases/knowledge_bases.py | 113 +- .../resources/organizations/__init__.py | 0 .../resources/organizations/categories.py | 723 +- .../resources/organizations/organizations.py | 335 +- src/profound/resources/prompts.py | 205 + src/profound/resources/reports/__init__.py | 47 + src/profound/resources/reports/reports.py | 2310 + .../resources/reports/shopping.py | 1607 +- .../resources/reports/web_search_results.py | 280 +- src/profound/types/__init__.py | 70 + src/{ => profound}/types/agent_list_params.py | 5 +- .../types/agent_list_response.py | 10 +- .../types/agent_retrieve_params.py | 1 - .../types/agent_retrieve_response.py | 31 +- src/profound/types/agents/__init__.py | 8 + .../types/agents/run_create_params.py | 11 +- .../types/agents/run_create_response.py | 1 - .../types/agents/run_retrieve_params.py | 15 + .../types/agents/run_retrieve_response.py | 61 + src/{ => profound}/types/category.py | 4 +- src/{ => profound}/types/content/__init__.py | 0 .../types/content/optimization_list_params.py | 1 - .../content/optimization_list_response.py | 18 +- .../content/optimization_retrieve_response.py | 123 + src/profound/types/hostname_filter_param.py | 29 + .../types/knowledge_base_list_params.py | 1 - .../types/knowledge_base_list_response.py | 10 +- .../types/knowledge_base_search_params.py | 9 +- .../types/knowledge_base_search_response.py | 19 +- .../types/knowledge_bases/__init__.py | 3 - .../knowledge_bases/document_create_params.py | 1 - .../document_create_response.py | 1 - .../knowledge_bases/document_delete_params.py | 1 - .../document_delete_response.py | 1 - .../knowledge_bases/document_update_params.py | 1 - .../document_update_response.py | 1 - .../knowledge_bases/folder_create_params.py | 1 - .../knowledge_bases/folder_create_response.py | 2 - .../knowledge_bases/folder_delete_params.py | 1 - .../knowledge_bases/folder_delete_response.py | 2 - src/{ => profound}/types/named_resource.py | 1 - src/{ => profound}/types/organization.py | 1 - .../types/organization_domains_params.py | 6 +- .../types/organization_domains_response.py | 9 +- .../types/organization_get_personas_params.py | 6 +- .../organization_get_personas_response.py | 10 +- .../types/organization_list_assets_params.py | 6 +- .../organization_list_assets_response.py | 10 +- .../types/organization_list_response.py | 1 + .../types/organization_models_response.py | 1 + .../types/organization_regions_params.py | 6 +- .../types/organization_regions_response.py | 1 + .../types/organizations/__init__.py | 14 +- .../organizations/category_assets_response.py | 8 +- .../category_create_prompts_params.py | 30 +- .../category_create_prompts_response.py | 10 +- ...category_get_category_personas_response.py | 10 +- .../organizations/category_list_params.py | 6 +- .../organizations/category_list_response.py | 13 +- .../organizations/category_prompts_params.py | 25 +- .../category_prompts_response.py | 14 +- .../organizations/category_tags_response.py | 8 +- .../organizations/category_topics_response.py | 8 +- .../category_update_prompt_status_params.py | 5 +- .../category_update_prompt_status_response.py | 1 - .../category_update_prompts_params.py | 27 +- .../category_update_prompts_response.py | 10 +- .../types/organizations/field_diff.py | 4 +- .../types/organizations/id_or_name_param.py | 16 + .../organizations/named_resource_diff_list.py | 1 + src/{ => profound}/types/persona_profile.py | 3 +- .../types/persona_profile_behavior.py | 1 - .../types/persona_profile_demographics.py | 1 - .../types/persona_profile_employment.py | 1 - src/profound/types/prompt_answers_params.py | 134 + .../types/prompt_answers_response.py} | 42 +- src/profound/types/prompt_id_filter_param.py | 17 + src/profound/types/report_citations_params.py | 141 + .../types/report_citations_response.py | 22 + .../types/report_get_bots_report_params.py} | 38 +- .../types/report_get_bots_report_v2_params.py | 107 + .../report_get_referrals_report_params.py | 93 + .../report_get_referrals_report_v2_params.py | 128 + src/{ => profound}/types/report_info.py | 11 +- .../types/report_query_fanouts_params.py | 66 + src/{ => profound}/types/report_response.py | 1 + src/{ => profound}/types/report_result.py | 2 +- src/profound/types/report_sentiment_params.py | 144 + .../types/report_stream_citations_params.py | 141 + .../types/report_stream_citations_response.py | 19 + .../types/report_stream_sentiment_params.py | 144 + .../types/report_stream_sentiment_response.py | 19 + .../types/report_stream_visibility_params.py | 116 + .../report_stream_visibility_response.py | 19 + .../types/report_visibility_params.py | 116 + src/profound/types/reports/__init__.py | 47 + .../types/reports/brand_name_filter_param.py | 29 + .../reports/merchant_name_filter_param.py | 29 + .../reports/product_name_filter_param.py | 29 + ...hopping_all_items_with_merchants_params.py | 128 + ...pping_all_items_with_merchants_response.py | 13 +- .../reports/shopping_executions_params.py | 97 + .../reports/shopping_executions_response.py | 13 +- .../shopping_item_visibility_params.py | 139 + .../shopping_item_visibility_response.py | 13 +- .../shopping_merchant_by_items_params.py | 110 + .../shopping_merchant_by_items_response.py | 13 +- .../shopping_merchant_distribution_params.py | 101 + ...shopping_merchant_distribution_response.py | 13 +- .../reports/shopping_merchant_share_params.py | 99 + .../shopping_merchant_share_response.py | 13 +- ...ing_merchant_visibility_by_brand_params.py | 103 + ...g_merchant_visibility_by_brand_response.py | 13 +- .../shopping_product_merchant_urls_params.py | 22 + ...shopping_product_merchant_urls_response.py | 16 + .../reports/shopping_trigger_rate_params.py | 97 + .../reports/shopping_trigger_rate_response.py | 13 +- .../reports/shopping_visibility_params.py | 124 + .../reports/shopping_visibility_response.py | 13 +- .../reports/web_search_result_query_params.py | 120 + .../web_search_result_query_response.py | 12 +- .../web_search_result_stream_params.py | 120 + .../web_search_result_stream_response.py | 19 + .../types/root_domain_filter_param.py | 29 + src/profound/types/shared/__init__.py | 19 + .../types/shared/analysis_type_filter.py | 31 + .../types/shared}/asset_id_filter.py | 7 +- src/profound/types/shared/bot_name_filter.py | 31 + .../types/shared/bot_provider_filter.py | 83 + .../types/shared}/cursor_pagination.py | 2 +- .../types/shared}/model_id_filter.py | 8 +- .../types/shared}/pagination.py | 2 +- .../types/shared}/path_filter.py | 14 +- .../types/shared}/persona_id_filter.py | 6 +- .../types/shared}/prompt_filter.py | 14 +- .../types/shared}/prompt_type_filter.py | 16 +- .../types/shared}/region_id_filter.py | 8 +- .../types/shared}/region_name_filter.py | 14 +- .../types/shared}/tag_id_filter.py | 8 +- .../types/shared}/topic_id_filter.py | 8 +- src/profound/types/shared_params/__init__.py | 18 + .../shared_params/analysis_type_filter.py | 33 + .../types/shared_params/asset_id_filter.py | 17 + .../types/shared_params/bot_name_filter.py | 29 + .../shared_params/bot_provider_filter.py | 85 + .../types/shared_params/model_id_filter.py | 17 + .../types/shared_params/pagination.py | 15 + .../types/shared_params/path_filter.py | 29 + .../types/shared_params/persona_id_filter.py | 17 + .../types/shared_params/prompt_filter.py | 29 + .../types/shared_params/prompt_type_filter.py | 28 + .../types/shared_params/region_id_filter.py | 17 + .../types/shared_params/region_name_filter.py | 29 + .../types/shared_params/tag_id_filter.py | 17 + .../types/shared_params/topic_id_filter.py | 17 + src/profound/types/tag_name_filter_param.py | 29 + src/profound/types/topic_name_filter_param.py | 29 + src/profound/types/url_filter_param.py | 29 + src/resources/agents/agents.py | 789 - src/resources/agents/node_types.py | 249 - src/resources/organization.py | 156 - src/resources/prompts/__init__.py | 33 - src/resources/prompts/answers.py | 490 - src/resources/prompts/prompts.py | 97 - src/resources/reports/__init__.py | 145 - src/resources/reports/accuracy.py | 2459 - src/resources/reports/bots.py | 461 - src/resources/reports/citations.py | 719 - src/resources/reports/query_fanouts.py | 549 - src/resources/reports/referrals.py | 423 - src/resources/reports/reports.py | 534 - src/resources/reports/sentiment.py | 751 - src/resources/reports/visibility.py | 728 - src/types/__init__.py | 68 - src/types/agent_create_v1_post_params.py | 28 - src/types/agent_create_v1_post_response.py | 30 - .../agent_list_graph_v1_graph_get_params.py | 13 - .../agent_list_graph_v1_graph_get_response.py | 24 - ...ent_publish_v1_id_publish_post_response.py | 30 - src/types/agent_update_v1_id_patch_params.py | 18 - .../agent_update_v1_id_patch_response.py | 85 - src/types/agents/__init__.py | 10 - ...st_schema_v1_agents_schema_get_response.py | 42 - .../node_type_list_v1_agents_get_response.py | 26 - src/types/agents/run_agent_request.py | 19 - src/types/agents/run_retrieve_response.py | 41 - src/types/analysis_type_filter.py | 18 - src/types/bot_name_filter.py | 18 - src/types/bot_provider_filter.py | 18 - .../content/optimization_retrieve_response.py | 111 - src/types/create_agent_request.py | 28 - src/types/hostname_filter.py | 18 - .../knowledge_bases/add_folder_request.py | 12 - .../delete_document_request.py | 12 - .../knowledge_bases/delete_folder_request.py | 16 - ...ategories_category_regions_get_response.py | 9 - .../organizations/create_prompts_body.py | 51 - src/types/organizations/id_or_name.py | 20 - .../organizations/update_prompts_body.py | 54 - src/types/prompt_id_filter.py | 18 - src/types/prompts/__init__.py | 12 - .../answer_create_v1_prompts_post_params.py | 101 - .../answer_query_v2_v2_prompts_post_params.py | 50 - ...nswer_query_v2_v2_prompts_post_response.py | 13 - ...stream_v2_v2_prompts_stream_post_params.py | 50 - ...ream_v2_v2_prompts_stream_post_response.py | 7 - src/types/prompts/answers_query.py | 101 - src/types/prompts/answers_v2_query.py | 53 - ...entiment_v2_v1_sentiment_v2_post_params.py | 146 - ...timent_v2_v1_sentiment_v2_post_response.py | 104 - src/types/reports/__init__.py | 128 - src/types/reports/accuracy_breakdown_query.py | 55 - ...akdown_v1_reports_breakdown_post_params.py | 56 - ...down_v1_reports_breakdown_post_response.py | 40 - .../accuracy_citation_analysis_query.py | 17 - ...1_reports_citation_analysis_post_params.py | 18 - ...reports_citation_analysis_post_response.py | 61 - ..._v1_reports_claim_breakdown_post_params.py | 46 - ...1_reports_claim_breakdown_post_response.py | 60 - ..._v1_reports_claim_citations_post_params.py | 54 - ...1_reports_claim_citations_post_response.py | 38 - ...eports_cluster_example_runs_post_params.py | 22 - ...orts_cluster_example_runs_post_response.py | 32 - ..._cluster_verification_pairs_post_params.py | 14 - ...luster_verification_pairs_post_response.py | 32 - ...orts_factcheck_setup_status_post_params.py | 12 - ...ts_factcheck_setup_status_post_response.py | 22 - ..._reports_inaccuracy_drivers_post_params.py | 46 - ...eports_inaccuracy_drivers_post_response.py | 38 - ...reports_inaccurate_clusters_post_params.py | 52 - ...ports_inaccurate_clusters_post_response.py | 44 - ...1_reports_inaccurate_themes_post_params.py | 54 - ...reports_inaccurate_themes_post_response.py | 42 - src/types/reports/accuracy_overview_query.py | 47 - ...verview_v1_reports_overview_post_params.py | 48 - ...rview_v1_reports_overview_post_response.py | 78 - ...ports_top_inaccurate_claims_post_params.py | 46 - ...rts_top_inaccurate_claims_post_response.py | 24 - src/types/reports/accuracy_topic_ids_query.py | 15 - ...ic_ids_v1_reports_topic_ids_post_params.py | 16 - ..._ids_v1_reports_topic_ids_post_response.py | 8 - ...create_report_v2_v2_reports_post_params.py | 75 - src/types/reports/bots_report_query.py | 67 - src/types/reports/bots_report_query_v2.py | 75 - src/types/reports/brand_name_filter.py | 17 - .../citation_query_v1_reports_post_params.py | 76 - ...citation_query_v1_reports_post_response.py | 24 - ...itation_query_v2_v2_reports_post_params.py | 55 - ...ation_query_v2_v2_reports_post_response.py | 13 - ...on_stream_v1_reports_stream_post_params.py | 75 - ..._stream_v1_reports_stream_post_response.py | 27 - ...stream_v2_v2_reports_stream_post_params.py | 55 - ...ream_v2_v2_reports_stream_post_response.py | 7 - src/types/reports/citations_query.py | 75 - src/types/reports/citations_v2_query.py | 58 - src/types/reports/claim_breakdown_query.py | 45 - src/types/reports/claim_citations_query.py | 53 - .../reports/cluster_example_runs_query.py | 22 - .../cluster_verification_pairs_query.py | 13 - .../reports/fact_check_setup_status_query.py | 11 - src/types/reports/inaccuracy_drivers_query.py | 45 - .../reports/inaccurate_clusters_query.py | 51 - src/types/reports/inaccurate_themes_query.py | 53 - src/types/reports/merchant_name_filter.py | 17 - src/types/reports/product_name_filter.py | 17 - ...stream_v2_v2_reports_stream_post_params.py | 60 - ...ream_v2_v2_reports_stream_post_response.py | 7 - .../query_fanout_v1_reports_post_params.py | 48 - .../query_fanout_v2_v2_reports_post_params.py | 60 - ...uery_fanout_v2_v2_reports_post_response.py | 13 - src/types/reports/query_fanouts_query.py | 48 - src/types/reports/query_fanouts_v2_query.py | 63 - ...create_report_v1_v1_reports_post_params.py | 73 - ...create_report_v2_v2_reports_post_params.py | 81 - src/types/reports/referrals_query.py | 73 - src/types/reports/referrals_query_v2.py | 81 - src/types/reports/sentiment_query.py | 76 - .../sentiment_query_v1_reports_post_params.py | 77 - ...ntiment_query_v2_v2_reports_post_params.py | 72 - ...iment_query_v2_v2_reports_post_response.py | 13 - ...nt_stream_v1_reports_stream_post_params.py | 76 - ..._stream_v1_reports_stream_post_response.py | 27 - ...stream_v2_v2_reports_stream_post_params.py | 72 - ...ream_v2_v2_reports_stream_post_response.py | 7 - src/types/reports/sentiment_v2_query.py | 75 - ...hopping_all_items_with_merchants_params.py | 78 - ...shopping_all_items_with_merchants_query.py | 77 - .../reports/shopping_executions_params.py | 68 - .../reports/shopping_executions_query.py | 67 - .../shopping_item_visibility_params.py | 82 - .../reports/shopping_item_visibility_query.py | 81 - .../shopping_merchant_by_items_params.py | 68 - .../shopping_merchant_by_items_query.py | 67 - .../shopping_merchant_distribution_params.py | 70 - .../shopping_merchant_distribution_query.py | 69 - .../reports/shopping_merchant_share_params.py | 70 - .../reports/shopping_merchant_share_query.py | 69 - ...ing_merchant_visibility_by_brand_params.py | 74 - ...ping_merchant_visibility_by_brand_query.py | 73 - .../shopping_product_merchant_urls_params.py | 21 - .../shopping_product_merchant_urls_query.py | 19 - ...shopping_product_merchant_urls_response.py | 21 - .../reports/shopping_trigger_rate_params.py | 66 - .../reports/shopping_trigger_rate_query.py | 65 - .../reports/shopping_visibility_params.py | 80 - .../reports/shopping_visibility_query.py | 79 - src/types/reports/stream_citations_query.py | 74 - src/types/reports/stream_sentiment_query.py | 75 - src/types/reports/stream_visibility_query.py | 67 - .../stream_web_search_results_query.py | 69 - .../reports/top_inaccurate_claims_query.py | 45 - src/types/reports/visibility_query.py | 68 - ...visibility_query_v1_reports_post_params.py | 69 - ...ibility_query_v2_v2_reports_post_params.py | 70 - ...ility_query_v2_v2_reports_post_response.py | 13 - ...ty_stream_v1_reports_stream_post_params.py | 68 - ..._stream_v1_reports_stream_post_response.py | 27 - ...stream_v2_v2_reports_stream_post_params.py | 70 - ...ream_v2_v2_reports_stream_post_response.py | 7 - src/types/reports/visibility_v2_query.py | 72 - .../reports/web_search_result_query_params.py | 71 - .../web_search_result_stream_params.py | 70 - .../web_search_result_stream_response.py | 27 - src/types/reports/web_search_results_query.py | 70 - src/types/root_domain_filter.py | 18 - src/types/search_knowledge_base_request.py | 32 - src/types/sentiment_v2_report_query.py | 145 - src/types/tag_name_filter.py | 18 - src/types/topic_name_filter.py | 18 - src/types/update_agent_request.py | 18 - src/types/update_prompt_status_body.py | 20 - src/types/url_filter.py | 18 - tests/smoke-test.py | 1233 +- 389 files changed, 46915 insertions(+), 55493 deletions(-) create mode 100644 .claude/skills/profound-python-sdk/SKILL.md create mode 100644 .github/workflows/release-please.yml create mode 100644 .github/workflows/release-title-edit.yml create mode 100644 SKILL.md create mode 100644 release-please-config.json rename src/{ => profound}/__init__.py (93%) rename src/{ => profound}/_base_client.py (98%) rename src/{ => profound}/_client.py (75%) rename src/{ => profound}/_compat.py (100%) rename src/{ => profound}/_constants.py (100%) rename src/{ => profound}/_event_handler.py (100%) rename src/{ => profound}/_exceptions.py (100%) rename src/{ => profound}/_files.py (100%) rename src/{ => profound}/_models.py (100%) rename src/{ => profound}/_qs.py (100%) rename src/{ => profound}/_resource.py (100%) rename src/{ => profound}/_response.py (99%) rename src/{ => profound}/_send_queue.py (100%) rename src/{ => profound}/_streaming.py (100%) rename src/{ => profound}/_types.py (100%) rename src/{ => profound}/_utils/__init__.py (100%) rename src/{ => profound}/_utils/_compat.py (100%) rename src/{ => profound}/_utils/_datetime_parse.py (100%) rename src/{ => profound}/_utils/_json.py (100%) rename src/{ => profound}/_utils/_logs.py (100%) rename src/{ => profound}/_utils/_path.py (100%) rename src/{ => profound}/_utils/_proxy.py (100%) rename src/{ => profound}/_utils/_reflection.py (100%) rename src/{ => profound}/_utils/_resources_proxy.py (100%) rename src/{ => profound}/_utils/_streams.py (100%) rename src/{ => profound}/_utils/_sync.py (100%) rename src/{ => profound}/_utils/_transform.py (100%) rename src/{ => profound}/_utils/_typing.py (100%) rename src/{ => profound}/_utils/_utils.py (100%) rename src/{ => profound}/_version.py (66%) rename src/{ => profound}/py.typed (100%) rename src/{ => profound}/resources/__init__.py (85%) rename src/{ => profound}/resources/agents/__init__.py (66%) create mode 100644 src/profound/resources/agents/agents.py rename src/{ => profound}/resources/agents/runs.py (82%) rename src/{ => profound}/resources/content/__init__.py (100%) rename src/{ => profound}/resources/content/content.py (95%) rename src/{ => profound}/resources/content/optimization.py (84%) rename src/{ => profound}/resources/knowledge_bases/__init__.py (100%) rename src/{ => profound}/resources/knowledge_bases/documents.py (74%) rename src/{ => profound}/resources/knowledge_bases/folders.py (77%) rename src/{ => profound}/resources/knowledge_bases/knowledge_bases.py (83%) rename src/{ => profound}/resources/organizations/__init__.py (100%) rename src/{ => profound}/resources/organizations/categories.py (80%) rename src/{ => profound}/resources/organizations/organizations.py (83%) create mode 100644 src/profound/resources/prompts.py create mode 100644 src/profound/resources/reports/__init__.py create mode 100644 src/profound/resources/reports/reports.py rename src/{ => profound}/resources/reports/shopping.py (65%) rename src/{ => profound}/resources/reports/web_search_results.py (68%) create mode 100644 src/profound/types/__init__.py rename src/{ => profound}/types/agent_list_params.py (82%) rename src/{ => profound}/types/agent_list_response.py (85%) rename src/{ => profound}/types/agent_retrieve_params.py (99%) rename src/{ => profound}/types/agent_retrieve_response.py (80%) create mode 100644 src/profound/types/agents/__init__.py rename src/{ => profound}/types/agents/run_create_params.py (76%) rename src/{ => profound}/types/agents/run_create_response.py (99%) create mode 100644 src/profound/types/agents/run_retrieve_params.py create mode 100644 src/profound/types/agents/run_retrieve_response.py rename src/{ => profound}/types/category.py (73%) rename src/{ => profound}/types/content/__init__.py (100%) rename src/{ => profound}/types/content/optimization_list_params.py (99%) rename src/{ => profound}/types/content/optimization_list_response.py (62%) create mode 100644 src/profound/types/content/optimization_retrieve_response.py create mode 100644 src/profound/types/hostname_filter_param.py rename src/{ => profound}/types/knowledge_base_list_params.py (99%) rename src/{ => profound}/types/knowledge_base_list_response.py (78%) rename src/{ => profound}/types/knowledge_base_search_params.py (83%) rename src/{ => profound}/types/knowledge_base_search_response.py (57%) rename src/{ => profound}/types/knowledge_bases/__init__.py (80%) rename src/{ => profound}/types/knowledge_bases/document_create_params.py (99%) rename src/{ => profound}/types/knowledge_bases/document_create_response.py (99%) rename src/{ => profound}/types/knowledge_bases/document_delete_params.py (99%) rename src/{ => profound}/types/knowledge_bases/document_delete_response.py (99%) rename src/{ => profound}/types/knowledge_bases/document_update_params.py (99%) rename src/{ => profound}/types/knowledge_bases/document_update_response.py (99%) rename src/{ => profound}/types/knowledge_bases/folder_create_params.py (99%) rename src/{ => profound}/types/knowledge_bases/folder_create_response.py (99%) rename src/{ => profound}/types/knowledge_bases/folder_delete_params.py (99%) rename src/{ => profound}/types/knowledge_bases/folder_delete_response.py (99%) rename src/{ => profound}/types/named_resource.py (99%) rename src/{ => profound}/types/organization.py (99%) rename src/{ => profound}/types/organization_domains_params.py (81%) rename src/{ => profound}/types/organization_domains_response.py (61%) rename src/{ => profound}/types/organization_get_personas_params.py (81%) rename src/{ => profound}/types/organization_get_personas_response.py (69%) rename src/{ => profound}/types/organization_list_assets_params.py (81%) rename src/{ => profound}/types/organization_list_assets_response.py (76%) rename src/{ => profound}/types/organization_list_response.py (99%) rename src/{ => profound}/types/organization_models_response.py (99%) rename src/{ => profound}/types/organization_regions_params.py (81%) rename src/{ => profound}/types/organization_regions_response.py (99%) rename src/{ => profound}/types/organizations/__init__.py (75%) rename src/{ => profound}/types/organizations/category_assets_response.py (67%) rename src/{ => profound}/types/organizations/category_create_prompts_params.py (57%) rename src/{ => profound}/types/organizations/category_create_prompts_response.py (90%) rename src/{ => profound}/types/organizations/category_get_category_personas_response.py (68%) rename src/{ => profound}/types/organizations/category_list_params.py (80%) rename src/{ => profound}/types/organizations/category_list_response.py (51%) rename src/{ => profound}/types/organizations/category_prompts_params.py (57%) rename src/{ => profound}/types/organizations/category_prompts_response.py (84%) rename src/{ => profound}/types/organizations/category_tags_response.py (54%) rename src/{ => profound}/types/organizations/category_topics_response.py (58%) rename src/{ => profound}/types/organizations/category_update_prompt_status_params.py (86%) rename src/{ => profound}/types/organizations/category_update_prompt_status_response.py (99%) rename src/{ => profound}/types/organizations/category_update_prompts_params.py (63%) rename src/{ => profound}/types/organizations/category_update_prompts_response.py (89%) rename src/{ => profound}/types/organizations/field_diff.py (82%) create mode 100644 src/profound/types/organizations/id_or_name_param.py rename src/{ => profound}/types/organizations/named_resource_diff_list.py (99%) rename src/{ => profound}/types/persona_profile.py (99%) rename src/{ => profound}/types/persona_profile_behavior.py (99%) rename src/{ => profound}/types/persona_profile_demographics.py (99%) rename src/{ => profound}/types/persona_profile_employment.py (99%) create mode 100644 src/profound/types/prompt_answers_params.py rename src/{types/prompts/answer_create_v1_prompts_post_response.py => profound/types/prompt_answers_response.py} (63%) create mode 100644 src/profound/types/prompt_id_filter_param.py create mode 100644 src/profound/types/report_citations_params.py create mode 100644 src/profound/types/report_citations_response.py rename src/{types/reports/bot_create_report_v1_v1_reports_post_params.py => profound/types/report_get_bots_report_params.py} (57%) create mode 100644 src/profound/types/report_get_bots_report_v2_params.py create mode 100644 src/profound/types/report_get_referrals_report_params.py create mode 100644 src/profound/types/report_get_referrals_report_v2_params.py rename src/{ => profound}/types/report_info.py (61%) create mode 100644 src/profound/types/report_query_fanouts_params.py rename src/{ => profound}/types/report_response.py (99%) rename src/{ => profound}/types/report_result.py (88%) create mode 100644 src/profound/types/report_sentiment_params.py create mode 100644 src/profound/types/report_stream_citations_params.py create mode 100644 src/profound/types/report_stream_citations_response.py create mode 100644 src/profound/types/report_stream_sentiment_params.py create mode 100644 src/profound/types/report_stream_sentiment_response.py create mode 100644 src/profound/types/report_stream_visibility_params.py create mode 100644 src/profound/types/report_stream_visibility_response.py create mode 100644 src/profound/types/report_visibility_params.py create mode 100644 src/profound/types/reports/__init__.py create mode 100644 src/profound/types/reports/brand_name_filter_param.py create mode 100644 src/profound/types/reports/merchant_name_filter_param.py create mode 100644 src/profound/types/reports/product_name_filter_param.py create mode 100644 src/profound/types/reports/shopping_all_items_with_merchants_params.py rename src/{ => profound}/types/reports/shopping_all_items_with_merchants_response.py (66%) create mode 100644 src/profound/types/reports/shopping_executions_params.py rename src/{ => profound}/types/reports/shopping_executions_response.py (67%) create mode 100644 src/profound/types/reports/shopping_item_visibility_params.py rename src/{ => profound}/types/reports/shopping_item_visibility_response.py (66%) create mode 100644 src/profound/types/reports/shopping_merchant_by_items_params.py rename src/{ => profound}/types/reports/shopping_merchant_by_items_response.py (66%) create mode 100644 src/profound/types/reports/shopping_merchant_distribution_params.py rename src/{ => profound}/types/reports/shopping_merchant_distribution_response.py (66%) create mode 100644 src/profound/types/reports/shopping_merchant_share_params.py rename src/{ => profound}/types/reports/shopping_merchant_share_response.py (67%) create mode 100644 src/profound/types/reports/shopping_merchant_visibility_by_brand_params.py rename src/{ => profound}/types/reports/shopping_merchant_visibility_by_brand_response.py (66%) create mode 100644 src/profound/types/reports/shopping_product_merchant_urls_params.py create mode 100644 src/profound/types/reports/shopping_product_merchant_urls_response.py create mode 100644 src/profound/types/reports/shopping_trigger_rate_params.py rename src/{ => profound}/types/reports/shopping_trigger_rate_response.py (67%) create mode 100644 src/profound/types/reports/shopping_visibility_params.py rename src/{ => profound}/types/reports/shopping_visibility_response.py (67%) create mode 100644 src/profound/types/reports/web_search_result_query_params.py rename src/{ => profound}/types/reports/web_search_result_query_response.py (64%) create mode 100644 src/profound/types/reports/web_search_result_stream_params.py create mode 100644 src/profound/types/reports/web_search_result_stream_response.py create mode 100644 src/profound/types/root_domain_filter_param.py create mode 100644 src/profound/types/shared/__init__.py create mode 100644 src/profound/types/shared/analysis_type_filter.py rename src/{types => profound/types/shared}/asset_id_filter.py (74%) create mode 100644 src/profound/types/shared/bot_name_filter.py create mode 100644 src/profound/types/shared/bot_provider_filter.py rename src/{types => profound/types/shared}/cursor_pagination.py (93%) rename src/{types => profound/types/shared}/model_id_filter.py (65%) rename src/{types => profound/types/shared}/pagination.py (92%) rename src/{types => profound/types/shared}/path_filter.py (52%) rename src/{types => profound/types/shared}/persona_id_filter.py (76%) rename src/{types => profound/types/shared}/prompt_filter.py (53%) rename src/{types => profound/types/shared}/prompt_type_filter.py (67%) rename src/{types => profound/types/shared}/region_id_filter.py (64%) rename src/{types => profound/types/shared}/region_name_filter.py (54%) rename src/{types => profound/types/shared}/tag_id_filter.py (67%) rename src/{types => profound/types/shared}/topic_id_filter.py (64%) create mode 100644 src/profound/types/shared_params/__init__.py create mode 100644 src/profound/types/shared_params/analysis_type_filter.py create mode 100644 src/profound/types/shared_params/asset_id_filter.py create mode 100644 src/profound/types/shared_params/bot_name_filter.py create mode 100644 src/profound/types/shared_params/bot_provider_filter.py create mode 100644 src/profound/types/shared_params/model_id_filter.py create mode 100644 src/profound/types/shared_params/pagination.py create mode 100644 src/profound/types/shared_params/path_filter.py create mode 100644 src/profound/types/shared_params/persona_id_filter.py create mode 100644 src/profound/types/shared_params/prompt_filter.py create mode 100644 src/profound/types/shared_params/prompt_type_filter.py create mode 100644 src/profound/types/shared_params/region_id_filter.py create mode 100644 src/profound/types/shared_params/region_name_filter.py create mode 100644 src/profound/types/shared_params/tag_id_filter.py create mode 100644 src/profound/types/shared_params/topic_id_filter.py create mode 100644 src/profound/types/tag_name_filter_param.py create mode 100644 src/profound/types/topic_name_filter_param.py create mode 100644 src/profound/types/url_filter_param.py delete mode 100644 src/resources/agents/agents.py delete mode 100644 src/resources/agents/node_types.py delete mode 100644 src/resources/organization.py delete mode 100644 src/resources/prompts/__init__.py delete mode 100644 src/resources/prompts/answers.py delete mode 100644 src/resources/prompts/prompts.py delete mode 100644 src/resources/reports/__init__.py delete mode 100644 src/resources/reports/accuracy.py delete mode 100644 src/resources/reports/bots.py delete mode 100644 src/resources/reports/citations.py delete mode 100644 src/resources/reports/query_fanouts.py delete mode 100644 src/resources/reports/referrals.py delete mode 100644 src/resources/reports/reports.py delete mode 100644 src/resources/reports/sentiment.py delete mode 100644 src/resources/reports/visibility.py delete mode 100644 src/types/__init__.py delete mode 100644 src/types/agent_create_v1_post_params.py delete mode 100644 src/types/agent_create_v1_post_response.py delete mode 100644 src/types/agent_list_graph_v1_graph_get_params.py delete mode 100644 src/types/agent_list_graph_v1_graph_get_response.py delete mode 100644 src/types/agent_publish_v1_id_publish_post_response.py delete mode 100644 src/types/agent_update_v1_id_patch_params.py delete mode 100644 src/types/agent_update_v1_id_patch_response.py delete mode 100644 src/types/agents/__init__.py delete mode 100644 src/types/agents/node_type_list_schema_v1_agents_schema_get_response.py delete mode 100644 src/types/agents/node_type_list_v1_agents_get_response.py delete mode 100644 src/types/agents/run_agent_request.py delete mode 100644 src/types/agents/run_retrieve_response.py delete mode 100644 src/types/analysis_type_filter.py delete mode 100644 src/types/bot_name_filter.py delete mode 100644 src/types/bot_provider_filter.py delete mode 100644 src/types/content/optimization_retrieve_response.py delete mode 100644 src/types/create_agent_request.py delete mode 100644 src/types/hostname_filter.py delete mode 100644 src/types/knowledge_bases/add_folder_request.py delete mode 100644 src/types/knowledge_bases/delete_document_request.py delete mode 100644 src/types/knowledge_bases/delete_folder_request.py delete mode 100644 src/types/organization_list_category_regions_v1_org_categories_category_regions_get_response.py delete mode 100644 src/types/organizations/create_prompts_body.py delete mode 100644 src/types/organizations/id_or_name.py delete mode 100644 src/types/organizations/update_prompts_body.py delete mode 100644 src/types/prompt_id_filter.py delete mode 100644 src/types/prompts/__init__.py delete mode 100644 src/types/prompts/answer_create_v1_prompts_post_params.py delete mode 100644 src/types/prompts/answer_query_v2_v2_prompts_post_params.py delete mode 100644 src/types/prompts/answer_query_v2_v2_prompts_post_response.py delete mode 100644 src/types/prompts/answer_stream_v2_v2_prompts_stream_post_params.py delete mode 100644 src/types/prompts/answer_stream_v2_v2_prompts_stream_post_response.py delete mode 100644 src/types/prompts/answers_query.py delete mode 100644 src/types/prompts/answers_v2_query.py delete mode 100644 src/types/report_query_sentiment_v2_v1_sentiment_v2_post_params.py delete mode 100644 src/types/report_query_sentiment_v2_v1_sentiment_v2_post_response.py delete mode 100644 src/types/reports/__init__.py delete mode 100644 src/types/reports/accuracy_breakdown_query.py delete mode 100644 src/types/reports/accuracy_breakdown_v1_reports_breakdown_post_params.py delete mode 100644 src/types/reports/accuracy_breakdown_v1_reports_breakdown_post_response.py delete mode 100644 src/types/reports/accuracy_citation_analysis_query.py delete mode 100644 src/types/reports/accuracy_citation_analysis_v1_reports_citation_analysis_post_params.py delete mode 100644 src/types/reports/accuracy_citation_analysis_v1_reports_citation_analysis_post_response.py delete mode 100644 src/types/reports/accuracy_claim_breakdown_v1_reports_claim_breakdown_post_params.py delete mode 100644 src/types/reports/accuracy_claim_breakdown_v1_reports_claim_breakdown_post_response.py delete mode 100644 src/types/reports/accuracy_claim_citations_v1_reports_claim_citations_post_params.py delete mode 100644 src/types/reports/accuracy_claim_citations_v1_reports_claim_citations_post_response.py delete mode 100644 src/types/reports/accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_params.py delete mode 100644 src/types/reports/accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_response.py delete mode 100644 src/types/reports/accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_params.py delete mode 100644 src/types/reports/accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_response.py delete mode 100644 src/types/reports/accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_params.py delete mode 100644 src/types/reports/accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_response.py delete mode 100644 src/types/reports/accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_params.py delete mode 100644 src/types/reports/accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_response.py delete mode 100644 src/types/reports/accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_params.py delete mode 100644 src/types/reports/accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_response.py delete mode 100644 src/types/reports/accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_params.py delete mode 100644 src/types/reports/accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_response.py delete mode 100644 src/types/reports/accuracy_overview_query.py delete mode 100644 src/types/reports/accuracy_overview_v1_reports_overview_post_params.py delete mode 100644 src/types/reports/accuracy_overview_v1_reports_overview_post_response.py delete mode 100644 src/types/reports/accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_params.py delete mode 100644 src/types/reports/accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_response.py delete mode 100644 src/types/reports/accuracy_topic_ids_query.py delete mode 100644 src/types/reports/accuracy_topic_ids_v1_reports_topic_ids_post_params.py delete mode 100644 src/types/reports/accuracy_topic_ids_v1_reports_topic_ids_post_response.py delete mode 100644 src/types/reports/bot_create_report_v2_v2_reports_post_params.py delete mode 100644 src/types/reports/bots_report_query.py delete mode 100644 src/types/reports/bots_report_query_v2.py delete mode 100644 src/types/reports/brand_name_filter.py delete mode 100644 src/types/reports/citation_query_v1_reports_post_params.py delete mode 100644 src/types/reports/citation_query_v1_reports_post_response.py delete mode 100644 src/types/reports/citation_query_v2_v2_reports_post_params.py delete mode 100644 src/types/reports/citation_query_v2_v2_reports_post_response.py delete mode 100644 src/types/reports/citation_stream_v1_reports_stream_post_params.py delete mode 100644 src/types/reports/citation_stream_v1_reports_stream_post_response.py delete mode 100644 src/types/reports/citation_stream_v2_v2_reports_stream_post_params.py delete mode 100644 src/types/reports/citation_stream_v2_v2_reports_stream_post_response.py delete mode 100644 src/types/reports/citations_query.py delete mode 100644 src/types/reports/citations_v2_query.py delete mode 100644 src/types/reports/claim_breakdown_query.py delete mode 100644 src/types/reports/claim_citations_query.py delete mode 100644 src/types/reports/cluster_example_runs_query.py delete mode 100644 src/types/reports/cluster_verification_pairs_query.py delete mode 100644 src/types/reports/fact_check_setup_status_query.py delete mode 100644 src/types/reports/inaccuracy_drivers_query.py delete mode 100644 src/types/reports/inaccurate_clusters_query.py delete mode 100644 src/types/reports/inaccurate_themes_query.py delete mode 100644 src/types/reports/merchant_name_filter.py delete mode 100644 src/types/reports/product_name_filter.py delete mode 100644 src/types/reports/query_fanout_stream_v2_v2_reports_stream_post_params.py delete mode 100644 src/types/reports/query_fanout_stream_v2_v2_reports_stream_post_response.py delete mode 100644 src/types/reports/query_fanout_v1_reports_post_params.py delete mode 100644 src/types/reports/query_fanout_v2_v2_reports_post_params.py delete mode 100644 src/types/reports/query_fanout_v2_v2_reports_post_response.py delete mode 100644 src/types/reports/query_fanouts_query.py delete mode 100644 src/types/reports/query_fanouts_v2_query.py delete mode 100644 src/types/reports/referral_create_report_v1_v1_reports_post_params.py delete mode 100644 src/types/reports/referral_create_report_v2_v2_reports_post_params.py delete mode 100644 src/types/reports/referrals_query.py delete mode 100644 src/types/reports/referrals_query_v2.py delete mode 100644 src/types/reports/sentiment_query.py delete mode 100644 src/types/reports/sentiment_query_v1_reports_post_params.py delete mode 100644 src/types/reports/sentiment_query_v2_v2_reports_post_params.py delete mode 100644 src/types/reports/sentiment_query_v2_v2_reports_post_response.py delete mode 100644 src/types/reports/sentiment_stream_v1_reports_stream_post_params.py delete mode 100644 src/types/reports/sentiment_stream_v1_reports_stream_post_response.py delete mode 100644 src/types/reports/sentiment_stream_v2_v2_reports_stream_post_params.py delete mode 100644 src/types/reports/sentiment_stream_v2_v2_reports_stream_post_response.py delete mode 100644 src/types/reports/sentiment_v2_query.py delete mode 100644 src/types/reports/shopping_all_items_with_merchants_params.py delete mode 100644 src/types/reports/shopping_all_items_with_merchants_query.py delete mode 100644 src/types/reports/shopping_executions_params.py delete mode 100644 src/types/reports/shopping_executions_query.py delete mode 100644 src/types/reports/shopping_item_visibility_params.py delete mode 100644 src/types/reports/shopping_item_visibility_query.py delete mode 100644 src/types/reports/shopping_merchant_by_items_params.py delete mode 100644 src/types/reports/shopping_merchant_by_items_query.py delete mode 100644 src/types/reports/shopping_merchant_distribution_params.py delete mode 100644 src/types/reports/shopping_merchant_distribution_query.py delete mode 100644 src/types/reports/shopping_merchant_share_params.py delete mode 100644 src/types/reports/shopping_merchant_share_query.py delete mode 100644 src/types/reports/shopping_merchant_visibility_by_brand_params.py delete mode 100644 src/types/reports/shopping_merchant_visibility_by_brand_query.py delete mode 100644 src/types/reports/shopping_product_merchant_urls_params.py delete mode 100644 src/types/reports/shopping_product_merchant_urls_query.py delete mode 100644 src/types/reports/shopping_product_merchant_urls_response.py delete mode 100644 src/types/reports/shopping_trigger_rate_params.py delete mode 100644 src/types/reports/shopping_trigger_rate_query.py delete mode 100644 src/types/reports/shopping_visibility_params.py delete mode 100644 src/types/reports/shopping_visibility_query.py delete mode 100644 src/types/reports/stream_citations_query.py delete mode 100644 src/types/reports/stream_sentiment_query.py delete mode 100644 src/types/reports/stream_visibility_query.py delete mode 100644 src/types/reports/stream_web_search_results_query.py delete mode 100644 src/types/reports/top_inaccurate_claims_query.py delete mode 100644 src/types/reports/visibility_query.py delete mode 100644 src/types/reports/visibility_query_v1_reports_post_params.py delete mode 100644 src/types/reports/visibility_query_v2_v2_reports_post_params.py delete mode 100644 src/types/reports/visibility_query_v2_v2_reports_post_response.py delete mode 100644 src/types/reports/visibility_stream_v1_reports_stream_post_params.py delete mode 100644 src/types/reports/visibility_stream_v1_reports_stream_post_response.py delete mode 100644 src/types/reports/visibility_stream_v2_v2_reports_stream_post_params.py delete mode 100644 src/types/reports/visibility_stream_v2_v2_reports_stream_post_response.py delete mode 100644 src/types/reports/visibility_v2_query.py delete mode 100644 src/types/reports/web_search_result_query_params.py delete mode 100644 src/types/reports/web_search_result_stream_params.py delete mode 100644 src/types/reports/web_search_result_stream_response.py delete mode 100644 src/types/reports/web_search_results_query.py delete mode 100644 src/types/root_domain_filter.py delete mode 100644 src/types/search_knowledge_base_request.py delete mode 100644 src/types/sentiment_v2_report_query.py delete mode 100644 src/types/tag_name_filter.py delete mode 100644 src/types/topic_name_filter.py delete mode 100644 src/types/update_agent_request.py delete mode 100644 src/types/update_prompt_status_body.py delete mode 100644 src/types/url_filter.py diff --git a/.claude/skills/profound-python-sdk/SKILL.md b/.claude/skills/profound-python-sdk/SKILL.md new file mode 100644 index 00000000..1dc4f547 --- /dev/null +++ b/.claude/skills/profound-python-sdk/SKILL.md @@ -0,0 +1,91 @@ +--- +name: profound-python-sdk +description: "Python SDK for profound API. Use when writing Python code that calls profound API with the profound package: installing it, constructing and authenticating the client, and calling API operations." +--- + +# profound Python SDK + +Generated Python client for profound API, published as `profound`. Use the generated client instead of hand-writing HTTP requests. + +## Install + +```sh +pip install profound +``` + +## Client setup and authentication + +```python +import os + +from profound import Profound + +client = Profound( + api_key=os.environ.get("PROFOUND_API_KEY"), +) +``` + +Provide credentials using the options below. Environment variables are read automatically when the target runtime supports them: + +- `api_key` (env: `PROFOUND_API_KEY`) — Credential for the APIKeyHeader scheme. +- `access_token` (env: `PROFOUND_ACCESS_TOKEN`) — Credential for the BearerAuth scheme. + +## Calling operations + +```python +import os + +from profound import Profound + +client = Profound( + api_key=os.environ.get("PROFOUND_API_KEY"), +) + +organization = client.organizations.regions() + +print(organization) +``` + +Method names, parameter shapes, and response types are generated from the API description — do not guess them. Look up the exact call signature in [api.md](../../../api.md) before writing a call. + +## Streaming + +Streaming endpoints return an iterator that yields results as the server emits them. + +```python +stream = client.reports.stream_citations( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", +) + +for event in stream: + print(event) +``` + +## Error handling + +Non-success responses throw generated API errors. Error objects expose status, headers, response body, and request metadata where the target runtime supports it. + +```python +from profound import APIStatusError + +try: + organization = client.organizations.regions() +except APIStatusError as err: + print(err.status_code, err.message) + raise +``` + +## Requirements + +- Python 3.8 or newer + +## Reference files + +- [README.md](../../../README.md) — full feature tour: client options, retries and timeouts, logging. +- [api.md](../../../api.md) — complete catalogue of every operation with request and response types. diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml new file mode 100644 index 00000000..7225231b --- /dev/null +++ b/.github/workflows/release-please.yml @@ -0,0 +1,93 @@ +name: Release Please + +on: + # Fires when a human merges the platform-managed release PR into main + # (the PR's base, so its diff shows the full pending release). Regenerations and + # custom-code pushes only touch scalar-next and never run this workflow. + push: + branches: + - main + # Manual fallback only; nothing in the automated chain depends on dispatch. + workflow_dispatch: + +permissions: + contents: write + # Required to update the merged release PR's autorelease labels after tagging. + pull-requests: write + +jobs: + release-please: + runs-on: ubuntu-latest + outputs: + release_created: ${{ steps.release.outputs.release_created }} + # Consumed by the publish job's checkout: without this mapping the checkout ref would be + # empty and the publish would build the triggering branch head instead of the released + # tag's exact commit. + tag_name: ${{ steps.release.outputs.tag_name }} + steps: + - uses: googleapis/release-please-action@45996ed1f6d02564a971a2fa1b5860e934307cf7 # v5.0.0 + id: release + with: + target-branch: main + config-file: release-please-config.json + manifest-file: .release-please-manifest.json + # Release PRs are opened and updated by the Scalar platform with its own + # credential (so their CI runs without manual approval); this workflow only + # cuts the tag + GitHub Release once a release PR is merged. + skip-github-pull-request: true + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + if: ${{ steps.release.outputs.release_created == 'true' }} + with: + fetch-depth: 0 + # Merging the release PR into main is itself the promotion, but the + # version bump and changelog must also land back on scalar-next, or the next + # release PR would propose this release again. A real merge (never a plain + # commit push) so a squash- or rebase-merged release PR syncs just as well; the + # non-conventional message keeps the sync commit out of future changelogs. Plain + # (non-force) push on purpose: losing a race against a concurrent regeneration + # push fails loudly here, and the platform's next sync re-converges. + - name: Sync release back to scalar-next + if: ${{ steps.release.outputs.release_created == 'true' }} + run: | + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git fetch origin scalar-next + git checkout -B scalar-next origin/scalar-next + git merge --no-edit -m "Sync release ${{ steps.release.outputs.tag_name }} back to scalar-next" "${{ steps.release.outputs.sha }}" + git push origin scalar-next + publish: + needs: release-please + # `!cancelled()` keeps publishing even when the back-sync to the integration branch + # failed: a raced integration branch must not block the release from reaching its + # registry. + if: ${{ !cancelled() && needs.release-please.outputs.release_created == 'true' }} + runs-on: ubuntu-latest + # Job-level permissions replace the workflow's release-cutting grants with the publish + # floor. OIDC trusted publishing verifies this run's claims, which name this workflow + # file — register release-please.yml as the trusted publisher on the registry. + permissions: + contents: read + id-token: write + packages: write + env: + VERSIONING_POLICY: manual + steps: + # Publishing runs inline — a top-level job of this same run — rather than dispatching + # sdk-release.yml: workflow_dispatch resolves the target workflow on the repository's + # default branch only, so a dispatch would 404 whenever the release line is any other + # branch, while OIDC trusted publishing accepts this job because it stays top-level + # (never a reusable-workflow call). The release-please job cut the tag earlier in this + # run; checking it out publishes exactly the released commit, not the branch head that + # triggered the workflow. + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + with: + ref: ${{ needs.release-please.outputs.tag_name }} + - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + with: + python-version: "3.11" + - run: python -m pip install --upgrade build + - run: python -m build + - name: Publish to PyPI + uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0 + with: + skip-existing: true diff --git a/.github/workflows/release-title-edit.yml b/.github/workflows/release-title-edit.yml new file mode 100644 index 00000000..d1827b17 --- /dev/null +++ b/.github/workflows/release-title-edit.yml @@ -0,0 +1,143 @@ +name: Release PR Version + +on: + # `edited` is not one of the default pull_request types, but it is the point of this + # workflow: retitling the release PR is how a maintainer picks an exact version. The + # other types keep the consistency check attached to the PR as it evolves. + pull_request: + types: [opened, reopened, edited, synchronize] + +# Read-only by default; only the job that pushes the Release-As commit widens this. +permissions: + contents: read + +jobs: + version-consistency: + # Also the check name the release PR's footer tells maintainers to wait for. + name: Release PR version + # A release-shaped title against the release branch is the whole test here, with no clause + # on who opened the pull request or what branch it is rendered onto. This job only reads, + # and a pull request claiming to be a release is worth checking against the committed + # version whoever opened it. Every other pull request skips this job, which GitHub reports + # as neutral. + # + # Loose on purpose: the prefix, not the full semver pattern the script matches. A version + # typo'd into the title still reaches the script and fails there, rather than falling out + # of the guard and leaving no check at all — a missing check is not a failing one, and this + # is the check the release PR's footer tells maintainers to wait for before merging. + # + # It is also what keeps the workflow from failing silently if the platform ever opens + # release PRs from a different account: the bridge below stops firing, but this check still + # runs, the retitled version and the committed one disagree, and it turns red. The merge is + # blocked loudly instead of releasing the old version. + if: >- + ${{ github.event.pull_request.base.ref == 'main' + && startsWith(github.event.pull_request.title, 'release: ') }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + with: + # The version committed on the PR head is what merging would actually release. + ref: ${{ github.event.pull_request.head.sha }} + # Fails while the title version and the committed version disagree — the window between + # a maintainer's retitle and the platform re-rendering the PR from it. Without this a + # merge in that window would tag a release whose own files self-report the old version, + # and a title release-please cannot parse would silently cut no release at all. + - name: Compare the title version with the committed version + env: + # The title is human input, so it is bound through the environment (never + # interpolated into the script) and matched against a strict semver pattern + # before it is read. + PR_TITLE: ${{ github.event.pull_request.title }} + run: | + pattern='^release: ((0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-[0-9A-Za-z.-]+)?(\+[0-9A-Za-z.-]+)?)$' + if [[ ! "$PR_TITLE" =~ $pattern ]]; then + echo "::error::Release PR title must be \"release: X.Y.Z\" with a full semver version, got: $PR_TITLE" + exit 1 + fi + title_version="${BASH_REMATCH[1]}" + manifest_version="$(jq -r '.["."]' .release-please-manifest.json)" + if [[ "$title_version" != "$manifest_version" ]]; then + echo "::error::Release PR title says $title_version but the pull request is versioned $manifest_version. Wait for the release PR to be re-rendered at $title_version before merging." + exit 1 + fi + echo "Release PR title and committed version agree on $title_version." + + apply-title-version: + name: Apply edited release version + # A human retitle of the open release PR is bridged into the canonical explicit-version + # mechanism (a Release-As commit on scalar-next, which the platform re-renders the + # release PR from). `changes.title` is only set when the title itself changed, and bot + # senders are ignored so the platform's own retitles cannot bounce back into another + # commit. + # + # Both signals are required here, unlike the read-only check above, and each covers what the + # other cannot. The author, because this job pushes with `contents: write` and a title is + # free text — anyone able to open a pull request against main could otherwise + # name a version and have it committed to scalar-next. `user.login` is set by GitHub when + # the pull request is opened and cannot be forged by whoever edits the title afterwards. + # The title, because those accounts open pull requests other than release PRs, and retitling + # one of those must not push a release. + # + # One login per platform deployment, since a repo generated by staging carries staging's + # app. Parenthesised because the group is ANDed with the title clause below: without the + # parens that `&&` would bind to the last login alone, letting the other accounts push a + # release off any title. Listed rather than matched on the shared `scalar-docs` stem — a + # prefix test would also admit any future `scalar-docs-*[bot]`, including someone else's. + if: >- + ${{ github.event.action == 'edited' + && github.event.changes.title != null + && github.event.sender.type != 'Bot' + && github.event.pull_request.state == 'open' + && github.event.pull_request.base.ref == 'main' + && (github.event.pull_request.user.login == 'scalar-docs[bot]' + || github.event.pull_request.user.login == 'scalar-docs-staging[bot]' + || github.event.pull_request.user.login == 'scalar-docs-development[bot]') + && startsWith(github.event.pull_request.title, 'release: ') }} + # One bridge run at a time per pull request, newest retitle wins. Two retitles in quick + # succession (a version typo corrected seconds later) would otherwise start two runs that + # both read the version committed on the PR head, both get past the no-op guard, and both + # push — and since each fetches scalar-next immediately before committing, the second + # push fast-forwards instead of failing. release-please honours the newest Release-As + # footer, so the release would land on whichever run happened to push last, not on the + # title the maintainer actually left behind. + concurrency: + group: release-title-edit-${{ github.event.pull_request.number }} + cancel-in-progress: true + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + with: + # The PR head, so the version the pull request currently carries can be read before + # deciding whether anything needs to change. + ref: ${{ github.event.pull_request.head.sha }} + - name: Push a Release-As commit for the edited version + env: + PR_TITLE: ${{ github.event.pull_request.title }} + run: | + set -euo pipefail + pattern='^release: ((0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-[0-9A-Za-z.-]+)?(\+[0-9A-Za-z.-]+)?)$' + if [[ ! "$PR_TITLE" =~ $pattern ]]; then + echo "::error::Release PR title must be \"release: X.Y.Z\" with a full semver version, got: $PR_TITLE" + exit 1 + fi + # Only ever a validated semver from here on, so it is safe in a commit message. + version="${BASH_REMATCH[1]}" + manifest_version="$(jq -r '.["."]' .release-please-manifest.json)" + # The re-rendered PR is retitled to the version it now carries; stopping here keeps + # that from producing an endless chain of Release-As commits. + if [[ "$version" == "$manifest_version" ]]; then + echo "This release PR already carries $version; nothing to do." + exit 0 + fi + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git fetch origin scalar-next + git checkout -B scalar-next origin/scalar-next + git commit --allow-empty -m "chore: release $version" -m "Release-As: $version" + # Plain (non-force) push: losing a race against a regeneration push fails loudly + # rather than discarding it, and the retitle can simply be repeated. + git push origin scalar-next + echo "Pushed Release-As: $version to scalar-next. The release PR will be re-rendered at that version." diff --git a/.github/workflows/sdk-ci.yml b/.github/workflows/sdk-ci.yml index 05948505..52fc8dd1 100644 --- a/.github/workflows/sdk-ci.yml +++ b/.github/workflows/sdk-ci.yml @@ -14,3 +14,8 @@ jobs: python-version: "3.11" - run: python -m pip install --upgrade build - run: python -m build + # Verification only, never auto-fix: the SDK is generated formatted, so a diff here means + # either hand-edited custom code or a regenerate that was not committed. ruff is pinned to + # the release that produced these bytes, since a formatter minor can change them. + - run: python -m pip install "ruff==0.16.1" + - run: ruff format --check . diff --git a/.github/workflows/sdk-release.yml b/.github/workflows/sdk-release.yml index 69e62d9e..a49402e4 100644 --- a/.github/workflows/sdk-release.yml +++ b/.github/workflows/sdk-release.yml @@ -1,8 +1,14 @@ name: Python SDK Release on: - release: - types: [published] + # Manual re-publish only: the automated publish for each release runs as the `publish` job + # inside release-please.yml, in the same run that cuts the tag (dispatching a workflow here + # instead would resolve it on the repository's default branch only, which breaks releasing + # from any other release line). Dispatch this workflow at an existing release tag to re-run + # a failed or skipped publish. A dispatched run is top-level, so OIDC trusted-publisher + # claims name this file; register it as an additional trusted publisher only when manual + # re-publishes are used. Never add a workflow_call trigger here — registries reject + # publishes from called (reusable) workflows. workflow_dispatch: permissions: diff --git a/.gitignore b/.gitignore index 00549543..e9519620 100644 --- a/.gitignore +++ b/.gitignore @@ -3,8 +3,8 @@ __pycache__/ *.py[cod] *.egg-info/ .venv/ -dist/ -build/ +/dist/ +/build/ .mypy_cache/ .pytest_cache/ .ruff_cache/ diff --git a/LICENSE b/LICENSE index 261eeb9e..bc737b0e 100644 --- a/LICENSE +++ b/LICENSE @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [yyyy] [name of copyright owner] + Copyright 2026 profound Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/README.md b/README.md index d480134b..0164dcde 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ # profound -Generated Python SDK for profound API. +This library provides convenient access to the profound REST API from Python. + +The full API of this library can be found in [api.md](./api.md).
@@ -37,12 +39,11 @@ import os from profound import Profound client = Profound( - api_key_header=os.environ.get("API_KEY_HEADER"), + api_key=os.environ.get("PROFOUND_API_KEY"), ) -organization = client.organization.list_category_regions_v1_org_categories_category_regions_get( - category_id="categoryId", -) +organization = client.organizations.regions() + print(organization) ``` @@ -61,11 +62,11 @@ import asyncio from profound import AsyncProfound + async def main() -> None: client = AsyncProfound() - organization = await client.organization.list_category_regions_v1_org_categories_category_regions_get( - category_id="categoryId", - ) + organization = await client.organizations.regions() + asyncio.run(main()) ``` @@ -77,11 +78,16 @@ asyncio.run(main()) Streaming endpoints return an async iterator that yields results as the server emits them. ```python -stream = client.prompts.answers.stream_v2_v2_prompts_stream_post( - category_id="", - start_date="", - end_date="", +stream = client.reports.stream_citations( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", ) + for event in stream: print(event) ``` @@ -94,8 +100,8 @@ Pass credentials to the generated client constructor. Environment variables are | Option | Type | Default | Description | | --- | --- | --- | --- | -| `api_key_header` | `string \| provider` | - | Credential for the APIKeyHeader scheme. Defaults to API_KEY_HEADER. | -| `bearer_auth` | `string \| provider` | - | Credential for the BearerAuth scheme. Defaults to BEARER_AUTH. | +| `api_key` | `string \| provider` | - | Credential for the APIKeyHeader scheme. Defaults to PROFOUND_API_KEY. | +| `access_token` | `string \| provider` | - | Credential for the BearerAuth scheme. Defaults to PROFOUND_ACCESS_TOKEN. | Declared schemes: @@ -112,9 +118,7 @@ Non-success responses throw generated API errors. Error objects expose status, h from profound import APIStatusError try: - organization = client.organization.list_category_regions_v1_org_categories_category_regions_get( - category_id="categoryId", - ) + organization = client.organizations.regions() except APIStatusError as err: print(err.status_code, err.message) raise @@ -139,8 +143,8 @@ client = Profound( | Option | Type | Default | Description | | --- | --- | --- | --- | -| `api_key_header` | `str \| None` | `os.environ.get("API_KEY_HEADER")` | Credential for the APIKeyHeader scheme. | -| `bearer_auth` | `str \| None` | `os.environ.get("BEARER_AUTH")` | Credential for the BearerAuth scheme. | +| `api_key` | `str \| None` | `os.environ.get("PROFOUND_API_KEY")` | Credential for the APIKeyHeader scheme. | +| `access_token` | `str \| None` | `os.environ.get("PROFOUND_ACCESS_TOKEN")` | Credential for the BearerAuth scheme. | | `base_url` | `str \| httpx.URL \| None` | - | Override the default API base URL. | | `timeout` | `float \| Timeout \| None` | `60.0` | Maximum time in seconds to wait for a response before aborting a request. | | `max_retries` | `int` | `2` | Number of retries for temporary failures. | @@ -174,11 +178,3 @@ Generated clients support request timeouts and retry temporary failures such as - Python 3.8 or newer Powered by Scalar. - - -## Contributions - -This SDK is generated programmatically. Manual edits to generated files will be -overwritten on the next build. - -### SDK created by [Scalar](https://www.scalar.com/?utm_source=external-api-2-python&utm_campaign=sdk) diff --git a/SKILL.md b/SKILL.md new file mode 100644 index 00000000..f626014f --- /dev/null +++ b/SKILL.md @@ -0,0 +1,91 @@ +--- +name: profound-python-sdk +description: "Python SDK for profound API. Use when writing Python code that calls profound API with the profound package: installing it, constructing and authenticating the client, and calling API operations." +--- + +# profound Python SDK + +Generated Python client for profound API, published as `profound`. Use the generated client instead of hand-writing HTTP requests. + +## Install + +```sh +pip install profound +``` + +## Client setup and authentication + +```python +import os + +from profound import Profound + +client = Profound( + api_key=os.environ.get("PROFOUND_API_KEY"), +) +``` + +Provide credentials using the options below. Environment variables are read automatically when the target runtime supports them: + +- `api_key` (env: `PROFOUND_API_KEY`) — Credential for the APIKeyHeader scheme. +- `access_token` (env: `PROFOUND_ACCESS_TOKEN`) — Credential for the BearerAuth scheme. + +## Calling operations + +```python +import os + +from profound import Profound + +client = Profound( + api_key=os.environ.get("PROFOUND_API_KEY"), +) + +organization = client.organizations.regions() + +print(organization) +``` + +Method names, parameter shapes, and response types are generated from the API description — do not guess them. Look up the exact call signature in [api.md](./api.md) before writing a call. + +## Streaming + +Streaming endpoints return an iterator that yields results as the server emits them. + +```python +stream = client.reports.stream_citations( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", +) + +for event in stream: + print(event) +``` + +## Error handling + +Non-success responses throw generated API errors. Error objects expose status, headers, response body, and request metadata where the target runtime supports it. + +```python +from profound import APIStatusError + +try: + organization = client.organizations.regions() +except APIStatusError as err: + print(err.status_code, err.message) + raise +``` + +## Requirements + +- Python 3.8 or newer + +## Reference files + +- [README.md](./README.md) — full feature tour: client options, retries and timeouts, logging. +- [api.md](./api.md) — complete catalogue of every operation with request and response types. diff --git a/VERSIONING.md b/VERSIONING.md index 8f16c2c8..662f2b64 100644 --- a/VERSIONING.md +++ b/VERSIONING.md @@ -5,3 +5,82 @@ This SDK is configured with the `manual` versioning policy. - `manual`: package versions are set explicitly before release. - `semver`: releases should follow semantic versioning based on API and SDK surface changes. - `calendar`: releases should use a calendar-derived version chosen by the release workflow or maintainer. + +## Branches and releases + +This repository follows a three-branch flow, managed by the Scalar platform together +with the generated workflows (which need only the default `GITHUB_TOKEN` — no extra +token required): + +- **`scalar-generated`** — pristine generator output. Pushed by the Scalar platform; do + not commit here. +- **`scalar-next`** — generated output merged with this repository's custom code. Commit + your customizations here (directly or via PRs). The Scalar platform merges each + regeneration into this branch and keeps the release PR up to date; merge conflicts + arrive as a PR from `scalar-merge-conflict` for you to resolve. +- **Default branch** — seeded from the first generated snapshot, then only ever receives + released states, each one the merge of a release PR. + +Release PRs are opened by the Scalar platform from `scalar-next` against the default +branch — so the PR diff shows the full pending release — and are versioned from +[Conventional Commits](https://www.conventionalcommits.org). Merging a release PR tags the +release, publishes it, and syncs the version bump and changelog back to `scalar-next`. +Pre-1.0, breaking changes bump the minor version. + +### Choosing an exact version + +To release a specific version — `1.0.0`, a hotfix number, anything the commit history would +not have picked — **edit the release PR title** to the version you want: + +```text +release: 1.0.0 +``` + +The `Release PR version` check turns red as soon as you save, because the version in the +title no longer matches the version committed in the PR. The Scalar platform then re-renders +the release PR at your version (changelog, manifest, and every version-bearing file), the +title comes back as `release: 1.0.0`, and the check turns green. **Wait for it to be green +before merging** — merging in between would tag a release whose own files still carry the +old version. + +The git-native equivalent, if you would rather not touch the PR: push an empty commit with a +`Release-As` footer to `scalar-next`. This is exactly what the title edit does for you. + +```sh +git commit --allow-empty -m "chore: release 1.0.0" -m "Release-As: 1.0.0" +``` + +### When a release PR does not merge cleanly + +Nothing is ever force-pushed automatically: a release PR that conflicts with the default +branch simply cannot be merged, and GitHub disables its merge button. The two causes have +different fixes: + +- **The default branch received direct commits** (for example a hotfix) that are not in + `scalar-next`. Land those commits on `scalar-next` (merge the default branch into it, or + cherry-pick), and the refreshed release PR merges cleanly again. Do not force-push — + that would discard the direct commits. +- **The repository was adopted with pre-existing content**, so the default branch shares + no history with `scalar-next`. The Scalar platform adds a checkbox to the release PR + description offering to replace the default branch with this release; checking it + authorizes the platform to force-push the released state over the old content. This is + destructive for anything on the default branch that never reached `scalar-next`, which + is why it requires that explicit opt-in. + +### Repository prerequisites + +- Branch protection on `scalar-next` and the default branch must allow the Scalar + platform and the `github-actions` bot to push (or be left unprotected); the default + branch only ever advances by merging release PRs, and `scalar-next` receives each + released state back from the release workflow. +- No Actions settings changes are required: the generated workflows declare their own + permissions and never create pull requests. +- If this package publishes through OIDC trusted publishing (for example PyPI or npm), + register the trusted publisher on the registry against the **`release-please.yml`** + workflow filename. Merging a release PR publishes from the `publish` job inside that + same workflow run (checked out at the released tag), so the automated path's OIDC + claims name that file — and, because nothing is dispatched, releasing works from any + release branch, not only the repository default branch. `sdk-release.yml` exists for + manual re-publishes at an existing tag; register it as an additional trusted publisher + only if you use it. If the publish job is configured with a deployment environment, + include that environment in the registration too. diff --git a/api.md b/api.md index e2b68e76..6bdd3468 100644 --- a/api.md +++ b/api.md @@ -4,43 +4,40 @@ Complete reference of every operation, grouped by resource. See [the README](./R ## Contents -- [`Organization`](#organization) - - [Get Category Regions](#get-category-regions) +- [`Organizations`](#organizations) + - [Get Regions](#get-regions) + - [Get Models](#get-models) + - [Get Domains](#get-domains) + - [Get Assets](#get-assets) + - [Get Personas](#get-personas) + - [List organizations](#list-organizations) + - [`Organizations Categories`](#organizations-categories) + - [Get Categories](#get-categories) + - [Get Category Topics](#get-category-topics) + - [Get Category Tags](#get-category-tags) + - [List prompts](#list-prompts) + - [Get Category Assets](#get-category-assets) + - [Get Category Personas](#get-category-personas) + - [Create prompts](#create-prompts) + - [Update prompts](#update-prompts) + - [Update prompt status](#update-prompt-status) - [`Prompts`](#prompts) - - [`Prompts Answers`](#prompts-answers) - - [Get Answers](#get-answers) - - [Query Answers V2](#query-answers-v2) - - [Stream Answers V2](#stream-answers-v2) + - [Get Answers](#get-answers) - [`Reports`](#reports) - - [Query Sentiment V2](#query-sentiment-v2) - - [`Reports Citations`](#reports-citations) - - [Query Citations](#query-citations) - - [Stream Citations](#stream-citations) - - [Query Citations V2](#query-citations-v2) - - [Stream Citations V2](#stream-citations-v2) - - [`Reports Visibility`](#reports-visibility) - - [Query Visibility](#query-visibility) - - [Stream Visibility](#stream-visibility) - - [Query Visibility V2](#query-visibility-v2) - - [Stream Visibility V2](#stream-visibility-v2) - - [`Reports Sentiment`](#reports-sentiment) - - [Query Sentiment](#query-sentiment) - - [Stream Sentiment](#stream-sentiment) - - [Query Sentiment V2](#query-sentiment-v2-1) - - [Stream Sentiment V2](#stream-sentiment-v2) + - [Query Citations](#query-citations) + - [Query Visibility](#query-visibility) + - [Query Sentiment](#query-sentiment) + - [Get Referrals Report V1](#get-referrals-report-v1) + - [Get Bots Report V1](#get-bots-report-v1) + - [Get Referrals Report V2](#get-referrals-report-v2) + - [Get Bots Report V2](#get-bots-report-v2) + - [Query Fanouts](#query-fanouts) + - [Stream Citations](#stream-citations) + - [Stream Visibility](#stream-visibility) + - [Stream Sentiment](#stream-sentiment) - [`Reports WebSearchResults`](#reports-websearchresults) - [Query Web Search Results](#query-web-search-results) - [Stream Web Search Results](#stream-web-search-results) - - [`Reports Referrals`](#reports-referrals) - - [Get Referrals Report V1](#get-referrals-report-v1) - - [Get Referrals Report V2](#get-referrals-report-v2) - - [`Reports Bots`](#reports-bots) - - [Get Bots Report V1](#get-bots-report-v1) - - [Get Bots Report V2](#get-bots-report-v2) - - [`Reports QueryFanouts`](#reports-queryfanouts) - - [Query Fanouts](#query-fanouts) - - [Query Fanouts V2](#query-fanouts-v2) - - [Stream Query Fanouts V2](#stream-query-fanouts-v2) - [`Reports Shopping`](#reports-shopping) - [Shopping Visibility](#shopping-visibility) - [Shopping Item Visibility](#shopping-item-visibility) @@ -52,24 +49,16 @@ Complete reference of every operation, grouped by resource. See [the README](./R - [Shopping Merchant Share](#shopping-merchant-share) - [Shopping Product Merchant Urls](#shopping-product-merchant-urls) - [Shopping Executions](#shopping-executions) - - [`Reports Accuracy`](#reports-accuracy) - - [Accuracy Overview](#accuracy-overview) - - [Accuracy Breakdown](#accuracy-breakdown) - - [Accuracy Citation Analysis](#accuracy-citation-analysis) - - [Accuracy Topic Ids](#accuracy-topic-ids) - - [Accuracy Inaccurate Themes](#accuracy-inaccurate-themes) - - [Accuracy Inaccurate Clusters](#accuracy-inaccurate-clusters) - - [Accuracy Inaccuracy Drivers](#accuracy-inaccuracy-drivers) - - [Accuracy Top Inaccurate Claims](#accuracy-top-inaccurate-claims) - - [Accuracy Claim Breakdown](#accuracy-claim-breakdown) - - [Accuracy Claim Citations](#accuracy-claim-citations) - - [Accuracy Cluster Example Runs](#accuracy-cluster-example-runs) - - [Accuracy Cluster Verification Pairs](#accuracy-cluster-verification-pairs) - - [Accuracy Factcheck Setup Status](#accuracy-factcheck-setup-status) - [`Content`](#content) - [`Content Optimization`](#content-optimization) - [Optimization List](#optimization-list) - [Optimization Analysis](#optimization-analysis) +- [`Agents`](#agents) + - [List agents](#list-agents) + - [Get an agent](#get-an-agent) + - [`Agents Runs`](#agents-runs) + - [Run an agent](#run-an-agent) + - [Get an agent run](#get-an-agent-run) - [`KnowledgeBases`](#knowledgebases) - [List Knowledge Bases](#list-knowledge-bases) - [Search Knowledge Base](#search-knowledge-base) @@ -80,36 +69,6 @@ Complete reference of every operation, grouped by resource. See [the README](./R - [`KnowledgeBases Folders`](#knowledgebases-folders) - [Add Folder](#add-folder) - [Delete Folder](#delete-folder) -- [`Agents`](#agents) - - [List agents](#list-agents) - - [Create an agent](#create-an-agent) - - [Publish an agent](#publish-an-agent) - - [Get an agent](#get-an-agent) - - [Update an agent](#update-an-agent) - - [Get an agent's graph](#get-an-agents-graph) - - [`Agents NodeTypes`](#agents-nodetypes) - - [List node types](#list-node-types) - - [Get a node type schema](#get-a-node-type-schema) - - [`Agents Runs`](#agents-runs) - - [Run an agent](#run-an-agent) - - [Get an agent run](#get-an-agent-run) -- [`Organizations`](#organizations) - - [List organizations](#list-organizations) - - [Get Regions](#get-regions) - - [Get Models](#get-models) - - [Get Domains](#get-domains) - - [Get Assets](#get-assets) - - [Get Personas](#get-personas) - - [`Organizations Categories`](#organizations-categories) - - [Get Categories](#get-categories) - - [Get Category Topics](#get-category-topics) - - [Get Category Tags](#get-category-tags) - - [List prompts](#list-prompts) - - [Create prompts](#create-prompts) - - [Update prompts](#update-prompts) - - [Update prompt status](#update-prompt-status) - - [Get Category Assets](#get-category-assets) - - [Get Category Personas](#get-category-personas) ## Setup @@ -119,433 +78,347 @@ import os from profound import Profound client = Profound( - api_key_header=os.environ.get("API_KEY_HEADER"), + api_key=os.environ.get("PROFOUND_API_KEY"), ) ``` -## `Organization` +## `Organizations` -### Get Category Regions +### Get Regions -Get the regions for a specific category. +Get the organization regions. | Direction | Type | | --- | --- | -| Response | [`OrganizationListCategoryRegionsV1OrgCategoriesCategoryRegionsGetResponse`](./src/types/organization_list_category_regions_v1_org_categories_category_regions_get_response.py) | +| Request | [`OrganizationRegionsParams`](./src/profound/types/organization_regions_params.py) | +| Response | [`OrganizationRegionsResponse`](./src/profound/types/organization_regions_response.py) | ```python -organization = client.organization.list_category_regions_v1_org_categories_category_regions_get( - category_id="categoryId", -) +organization = client.organizations.regions() ``` -## `Prompts` - -### `Prompts Answers` +### Get Models -#### Get Answers +Get the organization models. | Direction | Type | | --- | --- | -| Request | [`AnswerCreateV1PromptsPostParams`](./src/types/prompts/answer_create_v1_prompts_post_params.py) | -| Response | [`AnswerCreateV1PromptsPostResponse`](./src/types/prompts/answer_create_v1_prompts_post_response.py) | +| Response | [`OrganizationModelsResponse`](./src/profound/types/organization_models_response.py) | ```python -answer = client.prompts.answers.create_v1_prompts_post( - category_id="", - start_date="", - end_date="", -) +organization = client.organizations.models() ``` -#### Query Answers V2 - -| Direction | Type | -| --- | --- | -| Request | [`AnswerQueryV2V2PromptsPostParams`](./src/types/prompts/answer_query_v2_v2_prompts_post_params.py) | -| Response | [`AnswerQueryV2V2PromptsPostResponse`](./src/types/prompts/answer_query_v2_v2_prompts_post_response.py) | - -```python -answer = client.prompts.answers.query_v2_v2_prompts_post( - category_id="", - start_date="", - end_date="", -) -``` +### Get Domains -#### Stream Answers V2 +Get the organization domains. | Direction | Type | | --- | --- | -| Request | [`AnswerStreamV2V2PromptsStreamPostParams`](./src/types/prompts/answer_stream_v2_v2_prompts_stream_post_params.py) | -| Response | [`AnswerStreamV2V2PromptsStreamPostResponse`](./src/types/prompts/answer_stream_v2_v2_prompts_stream_post_response.py) | +| Request | [`OrganizationDomainsParams`](./src/profound/types/organization_domains_params.py) | +| Response | [`OrganizationDomainsResponse`](./src/profound/types/organization_domains_response.py) | ```python -stream = client.prompts.answers.stream_v2_v2_prompts_stream_post( - category_id="", - start_date="", - end_date="", -) -for event in stream: - print(event) +organization = client.organizations.domains() ``` -## `Reports` +### Get Assets -### Query Sentiment V2 +Get the organization assets, one row per (asset, organization) pair. + +An asset's category can belong to multiple organizations; one asset row is +emitted per owning org so no association is silently dropped. | Direction | Type | | --- | --- | -| Request | [`ReportQuerySentimentV2V1SentimentV2PostParams`](./src/types/report_query_sentiment_v2_v1_sentiment_v2_post_params.py) | -| Response | [`ReportQuerySentimentV2V1SentimentV2PostResponse`](./src/types/report_query_sentiment_v2_v1_sentiment_v2_post_response.py) | +| Request | [`OrganizationListAssetsParams`](./src/profound/types/organization_list_assets_params.py) | +| Response | [`OrganizationListAssetsResponse`](./src/profound/types/organization_list_assets_response.py) | ```python -report = client.reports.query_sentiment_v2_v1_sentiment_v2_post( - category_id="", - asset_name="", - start_date="", - end_date="", - date_interval="day", - metrics=[], -) +organization = client.organizations.list_assets() ``` -### `Reports Citations` +### Get Personas -#### Query Citations +Get the organization personas, one row per (persona, organization) pair. -Get citations for a given category. +Same (item, org) fan-out as ``get_assets``: a persona's category can be +owned by multiple orgs, and each owning org gets its own row so no +association is silently dropped. | Direction | Type | | --- | --- | -| Request | [`CitationQueryV1ReportsPostParams`](./src/types/reports/citation_query_v1_reports_post_params.py) | -| Response | [`CitationQueryV1ReportsPostResponse`](./src/types/reports/citation_query_v1_reports_post_response.py) | +| Request | [`OrganizationGetPersonasParams`](./src/profound/types/organization_get_personas_params.py) | +| Response | [`OrganizationGetPersonasResponse`](./src/profound/types/organization_get_personas_response.py) | ```python -citation = client.reports.citations.query_v1_reports_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - category_id="", - start_date="", - end_date="", -) +organization = client.organizations.get_personas() ``` -#### Stream Citations +### List organizations + +Return every organization the caller's API key grants access to. Use this to discover organization IDs before calling endpoints that accept an `organization_id` filter. | Direction | Type | | --- | --- | -| Request | [`CitationStreamV1ReportsStreamPostParams`](./src/types/reports/citation_stream_v1_reports_stream_post_params.py) | -| Response | [`CitationStreamV1ReportsStreamPostResponse`](./src/types/reports/citation_stream_v1_reports_stream_post_response.py) | +| Response | [`OrganizationListResponse`](./src/profound/types/organization_list_response.py) | ```python -stream = client.reports.citations.stream_v1_reports_stream_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - category_id="", - start_date="", - end_date="", -) -for event in stream: - print(event) +organization = client.organizations.list() ``` -#### Query Citations V2 +### `Organizations Categories` + +#### Get Categories + +Get the organization categories, one row per (category, organization) pair. | Direction | Type | | --- | --- | -| Request | [`CitationQueryV2V2ReportsPostParams`](./src/types/reports/citation_query_v2_v2_reports_post_params.py) | -| Response | [`CitationQueryV2V2ReportsPostResponse`](./src/types/reports/citation_query_v2_v2_reports_post_response.py) | +| Request | [`CategoryListParams`](./src/profound/types/organizations/category_list_params.py) | +| Response | [`CategoryListResponse`](./src/profound/types/organizations/category_list_response.py) | ```python -citation = client.reports.citations.query_v2_v2_reports_post( - category_id="", - start_date="", - end_date="", - interval="day", - scope="all", -) +category = client.organizations.categories.list() ``` -#### Stream Citations V2 +#### Get Category Topics + +Get the topics for a specific category. | Direction | Type | | --- | --- | -| Request | [`CitationStreamV2V2ReportsStreamPostParams`](./src/types/reports/citation_stream_v2_v2_reports_stream_post_params.py) | -| Response | [`CitationStreamV2V2ReportsStreamPostResponse`](./src/types/reports/citation_stream_v2_v2_reports_stream_post_response.py) | +| Response | [`CategoryTopicsResponse`](./src/profound/types/organizations/category_topics_response.py) | ```python -stream = client.reports.citations.stream_v2_v2_reports_stream_post( - category_id="", - start_date="", - end_date="", - interval="day", - scope="all", +category = client.organizations.categories.topics( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", ) -for event in stream: - print(event) ``` -### `Reports Visibility` - -#### Query Visibility +#### Get Category Tags -Query visibility report. +Get the tags for a specific category. | Direction | Type | | --- | --- | -| Request | [`VisibilityQueryV1ReportsPostParams`](./src/types/reports/visibility_query_v1_reports_post_params.py) | -| Response | [`ReportResponse`](./src/types/report_response.py) | +| Response | [`CategoryTagsResponse`](./src/profound/types/organizations/category_tags_response.py) | ```python -visibility = client.reports.visibility.query_v1_reports_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - category_id="", - start_date="", - end_date="", +category = client.organizations.categories.tags( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", ) ``` -#### Stream Visibility +#### List prompts + +Retrieve prompts in a category with optional filtering by type, topic, tag, region, platform, or persona. Supports cursor-based pagination. | Direction | Type | | --- | --- | -| Request | [`VisibilityStreamV1ReportsStreamPostParams`](./src/types/reports/visibility_stream_v1_reports_stream_post_params.py) | -| Response | [`VisibilityStreamV1ReportsStreamPostResponse`](./src/types/reports/visibility_stream_v1_reports_stream_post_response.py) | +| Request | [`CategoryPromptsParams`](./src/profound/types/organizations/category_prompts_params.py) | +| Response | [`CategoryPromptsResponse`](./src/profound/types/organizations/category_prompts_response.py) | ```python -stream = client.reports.visibility.stream_v1_reports_stream_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - category_id="", - start_date="", - end_date="", +category = client.organizations.categories.prompts( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + limit=10000, + status=["active"], ) -for event in stream: - print(event) ``` -#### Query Visibility V2 +#### Get Category Assets | Direction | Type | | --- | --- | -| Request | [`VisibilityQueryV2V2ReportsPostParams`](./src/types/reports/visibility_query_v2_v2_reports_post_params.py) | -| Response | [`VisibilityQueryV2V2ReportsPostResponse`](./src/types/reports/visibility_query_v2_v2_reports_post_response.py) | +| Response | [`CategoryAssetsResponse`](./src/profound/types/organizations/category_assets_response.py) | ```python -visibility = client.reports.visibility.query_v2_v2_reports_post( - category_id="", - start_date="", - end_date="", - interval="day", - scope="owned", +category = client.organizations.categories.assets( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", ) ``` -#### Stream Visibility V2 +#### Get Category Personas | Direction | Type | | --- | --- | -| Request | [`VisibilityStreamV2V2ReportsStreamPostParams`](./src/types/reports/visibility_stream_v2_v2_reports_stream_post_params.py) | -| Response | [`VisibilityStreamV2V2ReportsStreamPostResponse`](./src/types/reports/visibility_stream_v2_v2_reports_stream_post_response.py) | +| Response | [`CategoryGetCategoryPersonasResponse`](./src/profound/types/organizations/category_get_category_personas_response.py) | ```python -stream = client.reports.visibility.stream_v2_v2_reports_stream_post( - category_id="", - start_date="", - end_date="", - interval="day", - scope="owned", +category = client.organizations.categories.get_category_personas( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", ) -for event in stream: - print(event) ``` -### `Reports Sentiment` - -#### Query Sentiment +#### Create prompts -Get citations for a given category. +Create one or more prompts in a category. Topics and tags are auto-created if referenced by name and not yet existing. Use dry_run to preview without persisting. | Direction | Type | | --- | --- | -| Request | [`SentimentQueryV1ReportsPostParams`](./src/types/reports/sentiment_query_v1_reports_post_params.py) | -| Response | [`ReportResponse`](./src/types/report_response.py) | +| Request | [`CategoryCreatePromptsParams`](./src/profound/types/organizations/category_create_prompts_params.py) | +| Response | [`CategoryCreatePromptsResponse`](./src/profound/types/organizations/category_create_prompts_response.py) | ```python -sentiment = client.reports.sentiment.query_v1_reports_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - category_id="", - start_date="", - end_date="", +category = client.organizations.categories.create_prompts( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + prompts=[], + dry_run=False, ) ``` -#### Stream Sentiment +#### Update prompts + +Update one or more existing prompts. Only provided fields are changed. Dimension fields (regions, platforms, personas, tags) replace the full set when provided. Use dry_run to preview without persisting. | Direction | Type | | --- | --- | -| Request | [`SentimentStreamV1ReportsStreamPostParams`](./src/types/reports/sentiment_stream_v1_reports_stream_post_params.py) | -| Response | [`SentimentStreamV1ReportsStreamPostResponse`](./src/types/reports/sentiment_stream_v1_reports_stream_post_response.py) | +| Request | [`CategoryUpdatePromptsParams`](./src/profound/types/organizations/category_update_prompts_params.py) | +| Response | [`CategoryUpdatePromptsResponse`](./src/profound/types/organizations/category_update_prompts_response.py) | ```python -stream = client.reports.sentiment.stream_v1_reports_stream_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - category_id="", - start_date="", - end_date="", +category = client.organizations.categories.update_prompts( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + prompts=[], + dry_run=False, ) -for event in stream: - print(event) ``` -#### Query Sentiment V2 +#### Update prompt status + +Bulk-update the status of one or more prompts. Prompts already in the target status are skipped. Use dry_run to preview without persisting. + +Status options: +- 'active': Prompts will run daily. +- 'disabled': Prompts will not run moving forward, but historical data is preserved. +- 'deleted': Prompts are deleted along with historical data | Direction | Type | | --- | --- | -| Request | [`SentimentQueryV2V2ReportsPostParams`](./src/types/reports/sentiment_query_v2_v2_reports_post_params.py) | -| Response | [`SentimentQueryV2V2ReportsPostResponse`](./src/types/reports/sentiment_query_v2_v2_reports_post_response.py) | +| Request | [`CategoryUpdatePromptStatusParams`](./src/profound/types/organizations/category_update_prompt_status_params.py) | +| Response | [`CategoryUpdatePromptStatusResponse`](./src/profound/types/organizations/category_update_prompt_status_response.py) | ```python -sentiment = client.reports.sentiment.query_v2_v2_reports_post( - category_id="", - asset="", - start_date="", - end_date="", - interval="day", - include_cited_websites=False, +category = client.organizations.categories.update_prompt_status( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + prompt_ids=[], + status="active", + dry_run=False, ) ``` -#### Stream Sentiment V2 +## `Prompts` + +### Get Answers | Direction | Type | | --- | --- | -| Request | [`SentimentStreamV2V2ReportsStreamPostParams`](./src/types/reports/sentiment_stream_v2_v2_reports_stream_post_params.py) | -| Response | [`SentimentStreamV2V2ReportsStreamPostResponse`](./src/types/reports/sentiment_stream_v2_v2_reports_stream_post_response.py) | +| Request | [`PromptAnswersParams`](./src/profound/types/prompt_answers_params.py) | +| Response | [`PromptAnswersResponse`](./src/profound/types/prompt_answers_response.py) | ```python -stream = client.reports.sentiment.stream_v2_v2_reports_stream_post( - category_id="", - asset="", - start_date="", - end_date="", - interval="day", - include_cited_websites=False, +prompt = client.prompts.answers( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", ) -for event in stream: - print(event) ``` -### `Reports WebSearchResults` +## `Reports` -#### Query Web Search Results +### Query Citations -Get web search results for a given category. +Get citations for a given category. + +The ``mentioned`` filter supports ``is true`` and ``is false``. It uses the +latest page analysis available at or before ``end_date``; pages without an +analysis by then are excluded from both values. ``citation_share`` keeps all +otherwise eligible citations in its denominator when this filter is used. | Direction | Type | | --- | --- | -| Request | [`WebSearchResultQueryParams`](./src/types/reports/web_search_result_query_params.py) | -| Response | [`WebSearchResultQueryResponse`](./src/types/reports/web_search_result_query_response.py) | +| Request | [`ReportCitationsParams`](./src/profound/types/report_citations_params.py) | +| Response | [`ReportCitationsResponse`](./src/profound/types/report_citations_response.py) | ```python -web_search_result = client.reports.web_search_results.query( +report = client.reports.citations( date_interval="day", dimensions=[], metrics=[], order_by={}, - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", ) ``` -#### Stream Web Search Results +### Query Visibility + +Query visibility report. | Direction | Type | | --- | --- | -| Request | [`WebSearchResultStreamParams`](./src/types/reports/web_search_result_stream_params.py) | -| Response | [`WebSearchResultStreamResponse`](./src/types/reports/web_search_result_stream_response.py) | +| Request | [`ReportVisibilityParams`](./src/profound/types/report_visibility_params.py) | +| Response | [`ReportResponse`](./src/profound/types/report_response.py) | ```python -stream = client.reports.web_search_results.stream( +report = client.reports.visibility( date_interval="day", dimensions=[], metrics=[], order_by={}, - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", ) -for event in stream: - print(event) ``` -### `Reports Referrals` - -#### Get Referrals Report V1 +### Query Sentiment -Get referral traffic report from the daily aggregated materialized view. - -This endpoint queries pre-aggregated daily referral data, making it efficient -for large date ranges and high-traffic sites. +Get citations for a given category. | Direction | Type | | --- | --- | -| Request | [`ReferralCreateReportV1V1ReportsPostParams`](./src/types/reports/referral_create_report_v1_v1_reports_post_params.py) | -| Response | [`ReportResponse`](./src/types/report_response.py) | +| Request | [`ReportSentimentParams`](./src/profound/types/report_sentiment_params.py) | +| Response | [`ReportResponse`](./src/profound/types/report_response.py) | ```python -referral = client.reports.referrals.create_report_v1_v1_reports_post( +report = client.reports.sentiment( date_interval="day", dimensions=[], metrics=[], order_by={}, - domain="", - start_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", ) ``` -#### Get Referrals Report V2 +### Get Referrals Report V1 -Get referral traffic report from the hourly aggregated materialized view (UTC-based). +Get referral traffic report from the daily aggregated materialized view. -Supports date_interval="hour", calendar intervals through "year", "quarter", and "relative_week". +This endpoint queries pre-aggregated daily referral data, making it efficient +for large date ranges and high-traffic sites. | Direction | Type | | --- | --- | -| Request | [`ReferralCreateReportV2V2ReportsPostParams`](./src/types/reports/referral_create_report_v2_v2_reports_post_params.py) | -| Response | [`ReportResponse`](./src/types/report_response.py) | +| Request | [`ReportGetReferralsReportParams`](./src/profound/types/report_get_referrals_report_params.py) | +| Response | [`ReportResponse`](./src/profound/types/report_response.py) | ```python -referral = client.reports.referrals.create_report_v2_v2_reports_post( +report = client.reports.get_referrals_report( date_interval="day", dimensions=[], metrics=[], order_by={}, domain="", - start_date="", + start_date="2024-01-01T00:00:00.000Z", ) ``` -### `Reports Bots` - -#### Get Bots Report V1 +### Get Bots Report V1 Get bot traffic report from the daily aggregated materialized view. @@ -561,21 +434,44 @@ Metrics: | Direction | Type | | --- | --- | -| Request | [`BotCreateReportV1V1ReportsPostParams`](./src/types/reports/bot_create_report_v1_v1_reports_post_params.py) | -| Response | [`ReportResponse`](./src/types/report_response.py) | +| Request | [`ReportGetBotsReportParams`](./src/profound/types/report_get_bots_report_params.py) | +| Response | [`ReportResponse`](./src/profound/types/report_response.py) | + +```python +report = client.reports.get_bots_report( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + domain="", + start_date="2024-01-01T00:00:00.000Z", +) +``` + +### Get Referrals Report V2 + +Get referral traffic report from the hourly aggregated materialized view (UTC-based). + +Supports date_interval="hour", calendar intervals through "year", "quarter", and "relative_week". + +| Direction | Type | +| --- | --- | +| Request | [`ReportGetReferralsReportV2Params`](./src/profound/types/report_get_referrals_report_v2_params.py) | +| Response | [`ReportResponse`](./src/profound/types/report_response.py) | ```python -bot = client.reports.bots.create_report_v1_v1_reports_post( +report = client.reports.get_referrals_report_v2( date_interval="day", dimensions=[], metrics=[], order_by={}, domain="", - start_date="", + start_date="2024-01-01T00:00:00.000Z", + timezone="UTC", ) ``` -#### Get Bots Report V2 +### Get Bots Report V2 Get bot traffic report from the hourly aggregated materialized view (UTC-based). @@ -593,97 +489,175 @@ Dimensions: | Direction | Type | | --- | --- | -| Request | [`BotCreateReportV2V2ReportsPostParams`](./src/types/reports/bot_create_report_v2_v2_reports_post_params.py) | -| Response | [`ReportResponse`](./src/types/report_response.py) | +| Request | [`ReportGetBotsReportV2Params`](./src/profound/types/report_get_bots_report_v2_params.py) | +| Response | [`ReportResponse`](./src/profound/types/report_response.py) | ```python -bot = client.reports.bots.create_report_v2_v2_reports_post( +report = client.reports.get_bots_report_v2( date_interval="day", dimensions=[], metrics=[], order_by={}, domain="", - start_date="", + start_date="2024-01-01T00:00:00.000Z", + timezone="UTC", ) ``` -### `Reports QueryFanouts` - -#### Query Fanouts +### Query Fanouts | Direction | Type | | --- | --- | -| Request | [`QueryFanoutV1ReportsPostParams`](./src/types/reports/query_fanout_v1_reports_post_params.py) | -| Response | [`ReportResponse`](./src/types/report_response.py) | +| Request | [`ReportQueryFanoutsParams`](./src/profound/types/report_query_fanouts_params.py) | +| Response | [`ReportResponse`](./src/profound/types/report_response.py) | ```python -query_fanout = client.reports.query_fanouts.v1_reports_post( +report = client.reports.query_fanouts( date_interval="day", dimensions=[], metrics=[], order_by={}, - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", ) ``` -#### Query Fanouts V2 +### Stream Citations + +Stream citations with the same filter semantics as the non-streaming route. | Direction | Type | | --- | --- | -| Request | [`QueryFanoutV2V2ReportsPostParams`](./src/types/reports/query_fanout_v2_v2_reports_post_params.py) | -| Response | [`QueryFanoutV2V2ReportsPostResponse`](./src/types/reports/query_fanout_v2_v2_reports_post_response.py) | +| Request | [`ReportStreamCitationsParams`](./src/profound/types/report_stream_citations_params.py) | +| Response | [`ReportStreamCitationsResponse`](./src/profound/types/report_stream_citations_response.py) | ```python -query_fanout = client.reports.query_fanouts.v2_v2_reports_post( - category_id="", - start_date="", - end_date="", - interval="day", +stream = client.reports.stream_citations( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", ) + +for event in stream: + print(event) ``` -#### Stream Query Fanouts V2 +### Stream Visibility | Direction | Type | | --- | --- | -| Request | [`QueryFanoutStreamV2V2ReportsStreamPostParams`](./src/types/reports/query_fanout_stream_v2_v2_reports_stream_post_params.py) | -| Response | [`QueryFanoutStreamV2V2ReportsStreamPostResponse`](./src/types/reports/query_fanout_stream_v2_v2_reports_stream_post_response.py) | +| Request | [`ReportStreamVisibilityParams`](./src/profound/types/report_stream_visibility_params.py) | +| Response | [`ReportStreamVisibilityResponse`](./src/profound/types/report_stream_visibility_response.py) | ```python -stream = client.reports.query_fanouts.stream_v2_v2_reports_stream_post( - category_id="", - start_date="", - end_date="", - interval="day", +stream = client.reports.stream_visibility( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", ) + for event in stream: print(event) ``` -### `Reports Shopping` - -#### Shopping Visibility +### Stream Sentiment | Direction | Type | | --- | --- | -| Request | [`ShoppingVisibilityParams`](./src/types/reports/shopping_visibility_params.py) | -| Response | [`ShoppingVisibilityResponse`](./src/types/reports/shopping_visibility_response.py) | +| Request | [`ReportStreamSentimentParams`](./src/profound/types/report_stream_sentiment_params.py) | +| Response | [`ReportStreamSentimentResponse`](./src/profound/types/report_stream_sentiment_response.py) | ```python -shopping = client.reports.shopping.visibility( - category_id="", - start_date="", - end_date="", +stream = client.reports.stream_sentiment( date_interval="day", - include_count=False, - tag_filter_type="any", - include_no_tag=False, - exclude_topic_ids=False, - include_asset_only=False, - rank_by="visibility_score", - include_position_frequency=False, + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", +) + +for event in stream: + print(event) +``` + +### `Reports WebSearchResults` + +#### Query Web Search Results + +Get web search results for a given category. + +| Direction | Type | +| --- | --- | +| Request | [`WebSearchResultQueryParams`](./src/profound/types/reports/web_search_result_query_params.py) | +| Response | [`WebSearchResultQueryResponse`](./src/profound/types/reports/web_search_result_query_response.py) | + +```python +web_search_result = client.reports.web_search_results.query( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", +) +``` + +#### Stream Web Search Results + +| Direction | Type | +| --- | --- | +| Request | [`WebSearchResultStreamParams`](./src/profound/types/reports/web_search_result_stream_params.py) | +| Response | [`WebSearchResultStreamResponse`](./src/profound/types/reports/web_search_result_stream_response.py) | + +```python +stream = client.reports.web_search_results.stream( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", +) + +for event in stream: + print(event) +``` + +### `Reports Shopping` + +#### Shopping Visibility + +| Direction | Type | +| --- | --- | +| Request | [`ShoppingVisibilityParams`](./src/profound/types/reports/shopping_visibility_params.py) | +| Response | [`ShoppingVisibilityResponse`](./src/profound/types/reports/shopping_visibility_response.py) | + +```python +shopping = client.reports.shopping.visibility( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", + date_interval="day", + include_count=False, + tag_filter_type="any", + include_no_tag=False, + exclude_topic_ids=False, + include_asset_only=False, + rank_by="visibility_score", + include_position_frequency=False, ) ``` @@ -691,14 +665,14 @@ shopping = client.reports.shopping.visibility( | Direction | Type | | --- | --- | -| Request | [`ShoppingItemVisibilityParams`](./src/types/reports/shopping_item_visibility_params.py) | -| Response | [`ShoppingItemVisibilityResponse`](./src/types/reports/shopping_item_visibility_response.py) | +| Request | [`ShoppingItemVisibilityParams`](./src/profound/types/reports/shopping_item_visibility_params.py) | +| Response | [`ShoppingItemVisibilityResponse`](./src/profound/types/reports/shopping_item_visibility_response.py) | ```python shopping = client.reports.shopping.item_visibility( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -715,14 +689,14 @@ shopping = client.reports.shopping.item_visibility( | Direction | Type | | --- | --- | -| Request | [`ShoppingMerchantDistributionParams`](./src/types/reports/shopping_merchant_distribution_params.py) | -| Response | [`ShoppingMerchantDistributionResponse`](./src/types/reports/shopping_merchant_distribution_response.py) | +| Request | [`ShoppingMerchantDistributionParams`](./src/profound/types/reports/shopping_merchant_distribution_params.py) | +| Response | [`ShoppingMerchantDistributionResponse`](./src/profound/types/reports/shopping_merchant_distribution_response.py) | ```python shopping = client.reports.shopping.merchant_distribution( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -735,14 +709,14 @@ shopping = client.reports.shopping.merchant_distribution( | Direction | Type | | --- | --- | -| Request | [`ShoppingMerchantVisibilityByBrandParams`](./src/types/reports/shopping_merchant_visibility_by_brand_params.py) | -| Response | [`ShoppingMerchantVisibilityByBrandResponse`](./src/types/reports/shopping_merchant_visibility_by_brand_response.py) | +| Request | [`ShoppingMerchantVisibilityByBrandParams`](./src/profound/types/reports/shopping_merchant_visibility_by_brand_params.py) | +| Response | [`ShoppingMerchantVisibilityByBrandResponse`](./src/profound/types/reports/shopping_merchant_visibility_by_brand_response.py) | ```python shopping = client.reports.shopping.merchant_visibility_by_brand( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -756,14 +730,14 @@ shopping = client.reports.shopping.merchant_visibility_by_brand( | Direction | Type | | --- | --- | -| Request | [`ShoppingMerchantByItemsParams`](./src/types/reports/shopping_merchant_by_items_params.py) | -| Response | [`ShoppingMerchantByItemsResponse`](./src/types/reports/shopping_merchant_by_items_response.py) | +| Request | [`ShoppingMerchantByItemsParams`](./src/profound/types/reports/shopping_merchant_by_items_params.py) | +| Response | [`ShoppingMerchantByItemsResponse`](./src/profound/types/reports/shopping_merchant_by_items_response.py) | ```python shopping = client.reports.shopping.merchant_by_items( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -776,14 +750,14 @@ shopping = client.reports.shopping.merchant_by_items( | Direction | Type | | --- | --- | -| Request | [`ShoppingAllItemsWithMerchantsParams`](./src/types/reports/shopping_all_items_with_merchants_params.py) | -| Response | [`ShoppingAllItemsWithMerchantsResponse`](./src/types/reports/shopping_all_items_with_merchants_response.py) | +| Request | [`ShoppingAllItemsWithMerchantsParams`](./src/profound/types/reports/shopping_all_items_with_merchants_params.py) | +| Response | [`ShoppingAllItemsWithMerchantsResponse`](./src/profound/types/reports/shopping_all_items_with_merchants_response.py) | ```python shopping = client.reports.shopping.all_items_with_merchants( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -799,14 +773,14 @@ shopping = client.reports.shopping.all_items_with_merchants( | Direction | Type | | --- | --- | -| Request | [`ShoppingTriggerRateParams`](./src/types/reports/shopping_trigger_rate_params.py) | -| Response | [`ShoppingTriggerRateResponse`](./src/types/reports/shopping_trigger_rate_response.py) | +| Request | [`ShoppingTriggerRateParams`](./src/profound/types/reports/shopping_trigger_rate_params.py) | +| Response | [`ShoppingTriggerRateResponse`](./src/profound/types/reports/shopping_trigger_rate_response.py) | ```python shopping = client.reports.shopping.trigger_rate( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -819,14 +793,14 @@ shopping = client.reports.shopping.trigger_rate( | Direction | Type | | --- | --- | -| Request | [`ShoppingMerchantShareParams`](./src/types/reports/shopping_merchant_share_params.py) | -| Response | [`ShoppingMerchantShareResponse`](./src/types/reports/shopping_merchant_share_response.py) | +| Request | [`ShoppingMerchantShareParams`](./src/profound/types/reports/shopping_merchant_share_params.py) | +| Response | [`ShoppingMerchantShareResponse`](./src/profound/types/reports/shopping_merchant_share_response.py) | ```python shopping = client.reports.shopping.merchant_share( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -839,15 +813,15 @@ shopping = client.reports.shopping.merchant_share( | Direction | Type | | --- | --- | -| Request | [`ShoppingProductMerchantUrlsParams`](./src/types/reports/shopping_product_merchant_urls_params.py) | -| Response | [`ShoppingProductMerchantUrlsResponse`](./src/types/reports/shopping_product_merchant_urls_response.py) | +| Request | [`ShoppingProductMerchantURLsParams`](./src/profound/types/reports/shopping_product_merchant_urls_params.py) | +| Response | [`ShoppingProductMerchantURLsResponse`](./src/profound/types/reports/shopping_product_merchant_urls_response.py) | ```python shopping = client.reports.shopping.product_merchant_urls( - category_id="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", product_names=[], - start_date="", - end_date="", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", ) ``` @@ -855,14 +829,14 @@ shopping = client.reports.shopping.product_merchant_urls( | Direction | Type | | --- | --- | -| Request | [`ShoppingExecutionsParams`](./src/types/reports/shopping_executions_params.py) | -| Response | [`ShoppingExecutionsResponse`](./src/types/reports/shopping_executions_response.py) | +| Request | [`ShoppingExecutionsParams`](./src/profound/types/reports/shopping_executions_params.py) | +| Response | [`ShoppingExecutionsResponse`](./src/profound/types/reports/shopping_executions_response.py) | ```python shopping = client.reports.shopping.executions( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -872,256 +846,6 @@ shopping = client.reports.shopping.executions( ) ``` -### `Reports Accuracy` - -#### Accuracy Overview - -| Direction | Type | -| --- | --- | -| Request | [`AccuracyOverviewV1ReportsOverviewPostParams`](./src/types/reports/accuracy_overview_v1_reports_overview_post_params.py) | -| Response | [`AccuracyOverviewV1ReportsOverviewPostResponse`](./src/types/reports/accuracy_overview_v1_reports_overview_post_response.py) | - -```python -accuracy = client.reports.accuracy.overview_v1_reports_overview_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - group_by="period", -) -``` - -#### Accuracy Breakdown - -| Direction | Type | -| --- | --- | -| Request | [`AccuracyBreakdownV1ReportsBreakdownPostParams`](./src/types/reports/accuracy_breakdown_v1_reports_breakdown_post_params.py) | -| Response | [`AccuracyBreakdownV1ReportsBreakdownPostResponse`](./src/types/reports/accuracy_breakdown_v1_reports_breakdown_post_response.py) | - -```python -accuracy = client.reports.accuracy.breakdown_v1_reports_breakdown_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - breakdown_by="citation", - limit=10, - offset=0, - sort_by="citationShare", - sort_order="desc", -) -``` - -#### Accuracy Citation Analysis - -| Direction | Type | -| --- | --- | -| Request | [`AccuracyCitationAnalysisV1ReportsCitationAnalysisPostParams`](./src/types/reports/accuracy_citation_analysis_v1_reports_citation_analysis_post_params.py) | -| Response | [`AccuracyCitationAnalysisV1ReportsCitationAnalysisPostResponse`](./src/types/reports/accuracy_citation_analysis_v1_reports_citation_analysis_post_response.py) | - -```python -accuracy = client.reports.accuracy.citation_analysis_v1_reports_citation_analysis_post( - category_id="", - clean_href="", - start_date="", - end_date="", -) -``` - -#### Accuracy Topic Ids - -| Direction | Type | -| --- | --- | -| Request | [`AccuracyTopicIdsV1ReportsTopicIdsPostParams`](./src/types/reports/accuracy_topic_ids_v1_reports_topic_ids_post_params.py) | -| Response | [`AccuracyTopicIdsV1ReportsTopicIdsPostResponse`](./src/types/reports/accuracy_topic_ids_v1_reports_topic_ids_post_response.py) | - -```python -accuracy = client.reports.accuracy.topic_ids_v1_reports_topic_ids_post( - category_id="", - start_date="", - end_date="", -) -``` - -#### Accuracy Inaccurate Themes - -| Direction | Type | -| --- | --- | -| Request | [`AccuracyInaccurateThemesV1ReportsInaccurateThemesPostParams`](./src/types/reports/accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_params.py) | -| Response | [`AccuracyInaccurateThemesV1ReportsInaccurateThemesPostResponse`](./src/types/reports/accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_response.py) | - -```python -accuracy = client.reports.accuracy.inaccurate_themes_v1_reports_inaccurate_themes_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - limit=10, - offset=0, - sort_by="response_share", - sort_order="desc", -) -``` - -#### Accuracy Inaccurate Clusters - -| Direction | Type | -| --- | --- | -| Request | [`AccuracyInaccurateClustersV1ReportsInaccurateClustersPostParams`](./src/types/reports/accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_params.py) | -| Response | [`AccuracyInaccurateClustersV1ReportsInaccurateClustersPostResponse`](./src/types/reports/accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_response.py) | - -```python -accuracy = client.reports.accuracy.inaccurate_clusters_v1_reports_inaccurate_clusters_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - theme_id="", - limit=5000, - offset=0, -) -``` - -#### Accuracy Inaccuracy Drivers - -| Direction | Type | -| --- | --- | -| Request | [`AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostParams`](./src/types/reports/accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_params.py) | -| Response | [`AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostResponse`](./src/types/reports/accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_response.py) | - -```python -accuracy = client.reports.accuracy.inaccuracy_drivers_v1_reports_inaccuracy_drivers_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - limit=5, -) -``` - -#### Accuracy Top Inaccurate Claims - -| Direction | Type | -| --- | --- | -| Request | [`AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostParams`](./src/types/reports/accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_params.py) | -| Response | [`AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostResponse`](./src/types/reports/accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_response.py) | - -```python -accuracy = client.reports.accuracy.top_inaccurate_claims_v1_reports_top_inaccurate_claims_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - limit=5, -) -``` - -#### Accuracy Claim Breakdown - -| Direction | Type | -| --- | --- | -| Request | [`AccuracyClaimBreakdownV1ReportsClaimBreakdownPostParams`](./src/types/reports/accuracy_claim_breakdown_v1_reports_claim_breakdown_post_params.py) | -| Response | [`AccuracyClaimBreakdownV1ReportsClaimBreakdownPostResponse`](./src/types/reports/accuracy_claim_breakdown_v1_reports_claim_breakdown_post_response.py) | - -```python -accuracy = client.reports.accuracy.claim_breakdown_v1_reports_claim_breakdown_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - cluster_id="", -) -``` - -#### Accuracy Claim Citations - -| Direction | Type | -| --- | --- | -| Request | [`AccuracyClaimCitationsV1ReportsClaimCitationsPostParams`](./src/types/reports/accuracy_claim_citations_v1_reports_claim_citations_post_params.py) | -| Response | [`AccuracyClaimCitationsV1ReportsClaimCitationsPostResponse`](./src/types/reports/accuracy_claim_citations_v1_reports_claim_citations_post_response.py) | - -```python -accuracy = client.reports.accuracy.claim_citations_v1_reports_claim_citations_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - cluster_id="", - limit=10, - offset=0, - sort_order="desc", -) -``` - -#### Accuracy Cluster Example Runs - -| Direction | Type | -| --- | --- | -| Request | [`AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostParams`](./src/types/reports/accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_params.py) | -| Response | [`AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostResponse`](./src/types/reports/accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_response.py) | - -```python -accuracy = client.reports.accuracy.cluster_example_runs_v1_reports_cluster_example_runs_post( - category_id="", - cluster_id="", - start_date="", - end_date="", - limit=20, - offset=0, -) -``` - -#### Accuracy Cluster Verification Pairs - -| Direction | Type | -| --- | --- | -| Request | [`AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostParams`](./src/types/reports/accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_params.py) | -| Response | [`AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostResponse`](./src/types/reports/accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_response.py) | - -```python -accuracy = client.reports.accuracy.cluster_verification_pairs_v1_reports_cluster_verification_pairs_post( - category_id="", - cluster_id="", -) -``` - -#### Accuracy Factcheck Setup Status - -| Direction | Type | -| --- | --- | -| Request | [`AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostParams`](./src/types/reports/accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_params.py) | -| Response | [`AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostResponse`](./src/types/reports/accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_response.py) | - -```python -accuracy = client.reports.accuracy.factcheck_setup_status_v1_reports_factcheck_setup_status_post( - category_id="", -) -``` - ## `Content` ### `Content Optimization` @@ -1130,12 +854,12 @@ accuracy = client.reports.accuracy.factcheck_setup_status_v1_reports_factcheck_s | Direction | Type | | --- | --- | -| Request | [`OptimizationListParams`](./src/types/content/optimization_list_params.py) | -| Response | [`OptimizationListResponse`](./src/types/content/optimization_list_response.py) | +| Request | [`OptimizationListParams`](./src/profound/types/content/optimization_list_params.py) | +| Response | [`OptimizationListResponse`](./src/profound/types/content/optimization_list_response.py) | ```python optimization = client.content.optimization.list( - asset_id="assetId", + asset_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", limit=10000, offset=0, ) @@ -1145,132 +869,12 @@ optimization = client.content.optimization.list( | Direction | Type | | --- | --- | -| Response | [`OptimizationRetrieveResponse`](./src/types/content/optimization_retrieve_response.py) | +| Response | [`OptimizationRetrieveResponse`](./src/profound/types/content/optimization_retrieve_response.py) | ```python optimization = client.content.optimization.retrieve( - asset_id="assetId", - content_id="contentId", -) -``` - -## `KnowledgeBases` - -### List Knowledge Bases - -List knowledge bases accessible to the API key. - -| Direction | Type | -| --- | --- | -| Request | [`KnowledgeBaseListParams`](./src/types/knowledge_base_list_params.py) | -| Response | [`KnowledgeBaseListResponse`](./src/types/knowledge_base_list_response.py) | - -```python -knowledge_base = client.knowledge_bases.list() -``` - -### Search Knowledge Base - -Search a knowledge base and return matching snippets or pages. - -| Direction | Type | -| --- | --- | -| Request | [`KnowledgeBaseSearchParams`](./src/types/knowledge_base_search_params.py) | -| Response | [`KnowledgeBaseSearchResponse`](./src/types/knowledge_base_search_response.py) | - -```python -knowledge_base = client.knowledge_bases.search( - knowledge_base_id="knowledgeBaseId", - query="", - top_k=0, - return_full_page=False, -) -``` - -### `KnowledgeBases Documents` - -#### Add Document - -Add a document to a knowledge base using JSON text or multipart file upload. - -| Direction | Type | -| --- | --- | -| Request | [`DocumentCreateParams`](./src/types/knowledge_bases/document_create_params.py) | -| Response | [`DocumentCreateResponse`](./src/types/knowledge_bases/document_create_response.py) | - -```python -document = client.knowledge_bases.documents.create( - knowledge_base_id="knowledgeBaseId", - name="", - text="", -) -``` - -#### Update Document - -Overwrite a knowledge base document using JSON text or multipart file upload. - -| Direction | Type | -| --- | --- | -| Request | [`DocumentUpdateParams`](./src/types/knowledge_bases/document_update_params.py) | -| Response | [`DocumentUpdateResponse`](./src/types/knowledge_bases/document_update_response.py) | - -```python -document = client.knowledge_bases.documents.update( - knowledge_base_id="knowledgeBaseId", - name="", - text="", -) -``` - -#### Delete Document - -Delete an existing document from a knowledge base. - -| Direction | Type | -| --- | --- | -| Request | [`DocumentDeleteParams`](./src/types/knowledge_bases/document_delete_params.py) | -| Response | [`DocumentDeleteResponse`](./src/types/knowledge_bases/document_delete_response.py) | - -```python -document = client.knowledge_bases.documents.delete( - knowledge_base_id="knowledgeBaseId", - name="", -) -``` - -### `KnowledgeBases Folders` - -#### Add Folder - -Create an empty folder at the requested knowledge base path. - -| Direction | Type | -| --- | --- | -| Request | [`FolderCreateParams`](./src/types/knowledge_bases/folder_create_params.py) | -| Response | [`FolderCreateResponse`](./src/types/knowledge_bases/folder_create_response.py) | - -```python -folder = client.knowledge_bases.folders.create( - knowledge_base_id="knowledgeBaseId", - path="", -) -``` - -#### Delete Folder - -Delete a folder. With recursive=false, non-empty folders return 409 and no contents are deleted. - -| Direction | Type | -| --- | --- | -| Request | [`FolderDeleteParams`](./src/types/knowledge_bases/folder_delete_params.py) | -| Response | [`FolderDeleteResponse`](./src/types/knowledge_bases/folder_delete_response.py) | - -```python -folder = client.knowledge_bases.folders.delete( - knowledge_base_id="knowledgeBaseId", - path="", - recursive=False, + asset_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + content_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", ) ``` @@ -1286,8 +890,8 @@ published yet. | Direction | Type | | --- | --- | -| Request | [`AgentListParams`](./src/types/agent_list_params.py) | -| Response | [`AgentListResponse`](./src/types/agent_list_response.py) | +| Request | [`AgentListParams`](./src/profound/types/agent_list_params.py) | +| Response | [`AgentListResponse`](./src/profound/types/agent_list_response.py) | ```python agent = client.agents.list( @@ -1295,44 +899,6 @@ agent = client.agents.list( ) ``` -### Create an agent - -Create a new draft agent owned by the given organization. - -`organization_id` is required and you must be a member of it. The agent is created -as a `draft`; publish it with `POST /v1/agents/{agent_id}/publish` once its graph -is ready. - -| Direction | Type | -| --- | --- | -| Request | [`AgentCreateV1PostParams`](./src/types/agent_create_v1_post_params.py) | -| Response | [`AgentCreateV1PostResponse`](./src/types/agent_create_v1_post_response.py) | - -```python -agent = client.agents.create_v1_post( - organization_id="", - name="", -) -``` - -### Publish an agent - -Publish an agent's latest draft as its live published version. - -You must be a member of the agent's organization. Publishing promotes the current -draft graph to a new published version. A draft that cannot produce its declared -input/output contract is rejected with `422` and is not published. - -| Direction | Type | -| --- | --- | -| Response | [`AgentPublishV1IdPublishPostResponse`](./src/types/agent_publish_v1_id_publish_post_response.py) | - -```python -agent = client.agents.publish_v1_id_publish_post( - agent_id="agentId", -) -``` - ### Get an agent Retrieve an agent and its schema details. @@ -1342,89 +908,12 @@ unpublished changes. Use the `version` parameter to choose which state to return | Direction | Type | | --- | --- | -| Request | [`AgentRetrieveParams`](./src/types/agent_retrieve_params.py) | -| Response | [`AgentRetrieveResponse`](./src/types/agent_retrieve_response.py) | +| Request | [`AgentRetrieveParams`](./src/profound/types/agent_retrieve_params.py) | +| Response | [`AgentRetrieveResponse`](./src/profound/types/agent_retrieve_response.py) | ```python agent = client.agents.retrieve( - agent_id="agentId", -) -``` - -### Update an agent - -Update an agent's draft graph in place. - -You must be a member of the agent's organization. The agent's draft is replaced with the -supplied graph and re-validated, so you can iterate one draft — create, then update per -fix — instead of creating a new agent on every change. The response carries the updated -`validation`; publish with `POST /v1/agents/{agent_id}/publish` once `validation.valid`. - -| Direction | Type | -| --- | --- | -| Request | [`AgentUpdateV1IdPatchParams`](./src/types/agent_update_v1_id_patch_params.py) | -| Response | [`AgentUpdateV1IdPatchResponse`](./src/types/agent_update_v1_id_patch_response.py) | - -```python -agent = client.agents.update_v1_id_patch( - agent_id="agentId", - graph={}, -) -``` - -### Get an agent's graph - -Retrieve an agent's full workflow graph (`{nodes, edges}`). - -The graph is returned verbatim in the canonical dialect — the same shape `POST /v1/agents` -and `PATCH /v1/agents/{agent_id}` accept — so a known-good agent can be read back, copied, -and edited. Tool-backed nodes appear in their lowered `tool` form rather than the friendly -v1 node types. A `draft` is visible only to its creator; the `published` version is visible -across its organization. - -| Direction | Type | -| --- | --- | -| Request | [`AgentListGraphV1GraphGetParams`](./src/types/agent_list_graph_v1_graph_get_params.py) | -| Response | [`AgentListGraphV1GraphGetResponse`](./src/types/agent_list_graph_v1_graph_get_response.py) | - -```python -agent = client.agents.list_graph_v1_graph_get( - agent_id="agentId", -) -``` - -### `Agents NodeTypes` - -#### List node types - -List the node types available for building agents. - -The set is deterministic and does not depend on the caller, so the response -is safe to cache across sessions. Integration-dependent and dynamic-schema -node types are intentionally excluded in v1. - -| Direction | Type | -| --- | --- | -| Response | [`NodeTypeListV1AgentsGetResponse`](./src/types/agents/node_type_list_v1_agents_get_response.py) | - -```python -node_type = client.agents.node_types.list_v1_agents_get() -``` - -#### Get a node type schema - -Retrieve the JSON schema and worked examples for a single node type. - -The `schema` field is an opaque JSON Schema for the node's configuration. -Use `schema_version` as a cache key — it bumps whenever the schema changes. - -| Direction | Type | -| --- | --- | -| Response | [`NodeTypeListSchemaV1AgentsSchemaGetResponse`](./src/types/agents/node_type_list_schema_v1_agents_schema_get_response.py) | - -```python -node_type = client.agents.node_types.list_schema_v1_agents_schema_get( - node_type="nodeType", + agent_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", ) ``` @@ -1440,12 +929,12 @@ cannot be run. | Direction | Type | | --- | --- | -| Request | [`RunCreateParams`](./src/types/agents/run_create_params.py) | -| Response | [`RunCreateResponse`](./src/types/agents/run_create_response.py) | +| Request | [`RunCreateParams`](./src/profound/types/agents/run_create_params.py) | +| Response | [`RunCreateResponse`](./src/profound/types/agents/run_create_response.py) | ```python run = client.agents.runs.create( - agent_id="agentId", + agent_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", ) ``` @@ -1455,237 +944,133 @@ Retrieve the current status and result details for an agent run. | Direction | Type | | --- | --- | -| Response | [`RunRetrieveResponse`](./src/types/agents/run_retrieve_response.py) | +| Request | [`RunRetrieveParams`](./src/profound/types/agents/run_retrieve_params.py) | +| Response | [`RunRetrieveResponse`](./src/profound/types/agents/run_retrieve_response.py) | ```python run = client.agents.runs.retrieve( - agent_id="agentId", - run_id="runId", + agent_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + run_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + verbose=False, ) ``` -## `Organizations` - -### List organizations - -Return every organization the caller's API key grants access to. Use this to discover organization IDs before calling endpoints that accept an `organization_id` filter. - -| Direction | Type | -| --- | --- | -| Response | [`OrganizationListResponse`](./src/types/organization_list_response.py) | - -```python -organization = client.organizations.list() -``` - -### Get Regions - -Get the organization regions. - -| Direction | Type | -| --- | --- | -| Request | [`OrganizationRegionsParams`](./src/types/organization_regions_params.py) | -| Response | [`OrganizationRegionsResponse`](./src/types/organization_regions_response.py) | - -```python -organization = client.organizations.regions() -``` - -### Get Models - -Get the organization models. - -| Direction | Type | -| --- | --- | -| Response | [`OrganizationModelsResponse`](./src/types/organization_models_response.py) | - -```python -organization = client.organizations.models() -``` - -### Get Domains - -Get the organization domains. - -| Direction | Type | -| --- | --- | -| Request | [`OrganizationDomainsParams`](./src/types/organization_domains_params.py) | -| Response | [`OrganizationDomainsResponse`](./src/types/organization_domains_response.py) | - -```python -organization = client.organizations.domains() -``` - -### Get Assets - -Get the organization assets, one row per (asset, organization) pair. - -An asset's category can belong to multiple organizations; one asset row is -emitted per owning org so no association is silently dropped. - -| Direction | Type | -| --- | --- | -| Request | [`OrganizationListAssetsParams`](./src/types/organization_list_assets_params.py) | -| Response | [`OrganizationListAssetsResponse`](./src/types/organization_list_assets_response.py) | - -```python -organization = client.organizations.list_assets() -``` - -### Get Personas - -Get the organization personas, one row per (persona, organization) pair. - -Same (item, org) fan-out as ``get_assets``: a persona's category can be -owned by multiple orgs, and each owning org gets its own row so no -association is silently dropped. - -| Direction | Type | -| --- | --- | -| Request | [`OrganizationGetPersonasParams`](./src/types/organization_get_personas_params.py) | -| Response | [`OrganizationGetPersonasResponse`](./src/types/organization_get_personas_response.py) | - -```python -organization = client.organizations.get_personas() -``` - -### `Organizations Categories` +## `KnowledgeBases` -#### Get Categories +### List Knowledge Bases -Get the organization categories, one row per (category, organization) pair. +List knowledge bases accessible to the API key. | Direction | Type | | --- | --- | -| Request | [`CategoryListParams`](./src/types/organizations/category_list_params.py) | -| Response | [`CategoryListResponse`](./src/types/organizations/category_list_response.py) | +| Request | [`KnowledgeBaseListParams`](./src/profound/types/knowledge_base_list_params.py) | +| Response | [`KnowledgeBaseListResponse`](./src/profound/types/knowledge_base_list_response.py) | ```python -category = client.organizations.categories.list() +knowledge_base = client.knowledge_bases.list() ``` -#### Get Category Topics +### Search Knowledge Base -Get the topics for a specific category. +Search a knowledge base and return matching snippets or pages. | Direction | Type | | --- | --- | -| Response | [`CategoryTopicsResponse`](./src/types/organizations/category_topics_response.py) | +| Request | [`KnowledgeBaseSearchParams`](./src/profound/types/knowledge_base_search_params.py) | +| Response | [`KnowledgeBaseSearchResponse`](./src/profound/types/knowledge_base_search_response.py) | ```python -category = client.organizations.categories.topics( - category_id="categoryId", +knowledge_base = client.knowledge_bases.search( + knowledge_base_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + query="x", + top_k=0, + return_full_page=False, ) ``` -#### Get Category Tags - -Get the tags for a specific category. - -| Direction | Type | -| --- | --- | -| Response | [`CategoryTagsResponse`](./src/types/organizations/category_tags_response.py) | - -```python -category = client.organizations.categories.tags( - category_id="categoryId", -) -``` +### `KnowledgeBases Documents` -#### List prompts +#### Add Document -Retrieve prompts in a category with optional filtering by type, topic, tag, region, platform, or persona. Supports cursor-based pagination. +Add a document to a knowledge base using JSON text or multipart file upload. | Direction | Type | | --- | --- | -| Request | [`CategoryPromptsParams`](./src/types/organizations/category_prompts_params.py) | -| Response | [`CategoryPromptsResponse`](./src/types/organizations/category_prompts_response.py) | +| Request | [`DocumentCreateParams`](./src/profound/types/knowledge_bases/document_create_params.py) | +| Response | [`DocumentCreateResponse`](./src/profound/types/knowledge_bases/document_create_response.py) | ```python -category = client.organizations.categories.prompts( - category_id="categoryId", - limit=10000, - status=["active"], +document = client.knowledge_bases.documents.create( + knowledge_base_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + name="x", + text="x", ) ``` -#### Create prompts +#### Update Document -Create one or more prompts in a category. Topics and tags are auto-created if referenced by name and not yet existing. Use dry_run to preview without persisting. +Overwrite a knowledge base document using JSON text or multipart file upload. | Direction | Type | | --- | --- | -| Request | [`CategoryCreatePromptsParams`](./src/types/organizations/category_create_prompts_params.py) | -| Response | [`CategoryCreatePromptsResponse`](./src/types/organizations/category_create_prompts_response.py) | +| Request | [`DocumentUpdateParams`](./src/profound/types/knowledge_bases/document_update_params.py) | +| Response | [`DocumentUpdateResponse`](./src/profound/types/knowledge_bases/document_update_response.py) | ```python -category = client.organizations.categories.create_prompts( - category_id="categoryId", - prompts=[], - dry_run=False, +document = client.knowledge_bases.documents.update( + knowledge_base_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + name="x", + text="x", ) ``` -#### Update prompts +#### Delete Document -Update one or more existing prompts. Only provided fields are changed. Dimension fields (regions, platforms, personas, tags) replace the full set when provided. Use dry_run to preview without persisting. +Delete an existing document from a knowledge base. | Direction | Type | | --- | --- | -| Request | [`CategoryUpdatePromptsParams`](./src/types/organizations/category_update_prompts_params.py) | -| Response | [`CategoryUpdatePromptsResponse`](./src/types/organizations/category_update_prompts_response.py) | +| Request | [`DocumentDeleteParams`](./src/profound/types/knowledge_bases/document_delete_params.py) | +| Response | [`DocumentDeleteResponse`](./src/profound/types/knowledge_bases/document_delete_response.py) | ```python -category = client.organizations.categories.update_prompts( - category_id="categoryId", - prompts=[], - dry_run=False, +document = client.knowledge_bases.documents.delete( + knowledge_base_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + name="x", ) ``` -#### Update prompt status +### `KnowledgeBases Folders` -Bulk-update the status of one or more prompts. Prompts already in the target status are skipped. Use dry_run to preview without persisting. +#### Add Folder -Status options: -- 'active': Prompts will run daily. -- 'disabled': Prompts will not run moving forward, but historical data is preserved. -- 'deleted': Prompts are deleted along with historical data +Create an empty folder at the requested knowledge base path. | Direction | Type | | --- | --- | -| Request | [`CategoryUpdatePromptStatusParams`](./src/types/organizations/category_update_prompt_status_params.py) | -| Response | [`CategoryUpdatePromptStatusResponse`](./src/types/organizations/category_update_prompt_status_response.py) | +| Request | [`FolderCreateParams`](./src/profound/types/knowledge_bases/folder_create_params.py) | +| Response | [`FolderCreateResponse`](./src/profound/types/knowledge_bases/folder_create_response.py) | ```python -category = client.organizations.categories.update_prompt_status( - category_id="categoryId", - prompt_ids=[], - status="active", - dry_run=False, +folder = client.knowledge_bases.folders.create( + knowledge_base_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + path="x", ) ``` -#### Get Category Assets - -| Direction | Type | -| --- | --- | -| Response | [`CategoryAssetsResponse`](./src/types/organizations/category_assets_response.py) | - -```python -category = client.organizations.categories.assets( - category_id="categoryId", -) -``` +#### Delete Folder -#### Get Category Personas +Delete a folder. With recursive=false, non-empty folders return 409 and no contents are deleted. | Direction | Type | | --- | --- | -| Response | [`CategoryGetCategoryPersonasResponse`](./src/types/organizations/category_get_category_personas_response.py) | +| Request | [`FolderDeleteParams`](./src/profound/types/knowledge_bases/folder_delete_params.py) | +| Response | [`FolderDeleteResponse`](./src/profound/types/knowledge_bases/folder_delete_response.py) | ```python -category = client.organizations.categories.get_category_personas( - category_id="categoryId", +folder = client.knowledge_bases.folders.delete( + knowledge_base_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + path="x", + recursive=False, ) ``` diff --git a/openapi.augmented.json b/openapi.augmented.json index f9c2df3e..506d7529 100644 --- a/openapi.augmented.json +++ b/openapi.augmented.json @@ -2,7 +2,7 @@ "openapi": "3.1.0", "info": { "title": "External API", - "version": "61770f593190b70031f3d019ae5b68d58e60743e", + "version": "0.58.0", "x-scalar-sdk-installation": [ { "lang": "Python", @@ -60,14 +60,10 @@ } ], "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst organizations = await client.organizations.list();\n\nconsole.log(organizations);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\norganization = client.organizations.list()\nprint(organization)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\norganization = client.organizations.list()\n\nprint(organization)" } ] } @@ -139,14 +135,10 @@ } }, "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst namedResources = await client.organizations.regions();\n\nconsole.log(namedResources);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\norganization = client.organizations.regions()\nprint(organization)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\norganization = client.organizations.regions()\n\nprint(organization)" } ] } @@ -194,14 +186,10 @@ } ], "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst namedResources = await client.organizations.models();\n\nconsole.log(namedResources);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\norganization = client.organizations.models()\nprint(organization)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\norganization = client.organizations.models()\n\nprint(organization)" } ] } @@ -273,14 +261,10 @@ } }, "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.organizations.domains();\n\nconsole.log(response);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\norganization = client.organizations.domains()\nprint(organization)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\norganization = client.organizations.domains()\n\nprint(organization)" } ] } @@ -348,14 +332,10 @@ } }, "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.organizations.listAssets();\n\nconsole.log(response.data);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\norganization = client.organizations.list_assets()\nprint(organization)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\norganization = client.organizations.list_assets()\n\nprint(organization)" } ] } @@ -423,14 +403,10 @@ } }, "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.organizations.getPersonas();\n\nconsole.log(response.data);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\norganization = client.organizations.get_personas()\nprint(organization)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\norganization = client.organizations.get_personas()\n\nprint(organization)" } ] } @@ -503,14 +479,10 @@ } }, "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst categories = await client.organizations.categories.list();\n\nconsole.log(categories);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ncategory = client.organizations.categories.list()\nprint(category)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\ncategory = client.organizations.categories.list()\n\nprint(category)" } ] } @@ -571,14 +543,10 @@ } }, "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.organizations.categories.topics(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n);\n\nconsole.log(response);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ncategory = client.organizations.categories.topics(\n category_id=\"categoryId\",\n)\nprint(category)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\ncategory = client.organizations.categories.topics(\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n)\n\nprint(category)" } ] } @@ -639,14 +607,10 @@ } }, "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.organizations.categories.tags('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');\n\nconsole.log(response);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ncategory = client.organizations.categories.tags(\n category_id=\"categoryId\",\n)\nprint(category)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\ncategory = client.organizations.categories.tags(\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n)\n\nprint(category)" } ] } @@ -705,18 +669,113 @@ } } } - }, - "x-codeSamples": [ + } + } + }, + "/v1/org/categories/{category_id}/citation-categories": { + "get": { + "tags": [ + "Organization", + "Categories" + ], + "summary": "Get Category Citation Categories", + "description": "Get the citation categories for a category: the built-in buckets plus any custom categories.", + "operationId": "get_category_citation_categories_v1_org_categories__category_id__citation_categories_get", + "security": [ { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst namedResources = await client.organizations.categories.retrieveRegions(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n);\n\nconsole.log(namedResources);" + "APIKeyHeader": [] }, { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\norganization = client.organization.list_category_regions_v1_org_categories_category_regions_get(\n category_id=\"categoryId\",\n)\nprint(organization)" + "BearerAuth": [] } - ] + ], + "parameters": [ + { + "name": "category_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Category Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CitationCategoriesResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/org/categories/{category_id}/citation-tags": { + "get": { + "tags": [ + "Organization", + "Categories" + ], + "summary": "Get Category Citation Tags", + "description": "Get the custom citation tags defined for a category.", + "operationId": "get_category_citation_tags_v1_org_categories__category_id__citation_tags_get", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "category_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Category Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CitationTagsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } } }, "/v1/org/categories/{category_id}/prompts": { @@ -779,15 +838,25 @@ }, "description": "Pagination cursor from a previous response." }, + { + "name": "order_by", + "in": "query", + "required": false, + "schema": { + "$ref": "#/components/schemas/PromptOrderBy", + "description": "Field used to order prompts." + }, + "description": "Field used to order prompts." + }, { "name": "order_dir", "in": "query", "required": false, "schema": { "$ref": "#/components/schemas/OrderByDirection", - "description": "Sort direction by creation date." + "description": "Sort direction for the selected order field." }, - "description": "Sort direction by creation date." + "description": "Sort direction for the selected order field." }, { "name": "analysis_type", @@ -946,14 +1015,10 @@ } }, "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.organizations.categories.prompts(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n);\n\nconsole.log(response.data);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ncategory = client.organizations.categories.prompts(\n category_id=\"categoryId\",\n limit=10000,\n status=[\"active\"],\n)\nprint(category)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\ncategory = client.organizations.categories.prompts(\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n limit=10000,\n status=[\"active\"],\n)\n\nprint(category)" } ] }, @@ -1018,14 +1083,10 @@ } }, "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.organizations.categories.createPrompts(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n {\n prompts: [\n {\n language: 'language',\n platforms: [{}],\n prompt: 'x',\n regions: [{}],\n topic: {},\n },\n ],\n },\n);\n\nconsole.log(response.dry_run);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ncategory = client.organizations.categories.create_prompts(\n category_id=\"categoryId\",\n prompts=[],\n dry_run=False,\n)\nprint(category)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\ncategory = client.organizations.categories.create_prompts(\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n prompts=[],\n dry_run=False,\n)\n\nprint(category)" } ] }, @@ -1090,14 +1151,10 @@ } }, "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.organizations.categories.updatePrompts(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n { prompts: [{ id: 'id' }] },\n);\n\nconsole.log(response.dry_run);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ncategory = client.organizations.categories.update_prompts(\n category_id=\"categoryId\",\n prompts=[],\n dry_run=False,\n)\nprint(category)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\ncategory = client.organizations.categories.update_prompts(\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n prompts=[],\n dry_run=False,\n)\n\nprint(category)" } ] } @@ -1164,14 +1221,10 @@ } }, "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.organizations.categories.updatePromptStatus(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n { prompt_ids: ['182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e'], status: 'active' },\n);\n\nconsole.log(response.dry_run);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ncategory = client.organizations.categories.update_prompt_status(\n category_id=\"categoryId\",\n prompt_ids=[],\n status=\"active\",\n dry_run=False,\n)\nprint(category)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\ncategory = client.organizations.categories.update_prompt_status(\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n prompt_ids=[],\n status=\"active\",\n dry_run=False,\n)\n\nprint(category)" } ] } @@ -1231,14 +1284,10 @@ } }, "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.organizations.categories.assets(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n);\n\nconsole.log(response);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ncategory = client.organizations.categories.assets(\n category_id=\"categoryId\",\n)\nprint(category)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\ncategory = client.organizations.categories.assets(\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n)\n\nprint(category)" } ] } @@ -1294,14 +1343,10 @@ } }, "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.organizations.categories.getCategoryPersonas(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n);\n\nconsole.log(response.data);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ncategory = client.organizations.categories.get_category_personas(\n category_id=\"categoryId\",\n)\nprint(category)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\ncategory = client.organizations.categories.get_category_personas(\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n)\n\nprint(category)" } ] } @@ -1354,14 +1399,10 @@ } ], "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.prompts.answers({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.data);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nanswer = client.prompts.answers.create_v1_prompts_post(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nprint(answer)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nprompt = client.prompts.answers(\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n start_date=\"2024-01-01T00:00:00.000Z\",\n end_date=\"2024-01-01T00:00:00.000Z\",\n)\n\nprint(prompt)" } ] } @@ -1373,7 +1414,7 @@ "Reports" ], "summary": "Query Citations", - "description": "Get citations for a given category.", + "description": "Get citations for a given category.\n\nThe ``mentioned`` filter supports ``is true`` and ``is false``. It uses the\nlatest page analysis available at or before ``end_date``; pages without an\nanalysis by then are excluded from both values. ``citation_share`` keeps all\notherwise eligible citations in its denominator when this filter is used.", "operationId": "query_citations_v1_reports_citations_post", "requestBody": { "content": { @@ -1416,14 +1457,10 @@ } ], "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.citations({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n metrics: ['count'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.data);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ncitation = client.reports.citations.query_v1_reports_post(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nprint(citation)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nreport = client.reports.citations(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n start_date=\"2024-01-01T00:00:00.000Z\",\n end_date=\"2024-01-01T00:00:00.000Z\",\n)\n\nprint(report)" } ] } @@ -1435,6 +1472,7 @@ "Reports" ], "summary": "Stream Citations", + "description": "Stream citations with the same filter semantics as the non-streaming route.", "operationId": "stream_citations_v1_reports_citations_stream_post", "requestBody": { "content": { @@ -1531,14 +1569,10 @@ } ], "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.streamCitations({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n metrics: ['count'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nstream = client.reports.citations.stream_v1_reports_stream_post(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nfor event in stream:\n print(event)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nstream = client.reports.stream_citations(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n start_date=\"2024-01-01T00:00:00.000Z\",\n end_date=\"2024-01-01T00:00:00.000Z\",\n)\n\nfor event in stream:\n print(event)" } ] } @@ -1593,14 +1627,10 @@ } ], "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst reportResponse = await client.reports.visibility({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n metrics: ['share_of_voice'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(reportResponse.data);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nvisibility = client.reports.visibility.query_v1_reports_post(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nprint(visibility)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nreport = client.reports.visibility(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n start_date=\"2024-01-01T00:00:00.000Z\",\n end_date=\"2024-01-01T00:00:00.000Z\",\n)\n\nprint(report)" } ] } @@ -1708,14 +1738,10 @@ } ], "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.streamVisibility({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n metrics: ['share_of_voice'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nstream = client.reports.visibility.stream_v1_reports_stream_post(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nfor event in stream:\n print(event)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nstream = client.reports.stream_visibility(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n start_date=\"2024-01-01T00:00:00.000Z\",\n end_date=\"2024-01-01T00:00:00.000Z\",\n)\n\nfor event in stream:\n print(event)" } ] } @@ -1770,14 +1796,10 @@ } ], "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst reportResponse = await client.reports.sentiment({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n metrics: ['positive'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(reportResponse.data);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nsentiment = client.reports.sentiment.query_v1_reports_post(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nprint(sentiment)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nreport = client.reports.sentiment(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n start_date=\"2024-01-01T00:00:00.000Z\",\n end_date=\"2024-01-01T00:00:00.000Z\",\n)\n\nprint(report)" } ] } @@ -1882,14 +1904,10 @@ } ], "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.streamSentiment({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n metrics: ['positive'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nstream = client.reports.sentiment.stream_v1_reports_stream_post(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nfor event in stream:\n print(event)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nstream = client.reports.stream_sentiment(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n start_date=\"2024-01-01T00:00:00.000Z\",\n end_date=\"2024-01-01T00:00:00.000Z\",\n)\n\nfor event in stream:\n print(event)" } ] } @@ -1941,17 +1959,6 @@ { "BearerAuth": [] } - ], - "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.sentimentV2({\n asset_name: 'asset_name',\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n metrics: ['sentiment'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.info);" - }, - { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nreport = client.reports.query_sentiment_v2_v1_sentiment_v2_post(\n category_id=\"\",\n asset_name=\"\",\n start_date=\"\",\n end_date=\"\",\n date_interval=\"day\",\n metrics=[],\n)\nprint(report)" - } ] } }, @@ -2005,14 +2012,10 @@ } ], "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.webSearchResults.query({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n metrics: ['count'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.data);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nweb_search_result = client.reports.web_search_results.query(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nprint(web_search_result)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nweb_search_result = client.reports.web_search_results.query(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n start_date=\"2024-01-01T00:00:00.000Z\",\n end_date=\"2024-01-01T00:00:00.000Z\",\n)\n\nprint(web_search_result)" } ] } @@ -2120,14 +2123,10 @@ } ], "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.webSearchResults.stream({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n metrics: ['count'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nstream = client.reports.web_search_results.stream(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nfor event in stream:\n print(event)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nstream = client.reports.web_search_results.stream(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n start_date=\"2024-01-01T00:00:00.000Z\",\n end_date=\"2024-01-01T00:00:00.000Z\",\n)\n\nfor event in stream:\n print(event)" } ] } @@ -2182,14 +2181,10 @@ } ], "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst reportResponse = await client.reports.getReferralsReport({\n domain: 'domain',\n metrics: ['visits'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(reportResponse.data);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nreferral = client.reports.referrals.create_report_v1_v1_reports_post(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n domain=\"\",\n start_date=\"\",\n)\nprint(referral)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nreport = client.reports.get_referrals_report(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n domain=\"\",\n start_date=\"2024-01-01T00:00:00.000Z\",\n)\n\nprint(report)" } ] } @@ -2244,14 +2239,10 @@ } ], "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst reportResponse = await client.reports.getBotsReport({\n domain: 'domain',\n metrics: ['count'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(reportResponse.data);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nbot = client.reports.bots.create_report_v1_v1_reports_post(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n domain=\"\",\n start_date=\"\",\n)\nprint(bot)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nreport = client.reports.get_bots_report(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n domain=\"\",\n start_date=\"2024-01-01T00:00:00.000Z\",\n)\n\nprint(report)" } ] } @@ -2335,14 +2326,10 @@ } }, "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst optimizations = await client.content.optimization.list(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n);\n\nconsole.log(optimizations.data);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\noptimization = client.content.optimization.list(\n asset_id=\"assetId\",\n limit=10000,\n offset=0,\n)\nprint(optimization)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\noptimization = client.content.optimization.list(\n asset_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n limit=10000,\n offset=0,\n)\n\nprint(optimization)" } ] } @@ -2409,14 +2396,10 @@ } }, "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst optimization = await client.content.optimization.retrieve(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n { asset_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e' },\n);\n\nconsole.log(optimization.data);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\noptimization = client.content.optimization.retrieve(\n asset_id=\"assetId\",\n content_id=\"contentId\",\n)\nprint(optimization)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\noptimization = client.content.optimization.retrieve(\n asset_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n content_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n)\n\nprint(optimization)" } ] } @@ -2481,14 +2464,10 @@ } }, "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst knowledgeBases = await client.knowledgeBases.list();\n\nconsole.log(knowledgeBases.data);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nknowledge_base = client.knowledge_bases.list()\nprint(knowledge_base)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nknowledge_base = client.knowledge_bases.list()\n\nprint(knowledge_base)" } ] } @@ -2575,14 +2554,10 @@ } }, "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.knowledgeBases.search('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', {\n query: 'x',\n top_k: 1,\n});\n\nconsole.log(response.data);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nknowledge_base = client.knowledge_bases.search(\n knowledge_base_id=\"knowledgeBaseId\",\n query=\"\",\n top_k=0,\n return_full_page=False,\n)\nprint(knowledge_base)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nknowledge_base = client.knowledge_bases.search(\n knowledge_base_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n query=\"x\",\n top_k=0,\n return_full_page=False,\n)\n\nprint(knowledge_base)" } ] } @@ -2726,14 +2701,10 @@ } }, "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst document = await client.knowledgeBases.documents.create(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n { name: 'x', text: 'x' },\n);\n\nconsole.log(document.message);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ndocument = client.knowledge_bases.documents.create(\n knowledge_base_id=\"knowledgeBaseId\",\n name=\"\",\n text=\"\",\n)\nprint(document)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\ndocument = client.knowledge_bases.documents.create(\n knowledge_base_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n name=\"x\",\n text=\"x\",\n)\n\nprint(document)" } ] }, @@ -2875,14 +2846,10 @@ } }, "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst document = await client.knowledgeBases.documents.update(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n { name: 'x', text: 'x' },\n);\n\nconsole.log(document.message);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ndocument = client.knowledge_bases.documents.update(\n knowledge_base_id=\"knowledgeBaseId\",\n name=\"\",\n text=\"\",\n)\nprint(document)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\ndocument = client.knowledge_bases.documents.update(\n knowledge_base_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n name=\"x\",\n text=\"x\",\n)\n\nprint(document)" } ] }, @@ -2967,14 +2934,10 @@ } }, "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst document = await client.knowledgeBases.documents.delete(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n { name: 'x' },\n);\n\nconsole.log(document.message);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ndocument = client.knowledge_bases.documents.delete(\n knowledge_base_id=\"knowledgeBaseId\",\n name=\"\",\n)\nprint(document)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\ndocument = client.knowledge_bases.documents.delete(\n knowledge_base_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n name=\"x\",\n)\n\nprint(document)" } ] } @@ -3061,14 +3024,10 @@ } }, "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst folder = await client.knowledgeBases.folders.create('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', {\n path: 'x',\n});\n\nconsole.log(folder.message);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nfolder = client.knowledge_bases.folders.create(\n knowledge_base_id=\"knowledgeBaseId\",\n path=\"\",\n)\nprint(folder)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nfolder = client.knowledge_bases.folders.create(\n knowledge_base_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n path=\"x\",\n)\n\nprint(folder)" } ] }, @@ -3153,42 +3112,101 @@ } }, "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst folder = await client.knowledgeBases.folders.delete('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', {\n path: 'x',\n});\n\nconsole.log(folder.message);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nfolder = client.knowledge_bases.folders.delete(\n knowledge_base_id=\"knowledgeBaseId\",\n path=\"\",\n recursive=False,\n)\nprint(folder)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nfolder = client.knowledge_bases.folders.delete(\n knowledge_base_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n path=\"x\",\n recursive=False,\n)\n\nprint(folder)" } ] } }, - "/v1/reports/query-fanouts": { - "post": { + "/v1/integrations": { + "get": { "tags": [ - "Reports" + "Integrations" ], - "summary": "Query Fanouts", - "operationId": "query_fanouts_v1_reports_query_fanouts_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/QueryFanoutsQuery" - } - } + "summary": "List Integrations", + "description": "List the organization's connected integrations.\n\nReturns every connected integration by default, each with its lifecycle\n`status`; pass `status_filter` to narrow to one status (e.g. `needs_reauth`).\nEach row's `integration_id` is the value a hub-backed node needs bound to it.", + "operationId": "list_integrations_v1_integrations_get", + "security": [ + { + "APIKeyHeader": [] }, - "required": true - }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "organization_id", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "description": "Organization scope for API keys that can access multiple organizations.", + "title": "Organization Id" + }, + "description": "Organization scope for API keys that can access multiple organizations." + }, + { + "name": "provider", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Filter to a single connector/provider id, e.g. `google_drive`.", + "title": "Provider" + }, + "description": "Filter to a single connector/provider id, e.g. `google_drive`." + }, + { + "name": "status_filter", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "enum": [ + "active", + "pending", + "needs_reauth", + "revoking", + "revoked" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Filter to one lifecycle status. Omitted returns all statuses.", + "title": "Status Filter" + }, + "description": "Filter to one lifecycle status. Omitted returns all statuses." + } + ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Response" + "$ref": "#/components/schemas/IntegrationsResponse" } } } @@ -3203,52 +3221,110 @@ } } } - }, - "security": [ - { + } + } + }, + "/v1/documents": { + "get": { + "tags": [ + "Documents" + ], + "summary": "List documents", + "description": "List documents visible to your organization, newest-modified-first.\n\nDocuments are ordered by last-modified time, most recent first, with no other\nsort option. This is a walk over a live, mutable collection: a document created\nor modified while you are paging can shift which page it lands on, so a single\nwalk may show it to you twice or, rarely, skip it.\n\nThis response never includes a total count. Upstream counts totals before\napplying your organization's access filter, so a total, or treating a short\npage as the last one, would misreport what you can actually see. Keep\nfollowing `pagination.next_cursor` until it comes back null — that, and not\na short or even an empty page, is the end of the walk. A page whose rows the\naccess filter removed entirely is empty while later pages still hold\ndocuments, so the last page of a walk may legitimately be an empty one.", + "operationId": "list_documents_v1_documents_get", + "security": [ + { "APIKeyHeader": [] }, { "BearerAuth": [] } ], - "x-codeSamples": [ + "parameters": [ { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst reportResponse = await client.reports.queryFanouts({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n metrics: ['fanouts_per_execution'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(reportResponse.data);" + "name": "organization_id", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "ID of the organization whose documents to list. Required. The caller must be a member of this organization.", + "title": "Organization Id" + }, + "description": "ID of the organization whose documents to list. Required. The caller must be a member of this organization." }, { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nquery_fanout = client.reports.query_fanouts.v1_reports_post(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nprint(query_fanout)" - } - ] - } - }, - "/v1/reports/shopping/visibility": { - "post": { - "tags": [ - "Reports" - ], - "summary": "Shopping Visibility", - "operationId": "shopping_visibility_v1_reports_shopping_visibility_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ShoppingVisibilityQuery" - } + "name": "q", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Filter to documents whose name contains this text, case-insensitively. Matches only the document's name, never its content — a query that finds nothing does not mean the topic is unwritten, only that no title mentions it. Blank or omitted returns every document. Ignored when sent alongside `next_cursor`, which carries the filter the walk started with. Matching is name-only as of this release; broader matching may follow if upstream changes how it indexes the name column.", + "title": "Q" + }, + "description": "Filter to documents whose name contains this text, case-insensitively. Matches only the document's name, never its content — a query that finds nothing does not mean the topic is unwritten, only that no title mentions it. Blank or omitted returns every document. Ignored when sent alongside `next_cursor`, which carries the filter the walk started with. Matching is name-only as of this release; broader matching may follow if upstream changes how it indexes the name column." + }, + { + "name": "sort", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Documents are always ordered newest-modified-first (`updated_at DESC`, then `created_at DESC`, then `id DESC`); there is no parameter that changes this. `recency` is the only accepted value, and passing it is a no-op that names the guarantee rather than altering it — any other value is rejected outright rather than silently ignored. Ordering is never re-applied to a returned page either: that would only be consistent within the page, not across a paginated walk.", + "title": "Sort" + }, + "description": "Documents are always ordered newest-modified-first (`updated_at DESC`, then `created_at DESC`, then `id DESC`); there is no parameter that changes this. `recency` is the only accepted value, and passing it is a no-op that names the guarantee rather than altering it — any other value is rejected outright rather than silently ignored. Ordering is never re-applied to a returned page either: that would only be consistent within the page, not across a paginated walk." + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 50, + "exclusiveMinimum": 0, + "default": 20, + "title": "Limit" } }, - "required": true - }, + { + "name": "next_cursor", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Cursor" + } + } + ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ShoppingRowsResponse" + "$ref": "#/components/schemas/ListDocumentsResponse" } } } @@ -3263,7 +3339,15 @@ } } } - }, + } + }, + "post": { + "tags": [ + "Documents" + ], + "summary": "Create a document", + "description": "Create a Profound document with markdown content.\n\n`organization_id` is required and you must be a member of it. You choose the\ndocument's `id`, and creation is idempotent on it: repeating the request returns\nthe existing document rather than creating a second one.\n\nNew documents are visible only to their creator; share them from the Profound app,\nor open one with the `url` in the response.\n\nA `201` response does not confirm that a new document was created: it is also\nreturned when `id` already existed, in which case the existing document comes\nback unchanged. Upstream gives no signal to tell the two apart, so this endpoint\ndoes not claim to either — it is safe to retry with the same `id` either way.", + "operationId": "create_document_v1_documents_post", "security": [ { "APIKeyHeader": [] @@ -3272,43 +3356,24 @@ "BearerAuth": [] } ], - "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.shopping.visibility({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.data);" - }, - { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nshopping = client.reports.shopping.visibility(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n date_interval=\"day\",\n include_count=False,\n tag_filter_type=\"any\",\n include_no_tag=False,\n exclude_topic_ids=False,\n include_asset_only=False,\n rank_by=\"visibility_score\",\n include_position_frequency=False,\n)\nprint(shopping)" - } - ] - } - }, - "/v1/reports/shopping/item-visibility": { - "post": { - "tags": [ - "Reports" - ], - "summary": "Shopping Item Visibility", - "operationId": "shopping_item_visibility_v1_reports_shopping_item_visibility_post", "requestBody": { + "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ShoppingItemVisibilityQuery" + "$ref": "#/components/schemas/CreateDocumentRequest", + "description": "The document to create." } } - }, - "required": true + } }, "responses": { - "200": { + "201": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ShoppingRowsResponse" + "$ref": "#/components/schemas/CreateDocumentResponse" } } } @@ -3323,7 +3388,17 @@ } } } - }, + } + } + }, + "/v1/documents/{document_id}": { + "get": { + "tags": [ + "Documents" + ], + "summary": "Read a document", + "description": "Read a document: its metadata, its default tab's body, its other tabs, its comments, and its version hash.\n\nYou can read any document you have access to in the Profound app, including ones\ncreated there rather than through this API.\n\nBy default this is a preview: the body is truncated to save your context, and the\nversion hash is withheld so a preview alone can never be used to replace a document\nblindly. Pass `preview=false` when you intend to write.", + "operationId": "read_document_v1_documents__document_id__get", "security": [ { "APIKeyHeader": [] @@ -3332,43 +3407,75 @@ "BearerAuth": [] } ], - "x-codeSamples": [ + "parameters": [ { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.shopping.itemVisibility({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.data);" + "name": "document_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "ID of the document.", + "title": "Document Id" + }, + "description": "ID of the document." }, { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nshopping = client.reports.shopping.item_visibility(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n date_interval=\"day\",\n include_count=False,\n tag_filter_type=\"any\",\n include_no_tag=False,\n exclude_topic_ids=False,\n merchant_filter_type=\"any\",\n include_competitors=False,\n competitor_limit=5,\n include_position_frequency=False,\n)\nprint(shopping)" + "name": "organization_id", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "ID of the organization that owns the document. Required — Profound API keys are user-scoped, so the owning organization must be named explicitly. The caller must be a member of this organization.", + "title": "Organization Id" + }, + "description": "ID of the organization that owns the document. Required — Profound API keys are user-scoped, so the owning organization must be named explicitly. The caller must be a member of this organization." + }, + { + "name": "include_tabs", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "description": "Include the document's other tabs. On by default — a tab body is part of the document, not an aside. Off, `additional_tabs` is omitted from the response rather than returned as an empty list.", + "default": true, + "title": "Include Tabs" + }, + "description": "Include the document's other tabs. On by default — a tab body is part of the document, not an aside. Off, `additional_tabs` is omitted from the response rather than returned as an empty list." + }, + { + "name": "include_comments", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "description": "Include the document's review comments, each mapped to `{content, context}`. On by default — a comment is part of the document's review state, not an aside. Turn it off to skip the comment-thread walk upstream; off, `comments` is omitted from the response rather than returned as an empty list.", + "default": true, + "title": "Include Comments" + }, + "description": "Include the document's review comments, each mapped to `{content, context}`. On by default — a comment is part of the document's review state, not an aside. Turn it off to skip the comment-thread walk upstream; off, `comments` is omitted from the response rather than returned as an empty list." + }, + { + "name": "preview", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "description": "Bound every body in the response — `content_markdown` and each tab's — and set `content_truncated` if any was cut. On by default. Upstream has no partial-read of its own — every read is a full round trip through the collaborative editor — so this saves your context, not upstream cost. A preview read also omits `version_hash`, on purpose: a hash returned next to a body you have not fully seen invites replacing content you never read. Pass `preview=false` before you intend to write, to get the whole body, `content_truncated: false`, and the hash.", + "default": true, + "title": "Preview" + }, + "description": "Bound every body in the response — `content_markdown` and each tab's — and set `content_truncated` if any was cut. On by default. Upstream has no partial-read of its own — every read is a full round trip through the collaborative editor — so this saves your context, not upstream cost. A preview read also omits `version_hash`, on purpose: a hash returned next to a body you have not fully seen invites replacing content you never read. Pass `preview=false` before you intend to write, to get the whole body, `content_truncated: false`, and the hash." } - ] - } - }, - "/v1/reports/shopping/merchant-distribution": { - "post": { - "tags": [ - "Reports" ], - "summary": "Shopping Merchant Distribution", - "operationId": "shopping_merchant_distribution_v1_reports_shopping_merchant_distribution_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ShoppingMerchantDistributionQuery" - } - } - }, - "required": true - }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ShoppingRowsResponse" + "$ref": "#/components/schemas/ReadDocumentResponse" } } } @@ -3383,7 +3490,15 @@ } } } - }, + } + }, + "patch": { + "tags": [ + "Documents" + ], + "summary": "Rename or reshare a document", + "description": "Rename a document, change who can see it, or both in one call.\n\nRenaming sets a permanent lock on the title, and changing visibility can silently\nchange who has access — see the `name` and `visibility` field descriptions for what\neach one does before you use it.\n\nRenaming needs edit access; changing visibility is creator-only, and upstream\nenforces it. You can act on a document this API created, or one you created\nyourself in the Profound app — not one merely shared with you.", + "operationId": "patch_document_v1_documents__document_id__patch", "security": [ { "APIKeyHeader": [] @@ -3392,35 +3507,30 @@ "BearerAuth": [] } ], - "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.shopping.merchantDistribution({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.data);" - }, + "parameters": [ { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nshopping = client.reports.shopping.merchant_distribution(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n date_interval=\"day\",\n include_count=False,\n tag_filter_type=\"any\",\n include_no_tag=False,\n exclude_topic_ids=False,\n)\nprint(shopping)" + "name": "document_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "ID of the document.", + "title": "Document Id" + }, + "description": "ID of the document." } - ] - } - }, - "/v1/reports/shopping/merchant-visibility-by-brand": { - "post": { - "tags": [ - "Reports" ], - "summary": "Shopping Merchant Visibility By Brand", - "operationId": "shopping_merchant_visibility_by_brand_v1_reports_shopping_merchant_visibility_by_brand_post", "requestBody": { + "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ShoppingMerchantVisibilityByBrandQuery" + "$ref": "#/components/schemas/UpdateDocumentRequest", + "description": "The fields to change." } } - }, - "required": true + } }, "responses": { "200": { @@ -3428,7 +3538,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ShoppingRowsResponse" + "$ref": "#/components/schemas/Document" } } } @@ -3443,7 +3553,15 @@ } } } - }, + } + }, + "delete": { + "tags": [ + "Documents" + ], + "summary": "Delete a document", + "description": "Delete a document created through this integration.\n\nOnly documents created through this integration can be deleted here. A document\ncreated in the Profound app can never be deleted through this route, even by the\nperson who owns it — creation provenance is stamped once, at creation, and is never\nbackfilled onto documents made another way.\n\nThe delete is soft: the row is marked deleted at the storage layer rather than\ndestroyed. There is no restore through this API, or any other — treat a delete as\nfinal even though the data itself is not gone.\n\nA 404 means the document is not visible to you at all. It covers three cases the\nresponse does not distinguish, on purpose: the document never existed, it was\nalready deleted by an earlier call to this same route, or it exists but your\ncredential resolves no role on it. Deleting the same document twice returns 404 on\nthe second call, not a second 204.\n\nA 403 means the opposite: the document is visible to you but not deletable here,\nand the message says which rule refused — it was not created through this\nintegration, or you are not its creator. Deleting is creator-only, so edit access\nis not enough to remove a document out from under its owner.", + "operationId": "delete_document_v1_documents__document_id__delete", "security": [ { "APIKeyHeader": [] @@ -3452,35 +3570,89 @@ "BearerAuth": [] } ], - "x-codeSamples": [ + "parameters": [ { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.shopping.merchantVisibilityByBrand({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.data);" + "name": "document_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "ID of the document.", + "title": "Document Id" + }, + "description": "ID of the document." }, { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nshopping = client.reports.shopping.merchant_visibility_by_brand(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n date_interval=\"day\",\n include_count=False,\n tag_filter_type=\"any\",\n include_no_tag=False,\n exclude_topic_ids=False,\n include_brand_only=False,\n)\nprint(shopping)" + "name": "organization_id", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "ID of the organization that owns the document. You must be a member of it.", + "title": "Organization Id" + }, + "description": "ID of the organization that owns the document. You must be a member of it." } - ] + ], + "responses": { + "204": { + "description": "Successful Response" + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } } }, - "/v1/reports/shopping/merchant-by-items": { + "/v1/documents/{document_id}/content": { "post": { "tags": [ - "Reports" + "Documents" + ], + "summary": "Replace a document's content", + "description": "Overwrite a document's entire body with new markdown, replacing what it held before.\n\nThis is a whole-body replace, not a patch: send the complete new text every time. An\nempty `content_markdown` is valid and clears the document.\n\nTwo destructive side effects apply on every call, regardless of what you send:\n\n- The document collapses to its default tab. Every non-default tab is deleted, and\n the comments map is cleared for **all** tabs, including the default one — a\n document with a live comment thread on any tab loses it.\n- `skip_title_sync` defaults to `false`, matching the Profound app: the title follows\n the new content's first heading, so a replace silently renames the document unless\n the heading matches the current title or `skip_title_sync` is set.\n\nThere is no compare-and-swap: this call does not accept a precondition, and nothing\nstops two concurrent replaces from silently overwriting each other last-writer-wins.\nUpstream's own `version_hash` documentation says as much — the token is \"still a\nchange detector rather than a precondition: a caller must not treat a matching token\nas licence to overwrite blindly, because it names the room at a moment cortex\nobserved and not the moment its own write lands.\" Sending a `working_version_hash`\n(or any spelling of it) is rejected with a `400` naming this rather than accepted\nand silently discarded, which is what happens on the upstream route this wraps.\n\nYou can replace a document this API created, or one you created yourself directly —\nnot merely one shared with you.", + "operationId": "replace_document_content_v1_documents__document_id__content_post", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "document_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "ID of the document.", + "title": "Document Id" + }, + "description": "ID of the document." + } ], - "summary": "Shopping Merchant By Items", - "operationId": "shopping_merchant_by_items_v1_reports_shopping_merchant_by_items_post", "requestBody": { + "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ShoppingMerchantByItemsQuery" + "$ref": "#/components/schemas/ReplaceDocumentContentRequest", + "description": "The content to write." } } - }, - "required": true + } }, "responses": { "200": { @@ -3488,7 +3660,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ShoppingRowsResponse" + "$ref": "#/components/schemas/ReplaceDocumentContentResponse" } } } @@ -3503,7 +3675,17 @@ } } } - }, + } + } + }, + "/v1/ads/openai-ads/ad-account/insights": { + "get": { + "tags": [ + "OpenAI Ads" + ], + "summary": "Get Account Insights", + "description": "Get ad account insights for the organization's OpenAI Ads partner brand.\n\n`aggregation_level=campaign` returns one row per campaign (with `campaign_id`\n/ `campaign_name` and all metrics), so every campaign's insights come back in\na single call; `time_granularity=daily` gives per-day rows (e.g. daily spend).", + "operationId": "get_account_insights_v1_ads_openai_ads_ad_account_insights_get", "security": [ { "APIKeyHeader": [] @@ -3512,43 +3694,159 @@ "BearerAuth": [] } ], - "x-codeSamples": [ + "parameters": [ { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.shopping.merchantByItems({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.data);" + "name": "organization_id", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "description": "Organization scope for API keys that can access multiple organizations.", + "title": "Organization Id" + }, + "description": "Organization scope for API keys that can access multiple organizations." }, { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nshopping = client.reports.shopping.merchant_by_items(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n date_interval=\"day\",\n include_count=False,\n tag_filter_type=\"any\",\n include_no_tag=False,\n exclude_topic_ids=False,\n)\nprint(shopping)" + "name": "aggregation_level", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "enum": [ + "ad_account", + "campaign", + "ad_group", + "ad" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Row entity for the insights breakdown. `campaign` returns one row per campaign.", + "title": "Aggregation Level" + }, + "description": "Row entity for the insights breakdown. `campaign` returns one row per campaign." + }, + { + "name": "time_granularity", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "enum": [ + "hourly", + "daily", + "monthly", + "none" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Time bucket for the rows; `none` or omitted returns totals over the whole range.", + "title": "Time Granularity" + }, + "description": "Time bucket for the rows; `none` or omitted returns totals over the whole range." + }, + { + "name": "time_ranges[]", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ], + "description": "Time ranges as JSON objects, e.g. `{\"type\": \"date_range\", \"since\": \"2026-07-01\", \"until\": \"2026-07-18\"}`.", + "title": "Time Ranges[]" + }, + "description": "Time ranges as JSON objects, e.g. `{\"type\": \"date_range\", \"since\": \"2026-07-01\", \"until\": \"2026-07-18\"}`." + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer", + "maximum": 2000, + "minimum": 1 + }, + { + "type": "null" + } + ], + "description": "Maximum rows to return.", + "title": "Limit" + }, + "description": "Maximum rows to return." + }, + { + "name": "after", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Return items after this ID (forward pagination).", + "title": "After" + }, + "description": "Return items after this ID (forward pagination)." + }, + { + "name": "before", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Return items before this ID (backward pagination).", + "title": "Before" + }, + "description": "Return items before this ID (backward pagination)." } - ] - } - }, - "/v1/reports/shopping/all-items-with-merchants": { - "post": { - "tags": [ - "Reports" ], - "summary": "Shopping All Items With Merchants", - "operationId": "shopping_all_items_with_merchants_v1_reports_shopping_all_items_with_merchants_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ShoppingAllItemsWithMerchantsQuery" - } - } - }, - "required": true - }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ShoppingRowsResponse" + "$ref": "#/components/schemas/InsightsResponse" } } } @@ -3563,7 +3861,16 @@ } } } - }, + } + } + }, + "/v1/projects": { + "get": { + "tags": [ + "Projects" + ], + "summary": "List Projects", + "operationId": "list_projects_v1_projects_get", "security": [ { "APIKeyHeader": [] @@ -3572,43 +3879,68 @@ "BearerAuth": [] } ], - "x-codeSamples": [ + "parameters": [ { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.shopping.allItemsWithMerchants({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.data);" + "name": "category_id", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Category that owns the project.", + "title": "Category Id" + }, + "description": "Category that owns the project." }, { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nshopping = client.reports.shopping.all_items_with_merchants(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n date_interval=\"day\",\n include_count=False,\n tag_filter_type=\"any\",\n include_no_tag=False,\n exclude_topic_ids=False,\n merchant_filter_type=\"any\",\n rank_by=\"visibility\",\n sort_order=\"desc\",\n)\nprint(shopping)" - } - ] - } - }, - "/v1/reports/shopping/trigger-rate": { - "post": { - "tags": [ - "Reports" - ], - "summary": "Shopping Trigger Rate", - "operationId": "shopping_trigger_rate_v1_reports_shopping_trigger_rate_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ShoppingTriggerRateQuery" - } + "name": "status", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Comma-separated project statuses: suggested, tracked, retired.", + "title": "Status" + }, + "description": "Comma-separated project statuses: suggested, tracked, retired." + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 200, + "minimum": 1, + "default": 100, + "title": "Limit" } }, - "required": true - }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 0, + "default": 0, + "title": "Offset" + } + } + ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ShoppingRowsResponse" + "$ref": "#/components/schemas/ListProjectsResponse" } } } @@ -3623,7 +3955,14 @@ } } } - }, + } + }, + "post": { + "tags": [ + "Projects" + ], + "summary": "Create Project", + "operationId": "create_project_v1_projects_post", "security": [ { "APIKeyHeader": [] @@ -3632,43 +3971,23 @@ "BearerAuth": [] } ], - "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.shopping.triggerRate({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.data);" - }, - { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nshopping = client.reports.shopping.trigger_rate(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n date_interval=\"day\",\n include_count=False,\n tag_filter_type=\"any\",\n include_no_tag=False,\n exclude_topic_ids=False,\n)\nprint(shopping)" - } - ] - } - }, - "/v1/reports/shopping/merchant-share": { - "post": { - "tags": [ - "Reports" - ], - "summary": "Shopping Merchant Share", - "operationId": "shopping_merchant_share_v1_reports_shopping_merchant_share_post", "requestBody": { + "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ShoppingMerchantShareQuery" + "$ref": "#/components/schemas/CreateProjectRequest" } } - }, - "required": true + } }, "responses": { - "200": { + "202": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ShoppingRowsResponse" + "$ref": "#/components/schemas/ProjectGenerationResponse" } } } @@ -3683,7 +4002,16 @@ } } } - }, + } + } + }, + "/v1/projects/generations": { + "get": { + "tags": [ + "Projects" + ], + "summary": "List Project Generations", + "operationId": "list_project_generations_v1_projects_generations_get", "security": [ { "APIKeyHeader": [] @@ -3692,43 +4020,68 @@ "BearerAuth": [] } ], - "x-codeSamples": [ + "parameters": [ { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.shopping.merchantShare({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.data);" + "name": "category_id", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Category that owns the project.", + "title": "Category Id" + }, + "description": "Category that owns the project." }, { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nshopping = client.reports.shopping.merchant_share(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n date_interval=\"day\",\n include_count=False,\n tag_filter_type=\"any\",\n include_no_tag=False,\n exclude_topic_ids=False,\n)\nprint(shopping)" - } - ] - } - }, - "/v1/reports/shopping/product-merchant-urls": { - "post": { - "tags": [ - "Reports" - ], - "summary": "Shopping Product Merchant Urls", - "operationId": "shopping_product_merchant_urls_v1_reports_shopping_product_merchant_urls_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ShoppingProductMerchantUrlsQuery" - } + "name": "status", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Comma-separated generation statuses: queued, running, completed, failed.", + "title": "Status" + }, + "description": "Comma-separated generation statuses: queued, running, completed, failed." + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 200, + "minimum": 1, + "default": 100, + "title": "Limit" } }, - "required": true - }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 0, + "default": 0, + "title": "Offset" + } + } + ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ShoppingRowsResponse" + "$ref": "#/components/schemas/ListProjectGenerationsResponse" } } } @@ -3743,7 +4096,16 @@ } } } - }, + } + } + }, + "/v1/projects/generations/{run_id}": { + "get": { + "tags": [ + "Projects" + ], + "summary": "Get Project Generation Status", + "operationId": "get_project_generation_status_v1_projects_generations__run_id__get", "security": [ { "APIKeyHeader": [] @@ -3752,43 +4114,39 @@ "BearerAuth": [] } ], - "x-codeSamples": [ + "parameters": [ { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.shopping.productMerchantURLs({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n product_names: ['string'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.data);" + "name": "run_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Unique project generation run ID.", + "title": "Run Id" + }, + "description": "Unique project generation run ID." }, { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nshopping = client.reports.shopping.product_merchant_urls(\n category_id=\"\",\n product_names=[],\n start_date=\"\",\n end_date=\"\",\n)\nprint(shopping)" + "name": "category_id", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Category that owns the project.", + "title": "Category Id" + }, + "description": "Category that owns the project." } - ] - } - }, - "/v1/reports/shopping/executions": { - "post": { - "tags": [ - "Reports" ], - "summary": "Shopping Executions", - "operationId": "shopping_executions_v1_reports_shopping_executions_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ShoppingExecutionsQuery" - } - } - }, - "required": true - }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ShoppingRowsResponse" + "$ref": "#/components/schemas/ProjectGenerationStatusResponse" } } } @@ -3803,36 +4161,16 @@ } } } - }, - "security": [ - { - "APIKeyHeader": [] - }, - { - "BearerAuth": [] - } - ], - "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.shopping.executions({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: '2019-12-27T18:11:19.117Z',\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(response.data);" - }, - { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nshopping = client.reports.shopping.executions(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n date_interval=\"day\",\n include_count=False,\n tag_filter_type=\"any\",\n include_no_tag=False,\n exclude_topic_ids=False,\n analysis_filter_type=\"any\",\n)\nprint(shopping)" - } - ] + } } }, - "/v1/agents": { + "/v1/projects/{project_id}": { "get": { "tags": [ - "Agents" + "Projects" ], - "summary": "List agents", - "description": "List agents available to your organization.\n\nAgent status reflects whether an agent has ever been published. `published`\nagents have a live published version. `draft` agents have not been\npublished yet.", - "operationId": "list_agents_v1_agents_get", + "summary": "Get Project", + "operationId": "get_project_v1_projects__project_id__get", "security": [ { "APIKeyHeader": [] @@ -3843,53 +4181,28 @@ ], "parameters": [ { - "name": "statuses", - "in": "query", - "required": false, + "name": "project_id", + "in": "path", + "required": true, "schema": { - "anyOf": [ - { - "type": "array", - "items": { - "$ref": "#/components/schemas/ListAgentsStatusFilter" - } - }, - { - "type": "null" - } - ], - "description": "Optional status filter. Use `published` to list agents that have a live published version, or `draft` to list agents that have not been published yet. Defaults to `published`.", - "title": "Statuses" + "type": "string", + "format": "uuid", + "description": "Unique project ID.", + "title": "Project Id" }, - "description": "Optional status filter. Use `published` to list agents that have a live published version, or `draft` to list agents that have not been published yet. Defaults to `published`." - }, - { - "name": "limit", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "maximum": 100, - "exclusiveMinimum": 0, - "default": 100, - "title": "Limit" - } + "description": "Unique project ID." }, { - "name": "next_cursor", + "name": "category_id", "in": "query", - "required": false, + "required": true, "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Next Cursor" - } + "type": "string", + "format": "uuid", + "description": "Category that owns the project.", + "title": "Category Id" + }, + "description": "Category that owns the project." } ], "responses": { @@ -3898,7 +4211,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ListAgentsResponse" + "$ref": "#/components/schemas/ProjectDetailResponse" } } } @@ -3913,26 +4226,14 @@ } } } - }, - "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst agents = await client.agents.list();\n\nconsole.log(agents.data);" - }, - { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nagent = client.agents.list(\n limit=100,\n)\nprint(agent)" - } - ] + } }, - "post": { + "delete": { "tags": [ - "Agents" + "Projects" ], - "summary": "Create an agent", - "description": "Create a new draft agent owned by the given organization.\n\n`organization_id` is required and you must be a member of it. The agent is created\nas a `draft`; publish it with `POST /v1/agents/{agent_id}/publish` once its graph\nis ready.", - "operationId": "create_agent_v1_agents_post", + "summary": "Delete Project", + "operationId": "delete_project_v1_projects__project_id__delete", "security": [ { "APIKeyHeader": [] @@ -3941,27 +4242,35 @@ "BearerAuth": [] } ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateAgentRequest", - "description": "The agent to create." - } - } + "parameters": [ + { + "name": "project_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Unique project ID.", + "title": "Project Id" + }, + "description": "Unique project ID." + }, + { + "name": "category_id", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Category that owns the project.", + "title": "Category Id" + }, + "description": "Category that owns the project." } - }, + ], "responses": { - "201": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Agent" - } - } - } + "204": { + "description": "Successful Response" }, "422": { "description": "Validation Error", @@ -3973,28 +4282,16 @@ } } } - }, - "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst agent = await client.agents.create({\n name: 'x',\n organization_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n});\n\nconsole.log(agent.id);" - }, - { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nagent = client.agents.create_v1_post(\n organization_id=\"\",\n name=\"\",\n)\nprint(agent)" - } - ] + } } }, - "/v1/agents/{agent_id}/publish": { - "post": { + "/v1/projects/{project_id}/status": { + "get": { "tags": [ - "Agents" + "Projects" ], - "summary": "Publish an agent", - "description": "Publish an agent's latest draft as its live published version.\n\nYou must be a member of the agent's organization. Publishing promotes the current\ndraft graph to a new published version. A draft that cannot produce its declared\ninput/output contract is rejected with `422` and is not published.", - "operationId": "publish_agent_v1_agents__agent_id__publish_post", + "summary": "Get Project Status", + "operationId": "get_project_status_v1_projects__project_id__status_get", "security": [ { "APIKeyHeader": [] @@ -4005,25 +4302,37 @@ ], "parameters": [ { - "name": "agent_id", + "name": "project_id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid", - "description": "The ID of the agent to publish.", - "title": "Agent Id" + "description": "Unique project ID.", + "title": "Project Id" }, - "description": "The ID of the agent to publish." + "description": "Unique project ID." + }, + { + "name": "category_id", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Category that owns the project.", + "title": "Category Id" + }, + "description": "Category that owns the project." } ], "responses": { - "201": { + "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Agent" + "$ref": "#/components/schemas/ProjectStatusResponse" } } } @@ -4038,35 +4347,74 @@ } } } - }, - "x-codeSamples": [ + } + } + }, + "/v1/projects/{project_id}/archive": { + "post": { + "tags": [ + "Projects" + ], + "summary": "Archive Project", + "operationId": "archive_project_v1_projects__project_id__archive_post", + "security": [ { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.publish('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');\n\nconsole.log(response.id);" + "APIKeyHeader": [] }, { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nagent = client.agents.publish_v1_id_publish_post(\n agent_id=\"agentId\",\n)\nprint(agent)" + "BearerAuth": [] } - ] - } - }, - "/v1/agents/node-types": { - "get": { - "tags": [ - "Agents" ], - "summary": "List node types", - "description": "List the node types available for building agents.\n\nThe set is deterministic and does not depend on the caller, so the response\nis safe to cache across sessions. Integration-dependent and dynamic-schema\nnode types are intentionally excluded in v1.", - "operationId": "list_node_types_v1_agents_node_types_get", + "parameters": [ + { + "name": "project_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Unique project ID.", + "title": "Project Id" + }, + "description": "Unique project ID." + }, + { + "name": "category_id", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Category that owns the project.", + "title": "Category Id" + }, + "description": "Category that owns the project." + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/ArchiveProjectRequest" + }, + { + "type": "null" + } + ], + "title": "Body" + } + } + } + }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ListNodeTypesResponse" + "$ref": "#/components/schemas/ProjectResponse" } } } @@ -4081,36 +4429,16 @@ } } } - }, - "security": [ - { - "APIKeyHeader": [] - }, - { - "BearerAuth": [] - } - ], - "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst nodeTypes = await client.agents.nodeTypes.list();\n\nconsole.log(nodeTypes.data);" - }, - { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nnode_type = client.agents.node_types.list_v1_agents_get()\nprint(node_type)" - } - ] + } } }, - "/v1/agents/node-types/{node_type}/schema": { - "get": { + "/v1/projects/{project_id}/unarchive": { + "post": { "tags": [ - "Agents" + "Projects" ], - "summary": "Get a node type schema", - "description": "Retrieve the JSON schema and worked examples for a single node type.\n\nThe `schema` field is an opaque JSON Schema for the node's configuration.\nUse `schema_version` as a cache key — it bumps whenever the schema changes.", - "operationId": "get_node_type_schema_v1_agents_node_types__node_type__schema_get", + "summary": "Unarchive Project", + "operationId": "unarchive_project_v1_projects__project_id__unarchive_post", "security": [ { "APIKeyHeader": [] @@ -4121,15 +4449,28 @@ ], "parameters": [ { - "name": "node_type", + "name": "project_id", "in": "path", "required": true, "schema": { "type": "string", - "description": "The node type to fetch the schema for, e.g. `llm`.", - "title": "Node Type" + "format": "uuid", + "description": "Unique project ID.", + "title": "Project Id" }, - "description": "The node type to fetch the schema for, e.g. `llm`." + "description": "Unique project ID." + }, + { + "name": "category_id", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Category that owns the project.", + "title": "Category Id" + }, + "description": "Category that owns the project." } ], "responses": { @@ -4138,7 +4479,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NodeSchemaResponse" + "$ref": "#/components/schemas/ProjectResponse" } } } @@ -4153,28 +4494,16 @@ } } } - }, - "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.nodeTypes.retrieveSchema('node_type');\n\nconsole.log(response.node_type);" - }, - { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nnode_type = client.agents.node_types.list_schema_v1_agents_schema_get(\n node_type=\"nodeType\",\n)\nprint(node_type)" - } - ] + } } }, - "/v1/agents/{agent_id}": { + "/v1/projects/{project_id}/tasks": { "get": { "tags": [ - "Agents" + "Projects" ], - "summary": "Get an agent", - "description": "Retrieve an agent and its schema details.\n\nAgents can have both a live published version and a draft version with newer\nunpublished changes. Use the `version` parameter to choose which state to return.", - "operationId": "get_agent_v1_agents__agent_id__get", + "summary": "List Project Tasks", + "operationId": "list_project_tasks_v1_projects__project_id__tasks_get", "security": [ { "APIKeyHeader": [] @@ -4185,26 +4514,28 @@ ], "parameters": [ { - "name": "agent_id", + "name": "project_id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid", - "description": "The ID of the agent to retrieve.", - "title": "Agent Id" + "description": "Unique project ID.", + "title": "Project Id" }, - "description": "The ID of the agent to retrieve." + "description": "Unique project ID." }, { - "name": "version", + "name": "category_id", "in": "query", - "required": false, + "required": true, "schema": { - "$ref": "#/components/schemas/AgentVersion", - "description": "Version of the agent to retrieve. Use `published` for the live version, or `draft` for the latest unpublished changes for the same agent. Defaults to `published`." + "type": "string", + "format": "uuid", + "description": "Category that owns the project.", + "title": "Category Id" }, - "description": "Version of the agent to retrieve. Use `published` for the live version, or `draft` for the latest unpublished changes for the same agent. Defaults to `published`." + "description": "Category that owns the project." } ], "responses": { @@ -4213,7 +4544,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentDetail" + "$ref": "#/components/schemas/ListProjectTasksResponse" } } } @@ -4228,26 +4559,14 @@ } } } - }, - "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst agent = await client.agents.retrieve('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');\n\nconsole.log(agent.id);" - }, - { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nagent = client.agents.retrieve(\n agent_id=\"agentId\",\n)\nprint(agent)" - } - ] + } }, - "patch": { + "post": { "tags": [ - "Agents" + "Projects" ], - "summary": "Update an agent", - "description": "Update an agent's draft graph in place.\n\nYou must be a member of the agent's organization. The agent's draft is replaced with the\nsupplied graph and re-validated, so you can iterate one draft — create, then update per\nfix — instead of creating a new agent on every change. The response carries the updated\n`validation`; publish with `POST /v1/agents/{agent_id}/publish` once `validation.valid`.", - "operationId": "update_agent_v1_agents__agent_id__patch", + "summary": "Create Project Task", + "operationId": "create_project_task_v1_projects__project_id__tasks_post", "security": [ { "APIKeyHeader": [] @@ -4258,16 +4577,28 @@ ], "parameters": [ { - "name": "agent_id", + "name": "project_id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid", - "description": "The ID of the agent to update.", - "title": "Agent Id" + "description": "Unique project ID.", + "title": "Project Id" }, - "description": "The ID of the agent to update." + "description": "Unique project ID." + }, + { + "name": "category_id", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Category that owns the project.", + "title": "Category Id" + }, + "description": "Category that owns the project." } ], "requestBody": { @@ -4275,19 +4606,18 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateAgentRequest", - "description": "The new draft graph for the agent." + "$ref": "#/components/schemas/CreateProjectTaskRequest" } } } }, "responses": { - "200": { + "201": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentDetail" + "$ref": "#/components/schemas/ProjectTaskResponse" } } } @@ -4302,28 +4632,16 @@ } } } - }, - "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst agent = await client.agents.update('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', {\n graph: { foo: 'bar' },\n});\n\nconsole.log(agent.id);" - }, - { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nagent = client.agents.update_v1_id_patch(\n agent_id=\"agentId\",\n graph={},\n)\nprint(agent)" - } - ] + } } }, - "/v1/agents/{agent_id}/graph": { + "/v1/projects/{project_id}/tasks/{task_id}": { "get": { "tags": [ - "Agents" + "Projects" ], - "summary": "Get an agent's graph", - "description": "Retrieve an agent's full workflow graph (`{nodes, edges}`).\n\nThe graph is returned verbatim in the canonical dialect — the same shape `POST /v1/agents`\nand `PATCH /v1/agents/{agent_id}` accept — so a known-good agent can be read back, copied,\nand edited. Tool-backed nodes appear in their lowered `tool` form rather than the friendly\nv1 node types. A `draft` is visible only to its creator; the `published` version is visible\nacross its organization.", - "operationId": "get_agent_graph_v1_agents__agent_id__graph_get", + "summary": "Get Project Task", + "operationId": "get_project_task_v1_projects__project_id__tasks__task_id__get", "security": [ { "APIKeyHeader": [] @@ -4334,26 +4652,40 @@ ], "parameters": [ { - "name": "agent_id", + "name": "project_id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid", - "description": "The ID of the agent whose graph to retrieve.", - "title": "Agent Id" + "description": "Unique project ID.", + "title": "Project Id" }, - "description": "The ID of the agent whose graph to retrieve." + "description": "Unique project ID." }, { - "name": "version", + "name": "task_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Unique project task ID.", + "title": "Task Id" + }, + "description": "Unique project task ID." + }, + { + "name": "category_id", "in": "query", - "required": false, + "required": true, "schema": { - "$ref": "#/components/schemas/AgentVersion", - "description": "Version of the agent whose graph to retrieve. Use `published` for the live version, or `draft` for the latest unpublished changes. Defaults to `published`." + "type": "string", + "format": "uuid", + "description": "Category that owns the project.", + "title": "Category Id" }, - "description": "Version of the agent whose graph to retrieve. Use `published` for the live version, or `draft` for the latest unpublished changes. Defaults to `published`." + "description": "Category that owns the project." } ], "responses": { @@ -4362,7 +4694,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentGraph" + "$ref": "#/components/schemas/ProjectTaskDetailResponse" } } } @@ -4377,28 +4709,14 @@ } } } - }, - "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.retrieveGraph('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');\n\nconsole.log(response.agent_id);" - }, - { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nagent = client.agents.list_graph_v1_graph_get(\n agent_id=\"agentId\",\n)\nprint(agent)" - } - ] - } - }, - "/v1/agents/{agent_id}/runs": { - "post": { + } + }, + "patch": { "tags": [ - "Agents" + "Projects" ], - "summary": "Run an agent", - "description": "Start a new run for an agent.\n\nRuns always execute the agent's live published version, so the agent must be\npublished first with `POST /v1/agents/{agent_id}/publish`. Unpublished drafts\ncannot be run.", - "operationId": "run_agent_v1_agents__agent_id__runs_post", + "summary": "Update Project Task", + "operationId": "update_project_task_v1_projects__project_id__tasks__task_id__patch", "security": [ { "APIKeyHeader": [] @@ -4409,43 +4727,59 @@ ], "parameters": [ { - "name": "agent_id", + "name": "project_id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid", - "description": "The ID of the agent to run.", - "title": "Agent Id" + "description": "Unique project ID.", + "title": "Project Id" }, - "description": "The ID of the agent to run." - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "anyOf": [ - { - "$ref": "#/components/schemas/RunAgentRequest" - }, - { - "type": "null" - } - ], - "description": "Inputs to send to the agent run.", - "title": "Request" + "description": "Unique project ID." + }, + { + "name": "task_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Unique project task ID.", + "title": "Task Id" + }, + "description": "Unique project task ID." + }, + { + "name": "category_id", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Category that owns the project.", + "title": "Category Id" + }, + "description": "Category that owns the project." + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateProjectTaskRequest" } } } }, "responses": { - "202": { + "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AcceptedAgentRun" + "$ref": "#/components/schemas/ProjectTaskResponse" } } } @@ -4460,28 +4794,84 @@ } } } - }, - "x-codeSamples": [ + } + }, + "delete": { + "tags": [ + "Projects" + ], + "summary": "Delete Project Task", + "operationId": "delete_project_task_v1_projects__project_id__tasks__task_id__delete", + "security": [ { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst run = await client.agents.runs.create('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');\n\nconsole.log(run.id);" + "APIKeyHeader": [] }, { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nrun = client.agents.runs.create(\n agent_id=\"agentId\",\n)\nprint(run)" + "BearerAuth": [] } - ] + ], + "parameters": [ + { + "name": "project_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Unique project ID.", + "title": "Project Id" + }, + "description": "Unique project ID." + }, + { + "name": "task_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Unique project task ID.", + "title": "Task Id" + }, + "description": "Unique project task ID." + }, + { + "name": "category_id", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Category that owns the project.", + "title": "Category Id" + }, + "description": "Category that owns the project." + } + ], + "responses": { + "204": { + "description": "Successful Response" + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } } }, - "/v1/agents/{agent_id}/runs/{run_id}": { - "get": { + "/v1/projects/{project_id}/tasks/{task_id}/status": { + "post": { "tags": [ - "Agents" + "Projects" ], - "summary": "Get an agent run", - "description": "Retrieve the current status and result details for an agent run.", - "operationId": "get_agent_run_v1_agents__agent_id__runs__run_id__get", + "summary": "Update Project Task Status", + "operationId": "update_project_task_status_v1_projects__project_id__tasks__task_id__status_post", "security": [ { "APIKeyHeader": [] @@ -4492,37 +4882,59 @@ ], "parameters": [ { - "name": "agent_id", + "name": "project_id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid", - "description": "The ID of the agent that owns the run.", - "title": "Agent Id" + "description": "Unique project ID.", + "title": "Project Id" }, - "description": "The ID of the agent that owns the run." + "description": "Unique project ID." }, { - "name": "run_id", + "name": "task_id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid", - "description": "The ID of the run to retrieve.", - "title": "Run Id" + "description": "Unique project task ID.", + "title": "Task Id" }, - "description": "The ID of the run to retrieve." + "description": "Unique project task ID." + }, + { + "name": "category_id", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Category that owns the project.", + "title": "Category Id" + }, + "description": "Category that owns the project." } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateProjectTaskStatusRequest" + } + } + } + }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentRun" + "$ref": "#/components/schemas/ProjectTaskStatusResponse" } } } @@ -4537,32 +4949,21 @@ } } } - }, - "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst run = await client.agents.runs.retrieve('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', {\n agent_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n});\n\nconsole.log(run.id);" - }, - { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nrun = client.agents.runs.retrieve(\n agent_id=\"agentId\",\n run_id=\"runId\",\n)\nprint(run)" - } - ] + } } }, - "/v1/reports/accuracy/overview": { + "/v1/reports/query-fanouts": { "post": { "tags": [ "Reports" ], - "summary": "Accuracy Overview", - "operationId": "accuracy_overview_v1_reports_accuracy_overview_post", + "summary": "Query Fanouts", + "operationId": "query_fanouts_v1_reports_query_fanouts_post", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AccuracyOverviewQuery" + "$ref": "#/components/schemas/QueryFanoutsQuery" } } }, @@ -4574,7 +4975,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AccuracyOverviewResponse" + "$ref": "#/components/schemas/Response" } } } @@ -4599,30 +5000,26 @@ } ], "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.accuracy.createOverview({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response.overallAccuracy);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\naccuracy = client.reports.accuracy.overview_v1_reports_overview_post(\n start_date=\"\",\n end_date=\"\",\n category_id=\"\",\n exclude_topic_ids=False,\n tag_filter_type=\"any\",\n include_no_tag=True,\n include_no_persona=True,\n group_by=\"period\",\n)\nprint(accuracy)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nreport = client.reports.query_fanouts(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n start_date=\"2024-01-01T00:00:00.000Z\",\n end_date=\"2024-01-01T00:00:00.000Z\",\n)\n\nprint(report)" } ] } }, - "/v1/reports/accuracy/breakdown": { + "/v1/reports/shopping/visibility": { "post": { "tags": [ "Reports" ], - "summary": "Accuracy Breakdown", - "operationId": "accuracy_breakdown_v1_reports_accuracy_breakdown_post", + "summary": "Shopping Visibility", + "operationId": "shopping_visibility_v1_reports_shopping_visibility_post", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AccuracyBreakdownQuery" + "$ref": "#/components/schemas/ShoppingVisibilityQuery" } } }, @@ -4634,7 +5031,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AccuracyBreakdownResponse" + "$ref": "#/components/schemas/ShoppingRowsResponse" } } } @@ -4659,30 +5056,26 @@ } ], "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.accuracy.createBreakdown({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response.data);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\naccuracy = client.reports.accuracy.breakdown_v1_reports_breakdown_post(\n start_date=\"\",\n end_date=\"\",\n category_id=\"\",\n exclude_topic_ids=False,\n tag_filter_type=\"any\",\n include_no_tag=True,\n include_no_persona=True,\n breakdown_by=\"citation\",\n limit=10,\n offset=0,\n sort_by=\"citationShare\",\n sort_order=\"desc\",\n)\nprint(accuracy)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nshopping = client.reports.shopping.visibility(\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n start_date=\"2024-01-01T00:00:00.000Z\",\n end_date=\"2024-01-01T00:00:00.000Z\",\n date_interval=\"day\",\n include_count=False,\n tag_filter_type=\"any\",\n include_no_tag=False,\n exclude_topic_ids=False,\n include_asset_only=False,\n rank_by=\"visibility_score\",\n include_position_frequency=False,\n)\n\nprint(shopping)" } ] } }, - "/v1/reports/accuracy/citation-analysis": { + "/v1/reports/shopping/item-visibility": { "post": { "tags": [ "Reports" ], - "summary": "Accuracy Citation Analysis", - "operationId": "accuracy_citation_analysis_v1_reports_accuracy_citation_analysis_post", + "summary": "Shopping Item Visibility", + "operationId": "shopping_item_visibility_v1_reports_shopping_item_visibility_post", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AccuracyCitationAnalysisQuery" + "$ref": "#/components/schemas/ShoppingItemVisibilityQuery" } } }, @@ -4694,7 +5087,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AccuracyCitationAnalysisResponse" + "$ref": "#/components/schemas/ShoppingRowsResponse" } } } @@ -4719,30 +5112,26 @@ } ], "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.accuracy.createCitationAnalysis({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n clean_href: 'clean_href',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response.domain);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\naccuracy = client.reports.accuracy.citation_analysis_v1_reports_citation_analysis_post(\n category_id=\"\",\n clean_href=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nprint(accuracy)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nshopping = client.reports.shopping.item_visibility(\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n start_date=\"2024-01-01T00:00:00.000Z\",\n end_date=\"2024-01-01T00:00:00.000Z\",\n date_interval=\"day\",\n include_count=False,\n tag_filter_type=\"any\",\n include_no_tag=False,\n exclude_topic_ids=False,\n merchant_filter_type=\"any\",\n include_competitors=False,\n competitor_limit=5,\n include_position_frequency=False,\n)\n\nprint(shopping)" } ] } }, - "/v1/reports/accuracy/topic-ids": { + "/v1/reports/shopping/merchant-distribution": { "post": { "tags": [ "Reports" ], - "summary": "Accuracy Topic Ids", - "operationId": "accuracy_topic_ids_v1_reports_accuracy_topic_ids_post", + "summary": "Shopping Merchant Distribution", + "operationId": "shopping_merchant_distribution_v1_reports_shopping_merchant_distribution_post", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AccuracyTopicIdsQuery" + "$ref": "#/components/schemas/ShoppingMerchantDistributionQuery" } } }, @@ -4754,11 +5143,7 @@ "content": { "application/json": { "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Response Accuracy Topic Ids V1 Reports Accuracy Topic Ids Post" + "$ref": "#/components/schemas/ShoppingRowsResponse" } } } @@ -4783,30 +5168,26 @@ } ], "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.accuracy.createTopicIDs({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\naccuracy = client.reports.accuracy.topic_ids_v1_reports_topic_ids_post(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nprint(accuracy)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nshopping = client.reports.shopping.merchant_distribution(\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n start_date=\"2024-01-01T00:00:00.000Z\",\n end_date=\"2024-01-01T00:00:00.000Z\",\n date_interval=\"day\",\n include_count=False,\n tag_filter_type=\"any\",\n include_no_tag=False,\n exclude_topic_ids=False,\n)\n\nprint(shopping)" } ] } }, - "/v1/reports/accuracy/inaccurate-themes": { + "/v1/reports/shopping/merchant-visibility-by-brand": { "post": { "tags": [ "Reports" ], - "summary": "Accuracy Inaccurate Themes", - "operationId": "accuracy_inaccurate_themes_v1_reports_accuracy_inaccurate_themes_post", + "summary": "Shopping Merchant Visibility By Brand", + "operationId": "shopping_merchant_visibility_by_brand_v1_reports_shopping_merchant_visibility_by_brand_post", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/InaccurateThemesQuery" + "$ref": "#/components/schemas/ShoppingMerchantVisibilityByBrandQuery" } } }, @@ -4818,7 +5199,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/InaccurateThemesResponse" + "$ref": "#/components/schemas/ShoppingRowsResponse" } } } @@ -4843,30 +5224,26 @@ } ], "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.accuracy.createInaccurateThemes({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response.data);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\naccuracy = client.reports.accuracy.inaccurate_themes_v1_reports_inaccurate_themes_post(\n start_date=\"\",\n end_date=\"\",\n category_id=\"\",\n exclude_topic_ids=False,\n tag_filter_type=\"any\",\n include_no_tag=True,\n include_no_persona=True,\n limit=10,\n offset=0,\n sort_by=\"response_share\",\n sort_order=\"desc\",\n)\nprint(accuracy)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nshopping = client.reports.shopping.merchant_visibility_by_brand(\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n start_date=\"2024-01-01T00:00:00.000Z\",\n end_date=\"2024-01-01T00:00:00.000Z\",\n date_interval=\"day\",\n include_count=False,\n tag_filter_type=\"any\",\n include_no_tag=False,\n exclude_topic_ids=False,\n include_brand_only=False,\n)\n\nprint(shopping)" } ] } }, - "/v1/reports/accuracy/inaccurate-clusters": { + "/v1/reports/shopping/merchant-by-items": { "post": { "tags": [ "Reports" ], - "summary": "Accuracy Inaccurate Clusters", - "operationId": "accuracy_inaccurate_clusters_v1_reports_accuracy_inaccurate_clusters_post", + "summary": "Shopping Merchant By Items", + "operationId": "shopping_merchant_by_items_v1_reports_shopping_merchant_by_items_post", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/InaccurateClustersQuery" + "$ref": "#/components/schemas/ShoppingMerchantByItemsQuery" } } }, @@ -4878,7 +5255,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/InaccurateClustersResponse" + "$ref": "#/components/schemas/ShoppingRowsResponse" } } } @@ -4903,30 +5280,26 @@ } ], "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.accuracy.createInaccurateClusters({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: 'end_date',\n start_date: 'start_date',\n theme_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n});\n\nconsole.log(response.data);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\naccuracy = client.reports.accuracy.inaccurate_clusters_v1_reports_inaccurate_clusters_post(\n start_date=\"\",\n end_date=\"\",\n category_id=\"\",\n exclude_topic_ids=False,\n tag_filter_type=\"any\",\n include_no_tag=True,\n include_no_persona=True,\n theme_id=\"\",\n limit=5000,\n offset=0,\n)\nprint(accuracy)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nshopping = client.reports.shopping.merchant_by_items(\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n start_date=\"2024-01-01T00:00:00.000Z\",\n end_date=\"2024-01-01T00:00:00.000Z\",\n date_interval=\"day\",\n include_count=False,\n tag_filter_type=\"any\",\n include_no_tag=False,\n exclude_topic_ids=False,\n)\n\nprint(shopping)" } ] } }, - "/v1/reports/accuracy/inaccuracy-drivers": { + "/v1/reports/shopping/all-items-with-merchants": { "post": { "tags": [ "Reports" ], - "summary": "Accuracy Inaccuracy Drivers", - "operationId": "accuracy_inaccuracy_drivers_v1_reports_accuracy_inaccuracy_drivers_post", + "summary": "Shopping All Items With Merchants", + "operationId": "shopping_all_items_with_merchants_v1_reports_shopping_all_items_with_merchants_post", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/InaccuracyDriversQuery" + "$ref": "#/components/schemas/ShoppingAllItemsWithMerchantsQuery" } } }, @@ -4938,7 +5311,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/InaccuracyDriversResponse" + "$ref": "#/components/schemas/ShoppingRowsResponse" } } } @@ -4963,30 +5336,26 @@ } ], "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.accuracy.createInaccuracyDrivers({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response.data);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\naccuracy = client.reports.accuracy.inaccuracy_drivers_v1_reports_inaccuracy_drivers_post(\n start_date=\"\",\n end_date=\"\",\n category_id=\"\",\n exclude_topic_ids=False,\n tag_filter_type=\"any\",\n include_no_tag=True,\n include_no_persona=True,\n limit=5,\n)\nprint(accuracy)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nshopping = client.reports.shopping.all_items_with_merchants(\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n start_date=\"2024-01-01T00:00:00.000Z\",\n end_date=\"2024-01-01T00:00:00.000Z\",\n date_interval=\"day\",\n include_count=False,\n tag_filter_type=\"any\",\n include_no_tag=False,\n exclude_topic_ids=False,\n merchant_filter_type=\"any\",\n rank_by=\"visibility\",\n sort_order=\"desc\",\n)\n\nprint(shopping)" } ] } }, - "/v1/reports/accuracy/top-inaccurate-claims": { + "/v1/reports/shopping/trigger-rate": { "post": { "tags": [ "Reports" ], - "summary": "Accuracy Top Inaccurate Claims", - "operationId": "accuracy_top_inaccurate_claims_v1_reports_accuracy_top_inaccurate_claims_post", + "summary": "Shopping Trigger Rate", + "operationId": "shopping_trigger_rate_v1_reports_shopping_trigger_rate_post", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TopInaccurateClaimsQuery" + "$ref": "#/components/schemas/ShoppingTriggerRateQuery" } } }, @@ -4998,7 +5367,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TopInaccurateClaimsResponse" + "$ref": "#/components/schemas/ShoppingRowsResponse" } } } @@ -5023,30 +5392,26 @@ } ], "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.accuracy.createTopInaccurateClaims({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response.data);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\naccuracy = client.reports.accuracy.top_inaccurate_claims_v1_reports_top_inaccurate_claims_post(\n start_date=\"\",\n end_date=\"\",\n category_id=\"\",\n exclude_topic_ids=False,\n tag_filter_type=\"any\",\n include_no_tag=True,\n include_no_persona=True,\n limit=5,\n)\nprint(accuracy)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nshopping = client.reports.shopping.trigger_rate(\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n start_date=\"2024-01-01T00:00:00.000Z\",\n end_date=\"2024-01-01T00:00:00.000Z\",\n date_interval=\"day\",\n include_count=False,\n tag_filter_type=\"any\",\n include_no_tag=False,\n exclude_topic_ids=False,\n)\n\nprint(shopping)" } ] } }, - "/v1/reports/accuracy/claim-breakdown": { + "/v1/reports/shopping/triggered-prompts": { "post": { "tags": [ "Reports" ], - "summary": "Accuracy Claim Breakdown", - "operationId": "accuracy_claim_breakdown_v1_reports_accuracy_claim_breakdown_post", + "summary": "Shopping Triggered Prompts", + "operationId": "shopping_triggered_prompts_v1_reports_shopping_triggered_prompts_post", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ClaimBreakdownQuery" + "$ref": "#/components/schemas/ShoppingTriggeredPromptsQuery" } } }, @@ -5058,7 +5423,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ClaimBreakdownResponse" + "$ref": "#/components/schemas/ShoppingRowsResponse" } } } @@ -5081,32 +5446,21 @@ { "BearerAuth": [] } - ], - "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.accuracy.createClaimBreakdown({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n cluster_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response.platform);" - }, - { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\naccuracy = client.reports.accuracy.claim_breakdown_v1_reports_claim_breakdown_post(\n start_date=\"\",\n end_date=\"\",\n category_id=\"\",\n exclude_topic_ids=False,\n tag_filter_type=\"any\",\n include_no_tag=True,\n include_no_persona=True,\n cluster_id=\"\",\n)\nprint(accuracy)" - } ] } }, - "/v1/reports/accuracy/claim-citations": { + "/v1/reports/shopping/triggered-topics": { "post": { "tags": [ "Reports" ], - "summary": "Accuracy Claim Citations", - "operationId": "accuracy_claim_citations_v1_reports_accuracy_claim_citations_post", + "summary": "Shopping Triggered Topics", + "operationId": "shopping_triggered_topics_v1_reports_shopping_triggered_topics_post", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ClaimCitationsQuery" + "$ref": "#/components/schemas/ShoppingTriggeredTopicsQuery" } } }, @@ -5118,7 +5472,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ClaimCitationsResponse" + "$ref": "#/components/schemas/ShoppingRowsResponse" } } } @@ -5141,32 +5495,21 @@ { "BearerAuth": [] } - ], - "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.accuracy.createClaimCitations({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n cluster_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response.data);" - }, - { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\naccuracy = client.reports.accuracy.claim_citations_v1_reports_claim_citations_post(\n start_date=\"\",\n end_date=\"\",\n category_id=\"\",\n exclude_topic_ids=False,\n tag_filter_type=\"any\",\n include_no_tag=True,\n include_no_persona=True,\n cluster_id=\"\",\n limit=10,\n offset=0,\n sort_order=\"desc\",\n)\nprint(accuracy)" - } ] } }, - "/v1/reports/accuracy/cluster-example-runs": { + "/v1/reports/shopping/merchant-share": { "post": { "tags": [ "Reports" ], - "summary": "Accuracy Cluster Example Runs", - "operationId": "accuracy_cluster_example_runs_v1_reports_accuracy_cluster_example_runs_post", + "summary": "Shopping Merchant Share", + "operationId": "shopping_merchant_share_v1_reports_shopping_merchant_share_post", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ClusterExampleRunsQuery" + "$ref": "#/components/schemas/ShoppingMerchantShareQuery" } } }, @@ -5178,7 +5521,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ClusterExampleRunsResponse" + "$ref": "#/components/schemas/ShoppingRowsResponse" } } } @@ -5203,30 +5546,26 @@ } ], "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.accuracy.createClusterExampleRuns({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n cluster_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response.data);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\naccuracy = client.reports.accuracy.cluster_example_runs_v1_reports_cluster_example_runs_post(\n category_id=\"\",\n cluster_id=\"\",\n start_date=\"\",\n end_date=\"\",\n limit=20,\n offset=0,\n)\nprint(accuracy)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nshopping = client.reports.shopping.merchant_share(\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n start_date=\"2024-01-01T00:00:00.000Z\",\n end_date=\"2024-01-01T00:00:00.000Z\",\n date_interval=\"day\",\n include_count=False,\n tag_filter_type=\"any\",\n include_no_tag=False,\n exclude_topic_ids=False,\n)\n\nprint(shopping)" } ] } }, - "/v1/reports/accuracy/cluster-verification-pairs": { + "/v1/reports/shopping/product-merchant-urls": { "post": { "tags": [ "Reports" ], - "summary": "Accuracy Cluster Verification Pairs", - "operationId": "accuracy_cluster_verification_pairs_v1_reports_accuracy_cluster_verification_pairs_post", + "summary": "Shopping Product Merchant Urls", + "operationId": "shopping_product_merchant_urls_v1_reports_shopping_product_merchant_urls_post", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ClusterVerificationPairsQuery" + "$ref": "#/components/schemas/ShoppingProductMerchantUrlsQuery" } } }, @@ -5238,7 +5577,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ClusterVerificationPairsResponse" + "$ref": "#/components/schemas/ShoppingRowsResponse" } } } @@ -5263,30 +5602,26 @@ } ], "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.accuracy.createClusterVerificationPairs({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n cluster_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n});\n\nconsole.log(response.data);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\naccuracy = client.reports.accuracy.cluster_verification_pairs_v1_reports_cluster_verification_pairs_post(\n category_id=\"\",\n cluster_id=\"\",\n)\nprint(accuracy)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nshopping = client.reports.shopping.product_merchant_urls(\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n product_names=[],\n start_date=\"2024-01-01T00:00:00.000Z\",\n end_date=\"2024-01-01T00:00:00.000Z\",\n)\n\nprint(shopping)" } ] } }, - "/v1/reports/accuracy/factcheck-setup-status": { + "/v1/reports/shopping/executions": { "post": { "tags": [ "Reports" ], - "summary": "Accuracy Factcheck Setup Status", - "operationId": "accuracy_factcheck_setup_status_v1_reports_accuracy_factcheck_setup_status_post", + "summary": "Shopping Executions", + "operationId": "shopping_executions_v1_reports_shopping_executions_post", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FactCheckSetupStatusQuery" + "$ref": "#/components/schemas/ShoppingExecutionsQuery" } } }, @@ -5298,7 +5633,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FactCheckSetupStatusResponse" + "$ref": "#/components/schemas/ShoppingRowsResponse" } } } @@ -5323,44 +5658,88 @@ } ], "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.accuracy.createFactcheckSetupStatus({\n category_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n});\n\nconsole.log(response.activeAccuracyPromptCount);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\naccuracy = client.reports.accuracy.factcheck_setup_status_v1_reports_factcheck_setup_status_post(\n category_id=\"\",\n)\nprint(accuracy)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nshopping = client.reports.shopping.executions(\n category_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n start_date=\"2024-01-01T00:00:00.000Z\",\n end_date=\"2024-01-01T00:00:00.000Z\",\n date_interval=\"day\",\n include_count=False,\n tag_filter_type=\"any\",\n include_no_tag=False,\n exclude_topic_ids=False,\n analysis_filter_type=\"any\",\n)\n\nprint(shopping)" } ] } }, - "/v2/reports/referrals": { - "post": { + "/v1/agents": { + "get": { "tags": [ - "Reports", - "Human Referrals" + "Agents" ], - "summary": "Get Referrals Report V2", - "description": "Get referral traffic report from the hourly aggregated materialized view (UTC-based).\n\nSupports date_interval=\"hour\", calendar intervals through \"year\", \"quarter\", and \"relative_week\".", - "operationId": "get_referrals_report_v2_v2_reports_referrals_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ReferralsQueryV2" - } + "summary": "List agents", + "description": "List agents available to your organization.\n\nAgent status reflects whether an agent has ever been published. `published`\nagents have a live published version. `draft` agents have not been\npublished yet.", + "operationId": "list_agents_v1_agents_get", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "statuses", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/components/schemas/ListAgentsStatusFilter" + } + }, + { + "type": "null" + } + ], + "description": "Optional status filter. Use `published` to list agents that have a live published version, or `draft` to list agents that have not been published yet. Defaults to `published`.", + "title": "Statuses" + }, + "description": "Optional status filter. Use `published` to list agents that have a live published version, or `draft` to list agents that have not been published yet. Defaults to `published`." + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 100, + "exclusiveMinimum": 0, + "default": 100, + "title": "Limit" } }, - "required": true - }, + { + "name": "next_cursor", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Cursor" + } + } + ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Response" + "$ref": "#/components/schemas/ListAgentsResponse" } } } @@ -5376,53 +5755,47 @@ } } }, - "security": [ - { - "APIKeyHeader": [] - }, - { - "BearerAuth": [] - } - ], "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst reportResponse = await client.reports.getReferralsReportV2({\n domain: 'domain',\n metrics: ['visits'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(reportResponse.data);" - }, { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nreferral = client.reports.referrals.create_report_v2_v2_reports_post(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n domain=\"\",\n start_date=\"\",\n)\nprint(referral)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nagent = client.agents.list(\n limit=100,\n)\n\nprint(agent)" } ] - } - }, - "/v2/reports/bots": { + }, "post": { "tags": [ - "Reports", - "Bot Traffic Reports" + "Agents" + ], + "summary": "Create an agent", + "description": "Create a new draft agent owned by the given organization.\n\n`organization_id` is required and you must be a member of it. The agent is created\nas a `draft`; publish it with `POST /v1/agents/{agent_id}/publish` once its graph\nis ready.", + "operationId": "create_agent_v1_agents_post", + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } ], - "summary": "Get Bots Report V2", - "description": "Get bot traffic report from the hourly aggregated materialized view (UTC-based).\n\nSupports date_interval=\"hour\", calendar intervals through \"year\", \"quarter\", and \"relative_week\".\n\nMetrics:\n- count: unique bot visits\n- citations: unique citation events (ai_assistant bot type)\n- indexing: unique indexing events (index bot type)\n- training: unique training events (ai_training bot type)\n- last_visit: most recent visit timestamp\n\nDimensions:\n- date, path, bot_name, bot_provider, bot_type", - "operationId": "get_bots_report_v2_v2_reports_bots_post", "requestBody": { + "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BotsReportQueryV2" + "$ref": "#/components/schemas/CreateAgentRequest", + "description": "The agent to create." } } - }, - "required": true + } }, "responses": { - "200": { + "201": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Response" + "$ref": "#/components/schemas/Agent" } } } @@ -5437,7 +5810,17 @@ } } } - }, + } + } + }, + "/v1/agents/{agent_id}/publish": { + "post": { + "tags": [ + "Agents" + ], + "summary": "Publish an agent", + "description": "Publish an agent's latest draft as its live published version.\n\nYou must be a member of the agent's organization. Publishing promotes the current\ndraft graph to a new published version. A draft that cannot produce its declared\ninput/output contract is rejected with `422` and is not published.", + "operationId": "publish_agent_v1_agents__agent_id__publish_post", "security": [ { "APIKeyHeader": [] @@ -5446,46 +5829,59 @@ "BearerAuth": [] } ], - "x-codeSamples": [ + "parameters": [ { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst reportResponse = await client.reports.getBotsReportV2({\n domain: 'domain',\n metrics: ['count'],\n start_date: '2019-12-27T18:11:19.117Z',\n});\n\nconsole.log(reportResponse.data);" + "name": "agent_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "The ID of the agent to publish.", + "title": "Agent Id" + }, + "description": "The ID of the agent to publish." + } + ], + "responses": { + "201": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Agent" + } + } + } }, - { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nbot = client.reports.bots.create_report_v2_v2_reports_post(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n domain=\"\",\n start_date=\"\",\n)\nprint(bot)" + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } } - ] + } } }, - "/v2/reports/visibility": { - "post": { + "/v1/agents/node-types": { + "get": { "tags": [ - "Reports", - "Reports" + "Agents" ], - "summary": "Query Visibility V2", - "operationId": "query_visibility_v2_v2_reports_visibility_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VisibilityV2Query" - } - } - }, - "required": true - }, + "summary": "List node types", + "description": "List the node types available for building agents.\n\nThe set is deterministic and does not depend on the caller, so the response\nis safe to cache across sessions. Integration-dependent and dynamic-schema\nnode types are intentionally excluded in v1.", + "operationId": "list_node_types_v1_agents_node_types_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "additionalProperties": true, - "type": "object", - "title": "Response Query Visibility V2 V2 Reports Visibility Post" + "$ref": "#/components/schemas/ListNodeTypesResponse" } } } @@ -5508,43 +5904,47 @@ { "BearerAuth": [] } - ], - "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.queryVisibility({\n category_id: 'category_id',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response);" - }, - { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nvisibility = client.reports.visibility.query_v2_v2_reports_post(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n interval=\"day\",\n scope=\"owned\",\n)\nprint(visibility)" - } ] } }, - "/v2/reports/visibility/stream": { - "post": { + "/v1/agents/node-types/{node_type}/schema": { + "get": { "tags": [ - "Reports", - "Reports" + "Agents" ], - "summary": "Stream Visibility V2", - "operationId": "stream_visibility_v2_v2_reports_visibility_stream_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VisibilityV2Query" - } - } + "summary": "Get a node type schema", + "description": "Retrieve the JSON schema for a single node type.\n\nThe `schema` field is an opaque JSON Schema for the node's configuration.\nUse `schema_version` as a cache key — it bumps whenever the schema changes.", + "operationId": "get_node_type_schema_v1_agents_node_types__node_type__schema_get", + "security": [ + { + "APIKeyHeader": [] }, - "required": true - }, + { + "BearerAuth": [] + } + ], + "parameters": [ + { + "name": "node_type", + "in": "path", + "required": true, + "schema": { + "type": "string", + "description": "The node type to fetch the schema for, e.g. `llm`.", + "title": "Node Type" + }, + "description": "The node type to fetch the schema for, e.g. `llm`." + } + ], "responses": { "200": { "description": "Successful Response", "content": { - "text/event-stream": {} + "application/json": { + "schema": { + "$ref": "#/components/schemas/NodeSchemaResponse" + } + } } }, "422": { @@ -5557,7 +5957,17 @@ } } } - }, + } + } + }, + "/v1/agents/{agent_id}": { + "get": { + "tags": [ + "Agents" + ], + "summary": "Get an agent", + "description": "Retrieve an agent and its schema details.\n\nAgents can have both a live published version and a draft version with newer\nunpublished changes. Use the `version` parameter to choose which state to return.", + "operationId": "get_agent_v1_agents__agent_id__get", "security": [ { "APIKeyHeader": [] @@ -5566,46 +5976,37 @@ "BearerAuth": [] } ], - "x-codeSamples": [ + "parameters": [ { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nawait client.reports.streamVisibilityV2({\n category_id: 'category_id',\n end_date: 'end_date',\n start_date: 'start_date',\n});" + "name": "agent_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "The ID of the agent to retrieve.", + "title": "Agent Id" + }, + "description": "The ID of the agent to retrieve." }, { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nstream = client.reports.visibility.stream_v2_v2_reports_stream_post(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n interval=\"day\",\n scope=\"owned\",\n)\nfor event in stream:\n print(event)" + "name": "version", + "in": "query", + "required": false, + "schema": { + "$ref": "#/components/schemas/AgentVersion", + "description": "Version of the agent to retrieve. Use `published` for the live version, or `draft` for the latest unpublished changes for the same agent. Defaults to `published`." + }, + "description": "Version of the agent to retrieve. Use `published` for the live version, or `draft` for the latest unpublished changes for the same agent. Defaults to `published`." } - ] - } - }, - "/v2/reports/citations": { - "post": { - "tags": [ - "Reports", - "Reports" ], - "summary": "Query Citations V2", - "operationId": "query_citations_v2_v2_reports_citations_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CitationsV2Query" - } - } - }, - "required": true - }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "additionalProperties": true, - "type": "object", - "title": "Response Query Citations V2 V2 Reports Citations Post" + "$ref": "#/components/schemas/AgentDetail" } } } @@ -5621,6 +6022,21 @@ } } }, + "x-codeSamples": [ + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nagent = client.agents.retrieve(\n agent_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n)\n\nprint(agent)" + } + ] + }, + "patch": { + "tags": [ + "Agents" + ], + "summary": "Update an agent", + "description": "Update an agent's draft graph in place.\n\nYou must be a member of the agent's organization. The agent's draft is replaced with the\nsupplied graph and re-validated, so you can iterate one draft — create, then update per\nfix — instead of creating a new agent on every change. The response carries the updated\n`validation`; publish with `POST /v1/agents/{agent_id}/publish` once `validation.valid`.", + "operationId": "update_agent_v1_agents__agent_id__patch", "security": [ { "APIKeyHeader": [] @@ -5629,42 +6045,40 @@ "BearerAuth": [] } ], - "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.queryCitations({\n category_id: 'category_id',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response);" - }, + "parameters": [ { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\ncitation = client.reports.citations.query_v2_v2_reports_post(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n interval=\"day\",\n scope=\"all\",\n)\nprint(citation)" + "name": "agent_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "The ID of the agent to update.", + "title": "Agent Id" + }, + "description": "The ID of the agent to update." } - ] - } - }, - "/v2/reports/citations/stream": { - "post": { - "tags": [ - "Reports", - "Reports" ], - "summary": "Stream Citations V2", - "operationId": "stream_citations_v2_v2_reports_citations_stream_post", "requestBody": { + "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CitationsV2Query" + "$ref": "#/components/schemas/UpdateAgentRequest", + "description": "The new draft graph for the agent." } } - }, - "required": true + } }, "responses": { "200": { "description": "Successful Response", "content": { - "text/event-stream": {} + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentDetail" + } + } } }, "422": { @@ -5677,7 +6091,17 @@ } } } - }, + } + } + }, + "/v1/agents/{agent_id}/graph": { + "get": { + "tags": [ + "Agents" + ], + "summary": "Get an agent's graph", + "description": "Retrieve an agent's full workflow graph (`{nodes, edges}`).\n\nThe graph is returned verbatim in the canonical dialect — the same shape `POST /v1/agents`\nand `PATCH /v1/agents/{agent_id}` accept — so a known-good agent can be read back, copied,\nand edited. Tool-backed nodes appear in their lowered `tool` form rather than the friendly\nv1 node types. A `draft` is visible only to its creator; the `published` version is visible\nacross its organization.", + "operationId": "get_agent_graph_v1_agents__agent_id__graph_get", "security": [ { "APIKeyHeader": [] @@ -5686,46 +6110,37 @@ "BearerAuth": [] } ], - "x-codeSamples": [ + "parameters": [ { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nawait client.reports.streamCitationsV2({\n category_id: 'category_id',\n end_date: 'end_date',\n start_date: 'start_date',\n});" + "name": "agent_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "The ID of the agent whose graph to retrieve.", + "title": "Agent Id" + }, + "description": "The ID of the agent whose graph to retrieve." }, { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nstream = client.reports.citations.stream_v2_v2_reports_stream_post(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n interval=\"day\",\n scope=\"all\",\n)\nfor event in stream:\n print(event)" + "name": "version", + "in": "query", + "required": false, + "schema": { + "$ref": "#/components/schemas/AgentVersion", + "description": "Version of the agent whose graph to retrieve. Use `published` for the live version, or `draft` for the latest unpublished changes. Defaults to `published`." + }, + "description": "Version of the agent whose graph to retrieve. Use `published` for the live version, or `draft` for the latest unpublished changes. Defaults to `published`." } - ] - } - }, - "/v2/reports/sentiment": { - "post": { - "tags": [ - "Reports", - "Reports" ], - "summary": "Query Sentiment V2", - "operationId": "query_sentiment_v2_v2_reports_sentiment_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SentimentV2Query" - } - } - }, - "required": true - }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "additionalProperties": true, - "type": "object", - "title": "Response Query Sentiment V2 V2 Reports Sentiment Post" + "$ref": "#/components/schemas/AgentGraph" } } } @@ -5740,7 +6155,17 @@ } } } - }, + } + } + }, + "/v1/agents/{agent_id}/runs": { + "post": { + "tags": [ + "Agents" + ], + "summary": "Run an agent", + "description": "Start a new run for an agent.\n\nRuns always execute the agent's live published version, so the agent must be\npublished first with `POST /v1/agents/{agent_id}/publish`. Unpublished drafts\ncannot be run.", + "operationId": "run_agent_v1_agents__agent_id__runs_post", "security": [ { "APIKeyHeader": [] @@ -5749,42 +6174,47 @@ "BearerAuth": [] } ], - "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.querySentiment({\n asset: 'asset',\n category_id: 'category_id',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response);" - }, + "parameters": [ { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nsentiment = client.reports.sentiment.query_v2_v2_reports_post(\n category_id=\"\",\n asset=\"\",\n start_date=\"\",\n end_date=\"\",\n interval=\"day\",\n include_cited_websites=False,\n)\nprint(sentiment)" + "name": "agent_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "The ID of the agent to run.", + "title": "Agent Id" + }, + "description": "The ID of the agent to run." } - ] - } - }, - "/v2/reports/sentiment/stream": { - "post": { - "tags": [ - "Reports", - "Reports" ], - "summary": "Stream Sentiment V2", - "operationId": "stream_sentiment_v2_v2_reports_sentiment_stream_post", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SentimentV2Query" + "anyOf": [ + { + "$ref": "#/components/schemas/RunAgentRequest" + }, + { + "type": "null" + } + ], + "description": "Inputs to send to the agent run.", + "title": "Request" } } - }, - "required": true + } }, "responses": { - "200": { + "202": { "description": "Successful Response", "content": { - "text/event-stream": {} + "application/json": { + "schema": { + "$ref": "#/components/schemas/AcceptedAgentRun" + } + } } }, "422": { @@ -5798,7 +6228,24 @@ } } }, - "security": [ + "x-codeSamples": [ + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nrun = client.agents.runs.create(\n agent_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n)\n\nprint(run)" + } + ] + } + }, + "/v1/agents/{agent_id}/runs/{run_id}": { + "get": { + "tags": [ + "Agents" + ], + "summary": "Get an agent run", + "description": "Retrieve the current status and result details for an agent run.", + "operationId": "get_agent_run_v1_agents__agent_id__runs__run_id__get", + "security": [ { "APIKeyHeader": [] }, @@ -5806,32 +6253,87 @@ "BearerAuth": [] } ], - "x-codeSamples": [ + "parameters": [ + { + "name": "agent_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "The ID of the agent that owns the run.", + "title": "Agent Id" + }, + "description": "The ID of the agent that owns the run." + }, + { + "name": "run_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "The ID of the run to retrieve.", + "title": "Run Id" + }, + "description": "The ID of the run to retrieve." + }, { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nawait client.reports.streamSentimentV2({\n asset: 'asset',\n category_id: 'category_id',\n end_date: 'end_date',\n start_date: 'start_date',\n});" + "name": "verbose", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "description": "Include each step's raw `outputs` payload in the execution trace.", + "default": false, + "title": "Verbose" + }, + "description": "Include each step's raw `outputs` payload in the execution trace." + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentRun" + } + } + } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ { "lang": "Python", "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nstream = client.reports.sentiment.stream_v2_v2_reports_stream_post(\n category_id=\"\",\n asset=\"\",\n start_date=\"\",\n end_date=\"\",\n interval=\"day\",\n include_cited_websites=False,\n)\nfor event in stream:\n print(event)" + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nrun = client.agents.runs.retrieve(\n agent_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n run_id=\"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n verbose=False,\n)\n\nprint(run)" } ] } }, - "/v2/reports/query-fanouts": { + "/v1/reports/accuracy/overview": { "post": { "tags": [ - "Reports", "Reports" ], - "summary": "Query Fanouts V2", - "operationId": "query_fanouts_v2_v2_reports_query_fanouts_post", + "summary": "Accuracy Overview", + "operationId": "accuracy_overview_v1_reports_accuracy_overview_post", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/QueryFanoutsV2Query" + "$ref": "#/components/schemas/AccuracyOverviewQuery" } } }, @@ -5843,9 +6345,7 @@ "content": { "application/json": { "schema": { - "additionalProperties": true, - "type": "object", - "title": "Response Query Fanouts V2 V2 Reports Query Fanouts Post" + "$ref": "#/components/schemas/AccuracyOverviewResponse" } } } @@ -5868,33 +6368,21 @@ { "BearerAuth": [] } - ], - "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.reports.queryQueryFanouts({\n category_id: 'category_id',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response);" - }, - { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nquery_fanout = client.reports.query_fanouts.v2_v2_reports_post(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n interval=\"day\",\n)\nprint(query_fanout)" - } ] } }, - "/v2/reports/query-fanouts/stream": { + "/v1/reports/accuracy/breakdown": { "post": { "tags": [ - "Reports", "Reports" ], - "summary": "Stream Query Fanouts V2", - "operationId": "stream_query_fanouts_v2_v2_reports_query_fanouts_stream_post", + "summary": "Accuracy Breakdown", + "operationId": "accuracy_breakdown_v1_reports_accuracy_breakdown_post", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/QueryFanoutsV2Query" + "$ref": "#/components/schemas/AccuracyBreakdownQuery" } } }, @@ -5904,7 +6392,11 @@ "200": { "description": "Successful Response", "content": { - "text/event-stream": {} + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccuracyBreakdownResponse" + } + } } }, "422": { @@ -5925,32 +6417,21 @@ { "BearerAuth": [] } - ], - "x-codeSamples": [ - { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nawait client.reports.streamQueryFanouts({\n category_id: 'category_id',\n end_date: 'end_date',\n start_date: 'start_date',\n});" - }, - { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nstream = client.reports.query_fanouts.stream_v2_v2_reports_stream_post(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n interval=\"day\",\n)\nfor event in stream:\n print(event)" - } ] } }, - "/v2/prompts/answers": { + "/v1/reports/accuracy/citation-analysis": { "post": { "tags": [ - "Prompts" + "Reports" ], - "summary": "Query Answers V2", - "operationId": "query_answers_v2_v2_prompts_answers_post", + "summary": "Accuracy Citation Analysis", + "operationId": "accuracy_citation_analysis_v1_reports_accuracy_citation_analysis_post", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AnswersV2Query" + "$ref": "#/components/schemas/AccuracyCitationAnalysisQuery" } } }, @@ -5962,9 +6443,7 @@ "content": { "application/json": { "schema": { - "additionalProperties": true, - "type": "object", - "title": "Response Query Answers V2 V2 Prompts Answers Post" + "$ref": "#/components/schemas/AccuracyCitationAnalysisResponse" } } } @@ -5987,32 +6466,74 @@ { "BearerAuth": [] } + ] + } + }, + "/v1/reports/accuracy/topic-ids": { + "post": { + "tags": [ + "Reports" ], - "x-codeSamples": [ + "summary": "Accuracy Topic Ids", + "operationId": "accuracy_topic_ids_v1_reports_accuracy_topic_ids_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccuracyTopicIdsQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Response Accuracy Topic Ids V1 Reports Accuracy Topic Ids Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.prompts.answersV2({\n category_id: 'category_id',\n end_date: 'end_date',\n start_date: 'start_date',\n});\n\nconsole.log(response);" + "APIKeyHeader": [] }, { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nanswer = client.prompts.answers.query_v2_v2_prompts_post(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nprint(answer)" + "BearerAuth": [] } ] } }, - "/v2/prompts/answers/stream": { + "/v1/reports/accuracy/inaccurate-themes": { "post": { "tags": [ - "Prompts" + "Reports" ], - "summary": "Stream Answers V2", - "operationId": "stream_answers_v2_v2_prompts_answers_stream_post", + "summary": "Accuracy Inaccurate Themes", + "operationId": "accuracy_inaccurate_themes_v1_reports_accuracy_inaccurate_themes_post", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AnswersV2Query" + "$ref": "#/components/schemas/InaccurateThemesQuery" } } }, @@ -6022,7 +6543,11 @@ "200": { "description": "Successful Response", "content": { - "text/event-stream": {} + "application/json": { + "schema": { + "$ref": "#/components/schemas/InaccurateThemesResponse" + } + } } }, "422": { @@ -6043,101 +6568,10444 @@ { "BearerAuth": [] } + ] + } + }, + "/v1/reports/accuracy/inaccurate-clusters": { + "post": { + "tags": [ + "Reports" ], - "x-codeSamples": [ + "summary": "Accuracy Inaccurate Clusters", + "operationId": "accuracy_inaccurate_clusters_v1_reports_accuracy_inaccurate_clusters_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InaccurateClustersQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InaccurateClustersResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ { - "lang": "JavaScript", - "source": "import Profound from '@profoundai/client';\n\nconst client = new Profound({\n apiKey: process.env['PROFOUND_API_KEY'], // This is the default and can be omitted\n});\n\nawait client.prompts.streamAnswersV2({\n category_id: 'category_id',\n end_date: 'end_date',\n start_date: 'start_date',\n});" + "APIKeyHeader": [] }, { - "lang": "Python", - "label": "Python", - "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key_header=os.environ.get(\"API_KEY_HEADER\"),\n)\n\nstream = client.prompts.answers.stream_v2_v2_prompts_stream_post(\n category_id=\"\",\n start_date=\"\",\n end_date=\"\",\n)\nfor event in stream:\n print(event)" + "BearerAuth": [] } ] } - } - }, - "components": { - "schemas": { - "AEOScore": { - "properties": { - "target_zone": { - "$ref": "#/components/schemas/AEOScoreTargetZone" - }, - "value": { - "type": "number", - "title": "Value" - } - }, - "type": "object", - "required": [ - "target_zone", - "value" - ], - "title": "AEOScore" + }, + "/v1/reports/accuracy/inaccuracy-drivers": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Accuracy Inaccuracy Drivers", + "operationId": "accuracy_inaccuracy_drivers_v1_reports_accuracy_inaccuracy_drivers_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InaccuracyDriversQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InaccuracyDriversResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v1/reports/accuracy/top-inaccurate-claims": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Accuracy Top Inaccurate Claims", + "operationId": "accuracy_top_inaccurate_claims_v1_reports_accuracy_top_inaccurate_claims_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TopInaccurateClaimsQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TopInaccurateClaimsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v1/reports/accuracy/claim-breakdown": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Accuracy Claim Breakdown", + "operationId": "accuracy_claim_breakdown_v1_reports_accuracy_claim_breakdown_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ClaimBreakdownQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ClaimBreakdownResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v1/reports/accuracy/claim-citations": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Accuracy Claim Citations", + "operationId": "accuracy_claim_citations_v1_reports_accuracy_claim_citations_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ClaimCitationsQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ClaimCitationsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v1/reports/accuracy/cluster-example-runs": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Accuracy Cluster Example Runs", + "operationId": "accuracy_cluster_example_runs_v1_reports_accuracy_cluster_example_runs_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ClusterExampleRunsQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ClusterExampleRunsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v1/reports/accuracy/cluster-verification-pairs": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Accuracy Cluster Verification Pairs", + "operationId": "accuracy_cluster_verification_pairs_v1_reports_accuracy_cluster_verification_pairs_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ClusterVerificationPairsQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ClusterVerificationPairsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v1/reports/accuracy/factcheck-setup-status": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Accuracy Factcheck Setup Status", + "operationId": "accuracy_factcheck_setup_status_v1_reports_accuracy_factcheck_setup_status_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FactCheckSetupStatusQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FactCheckSetupStatusResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v2/reports/referrals": { + "post": { + "tags": [ + "Reports", + "Human Referrals" + ], + "summary": "Get Referrals Report V2", + "description": "Get referral traffic report from the hourly aggregated materialized view (UTC-based).\n\nSupports date_interval=\"hour\", calendar intervals through \"year\", \"quarter\", and \"relative_week\".", + "operationId": "get_referrals_report_v2_v2_reports_referrals_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReferralsQueryV2" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Response" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nreport = client.reports.get_referrals_report_v2(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n domain=\"\",\n start_date=\"2024-01-01T00:00:00.000Z\",\n timezone=\"UTC\",\n)\n\nprint(report)" + } + ] + } + }, + "/v2/reports/bots": { + "post": { + "tags": [ + "Reports", + "Bot Traffic Reports" + ], + "summary": "Get Bots Report V2", + "description": "Get bot traffic report from the hourly aggregated materialized view (UTC-based).\n\nSupports date_interval=\"hour\", calendar intervals through \"year\", \"quarter\", and \"relative_week\".\n\nMetrics:\n- count: unique bot visits\n- citations: unique citation events (ai_assistant bot type)\n- indexing: unique indexing events (index bot type)\n- training: unique training events (ai_training bot type)\n- last_visit: most recent visit timestamp\n\nDimensions:\n- date, path, bot_name, bot_provider, bot_type", + "operationId": "get_bots_report_v2_v2_reports_bots_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BotsReportQueryV2" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Response" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "Python", + "label": "Python", + "source": "import os\n\nfrom profound import Profound\n\nclient = Profound(\n api_key=os.environ.get(\"PROFOUND_API_KEY\"),\n)\n\nreport = client.reports.get_bots_report_v2(\n date_interval=\"day\",\n dimensions=[],\n metrics=[],\n order_by={},\n domain=\"\",\n start_date=\"2024-01-01T00:00:00.000Z\",\n timezone=\"UTC\",\n)\n\nprint(report)" + } + ] + } + }, + "/v2/reports/visibility": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Query Visibility V2", + "operationId": "query_visibility_v2_v2_reports_visibility_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VisibilityV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VisibilityV2Response" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v2/reports/visibility/stream": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Stream Visibility V2", + "operationId": "stream_visibility_v2_v2_reports_visibility_stream_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VisibilityV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Server-sent events stream. Emits one `summary` event (the report `info` block) first, then one `result` event per row.", + "content": { + "text/event-stream": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/VisibilityV2Info", + "description": "`summary` event payload (the report `info` block)." + }, + { + "$ref": "#/components/schemas/VisibilityRow", + "description": "`result` event payload — one visibility row." + } + ] + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v2/reports/citations": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Query Citations V2", + "operationId": "query_citations_v2_v2_reports_citations_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CitationsV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CitationsV2Response" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v2/reports/citations/stream": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Stream Citations V2", + "operationId": "stream_citations_v2_v2_reports_citations_stream_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CitationsV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Server-sent events stream. Emits one `summary` event (the report `info` block) first, then one `result` event per row.", + "content": { + "text/event-stream": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/CitationsV2Info", + "description": "`summary` event payload (the report `info` block)." + }, + { + "$ref": "#/components/schemas/CitationRow", + "description": "`result` event payload — one citation row." + } + ] + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v2/reports/sentiment": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Query Sentiment V2", + "operationId": "query_sentiment_v2_v2_reports_sentiment_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SentimentV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SentimentV2Response" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v2/reports/sentiment/stream": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Stream Sentiment V2", + "operationId": "stream_sentiment_v2_v2_reports_sentiment_stream_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SentimentV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Server-sent events stream. Emits one `summary` event (the report `info` block) first, then one `result` event per row.", + "content": { + "text/event-stream": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/SentimentV2Info", + "description": "`summary` event payload (the report `info` block)." + }, + { + "$ref": "#/components/schemas/SentimentRow", + "description": "`result` event payload — one sentiment row." + } + ] + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v2/reports/query-fanouts": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Query Fanouts V2", + "operationId": "query_fanouts_v2_v2_reports_query_fanouts_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QueryFanoutsV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QueryFanoutsV2Response" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v2/reports/query-fanouts/stream": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Stream Query Fanouts V2", + "operationId": "stream_query_fanouts_v2_v2_reports_query_fanouts_stream_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QueryFanoutsV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Server-sent events stream. Emits one `summary` event (the report `info` block) first, then one `result` event per row.", + "content": { + "text/event-stream": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/QueryFanoutsV2Info", + "description": "`summary` event payload (the report `info` block)." + }, + { + "$ref": "#/components/schemas/QueryFanoutRow", + "description": "`result` event payload — one query-fanout row." + } + ] + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v2/reports/factcheck": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Query Scores", + "operationId": "query_scores_v2_reports_factcheck_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FactcheckScoresQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FactcheckScoresResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v2/reports/factcheck/stream": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Stream Scores", + "operationId": "stream_scores_v2_reports_factcheck_stream_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FactcheckScoresQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Server-sent events stream. Emits one `summary` event (the report `info` block) first, then one `result` event per row.", + "content": { + "text/event-stream": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/FactcheckScoresInfo", + "description": "`summary` event payload (the report `info` block)." + }, + { + "$ref": "#/components/schemas/FactcheckScoreRow", + "description": "`result` event payload — one accuracy score row." + } + ] + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v2/reports/factcheck/claims": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Query Claims", + "operationId": "query_claims_v2_reports_factcheck_claims_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FactcheckClaimsQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FactcheckClaimsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v2/reports/factcheck/claims/stream": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Stream Claims", + "operationId": "stream_claims_v2_reports_factcheck_claims_stream_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FactcheckClaimsQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Server-sent events stream. Emits one `summary` event (the report `info` block) first, then one `result` event per row.", + "content": { + "text/event-stream": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/FactcheckClaimsInfo", + "description": "`summary` event payload (the report `info` block)." + }, + { + "$ref": "#/components/schemas/FactcheckClaimsRow", + "description": "`result` event payload — one inaccurate claim." + } + ] + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v2/reports/social/youtube/channels": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Query Youtube Channels", + "description": "Rank the YouTube channels cited in a category, or the video categories they publish in.", + "operationId": "query_youtube_channels_v2_reports_social_youtube_channels_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/YoutubeChannelsQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/YoutubeChannelsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v2/reports/social/youtube/videos": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Query Youtube Videos", + "description": "Rank cited YouTube videos, for one channel or across all of them.", + "operationId": "query_youtube_videos_v2_reports_social_youtube_videos_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/YoutubeVideosQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/YoutubeVideosResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v2/reports/social/youtube/summary": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Query Youtube Summary", + "description": "Report how much of youtube.com the channel and video rankings account for.", + "operationId": "query_youtube_summary_v2_reports_social_youtube_summary_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/YoutubeSummaryQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/YoutubeSummaryResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v2/prompts/answers": { + "post": { + "tags": [ + "Prompts" + ], + "summary": "Query Answers V2", + "operationId": "query_answers_v2_v2_prompts_answers_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnswersV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnswersV2Response" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v2/prompts/answers/stream": { + "post": { + "tags": [ + "Prompts" + ], + "summary": "Stream Answers V2", + "operationId": "stream_answers_v2_v2_prompts_answers_stream_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnswersV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Server-sent events stream. Emits one `summary` event (the report `info` block) first, then one `result` event per row.", + "content": { + "text/event-stream": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/AnswersV2Info", + "description": "`summary` event payload (the report `info` block)." + }, + { + "$ref": "#/components/schemas/AnswerRow", + "description": "`result` event payload — one answer row." + } + ] + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v2/reports/shopping/brands": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Query Shopping Brands V2", + "operationId": "query_shopping_brands_v2_v2_reports_shopping_brands_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingBrandsV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingBrandsV2Response" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v2/reports/shopping/brands/stream": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Stream Shopping Brands V2", + "operationId": "stream_shopping_brands_v2_v2_reports_shopping_brands_stream_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingBrandsV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Server-sent events stream. Emits one `summary` event (the report `info` block) first, then one `result` event per row.", + "content": { + "text/event-stream": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/ShoppingBrandsV2Info", + "description": "`summary` event payload (the report `info` block)." + }, + { + "$ref": "#/components/schemas/ShoppingBrandRow", + "description": "`result` event payload — one visibility row." + } + ] + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v2/reports/shopping/products": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Query Shopping Products V2", + "operationId": "query_shopping_products_v2_v2_reports_shopping_products_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingProductsV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingProductsV2Response" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v2/reports/shopping/products/stream": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Stream Shopping Products V2", + "operationId": "stream_shopping_products_v2_v2_reports_shopping_products_stream_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingProductsV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Server-sent events stream. Emits one `summary` event (the report `info` block) first, then one `result` event per row.", + "content": { + "text/event-stream": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/ShoppingProductsV2Info", + "description": "`summary` event payload (the report `info` block)." + }, + { + "$ref": "#/components/schemas/ShoppingProductRow", + "description": "`result` event payload — one product row." + } + ] + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v2/reports/shopping/merchants": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Query Shopping Merchants V2", + "operationId": "query_shopping_merchants_v2_v2_reports_shopping_merchants_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingMerchantsV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingMerchantsV2Response" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v2/reports/shopping/merchants/stream": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Stream Shopping Merchants V2", + "operationId": "stream_shopping_merchants_v2_v2_reports_shopping_merchants_stream_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingMerchantsV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Server-sent events stream. Emits one `summary` event (the report `info` block) first, then one `result` event per row.", + "content": { + "text/event-stream": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/ShoppingMerchantsV2Info", + "description": "`summary` event payload (the report `info` block)." + }, + { + "$ref": "#/components/schemas/ShoppingMerchantRow", + "description": "`result` event payload — one merchant row." + } + ] + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v2/reports/shopping/trigger-rate": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Query Shopping Trigger Rate V2", + "operationId": "query_shopping_trigger_rate_v2_v2_reports_shopping_trigger_rate_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingTriggerRateV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingTriggerRateV2Response" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + }, + "/v2/reports/shopping/trigger-rate/stream": { + "post": { + "tags": [ + "Reports", + "Reports" + ], + "summary": "Stream Shopping Trigger Rate V2", + "operationId": "stream_shopping_trigger_rate_v2_v2_reports_shopping_trigger_rate_stream_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShoppingTriggerRateV2Query" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Server-sent events stream. Emits one `summary` event (the report `info` block) first, then one `result` event per row.", + "content": { + "text/event-stream": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/ShoppingTriggerRateV2Info", + "description": "`summary` event payload (the report `info` block)." + }, + { + "$ref": "#/components/schemas/ShoppingTriggerRateRow", + "description": "`result` event payload — one trigger row." + } + ] + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "APIKeyHeader": [] + }, + { + "BearerAuth": [] + } + ] + } + } + }, + "components": { + "schemas": { + "AEOScore": { + "properties": { + "target_zone": { + "$ref": "#/components/schemas/AEOScoreTargetZone" + }, + "value": { + "type": "number", + "title": "Value" + } + }, + "type": "object", + "required": [ + "target_zone", + "value" + ], + "title": "AEOScore" + }, + "AEOScoreTargetZone": { + "properties": { + "low": { + "type": "number", + "title": "Low" + }, + "high": { + "type": "number", + "title": "High" + } + }, + "type": "object", + "required": [ + "low", + "high" + ], + "title": "AEOScoreTargetZone" + }, + "AcceptedAgentRun": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id", + "description": "Unique ID for the accepted run." + }, + "agent_id": { + "type": "string", + "format": "uuid", + "title": "Agent Id", + "description": "Unique ID of the agent for this run." + }, + "status": { + "$ref": "#/components/schemas/AgentRunStatus", + "description": "Initial status of the accepted run." + }, + "started_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Started At", + "description": "When the run started, if execution began immediately." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "id", + "agent_id", + "status" + ], + "title": "AcceptedAgentRun", + "description": "Run details returned after a run request is accepted." + }, + "AccuracyBreakdownQuery": { + "properties": { + "start_date": { + "type": "string", + "title": "Start Date" + }, + "end_date": { + "type": "string", + "title": "End Date" + }, + "comparison_start_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison Start Date" + }, + "comparison_end_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison End Date" + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "topic_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Topic Ids" + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "tag_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Tag Ids" + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "all", + "any" + ], + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": false + }, + "region_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Region Ids" + }, + "platform_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Platform Ids" + }, + "persona_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Persona Ids" + }, + "include_no_persona": { + "type": "boolean", + "title": "Include No Persona", + "default": false + }, + "prompt_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Prompt Ids" + }, + "citation_categories": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Citation Categories" + }, + "breakdown_by": { + "type": "string", + "enum": [ + "citation", + "platform", + "topic", + "prompt", + "tag", + "region", + "persona", + "theme" + ], + "title": "Breakdown By", + "default": "citation" + }, + "group_by": { + "anyOf": [ + { + "items": { + "type": "string", + "enum": [ + "platform", + "topic", + "prompt", + "tag", + "region", + "persona", + "theme", + "date" + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Group By" + }, + "date_bucket": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Date Bucket" + }, + "limit": { + "type": "integer", + "minimum": 1, + "title": "Limit", + "default": 10 + }, + "offset": { + "type": "integer", + "minimum": 0, + "title": "Offset", + "default": 0 + }, + "search_query": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Search Query" + }, + "sort_by": { + "type": "string", + "enum": [ + "citationShare", + "accuracy" + ], + "title": "Sort By", + "default": "citationShare" + }, + "sort_order": { + "type": "string", + "enum": [ + "asc", + "desc" + ], + "title": "Sort Order", + "default": "desc" + }, + "pagination": { + "anyOf": [ + { + "$ref": "#/components/schemas/AccuracyPagination" + }, + { + "type": "null" + } + ] + } + }, + "type": "object", + "required": [ + "start_date", + "end_date", + "category_id" + ], + "title": "AccuracyBreakdownQuery" + }, + "AccuracyBreakdownResponse": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/AccuracyBreakdownRow" + }, + "type": "array", + "title": "Data" + }, + "totalCount": { + "type": "integer", + "title": "Totalcount" + } + }, + "type": "object", + "required": [ + "data", + "totalCount" + ], + "title": "AccuracyBreakdownResponse" + }, + "AccuracyBreakdownRow": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + }, + "groupIds": { + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Groupids" + }, + "groupNames": { + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Groupnames" + }, + "share": { + "type": "number", + "title": "Share" + }, + "shareChange": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Sharechange" + }, + "responseAccuracy": { + "type": "number", + "title": "Responseaccuracy" + }, + "accuracyChange": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Accuracychange" + }, + "accurateCount": { + "type": "integer", + "title": "Accuratecount", + "default": 0 + }, + "inaccurateCount": { + "type": "integer", + "title": "Inaccuratecount" + }, + "inaccurateCountChange": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Inaccuratecountchange" + }, + "promptCount": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Promptcount" + }, + "citationCategory": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Citationcategory" + }, + "hasScore": { + "type": "boolean", + "title": "Hasscore", + "default": true + } + }, + "type": "object", + "required": [ + "id", + "name", + "share", + "responseAccuracy", + "inaccurateCount" + ], + "title": "AccuracyBreakdownRow" + }, + "AccuracyCitationAnalysisQuery": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "clean_href": { + "type": "string", + "title": "Clean Href" + }, + "start_date": { + "type": "string", + "title": "Start Date" + }, + "end_date": { + "type": "string", + "title": "End Date" + } + }, + "type": "object", + "required": [ + "category_id", + "clean_href", + "start_date", + "end_date" + ], + "title": "AccuracyCitationAnalysisQuery" + }, + "AccuracyCitationAnalysisResponse": { + "properties": { + "href": { + "type": "string", + "title": "Href" + }, + "domain": { + "type": "string", + "title": "Domain" + }, + "pageTitle": { + "type": "string", + "title": "Pagetitle" + }, + "markdownContent": { + "type": "string", + "title": "Markdowncontent" + }, + "claims": { + "items": { + "$ref": "#/components/schemas/AccuracyCitationClaim" + }, + "type": "array", + "title": "Claims" + } + }, + "type": "object", + "required": [ + "href", + "domain", + "pageTitle", + "markdownContent" + ], + "title": "AccuracyCitationAnalysisResponse" + }, + "AccuracyCitationClaim": { + "properties": { + "claimId": { + "type": "string", + "title": "Claimid" + }, + "claim": { + "type": "string", + "title": "Claim" + }, + "attributeId": { + "type": "string", + "title": "Attributeid" + }, + "attribute": { + "type": "string", + "title": "Attribute" + }, + "neutralThemeId": { + "type": "string", + "title": "Neutralthemeid" + }, + "neutralTheme": { + "type": "string", + "title": "Neutraltheme" + }, + "snippet": { + "type": "string", + "title": "Snippet" + }, + "polarity": { + "type": "string", + "enum": [ + "positive", + "negative" + ], + "title": "Polarity", + "default": "negative" + }, + "kbPath": { + "type": "string", + "title": "Kbpath", + "default": "" + }, + "kbSnippet": { + "type": "string", + "title": "Kbsnippet", + "default": "" + }, + "reasoning": { + "type": "string", + "title": "Reasoning", + "default": "" + }, + "evidence": { + "items": { + "$ref": "#/components/schemas/AccuracyCitationEvidence" + }, + "type": "array", + "title": "Evidence" + } + }, + "type": "object", + "required": [ + "claimId", + "claim", + "attributeId", + "attribute", + "neutralThemeId", + "neutralTheme", + "snippet" + ], + "title": "AccuracyCitationClaim", + "description": "A single inaccurate claim mapped to a cluster, surfaced on a cited page.\n\n``attribute`` carries the cluster's canonical claim so the drawer can group\nclaims the same way it groups sentiment attributes.\n\n``reasoning`` and ``evidence`` mirror the cluster's FactCheck verdict: the\n\"why it's inaccurate\" explanation plus the refuting knowledge-base snippets\nsurfaced in the Claim Analysis drawer. ``kb_path``/``kb_snippet`` are retained\nas the cluster's single representative snippet for backward compatibility." + }, + "AccuracyCitationEvidence": { + "properties": { + "kbName": { + "type": "string", + "title": "Kbname", + "default": "" + }, + "kbPath": { + "type": "string", + "title": "Kbpath", + "default": "" + }, + "kbSnippet": { + "type": "string", + "title": "Kbsnippet", + "default": "" + } + }, + "type": "object", + "title": "AccuracyCitationEvidence", + "description": "A single knowledge-base ground-truth snippet that refutes a claim's cluster.\n\n``kb_name`` is the official knowledge base name; ``kb_path`` is the document\npath within that knowledge base. ``kb_name`` is populated by the external API\nlayer (which can reach the knowledge-base service) and defaults to ``\"\"``\nelsewhere." + }, + "AccuracyOverviewQuery": { + "properties": { + "start_date": { + "type": "string", + "title": "Start Date" + }, + "end_date": { + "type": "string", + "title": "End Date" + }, + "comparison_start_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison Start Date" + }, + "comparison_end_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison End Date" + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "topic_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Topic Ids" + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "tag_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Tag Ids" + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "all", + "any" + ], + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": false + }, + "region_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Region Ids" + }, + "platform_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Platform Ids" + }, + "persona_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Persona Ids" + }, + "include_no_persona": { + "type": "boolean", + "title": "Include No Persona", + "default": false + }, + "prompt_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Prompt Ids" + }, + "citation_categories": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Citation Categories" + }, + "date_bucket": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Date Bucket" + }, + "group_by": { + "type": "string", + "enum": [ + "period", + "theme" + ], + "title": "Group By", + "default": "period" + } + }, + "type": "object", + "required": [ + "start_date", + "end_date", + "category_id" + ], + "title": "AccuracyOverviewQuery" + }, + "AccuracyOverviewResponse": { + "properties": { + "trendByPeriod": { + "items": { + "$ref": "#/components/schemas/AccuracyTrendPoint" + }, + "type": "array", + "title": "Trendbyperiod" + }, + "overallAccuracy": { + "type": "number", + "title": "Overallaccuracy" + }, + "accuracyChange": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Accuracychange" + }, + "scoreBreakdown": { + "items": { + "$ref": "#/components/schemas/AccuracyScoreBreakdown" + }, + "type": "array", + "title": "Scorebreakdown" + }, + "themeTrend": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/AccuracyThemeTrendSeries" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Themetrend" + }, + "availableSeries": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/AccuracyTrendSeriesMeta" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Availableseries" + } + }, + "type": "object", + "required": [ + "trendByPeriod", + "overallAccuracy", + "scoreBreakdown" + ], + "title": "AccuracyOverviewResponse" + }, + "AccuracyPagination": { + "properties": { + "dimension": { + "type": "string", + "const": "group", + "title": "Dimension", + "default": "group" + }, + "metric": { + "type": "string", + "enum": [ + "accuracy", + "inaccurate_claims" + ], + "title": "Metric", + "default": "accuracy" + }, + "mode": { + "type": "string", + "enum": [ + "current", + "delta" + ], + "title": "Mode", + "default": "current" + }, + "direction": { + "anyOf": [ + { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + { + "type": "null" + } + ], + "title": "Direction" + } + }, + "additionalProperties": false, + "type": "object", + "title": "AccuracyPagination", + "description": "Canonical grouped pagination plan for Accuracy Breakdown rows." + }, + "AccuracyScoreBreakdown": { + "properties": { + "status": { + "type": "string", + "title": "Status" + }, + "count": { + "type": "integer", + "title": "Count" + }, + "share": { + "type": "number", + "title": "Share" + }, + "countChange": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Countchange" + }, + "shareChange": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Sharechange" + } + }, + "type": "object", + "required": [ + "status", + "count", + "share" + ], + "title": "AccuracyScoreBreakdown" + }, + "AccuracyThemeTrendPoint": { + "properties": { + "date": { + "type": "string", + "title": "Date" + }, + "total": { + "type": "integer", + "title": "Total" + }, + "accurate": { + "type": "integer", + "title": "Accurate" + }, + "ratio": { + "type": "number", + "title": "Ratio" + } + }, + "type": "object", + "required": [ + "date", + "total", + "accurate", + "ratio" + ], + "title": "AccuracyThemeTrendPoint" + }, + "AccuracyThemeTrendSeries": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "label": { + "type": "string", + "title": "Label" + }, + "data": { + "items": { + "$ref": "#/components/schemas/AccuracyThemeTrendPoint" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "id", + "label", + "data" + ], + "title": "AccuracyThemeTrendSeries" + }, + "AccuracyTopicIdsQuery": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "title": "Start Date" + }, + "end_date": { + "type": "string", + "title": "End Date" + } + }, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "AccuracyTopicIdsQuery" + }, + "AccuracyTrendPoint": { + "properties": { + "date": { + "type": "string", + "title": "Date" + }, + "total": { + "type": "integer", + "title": "Total" + }, + "accurate": { + "type": "integer", + "title": "Accurate" + }, + "verified": { + "type": "integer", + "title": "Verified", + "default": 0 + }, + "ratio": { + "type": "number", + "title": "Ratio" + }, + "prevPeriodData": { + "anyOf": [ + { + "$ref": "#/components/schemas/AccuracyTrendPoint" + }, + { + "type": "null" + } + ] + } + }, + "type": "object", + "required": [ + "date", + "total", + "accurate", + "ratio" + ], + "title": "AccuracyTrendPoint" + }, + "AccuracyTrendSeriesMeta": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "label": { + "type": "string", + "title": "Label" + }, + "total": { + "type": "integer", + "title": "Total" + } + }, + "type": "object", + "required": [ + "id", + "label", + "total" + ], + "title": "AccuracyTrendSeriesMeta" + }, + "AddFolderRequest": { + "properties": { + "path": { + "type": "string", + "minLength": 1, + "title": "Path", + "description": "Folder path to create." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "path" + ], + "title": "AddFolderRequest" + }, + "AdditionalTab": { + "properties": { + "title": { + "type": "string", + "title": "Title", + "description": "The tab's title as authored. Not unique within a document, and a placeholder when the tab was never titled." + }, + "content_markdown": { + "type": "string", + "title": "Content Markdown", + "description": "This tab's body as markdown." + } + }, + "type": "object", + "required": [ + "title", + "content_markdown" + ], + "title": "AdditionalTab", + "description": "One of a document's tabs beyond the default one." + }, + "Agent": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id", + "description": "Unique ID for the agent." + }, + "organization_id": { + "type": "string", + "format": "uuid", + "title": "Organization Id", + "description": "Unique ID of the organization that owns the agent." + }, + "name": { + "type": "string", + "title": "Name", + "description": "Display name of the agent." + }, + "status": { + "$ref": "#/components/schemas/AgentStatus", + "description": "Current status of the agent." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At", + "description": "When the agent was created." + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "Short description of the agent, if provided." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "id", + "organization_id", + "name", + "status", + "created_at" + ], + "title": "Agent", + "description": "Summary information for an agent." + }, + "AgentDetail": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id", + "description": "Unique ID for the agent." + }, + "organization_id": { + "type": "string", + "format": "uuid", + "title": "Organization Id", + "description": "Unique ID of the organization that owns the agent." + }, + "name": { + "type": "string", + "title": "Name", + "description": "Display name of the agent." + }, + "status": { + "$ref": "#/components/schemas/AgentStatus", + "description": "Current status of the agent." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At", + "description": "When the agent was created." + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "Short description of the agent, if provided." + }, + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/AgentSchema" + }, + { + "type": "null" + } + ], + "description": "Input and output schemas for this agent. Omitted while the agent's graph cannot be previewed (e.g. an empty or structurally-invalid draft); check `validation` to see what needs fixing." + }, + "validation": { + "anyOf": [ + { + "$ref": "#/components/schemas/AgentValidation" + }, + { + "type": "null" + } + ], + "description": "Validation report for the agent's graph, when available. Use `validation.valid` to check the agent is publishable." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "id", + "organization_id", + "name", + "status", + "created_at" + ], + "title": "AgentDetail", + "description": "Detailed information for an agent." + }, + "AgentGraph": { + "properties": { + "agent_id": { + "type": "string", + "format": "uuid", + "title": "Agent Id", + "description": "Unique ID of the agent the graph belongs to." + }, + "version": { + "$ref": "#/components/schemas/AgentVersion", + "description": "Which version of the agent this graph is — `published` or `draft`." + }, + "graph": { + "additionalProperties": true, + "type": "object", + "title": "Graph", + "description": "Workflow graph (`{nodes, edges}`) in the canonical dialect — the same shape `create` and `update` accept. Treat it as an opaque object: it is returned verbatim, so tool-backed nodes appear in their lowered `tool` form rather than the friendly v1 node types. Read it back to copy and edit a known-good agent." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "agent_id", + "version", + "graph" + ], + "title": "AgentGraph", + "description": "An agent version's workflow graph in the canonical dialect." + }, + "AgentRun": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id", + "description": "Unique ID for the run." + }, + "agent_id": { + "type": "string", + "format": "uuid", + "title": "Agent Id", + "description": "Unique ID of the agent for this run." + }, + "status": { + "$ref": "#/components/schemas/AgentRunStatus", + "description": "Current status of the run." + }, + "started_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Started At", + "description": "When the run started, if it has started." + }, + "finished_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Finished At", + "description": "When the run finished, if it has completed." + }, + "error": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Error", + "description": "Error details, when the run fails and error information is available." + }, + "outputs": { + "additionalProperties": true, + "type": "object", + "title": "Outputs", + "description": "Output values returned by the run, keyed by variable ID. This object conforms to `schema.output` from the agent detail response and is empty when no outputs are available." + }, + "steps": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/AgentRunStep" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Steps", + "description": "Ordered step-by-step execution trace — one entry per node that ran, in execution order. Always present once the run has executed a node; per-node `outputs` inside each step are included only when the request asks for `verbose`." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "id", + "agent_id", + "status" + ], + "title": "AgentRun", + "description": "Status and result details for an agent run." + }, + "AgentRunStatus": { + "type": "string", + "enum": [ + "queued", + "running", + "succeeded", + "failed", + "cancelled", + "skipped", + "unknown" + ], + "title": "AgentRunStatus", + "description": "Current execution status for an agent run." + }, + "AgentRunStep": { + "properties": { + "node_id": { + "type": "string", + "title": "Node Id", + "description": "ID of the node that ran, within its agent graph." + }, + "node_type": { + "type": "string", + "title": "Node Type", + "description": "Kind of node, e.g. \"profound_visibility\", \"llm\", \"conditional\"." + }, + "title": { + "type": "string", + "title": "Title", + "description": "Human-readable title of the node." + }, + "status": { + "type": "string", + "title": "Status", + "description": "Terminal status of this node execution." + }, + "elapsed_time": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Elapsed Time", + "description": "Wall-clock seconds the node took, if recorded." + }, + "finished_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Finished At", + "description": "When the node finished, if it has." + }, + "error_message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Error Message", + "description": "Failure detail for this node, when it failed." + }, + "outputs": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Outputs", + "description": "Raw output payload this node produced. Included only when the request asks for `verbose`." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "node_id", + "node_type", + "title", + "status" + ], + "title": "AgentRunStep", + "description": "One executed node in a run's step trace, in execution order.\n\nThe lightweight fields always ship; ``outputs`` is populated only when the\nrun-retrieve request asks for ``verbose``." + }, + "AgentSchema": { + "properties": { + "input": { + "additionalProperties": true, + "type": "object", + "title": "Input", + "description": "JSON Schema for the agent's `inputs` object. Use the top-level property keys as input field names when starting a run." + }, + "output": { + "additionalProperties": true, + "type": "object", + "title": "Output", + "description": "JSON Schema for the `outputs` object returned by `GET /v1/agents/{agent_id}/runs/{run_id}`." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "input", + "output" + ], + "title": "AgentSchema", + "description": "Schema metadata for an agent." + }, + "AgentStatus": { + "type": "string", + "enum": [ + "draft", + "published", + "unknown" + ], + "title": "AgentStatus", + "description": "Current availability status for an agent." + }, + "AgentValidation": { + "properties": { + "valid": { + "type": "boolean", + "title": "Valid", + "description": "Whether the agent's graph is valid and ready to publish." + }, + "issues": { + "items": { + "$ref": "#/components/schemas/AgentValidationIssue" + }, + "type": "array", + "title": "Issues", + "description": "Problems found while validating the graph. Empty when `valid` is true." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "valid" + ], + "title": "AgentValidation", + "description": "Result of validating an agent's graph.\n\nMirrors the report computed on every read, so callers can confirm a draft\nis publishable before calling publish." + }, + "AgentValidationIssue": { + "properties": { + "code": { + "type": "string", + "title": "Code", + "description": "Stable machine-readable identifier for the kind of issue." + }, + "message": { + "type": "string", + "title": "Message", + "description": "Human-readable description of the issue." + }, + "node_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Node Id", + "description": "ID of the node the issue applies to, if node-specific." + }, + "node_title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Node Title", + "description": "Display title of the affected node, if available." + }, + "field": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Field", + "description": "Name of the offending field on the node, if field-specific." + }, + "field_title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Field Title", + "description": "Display title of the affected field, if available." + }, + "violation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Violation", + "description": "The specific constraint that was violated, if available." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "code", + "message" + ], + "title": "AgentValidationIssue", + "description": "A single problem found while validating an agent's graph." + }, + "AgentVersion": { + "type": "string", + "enum": [ + "published", + "draft" + ], + "title": "AgentVersion", + "description": "Version selector for retrieving a specific agent." + }, + "AnalysisBreakdown": { + "properties": { + "title": { + "type": "string", + "title": "Title" + }, + "weight": { + "type": "number", + "title": "Weight" + }, + "score": { + "type": "number", + "title": "Score" + } + }, + "type": "object", + "required": [ + "title", + "weight", + "score" + ], + "title": "AnalysisBreakdown" + }, + "AnalysisInputs": { + "properties": { + "topic": { + "anyOf": [ + { + "$ref": "#/components/schemas/TopicInput" + }, + { + "type": "null" + } + ] + }, + "prompt": { + "anyOf": [ + { + "$ref": "#/components/schemas/PromptInput" + }, + { + "type": "null" + } + ] + }, + "top_citations": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Top Citations" + }, + "user": { + "$ref": "#/components/schemas/UserInput" + } + }, + "type": "object", + "required": [ + "topic", + "prompt", + "top_citations", + "user" + ], + "title": "AnalysisInputs" + }, + "AnalysisSummary": { + "properties": { + "breakdown": { + "items": { + "$ref": "#/components/schemas/AnalysisBreakdown" + }, + "type": "array", + "title": "Breakdown" + } + }, + "type": "object", + "required": [ + "breakdown" + ], + "title": "AnalysisSummary" + }, + "AnalysisType": { + "type": "string", + "enum": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ], + "title": "AnalysisType" + }, + "AnalysisTypeFilter": { + "properties": { + "field": { + "type": "string", + "const": "analysis_type", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "enum": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ] + }, + { + "items": { + "type": "string", + "enum": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ] + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "AnalysisTypeFilter", + "description": "Filter by analysis type (visibility, sentiment, or accuracy)." + }, + "AnswerRow": { + "properties": { + "run_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Run Id" + }, + "date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Date" + }, + "model": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "topic": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Topic" + }, + "topic_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Topic Id" + }, + "region": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Region" + }, + "persona": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Persona" + }, + "tags": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Tags" + }, + "prompt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Prompt" + }, + "prompt_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Prompt Id" + }, + "response": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Response" + }, + "mentions": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Mentions" + }, + "citations": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Citations" + }, + "citation_details": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ExecutionCitationDetail" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Citation Details", + "description": "Citation metadata. `positions` identify citation locations in the answer text. Each `groups` entry represents a rendered citation pill; `group_position` is the source's position within that pill." + }, + "search_queries": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Search Queries" + }, + "analysis_types": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Analysis Types" + }, + "sentiment_claims": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Sentiment Claims" + } + }, + "additionalProperties": true, + "type": "object", + "title": "AnswerRow", + "description": "One answer row. Present fields depend on `include`; `model` is an `{id, name}` reference." + }, + "AnswersQuery": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date" + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date" + }, + "pagination": { + "$ref": "#/components/schemas/Pagination", + "description": "Pagination parameters for the results. Default is 10,000 rows with no offset." + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/RegionNameFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/AnalysisTypeFilter" + }, + { + "$ref": "#/components/schemas/PromptTypeFilter" + }, + { + "$ref": "#/components/schemas/PromptFilter" + }, + { + "$ref": "#/components/schemas/PromptIdFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/AssetIdFilter" + }, + { + "$ref": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "analysis_type": "#/components/schemas/AnalysisTypeFilter", + "asset_id": "#/components/schemas/AssetIdFilter", + "asset_name": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "prompt": "#/components/schemas/PromptFilter", + "prompt_id": "#/components/schemas/PromptIdFilter", + "prompt_type": "#/components/schemas/PromptTypeFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "region_name": "#/components/schemas/RegionNameFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter" + } + } + }, + "type": "array", + "title": "Filters", + "description": "List of filters to apply to the answers report." + }, + "include": { + "$ref": "#/components/schemas/EnabledFieldsResponse" + } + }, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "AnswersQuery", + "description": "Body for the answers endpoint." + }, + "AnswersRawData": { + "properties": { + "run_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Run Id" + }, + "created_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Created At" + }, + "prompt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Prompt" + }, + "prompt_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Prompt Id" + }, + "mentions": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Mentions" + }, + "analysis_types": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Analysis Types" + }, + "prompt_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Prompt Type" + }, + "response": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Response" + }, + "citations": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Citations" + }, + "citation_details": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/CitationDetail" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Citation Details" + }, + "web_search_results": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Web Search Results" + }, + "search_triggered": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Search Triggered" + }, + "themes": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Themes" + }, + "sentiment_themes": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/SentimentTheme" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Sentiment Themes", + "description": "Uses legacy sentiment data." + }, + "search_queries": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Search Queries" + }, + "topic": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Topic" + }, + "topic_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Topic Id" + }, + "region": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Region" + }, + "model": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Model" + }, + "model_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Model Id" + }, + "asset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Asset" + }, + "asset_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Asset Id" + }, + "tags": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Tags" + }, + "persona": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Persona" + } + }, + "type": "object", + "title": "AnswersRawData", + "description": "Raw data for the answers endpoint." + }, + "AnswersResponse": { + "properties": { + "info": { + "$ref": "#/components/schemas/AnswersResponseInfo" + }, + "data": { + "items": { + "$ref": "#/components/schemas/AnswersRawData" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "info", + "data" + ], + "title": "AnswersResponse", + "description": "Response for the answers endpoint." + }, + "AnswersResponseInfo": { + "properties": { + "total_rows": { + "type": "integer", + "title": "Total Rows" + } + }, + "type": "object", + "required": [ + "total_rows" + ], + "title": "AnswersResponseInfo" + }, + "AnswersV2Info": { + "properties": { + "total_results": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Total Results", + "description": "Total rows matching the query before pagination (null when not computed)." + }, + "count": { + "type": "integer", + "title": "Count", + "description": "Number of rows returned in `data` for this page." + }, + "next_cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Cursor", + "description": "Opaque cursor for the next page; null on the last page." + }, + "models": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Models", + "description": "Display names of the models the report covers." + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "Echoed request start date (YYYY-MM-DD, ET)." + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "Echoed request end date (YYYY-MM-DD, ET)." + }, + "filter": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Filter", + "description": "Echoed normalized filter tree, or null when no filter was sent." + }, + "include": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Include", + "description": "Row fields returned (echoes `include`, or all fields when omitted)." + } + }, + "additionalProperties": true, + "type": "object", + "required": [ + "count", + "models", + "start_date", + "end_date", + "include" + ], + "title": "AnswersV2Info" + }, + "AnswersV2Query": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "YYYY-MM-DD, ET, inclusive" + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "YYYY-MM-DD, ET, inclusive" + }, + "include": { + "anyOf": [ + { + "items": { + "type": "string", + "enum": [ + "run_id", + "date", + "model", + "topic", + "topic_id", + "persona", + "region", + "tags", + "prompt", + "prompt_id", + "response", + "mentions", + "citations", + "citation_details", + "search_queries", + "analysis_types", + "sentiment_claims" + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Include", + "description": "Which row fields to return: `run_id`, `date`, `model`, `topic`, `topic_id`, `region`, `persona`, `tags`, `prompt`, `prompt_id`, `response`, `mentions`, `citations`, `citation_details`, `search_queries`, `analysis_types`, `sentiment_claims`. Omit for all fields except `citation_details`, which must be requested explicitly because it is expensive." + }, + "filter": { + "anyOf": [ + { + "$ref": "#/components/schemas/FilterNode" + }, + { + "type": "null" + } + ], + "description": "and/or/not tree over `model`, `topic`, `region`, `persona`, `prompt`, `tag`, `analysis_type` (visibility/sentiment/factcheck); plus top-level `and` leaves `domain` or `page` (`is` one value, or `in` a list). Substring-search the prompt with `{\"field\": \"prompt\", \"op\": \"contains\", \"value\": \"…\"}`." + }, + "limit": { + "anyOf": [ + { + "type": "integer", + "maximum": 200, + "exclusiveMinimum": 0 + }, + { + "type": "null" + } + ], + "title": "Limit", + "description": "Page size; default 10, max 200." + }, + "max_results": { + "anyOf": [ + { + "type": "integer", + "exclusiveMinimum": 0 + }, + { + "type": "null" + } + ], + "title": "Max Results", + "description": "Stream endpoint only: cap the number of streamed rows (default: all)." + }, + "cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Cursor" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "AnswersV2Query" + }, + "AnswersV2Response": { + "properties": { + "info": { + "$ref": "#/components/schemas/AnswersV2Info" + }, + "data": { + "items": { + "$ref": "#/components/schemas/AnswerRow" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "info", + "data" + ], + "title": "AnswersV2Response" + }, + "ArchiveProjectRequest": { + "properties": { + "reason": { + "anyOf": [ + { + "type": "string", + "maxLength": 500, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Reason" + } + }, + "additionalProperties": false, + "type": "object", + "title": "ArchiveProjectRequest" + }, + "AssetIdFilter": { + "properties": { + "field": { + "type": "string", + "const": "asset_id", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "AssetIdFilter" + }, + "AssetRef": { + "properties": { + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Name" + }, + "owned": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Owned", + "description": "Whether the asset is owned by the category." + } + }, + "type": "object", + "title": "AssetRef" + }, + "BotNameFilter": { + "properties": { + "field": { + "type": "string", + "const": "bot_name", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "BotNameFilter", + "description": "Filter by bot name (user agent). Values come from analytics data and should\nnot be enum-constrained because web-v2 may send newly cataloged user-agent names." + }, + "BotProviderFilter": { + "properties": { + "field": { + "type": "string", + "const": "bot_provider", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "enum": [ + "openai", + "anthropic", + "chatgpt", + "deepseek", + "google", + "microsoft", + "perplexity", + "apple", + "bytedance", + "amazon", + "meta", + "duckduckgo", + "you", + "you.com", + "xai", + "grok", + "gemini", + "mistral", + "huawei", + "yandex", + "baidu", + "yahoo", + "commoncrawl", + "openclaw" + ] + }, + { + "items": { + "type": "string", + "enum": [ + "openai", + "anthropic", + "chatgpt", + "deepseek", + "google", + "microsoft", + "perplexity", + "apple", + "bytedance", + "amazon", + "meta", + "duckduckgo", + "you", + "you.com", + "xai", + "grok", + "gemini", + "mistral", + "huawei", + "yandex", + "baidu", + "yahoo", + "commoncrawl", + "openclaw" + ] + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "BotProviderFilter", + "description": "Filter by bot provider" + }, + "BotTypeFilter": { + "properties": { + "field": { + "type": "string", + "const": "bot_type", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "enum": [ + "ai_assistant", + "ai_training", + "index", + "ai_agent" + ] + }, + { + "items": { + "type": "string", + "enum": [ + "ai_assistant", + "ai_training", + "index", + "ai_agent" + ] + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "BotTypeFilter", + "description": "Filter by bot_type column (v2 hourly table only)" + }, + "BotsReportQuery": { + "properties": { + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "year", + "relative_week" + ], + "title": "Date Interval", + "description": "Date interval for the report. (only used with date dimension)", + "default": "day" + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "date", + "host", + "path", + "bot_name", + "bot_provider" + ] + }, + "type": "array", + "title": "Dimensions", + "description": "Dimensions to group the report by.", + "default": [] + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "count", + "citations", + "indexing", + "training", + "last_visit" + ] + }, + "type": "array", + "title": "Metrics" + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By", + "description": "\nCustom ordering of the report results.\n\nThe order is a record of key-value pairs where:\n- key is the field to order by, which can be a metric or dimension\n- value is the direction of the order, either 'asc' for ascending or 'desc' for descending.\n\nWhen not specified, the default order is the first metric in the query descending.\n ", + "default": {}, + "examples": [ + { + "date": "asc" + } + ] + }, + "pagination": { + "$ref": "#/components/schemas/Pagination", + "description": "Pagination settings for the report results." + }, + "domain": { + "type": "string", + "title": "Domain", + "description": "Domain to query logs for." + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date for logs. Accepts same formats as start_date. Defaults to now if omitted." + }, + "organization_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Organization Id" + }, + "metric_filters": { + "items": { + "$ref": "#/components/schemas/NumericMetricFilter" + }, + "type": "array", + "title": "Metric Filters", + "description": "Numeric filters applied after report metrics are calculated." + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/PathFilter" + }, + { + "$ref": "#/components/schemas/BotNameFilter" + }, + { + "$ref": "#/components/schemas/BotProviderFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "bot_name": "#/components/schemas/BotNameFilter", + "bot_provider": "#/components/schemas/BotProviderFilter", + "path": "#/components/schemas/PathFilter" + } + } + }, + "type": "array", + "title": "Filters", + "description": "Filters for bots report." + } + }, + "type": "object", + "required": [ + "metrics", + "domain", + "start_date" + ], + "title": "BotsReportQuery" + }, + "BotsReportQueryV2": { + "properties": { + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "description": "Date interval for the report. (only used with date dimension)", + "default": "day" + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "date", + "hour", + "host", + "path", + "bot_name", + "bot_provider", + "bot_type" + ] + }, + "type": "array", + "title": "Dimensions", + "description": "Dimensions to group the report by.", + "default": [] + }, + "metrics": { + "items": { + "anyOf": [ + { + "type": "string", + "enum": [ + "count", + "citations", + "indexing", + "training", + "last_visit" + ] + }, + { + "type": "string", + "const": "agents" + } + ] + }, + "type": "array", + "title": "Metrics" + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "propertyNames": { + "enum": [ + "date", + "hour", + "host", + "path", + "count", + "citations", + "indexing", + "training", + "agents", + "last_visit", + "bot_type" + ] + }, + "type": "object", + "title": "Order By", + "description": "\nCustom ordering of the report results.\n\nThe order is a record of key-value pairs where:\n- key is the field to order by, which can be a metric or dimension\n- value is the direction of the order, either 'asc' for ascending or 'desc' for descending.\n\nWhen not specified, the default order is the first metric in the query descending.\n ", + "default": {}, + "examples": [ + { + "date": "asc" + } + ] + }, + "pagination": { + "$ref": "#/components/schemas/Pagination", + "description": "Pagination settings for the report results." + }, + "domain": { + "type": "string", + "title": "Domain", + "description": "Domain to query logs for." + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted." + }, + "organization_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Organization Id" + }, + "timezone": { + "type": "string", + "title": "Timezone", + "description": "IANA timezone name for date bucketing and filter boundaries.", + "default": "UTC" + }, + "metric_filters": { + "items": { + "$ref": "#/components/schemas/NumericMetricFilter" + }, + "type": "array", + "title": "Metric Filters", + "description": "Numeric filters applied after report metrics are calculated." + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/PathFilter" + }, + { + "$ref": "#/components/schemas/BotNameFilter" + }, + { + "$ref": "#/components/schemas/BotProviderFilter" + }, + { + "$ref": "#/components/schemas/BotTypeFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "bot_name": "#/components/schemas/BotNameFilter", + "bot_provider": "#/components/schemas/BotProviderFilter", + "bot_type": "#/components/schemas/BotTypeFilter", + "path": "#/components/schemas/PathFilter" + } + } + }, + "type": "array", + "title": "Filters", + "description": "Filters for bots report." + }, + "domain_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Domain Id", + "description": "Domain UUID used for tag lookups." + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Tags" + } + }, + "type": "object", + "required": [ + "metrics", + "domain", + "start_date" + ], + "title": "BotsReportQueryV2" + }, + "BrandNameFilter": { + "properties": { + "field": { + "type": "string", + "const": "brand_name", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "BrandNameFilter" + }, + "Category": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + }, + "internal_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Internal Name" + } + }, + "type": "object", + "required": [ + "id", + "name" + ], + "title": "Category" + }, + "CategoryAsset": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + }, + "website": { + "type": "string", + "title": "Website" + }, + "alternate_domains": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Alternate Domains" + }, + "is_owned": { + "type": "boolean", + "title": "Is Owned" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "logo_url": { + "type": "string", + "title": "Logo Url" + } + }, + "type": "object", + "required": [ + "id", + "name", + "website", + "is_owned", + "created_at", + "logo_url" + ], + "title": "CategoryAsset" + }, + "CategoryAssetWithCategory": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + }, + "website": { + "type": "string", + "title": "Website" + }, + "alternate_domains": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Alternate Domains" + }, + "is_owned": { + "type": "boolean", + "title": "Is Owned" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "logo_url": { + "type": "string", + "title": "Logo Url" + }, + "category": { + "$ref": "#/components/schemas/Category" + }, + "organization": { + "$ref": "#/components/schemas/Organization" + } + }, + "type": "object", + "required": [ + "id", + "name", + "website", + "is_owned", + "created_at", + "logo_url", + "category", + "organization" + ], + "title": "CategoryAssetWithCategory" + }, + "CategoryPersona": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + }, + "persona": { + "$ref": "#/components/schemas/PersonaProfile" + } + }, + "type": "object", + "required": [ + "id", + "name", + "persona" + ], + "title": "CategoryPersona" + }, + "CategoryPersonasResponse": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/CategoryPersona" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "data" + ], + "title": "CategoryPersonasResponse" + }, + "CategoryPromptsResponse": { + "properties": { + "info": { + "$ref": "#/components/schemas/PaginationInfo" + }, + "data": { + "items": { + "$ref": "#/components/schemas/Prompt" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "info", + "data" + ], + "title": "CategoryPromptsResponse" + }, + "CategoryWithOrganization": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + }, + "internal_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Internal Name" + }, + "organization": { + "$ref": "#/components/schemas/Organization" + } + }, + "type": "object", + "required": [ + "id", + "name", + "organization" + ], + "title": "CategoryWithOrganization", + "description": "A category annotated with the organization that owns it." + }, + "CitationCategoriesResponse": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/CitationCategory" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "data" + ], + "title": "CitationCategoriesResponse" + }, + "CitationCategory": { + "properties": { + "value": { + "type": "string", + "title": "Value", + "description": "Value to pass to the v2 citations `citation_category` filter." + }, + "name": { + "type": "string", + "title": "Name", + "description": "Display name." + } + }, + "type": "object", + "required": [ + "value", + "name" + ], + "title": "CitationCategory" + }, + "CitationCategoryFilter": { + "properties": { + "field": { + "type": "string", + "const": "citation_category", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "CitationCategoryFilter", + "description": "Filter by citation category" + }, + "CitationDetail": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "clean_url": { + "type": "string", + "title": "Clean Url" + }, + "title": { + "type": "string", + "title": "Title" + }, + "text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Text" + }, + "hostname": { + "type": "string", + "title": "Hostname" + }, + "path": { + "type": "string", + "title": "Path" + }, + "first_cited_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "First Cited At" + }, + "positions": { + "items": { + "type": "integer" + }, + "type": "array", + "title": "Positions" + }, + "groups": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/CitationDetailGroup" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Groups" + }, + "citation_category": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Citation Category" + } + }, + "type": "object", + "required": [ + "url", + "clean_url", + "title", + "hostname", + "path" + ], + "title": "CitationDetail" + }, + "CitationDetailGroup": { + "properties": { + "group_id": { + "type": "integer", + "title": "Group Id" + }, + "group_position": { + "type": "integer", + "title": "Group Position" + } + }, + "type": "object", + "required": [ + "group_id", + "group_position" + ], + "title": "CitationDetailGroup" + }, + "CitationRow": { + "properties": { + "domain": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Domain" + }, + "page": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Page" + }, + "rank": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Rank" + }, + "date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Date" + }, + "model": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "topic": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "region": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "persona": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "prompt": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Count" + }, + "citation_share": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Citation Share" + }, + "first_cited_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "First Cited At", + "description": "Pages only." + } + }, + "additionalProperties": true, + "type": "object", + "title": "CitationRow", + "description": "One (source x group) row. Each row carries `domain` or `page`; group dims/metrics vary." + }, + "CitationScoreRef": { + "properties": { + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Url" + }, + "citation_category": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Citation Category" + } + }, + "type": "object", + "title": "CitationScoreRef" + }, + "CitationTag": { + "properties": { + "value": { + "type": "string", + "title": "Value", + "description": "Value to pass to the v2 citations `citation_tag` filter." + }, + "name": { + "type": "string", + "title": "Name", + "description": "Display name." + } + }, + "type": "object", + "required": [ + "value", + "name" + ], + "title": "CitationTag" + }, + "CitationTagsResponse": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/CitationTag" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "data" + ], + "title": "CitationTagsResponse" + }, + "CitationsQuery": { + "properties": { + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "description": "Date interval for the report. (only used with date dimension)", + "default": "day" + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "hostname", + "path", + "date", + "region", + "topic", + "topic_id", + "model", + "tag", + "prompt", + "prompt_id", + "url", + "root_domain", + "persona", + "citation_category" + ] + }, + "type": "array", + "title": "Dimensions", + "description": "Dimensions to group the report by.", + "default": [] + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "count", + "citation_share", + "share_of_voice", + "first_cited_at" + ] + }, + "type": "array", + "title": "Metrics", + "description": "Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead.", + "deprecated_values": { + "share_of_voice": "Use citation_share instead" + } + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By", + "description": "\n Custom ordering of the report results.\n\n The order is a record of key-value pairs where:\n - `key` is the field to order by, which can be a metric or dimension\n - `value` is the direction of the order, either `asc` for ascending or `desc` for descending.\n\n When not specified, the default order is the first metric in the query descending.\n ", + "default": {}, + "examples": [ + { + "date": "asc" + }, + { + "count": "desc", + "date": "asc" + } + ] + }, + "pagination": { + "$ref": "#/components/schemas/Pagination", + "description": "Pagination settings for the report results." + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/HostnameFilter" + }, + { + "$ref": "#/components/schemas/PathFilter" + }, + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/RegionNameFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/TopicNameFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/TagNameFilter" + }, + { + "$ref": "#/components/schemas/UrlFilter" + }, + { + "$ref": "#/components/schemas/RootDomainFilter" + }, + { + "$ref": "#/components/schemas/AnalysisTypeFilter" + }, + { + "$ref": "#/components/schemas/PromptTypeFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + }, + { + "$ref": "#/components/schemas/CitationCategoryFilter" + }, + { + "$ref": "#/components/schemas/PromptFilter" + }, + { + "$ref": "#/components/schemas/PromptIdFilter" + }, + { + "$ref": "#/components/schemas/MentionedFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "analysis_type": "#/components/schemas/AnalysisTypeFilter", + "citation_category": "#/components/schemas/CitationCategoryFilter", + "hostname": "#/components/schemas/HostnameFilter", + "mentioned": "#/components/schemas/MentionedFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "path": "#/components/schemas/PathFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "prompt": "#/components/schemas/PromptFilter", + "prompt_id": "#/components/schemas/PromptIdFilter", + "prompt_type": "#/components/schemas/PromptTypeFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "region_name": "#/components/schemas/RegionNameFilter", + "root_domain": "#/components/schemas/RootDomainFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "tag_name": "#/components/schemas/TagNameFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter", + "topic_name": "#/components/schemas/TopicNameFilter", + "url": "#/components/schemas/UrlFilter" + } + } + }, + "type": "array", + "title": "Filters", + "description": "List of filters to apply to the citations report." + } + }, + "type": "object", + "required": [ + "metrics", + "category_id", + "start_date", + "end_date" + ], + "title": "CitationsQuery" + }, + "CitationsResponse": { + "properties": { + "info": { + "$ref": "#/components/schemas/Info" + }, + "data": { + "items": { + "$ref": "#/components/schemas/CitationsResult" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "info", + "data" + ], + "title": "CitationsResponse", + "examples": [ + { + "data": [ + { + "dimensions": [ + "example.com", + "/some/path", + "2023-10-01" + ], + "metrics": [ + 10, + 0.05 + ] + } + ], + "info": { + "query": { + "date_interval": "day", + "dimensions": [ + "hostname", + "path", + "date" + ], + "filters": [ + { + "field": "hostname", + "operator": "is", + "value": "example.com" + } + ], + "metrics": [ + "count", + "citation_share" + ] + }, + "total_rows": 200 + } + } + ] + }, + "CitationsResult": { + "properties": { + "metrics": { + "items": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "type": "array", + "title": "Metrics" + }, + "dimensions": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "type": "array", + "title": "Dimensions" + } + }, + "type": "object", + "required": [ + "metrics", + "dimensions" + ], + "title": "CitationsResult" + }, + "CitationsV2Info": { + "properties": { + "total_results": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Total Results", + "description": "Total rows matching the query before pagination (null when not computed)." + }, + "count": { + "type": "integer", + "title": "Count", + "description": "Number of rows returned in `data` for this page." + }, + "next_cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Cursor", + "description": "Opaque cursor for the next page; null on the last page." + }, + "models": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Models", + "description": "Display names of the models the report covers." + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "Echoed request start date (YYYY-MM-DD, ET)." + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "Echoed request end date (YYYY-MM-DD, ET)." + }, + "filter": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Filter", + "description": "Echoed normalized filter tree, or null when no filter was sent." + }, + "scope": { + "type": "string", + "title": "Scope", + "description": "Citation scope: `all` or `owned`." + }, + "metrics": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Metrics", + "description": "Metrics returned per row." + }, + "analysis_types": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Analysis Types", + "description": "Analysis types the citations were drawn from." + } + }, + "additionalProperties": true, + "type": "object", + "required": [ + "count", + "models", + "start_date", + "end_date", + "scope", + "metrics", + "analysis_types" + ], + "title": "CitationsV2Info" + }, + "CitationsV2Query": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "YYYY-MM-DD, ET, inclusive" + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "YYYY-MM-DD, ET, inclusive" + }, + "entity": { + "type": "string", + "enum": [ + "domain", + "page", + "citation_category" + ], + "title": "Entity", + "description": "What each row represents: `domain` (default), `page`, or `citation_category`. Legacy: `group_by: [\"page\"]` (with `entity` omitted) is still accepted and is equivalent to `entity: \"page\"`. `citation_category` uses the dashboard split view: a citation counts under both its page-level and domain-level category, so category shares can sum to more than 100%.", + "default": "domain" + }, + "group_by": { + "items": { + "type": "string", + "enum": [ + "page", + "date", + "model", + "topic", + "region", + "persona", + "prompt" + ] + }, + "type": "array", + "title": "Group By" + }, + "metrics": { + "anyOf": [ + { + "items": { + "type": "string", + "enum": [ + "count", + "citation_share", + "rank", + "first_cited_at" + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Metrics" + }, + "interval": { + "type": "string", + "enum": [ + "day", + "week", + "month" + ], + "title": "Interval", + "default": "day" + }, + "scope": { + "type": "string", + "enum": [ + "all", + "owned" + ], + "title": "Scope", + "description": "`all` (every cited domain) or `owned` (only your owned domains). Applies to `entity=domain`.", + "default": "all" + }, + "filter": { + "anyOf": [ + { + "$ref": "#/components/schemas/FilterNode" + }, + { + "type": "null" + } + ], + "description": "`citation_category` filters on a cited URL's single category; `citation_tag` filters on the custom citation tags a URL carries (a URL can carry several). List the category's tags with `GET /v1/org/categories/{category_id}/citation-tags`." + }, + "limit": { + "anyOf": [ + { + "type": "integer", + "maximum": 50, + "exclusiveMinimum": 0 + }, + { + "type": "null" + } + ], + "title": "Limit", + "description": "Page size; default 10, max 50." + }, + "max_results": { + "anyOf": [ + { + "type": "integer", + "exclusiveMinimum": 0 + }, + { + "type": "null" + } + ], + "title": "Max Results", + "description": "Stream endpoint only: cap the number of streamed rows (default: all)." + }, + "cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Cursor" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "CitationsV2Query" + }, + "CitationsV2Response": { + "properties": { + "info": { + "$ref": "#/components/schemas/CitationsV2Info" + }, + "data": { + "items": { + "$ref": "#/components/schemas/CitationRow" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "info", + "data" + ], + "title": "CitationsV2Response" + }, + "ClaimBreakdownQuery": { + "properties": { + "start_date": { + "type": "string", + "title": "Start Date" + }, + "end_date": { + "type": "string", + "title": "End Date" + }, + "comparison_start_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison Start Date" + }, + "comparison_end_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison End Date" + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "topic_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Topic Ids" + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "tag_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Tag Ids" + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "all", + "any" + ], + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": false + }, + "region_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Region Ids" + }, + "platform_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Platform Ids" + }, + "persona_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Persona Ids" + }, + "include_no_persona": { + "type": "boolean", + "title": "Include No Persona", + "default": false + }, + "prompt_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Prompt Ids" + }, + "citation_categories": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Citation Categories" + }, + "cluster_id": { + "type": "string", + "format": "uuid", + "title": "Cluster Id" + } + }, + "type": "object", + "required": [ + "start_date", + "end_date", + "category_id", + "cluster_id" + ], + "title": "ClaimBreakdownQuery" + }, + "ClaimBreakdownResponse": { + "properties": { + "platform": { + "items": { + "$ref": "#/components/schemas/ClaimBreakdownRow" + }, + "type": "array", + "title": "Platform" + }, + "prompt": { + "items": { + "$ref": "#/components/schemas/ClaimPromptBreakdownRow" + }, + "type": "array", + "title": "Prompt" + } + }, + "type": "object", + "required": [ + "platform", + "prompt" + ], + "title": "ClaimBreakdownResponse" + }, + "ClaimBreakdownRow": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "label": { + "type": "string", + "title": "Label" + }, + "responseCount": { + "type": "integer", + "title": "Responsecount" + }, + "totalResponseCount": { + "type": "integer", + "title": "Totalresponsecount" + }, + "responseShare": { + "type": "number", + "title": "Responseshare" + }, + "responseShareDelta": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Responsesharedelta" + }, + "prevResponseCount": { + "type": "integer", + "title": "Prevresponsecount" + }, + "prevTotalResponseCount": { + "type": "integer", + "title": "Prevtotalresponsecount" + } + }, + "type": "object", + "required": [ + "id", + "label", + "responseCount", + "totalResponseCount", + "responseShare", + "prevResponseCount", + "prevTotalResponseCount" + ], + "title": "ClaimBreakdownRow" + }, + "ClaimCitationRow": { + "properties": { + "href": { + "type": "string", + "title": "Href" + }, + "hostname": { + "type": "string", + "title": "Hostname" + }, + "path": { + "type": "string", + "title": "Path" + }, + "citationCategory": { + "type": "string", + "title": "Citationcategory" + }, + "domainCategory": { + "type": "string", + "title": "Domaincategory" + }, + "snippet": { + "type": "string", + "title": "Snippet" + }, + "citationCount": { + "type": "number", + "title": "Citationcount" + }, + "citationShare": { + "type": "number", + "title": "Citationshare" + }, + "citationShareDelta": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Citationsharedelta" + } + }, + "type": "object", + "required": [ + "href", + "hostname", + "path", + "citationCategory", + "domainCategory", + "snippet", + "citationCount", + "citationShare" + ], + "title": "ClaimCitationRow" + }, + "ClaimCitationSource": { + "properties": { + "href": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Href" + }, + "hostname": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Hostname" + }, + "citation_category": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Citation Category" + }, + "domain_category": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Domain Category" + }, + "snippet": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Snippet" + }, + "citation_share": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Citation Share" + } + }, + "type": "object", + "title": "ClaimCitationSource" + }, + "ClaimCitationsQuery": { + "properties": { + "start_date": { + "type": "string", + "title": "Start Date" + }, + "end_date": { + "type": "string", + "title": "End Date" + }, + "comparison_start_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison Start Date" + }, + "comparison_end_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison End Date" + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "topic_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Topic Ids" + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "tag_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Tag Ids" + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "all", + "any" + ], + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": false + }, + "region_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Region Ids" + }, + "platform_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Platform Ids" + }, + "persona_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Persona Ids" + }, + "include_no_persona": { + "type": "boolean", + "title": "Include No Persona", + "default": false + }, + "prompt_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Prompt Ids" + }, + "citation_categories": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Citation Categories" + }, + "cluster_id": { + "type": "string", + "format": "uuid", + "title": "Cluster Id" + }, + "limit": { + "type": "integer", + "minimum": 1, + "title": "Limit", + "default": 10 + }, + "offset": { + "type": "integer", + "minimum": 0, + "title": "Offset", + "default": 0 + }, + "search_query": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Search Query" + }, + "sort_order": { + "type": "string", + "enum": [ + "asc", + "desc" + ], + "title": "Sort Order", + "default": "desc" + } + }, + "type": "object", + "required": [ + "start_date", + "end_date", + "category_id", + "cluster_id" + ], + "title": "ClaimCitationsQuery" + }, + "ClaimCitationsResponse": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/ClaimCitationRow" + }, + "type": "array", + "title": "Data" + }, + "totalCount": { + "type": "integer", + "title": "Totalcount" + } + }, + "type": "object", + "required": [ + "data", + "totalCount" + ], + "title": "ClaimCitationsResponse" + }, + "ClaimEvidence": { + "properties": { + "id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Id" + }, + "kb_path": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Kb Path" + }, + "kb_snippet": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Kb Snippet" + }, + "source_updated_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Source Updated At" + } + }, + "type": "object", + "title": "ClaimEvidence" + }, + "ClaimModelOccurrence": { + "properties": { + "id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Id" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Name" + }, + "occurrence": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Occurrence", + "description": "Only populated for entries in `models`; omitted from grouped-section `model`." + } + }, + "type": "object", + "title": "ClaimModelOccurrence" + }, + "ClaimPromptBreakdownRow": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "label": { + "type": "string", + "title": "Label" + }, + "responseCount": { + "type": "integer", + "title": "Responsecount" + }, + "totalResponseCount": { + "type": "integer", + "title": "Totalresponsecount" + }, + "responseShare": { + "type": "number", + "title": "Responseshare" + }, + "responseShareDelta": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Responsesharedelta" + }, + "prevResponseCount": { + "type": "integer", + "title": "Prevresponsecount" + }, + "prevTotalResponseCount": { + "type": "integer", + "title": "Prevtotalresponsecount" + }, + "promptId": { + "type": "string", + "title": "Promptid" + }, + "promptText": { + "type": "string", + "title": "Prompttext" + }, + "topicId": { + "type": "string", + "title": "Topicid" + }, + "hasCurrent": { + "type": "boolean", + "title": "Hascurrent" + } + }, + "type": "object", + "required": [ + "id", + "label", + "responseCount", + "totalResponseCount", + "responseShare", + "prevResponseCount", + "prevTotalResponseCount", + "promptId", + "promptText", + "topicId", + "hasCurrent" + ], + "title": "ClaimPromptBreakdownRow" + }, + "ClusterExampleRun": { + "properties": { + "runId": { + "type": "string", + "title": "Runid" + }, + "claim": { + "type": "string", + "title": "Claim" + }, + "responseSnippet": { + "type": "string", + "title": "Responsesnippet" + }, + "modelId": { + "type": "string", + "title": "Modelid" + }, + "regionId": { + "type": "string", + "title": "Regionid" + }, + "createdAt": { + "type": "string", + "title": "Createdat" + } + }, + "type": "object", + "required": [ + "runId", + "claim", + "responseSnippet", + "modelId", + "regionId", + "createdAt" + ], + "title": "ClusterExampleRun" + }, + "ClusterExampleRunsQuery": { + "properties": { + "start_date": { + "type": "string", + "title": "Start Date" + }, + "end_date": { + "type": "string", + "title": "End Date" + }, + "comparison_start_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison Start Date" + }, + "comparison_end_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison End Date" + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "topic_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Topic Ids" + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "tag_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Tag Ids" + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "all", + "any" + ], + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": false + }, + "region_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Region Ids" + }, + "platform_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Platform Ids" + }, + "persona_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Persona Ids" + }, + "include_no_persona": { + "type": "boolean", + "title": "Include No Persona", + "default": false + }, + "prompt_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Prompt Ids" + }, + "citation_categories": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Citation Categories" + }, + "cluster_id": { + "type": "string", + "format": "uuid", + "title": "Cluster Id" + }, + "limit": { + "type": "integer", + "minimum": 1, + "title": "Limit", + "default": 20 + }, + "offset": { + "type": "integer", + "minimum": 0, + "title": "Offset", + "default": 0 + } + }, + "type": "object", + "required": [ + "start_date", + "end_date", + "category_id", + "cluster_id" + ], + "title": "ClusterExampleRunsQuery" + }, + "ClusterExampleRunsResponse": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/ClusterExampleRun" + }, + "type": "array", + "title": "Data" + }, + "totalCount": { + "type": "integer", + "title": "Totalcount" + } + }, + "type": "object", + "required": [ + "data", + "totalCount" + ], + "title": "ClusterExampleRunsResponse" + }, + "ClusterModelShare": { + "properties": { + "modelId": { + "type": "string", + "title": "Modelid" + }, + "occurrence": { + "type": "number", + "title": "Occurrence" + } + }, + "type": "object", + "required": [ + "modelId", + "occurrence" + ], + "title": "ClusterModelShare" + }, + "ClusterVerificationPair": { + "properties": { + "pairId": { + "type": "string", + "title": "Pairid" + }, + "snippetIdx": { + "type": "integer", + "title": "Snippetidx" + }, + "kbPath": { + "type": "string", + "title": "Kbpath" + }, + "quote": { + "type": "string", + "title": "Quote" + }, + "reasoning": { + "type": "string", + "title": "Reasoning" + }, + "sourceUpdatedAt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Sourceupdatedat" + } + }, + "type": "object", + "required": [ + "pairId", + "snippetIdx", + "kbPath", + "quote", + "reasoning" + ], + "title": "ClusterVerificationPair" + }, + "ClusterVerificationPairsQuery": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "cluster_id": { + "type": "string", + "format": "uuid", + "title": "Cluster Id" + } + }, + "type": "object", + "required": [ + "category_id", + "cluster_id" + ], + "title": "ClusterVerificationPairsQuery" + }, + "ClusterVerificationPairsResponse": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/ClusterVerificationPair" + }, + "type": "array", + "title": "Data" + }, + "clusterReasoning": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Clusterreasoning" + } + }, + "type": "object", + "required": [ + "data" + ], + "title": "ClusterVerificationPairsResponse" + }, + "Comment": { + "properties": { + "content": { + "type": "string", + "title": "Content", + "description": "The comment's text." + }, + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Context", + "description": "Text the comment was left on. `null` for a comment on no specific text, never an empty string." + } + }, + "type": "object", + "required": [ + "content" + ], + "title": "Comment", + "description": "One review comment, mapped from upstream's open, unvalidated shape into a closed contract.\n\nUpstream's own comment schema — `body`, `quoted_text`, `author`, `replies`, `resolved` — is\ndocumented as not a closed contract. Only `body` and `quoted_text` are mapped through, as\n`content` and `context`; commenter identity, reply threads and resolution state are dropped\nhere, not relayed." + }, + "ContentAnalysis": { + "properties": { + "content": { + "$ref": "#/components/schemas/DocumentContent" + }, + "aeo_content_score": { + "anyOf": [ + { + "$ref": "#/components/schemas/AEOScore" + }, + { + "type": "null" + } + ] + }, + "analysis": { + "$ref": "#/components/schemas/AnalysisSummary" + }, + "recommendations": { + "items": { + "$ref": "#/components/schemas/Recommendation" + }, + "type": "array", + "title": "Recommendations" + }, + "inputs": { + "$ref": "#/components/schemas/AnalysisInputs" + } + }, + "type": "object", + "required": [ + "content", + "aeo_content_score", + "analysis", + "recommendations", + "inputs" + ], + "title": "ContentAnalysis" + }, + "ContentFormat": { + "type": "string", + "enum": [ + "markdown", + "html" + ], + "title": "ContentFormat" + }, + "ContentOptimization": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id" + }, + "title": { + "type": "string", + "title": "Title" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "extracted_input": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Extracted Input" + }, + "type": { + "$ref": "#/components/schemas/ContentType" + }, + "status": { + "type": "string", + "title": "Status" + } + }, + "type": "object", + "required": [ + "id", + "title", + "created_at", + "extracted_input", + "type", + "status" + ], + "title": "ContentOptimization" + }, + "ContentOptimizationAnalysisResponse": { + "properties": { + "data": { + "$ref": "#/components/schemas/ContentAnalysis" + } + }, + "type": "object", + "required": [ + "data" + ], + "title": "ContentOptimizationAnalysisResponse" + }, + "ContentOptimizationResponse": { + "properties": { + "info": { + "$ref": "#/components/schemas/ContentOptimizationResponseInfo" + }, + "data": { + "items": { + "$ref": "#/components/schemas/ContentOptimization" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "info", + "data" + ], + "title": "ContentOptimizationResponse" + }, + "ContentOptimizationResponseInfo": { + "properties": { + "total_rows": { + "type": "integer", + "title": "Total Rows" + }, + "query": { + "$ref": "#/components/schemas/OptimizationQuery" + } + }, + "type": "object", + "required": [ + "total_rows", + "query" + ], + "title": "ContentOptimizationResponseInfo" + }, + "ContentType": { + "type": "string", + "enum": [ + "file", + "text", + "url" + ], + "title": "ContentType" + }, + "CreateAgentRequest": { + "properties": { + "organization_id": { + "type": "string", + "format": "uuid", + "title": "Organization Id", + "description": "ID of the organization that will own the agent. Required — Profound API keys are user-scoped, so the owning organization must be chosen explicitly. The caller must be a member of this organization." + }, + "name": { + "type": "string", + "minLength": 1, + "title": "Name", + "description": "Display name for the agent. Must be non-empty." + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "Short description of the agent." + }, + "graph": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Graph", + "description": "Initial workflow graph for the agent's draft version. Optional — an agent can be created empty and have its graph filled in later." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "organization_id", + "name" + ], + "title": "CreateAgentRequest", + "description": "Request body for creating a draft agent." + }, + "CreateDocumentRequest": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id", + "description": "ID for the new document, chosen by you. Creation is idempotent on this ID: repeating a request with the same ID returns the existing document instead of creating a second one, so a retry after a network error is safe." + }, + "organization_id": { + "type": "string", + "format": "uuid", + "title": "Organization Id", + "description": "ID of the organization that will own the document. Required — Profound API keys are user-scoped, so the owning organization must be chosen explicitly. The caller must be a member of this organization." + }, + "name": { + "type": "string", + "minLength": 1, + "title": "Name", + "description": "Title for the document. Must be non-empty." + }, + "content_markdown": { + "type": "string", + "minLength": 1, + "title": "Content Markdown", + "description": "Initial document body as markdown. Must be non-empty. Rendered into the collaborative editor, so the result is real editable content, not a stored blob." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "id", + "organization_id", + "name", + "content_markdown" + ], + "title": "CreateDocumentRequest", + "description": "Request body for creating a document with markdown content." + }, + "CreateDocumentResponse": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id", + "description": "The document's ID." + }, + "name": { + "type": "string", + "title": "Name", + "description": "The document's title." + }, + "url": { + "type": "string", + "title": "Url", + "description": "Link to open the document in the Profound app." + }, + "visibility": { + "type": "string", + "enum": [ + "invited_only", + "organization" + ], + "title": "Visibility", + "description": "General access scope. New documents are `invited_only`." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At", + "description": "When the document was created." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Updated At", + "description": "When the document was last modified. Seeding the initial content counts, so a freshly created document is normally modified a moment after it was created." + }, + "owner_user_id": { + "type": "string", + "format": "uuid", + "title": "Owner User Id", + "description": "ID of the document's owner." + }, + "owner_email": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Owner Email", + "description": "Email of the document's owner. `null` when the owning profile has been deleted or could not be resolved." + }, + "author_type": { + "type": "string", + "enum": [ + "user", + "agent" + ], + "title": "Author Type", + "description": "Whether the document's owner is a person (`user`) or an agent (`agent`)." + }, + "app_delegate": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "App Delegate", + "description": "Which integration created the document, derived server-side from the credential that authenticated the write. `null` for documents created outside any integration. An open-ended value, not a fixed set — known values today include `external-api` and `context-manager`, and more are added as new integrations ship." + }, + "category_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Category Name", + "description": "Name of the brand category set on the document, if any. Paired with `company_name`; writable only on create." + }, + "company_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Company Name", + "description": "Name of the brand/company set on the document, if any. Paired with `category_name`; writable only on create." + }, + "version_hash": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Version Hash", + "description": "Opaque token that changes whenever the document's content changes. `null` when this call found an existing document with the same id (idempotent create) rather than creating one, or when the token could not be minted. Bare hex, up to 128 characters, with no fixed prefix — treat it as opaque and do not parse it. It detects change; it is not a precondition, and a matching token is not licence to overwrite blindly." + } + }, + "type": "object", + "required": [ + "id", + "name", + "url", + "visibility", + "created_at", + "updated_at", + "owner_user_id", + "owner_email", + "author_type", + "app_delegate", + "category_name", + "company_name", + "version_hash" + ], + "title": "CreateDocumentResponse", + "description": "The document that was created, plus the change-detection token minted for this write." + }, + "CreateProjectRequest": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "title": { + "anyOf": [ + { + "type": "string", + "maxLength": 120, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Title" + }, + "project_name": { + "anyOf": [ + { + "type": "string", + "maxLength": 120, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Project Name" + }, + "focus": { + "anyOf": [ + { + "type": "string", + "maxLength": 2000, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Focus" + }, + "topics": { + "items": { + "type": "string", + "minLength": 1 + }, + "type": "array", + "maxItems": 6, + "title": "Topics" + }, + "attachments": { + "items": { + "$ref": "#/components/schemas/ProjectAttachment" + }, + "type": "array", + "maxItems": 3, + "title": "Attachments" + }, + "generation_context": { + "anyOf": [ + { + "$ref": "#/components/schemas/ProjectGenerationContext" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "category_id" + ], + "title": "CreateProjectRequest" + }, + "CreateProjectTaskRequest": { + "properties": { + "title": { + "type": "string", + "maxLength": 240, + "minLength": 1, + "title": "Title" + }, + "summary": { + "anyOf": [ + { + "type": "string", + "maxLength": 2000, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Summary" + }, + "brief": { + "anyOf": [ + { + "type": "string", + "maxLength": 8000, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Brief" + }, + "type": { + "anyOf": [ + { + "type": "string", + "maxLength": 80, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Type" + }, + "topic": { + "anyOf": [ + { + "type": "string", + "maxLength": 120, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Topic" + }, + "impact": { + "anyOf": [ + { + "type": "integer", + "maximum": 5, + "minimum": 1 + }, + { + "type": "null" + } + ], + "title": "Impact" + }, + "reference_url": { + "anyOf": [ + { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Reference Url" + }, + "reference_label": { + "anyOf": [ + { + "type": "string", + "maxLength": 240, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Reference Label" + }, + "position": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Position" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "title" + ], + "title": "CreateProjectTaskRequest" + }, + "CreatePromptInput": { + "properties": { + "id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Id", + "description": "Optional client-generated UUID for the prompt. When provided, creation is idempotent: retrying a request with the same id will not create a duplicate prompt. Omit to have the server generate one (non-idempotent)." + }, + "prompt": { + "type": "string", + "minLength": 1, + "title": "Prompt", + "description": "The prompt text to be sent to AI platforms." + }, + "topic": { + "$ref": "#/components/schemas/IdOrName", + "description": "Topic to assign. A new topic is created if the name doesn't exist." + }, + "language": { + "type": "string", + "title": "Language", + "description": "Language code (e.g. 'en-US')" + }, + "tags": { + "items": { + "$ref": "#/components/schemas/IdOrName" + }, + "type": "array", + "title": "Tags", + "description": "Tags to assign. New tags are created if names don't exist.", + "default": [] + }, + "regions": { + "items": { + "$ref": "#/components/schemas/IdOrName" + }, + "type": "array", + "minItems": 1, + "title": "Regions", + "description": "Regions where the prompt will be collected." + }, + "platforms": { + "items": { + "$ref": "#/components/schemas/IdOrName" + }, + "type": "array", + "minItems": 1, + "title": "Platforms", + "description": "AI platforms where the prompt will be collected." + }, + "personas": { + "items": { + "$ref": "#/components/schemas/IdOrName" + }, + "type": "array", + "title": "Personas", + "description": "Personas to use when collecting. Omit for default (no persona).", + "default": [] + }, + "analysis_types": { + "anyOf": [ + { + "items": { + "type": "string", + "enum": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Analysis Types", + "description": "Analysis types: 'visibility', 'sentiment', 'accuracy'. Defaults to ['visibility']." + }, + "prompt_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Prompt Type", + "description": "Deprecated. Use analysis_types instead. 'Visibility' or 'Sentiment'.", + "deprecated": true + }, + "asset": { + "anyOf": [ + { + "$ref": "#/components/schemas/IdOrName" + }, + { + "type": "null" + } + ], + "description": "Required for Sentiment prompts. The brand asset to evaluate." + } + }, + "type": "object", + "required": [ + "prompt", + "topic", + "language", + "regions", + "platforms" + ], + "title": "CreatePromptInput", + "description": "A single prompt to create within a category." + }, + "CreatePromptsBody": { + "properties": { + "prompts": { + "items": { + "$ref": "#/components/schemas/CreatePromptInput" + }, + "type": "array", + "title": "Prompts", + "description": "List of prompts to create." + }, + "dry_run": { + "type": "boolean", + "title": "Dry Run", + "description": "When true, validate and preview changes without persisting them.", + "default": false + } + }, + "type": "object", + "required": [ + "prompts" + ], + "title": "CreatePromptsBody" + }, + "CreatePromptsResponse": { + "properties": { + "dry_run": { + "type": "boolean", + "title": "Dry Run", + "description": "Whether this was a dry run (no changes persisted)." + }, + "created": { + "type": "integer", + "title": "Created", + "description": "Number of prompts created.", + "default": 0 + }, + "topics_created": { + "type": "integer", + "title": "Topics Created", + "description": "Number of new topics created.", + "default": 0 + }, + "tags_created": { + "type": "integer", + "title": "Tags Created", + "description": "Number of new tags created.", + "default": 0 + }, + "prompts": { + "items": { + "$ref": "#/components/schemas/PromptPreview" + }, + "type": "array", + "title": "Prompts", + "description": "List of created (or previewed) prompts with resolved references.", + "default": [] + } + }, + "type": "object", + "required": [ + "dry_run" + ], + "title": "CreatePromptsResponse", + "description": "Response from creating prompts." + }, + "CursorPagination": { + "properties": { + "limit": { + "type": "integer", + "maximum": 50000, + "exclusiveMinimum": 0, + "title": "Limit", + "description": "Maximum number of results to return. Default is 10,000, maximum is 50,000.", + "default": 10000 + }, + "next_cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Cursor", + "description": "Token for the next page, if more results are available." + } + }, + "additionalProperties": false, + "type": "object", + "title": "CursorPagination", + "description": "Cursor-based pagination metadata." + }, + "DeleteDocumentRequest": { + "properties": { + "name": { + "type": "string", + "minLength": 1, + "title": "Name", + "description": "Document path to delete." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "name" + ], + "title": "DeleteDocumentRequest" + }, + "DeleteFolderRequest": { + "properties": { + "path": { + "type": "string", + "minLength": 1, + "title": "Path", + "description": "Folder path to delete." + }, + "recursive": { + "type": "boolean", + "title": "Recursive", + "description": "When false, only empty folders are deleted and non-empty folders return a conflict. When true, the folder and all contents are deleted.", + "default": false + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "path" + ], + "title": "DeleteFolderRequest" + }, + "DimensionRef": { + "properties": { + "id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Id" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Name" + } + }, + "type": "object", + "title": "DimensionRef", + "description": "An ``{id, name}`` reference for a grouped dimension value." + }, + "Document": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id", + "description": "The document's ID." + }, + "name": { + "type": "string", + "title": "Name", + "description": "The document's title." + }, + "url": { + "type": "string", + "title": "Url", + "description": "Link to open the document in the Profound app." + }, + "visibility": { + "type": "string", + "enum": [ + "invited_only", + "organization" + ], + "title": "Visibility", + "description": "General access scope. New documents are `invited_only`." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At", + "description": "When the document was created." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Updated At", + "description": "When the document was last modified. Seeding the initial content counts, so a freshly created document is normally modified a moment after it was created." + }, + "owner_user_id": { + "type": "string", + "format": "uuid", + "title": "Owner User Id", + "description": "ID of the document's owner." + }, + "owner_email": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Owner Email", + "description": "Email of the document's owner. `null` when the owning profile has been deleted or could not be resolved." + }, + "author_type": { + "type": "string", + "enum": [ + "user", + "agent" + ], + "title": "Author Type", + "description": "Whether the document's owner is a person (`user`) or an agent (`agent`)." + }, + "app_delegate": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "App Delegate", + "description": "Which integration created the document, derived server-side from the credential that authenticated the write. `null` for documents created outside any integration. An open-ended value, not a fixed set — known values today include `external-api` and `context-manager`, and more are added as new integrations ship." + }, + "category_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Category Name", + "description": "Name of the brand category set on the document, if any. Paired with `company_name`; writable only on create." + }, + "company_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Company Name", + "description": "Name of the brand/company set on the document, if any. Paired with `category_name`; writable only on create." + } + }, + "type": "object", + "required": [ + "id", + "name", + "url", + "visibility", + "created_at", + "updated_at", + "owner_user_id", + "owner_email", + "author_type", + "app_delegate", + "category_name", + "company_name" + ], + "title": "Document", + "description": "A Profound document." + }, + "DocumentContent": { + "properties": { + "format": { + "$ref": "#/components/schemas/ContentFormat" + }, + "value": { + "type": "string", + "title": "Value" + } + }, + "type": "object", + "required": [ + "format", + "value" + ], + "title": "DocumentContent" + }, + "DocumentOperationResponse": { + "properties": { + "message": { + "type": "string", + "title": "Message", + "description": "Operation result message." + }, + "name": { + "type": "string", + "title": "Name", + "description": "Document name." + }, + "path": { + "type": "string", + "title": "Path", + "description": "Document path." + }, + "folder": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Folder", + "description": "Document folder path." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "message", + "name", + "path" + ], + "title": "DocumentOperationResponse" + }, + "DomainWithOrganization": { + "properties": { + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + }, + "organization": { + "$ref": "#/components/schemas/Organization" + } + }, + "type": "object", + "required": [ + "created_at", + "id", + "name", + "organization" + ], + "title": "DomainWithOrganization", + "description": "A domain paired with the organization edge it belongs to." + }, + "EnabledFieldsResponse": { + "properties": { + "run_id": { + "type": "boolean", + "title": "Run Id", + "default": false + }, + "created_at": { + "type": "boolean", + "title": "Created At", + "default": true + }, + "prompt": { + "type": "boolean", + "title": "Prompt", + "default": true + }, + "prompt_id": { + "type": "boolean", + "title": "Prompt Id", + "default": false + }, + "mentions": { + "type": "boolean", + "title": "Mentions", + "default": true + }, + "analysis_types": { + "type": "boolean", + "title": "Analysis Types", + "default": false + }, + "prompt_type": { + "type": "boolean", + "title": "Prompt Type", + "default": true, + "deprecated": true + }, + "response": { + "type": "boolean", + "title": "Response", + "default": true + }, + "citations": { + "type": "boolean", + "title": "Citations", + "default": true + }, + "citation_details": { + "type": "boolean", + "title": "Citation Details", + "default": false + }, + "web_search_results": { + "type": "boolean", + "title": "Web Search Results", + "default": false + }, + "search_triggered": { + "type": "boolean", + "title": "Search Triggered", + "default": false + }, + "themes": { + "type": "boolean", + "title": "Themes", + "description": "Use 'sentiment_themes' instead", + "default": true, + "deprecated": true + }, + "sentiment_themes": { + "type": "boolean", + "title": "Sentiment Themes", + "description": "Uses legacy sentiment data.", + "default": false + }, + "topic": { + "type": "boolean", + "title": "Topic", + "default": true + }, + "topic_id": { + "type": "boolean", + "title": "Topic Id", + "default": false + }, + "region": { + "type": "boolean", + "title": "Region", + "default": true + }, + "model": { + "type": "boolean", + "title": "Model", + "default": true + }, + "model_id": { + "type": "boolean", + "title": "Model Id", + "default": true + }, + "asset": { + "type": "boolean", + "title": "Asset", + "default": true + }, + "asset_id": { + "type": "boolean", + "title": "Asset Id", + "default": false + }, + "tags": { + "type": "boolean", + "title": "Tags", + "default": false + }, + "search_queries": { + "type": "boolean", + "title": "Search Queries", + "default": false + }, + "persona": { + "type": "boolean", + "title": "Persona", + "default": false + } + }, + "type": "object", + "title": "EnabledFieldsResponse" + }, + "EntityFilterClause": { + "properties": { + "op": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Op" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "op", + "value" + ], + "title": "EntityFilterClause", + "description": "Select/exclude the entity, applied outside the data `filter` tree." + }, + "ExecutionCitationDetail": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "clean_url": { + "type": "string", + "title": "Clean Url" + }, + "title": { + "type": "string", + "title": "Title" + }, + "text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Text" + }, + "hostname": { + "type": "string", + "title": "Hostname" + }, + "path": { + "type": "string", + "title": "Path" + }, + "positions": { + "items": { + "type": "integer" + }, + "type": "array", + "title": "Positions" + }, + "groups": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/CitationDetailGroup" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Groups" + }, + "first_cited_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "First Cited At" + }, + "citation_category": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Citation Category" + } + }, + "type": "object", + "required": [ + "url", + "clean_url", + "title", + "hostname", + "path" + ], + "title": "ExecutionCitationDetail" + }, + "FactCheckSetupStatusQuery": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + } + }, + "type": "object", + "required": [ + "category_id" + ], + "title": "FactCheckSetupStatusQuery" + }, + "FactCheckSetupStatusResponse": { + "properties": { + "activeAccuracyPromptCount": { + "type": "integer", + "title": "Activeaccuracypromptcount" + }, + "hasVerificationData": { + "type": "boolean", + "title": "Hasverificationdata" + }, + "isSetupComplete": { + "type": "boolean", + "title": "Issetupcomplete" + }, + "setupCreatedAt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Setupcreatedat" + }, + "setupKnowledgeBaseId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Setupknowledgebaseid" + } + }, + "type": "object", + "required": [ + "activeAccuracyPromptCount", + "hasVerificationData", + "isSetupComplete" + ], + "title": "FactCheckSetupStatusResponse" + }, + "FactcheckClaim": { + "properties": { + "cluster_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Cluster Id" + }, + "claim": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Claim" + }, + "occurrence": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Occurrence" + }, + "theme": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Theme" + }, + "reasoning": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Reasoning" + }, + "models": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ClaimModelOccurrence" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Models" + }, + "evidence": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ClaimEvidence" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Evidence" + }, + "citation_sources": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ClaimCitationSource" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Citation Sources" + } + }, + "additionalProperties": true, + "type": "object", + "title": "FactcheckClaim", + "description": "One inaccurate claim. `theme`/`reasoning`/`models`/`evidence`/`citation_sources` follow `include`." + }, + "FactcheckClaimsInfo": { + "properties": { + "total_results": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Total Results", + "description": "Total rows matching the query before pagination (null when not computed)." + }, + "count": { + "type": "integer", + "title": "Count", + "description": "Number of rows returned in `data` for this page." + }, + "next_cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Cursor", + "description": "Opaque cursor for the next page; null on the last page." + }, + "models": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Models", + "description": "Display names of the models the report covers." + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "Echoed request start date (YYYY-MM-DD, ET)." + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "Echoed request end date (YYYY-MM-DD, ET)." + }, + "filter": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Filter", + "description": "Echoed normalized filter tree, or null when no filter was sent." + }, + "group_by": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Group By", + "description": "Dimension the claims are sectioned by (empty → one flat list)." + }, + "include": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Include", + "description": "Per-claim detail fields requested." + } + }, + "additionalProperties": true, + "type": "object", + "required": [ + "count", + "models", + "start_date", + "end_date", + "group_by" + ], + "title": "FactcheckClaimsInfo" + }, + "FactcheckClaimsQuery": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "YYYY-MM-DD, ET, inclusive" + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "YYYY-MM-DD, ET, inclusive" + }, + "group_by": { + "items": { + "type": "string", + "enum": [ + "model", + "region", + "persona", + "prompt", + "topic", + "tag", + "theme" + ] + }, + "type": "array", + "maxItems": 1, + "title": "Group By", + "description": "Optional single dim to section the claims (e.g. per model). Empty → one flat claim list." + }, + "filter": { + "anyOf": [ + { + "$ref": "#/components/schemas/FilterNode" + }, + { + "type": "null" + } + ], + "description": "Scope which responses count (see Filtering)." + }, + "include": { + "anyOf": [ + { + "items": { + "type": "string", + "enum": [ + "theme", + "reasoning", + "models", + "evidence", + "citation_sources" + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Include", + "description": "Optional per-claim detail fields to add to each claim (see options)." + }, + "limit": { + "anyOf": [ + { + "type": "integer", + "maximum": 100, + "exclusiveMinimum": 0 + }, + { + "type": "null" + } + ], + "title": "Limit", + "description": "Claims (or sections) per page; default 25." + }, + "max_results": { + "anyOf": [ + { + "type": "integer", + "exclusiveMinimum": 0 + }, + { + "type": "null" + } + ], + "title": "Max Results", + "description": "Stream only: cap entries returned." + }, + "cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Cursor" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "FactcheckClaimsQuery", + "description": "The inaccurate claims — flat + paginated, or `group_by` one dim to section them (all claims per section)." + }, + "FactcheckClaimsResponse": { + "properties": { + "info": { + "$ref": "#/components/schemas/FactcheckClaimsInfo" + }, + "data": { + "items": { + "$ref": "#/components/schemas/FactcheckClaimsRow" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "info", + "data" + ], + "title": "FactcheckClaimsResponse" + }, + "FactcheckClaimsRow": { + "properties": { + "cluster_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Cluster Id" + }, + "claim": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Claim" + }, + "occurrence": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Occurrence" + }, + "reasoning": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Reasoning" + }, + "models": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ClaimModelOccurrence" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Models" + }, + "evidence": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ClaimEvidence" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Evidence" + }, + "citation_sources": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ClaimCitationSource" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Citation Sources" + }, + "model": { + "anyOf": [ + { + "$ref": "#/components/schemas/ClaimModelOccurrence" + }, + { + "type": "null" + } + ] + }, + "region": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "persona": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "prompt": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "topic": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "tag": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "theme": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ], + "title": "Theme", + "description": "Claim theme (string), or an `{id, name}` ref when sectioning by `theme`." + }, + "accuracy": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Accuracy" + }, + "accurate": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Accurate" + }, + "inaccurate": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Inaccurate" + }, + "total_claims": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Total Claims" + }, + "claims": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/FactcheckClaim" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Claims" + } + }, + "additionalProperties": true, + "type": "object", + "title": "FactcheckClaimsRow", + "description": "A flat claim, or (with `group_by`) a section: a dimension + accuracy rollup + its `claims`.\n\nPresent fields depend on `group_by`/`include`." + }, + "FactcheckScoreRow": { + "properties": { + "date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Date" + }, + "model": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "region": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "persona": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "prompt": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "topic": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "tag": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "theme": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "citation": { + "anyOf": [ + { + "$ref": "#/components/schemas/CitationScoreRef" + }, + { + "type": "null" + } + ] + }, + "accuracy": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Accuracy" + }, + "accurate": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Accurate" + }, + "inaccurate": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Inaccurate" + } + }, + "additionalProperties": true, + "type": "object", + "title": "FactcheckScoreRow", + "description": "An accuracy score row: the headline (no dims), a daily point, or a per-dimension breakdown." + }, + "FactcheckScoresInfo": { + "properties": { + "total_results": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Total Results", + "description": "Total rows matching the query before pagination (null when not computed)." + }, + "count": { + "type": "integer", + "title": "Count", + "description": "Number of rows returned in `data` for this page." + }, + "next_cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Cursor", + "description": "Opaque cursor for the next page; null on the last page." + }, + "models": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Models", + "description": "Display names of the models the report covers." + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "Echoed request start date (YYYY-MM-DD, ET)." + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "Echoed request end date (YYYY-MM-DD, ET)." + }, + "filter": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Filter", + "description": "Echoed normalized filter tree, or null when no filter was sent." + }, + "group_by": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Group By", + "description": "Dimensions the scores are sliced by (empty → headline)." + } + }, + "additionalProperties": true, + "type": "object", + "required": [ + "count", + "models", + "start_date", + "end_date", + "group_by" + ], + "title": "FactcheckScoresInfo" + }, + "FactcheckScoresQuery": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "YYYY-MM-DD, ET, inclusive" + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "YYYY-MM-DD, ET, inclusive" + }, + "group_by": { + "items": { + "type": "string", + "enum": [ + "date", + "model", + "region", + "persona", + "prompt", + "topic", + "tag", + "citation", + "theme" + ] + }, + "type": "array", + "maxItems": 2, + "title": "Group By", + "description": "Up to two dimensions to slice by; empty returns the headline score. `citation` must be alone." + }, + "filter": { + "anyOf": [ + { + "$ref": "#/components/schemas/FilterNode" + }, + { + "type": "null" + } + ], + "description": "Scope which responses count (see Filtering)." + }, + "limit": { + "anyOf": [ + { + "type": "integer", + "maximum": 100, + "exclusiveMinimum": 0 + }, + { + "type": "null" + } + ], + "title": "Limit", + "description": "Rows per page; default 100." + }, + "max_results": { + "anyOf": [ + { + "type": "integer", + "exclusiveMinimum": 0 + }, + { + "type": "null" + } + ], + "title": "Max Results", + "description": "Stream only: cap rows returned." + }, + "cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Cursor" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "FactcheckScoresQuery", + "description": "Accuracy scores. `group_by` picks the slice (one or two dimensions); empty → the headline score." + }, + "FactcheckScoresResponse": { + "properties": { + "info": { + "$ref": "#/components/schemas/FactcheckScoresInfo" + }, + "data": { + "items": { + "$ref": "#/components/schemas/FactcheckScoreRow" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "info", + "data" + ], + "title": "FactcheckScoresResponse" + }, + "FieldDiff": { + "properties": { + "old": { + "title": "Old", + "description": "Previous value." + }, + "new": { + "title": "New", + "description": "New value." + } + }, + "type": "object", + "title": "FieldDiff", + "description": "Shows the old and new value for a changed field." + }, + "FilterNode": { + "properties": { + "and": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/FilterNode" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "And" + }, + "or": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/FilterNode" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Or" + }, + "not": { + "anyOf": [ + { + "$ref": "#/components/schemas/FilterNode" + }, + { + "type": "null" + } + ] + }, + "field": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Field" + }, + "op": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Op" + }, + "value": { + "title": "Value" + } + }, + "additionalProperties": false, + "type": "object", + "title": "FilterNode", + "description": "A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group." + }, + "FolderOperationResponse": { + "properties": { + "message": { + "type": "string", + "title": "Message", + "description": "Operation result message." + }, + "path": { + "type": "string", + "title": "Path", + "description": "Folder path." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "message", + "path" + ], + "title": "FolderOperationResponse" + }, + "HTTPValidationError": { + "properties": { + "detail": { + "items": { + "$ref": "#/components/schemas/ValidationError" + }, + "type": "array", + "title": "Detail" + } + }, + "type": "object", + "title": "HTTPValidationError" + }, + "HostnameFilter": { + "properties": { + "field": { + "type": "string", + "const": "hostname", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "HostnameFilter", + "description": "Filter by hostname" + }, + "IdOrName": { + "properties": { + "id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Id", + "description": "UUID of the resource." + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Name", + "description": "Display name of the resource." + } + }, + "type": "object", + "title": "IdOrName", + "description": "Reference by id, name, or both. Plain strings work too:\nUUIDs become id lookups, other strings become name lookups." + }, + "InaccuracyDriverRow": { + "properties": { + "rowId": { + "type": "string", + "title": "Rowid" + }, + "clusterId": { + "type": "string", + "title": "Clusterid" + }, + "canonicalClaim": { + "type": "string", + "title": "Canonicalclaim" + }, + "snippet": { + "type": "string", + "title": "Snippet" + }, + "snippetClaimId": { + "type": "string", + "title": "Snippetclaimid" + }, + "claimOccurrence": { + "type": "number", + "title": "Claimoccurrence" + }, + "claimOccurrenceDelta": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Claimoccurrencedelta" + }, + "href": { + "type": "string", + "title": "Href" + }, + "citationCategory": { + "type": "string", + "title": "Citationcategory" + }, + "domainCategory": { + "type": "string", + "title": "Domaincategory" + }, + "citationCount": { + "type": "integer", + "title": "Citationcount" + } + }, + "type": "object", + "required": [ + "rowId", + "clusterId", + "canonicalClaim", + "snippet", + "snippetClaimId", + "claimOccurrence", + "href", + "citationCategory", + "domainCategory", + "citationCount" + ], + "title": "InaccuracyDriverRow", + "description": "A top inaccurate claim paired with one of its most-cited pages." + }, + "InaccuracyDriversQuery": { + "properties": { + "start_date": { + "type": "string", + "title": "Start Date" + }, + "end_date": { + "type": "string", + "title": "End Date" + }, + "comparison_start_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison Start Date" + }, + "comparison_end_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison End Date" + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "topic_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Topic Ids" + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "tag_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Tag Ids" + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "all", + "any" + ], + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": false + }, + "region_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Region Ids" + }, + "platform_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Platform Ids" + }, + "persona_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Persona Ids" + }, + "include_no_persona": { + "type": "boolean", + "title": "Include No Persona", + "default": false + }, + "prompt_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Prompt Ids" + }, + "citation_categories": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Citation Categories" + }, + "limit": { + "type": "integer", + "maximum": 50, + "minimum": 1, + "title": "Limit", + "default": 5 + } + }, + "type": "object", + "required": [ + "start_date", + "end_date", + "category_id" + ], + "title": "InaccuracyDriversQuery" }, - "AEOScoreTargetZone": { + "InaccuracyDriversResponse": { "properties": { - "low": { - "type": "number", - "title": "Low" - }, - "high": { - "type": "number", - "title": "High" + "data": { + "items": { + "$ref": "#/components/schemas/InaccuracyDriverRow" + }, + "type": "array", + "title": "Data" } }, "type": "object", "required": [ - "low", - "high" + "data" ], - "title": "AEOScoreTargetZone" + "title": "InaccuracyDriversResponse" }, - "AcceptedAgentRun": { + "InaccurateClusterRow": { "properties": { - "id": { + "clusterId": { "type": "string", - "format": "uuid", - "title": "Id", - "description": "Unique ID for the accepted run." + "title": "Clusterid" }, - "agent_id": { + "canonicalClaim": { "type": "string", - "format": "uuid", - "title": "Agent Id", - "description": "Unique ID of the agent for this run." + "title": "Canonicalclaim" }, - "status": { - "$ref": "#/components/schemas/AgentRunStatus", - "description": "Initial status of the accepted run." + "neutralTheme": { + "type": "string", + "title": "Neutraltheme", + "default": "" + }, + "description": { + "type": "string", + "title": "Description", + "default": "" + }, + "kbPath": { + "type": "string", + "title": "Kbpath" + }, + "kbSnippet": { + "type": "string", + "title": "Kbsnippet" + }, + "reasoning": { + "type": "string", + "title": "Reasoning" + }, + "claimCount": { + "type": "integer", + "title": "Claimcount" + }, + "responseCount": { + "type": "integer", + "title": "Responsecount" + }, + "totalResponseCount": { + "type": "integer", + "title": "Totalresponsecount" + }, + "responseShare": { + "type": "number", + "title": "Responseshare" + }, + "responseShareDelta": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Responsesharedelta" + }, + "citationHostnames": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Citationhostnames" }, - "started_at": { + "models": { "anyOf": [ { - "type": "string", - "format": "date-time" + "items": { + "$ref": "#/components/schemas/ClusterModelShare" + }, + "type": "array" }, { "type": "null" } ], - "title": "Started At", - "description": "When the run started, if execution began immediately." + "title": "Models" } }, - "additionalProperties": false, "type": "object", "required": [ - "id", - "agent_id", - "status" + "clusterId", + "canonicalClaim", + "kbPath", + "kbSnippet", + "reasoning", + "claimCount", + "responseCount", + "totalResponseCount", + "responseShare", + "citationHostnames" ], - "title": "AcceptedAgentRun", - "description": "Run details returned after a run request is accepted." + "title": "InaccurateClusterRow" }, - "AccuracyBreakdownQuery": { + "InaccurateClustersQuery": { "properties": { "start_date": { "type": "string", @@ -6221,7 +17089,7 @@ "include_no_tag": { "type": "boolean", "title": "Include No Tag", - "default": true + "default": false }, "region_ids": { "anyOf": [ @@ -6271,7 +17139,7 @@ "include_no_persona": { "type": "boolean", "title": "Include No Persona", - "default": true + "default": false }, "prompt_ids": { "anyOf": [ @@ -6302,25 +17170,24 @@ ], "title": "Citation Categories" }, - "breakdown_by": { - "type": "string", - "enum": [ - "citation", - "platform", - "topic", - "prompt", - "tag", - "region", - "persona" + "theme_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } ], - "title": "Breakdown By", - "default": "citation" + "title": "Theme Id" }, "limit": { "type": "integer", + "maximum": 10000, "minimum": 1, "title": "Limit", - "default": 10 + "default": 5000 }, "offset": { "type": "integer", @@ -6339,23 +17206,10 @@ ], "title": "Search Query" }, - "sort_by": { - "type": "string", - "enum": [ - "citationShare", - "accuracy" - ], - "title": "Sort By", - "default": "citationShare" - }, - "sort_order": { - "type": "string", - "enum": [ - "asc", - "desc" - ], - "title": "Sort Order", - "default": "desc" + "include_models": { + "type": "boolean", + "title": "Include Models", + "default": false } }, "type": "object", @@ -6364,13 +17218,13 @@ "end_date", "category_id" ], - "title": "AccuracyBreakdownQuery" + "title": "InaccurateClustersQuery" }, - "AccuracyBreakdownResponse": { + "InaccurateClustersResponse": { "properties": { "data": { "items": { - "$ref": "#/components/schemas/AccuracyBreakdownRow" + "$ref": "#/components/schemas/InaccurateClusterRow" }, "type": "array", "title": "Data" @@ -6385,23 +17239,52 @@ "data", "totalCount" ], - "title": "AccuracyBreakdownResponse" + "title": "InaccurateClustersResponse" }, - "AccuracyBreakdownRow": { + "InaccurateThemeRow": { "properties": { - "id": { + "themeId": { "type": "string", - "title": "Id" + "title": "Themeid" }, - "name": { + "neutralTheme": { "type": "string", - "title": "Name" + "title": "Neutraltheme" }, - "share": { + "description": { + "type": "string", + "title": "Description", + "default": "" + }, + "inaccurateClaimCount": { + "type": "integer", + "title": "Inaccurateclaimcount" + }, + "inaccurateClusterCount": { + "type": "integer", + "title": "Inaccurateclustercount" + }, + "totalClaimCount": { + "type": "integer", + "title": "Totalclaimcount" + }, + "totalClusterCount": { + "type": "integer", + "title": "Totalclustercount" + }, + "responseCount": { + "type": "integer", + "title": "Responsecount" + }, + "totalResponseCount": { + "type": "integer", + "title": "Totalresponsecount" + }, + "responseShare": { "type": "number", - "title": "Share" + "title": "Responseshare" }, - "shareChange": { + "responseShareDelta": { "anyOf": [ { "type": "number" @@ -6410,50 +17293,216 @@ "type": "null" } ], - "title": "Sharechange" - }, - "responseAccuracy": { - "type": "number", - "title": "Responseaccuracy" + "title": "Responsesharedelta" + } + }, + "type": "object", + "required": [ + "themeId", + "neutralTheme", + "inaccurateClaimCount", + "inaccurateClusterCount", + "totalClaimCount", + "totalClusterCount", + "responseCount", + "totalResponseCount", + "responseShare" + ], + "title": "InaccurateThemeRow" + }, + "InaccurateThemesQuery": { + "properties": { + "start_date": { + "type": "string", + "title": "Start Date" + }, + "end_date": { + "type": "string", + "title": "End Date" + }, + "comparison_start_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison Start Date" + }, + "comparison_end_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison End Date" + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "topic_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Topic Ids" + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "tag_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Tag Ids" + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "all", + "any" + ], + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": false + }, + "region_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Region Ids" + }, + "platform_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Platform Ids" }, - "accuracyChange": { + "persona_ids": { "anyOf": [ { - "type": "number" + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" }, { "type": "null" } ], - "title": "Accuracychange" + "title": "Persona Ids" }, - "inaccurateCount": { - "type": "integer", - "title": "Inaccuratecount" + "include_no_persona": { + "type": "boolean", + "title": "Include No Persona", + "default": false }, - "inaccurateCountChange": { + "prompt_ids": { "anyOf": [ { - "type": "integer" + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" }, { "type": "null" } ], - "title": "Inaccuratecountchange" + "title": "Prompt Ids" }, - "promptCount": { + "citation_categories": { "anyOf": [ { - "type": "integer" + "items": { + "type": "string" + }, + "type": "array" }, { "type": "null" } ], - "title": "Promptcount" + "title": "Citation Categories" }, - "citationCategory": { + "limit": { + "type": "integer", + "minimum": 1, + "title": "Limit", + "default": 10 + }, + "offset": { + "type": "integer", + "minimum": 0, + "title": "Offset", + "default": 0 + }, + "sort_by": { + "type": "string", + "const": "response_share", + "title": "Sort By", + "default": "response_share" + }, + "sort_order": { + "type": "string", + "enum": [ + "asc", + "desc" + ], + "title": "Sort Order", + "default": "desc" + }, + "search_query": { "anyOf": [ { "type": "string" @@ -6462,191 +17511,132 @@ "type": "null" } ], - "title": "Citationcategory" - } - }, - "type": "object", - "required": [ - "id", - "name", - "share", - "responseAccuracy", - "inaccurateCount" - ], - "title": "AccuracyBreakdownRow" - }, - "AccuracyCitationAnalysisQuery": { - "properties": { - "category_id": { - "type": "string", - "format": "uuid", - "title": "Category Id" - }, - "clean_href": { - "type": "string", - "title": "Clean Href" - }, - "start_date": { - "type": "string", - "title": "Start Date" - }, - "end_date": { - "type": "string", - "title": "End Date" + "title": "Search Query" } }, "type": "object", "required": [ - "category_id", - "clean_href", "start_date", - "end_date" + "end_date", + "category_id" ], - "title": "AccuracyCitationAnalysisQuery" + "title": "InaccurateThemesQuery" }, - "AccuracyCitationAnalysisResponse": { + "InaccurateThemesResponse": { "properties": { - "href": { - "type": "string", - "title": "Href" - }, - "domain": { - "type": "string", - "title": "Domain" - }, - "pageTitle": { - "type": "string", - "title": "Pagetitle" - }, - "markdownContent": { - "type": "string", - "title": "Markdowncontent" - }, - "claims": { + "data": { "items": { - "$ref": "#/components/schemas/AccuracyCitationClaim" + "$ref": "#/components/schemas/InaccurateThemeRow" }, "type": "array", - "title": "Claims" + "title": "Data" + }, + "totalCount": { + "type": "integer", + "title": "Totalcount" } }, "type": "object", "required": [ - "href", - "domain", - "pageTitle", - "markdownContent" + "data", + "totalCount" ], - "title": "AccuracyCitationAnalysisResponse" + "title": "InaccurateThemesResponse" }, - "AccuracyCitationClaim": { + "Info": { "properties": { - "claimId": { - "type": "string", - "title": "Claimid" - }, - "claim": { - "type": "string", - "title": "Claim" - }, - "attributeId": { - "type": "string", - "title": "Attributeid" - }, - "attribute": { - "type": "string", - "title": "Attribute" - }, - "neutralThemeId": { - "type": "string", - "title": "Neutralthemeid" - }, - "neutralTheme": { - "type": "string", - "title": "Neutraltheme" - }, - "snippet": { - "type": "string", - "title": "Snippet" + "total_rows": { + "type": "integer", + "title": "Total Rows" }, - "polarity": { - "type": "string", - "enum": [ - "positive", - "negative" + "query": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } ], - "title": "Polarity", - "default": "negative" - }, - "kbPath": { - "type": "string", - "title": "Kbpath", - "default": "" - }, - "kbSnippet": { - "type": "string", - "title": "Kbsnippet", - "default": "" - }, - "reasoning": { - "type": "string", - "title": "Reasoning", - "default": "" - }, - "evidence": { - "items": { - "$ref": "#/components/schemas/AccuracyCitationEvidence" - }, - "type": "array", - "title": "Evidence" + "title": "Query" } }, "type": "object", "required": [ - "claimId", - "claim", - "attributeId", - "attribute", - "neutralThemeId", - "neutralTheme", - "snippet" + "total_rows" ], - "title": "AccuracyCitationClaim", - "description": "A single inaccurate claim mapped to a cluster, surfaced on a cited page.\n\n``attribute`` carries the cluster's canonical claim so the drawer can group\nclaims the same way it groups sentiment attributes.\n\n``reasoning`` and ``evidence`` mirror the cluster's FactCheck verdict: the\n\"why it's inaccurate\" explanation plus the refuting knowledge-base snippets\nsurfaced in the Claim Analysis drawer. ``kb_path``/``kb_snippet`` are retained\nas the cluster's single representative snippet for backward compatibility." + "title": "Info", + "description": "Base model for report information." }, - "AccuracyCitationEvidence": { + "InsightRow": { "properties": { - "kbName": { + "id": { "type": "string", - "title": "Kbname", - "default": "" + "title": "Id", + "description": "Row ID." + }, + "start_time": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Start Time", + "description": "Bucket start (unix seconds)." + }, + "end_time": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "End Time", + "description": "Bucket end (unix seconds)." }, - "kbPath": { - "type": "string", - "title": "Kbpath", - "default": "" + "readable_time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Readable Time", + "description": "Human-readable time bucket." }, - "kbSnippet": { - "type": "string", - "title": "Kbsnippet", - "default": "" - } - }, - "type": "object", - "title": "AccuracyCitationEvidence", - "description": "A single knowledge-base ground-truth snippet that refutes a claim's cluster.\n\n``kb_name`` is the official knowledge base name; ``kb_path`` is the document\npath within that knowledge base. ``kb_name`` is populated by the external API\nlayer (which can reach the knowledge-base service) and defaults to ``\"\"``\nelsewhere." - }, - "AccuracyOverviewQuery": { - "properties": { - "start_date": { - "type": "string", - "title": "Start Date" + "timezone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Timezone", + "description": "Timezone of the time bucket." }, - "end_date": { - "type": "string", - "title": "End Date" + "campaign_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Campaign Id", + "description": "Campaign ID for campaign-level rows." }, - "comparison_start_date": { + "campaign_name": { "anyOf": [ { "type": "string" @@ -6655,9 +17645,10 @@ "type": "null" } ], - "title": "Comparison Start Date" + "title": "Campaign Name", + "description": "Campaign name for campaign-level rows." }, - "comparison_end_date": { + "ad_group_id": { "anyOf": [ { "type": "string" @@ -6666,142 +17657,298 @@ "type": "null" } ], - "title": "Comparison End Date" + "title": "Ad Group Id", + "description": "Ad group ID for ad_group-level rows." }, - "category_id": { - "type": "string", - "format": "uuid", - "title": "Category Id" + "ad_group_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Ad Group Name", + "description": "Ad group name for ad_group-level rows." }, - "topic_ids": { + "ad_id": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Topic Ids" + "title": "Ad Id", + "description": "Ad ID for ad-level rows." }, - "exclude_topic_ids": { - "type": "boolean", - "title": "Exclude Topic Ids", - "default": false + "ad_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Ad Name", + "description": "Ad name for ad-level rows." }, - "tag_ids": { + "impressions": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "integer" }, { "type": "null" } ], - "title": "Tag Ids" + "title": "Impressions", + "description": "Impressions." }, - "tag_filter_type": { - "type": "string", - "enum": [ - "all", - "any" + "clicks": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } ], - "title": "Tag Filter Type", - "default": "any" + "title": "Clicks", + "description": "Clicks." }, - "include_no_tag": { - "type": "boolean", - "title": "Include No Tag", - "default": true + "spend": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Spend", + "description": "Spend in the ad account's currency units." }, - "region_ids": { + "ctr": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "number" }, { "type": "null" } ], - "title": "Region Ids" + "title": "Ctr", + "description": "Click-through rate." }, - "platform_ids": { + "cpc": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "number" }, { "type": "null" } ], - "title": "Platform Ids" + "title": "Cpc", + "description": "Cost per click." }, - "persona_ids": { + "cpm": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "number" }, { "type": "null" } ], - "title": "Persona Ids" + "title": "Cpm", + "description": "Cost per thousand impressions." + } + }, + "type": "object", + "required": [ + "id" + ], + "title": "InsightRow", + "description": "One insights row; the entity it describes follows `aggregation_level`.\n\nTime bounds are present when a `time_granularity` is requested (one row per\ntime bucket); the entity id/name fields (`campaign_*`, `ad_group_*`, `ad_*`)\nare present when rows are broken down by that entity." + }, + "InsightsResponse": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/InsightRow" + }, + "type": "array", + "title": "Data", + "description": "Insight rows." }, - "include_no_persona": { + "count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Count", + "description": "Total row count, when reported upstream." + }, + "first_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "First Id", + "description": "ID of the first item; pass as `before` to page back." + }, + "last_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Last Id", + "description": "ID of the last item; pass as `after` to page forward." + }, + "has_more": { "type": "boolean", - "title": "Include No Persona", - "default": true + "title": "Has More", + "description": "Whether more items are available.", + "default": false + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "data" + ], + "title": "InsightsResponse", + "description": "Cursor-paginated insights, mirroring the OpenAI Ads insights envelope." + }, + "Integration": { + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Installation id to bind to a hub-backed node's `integration_id`." + }, + "provider": { + "type": "string", + "title": "Provider", + "description": "Canonical connector id, matching node contracts.", + "examples": [ + "google_drive" + ] + }, + "label": { + "type": "string", + "title": "Label", + "description": "Human-readable account label for the connection." + }, + "account": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Account", + "description": "Connected account identity as the provider reports it, e.g. the Google account email or the WordPress site URL. This is what tells two connections of the same provider apart; `label` often repeats across them. Null when the provider reports no identity.", + "examples": [ + "alice@acme.com" + ] + }, + "status": { + "type": "string", + "title": "Status", + "description": "Connection lifecycle status.", + "examples": [ + "active", + "needs_reauth" + ] + }, + "level": { + "type": "string", + "enum": [ + "org", + "user" + ], + "title": "Level", + "description": "Installation scope: shared across the org, or user-owned." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "id", + "provider", + "label", + "account", + "status", + "level" + ], + "title": "Integration", + "description": "One connected integration installation visible to the caller." + }, + "IntegrationsResponse": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/Integration" + }, + "type": "array", + "title": "Data", + "description": "Connected integrations." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "data" + ], + "title": "IntegrationsResponse", + "description": "Connected integrations visible to the caller's org/user context." + }, + "KnowledgeBaseItem": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id", + "description": "Unique knowledge base ID." }, - "prompt_ids": { - "anyOf": [ - { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Prompt Ids" + "name": { + "type": "string", + "title": "Name", + "description": "Knowledge base name." }, - "citation_categories": { + "slug": { "anyOf": [ { - "items": { - "type": "string" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Citation Categories" + "title": "Slug", + "description": "Knowledge base slug." }, - "date_bucket": { + "description": { "anyOf": [ { "type": "string" @@ -6810,376 +17957,493 @@ "type": "null" } ], - "title": "Date Bucket" + "title": "Description", + "description": "Knowledge base description." }, - "group_by": { + "created_at": { "type": "string", - "enum": [ - "period", - "theme" - ], - "title": "Group By", - "default": "period" + "format": "date-time", + "title": "Created At", + "description": "Creation timestamp." } }, + "additionalProperties": false, "type": "object", "required": [ - "start_date", - "end_date", - "category_id" + "id", + "name", + "created_at" ], - "title": "AccuracyOverviewQuery" + "title": "KnowledgeBaseItem" }, - "AccuracyOverviewResponse": { + "KnowledgeBaseSearchResponse": { "properties": { - "trendByPeriod": { + "data": { "items": { - "$ref": "#/components/schemas/AccuracyTrendPoint" + "$ref": "#/components/schemas/KnowledgeBaseSearchResult" }, "type": "array", - "title": "Trendbyperiod" + "title": "Data", + "description": "Knowledge base search results." }, - "overallAccuracy": { + "pagination": { + "$ref": "#/components/schemas/CursorPagination", + "description": "Pagination metadata." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "data" + ], + "title": "KnowledgeBaseSearchResponse" + }, + "KnowledgeBaseSearchResult": { + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Document or chunk path." + }, + "score": { "type": "number", - "title": "Overallaccuracy" + "title": "Score", + "description": "Relevance score." }, - "accuracyChange": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Accuracychange" + "metadata": { + "additionalProperties": true, + "type": "object", + "title": "Metadata", + "description": "Result metadata, including folder path." }, - "scoreBreakdown": { + "content": { + "type": "string", + "title": "Content", + "description": "Matched content." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "id", + "score", + "metadata", + "content" + ], + "title": "KnowledgeBaseSearchResult" + }, + "ListAgentsResponse": { + "properties": { + "data": { "items": { - "$ref": "#/components/schemas/AccuracyScoreBreakdown" + "$ref": "#/components/schemas/Agent" }, "type": "array", - "title": "Scorebreakdown" - }, - "themeTrend": { - "anyOf": [ - { - "items": { - "$ref": "#/components/schemas/AccuracyThemeTrendSeries" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Themetrend" + "title": "Data", + "description": "Agents returned for this page." }, - "availableSeries": { - "anyOf": [ - { - "items": { - "$ref": "#/components/schemas/AccuracyTrendSeriesMeta" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Availableseries" + "pagination": { + "$ref": "#/components/schemas/CursorPagination", + "description": "Cursor pagination details for this response." } }, + "additionalProperties": false, "type": "object", "required": [ - "trendByPeriod", - "overallAccuracy", - "scoreBreakdown" + "data" ], - "title": "AccuracyOverviewResponse" + "title": "ListAgentsResponse", + "description": "Paginated list of agents." }, - "AccuracyScoreBreakdown": { + "ListAgentsStatusFilter": { + "type": "string", + "enum": [ + "published", + "draft" + ], + "title": "ListAgentsStatusFilter", + "description": "Statuses you can use to filter the list agents response." + }, + "ListDocumentsResponse": { "properties": { - "status": { - "type": "string", - "title": "Status" - }, - "count": { - "type": "integer", - "title": "Count" - }, - "share": { - "type": "number", - "title": "Share" + "data": { + "items": { + "$ref": "#/components/schemas/Document" + }, + "type": "array", + "title": "Data", + "description": "Documents on this page." }, - "countChange": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Countchange" + "pagination": { + "$ref": "#/components/schemas/CursorPagination", + "description": "Pagination state for fetching the next page." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "data", + "pagination" + ], + "title": "ListDocumentsResponse", + "description": "A page of documents." + }, + "ListKnowledgeBasesResponse": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/KnowledgeBaseItem" + }, + "type": "array", + "title": "Data", + "description": "Knowledge bases accessible to the API key." }, - "shareChange": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Sharechange" + "pagination": { + "$ref": "#/components/schemas/CursorPagination", + "description": "Pagination metadata." } }, + "additionalProperties": false, "type": "object", "required": [ - "status", - "count", - "share" + "data" + ], + "title": "ListKnowledgeBasesResponse" + }, + "ListNodeTypesResponse": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/NodeTypeSummary" + }, + "type": "array", + "title": "Data", + "description": "Allowlisted node types, returned as thin summaries." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "data" ], - "title": "AccuracyScoreBreakdown" + "title": "ListNodeTypesResponse", + "description": "List of node types available to v1 agent authors." }, - "AccuracyThemeTrendPoint": { + "ListProjectGenerationsResponse": { "properties": { - "date": { - "type": "string", - "title": "Date" - }, - "total": { - "type": "integer", - "title": "Total" - }, - "accurate": { - "type": "integer", - "title": "Accurate" + "data": { + "items": { + "$ref": "#/components/schemas/ProjectGenerationStatus" + }, + "type": "array", + "title": "Data" }, - "ratio": { - "type": "number", - "title": "Ratio" + "pagination": { + "$ref": "#/components/schemas/Pagination" } }, + "additionalProperties": false, "type": "object", "required": [ - "date", - "total", - "accurate", - "ratio" + "data" ], - "title": "AccuracyThemeTrendPoint" + "title": "ListProjectGenerationsResponse" }, - "AccuracyThemeTrendSeries": { + "ListProjectTasksResponse": { "properties": { - "id": { - "type": "string", - "title": "Id" - }, - "label": { - "type": "string", - "title": "Label" - }, "data": { "items": { - "$ref": "#/components/schemas/AccuracyThemeTrendPoint" + "$ref": "#/components/schemas/ProjectTask" }, "type": "array", "title": "Data" + }, + "pagination": { + "$ref": "#/components/schemas/Pagination" } }, + "additionalProperties": false, "type": "object", "required": [ - "id", - "label", "data" ], - "title": "AccuracyThemeTrendSeries" + "title": "ListProjectTasksResponse" }, - "AccuracyTopicIdsQuery": { + "ListProjectsResponse": { "properties": { - "category_id": { - "type": "string", - "format": "uuid", - "title": "Category Id" - }, - "start_date": { - "type": "string", - "title": "Start Date" + "data": { + "items": { + "$ref": "#/components/schemas/ProjectListItem" + }, + "type": "array", + "title": "Data" }, - "end_date": { - "type": "string", - "title": "End Date" + "pagination": { + "$ref": "#/components/schemas/Pagination" } }, + "additionalProperties": false, "type": "object", "required": [ - "category_id", - "start_date", - "end_date" + "data" ], - "title": "AccuracyTopicIdsQuery" + "title": "ListProjectsResponse" }, - "AccuracyTrendPoint": { + "LiveGeneration": { "properties": { - "date": { + "run_id": { "type": "string", - "title": "Date" + "format": "uuid", + "title": "Run Id" }, - "total": { - "type": "integer", - "title": "Total" + "status": { + "type": "string", + "enum": [ + "queued", + "running", + "completed", + "failed" + ], + "title": "Status" }, - "accurate": { - "type": "integer", - "title": "Accurate" + "started_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Started At" }, - "ratio": { - "type": "number", - "title": "Ratio" + "finished_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Finished At" }, - "prevPeriodData": { + "error": { "anyOf": [ { - "$ref": "#/components/schemas/AccuracyTrendPoint" + "type": "string" }, { "type": "null" } - ] + ], + "title": "Error" } }, + "additionalProperties": false, "type": "object", "required": [ - "date", - "total", - "accurate", - "ratio" + "run_id", + "status" ], - "title": "AccuracyTrendPoint" + "title": "LiveGeneration" }, - "AccuracyTrendSeriesMeta": { + "MentionedFilter": { "properties": { - "id": { + "field": { "type": "string", - "title": "Id" + "const": "mentioned", + "title": "Field" }, - "label": { + "operator": { "type": "string", - "title": "Label" + "const": "is", + "title": "Operator" }, - "total": { - "type": "integer", - "title": "Total" + "value": { + "anyOf": [ + { + "type": "boolean" + }, + { + "items": { + "type": "boolean" + }, + "type": "array" + } + ], + "title": "Value" } }, "type": "object", "required": [ - "id", - "label", - "total" + "field", + "operator", + "value" ], - "title": "AccuracyTrendSeriesMeta" + "title": "MentionedFilter", + "description": "Filter citation pages by whether they mention an owned category asset." }, - "AddFolderRequest": { + "MerchantNameFilter": { "properties": { - "path": { + "field": { "type": "string", - "minLength": 1, - "title": "Path", - "description": "Folder path to create." + "const": "merchant_name", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" } }, - "additionalProperties": false, "type": "object", "required": [ - "path" + "field", + "operator", + "value" ], - "title": "AddFolderRequest" + "title": "MerchantNameFilter" }, - "Agent": { + "ModelIdFilter": { "properties": { - "id": { - "type": "string", - "format": "uuid", - "title": "Id", - "description": "Unique ID for the agent." - }, - "organization_id": { - "type": "string", - "format": "uuid", - "title": "Organization Id", - "description": "Unique ID of the organization that owns the agent." - }, - "name": { - "type": "string", - "title": "Name", - "description": "Display name of the agent." - }, - "status": { - "$ref": "#/components/schemas/AgentStatus", - "description": "Current status of the agent." + "field": { + "anyOf": [ + { + "type": "string", + "const": "model_id" + }, + { + "type": "string", + "const": "model", + "deprecated": true + } + ], + "title": "Field" }, - "created_at": { + "operator": { "type": "string", - "format": "date-time", - "title": "Created At", - "description": "When the agent was created." + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" }, - "description": { + "value": { "anyOf": [ { - "type": "string" + "type": "string", + "format": "uuid" }, { - "type": "null" + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" } ], - "title": "Description", - "description": "Short description of the agent, if provided." + "title": "Value" } }, - "additionalProperties": false, "type": "object", "required": [ - "id", - "organization_id", - "name", - "status", - "created_at" + "field", + "operator", + "value" ], - "title": "Agent", - "description": "Summary information for an agent." + "title": "ModelIdFilter", + "description": "Filter by AI model/platform UUID." }, - "AgentDetail": { + "NamedResource": { "properties": { "id": { "type": "string", - "format": "uuid", - "title": "Id", - "description": "Unique ID for the agent." + "title": "Id" }, - "organization_id": { + "name": { "type": "string", - "format": "uuid", - "title": "Organization Id", - "description": "Unique ID of the organization that owns the agent." + "title": "Name" + } + }, + "type": "object", + "required": [ + "id", + "name" + ], + "title": "NamedResource", + "description": "Generic id+name reference used across domain boundaries." + }, + "NamedResourceDiffList": { + "properties": { + "added": { + "items": { + "$ref": "#/components/schemas/NamedResource" + }, + "type": "array", + "title": "Added", + "description": "Resources that were added.", + "default": [] }, - "name": { + "removed": { + "items": { + "$ref": "#/components/schemas/NamedResource" + }, + "type": "array", + "title": "Removed", + "description": "Resources that were removed.", + "default": [] + } + }, + "type": "object", + "title": "NamedResourceDiffList", + "description": "Shows which resources were added or removed." + }, + "NodeSchemaResponse": { + "properties": { + "node_type": { "type": "string", - "title": "Name", - "description": "Display name of the agent." + "title": "Node Type", + "description": "Stable identifier for the node type, e.g. `llm`." }, - "status": { - "$ref": "#/components/schemas/AgentStatus", - "description": "Current status of the agent." + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Schema", + "description": "Opaque JSON Schema for the node's configuration. Treat this as an arbitrary object; its internal shape can change between `schema_version` bumps." }, - "created_at": { + "schema_version": { "type": "string", - "format": "date-time", - "title": "Created At", - "description": "When the agent was created." + "title": "Schema Version", + "description": "Opaque version string for the node schema. Bumps whenever the underlying schema changes, so it can be used as a client-side cache key." }, "description": { "anyOf": [ @@ -7191,231 +18455,280 @@ } ], "title": "Description", - "description": "Short description of the agent, if provided." + "description": "Short description of what the node type does, if provided." }, - "schema": { + "examples": { "anyOf": [ { - "$ref": "#/components/schemas/AgentSchema" + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" }, { "type": "null" } ], - "description": "Input and output schemas for this agent. Omitted while the agent's graph cannot be previewed (e.g. an empty or structurally-invalid draft); check `validation` to see what needs fixing." + "title": "Examples", + "description": "Worked example configurations for the node type, in the canonical graph dialect. Curated authoring guidance, versioned by `docs_version` (NOT `schema_version`): they illustrate a valid shape at curation time but are a starting point, not the contract — they may lag the validator. The authoritative contract is `schema`, and the only authoritative check that a graph is valid is publishing it (or the agent-validation endpoint). Do not parse `examples` as the schema." }, - "validation": { + "documentation": { "anyOf": [ { - "$ref": "#/components/schemas/AgentValidation" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "description": "Validation report for the agent's graph, when available. Use `validation.valid` to check the agent is publishable." + "title": "Documentation", + "description": "Opaque, human-oriented authoring guidance for the node type — purpose, constraints, enum values, and variable-flow notes that the machine `schema` does not always express (e.g. a conditional's else-branch rule, or an iteration's sub-graph shape). Treat as an arbitrary object; use `docs_version` as its cache key." + }, + "docs_version": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Docs Version", + "description": "Opaque version string for `documentation`/`examples`, independent of `schema_version`. Bumps when the authoring guidance changes even if the underlying machine `schema` did not. When it trails the live `schema_version`, treat `documentation`/`examples` as guidance that may be stale and validate against the live `schema`." } }, "additionalProperties": false, "type": "object", "required": [ - "id", - "organization_id", - "name", - "status", - "created_at" + "node_type", + "schema", + "schema_version" ], - "title": "AgentDetail", - "description": "Detailed information for an agent." + "title": "NodeSchemaResponse", + "description": "JSON schema for a single node type." }, - "AgentGraph": { + "NodeTypeSummary": { "properties": { - "agent_id": { + "node_type": { "type": "string", - "format": "uuid", - "title": "Agent Id", - "description": "Unique ID of the agent the graph belongs to." + "title": "Node Type", + "description": "Stable identifier for the node type, e.g. `llm`." }, - "version": { - "$ref": "#/components/schemas/AgentVersion", - "description": "Which version of the agent this graph is — `published` or `draft`." + "display_name": { + "type": "string", + "title": "Display Name", + "description": "Human-readable name for the node type." }, - "graph": { - "additionalProperties": true, - "type": "object", - "title": "Graph", - "description": "Workflow graph (`{nodes, edges}`) in the canonical dialect — the same shape `create` and `update` accept. Treat it as an opaque object: it is returned verbatim, so tool-backed nodes appear in their lowered `tool` form rather than the friendly v1 node types. Read it back to copy and edit a known-good agent." + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "Short description of what the node type does, if provided." } }, "additionalProperties": false, "type": "object", "required": [ - "agent_id", - "version", - "graph" + "node_type", + "display_name" ], - "title": "AgentGraph", - "description": "An agent version's workflow graph in the canonical dialect." + "title": "NodeTypeSummary", + "description": "Thin summary for a node type available to v1 agent authors." }, - "AgentRun": { + "NumericMetricFilter": { "properties": { - "id": { + "field": { "type": "string", - "format": "uuid", - "title": "Id", - "description": "Unique ID for the run." + "title": "Field" }, - "agent_id": { + "operator": { "type": "string", - "format": "uuid", - "title": "Agent Id", - "description": "Unique ID of the agent for this run." - }, - "status": { - "$ref": "#/components/schemas/AgentRunStatus", - "description": "Current status of the run." - }, - "started_at": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } + "enum": [ + ">", + ">=", + "<", + "<=", + "=", + "==", + "!=" ], - "title": "Started At", - "description": "When the run started, if it has started." + "title": "Operator" }, - "finished_at": { + "value": { "anyOf": [ { - "type": "string", - "format": "date-time" + "type": "integer" }, { - "type": "null" + "type": "number" } ], - "title": "Finished At", - "description": "When the run finished, if it has completed." + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "NumericMetricFilter" + }, + "OptimizationQuery": { + "properties": { + "asset_id": { + "type": "string", + "format": "uuid", + "title": "Asset Id" + }, + "pagination": { + "$ref": "#/components/schemas/Pagination", + "description": "Pagination parameters for the results. Default is 10,000 rows with no offset." + } + }, + "type": "object", + "required": [ + "asset_id" + ], + "title": "OptimizationQuery" + }, + "OrderByDirection": { + "type": "string", + "enum": [ + "asc", + "desc" + ], + "title": "OrderByDirection" + }, + "Organization": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id" }, - "error": { + "name": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "type": "string" }, { "type": "null" } ], - "title": "Error", - "description": "Error details, when the run fails and error information is available." - }, - "outputs": { - "additionalProperties": true, - "type": "object", - "title": "Outputs", - "description": "Output values returned by the run, keyed by variable ID. This object conforms to `schema.output` from the agent detail response and is empty when no outputs are available." + "title": "Name" } }, - "additionalProperties": false, "type": "object", "required": [ "id", - "agent_id", - "status" + "name" ], - "title": "AgentRun", - "description": "Status and result details for an agent run." + "title": "Organization" }, - "AgentRunStatus": { - "type": "string", - "enum": [ - "queued", - "running", - "succeeded", - "failed", - "cancelled", - "skipped", - "unknown" + "OrganizationAssetsResponse": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/CategoryAssetWithCategory" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "data" ], - "title": "AgentRunStatus", - "description": "Current execution status for an agent run." + "title": "OrganizationAssetsResponse" }, - "AgentSchema": { + "OrganizationPersonasWithCategory": { "properties": { - "input": { - "additionalProperties": true, - "type": "object", - "title": "Input", - "description": "JSON Schema for the agent's `inputs` object. Use the top-level property keys as input field names when starting a run." + "id": { + "type": "string", + "title": "Id" }, - "output": { - "additionalProperties": true, - "type": "object", - "title": "Output", - "description": "JSON Schema for the `outputs` object returned by `GET /v1/agents/{agent_id}/runs/{run_id}`." + "name": { + "type": "string", + "title": "Name" + }, + "persona": { + "$ref": "#/components/schemas/PersonaProfile" + }, + "category": { + "$ref": "#/components/schemas/Category" + }, + "organization": { + "$ref": "#/components/schemas/Organization" } }, - "additionalProperties": false, "type": "object", "required": [ - "input", - "output" - ], - "title": "AgentSchema", - "description": "Schema metadata for an agent." - }, - "AgentStatus": { - "type": "string", - "enum": [ - "draft", - "published", - "unknown" + "id", + "name", + "persona", + "category", + "organization" ], - "title": "AgentStatus", - "description": "Current availability status for an agent." + "title": "OrganizationPersonasWithCategory" }, - "AgentValidation": { + "OrganizationPersonasWithCategoryResponse": { "properties": { - "valid": { - "type": "boolean", - "title": "Valid", - "description": "Whether the agent's graph is valid and ready to publish." - }, - "issues": { + "data": { "items": { - "$ref": "#/components/schemas/AgentValidationIssue" + "$ref": "#/components/schemas/OrganizationPersonasWithCategory" }, "type": "array", - "title": "Issues", - "description": "Problems found while validating the graph. Empty when `valid` is true." + "title": "Data" } }, - "additionalProperties": false, "type": "object", "required": [ - "valid" + "data" ], - "title": "AgentValidation", - "description": "Result of validating an agent's graph.\n\nMirrors the report computed on every read, so callers can confirm a draft\nis publishable before calling publish." + "title": "OrganizationPersonasWithCategoryResponse" }, - "AgentValidationIssue": { + "Pagination": { "properties": { - "code": { - "type": "string", - "title": "Code", - "description": "Stable machine-readable identifier for the kind of issue." + "limit": { + "type": "integer", + "maximum": 50000, + "exclusiveMinimum": 0, + "title": "Limit", + "description": "Maximum number of results to return. Default is 10,000, maximum is 50,000.", + "default": 10000 }, - "message": { - "type": "string", - "title": "Message", - "description": "Human-readable description of the issue." + "offset": { + "type": "integer", + "minimum": 0, + "title": "Offset", + "description": "Offset for the results. Used for pagination.", + "default": 0 + } + }, + "type": "object", + "title": "Pagination", + "description": "Offset-based pagination parameters." + }, + "PaginationInfo": { + "properties": { + "total_rows": { + "type": "integer", + "title": "Total Rows" }, - "node_id": { + "limit": { + "type": "integer", + "title": "Limit" + }, + "next_cursor": { "anyOf": [ { "type": "string" @@ -7424,172 +18737,206 @@ "type": "null" } ], - "title": "Node Id", - "description": "ID of the node the issue applies to, if node-specific." + "title": "Next Cursor" + } + }, + "type": "object", + "required": [ + "total_rows", + "limit", + "next_cursor" + ], + "title": "PaginationInfo" + }, + "PathFilter": { + "properties": { + "field": { + "type": "string", + "const": "path", + "title": "Field" }, - "node_title": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" ], - "title": "Node Title", - "description": "Display title of the affected node, if available." + "title": "Operator" }, - "field": { + "value": { "anyOf": [ { "type": "string" }, { - "type": "null" + "items": { + "type": "string" + }, + "type": "array" } ], - "title": "Field", - "description": "Name of the offending field on the node, if field-specific." + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "PathFilter", + "description": "Filter by request path" + }, + "PersonaIdFilter": { + "properties": { + "field": { + "type": "string", + "const": "persona_id", + "title": "Field" }, - "field_title": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in" ], - "title": "Field Title", - "description": "Display title of the affected field, if available." + "title": "Operator" }, - "violation": { + "value": { "anyOf": [ { - "type": "string" + "type": "string", + "format": "uuid" }, { - "type": "null" + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" } ], - "title": "Violation", - "description": "The specific constraint that was violated, if available." + "title": "Value" } }, - "additionalProperties": false, "type": "object", "required": [ - "code", - "message" - ], - "title": "AgentValidationIssue", - "description": "A single problem found while validating an agent's graph." - }, - "AgentVersion": { - "type": "string", - "enum": [ - "published", - "draft" + "field", + "operator", + "value" ], - "title": "AgentVersion", - "description": "Version selector for retrieving a specific agent." + "title": "PersonaIdFilter", + "description": "Filter by persona UUID." }, - "AnalysisBreakdown": { + "PersonaProfile": { "properties": { - "title": { - "type": "string", - "title": "Title" + "behavior": { + "$ref": "#/components/schemas/PersonaProfileBehavior" }, - "weight": { - "type": "number", - "title": "Weight" + "employment": { + "$ref": "#/components/schemas/PersonaProfileEmployment" }, - "score": { - "type": "number", - "title": "Score" + "demographics": { + "$ref": "#/components/schemas/PersonaProfileDemographics" } }, "type": "object", "required": [ - "title", - "weight", - "score" + "behavior", + "employment", + "demographics" ], - "title": "AnalysisBreakdown" + "title": "PersonaProfile" }, - "AnalysisInputs": { + "PersonaProfileBehavior": { "properties": { - "topic": { + "painPoints": { "anyOf": [ { - "$ref": "#/components/schemas/TopicInput" + "type": "string" }, { "type": "null" } - ] + ], + "title": "Painpoints" }, - "prompt": { + "motivations": { "anyOf": [ { - "$ref": "#/components/schemas/PromptInput" + "type": "string" }, { "type": "null" } - ] - }, - "top_citations": { + ], + "title": "Motivations" + } + }, + "type": "object", + "title": "PersonaProfileBehavior" + }, + "PersonaProfileDemographics": { + "properties": { + "ageRange": { "items": { "type": "string" }, "type": "array", - "title": "Top Citations" - }, - "user": { - "$ref": "#/components/schemas/UserInput" + "title": "Agerange" } }, "type": "object", - "required": [ - "topic", - "prompt", - "top_citations", - "user" - ], - "title": "AnalysisInputs" + "title": "PersonaProfileDemographics" }, - "AnalysisSummary": { + "PersonaProfileEmployment": { "properties": { - "breakdown": { + "industry": { "items": { - "$ref": "#/components/schemas/AnalysisBreakdown" + "type": "string" }, "type": "array", - "title": "Breakdown" + "title": "Industry" + }, + "jobTitle": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Jobtitle" + }, + "companySize": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Companysize" + }, + "roleSeniority": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Roleseniority" } }, "type": "object", - "required": [ - "breakdown" - ], - "title": "AnalysisSummary" - }, - "AnalysisType": { - "type": "string", - "enum": [ - "visibility", - "sentiment", - "sentiment_v2", - "accuracy" - ], - "title": "AnalysisType" + "title": "PersonaProfileEmployment" }, - "AnalysisTypeFilter": { + "ProductNameFilter": { "properties": { "field": { "type": "string", - "const": "analysis_type", + "const": "product_name", "title": "Field" }, "operator": { @@ -7605,143 +18952,44 @@ "contains_case_insensitive", "not_contains_case_insensitive" ], - "title": "Operator" - }, - "value": { - "anyOf": [ - { - "type": "string", - "enum": [ - "visibility", - "sentiment", - "sentiment_v2", - "accuracy" - ] - }, - { - "items": { - "type": "string", - "enum": [ - "visibility", - "sentiment", - "sentiment_v2", - "accuracy" - ] - }, - "type": "array" - } - ], - "title": "Value" - } - }, - "type": "object", - "required": [ - "field", - "operator", - "value" - ], - "title": "AnalysisTypeFilter", - "description": "Filter by analysis type (visibility, sentiment, or accuracy)." - }, - "AnswersQuery": { - "properties": { - "category_id": { - "type": "string", - "format": "uuid", - "title": "Category Id" - }, - "start_date": { - "type": "string", - "format": "date-time", - "title": "Start Date" - }, - "end_date": { - "type": "string", - "format": "date-time", - "title": "End Date" - }, - "pagination": { - "$ref": "#/components/schemas/Pagination", - "description": "Pagination parameters for the results. Default is 10,000 rows with no offset." - }, - "filters": { - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/RegionIdFilter" - }, - { - "$ref": "#/components/schemas/RegionNameFilter" - }, - { - "$ref": "#/components/schemas/ModelIdFilter" - }, - { - "$ref": "#/components/schemas/TagIdFilter" - }, - { - "$ref": "#/components/schemas/AnalysisTypeFilter" - }, - { - "$ref": "#/components/schemas/PromptTypeFilter" - }, - { - "$ref": "#/components/schemas/PromptFilter" - }, - { - "$ref": "#/components/schemas/PersonaIdFilter" - }, - { - "$ref": "#/components/schemas/TopicIdFilter" - }, - { - "$ref": "#/components/schemas/AssetIdFilter" - }, - { - "$ref": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "analysis_type": "#/components/schemas/AnalysisTypeFilter", - "asset_id": "#/components/schemas/AssetIdFilter", - "asset_name": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter", - "model": "#/components/schemas/ModelIdFilter", - "model_id": "#/components/schemas/ModelIdFilter", - "persona_id": "#/components/schemas/PersonaIdFilter", - "prompt": "#/components/schemas/PromptFilter", - "prompt_type": "#/components/schemas/PromptTypeFilter", - "region": "#/components/schemas/RegionIdFilter", - "region_id": "#/components/schemas/RegionIdFilter", - "region_name": "#/components/schemas/RegionNameFilter", - "tag": "#/components/schemas/TagIdFilter", - "tag_id": "#/components/schemas/TagIdFilter", - "topic": "#/components/schemas/TopicIdFilter", - "topic_id": "#/components/schemas/TopicIdFilter" - } - } - }, - "type": "array", - "title": "Filters", - "description": "List of filters to apply to the answers report." + "title": "Operator" }, - "include": { - "$ref": "#/components/schemas/EnabledFieldsResponse" + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" } }, "type": "object", "required": [ - "category_id", - "start_date", - "end_date" + "field", + "operator", + "value" ], - "title": "AnswersQuery", - "description": "Body for the answers endpoint." + "title": "ProductNameFilter" }, - "AnswersRawData": { + "Project": { "properties": { - "run_id": { + "project_id": { + "type": "string", + "format": "uuid", + "title": "Project Id" + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "origin_run_id": { "anyOf": [ { "type": "string", @@ -7751,21 +18999,24 @@ "type": "null" } ], - "title": "Run Id" + "title": "Origin Run Id" }, - "created_at": { + "initiated_by_user_id": { "anyOf": [ { - "type": "string", - "format": "date-time" + "type": "string" }, { "type": "null" } ], - "title": "Created At" + "title": "Initiated By User Id" }, - "prompt": { + "title": { + "type": "string", + "title": "Title" + }, + "summary": { "anyOf": [ { "type": "string" @@ -7774,60 +19025,100 @@ "type": "null" } ], - "title": "Prompt" + "title": "Summary" }, - "prompt_id": { + "why": { "anyOf": [ { - "type": "string", - "format": "uuid" + "type": "string" }, { "type": "null" } ], - "title": "Prompt Id" + "title": "Why" }, - "mentions": { + "topics": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Topics" + }, + "prompts": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Prompts" + }, + "measurement": { "anyOf": [ { - "items": { - "type": "string" - }, - "type": "array" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "title": "Mentions" + "title": "Measurement" }, - "analysis_types": { + "source_kind": { + "type": "string", + "enum": [ + "generate", + "adhoc" + ], + "title": "Source Kind", + "default": "adhoc" + }, + "source_prompt": { "anyOf": [ { - "items": { - "type": "string" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Analysis Types" + "title": "Source Prompt" }, - "prompt_type": { + "status": { + "type": "string", + "enum": [ + "suggested", + "tracked", + "retired" + ], + "title": "Status", + "default": "tracked" + }, + "task_count": { + "type": "integer", + "minimum": 0, + "title": "Task Count", + "default": 0 + }, + "new_task_count": { + "type": "integer", + "minimum": 0, + "title": "New Task Count", + "default": 0 + }, + "retired_at": { "anyOf": [ { - "type": "string" + "type": "string", + "format": "date-time" }, { "type": "null" } ], - "title": "Prompt Type" + "title": "Retired At" }, - "response": { + "retired_reason": { "anyOf": [ { "type": "string" @@ -7836,105 +19127,163 @@ "type": "null" } ], - "title": "Response" + "title": "Retired Reason" }, - "citations": { + "latest_version_id": { "anyOf": [ { - "items": { - "type": "string" - }, - "type": "array" + "type": "string", + "format": "uuid" }, { "type": "null" } ], - "title": "Citations" + "title": "Latest Version Id" }, - "citation_details": { + "version_count": { + "type": "integer", + "minimum": 0, + "title": "Version Count", + "default": 0 + }, + "created_at": { "anyOf": [ { - "items": { - "$ref": "#/components/schemas/CitationDetail" - }, - "type": "array" + "type": "string", + "format": "date-time" }, { "type": "null" } ], - "title": "Citation Details" + "title": "Created At" }, - "web_search_results": { + "updated_at": { "anyOf": [ { - "items": { - "type": "string" - }, - "type": "array" + "type": "string", + "format": "date-time" }, { "type": "null" } ], - "title": "Web Search Results" + "title": "Updated At" }, - "search_triggered": { + "live_generation": { "anyOf": [ { - "type": "boolean" + "$ref": "#/components/schemas/LiveGeneration" }, { "type": "null" } - ], - "title": "Search Triggered" + ] + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "project_id", + "category_id", + "title" + ], + "title": "Project" + }, + "ProjectAttachment": { + "properties": { + "id": { + "type": "string", + "minLength": 1, + "title": "Id" }, - "themes": { + "name": { + "type": "string", + "maxLength": 255, + "minLength": 1, + "title": "Name" + }, + "mime_type": { + "type": "string", + "minLength": 1, + "title": "Mime Type" + }, + "size_bytes": { + "type": "integer", + "maximum": 10485760, + "exclusiveMinimum": 0, + "title": "Size Bytes" + }, + "data_base64": { + "type": "string", + "maxLength": 13981016, + "minLength": 1, + "title": "Data Base64" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "id", + "name", + "mime_type", + "size_bytes", + "data_base64" + ], + "title": "ProjectAttachment" + }, + "ProjectDetail": { + "properties": { + "project_id": { + "type": "string", + "format": "uuid", + "title": "Project Id" + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "origin_run_id": { "anyOf": [ { - "items": { - "type": "string" - }, - "type": "array" + "type": "string", + "format": "uuid" }, { "type": "null" } ], - "title": "Themes" + "title": "Origin Run Id" }, - "sentiment_themes": { + "initiated_by_user_id": { "anyOf": [ { - "items": { - "$ref": "#/components/schemas/SentimentTheme" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Sentiment Themes", - "description": "Uses legacy sentiment data." + "title": "Initiated By User Id" }, - "search_queries": { + "title": { + "type": "string", + "title": "Title" + }, + "summary": { "anyOf": [ { - "items": { - "type": "string" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Search Queries" + "title": "Summary" }, - "topic": { + "why": { "anyOf": [ { "type": "string" @@ -7943,32 +19292,89 @@ "type": "null" } ], - "title": "Topic" + "title": "Why" }, - "topic_id": { + "topics": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Topics" + }, + "prompts": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Prompts" + }, + "measurement": { "anyOf": [ { - "type": "string", - "format": "uuid" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "title": "Topic Id" + "title": "Measurement" + }, + "source_kind": { + "type": "string", + "enum": [ + "generate", + "adhoc" + ], + "title": "Source Kind", + "default": "adhoc" + }, + "source_prompt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Source Prompt" + }, + "status": { + "type": "string", + "enum": [ + "suggested", + "tracked", + "retired" + ], + "title": "Status", + "default": "tracked" + }, + "task_count": { + "type": "integer", + "minimum": 0, + "title": "Task Count", + "default": 0 + }, + "new_task_count": { + "type": "integer", + "minimum": 0, + "title": "New Task Count", + "default": 0 }, - "region": { + "retired_at": { "anyOf": [ { - "type": "string" + "type": "string", + "format": "date-time" }, { "type": "null" } ], - "title": "Region" + "title": "Retired At" }, - "model": { + "retired_reason": { "anyOf": [ { "type": "string" @@ -7977,9 +19383,9 @@ "type": "null" } ], - "title": "Model" + "title": "Retired Reason" }, - "model_id": { + "latest_version_id": { "anyOf": [ { "type": "string", @@ -7989,1198 +19395,959 @@ "type": "null" } ], - "title": "Model Id" + "title": "Latest Version Id" }, - "asset": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Asset" + "version_count": { + "type": "integer", + "minimum": 0, + "title": "Version Count", + "default": 0 }, - "asset_id": { + "created_at": { "anyOf": [ { "type": "string", - "format": "uuid" + "format": "date-time" }, { "type": "null" } ], - "title": "Asset Id" + "title": "Created At" }, - "tags": { + "updated_at": { "anyOf": [ { - "items": { - "type": "string" - }, - "type": "array" + "type": "string", + "format": "date-time" }, { "type": "null" } ], - "title": "Tags" + "title": "Updated At" }, - "persona": { + "live_generation": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/LiveGeneration" }, { "type": "null" } - ], - "title": "Persona" - } - }, - "type": "object", - "title": "AnswersRawData", - "description": "Raw data for the answers endpoint." - }, - "AnswersResponse": { - "properties": { - "info": { - "$ref": "#/components/schemas/AnswersResponseInfo" + ] }, - "data": { + "tasks": { "items": { - "$ref": "#/components/schemas/AnswersRawData" + "$ref": "#/components/schemas/ProjectTask" }, "type": "array", - "title": "Data" + "title": "Tasks" } }, + "additionalProperties": false, "type": "object", "required": [ - "info", - "data" + "project_id", + "category_id", + "title" ], - "title": "AnswersResponse", - "description": "Response for the answers endpoint." + "title": "ProjectDetail" }, - "AnswersResponseInfo": { + "ProjectDetailResponse": { "properties": { - "total_rows": { - "type": "integer", - "title": "Total Rows" + "data": { + "$ref": "#/components/schemas/ProjectDetail" } }, + "additionalProperties": false, "type": "object", "required": [ - "total_rows" + "data" ], - "title": "AnswersResponseInfo" + "title": "ProjectDetailResponse" }, - "AnswersV2Query": { + "ProjectGeneration": { "properties": { - "category_id": { + "project_id": { "type": "string", - "title": "Category Id" + "format": "uuid", + "title": "Project Id" }, - "start_date": { + "run_id": { "type": "string", - "title": "Start Date", - "description": "YYYY-MM-DD, ET, inclusive" + "format": "uuid", + "title": "Run Id" }, - "end_date": { + "status": { "type": "string", - "title": "End Date", - "description": "YYYY-MM-DD, ET, inclusive" - }, - "include": { - "anyOf": [ - { - "items": { - "type": "string", - "enum": [ - "run_id", - "date", - "model", - "topic", - "topic_id", - "persona", - "region", - "tags", - "prompt", - "prompt_id", - "response", - "mentions", - "citations", - "search_queries", - "analysis_types", - "sentiment_claims" - ] - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Include", - "description": "Which row fields to return: `run_id`, `date`, `model`, `topic`, `topic_id`, `region`, `persona`, `tags`, `prompt`, `prompt_id`, `response`, `mentions`, `citations`, `search_queries`, `analysis_types`, `sentiment_claims`. Omit for all of them." - }, - "filter": { - "anyOf": [ - { - "$ref": "#/components/schemas/FilterNode" - }, - { - "type": "null" - } - ], - "description": "and/or/not tree over `model`, `topic`, `region`, `persona`, `prompt`, `tag`, `analysis_type` (visibility/sentiment/factcheck); plus top-level `and` leaves `domain` or `page` (`is` one value, or `in` a list). Substring-search the prompt with `{\"field\": \"prompt\", \"op\": \"contains\", \"value\": \"…\"}`." - }, - "limit": { - "anyOf": [ - { - "type": "integer", - "maximum": 50, - "exclusiveMinimum": 0 - }, - { - "type": "null" - } - ], - "title": "Limit", - "description": "Page size; default 10, max 50." - }, - "max_results": { - "anyOf": [ - { - "type": "integer", - "exclusiveMinimum": 0 - }, - { - "type": "null" - } - ], - "title": "Max Results", - "description": "Stream endpoint only: cap the number of streamed rows (default: all)." - }, - "cursor": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } + "enum": [ + "queued", + "running" ], - "title": "Cursor" + "title": "Status", + "default": "queued" } }, "additionalProperties": false, "type": "object", "required": [ - "category_id", - "start_date", - "end_date" + "project_id", + "run_id" ], - "title": "AnswersV2Query" + "title": "ProjectGeneration" }, - "AssetIdFilter": { + "ProjectGenerationContext": { "properties": { - "field": { - "type": "string", - "const": "asset_id", - "title": "Field" - }, - "operator": { - "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in" - ], - "title": "Operator" - }, - "value": { + "dateRange": { "anyOf": [ { - "type": "string", - "format": "uuid" + "$ref": "#/components/schemas/ProjectGenerationDateRange" }, { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "null" } - ], - "title": "Value" + ] + }, + "platforms": { + "items": { + "$ref": "#/components/schemas/ProjectGenerationContextItem" + }, + "type": "array", + "maxItems": 20, + "title": "Platforms" + }, + "projectCategories": { + "items": { + "type": "string", + "enum": [ + "creative", + "earned", + "publish", + "refresh", + "social" + ] + }, + "type": "array", + "maxItems": 5, + "title": "Projectcategories" + }, + "regions": { + "items": { + "$ref": "#/components/schemas/ProjectGenerationContextItem" + }, + "type": "array", + "maxItems": 50, + "title": "Regions" + }, + "tags": { + "items": { + "$ref": "#/components/schemas/ProjectGenerationContextItem" + }, + "type": "array", + "maxItems": 100, + "title": "Tags" } }, + "additionalProperties": false, "type": "object", - "required": [ - "field", - "operator", - "value" - ], - "title": "AssetIdFilter" + "title": "ProjectGenerationContext" }, - "BotNameFilter": { + "ProjectGenerationContextItem": { "properties": { - "field": { + "id": { "type": "string", - "const": "bot_name", - "title": "Field" + "maxLength": 200, + "minLength": 1, + "title": "Id" }, - "operator": { + "name": { "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" - ], - "title": "Operator" + "maxLength": 200, + "minLength": 1, + "title": "Name" }, - "value": { + "slug": { "anyOf": [ { "type": "string", - "enum": [ - "Amazonbot", - "ClaudeBot", - "Claude-User", - "Claude-SearchBot", - "Applebot", - "Applebot-Extended", - "Bytespider", - "DeepSeek", - "DuckAssistBot", - "DuckDuckBot", - "Googlebot", - "Googlebot-News", - "Googlebot-Video", - "Googlebot-Image", - "Google-Extended", - "Storebot-Google", - "Google-CloudVertexBot", - "meta-externalfetcher", - "meta-externalagent", - "bingbot", - "MicrosoftPreview", - "ChatGPT-User", - "GPTBot", - "OAI-SearchBot", - "OAI-Operator", - "PerplexityBot", - "Perplexity-User", - "Grok-PageBrowser", - "YouBot", - "OpenClaw", - "baiduspider", - "CCBot", - "ERNIEBot", - "Gemini-Fetch", - "YandexBot", - "PetalBot", - "MistralAI-User", - "Slurp", - "Gemini-Deep-Research" - ] + "maxLength": 200 }, { - "items": { - "type": "string", - "enum": [ - "Amazonbot", - "ClaudeBot", - "Claude-User", - "Claude-SearchBot", - "Applebot", - "Applebot-Extended", - "Bytespider", - "DeepSeek", - "DuckAssistBot", - "DuckDuckBot", - "Googlebot", - "Googlebot-News", - "Googlebot-Video", - "Googlebot-Image", - "Google-Extended", - "Storebot-Google", - "Google-CloudVertexBot", - "meta-externalfetcher", - "meta-externalagent", - "bingbot", - "MicrosoftPreview", - "ChatGPT-User", - "GPTBot", - "OAI-SearchBot", - "OAI-Operator", - "PerplexityBot", - "Perplexity-User", - "Grok-PageBrowser", - "YouBot", - "OpenClaw", - "baiduspider", - "CCBot", - "ERNIEBot", - "Gemini-Fetch", - "YandexBot", - "PetalBot", - "MistralAI-User", - "Slurp", - "Gemini-Deep-Research" - ] - }, - "type": "array" + "type": "null" } ], - "title": "Value" + "title": "Slug" } }, + "additionalProperties": false, "type": "object", "required": [ - "field", - "operator", - "value" + "id", + "name" ], - "title": "BotNameFilter", - "description": "Filter by bot name (user agent)" + "title": "ProjectGenerationContextItem" }, - "BotProviderFilter": { + "ProjectGenerationDateRange": { "properties": { - "field": { - "type": "string", - "const": "bot_provider", - "title": "Field" + "endDate": { + "anyOf": [ + { + "type": "string", + "maxLength": 40 + }, + { + "type": "null" + } + ], + "title": "Enddate" }, - "operator": { + "label": { "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" - ], - "title": "Operator" + "maxLength": 80, + "minLength": 1, + "title": "Label" }, - "value": { + "mode": { "anyOf": [ { "type": "string", "enum": [ - "openai", - "anthropic", - "chatgpt", - "deepseek", - "google", - "microsoft", - "perplexity", - "apple", - "bytedance", - "amazon", - "meta", - "duckduckgo", - "you", - "xai", - "grok", - "gemini", - "mistral", - "huawei", - "yandex", - "baidu", - "yahoo", - "commoncrawl", - "openclaw" + "custom", + "relative" ] }, { - "items": { - "type": "string", - "enum": [ - "openai", - "anthropic", - "chatgpt", - "deepseek", - "google", - "microsoft", - "perplexity", - "apple", - "bytedance", - "amazon", - "meta", - "duckduckgo", - "you", - "xai", - "grok", - "gemini", - "mistral", - "huawei", - "yandex", - "baidu", - "yahoo", - "commoncrawl", - "openclaw" - ] - }, - "type": "array" + "type": "null" } ], - "title": "Value" - } - }, - "type": "object", - "required": [ - "field", - "operator", - "value" - ], - "title": "BotProviderFilter", - "description": "Filter by bot provider" - }, - "BotTypeFilter": { - "properties": { - "field": { - "type": "string", - "const": "bot_type", - "title": "Field" + "title": "Mode" }, - "operator": { + "preset": { "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" - ], - "title": "Operator" + "maxLength": 80, + "minLength": 1, + "title": "Preset" }, - "value": { + "startDate": { "anyOf": [ { "type": "string", - "enum": [ - "ai_assistant", - "ai_training", - "index", - "ai_agent" - ] + "maxLength": 40 }, { - "items": { - "type": "string", - "enum": [ - "ai_assistant", - "ai_training", - "index", - "ai_agent" - ] - }, - "type": "array" + "type": "null" } ], - "title": "Value" + "title": "Startdate" } }, + "additionalProperties": false, "type": "object", "required": [ - "field", - "operator", - "value" + "label", + "preset" ], - "title": "BotTypeFilter", - "description": "Filter by bot_type column (v2 hourly table only)" + "title": "ProjectGenerationDateRange" }, - "BotsReportQuery": { + "ProjectGenerationResponse": { "properties": { - "date_interval": { + "data": { + "$ref": "#/components/schemas/ProjectGeneration" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "data" + ], + "title": "ProjectGenerationResponse" + }, + "ProjectGenerationStatus": { + "properties": { + "run_id": { "type": "string", - "enum": [ - "hour", - "day", - "week", - "month", - "year", - "relative_week" - ], - "title": "Date Interval", - "description": "Date interval for the report. (only used with date dimension)", - "default": "day" + "format": "uuid", + "title": "Run Id" }, - "dimensions": { - "items": { - "type": "string", - "enum": [ - "date", - "path", - "bot_name", - "bot_provider" - ] - }, - "type": "array", - "title": "Dimensions", - "description": "Dimensions to group the report by.", - "default": [] + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" }, - "metrics": { - "items": { - "type": "string", - "enum": [ - "count", - "citations", - "indexing", - "training", - "last_visit" - ] - }, - "type": "array", - "title": "Metrics" + "mode": { + "type": "string", + "enum": [ + "generate", + "adhoc" + ], + "title": "Mode" }, - "order_by": { - "additionalProperties": { - "type": "string", - "enum": [ - "asc", - "desc" - ] - }, - "type": "object", - "title": "Order By", - "description": "\nCustom ordering of the report results.\n\nThe order is a record of key-value pairs where:\n- key is the field to order by, which can be a metric or dimension\n- value is the direction of the order, either 'asc' for ascending or 'desc' for descending.\n\nWhen not specified, the default order is the first metric in the query descending.\n ", - "default": {}, - "examples": [ + "focus_prompt": { + "anyOf": [ { - "date": "asc" + "type": "string" + }, + { + "type": "null" } - ] - }, - "pagination": { - "$ref": "#/components/schemas/Pagination", - "description": "Pagination settings for the report results." - }, - "domain": { - "type": "string", - "title": "Domain", - "description": "Domain to query logs for." - }, - "start_date": { - "type": "string", - "format": "date-time", - "title": "Start Date", - "description": "Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp." + ], + "title": "Focus Prompt" }, - "end_date": { + "status": { "type": "string", - "format": "date-time", - "title": "End Date", - "description": "End date for logs. Accepts same formats as start_date. Defaults to now if omitted." + "enum": [ + "queued", + "running", + "completed", + "failed" + ], + "title": "Status" }, - "organization_id": { + "started_at": { "anyOf": [ { "type": "string", - "format": "uuid" + "format": "date-time" }, { "type": "null" } ], - "title": "Organization Id" + "title": "Started At" }, - "metric_filters": { - "items": { - "$ref": "#/components/schemas/NumericMetricFilter" - }, - "type": "array", - "title": "Metric Filters", - "description": "Numeric filters applied after report metrics are calculated." + "finished_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Finished At" }, - "filters": { - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/PathFilter" - }, - { - "$ref": "#/components/schemas/BotNameFilter" - }, - { - "$ref": "#/components/schemas/BotProviderFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "bot_name": "#/components/schemas/BotNameFilter", - "bot_provider": "#/components/schemas/BotProviderFilter", - "path": "#/components/schemas/PathFilter" - } + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" } - }, - "type": "array", - "title": "Filters", - "description": "Filters for bots report." + ], + "title": "Error" } }, + "additionalProperties": false, "type": "object", "required": [ - "metrics", - "domain", - "start_date" + "run_id", + "category_id", + "mode", + "status" ], - "title": "BotsReportQuery" + "title": "ProjectGenerationStatus" }, - "BotsReportQueryV2": { + "ProjectGenerationStatusResponse": { "properties": { - "date_interval": { + "data": { + "$ref": "#/components/schemas/ProjectGenerationStatus" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "data" + ], + "title": "ProjectGenerationStatusResponse" + }, + "ProjectListItem": { + "properties": { + "project_id": { + "type": "string", + "format": "uuid", + "title": "Project Id" + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "status": { "type": "string", "enum": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" + "suggested", + "tracked", + "retired" ], - "title": "Date Interval", - "description": "Date interval for the report. (only used with date dimension)", - "default": "day" + "title": "Status", + "default": "suggested" }, - "dimensions": { - "items": { - "type": "string", - "enum": [ - "date", - "hour", - "path", - "bot_name", - "bot_provider", - "bot_type" - ] - }, - "type": "array", - "title": "Dimensions", - "description": "Dimensions to group the report by.", - "default": [] + "title": { + "type": "string", + "title": "Title" }, - "metrics": { + "summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Summary" + }, + "initiated_by_user_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Initiated By User Id" + }, + "topics": { "items": { - "type": "string", - "enum": [ - "count", - "citations", - "indexing", - "training", - "last_visit" - ] + "type": "string" }, "type": "array", - "title": "Metrics" + "title": "Topics" }, - "order_by": { - "additionalProperties": { - "type": "string", - "enum": [ - "asc", - "desc" - ] - }, - "propertyNames": { - "enum": [ - "date", - "hour", - "count", - "citations", - "indexing", - "training", - "last_visit", - "bot_type" - ] - }, - "type": "object", - "title": "Order By", - "description": "\nCustom ordering of the report results.\n\nThe order is a record of key-value pairs where:\n- key is the field to order by, which can be a metric or dimension\n- value is the direction of the order, either 'asc' for ascending or 'desc' for descending.\n\nWhen not specified, the default order is the first metric in the query descending.\n ", - "default": {}, - "examples": [ + "updated_at": { + "anyOf": [ { - "date": "asc" + "type": "string", + "format": "date-time" + }, + { + "type": "null" } - ] - }, - "pagination": { - "$ref": "#/components/schemas/Pagination", - "description": "Pagination settings for the report results." + ], + "title": "Updated At" }, - "domain": { - "type": "string", - "title": "Domain", - "description": "Domain to query logs for." + "task_types": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Task Types" }, - "start_date": { - "type": "string", - "format": "date-time", - "title": "Start Date", - "description": "Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp." + "task_count": { + "type": "integer", + "minimum": 0, + "title": "Task Count", + "default": 0 }, - "end_date": { - "type": "string", - "format": "date-time", - "title": "End Date", - "description": "End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted." + "new_task_count": { + "type": "integer", + "minimum": 0, + "title": "New Task Count", + "default": 0 }, - "organization_id": { + "retired_at": { "anyOf": [ { "type": "string", - "format": "uuid" + "format": "date-time" }, { "type": "null" } ], - "title": "Organization Id" - }, - "metric_filters": { - "items": { - "$ref": "#/components/schemas/NumericMetricFilter" - }, - "type": "array", - "title": "Metric Filters", - "description": "Numeric filters applied after report metrics are calculated." + "title": "Retired At" }, - "filters": { - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/PathFilter" - }, - { - "$ref": "#/components/schemas/BotNameFilter" - }, - { - "$ref": "#/components/schemas/BotProviderFilter" - }, - { - "$ref": "#/components/schemas/BotTypeFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "bot_name": "#/components/schemas/BotNameFilter", - "bot_provider": "#/components/schemas/BotProviderFilter", - "bot_type": "#/components/schemas/BotTypeFilter", - "path": "#/components/schemas/PathFilter" - } + "retired_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Retired Reason" + }, + "live_generation": { + "anyOf": [ + { + "$ref": "#/components/schemas/LiveGeneration" + }, + { + "type": "null" } - }, - "type": "array", - "title": "Filters", - "description": "Filters for bots report." + ] } }, "type": "object", "required": [ - "metrics", - "domain", - "start_date" + "project_id", + "category_id", + "title" ], - "title": "BotsReportQueryV2" + "title": "ProjectListItem" }, - "BrandNameFilter": { + "ProjectResponse": { "properties": { - "field": { + "data": { + "$ref": "#/components/schemas/Project" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "data" + ], + "title": "ProjectResponse" + }, + "ProjectStatusPayload": { + "properties": { + "project_id": { "type": "string", - "const": "brand_name", - "title": "Field" + "format": "uuid", + "title": "Project Id" }, - "operator": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "status": { "type": "string", "enum": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" + "suggested", + "tracked", + "retired" ], - "title": "Operator" + "title": "Status" }, - "value": { + "live_generation": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/LiveGeneration" }, { - "items": { - "type": "string" - }, - "type": "array" + "type": "null" + } + ] + }, + "updated_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" } ], - "title": "Value" + "title": "Updated At" } }, + "additionalProperties": false, "type": "object", "required": [ - "field", - "operator", - "value" + "project_id", + "category_id", + "status" ], - "title": "BrandNameFilter" + "title": "ProjectStatusPayload" }, - "Category": { + "ProjectStatusResponse": { "properties": { - "id": { + "data": { + "$ref": "#/components/schemas/ProjectStatusPayload" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "data" + ], + "title": "ProjectStatusResponse" + }, + "ProjectTask": { + "properties": { + "task_id": { "type": "string", "format": "uuid", - "title": "Id" + "title": "Task Id" }, - "name": { + "project_id": { "type": "string", - "title": "Name" + "format": "uuid", + "title": "Project Id" + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Type" + }, + "title": { + "type": "string", + "title": "Title" + }, + "summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Summary" + }, + "brief": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Brief" + }, + "topic": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Topic" + }, + "impact": { + "anyOf": [ + { + "type": "integer", + "maximum": 5, + "minimum": 1 + }, + { + "type": "null" + } + ], + "title": "Impact" + }, + "reference_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Reference Url" + }, + "reference_label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Reference Label" + }, + "status": { + "type": "string", + "enum": [ + "not_started", + "in_progress", + "done", + "abandoned" + ], + "title": "Status", + "default": "not_started" + }, + "status_changed_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Status Changed At" + }, + "is_new": { + "type": "boolean", + "title": "Is New", + "default": true + }, + "created_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Created At" } }, + "additionalProperties": false, "type": "object", "required": [ - "id", - "name" + "task_id", + "project_id", + "category_id", + "title" ], - "title": "Category" + "title": "ProjectTask" }, - "CategoryAsset": { + "ProjectTaskDetail": { "properties": { - "id": { + "task_id": { "type": "string", "format": "uuid", - "title": "Id" + "title": "Task Id" }, - "name": { + "project_id": { "type": "string", - "title": "Name" + "format": "uuid", + "title": "Project Id" }, - "website": { + "category_id": { "type": "string", - "title": "Website" + "format": "uuid", + "title": "Category Id" + }, + "type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Type" + }, + "title": { + "type": "string", + "title": "Title" + }, + "summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Summary" + }, + "brief": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Brief" + }, + "topic": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Topic" }, - "alternate_domains": { + "impact": { "anyOf": [ { - "items": { - "type": "string" - }, - "type": "array" + "type": "integer", + "maximum": 5, + "minimum": 1 }, { "type": "null" } ], - "title": "Alternate Domains" - }, - "is_owned": { - "type": "boolean", - "title": "Is Owned" + "title": "Impact" }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Created At" - }, - "logo_url": { - "type": "string", - "title": "Logo Url" - } - }, - "type": "object", - "required": [ - "id", - "name", - "website", - "is_owned", - "created_at", - "logo_url" - ], - "title": "CategoryAsset" - }, - "CategoryAssetWithCategory": { - "properties": { - "id": { - "type": "string", - "format": "uuid", - "title": "Id" + "reference_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Reference Url" }, - "name": { - "type": "string", - "title": "Name" + "reference_label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Reference Label" }, - "website": { + "status": { "type": "string", - "title": "Website" + "enum": [ + "not_started", + "in_progress", + "done", + "abandoned" + ], + "title": "Status", + "default": "not_started" }, - "alternate_domains": { + "status_changed_at": { "anyOf": [ { - "items": { - "type": "string" - }, - "type": "array" + "type": "string", + "format": "date-time" }, { "type": "null" } ], - "title": "Alternate Domains" + "title": "Status Changed At" }, - "is_owned": { + "is_new": { "type": "boolean", - "title": "Is Owned" + "title": "Is New", + "default": true }, "created_at": { - "type": "string", - "format": "date-time", + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], "title": "Created At" }, - "logo_url": { - "type": "string", - "title": "Logo Url" - }, - "category": { - "$ref": "#/components/schemas/Category" - }, - "organization": { - "$ref": "#/components/schemas/Organization" - } - }, - "type": "object", - "required": [ - "id", - "name", - "website", - "is_owned", - "created_at", - "logo_url", - "category", - "organization" - ], - "title": "CategoryAssetWithCategory" - }, - "CategoryPersona": { - "properties": { - "id": { - "type": "string", - "title": "Id" - }, - "name": { - "type": "string", - "title": "Name" - }, - "persona": { - "$ref": "#/components/schemas/PersonaProfile" + "project_title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Project Title" } }, + "additionalProperties": false, "type": "object", "required": [ - "id", - "name", - "persona" + "task_id", + "project_id", + "category_id", + "title" ], - "title": "CategoryPersona" + "title": "ProjectTaskDetail" }, - "CategoryPersonasResponse": { + "ProjectTaskDetailResponse": { "properties": { "data": { - "items": { - "$ref": "#/components/schemas/CategoryPersona" - }, - "type": "array", - "title": "Data" + "$ref": "#/components/schemas/ProjectTaskDetail" } }, + "additionalProperties": false, "type": "object", "required": [ "data" ], - "title": "CategoryPersonasResponse" + "title": "ProjectTaskDetailResponse" }, - "CategoryPromptsResponse": { + "ProjectTaskResponse": { "properties": { - "info": { - "$ref": "#/components/schemas/PaginationInfo" - }, "data": { - "items": { - "$ref": "#/components/schemas/Prompt" - }, - "type": "array", - "title": "Data" + "$ref": "#/components/schemas/ProjectTask" } }, + "additionalProperties": false, "type": "object", "required": [ - "info", "data" ], - "title": "CategoryPromptsResponse" - }, - "CategoryWithOrganization": { - "properties": { - "id": { - "type": "string", - "format": "uuid", - "title": "Id" - }, - "name": { - "type": "string", - "title": "Name" - }, - "organization": { - "$ref": "#/components/schemas/Organization" - } - }, - "type": "object", - "required": [ - "id", - "name", - "organization" - ], - "title": "CategoryWithOrganization", - "description": "A category annotated with the organization that owns it." - }, - "CitationCategoryFilter": { - "properties": { - "field": { - "type": "string", - "const": "citation_category", - "title": "Field" - }, - "operator": { - "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" - ], - "title": "Operator" - }, - "value": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "type": "string" - }, - "type": "array" - } - ], - "title": "Value" - } - }, - "type": "object", - "required": [ - "field", - "operator", - "value" - ], - "title": "CitationCategoryFilter", - "description": "Filter by citation category" + "title": "ProjectTaskResponse" }, - "CitationDetail": { + "ProjectTaskStatusPayload": { "properties": { - "url": { - "type": "string", - "title": "Url" - }, - "clean_url": { - "type": "string", - "title": "Clean Url" - }, - "title": { + "task_id": { "type": "string", - "title": "Title" - }, - "text": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Text" - }, - "hostname": { - "type": "string", - "title": "Hostname" + "format": "uuid", + "title": "Task Id" }, - "path": { + "project_id": { "type": "string", - "title": "Path" + "format": "uuid", + "title": "Project Id" }, - "first_cited_at": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } + "status": { + "type": "string", + "enum": [ + "not_started", + "in_progress", + "done", + "abandoned" ], - "title": "First Cited At" + "title": "Status" }, - "positions": { - "items": { - "type": "integer" - }, - "type": "array", - "title": "Positions" + "changed_at": { + "type": "string", + "format": "date-time", + "title": "Changed At" }, - "groups": { + "changed_by": { "anyOf": [ { - "items": { - "$ref": "#/components/schemas/CitationDetailGroup" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Groups" + "title": "Changed By" }, - "citation_category": { + "note": { "anyOf": [ { "type": "string" @@ -9189,449 +20356,543 @@ "type": "null" } ], - "title": "Citation Category" + "title": "Note" } }, + "additionalProperties": false, "type": "object", "required": [ - "url", - "clean_url", - "title", - "hostname", - "path" + "task_id", + "project_id", + "status", + "changed_at" ], - "title": "CitationDetail" + "title": "ProjectTaskStatusPayload" }, - "CitationDetailGroup": { + "ProjectTaskStatusResponse": { "properties": { - "group_id": { - "type": "integer", - "title": "Group Id" - }, - "group_position": { - "type": "integer", - "title": "Group Position" + "data": { + "$ref": "#/components/schemas/ProjectTaskStatusPayload" } }, + "additionalProperties": false, "type": "object", "required": [ - "group_id", - "group_position" + "data" ], - "title": "CitationDetailGroup" + "title": "ProjectTaskStatusResponse" }, - "CitationsQuery": { + "Prompt": { "properties": { - "date_interval": { + "id": { "type": "string", - "enum": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" - ], - "title": "Date Interval", - "description": "Date interval for the report. (only used with date dimension)", - "default": "day" + "title": "Id" }, - "dimensions": { + "analysis_types": { "items": { "type": "string", "enum": [ - "hostname", - "path", - "date", - "region", - "topic", - "topic_id", - "model", - "tag", - "prompt", - "prompt_id", - "url", - "root_domain", - "persona", - "citation_category" + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" ] }, "type": "array", - "title": "Dimensions", - "description": "Dimensions to group the report by.", + "title": "Analysis Types", "default": [] }, - "metrics": { - "items": { - "type": "string", - "enum": [ - "count", - "citation_share", - "share_of_voice", - "first_cited_at" - ] - }, - "type": "array", - "title": "Metrics", - "description": "Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead.", - "deprecated_values": { - "share_of_voice": "Use citation_share instead" - } - }, - "order_by": { - "additionalProperties": { - "type": "string", - "enum": [ - "asc", - "desc" - ] - }, - "type": "object", - "title": "Order By", - "description": "\n Custom ordering of the report results.\n\n The order is a record of key-value pairs where:\n - `key` is the field to order by, which can be a metric or dimension\n - `value` is the direction of the order, either `asc` for ascending or `desc` for descending.\n\n When not specified, the default order is the first metric in the query descending.\n ", - "default": {}, - "examples": [ - { - "date": "asc" - }, - { - "count": "desc", - "date": "asc" - } - ] - }, - "pagination": { - "$ref": "#/components/schemas/Pagination", - "description": "Pagination settings for the report results." + "prompt_type": { + "type": "string", + "title": "Prompt Type", + "default": "", + "deprecated": true }, - "category_id": { + "prompt": { "type": "string", - "format": "uuid", - "title": "Category Id" + "title": "Prompt" }, - "start_date": { + "language": { "type": "string", - "format": "date-time", - "title": "Start Date", - "description": "Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + "title": "Language" }, - "end_date": { + "status": { "type": "string", - "format": "date-time", - "title": "End Date", - "description": "End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + "enum": [ + "active", + "disabled" + ], + "title": "Status" }, - "filters": { + "topic": { + "$ref": "#/components/schemas/NamedResource" + }, + "tags": { "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/HostnameFilter" - }, - { - "$ref": "#/components/schemas/PathFilter" - }, - { - "$ref": "#/components/schemas/RegionIdFilter" - }, - { - "$ref": "#/components/schemas/RegionNameFilter" - }, - { - "$ref": "#/components/schemas/TopicIdFilter" - }, - { - "$ref": "#/components/schemas/TopicNameFilter" - }, - { - "$ref": "#/components/schemas/ModelIdFilter" - }, - { - "$ref": "#/components/schemas/TagIdFilter" - }, - { - "$ref": "#/components/schemas/TagNameFilter" - }, - { - "$ref": "#/components/schemas/UrlFilter" - }, - { - "$ref": "#/components/schemas/RootDomainFilter" - }, - { - "$ref": "#/components/schemas/AnalysisTypeFilter" - }, - { - "$ref": "#/components/schemas/PromptTypeFilter" - }, - { - "$ref": "#/components/schemas/PersonaIdFilter" - }, - { - "$ref": "#/components/schemas/CitationCategoryFilter" - }, - { - "$ref": "#/components/schemas/PromptFilter" - }, - { - "$ref": "#/components/schemas/PromptIdFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "analysis_type": "#/components/schemas/AnalysisTypeFilter", - "citation_category": "#/components/schemas/CitationCategoryFilter", - "hostname": "#/components/schemas/HostnameFilter", - "model": "#/components/schemas/ModelIdFilter", - "model_id": "#/components/schemas/ModelIdFilter", - "path": "#/components/schemas/PathFilter", - "persona_id": "#/components/schemas/PersonaIdFilter", - "prompt": "#/components/schemas/PromptFilter", - "prompt_id": "#/components/schemas/PromptIdFilter", - "prompt_type": "#/components/schemas/PromptTypeFilter", - "region": "#/components/schemas/RegionIdFilter", - "region_id": "#/components/schemas/RegionIdFilter", - "region_name": "#/components/schemas/RegionNameFilter", - "root_domain": "#/components/schemas/RootDomainFilter", - "tag": "#/components/schemas/TagIdFilter", - "tag_id": "#/components/schemas/TagIdFilter", - "tag_name": "#/components/schemas/TagNameFilter", - "topic": "#/components/schemas/TopicIdFilter", - "topic_id": "#/components/schemas/TopicIdFilter", - "topic_name": "#/components/schemas/TopicNameFilter", - "url": "#/components/schemas/UrlFilter" - } - } + "$ref": "#/components/schemas/NamedResource" + }, + "type": "array", + "title": "Tags", + "default": [] + }, + "regions": { + "items": { + "$ref": "#/components/schemas/NamedResource" }, "type": "array", - "title": "Filters", - "description": "List of filters to apply to the citations report." + "title": "Regions" + }, + "platforms": { + "items": { + "$ref": "#/components/schemas/NamedResource" + }, + "type": "array", + "title": "Platforms" + }, + "personas": { + "items": { + "$ref": "#/components/schemas/NamedResource" + }, + "type": "array", + "title": "Personas", + "default": [] + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Updated At" } }, "type": "object", "required": [ - "metrics", - "category_id", - "start_date", - "end_date" + "id", + "prompt", + "language", + "status", + "topic", + "regions", + "platforms", + "created_at", + "updated_at" ], - "title": "CitationsQuery" + "title": "Prompt" }, - "CitationsResponse": { + "PromptFilter": { "properties": { - "info": { - "$ref": "#/components/schemas/Info" + "field": { + "type": "string", + "const": "prompt", + "title": "Field" }, - "data": { - "items": { - "$ref": "#/components/schemas/CitationsResult" - }, - "type": "array", - "title": "Data" + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" } }, "type": "object", "required": [ - "info", - "data" + "field", + "operator", + "value" ], - "title": "CitationsResponse", - "examples": [ - { - "data": [ + "title": "PromptFilter", + "description": "Filter by prompt text" + }, + "PromptIdFilter": { + "properties": { + "field": { + "type": "string", + "const": "prompt_id", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ { - "dimensions": [ - "example.com", - "/some/path", - "2023-10-01" - ], - "metrics": [ - 10, - 0.05 - ] + "type": "string", + "format": "uuid" + }, + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" } ], - "info": { - "query": { - "date_interval": "day", - "dimensions": [ - "hostname", - "path", - "date" - ], - "filters": [ - { - "field": "hostname", - "operator": "is", - "value": "example.com" - } - ], - "metrics": [ - "count", - "citation_share" - ] - }, - "total_rows": 200 - } + "title": "Value" } - ] + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "PromptIdFilter", + "description": "Filter by prompt UUID." }, - "CitationsResult": { + "PromptInput": { "properties": { - "metrics": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + } + }, + "type": "object", + "required": [ + "id", + "name" + ], + "title": "PromptInput" + }, + "PromptOrderBy": { + "type": "string", + "enum": [ + "created_at", + "prompt" + ], + "title": "PromptOrderBy" + }, + "PromptPreview": { + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Generated prompt ID." + }, + "prompt": { + "type": "string", + "title": "Prompt", + "description": "The prompt text." + }, + "topic": { + "$ref": "#/components/schemas/NamedResource", + "description": "Resolved topic." + }, + "language": { + "type": "string", + "title": "Language", + "description": "Language code." + }, + "tags": { "items": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string" - }, - { - "type": "null" - } - ] + "$ref": "#/components/schemas/NamedResource" + }, + "type": "array", + "title": "Tags", + "description": "Resolved tags.", + "default": [] + }, + "regions": { + "items": { + "$ref": "#/components/schemas/NamedResource" + }, + "type": "array", + "title": "Regions", + "description": "Resolved regions.", + "default": [] + }, + "platforms": { + "items": { + "$ref": "#/components/schemas/NamedResource" + }, + "type": "array", + "title": "Platforms", + "description": "Resolved platforms.", + "default": [] + }, + "personas": { + "items": { + "$ref": "#/components/schemas/NamedResource" }, "type": "array", - "title": "Metrics" + "title": "Personas", + "description": "Resolved personas.", + "default": [] }, - "dimensions": { + "analysis_types": { "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "string", - "format": "uuid" - } + "type": "string", + "enum": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" ] }, "type": "array", - "title": "Dimensions" + "title": "Analysis Types", + "description": "Analysis types assigned to this prompt.", + "default": [] + }, + "asset": { + "anyOf": [ + { + "$ref": "#/components/schemas/NamedResource" + }, + { + "type": "null" + } + ], + "description": "Resolved asset, if applicable." } }, "type": "object", "required": [ - "metrics", - "dimensions" + "id", + "prompt", + "topic", + "language" ], - "title": "CitationsResult" + "title": "PromptPreview", + "description": "Preview of a prompt that was (or would be) created." }, - "CitationsV2Query": { + "PromptType": { + "type": "string", + "enum": [ + "visibility", + "sentiment" + ], + "title": "PromptType" + }, + "PromptTypeFilter": { "properties": { - "category_id": { - "type": "string", - "title": "Category Id" - }, - "start_date": { + "field": { "type": "string", - "title": "Start Date", - "description": "YYYY-MM-DD, ET, inclusive" + "const": "prompt_type", + "title": "Field" }, - "end_date": { + "operator": { "type": "string", - "title": "End Date", - "description": "YYYY-MM-DD, ET, inclusive" - }, - "group_by": { - "items": { - "type": "string", - "enum": [ - "page", - "date", - "model", - "topic", - "region", - "persona", - "prompt" - ] - }, - "type": "array", - "title": "Group By" + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" }, - "metrics": { + "value": { "anyOf": [ + { + "type": "string", + "enum": [ + "visibility", + "sentiment" + ] + }, { "items": { "type": "string", "enum": [ - "count", - "citation_share", - "rank", - "first_cited_at" + "visibility", + "sentiment" ] }, "type": "array" + } + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "PromptTypeFilter", + "description": "Filter by prompt type (visibility or sentiment).\n\n.. deprecated::\n Use :class:`AnalysisTypeFilter` instead. ``prompt_type`` is normalised\n to ``analysis_type`` at parse time." + }, + "PromptUpdatePreview": { + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "ID of the updated prompt." + }, + "prompt": { + "anyOf": [ + { + "$ref": "#/components/schemas/FieldDiff" }, { "type": "null" } ], - "title": "Metrics" + "description": "Prompt text diff." }, - "interval": { - "type": "string", - "enum": [ - "day", - "week", - "month" + "topic": { + "anyOf": [ + { + "$ref": "#/components/schemas/FieldDiff" + }, + { + "type": "null" + } ], - "title": "Interval", - "default": "day" + "description": "Topic diff." }, - "scope": { - "type": "string", - "enum": [ - "all", - "owned" + "language": { + "anyOf": [ + { + "$ref": "#/components/schemas/FieldDiff" + }, + { + "type": "null" + } ], - "title": "Scope", - "description": "`all` (every cited domain) or `owned` (only your owned domains, for easy client-side totals).", - "default": "all" + "description": "Language diff." }, - "filter": { + "tags": { "anyOf": [ { - "$ref": "#/components/schemas/FilterNode" + "$ref": "#/components/schemas/NamedResourceDiffList" }, { "type": "null" } - ] + ], + "description": "Tags added and removed." }, - "limit": { + "regions": { "anyOf": [ { - "type": "integer", - "maximum": 50, - "exclusiveMinimum": 0 + "$ref": "#/components/schemas/NamedResourceDiffList" }, { "type": "null" } ], - "title": "Limit", - "description": "Page size; default 10, max 50." + "description": "Regions added and removed." }, - "max_results": { + "platforms": { "anyOf": [ { - "type": "integer", - "exclusiveMinimum": 0 + "$ref": "#/components/schemas/NamedResourceDiffList" + }, + { + "type": "null" + } + ], + "description": "Platforms added and removed." + }, + "personas": { + "anyOf": [ + { + "$ref": "#/components/schemas/NamedResourceDiffList" + }, + { + "type": "null" + } + ], + "description": "Personas added and removed." + }, + "analysis_types": { + "anyOf": [ + { + "$ref": "#/components/schemas/FieldDiff" + }, + { + "type": "null" + } + ], + "description": "Analysis types diff." + }, + "asset": { + "anyOf": [ + { + "$ref": "#/components/schemas/FieldDiff" + }, + { + "type": "null" + } + ], + "description": "Asset diff." + } + }, + "type": "object", + "required": [ + "id" + ], + "title": "PromptUpdatePreview", + "description": "Preview of changes applied (or to be applied) to a single prompt. Only changed fields are included." + }, + "QueryFanoutRow": { + "properties": { + "date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Date" + }, + "model": { + "anyOf": [ + { + "type": "string" }, { "type": "null" } ], - "title": "Max Results", - "description": "Stream endpoint only: cap the number of streamed rows (default: all)." + "title": "Model" }, - "cursor": { + "region": { "anyOf": [ { "type": "string" @@ -9640,29 +20901,9 @@ "type": "null" } ], - "title": "Cursor" - } - }, - "additionalProperties": false, - "type": "object", - "required": [ - "category_id", - "start_date", - "end_date" - ], - "title": "CitationsV2Query" - }, - "ClaimBreakdownQuery": { - "properties": { - "start_date": { - "type": "string", - "title": "Start Date" - }, - "end_date": { - "type": "string", - "title": "End Date" + "title": "Region" }, - "comparison_start_date": { + "prompt": { "anyOf": [ { "type": "string" @@ -9671,9 +20912,9 @@ "type": "null" } ], - "title": "Comparison Start Date" + "title": "Prompt" }, - "comparison_end_date": { + "query": { "anyOf": [ { "type": "string" @@ -9682,315 +20923,426 @@ "type": "null" } ], - "title": "Comparison End Date" - }, - "category_id": { - "type": "string", - "format": "uuid", - "title": "Category Id" + "title": "Query" }, - "topic_ids": { + "total_fanouts": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "number" }, { "type": "null" } ], - "title": "Topic Ids" - }, - "exclude_topic_ids": { - "type": "boolean", - "title": "Exclude Topic Ids", - "default": false + "title": "Total Fanouts" }, - "tag_ids": { + "fanouts_per_execution": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "number" }, { "type": "null" } ], - "title": "Tag Ids" + "title": "Fanouts Per Execution" }, - "tag_filter_type": { - "type": "string", - "enum": [ - "all", - "any" + "share": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } ], - "title": "Tag Filter Type", - "default": "any" - }, - "include_no_tag": { - "type": "boolean", - "title": "Include No Tag", - "default": true + "title": "Share" }, - "region_ids": { + "query_variations": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "integer" }, { "type": "null" } ], - "title": "Region Ids" + "title": "Query Variations" }, - "platform_ids": { + "rank": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "integer" }, { "type": "null" } ], - "title": "Platform Ids" + "title": "Rank" + } + }, + "additionalProperties": true, + "type": "object", + "title": "QueryFanoutRow", + "description": "One row. Group dimensions are plain values (not `{id, name}`); metrics present depend on `metrics`." + }, + "QueryFanoutsQuery": { + "properties": { + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "description": "Date interval for the report. (only used with date dimension)", + "default": "day" }, - "persona_ids": { + "dimensions": { + "items": { + "type": "string", + "enum": [ + "prompt", + "query", + "model", + "region", + "date" + ] + }, + "type": "array", + "title": "Dimensions", + "description": "Dimensions to group the report by.", + "default": [] + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "fanouts_per_execution", + "total_fanouts", + "share", + "query_variations" + ] + }, + "type": "array", + "minItems": 1, + "title": "Metrics", + "description": "Metrics to return for each row." + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "propertyNames": { + "enum": [ + "fanouts_per_execution", + "total_fanouts", + "share", + "query_variations", + "date" + ] + }, + "type": "object", + "title": "Order By", + "description": "Custom ordering. Keys must be a requested metric or the ``date`` dimension. Values are ``asc`` or ``desc``. Defaults to first metric descending.", + "default": {}, + "examples": [ + { + "fanouts_per_execution": "desc" + } + ] + }, + "pagination": { + "$ref": "#/components/schemas/Pagination", + "description": "Pagination settings for the report results." + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/RegionNameFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/PromptIdFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + }, + { + "$ref": "#/components/schemas/AnalysisTypeFilter" + }, + { + "$ref": "#/components/schemas/PromptTypeFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "analysis_type": "#/components/schemas/AnalysisTypeFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "prompt_id": "#/components/schemas/PromptIdFilter", + "prompt_type": "#/components/schemas/PromptTypeFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "region_name": "#/components/schemas/RegionNameFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter" + } + } + }, + "type": "array", + "title": "Filters", + "description": "Filters to apply to the query fanout report." + } + }, + "type": "object", + "required": [ + "metrics", + "category_id", + "start_date", + "end_date" + ], + "title": "QueryFanoutsQuery" + }, + "QueryFanoutsV2Info": { + "properties": { + "total_results": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "integer" }, { "type": "null" } ], - "title": "Persona Ids" + "title": "Total Results", + "description": "Total rows matching the query before pagination (null when not computed)." }, - "include_no_persona": { - "type": "boolean", - "title": "Include No Persona", - "default": true + "count": { + "type": "integer", + "title": "Count", + "description": "Number of rows returned in `data` for this page." }, - "prompt_ids": { + "next_cursor": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Prompt Ids" + "title": "Next Cursor", + "description": "Opaque cursor for the next page; null on the last page." }, - "citation_categories": { + "models": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Models", + "description": "Display names of the models the report covers." + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "Echoed request start date (YYYY-MM-DD, ET)." + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "Echoed request end date (YYYY-MM-DD, ET)." + }, + "filter": { "anyOf": [ { - "items": { - "type": "string" - }, - "type": "array" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "title": "Citation Categories" + "title": "Filter", + "description": "Echoed normalized filter tree, or null when no filter was sent." }, - "cluster_id": { - "type": "string", - "format": "uuid", - "title": "Cluster Id" - } - }, - "type": "object", - "required": [ - "start_date", - "end_date", - "category_id", - "cluster_id" - ], - "title": "ClaimBreakdownQuery" - }, - "ClaimBreakdownResponse": { - "properties": { - "platform": { + "metrics": { "items": { - "$ref": "#/components/schemas/ClaimBreakdownRow" + "type": "string" }, "type": "array", - "title": "Platform" + "title": "Metrics", + "description": "Fanout metrics returned per row." }, - "prompt": { - "items": { - "$ref": "#/components/schemas/ClaimPromptBreakdownRow" - }, - "type": "array", - "title": "Prompt" + "coverage_note": { + "type": "string", + "title": "Coverage Note", + "description": "Caveat about which runs the fanout metrics cover." } }, + "additionalProperties": true, "type": "object", "required": [ - "platform", - "prompt" + "count", + "models", + "start_date", + "end_date", + "metrics", + "coverage_note" ], - "title": "ClaimBreakdownResponse" + "title": "QueryFanoutsV2Info" }, - "ClaimBreakdownRow": { + "QueryFanoutsV2Query": { "properties": { - "id": { + "category_id": { "type": "string", - "title": "Id" + "format": "uuid", + "title": "Category Id" }, - "label": { + "start_date": { "type": "string", - "title": "Label" - }, - "responseCount": { - "type": "integer", - "title": "Responsecount" + "title": "Start Date", + "description": "YYYY-MM-DD, ET, inclusive" }, - "totalResponseCount": { - "type": "integer", - "title": "Totalresponsecount" + "end_date": { + "type": "string", + "title": "End Date", + "description": "YYYY-MM-DD, ET, inclusive" }, - "responseShare": { - "type": "number", - "title": "Responseshare" + "group_by": { + "items": { + "type": "string", + "enum": [ + "date", + "model", + "region", + "prompt", + "query" + ] + }, + "type": "array", + "title": "Group By" }, - "responseShareDelta": { + "metrics": { "anyOf": [ { - "type": "number" + "items": { + "type": "string", + "enum": [ + "fanouts_per_execution", + "total_fanouts", + "share", + "query_variations" + ] + }, + "type": "array" }, { "type": "null" } ], - "title": "Responsesharedelta" - }, - "prevResponseCount": { - "type": "integer", - "title": "Prevresponsecount" - }, - "prevTotalResponseCount": { - "type": "integer", - "title": "Prevtotalresponsecount" - } - }, - "type": "object", - "required": [ - "id", - "label", - "responseCount", - "totalResponseCount", - "responseShare", - "prevResponseCount", - "prevTotalResponseCount" - ], - "title": "ClaimBreakdownRow" - }, - "ClaimCitationRow": { - "properties": { - "href": { - "type": "string", - "title": "Href" - }, - "hostname": { - "type": "string", - "title": "Hostname" - }, - "path": { - "type": "string", - "title": "Path" - }, - "citationCategory": { - "type": "string", - "title": "Citationcategory" - }, - "domainCategory": { - "type": "string", - "title": "Domaincategory" + "title": "Metrics" }, - "snippet": { + "interval": { "type": "string", - "title": "Snippet" + "enum": [ + "day", + "week", + "month" + ], + "title": "Interval", + "default": "day" }, - "citationCount": { - "type": "number", - "title": "Citationcount" + "filter": { + "anyOf": [ + { + "$ref": "#/components/schemas/FilterNode" + }, + { + "type": "null" + } + ] }, - "citationShare": { - "type": "number", - "title": "Citationshare" + "sort": { + "anyOf": [ + { + "$ref": "#/components/schemas/app__routes__v2__answer_engine_insights__reports__query_fanouts__SortSpec" + }, + { + "type": "null" + } + ] }, - "citationShareDelta": { + "limit": { "anyOf": [ { - "type": "number" + "type": "integer", + "maximum": 50, + "exclusiveMinimum": 0 }, { "type": "null" } ], - "title": "Citationsharedelta" - } - }, - "type": "object", - "required": [ - "href", - "hostname", - "path", - "citationCategory", - "domainCategory", - "snippet", - "citationCount", - "citationShare" - ], - "title": "ClaimCitationRow" - }, - "ClaimCitationsQuery": { - "properties": { - "start_date": { - "type": "string", - "title": "Start Date" - }, - "end_date": { - "type": "string", - "title": "End Date" + "title": "Limit", + "description": "Page size; default 10, max 50." }, - "comparison_start_date": { + "max_results": { "anyOf": [ { - "type": "string" + "type": "integer", + "exclusiveMinimum": 0 }, { "type": "null" } ], - "title": "Comparison Start Date" + "title": "Max Results", + "description": "Stream endpoint only: cap the number of streamed rows (default: all)." }, - "comparison_end_date": { + "cursor": { "anyOf": [ { "type": "string" @@ -9999,98 +21351,150 @@ "type": "null" } ], - "title": "Comparison End Date" + "title": "Cursor" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "QueryFanoutsV2Query" + }, + "QueryFanoutsV2Response": { + "properties": { + "info": { + "$ref": "#/components/schemas/QueryFanoutsV2Info" }, - "category_id": { + "data": { + "items": { + "$ref": "#/components/schemas/QueryFanoutRow" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "info", + "data" + ], + "title": "QueryFanoutsV2Response" + }, + "ReadDocumentResponse": { + "properties": { + "id": { "type": "string", "format": "uuid", - "title": "Category Id" + "title": "Id", + "description": "The document's ID." }, - "topic_ids": { + "name": { + "type": "string", + "title": "Name", + "description": "The document's title." + }, + "url": { + "type": "string", + "title": "Url", + "description": "Link to open the document in the Profound app." + }, + "visibility": { + "type": "string", + "enum": [ + "invited_only", + "organization" + ], + "title": "Visibility", + "description": "General access scope. New documents are `invited_only`." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At", + "description": "When the document was created." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Updated At", + "description": "When the document was last modified. Seeding the initial content counts, so a freshly created document is normally modified a moment after it was created." + }, + "owner_user_id": { + "type": "string", + "format": "uuid", + "title": "Owner User Id", + "description": "ID of the document's owner." + }, + "owner_email": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Topic Ids" + "title": "Owner Email", + "description": "Email of the document's owner. `null` when the owning profile has been deleted or could not be resolved." }, - "exclude_topic_ids": { - "type": "boolean", - "title": "Exclude Topic Ids", - "default": false + "author_type": { + "type": "string", + "enum": [ + "user", + "agent" + ], + "title": "Author Type", + "description": "Whether the document's owner is a person (`user`) or an agent (`agent`)." }, - "tag_ids": { + "app_delegate": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Tag Ids" - }, - "tag_filter_type": { - "type": "string", - "enum": [ - "all", - "any" - ], - "title": "Tag Filter Type", - "default": "any" + "title": "App Delegate", + "description": "Which integration created the document, derived server-side from the credential that authenticated the write. `null` for documents created outside any integration. An open-ended value, not a fixed set — known values today include `external-api` and `context-manager`, and more are added as new integrations ship." }, - "include_no_tag": { - "type": "boolean", - "title": "Include No Tag", - "default": true - }, - "region_ids": { + "category_name": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Region Ids" + "title": "Category Name", + "description": "Name of the brand category set on the document, if any. Paired with `company_name`; writable only on create." }, - "platform_ids": { + "company_name": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Platform Ids" + "title": "Company Name", + "description": "Name of the brand/company set on the document, if any. Paired with `category_name`; writable only on create." }, - "persona_ids": { + "content_markdown": { + "type": "string", + "title": "Content Markdown", + "description": "The default tab's body as markdown. Empty string for a document with no content — never absent, so you can read it without a presence check." + }, + "additional_tabs": { "anyOf": [ { "items": { - "type": "string", - "format": "uuid" + "$ref": "#/components/schemas/AdditionalTab" }, "type": "array" }, @@ -10098,19 +21502,14 @@ "type": "null" } ], - "title": "Persona Ids" - }, - "include_no_persona": { - "type": "boolean", - "title": "Include No Persona", - "default": true + "title": "Additional Tabs", + "description": "Every tab beyond the default one, in document order, each as `{title, content_markdown}`. Upstream allows up to twenty. Omitted from the response entirely when `include_tabs=false`; an empty list is a real answer meaning this document has no other tabs, and the two are never confused. Tabs are readable through this API but not writable: create cannot make one, and replacing this document's content does not preserve them." }, - "prompt_ids": { + "comments": { "anyOf": [ { "items": { - "type": "string", - "format": "uuid" + "$ref": "#/components/schemas/Comment" }, "type": "array" }, @@ -10118,339 +21517,699 @@ "type": "null" } ], - "title": "Prompt Ids" + "title": "Comments", + "description": "Review comments left on the document, each mapped to `{content, context}` — the comment's text and, if any, the text it was left on. Omitted from the response entirely when `include_comments=false`; an empty list is a real answer meaning this document has no comments. Mapped from upstream's own open, unvalidated shape — commenter identity, reply threads and resolution state are dropped, never relayed. A comment whose shape this mapping cannot read is dropped from the list rather than failing the read, so this list can be shorter than the document's real thread count." }, - "citation_categories": { + "version_hash": { "anyOf": [ { - "items": { - "type": "string" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Citation Categories" + "title": "Version Hash", + "description": "Opaque token that changes whenever the document's content changes, sampled before this body was read — so it names this body or an older state, never a newer one. `null` when the collaboration service could not be asked for it; the read itself still succeeded, only the token is missing. Bare hex, up to 128 characters, with no fixed prefix — treat it as opaque and do not parse it. It detects change; it is not a precondition, and a matching token is not licence to overwrite blindly. Omitted entirely — not `null` — on a `preview=true` read: a hash next to a body you have not fully seen invites replacing content you never read. Ask for `preview=false` before you intend to write." }, - "cluster_id": { + "content_truncated": { + "type": "boolean", + "title": "Content Truncated", + "description": "Whether any body in this response was cut short — `content_markdown` or any tab's. `true` only on a `preview=true` read where one of them exceeded the preview length; a short document, or a `preview=false` read, always gets `false` and every body whole. It does not say which one was cut. Preview truncation saves your context, not upstream cost — the full round trip through the collaborative editor happens either way.", + "default": false + } + }, + "type": "object", + "required": [ + "id", + "name", + "url", + "visibility", + "created_at", + "updated_at", + "owner_user_id", + "owner_email", + "author_type", + "app_delegate", + "category_name", + "company_name", + "content_markdown" + ], + "title": "ReadDocumentResponse", + "description": "A document's metadata, its default tab's body, its other tabs, its comments, and the\nchange-detection token for it." + }, + "Recommendation": { + "properties": { + "title": { "type": "string", - "format": "uuid", - "title": "Cluster Id" - }, - "limit": { - "type": "integer", - "minimum": 1, - "title": "Limit", - "default": 10 + "title": "Title" }, - "offset": { - "type": "integer", - "minimum": 0, - "title": "Offset", - "default": 0 + "status": { + "$ref": "#/components/schemas/RecommendationStatus" }, - "search_query": { + "impact": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/RecommendationImpact" }, { "type": "null" } - ], - "title": "Search Query" + ] }, - "sort_order": { + "suggestion": { + "$ref": "#/components/schemas/RecommendationSuggestion" + } + }, + "type": "object", + "required": [ + "title", + "status", + "impact", + "suggestion" + ], + "title": "Recommendation" + }, + "RecommendationImpact": { + "properties": { + "section": { "type": "string", - "enum": [ - "asc", - "desc" - ], - "title": "Sort Order", - "default": "desc" + "title": "Section" + }, + "score": { + "type": "number", + "title": "Score" } }, "type": "object", "required": [ - "start_date", - "end_date", - "category_id", - "cluster_id" + "section", + "score" ], - "title": "ClaimCitationsQuery" + "title": "RecommendationImpact" }, - "ClaimCitationsResponse": { + "RecommendationStatus": { + "type": "string", + "enum": [ + "done", + "pending" + ], + "title": "RecommendationStatus" + }, + "RecommendationSuggestion": { "properties": { - "data": { - "items": { - "$ref": "#/components/schemas/ClaimCitationRow" - }, - "type": "array", - "title": "Data" + "text": { + "type": "string", + "title": "Text" + }, + "rationale": { + "type": "string", + "title": "Rationale" + } + }, + "type": "object", + "required": [ + "text", + "rationale" + ], + "title": "RecommendationSuggestion" + }, + "ReferralSourceFilter": { + "properties": { + "field": { + "type": "string", + "const": "referral_source", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" }, - "totalCount": { - "type": "integer", - "title": "Totalcount" + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" } }, "type": "object", "required": [ - "data", - "totalCount" + "field", + "operator", + "value" ], - "title": "ClaimCitationsResponse" + "title": "ReferralSourceFilter", + "description": "Filter by referral source. Values are not enum-constrained so the platform's shared\nprovider filter can pass through IDs that have bot data but no referral data." }, - "ClaimPromptBreakdownRow": { + "ReferralTypeFilter": { "properties": { - "id": { + "field": { "type": "string", - "title": "Id" + "const": "referral_type", + "title": "Field" }, - "label": { + "operator": { "type": "string", - "title": "Label" - }, - "responseCount": { - "type": "integer", - "title": "Responsecount" - }, - "totalResponseCount": { - "type": "integer", - "title": "Totalresponsecount" - }, - "responseShare": { - "type": "number", - "title": "Responseshare" + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" }, - "responseShareDelta": { + "value": { "anyOf": [ { - "type": "number" + "type": "string", + "enum": [ + "internal", + "referer", + "utm", + "none" + ] }, { - "type": "null" + "items": { + "type": "string", + "enum": [ + "internal", + "referer", + "utm", + "none" + ] + }, + "type": "array" } ], - "title": "Responsesharedelta" - }, - "prevResponseCount": { - "type": "integer", - "title": "Prevresponsecount" - }, - "prevTotalResponseCount": { - "type": "integer", - "title": "Prevtotalresponsecount" - }, - "promptId": { - "type": "string", - "title": "Promptid" - }, - "promptText": { - "type": "string", - "title": "Prompttext" - }, - "topicId": { - "type": "string", - "title": "Topicid" - }, - "hasCurrent": { - "type": "boolean", - "title": "Hascurrent" + "title": "Value" } }, "type": "object", "required": [ - "id", - "label", - "responseCount", - "totalResponseCount", - "responseShare", - "prevResponseCount", - "prevTotalResponseCount", - "promptId", - "promptText", - "topicId", - "hasCurrent" + "field", + "operator", + "value" ], - "title": "ClaimPromptBreakdownRow" + "title": "ReferralTypeFilter", + "description": "Filter by referral type" }, - "ClusterExampleRun": { + "ReferralsQuery": { "properties": { - "runId": { + "date_interval": { "type": "string", - "title": "Runid" + "enum": [ + "hour", + "day", + "week", + "month", + "year", + "relative_week" + ], + "title": "Date Interval", + "description": "Date interval for the report. (only used with date dimension)", + "default": "day" }, - "claim": { - "type": "string", - "title": "Claim" + "dimensions": { + "items": { + "type": "string", + "enum": [ + "date", + "host", + "path", + "referral_source" + ] + }, + "type": "array", + "title": "Dimensions", + "description": "Dimensions to group the report by.", + "default": [] }, - "responseSnippet": { - "type": "string", - "title": "Responsesnippet" + "metrics": { + "items": { + "type": "string", + "enum": [ + "visits", + "last_visit" + ] + }, + "type": "array", + "title": "Metrics" }, - "modelId": { + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "propertyNames": { + "enum": [ + "date", + "host", + "path", + "referral_source", + "visits", + "last_visit" + ] + }, + "type": "object", + "title": "Order By", + "description": "\nCustom ordering of the report results.\n\nThe order is a record of key-value pairs where:\n- key is the field to order by, which can be a metric or dimension\n- value is the direction of the order, either 'asc' for ascending or 'desc' for descending.\n\nWhen not specified, the default order is the first metric in the query descending.\n ", + "default": {}, + "examples": [ + { + "date": "asc" + } + ] + }, + "pagination": { + "$ref": "#/components/schemas/Pagination", + "description": "Pagination settings for the report results." + }, + "domain": { "type": "string", - "title": "Modelid" + "title": "Domain", + "description": "Domain to query logs for." }, - "regionId": { + "start_date": { "type": "string", - "title": "Regionid" + "format": "date-time", + "title": "Start Date", + "description": "Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp." }, - "createdAt": { + "end_date": { "type": "string", - "title": "Createdat" + "format": "date-time", + "title": "End Date", + "description": "End date for logs. Accepts same formats as start_date. Defaults to now if omitted." + }, + "organization_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Organization Id" + }, + "metric_filters": { + "items": { + "$ref": "#/components/schemas/NumericMetricFilter" + }, + "type": "array", + "title": "Metric Filters", + "description": "Numeric filters applied after report metrics are calculated." + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/PathFilter" + }, + { + "$ref": "#/components/schemas/ReferralSourceFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "path": "#/components/schemas/PathFilter", + "referral_source": "#/components/schemas/ReferralSourceFilter" + } + } + }, + "type": "array", + "title": "Filters", + "description": "Filters for referrals report." } }, "type": "object", "required": [ - "runId", - "claim", - "responseSnippet", - "modelId", - "regionId", - "createdAt" + "metrics", + "domain", + "start_date" ], - "title": "ClusterExampleRun" + "title": "ReferralsQuery" }, - "ClusterExampleRunsQuery": { + "ReferralsQueryV2": { "properties": { - "category_id": { + "date_interval": { "type": "string", - "format": "uuid", - "title": "Category Id" + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "description": "Date interval for the report. (only used with date dimension)", + "default": "day" }, - "cluster_id": { + "dimensions": { + "items": { + "type": "string", + "enum": [ + "date", + "hour", + "host", + "path", + "referral_source", + "referral_type" + ] + }, + "type": "array", + "title": "Dimensions", + "description": "Dimensions to group the report by.", + "default": [] + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "visits", + "last_visit" + ] + }, + "type": "array", + "title": "Metrics" + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "propertyNames": { + "enum": [ + "date", + "hour", + "host", + "path", + "referral_source", + "visits", + "last_visit", + "referral_type" + ] + }, + "type": "object", + "title": "Order By", + "description": "\nCustom ordering of the report results.\n\nThe order is a record of key-value pairs where:\n- key is the field to order by, which can be a metric or dimension\n- value is the direction of the order, either 'asc' for ascending or 'desc' for descending.\n\nWhen not specified, the default order is the first metric in the query descending.\n ", + "default": {}, + "examples": [ + { + "date": "asc" + } + ] + }, + "pagination": { + "$ref": "#/components/schemas/Pagination", + "description": "Pagination settings for the report results." + }, + "domain": { "type": "string", - "format": "uuid", - "title": "Cluster Id" + "title": "Domain", + "description": "Domain to query logs for." }, "start_date": { "type": "string", - "title": "Start Date" + "format": "date-time", + "title": "Start Date", + "description": "Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp." }, "end_date": { "type": "string", - "title": "End Date" + "format": "date-time", + "title": "End Date", + "description": "End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted." }, - "limit": { - "type": "integer", - "minimum": 1, - "title": "Limit", - "default": 20 + "organization_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Organization Id" }, - "offset": { - "type": "integer", - "minimum": 0, - "title": "Offset", - "default": 0 + "timezone": { + "type": "string", + "title": "Timezone", + "description": "IANA timezone name for date bucketing and filter boundaries.", + "default": "UTC" + }, + "metric_filters": { + "items": { + "$ref": "#/components/schemas/NumericMetricFilter" + }, + "type": "array", + "title": "Metric Filters", + "description": "Numeric filters applied after report metrics are calculated." + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/PathFilter" + }, + { + "$ref": "#/components/schemas/ReferralSourceFilter" + }, + { + "$ref": "#/components/schemas/ReferralTypeFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "path": "#/components/schemas/PathFilter", + "referral_source": "#/components/schemas/ReferralSourceFilter", + "referral_type": "#/components/schemas/ReferralTypeFilter" + } + } + }, + "type": "array", + "title": "Filters", + "description": "Filters for referrals report." } }, "type": "object", "required": [ - "category_id", - "cluster_id", - "start_date", - "end_date" + "metrics", + "domain", + "start_date" ], - "title": "ClusterExampleRunsQuery" + "title": "ReferralsQueryV2" }, - "ClusterExampleRunsResponse": { + "RegionIdFilter": { "properties": { - "data": { - "items": { - "$ref": "#/components/schemas/ClusterExampleRun" - }, - "type": "array", - "title": "Data" + "field": { + "anyOf": [ + { + "type": "string", + "const": "region_id" + }, + { + "type": "string", + "const": "region", + "deprecated": true + } + ], + "title": "Field" }, - "totalCount": { - "type": "integer", - "title": "Totalcount" + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + } + ], + "title": "Value" } }, "type": "object", "required": [ - "data", - "totalCount" + "field", + "operator", + "value" ], - "title": "ClusterExampleRunsResponse" + "title": "RegionIdFilter", + "description": "Filter by region UUID." }, - "ClusterVerificationPair": { + "RegionNameFilter": { "properties": { - "pairId": { - "type": "string", - "title": "Pairid" - }, - "snippetIdx": { - "type": "integer", - "title": "Snippetidx" - }, - "kbPath": { - "type": "string", - "title": "Kbpath" - }, - "quote": { + "field": { "type": "string", - "title": "Quote" + "const": "region_name", + "title": "Field" }, - "reasoning": { + "operator": { "type": "string", - "title": "Reasoning" + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" }, - "sourceUpdatedAt": { + "value": { "anyOf": [ { "type": "string" }, { - "type": "null" + "items": { + "type": "string" + }, + "type": "array" } ], - "title": "Sourceupdatedat" + "title": "Value" } }, "type": "object", "required": [ - "pairId", - "snippetIdx", - "kbPath", - "quote", - "reasoning" + "field", + "operator", + "value" ], - "title": "ClusterVerificationPair" + "title": "RegionNameFilter", + "description": "Filter by region name." }, - "ClusterVerificationPairsQuery": { + "ReplaceDocumentContentRequest": { "properties": { - "category_id": { + "organization_id": { "type": "string", "format": "uuid", - "title": "Category Id" + "title": "Organization Id", + "description": "ID of the organization that owns the document. Required — Profound API keys are user-scoped, so the owning organization must be chosen explicitly. The caller must be a member of this organization." }, - "cluster_id": { + "content_markdown": { "type": "string", - "format": "uuid", - "title": "Cluster Id" + "title": "Content Markdown", + "description": "New markdown body for the document, replacing everything it held before. An empty string is valid and clears the document — nothing else warns you before that happens, so treat sending one as deliberate. Whole-body replace only: send the complete new text, not just the part that changed. Capped at 1,000,000 bytes; the upstream router separately caps the entire request at 2 MiB, so a body near this cap can still be refused in transit rather than by this field." + }, + "skip_title_sync": { + "type": "boolean", + "title": "Skip Title Sync", + "description": "Off by default, matching the Profound app: the document's title follows the new content's first heading, so a replace silently renames the document whenever that heading differs from the current title. Set true to keep the current title regardless of what the new content's first heading says.", + "default": false } }, + "additionalProperties": false, "type": "object", "required": [ - "category_id", - "cluster_id" + "organization_id", + "content_markdown" ], - "title": "ClusterVerificationPairsQuery" + "title": "ReplaceDocumentContentRequest", + "description": "Request body for replacing a document's entire content." }, - "ClusterVerificationPairsResponse": { + "ReplaceDocumentContentResponse": { "properties": { - "data": { - "items": { - "$ref": "#/components/schemas/ClusterVerificationPair" - }, - "type": "array", - "title": "Data" + "id": { + "type": "string", + "format": "uuid", + "title": "Id", + "description": "The document's ID." }, - "clusterReasoning": { + "name": { + "type": "string", + "title": "Name", + "description": "The document's title." + }, + "url": { + "type": "string", + "title": "Url", + "description": "Link to open the document in the Profound app." + }, + "visibility": { + "type": "string", + "enum": [ + "invited_only", + "organization" + ], + "title": "Visibility", + "description": "General access scope. New documents are `invited_only`." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At", + "description": "When the document was created." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Updated At", + "description": "When the document was last modified. Seeding the initial content counts, so a freshly created document is normally modified a moment after it was created." + }, + "owner_user_id": { + "type": "string", + "format": "uuid", + "title": "Owner User Id", + "description": "ID of the document's owner." + }, + "owner_email": { "anyOf": [ { "type": "string" @@ -10459,79 +22218,43 @@ "type": "null" } ], - "title": "Clusterreasoning" - } - }, - "type": "object", - "required": [ - "data" - ], - "title": "ClusterVerificationPairsResponse" - }, - "ContentAnalysis": { - "properties": { - "content": { - "$ref": "#/components/schemas/DocumentContent" + "title": "Owner Email", + "description": "Email of the document's owner. `null` when the owning profile has been deleted or could not be resolved." }, - "aeo_content_score": { + "author_type": { + "type": "string", + "enum": [ + "user", + "agent" + ], + "title": "Author Type", + "description": "Whether the document's owner is a person (`user`) or an agent (`agent`)." + }, + "app_delegate": { "anyOf": [ { - "$ref": "#/components/schemas/AEOScore" + "type": "string" }, { "type": "null" } - ] - }, - "analysis": { - "$ref": "#/components/schemas/AnalysisSummary" - }, - "recommendations": { - "items": { - "$ref": "#/components/schemas/Recommendation" - }, - "type": "array", - "title": "Recommendations" - }, - "inputs": { - "$ref": "#/components/schemas/AnalysisInputs" - } - }, - "type": "object", - "required": [ - "content", - "aeo_content_score", - "analysis", - "recommendations", - "inputs" - ], - "title": "ContentAnalysis" - }, - "ContentFormat": { - "type": "string", - "enum": [ - "markdown", - "html" - ], - "title": "ContentFormat" - }, - "ContentOptimization": { - "properties": { - "id": { - "type": "string", - "format": "uuid", - "title": "Id" - }, - "title": { - "type": "string", - "title": "Title" + ], + "title": "App Delegate", + "description": "Which integration created the document, derived server-side from the credential that authenticated the write. `null` for documents created outside any integration. An open-ended value, not a fixed set — known values today include `external-api` and `context-manager`, and more are added as new integrations ship." }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Created At" + "category_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Category Name", + "description": "Name of the brand category set on the document, if any. Paired with `company_name`; writable only on create." }, - "extracted_input": { + "company_name": { "anyOf": [ { "type": "string" @@ -10540,47 +22263,55 @@ "type": "null" } ], - "title": "Extracted Input" + "title": "Company Name", + "description": "Name of the brand/company set on the document, if any. Paired with `category_name`; writable only on create." }, - "type": { - "$ref": "#/components/schemas/ContentType" + "version_hash": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Version Hash", + "description": "Opaque token that changes whenever the document's collaborative-editing snapshot changes — a digest over that snapshot, not over the markdown. It moves on a comment reply, because a comment changes the snapshot, and it does not move on a rename, because metadata sits outside the snapshot. Bare hex, up to 128 characters, with no fixed prefix — treat it as opaque and do not parse it. `null` when no token could be minted; never omitted. It is a change detector, not a precondition: a caller must not treat a matching token as licence to overwrite blindly, because it names the room at a moment cortex observed and not the moment its own write lands." }, - "status": { - "type": "string", - "title": "Status" + "content_chars": { + "type": "integer", + "title": "Content Chars", + "description": "Character count of the markdown that landed — 0 when this call cleared the document. The only confirmation of how much was written, on the most destructive operation this surface exposes." } }, "type": "object", "required": [ "id", - "title", + "name", + "url", + "visibility", "created_at", - "extracted_input", - "type", - "status" - ], - "title": "ContentOptimization" - }, - "ContentOptimizationAnalysisResponse": { - "properties": { - "data": { - "$ref": "#/components/schemas/ContentAnalysis" - } - }, - "type": "object", - "required": [ - "data" - ], - "title": "ContentOptimizationAnalysisResponse" + "updated_at", + "owner_user_id", + "owner_email", + "author_type", + "app_delegate", + "category_name", + "company_name", + "version_hash", + "content_chars" + ], + "title": "ReplaceDocumentContentResponse", + "description": "The document after its content was replaced, plus the change-detection token and how much landed." }, - "ContentOptimizationResponse": { + "Response": { "properties": { "info": { - "$ref": "#/components/schemas/ContentOptimizationResponseInfo" + "$ref": "#/components/schemas/Info" }, "data": { "items": { - "$ref": "#/components/schemas/ContentOptimization" + "$ref": "#/components/schemas/Result" }, "type": "array", "title": "Data" @@ -10591,359 +22322,478 @@ "info", "data" ], - "title": "ContentOptimizationResponse" + "title": "Response", + "description": "Base response model for reports." }, - "ContentOptimizationResponseInfo": { + "Result": { "properties": { - "total_rows": { - "type": "integer", - "title": "Total Rows" + "metrics": { + "items": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "type": "array", + "title": "Metrics" }, - "query": { - "$ref": "#/components/schemas/OptimizationQuery" + "dimensions": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "type": "array", + "title": "Dimensions" } }, "type": "object", "required": [ - "total_rows", - "query" - ], - "title": "ContentOptimizationResponseInfo" - }, - "ContentType": { - "type": "string", - "enum": [ - "file", - "text", - "url" + "metrics", + "dimensions" ], - "title": "ContentType" + "title": "Result", + "description": "Base model for report results." }, - "CreateAgentRequest": { + "RootDomainFilter": { "properties": { - "organization_id": { + "field": { "type": "string", - "format": "uuid", - "title": "Organization Id", - "description": "ID of the organization that will own the agent. Required — Profound API keys are user-scoped, so the owning organization must be chosen explicitly. The caller must be a member of this organization." + "const": "root_domain", + "title": "Field" }, - "name": { + "operator": { "type": "string", - "minLength": 1, - "title": "Name", - "description": "Display name for the agent. Must be non-empty." - }, - "description": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" ], - "title": "Description", - "description": "Short description of the agent." + "title": "Operator" }, - "graph": { + "value": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "type": "string" }, { - "type": "null" + "items": { + "type": "string" + }, + "type": "array" } ], - "title": "Graph", - "description": "Initial workflow graph for the agent's draft version. Optional — an agent can be created empty and have its graph filled in later." + "title": "Value" } }, - "additionalProperties": false, "type": "object", "required": [ - "organization_id", - "name" + "field", + "operator", + "value" ], - "title": "CreateAgentRequest", - "description": "Request body for creating a draft agent." + "title": "RootDomainFilter", + "description": "Filter by root domain" }, - "CreatePromptInput": { + "RunAgentRequest": { + "properties": { + "inputs": { + "additionalProperties": true, + "type": "object", + "title": "Inputs", + "description": "Input values for the run. Keys should match the property names defined in `schema.input`. Omit the request body when the agent does not require inputs." + } + }, + "additionalProperties": false, + "type": "object", + "title": "RunAgentRequest", + "description": "Request body for starting an agent run." + }, + "SearchKnowledgeBaseFilters": { "properties": { - "prompt": { - "type": "string", - "minLength": 1, - "title": "Prompt", - "description": "The prompt text to be sent to AI platforms." - }, - "topic": { - "$ref": "#/components/schemas/IdOrName", - "description": "Topic to assign. A new topic is created if the name doesn't exist." - }, - "language": { - "type": "string", - "title": "Language", - "description": "Language code (e.g. 'en-US')" - }, "tags": { - "items": { - "$ref": "#/components/schemas/IdOrName" - }, - "type": "array", - "title": "Tags", - "description": "Tags to assign. New tags are created if names don't exist.", - "default": [] - }, - "regions": { - "items": { - "$ref": "#/components/schemas/IdOrName" - }, - "type": "array", - "minItems": 1, - "title": "Regions", - "description": "Regions where the prompt will be collected." - }, - "platforms": { - "items": { - "$ref": "#/components/schemas/IdOrName" - }, - "type": "array", - "minItems": 1, - "title": "Platforms", - "description": "AI platforms where the prompt will be collected." - }, - "personas": { - "items": { - "$ref": "#/components/schemas/IdOrName" - }, - "type": "array", - "title": "Personas", - "description": "Personas to use when collecting. Omit for default (no persona).", - "default": [] - }, - "analysis_types": { "anyOf": [ { "items": { "type": "string", - "enum": [ - "visibility", - "sentiment", - "sentiment_v2", - "accuracy" - ] + "minLength": 1 }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Analysis Types", - "description": "Analysis types: 'visibility', 'sentiment', 'accuracy'. Defaults to ['visibility']." - }, - "prompt_type": { - "anyOf": [ - { - "type": "string" + "type": "array", + "minItems": 1 }, { "type": "null" } ], - "title": "Prompt Type", - "description": "Deprecated. Use analysis_types instead. 'Visibility' or 'Sentiment'.", - "deprecated": true + "title": "Tags", + "description": "Optional tags to match. Documents with any matching tag are included." }, - "asset": { + "folders": { "anyOf": [ { - "$ref": "#/components/schemas/IdOrName" + "items": { + "type": "string", + "minLength": 1 + }, + "type": "array", + "maxItems": 1, + "minItems": 1 }, { "type": "null" } ], - "description": "Required for Sentiment prompts. The brand asset to evaluate." - } - }, - "type": "object", - "required": [ - "prompt", - "topic", - "language", - "regions", - "platforms" - ], - "title": "CreatePromptInput", - "description": "A single prompt to create within a category." - }, - "CreatePromptsBody": { - "properties": { - "prompts": { - "items": { - "$ref": "#/components/schemas/CreatePromptInput" - }, - "type": "array", - "title": "Prompts", - "description": "List of prompts to create." - }, - "dry_run": { - "type": "boolean", - "title": "Dry Run", - "description": "When true, validate and preview changes without persisting them.", - "default": false + "title": "Folders", + "description": "Optional folder paths to search within. Currently limited to one folder." } }, + "additionalProperties": false, "type": "object", - "required": [ - "prompts" - ], - "title": "CreatePromptsBody" + "title": "SearchKnowledgeBaseFilters" }, - "CreatePromptsResponse": { + "SearchKnowledgeBaseRequest": { "properties": { - "dry_run": { - "type": "boolean", - "title": "Dry Run", - "description": "Whether this was a dry run (no changes persisted)." - }, - "created": { - "type": "integer", - "title": "Created", - "description": "Number of prompts created.", - "default": 0 + "query": { + "type": "string", + "minLength": 1, + "title": "Query", + "description": "Search query." }, - "topics_created": { + "top_k": { "type": "integer", - "title": "Topics Created", - "description": "Number of new topics created.", - "default": 0 + "maximum": 100, + "minimum": 1, + "title": "Top K", + "description": "Maximum number of results to return." }, - "tags_created": { - "type": "integer", - "title": "Tags Created", - "description": "Number of new tags created.", - "default": 0 + "return_full_page": { + "type": "boolean", + "title": "Return Full Page", + "description": "Return full page content instead of snippets.", + "default": false }, - "prompts": { - "items": { - "$ref": "#/components/schemas/PromptPreview" - }, - "type": "array", - "title": "Prompts", - "description": "List of created (or previewed) prompts with resolved references.", - "default": [] + "filters": { + "anyOf": [ + { + "$ref": "#/components/schemas/SearchKnowledgeBaseFilters" + }, + { + "type": "null" + } + ], + "description": "Optional search filters." } }, + "additionalProperties": false, "type": "object", "required": [ - "dry_run" + "query", + "top_k" ], - "title": "CreatePromptsResponse", - "description": "Response from creating prompts." + "title": "SearchKnowledgeBaseRequest" }, - "CursorPagination": { + "SearchQueryFilter": { "properties": { - "limit": { - "type": "integer", - "maximum": 50000, - "exclusiveMinimum": 0, - "title": "Limit", - "description": "Maximum number of results to return. Default is 10,000, maximum is 50,000.", - "default": 10000 + "field": { + "type": "string", + "const": "search_query", + "title": "Field" }, - "next_cursor": { + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { "anyOf": [ { "type": "string" }, { - "type": "null" + "items": { + "type": "string" + }, + "type": "array" } ], - "title": "Next Cursor", - "description": "Token for the next page, if more results are available." + "title": "Value" } }, - "additionalProperties": false, "type": "object", - "title": "CursorPagination", - "description": "Cursor-based pagination metadata." + "required": [ + "field", + "operator", + "value" + ], + "title": "SearchQueryFilter", + "description": "Filter by web-search query string." }, - "DeleteDocumentRequest": { + "SentimentMetrics": { "properties": { - "name": { - "type": "string", - "minLength": 1, - "title": "Name", - "description": "Document path to delete." + "positive_sentiment": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Positive Sentiment" + }, + "negative_sentiment": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Negative Sentiment" + }, + "occurrence": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Occurrence" } }, - "additionalProperties": false, + "additionalProperties": true, "type": "object", - "required": [ - "name" - ], - "title": "DeleteDocumentRequest" + "title": "SentimentMetrics" }, - "DeleteFolderRequest": { + "SentimentPeriodScores": { "properties": { - "path": { - "type": "string", - "minLength": 1, - "title": "Path", - "description": "Folder path to delete." + "current": { + "anyOf": [ + { + "$ref": "#/components/schemas/SentimentScores" + }, + { + "type": "null" + } + ] }, - "recursive": { - "type": "boolean", - "title": "Recursive", - "description": "When false, only empty folders are deleted and non-empty folders return a conflict. When true, the folder and all contents are deleted.", - "default": false + "previous": { + "anyOf": [ + { + "$ref": "#/components/schemas/SentimentScores" + }, + { + "type": "null" + } + ] } }, - "additionalProperties": false, "type": "object", - "required": [ - "path" - ], - "title": "DeleteFolderRequest" + "title": "SentimentPeriodScores" }, - "DocumentContent": { + "SentimentQuery": { "properties": { - "format": { - "$ref": "#/components/schemas/ContentFormat" + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "description": "Date interval for the report. (only used with date dimension)", + "default": "day" }, - "value": { + "dimensions": { + "items": { + "type": "string", + "enum": [ + "theme", + "date", + "region", + "topic", + "topic_id", + "model", + "asset_id", + "asset_name", + "tag", + "prompt", + "prompt_id", + "sentiment_type", + "persona" + ] + }, + "type": "array", + "title": "Dimensions", + "description": "Dimensions to group the report by.", + "default": [] + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "positive", + "negative", + "occurrences" + ] + }, + "type": "array", + "title": "Metrics" + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By", + "description": "\nCustom ordering of the report results.\n\nThe order is a record of key-value pairs where:\n- key is the field to order by, which can be a metric or dimension\n- value is the direction of the order, either 'asc' for ascending or 'desc' for descending.\n\nWhen not specified, the default order is the first metric in the query descending.\n ", + "default": {}, + "examples": [ + { + "date": "asc" + } + ] + }, + "pagination": { + "$ref": "#/components/schemas/Pagination", + "description": "Pagination settings for the report results." + }, + "category_id": { "type": "string", - "title": "Value" + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/AssetIdFilter" + }, + { + "$ref": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter" + }, + { + "$ref": "#/components/schemas/ThemeFilter" + }, + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/RegionNameFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/TopicNameFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/TagNameFilter" + }, + { + "$ref": "#/components/schemas/PromptFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_id": "#/components/schemas/AssetIdFilter", + "asset_name": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "prompt": "#/components/schemas/PromptFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "region_name": "#/components/schemas/RegionNameFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "tag_name": "#/components/schemas/TagNameFilter", + "theme": "#/components/schemas/ThemeFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter", + "topic_name": "#/components/schemas/TopicNameFilter" + } + } + }, + "type": "array", + "title": "Filters", + "description": "List of filters to apply to the sentiment report." } }, "type": "object", "required": [ - "format", - "value" + "metrics", + "category_id", + "start_date", + "end_date" ], - "title": "DocumentContent" + "title": "SentimentQuery" }, - "DocumentOperationResponse": { + "SentimentRow": { "properties": { - "message": { - "type": "string", - "title": "Message", - "description": "Operation result message." - }, - "name": { - "type": "string", - "title": "Name", - "description": "Document name." - }, - "path": { - "type": "string", - "title": "Path", - "description": "Document path." - }, - "folder": { + "date": { "anyOf": [ { "type": "string" @@ -10952,260 +22802,153 @@ "type": "null" } ], - "title": "Folder", - "description": "Document folder path." - } - }, - "additionalProperties": false, - "type": "object", - "required": [ - "message", - "name", - "path" - ], - "title": "DocumentOperationResponse" - }, - "DomainWithOrganization": { - "properties": { - "created_at": { - "type": "string", - "format": "date-time", - "title": "Created At" - }, - "id": { - "type": "string", - "format": "uuid", - "title": "Id" - }, - "name": { - "type": "string", - "title": "Name" - }, - "organization": { - "$ref": "#/components/schemas/Organization" - } - }, - "type": "object", - "required": [ - "created_at", - "id", - "name", - "organization" - ], - "title": "DomainWithOrganization", - "description": "A domain paired with the organization edge it belongs to." - }, - "EnabledFieldsResponse": { - "properties": { - "run_id": { - "type": "boolean", - "title": "Run Id", - "default": false - }, - "created_at": { - "type": "boolean", - "title": "Created At", - "default": true - }, - "prompt": { - "type": "boolean", - "title": "Prompt", - "default": true - }, - "prompt_id": { - "type": "boolean", - "title": "Prompt Id", - "default": false - }, - "mentions": { - "type": "boolean", - "title": "Mentions", - "default": true - }, - "analysis_types": { - "type": "boolean", - "title": "Analysis Types", - "default": false - }, - "prompt_type": { - "type": "boolean", - "title": "Prompt Type", - "default": true, - "deprecated": true - }, - "response": { - "type": "boolean", - "title": "Response", - "default": true - }, - "citations": { - "type": "boolean", - "title": "Citations", - "default": true - }, - "citation_details": { - "type": "boolean", - "title": "Citation Details", - "default": false - }, - "web_search_results": { - "type": "boolean", - "title": "Web Search Results", - "default": false - }, - "search_triggered": { - "type": "boolean", - "title": "Search Triggered", - "default": false - }, - "themes": { - "type": "boolean", - "title": "Themes", - "description": "Use 'sentiment_themes' instead", - "default": true, - "deprecated": true + "title": "Date" }, - "sentiment_themes": { - "type": "boolean", - "title": "Sentiment Themes", - "description": "Uses legacy sentiment data.", - "default": false + "model": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] }, "topic": { - "type": "boolean", - "title": "Topic", - "default": true - }, - "topic_id": { - "type": "boolean", - "title": "Topic Id", - "default": false + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] }, "region": { - "type": "boolean", - "title": "Region", - "default": true + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] }, - "model": { - "type": "boolean", - "title": "Model", - "default": true + "prompt": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] }, - "model_id": { - "type": "boolean", - "title": "Model Id", - "default": true + "persona": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] }, - "asset": { - "type": "boolean", - "title": "Asset", - "default": true + "tag": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "theme": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] }, - "asset_id": { - "type": "boolean", - "title": "Asset Id", - "default": false + "claim": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] }, - "tags": { - "type": "boolean", - "title": "Tags", - "default": false + "run": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] }, - "search_queries": { - "type": "boolean", - "title": "Search Queries", - "default": false + "competitor": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] }, - "persona": { - "type": "boolean", - "title": "Persona", - "default": false - } - }, - "type": "object", - "title": "EnabledFieldsResponse" - }, - "EntityFilterClause": { - "properties": { - "op": { - "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" + "positive_sentiment": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } ], - "title": "Op" + "title": "Positive Sentiment" }, - "value": { + "negative_sentiment": { "anyOf": [ { - "type": "string" + "type": "number" }, { - "items": { - "type": "string" - }, - "type": "array" + "type": "null" } ], - "title": "Value" - } - }, - "additionalProperties": false, - "type": "object", - "required": [ - "op", - "value" - ], - "title": "EntityFilterClause", - "description": "Select/exclude the entity, applied outside the data `filter` tree." - }, - "FactCheckSetupStatusQuery": { - "properties": { - "category_id": { - "type": "string", - "format": "uuid", - "title": "Category Id" - } - }, - "type": "object", - "required": [ - "category_id" - ], - "title": "FactCheckSetupStatusQuery" - }, - "FactCheckSetupStatusResponse": { - "properties": { - "activeAccuracyPromptCount": { - "type": "integer", - "title": "Activeaccuracypromptcount" - }, - "hasVerificationData": { - "type": "boolean", - "title": "Hasverificationdata" + "title": "Negative Sentiment" }, - "isSetupComplete": { - "type": "boolean", - "title": "Issetupcomplete" + "occurrence": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Occurrence" }, - "setupCreatedAt": { + "previous": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/SentimentMetrics" }, { "type": "null" } ], - "title": "Setupcreatedat" + "description": "Comparison-window metrics (when requested)." }, - "setupKnowledgeBaseId": { + "prev_date": { "anyOf": [ { "type": "string" @@ -11214,39 +22957,13 @@ "type": "null" } ], - "title": "Setupknowledgebaseid" - } - }, - "type": "object", - "required": [ - "activeAccuracyPromptCount", - "hasVerificationData", - "isSetupComplete" - ], - "title": "FactCheckSetupStatusResponse" - }, - "FieldDiff": { - "properties": { - "old": { - "title": "Old", - "description": "Previous value." + "title": "Prev Date" }, - "new": { - "title": "New", - "description": "New value." - } - }, - "type": "object", - "title": "FieldDiff", - "description": "Shows the old and new value for a changed field." - }, - "FilterNode": { - "properties": { - "and": { + "cited_websites": { "anyOf": [ { "items": { - "$ref": "#/components/schemas/FilterNode" + "type": "string" }, "type": "array" }, @@ -11254,102 +22971,113 @@ "type": "null" } ], - "title": "And" + "title": "Cited Websites" }, - "or": { + "rank": { "anyOf": [ { - "items": { - "$ref": "#/components/schemas/FilterNode" - }, - "type": "array" + "type": "integer" }, { "type": "null" } ], - "title": "Or" + "title": "Rank" + } + }, + "additionalProperties": true, + "type": "object", + "title": "SentimentRow", + "description": "One group-combination row. Group dims and metrics present depend on `group_by`/`metrics`." + }, + "SentimentScores": { + "properties": { + "positive_sentiment": { + "type": "number", + "title": "Positive Sentiment" }, - "not": { + "negative_sentiment": { + "type": "number", + "title": "Negative Sentiment" + }, + "assessment_count": { + "type": "integer", + "title": "Assessment Count" + }, + "occurrence": { "anyOf": [ { - "$ref": "#/components/schemas/FilterNode" + "type": "number" }, { "type": "null" } - ] + ], + "title": "Occurrence" }, - "field": { + "response_count": { "anyOf": [ { - "type": "string" + "type": "integer" }, { "type": "null" } ], - "title": "Field" + "title": "Response Count" }, - "op": { + "total_response_count": { "anyOf": [ { - "type": "string" + "type": "integer" }, { "type": "null" } ], - "title": "Op" - }, - "value": { - "title": "Value" - } - }, - "additionalProperties": false, - "type": "object", - "title": "FilterNode", - "description": "A leaf (`field`/`op`/`value`) or an `and`/`or`/`not` group." - }, - "FolderOperationResponse": { - "properties": { - "message": { - "type": "string", - "title": "Message", - "description": "Operation result message." - }, - "path": { - "type": "string", - "title": "Path", - "description": "Folder path." + "title": "Total Response Count" } }, - "additionalProperties": false, "type": "object", "required": [ - "message", - "path" + "positive_sentiment", + "negative_sentiment", + "assessment_count" ], - "title": "FolderOperationResponse" + "title": "SentimentScores" }, - "HTTPValidationError": { + "SentimentTheme": { "properties": { - "detail": { - "items": { - "$ref": "#/components/schemas/ValidationError" - }, - "type": "array", - "title": "Detail" + "type": { + "anyOf": [ + { + "type": "string", + "const": "positive" + }, + { + "type": "string", + "const": "negative" + } + ], + "title": "Type" + }, + "name": { + "type": "string", + "title": "Name" } }, "type": "object", - "title": "HTTPValidationError" + "required": [ + "type", + "name" + ], + "title": "SentimentTheme" }, - "HostnameFilter": { + "SentimentV2ClaimFilter": { "properties": { "field": { "type": "string", - "const": "hostname", + "const": "claim", "title": "Field" }, "operator": { @@ -11388,132 +23116,70 @@ "operator", "value" ], - "title": "HostnameFilter", - "description": "Filter by hostname" - }, - "IdOrName": { - "properties": { - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Id", - "description": "UUID of the resource." - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Name", - "description": "Display name of the resource." - } - }, - "type": "object", - "title": "IdOrName", - "description": "Reference by id, name, or both. Plain strings work too:\nUUIDs become id lookups, other strings become name lookups." + "title": "SentimentV2ClaimFilter" }, - "InaccuracyDriverRow": { + "SentimentV2ClaimIdFilter": { "properties": { - "rowId": { - "type": "string", - "title": "Rowid" - }, - "clusterId": { - "type": "string", - "title": "Clusterid" - }, - "canonicalClaim": { - "type": "string", - "title": "Canonicalclaim" - }, - "snippet": { + "field": { "type": "string", - "title": "Snippet" + "const": "claim_id", + "title": "Field" }, - "snippetClaimId": { + "operator": { "type": "string", - "title": "Snippetclaimid" - }, - "claimOccurrence": { - "type": "number", - "title": "Claimoccurrence" + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" }, - "claimOccurrenceDelta": { + "value": { "anyOf": [ { - "type": "number" + "type": "string", + "format": "uuid" }, { - "type": "null" + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" } ], - "title": "Claimoccurrencedelta" - }, - "href": { - "type": "string", - "title": "Href" - }, - "citationCategory": { - "type": "string", - "title": "Citationcategory" - }, - "domainCategory": { - "type": "string", - "title": "Domaincategory" - }, - "citationCount": { - "type": "integer", - "title": "Citationcount" + "title": "Value" } }, "type": "object", "required": [ - "rowId", - "clusterId", - "canonicalClaim", - "snippet", - "snippetClaimId", - "claimOccurrence", - "href", - "citationCategory", - "domainCategory", - "citationCount" + "field", + "operator", + "value" ], - "title": "InaccuracyDriverRow", - "description": "A top inaccurate claim paired with one of its most-cited pages." + "title": "SentimentV2ClaimIdFilter" }, - "InaccuracyDriversQuery": { + "SentimentV2Info": { "properties": { - "start_date": { - "type": "string", - "title": "Start Date" - }, - "end_date": { - "type": "string", - "title": "End Date" - }, - "comparison_start_date": { + "total_results": { "anyOf": [ { - "type": "string" + "type": "integer" }, { "type": "null" } ], - "title": "Comparison Start Date" + "title": "Total Results", + "description": "Total rows matching the query before pagination (null when not computed)." }, - "comparison_end_date": { + "count": { + "type": "integer", + "title": "Count", + "description": "Number of rows returned in `data` for this page." + }, + "next_cursor": { "anyOf": [ { "type": "string" @@ -11522,555 +23188,514 @@ "type": "null" } ], - "title": "Comparison End Date" + "title": "Next Cursor", + "description": "Opaque cursor for the next page; null on the last page." }, - "category_id": { - "type": "string", - "format": "uuid", - "title": "Category Id" + "models": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Models", + "description": "Display names of the models the report covers." }, - "topic_ids": { - "anyOf": [ - { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Topic Ids" + "start_date": { + "type": "string", + "title": "Start Date", + "description": "Echoed request start date (YYYY-MM-DD, ET)." }, - "exclude_topic_ids": { - "type": "boolean", - "title": "Exclude Topic Ids", - "default": false + "end_date": { + "type": "string", + "title": "End Date", + "description": "Echoed request end date (YYYY-MM-DD, ET)." }, - "tag_ids": { + "filter": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "title": "Tag Ids" + "title": "Filter", + "description": "Echoed normalized filter tree, or null when no filter was sent." }, - "tag_filter_type": { + "asset": { "type": "string", - "enum": [ - "all", - "any" - ], - "title": "Tag Filter Type", - "default": "any" + "title": "Asset", + "description": "The analyzed brand name." }, - "include_no_tag": { - "type": "boolean", - "title": "Include No Tag", - "default": true + "metrics": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Metrics", + "description": "Sentiment metrics returned per row." }, - "region_ids": { + "comparison_start_date": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Region Ids" + "title": "Comparison Start Date", + "description": "Comparison-window start (when requested)." }, - "platform_ids": { + "comparison_end_date": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Platform Ids" + "title": "Comparison End Date", + "description": "Comparison-window end (when requested)." + } + }, + "additionalProperties": true, + "type": "object", + "required": [ + "count", + "models", + "start_date", + "end_date", + "asset", + "metrics" + ], + "title": "SentimentV2Info" + }, + "SentimentV2ModelIdFilter": { + "properties": { + "field": { + "type": "string", + "const": "model_id", + "title": "Field" + }, + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" }, - "persona_ids": { + "value": { "anyOf": [ + { + "type": "string", + "format": "uuid" + }, { "items": { "type": "string", "format": "uuid" }, "type": "array" - }, - { - "type": "null" } ], - "title": "Persona Ids" + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "SentimentV2ModelIdFilter" + }, + "SentimentV2PersonaIdFilter": { + "properties": { + "field": { + "type": "string", + "const": "persona_id", + "title": "Field" }, - "include_no_persona": { - "type": "boolean", - "title": "Include No Persona", - "default": true + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" }, - "prompt_ids": { + "value": { "anyOf": [ + { + "type": "string", + "format": "uuid" + }, { "items": { "type": "string", "format": "uuid" }, "type": "array" - }, - { - "type": "null" } ], - "title": "Prompt Ids" + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "SentimentV2PersonaIdFilter" + }, + "SentimentV2PromptIdFilter": { + "properties": { + "field": { + "type": "string", + "const": "prompt_id", + "title": "Field" }, - "citation_categories": { + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" + }, + "value": { "anyOf": [ + { + "type": "string", + "format": "uuid" + }, { "items": { - "type": "string" + "type": "string", + "format": "uuid" }, "type": "array" - }, - { - "type": "null" } ], - "title": "Citation Categories" - }, - "limit": { - "type": "integer", - "maximum": 50, - "minimum": 1, - "title": "Limit", - "default": 5 - } - }, - "type": "object", - "required": [ - "start_date", - "end_date", - "category_id" - ], - "title": "InaccuracyDriversQuery" - }, - "InaccuracyDriversResponse": { - "properties": { - "data": { - "items": { - "$ref": "#/components/schemas/InaccuracyDriverRow" - }, - "type": "array", - "title": "Data" + "title": "Value" } }, "type": "object", "required": [ - "data" + "field", + "operator", + "value" ], - "title": "InaccuracyDriversResponse" + "title": "SentimentV2PromptIdFilter" }, - "InaccurateClusterRow": { + "SentimentV2Query": { "properties": { - "clusterId": { - "type": "string", - "title": "Clusterid" - }, - "canonicalClaim": { - "type": "string", - "title": "Canonicalclaim" - }, - "description": { + "category_id": { "type": "string", - "title": "Description", - "default": "" + "format": "uuid", + "title": "Category Id" }, - "kbPath": { + "asset": { "type": "string", - "title": "Kbpath" + "title": "Asset", + "description": "The brand name to analyze (sentiment is extracted on name, not id)." }, - "kbSnippet": { + "start_date": { "type": "string", - "title": "Kbsnippet" + "title": "Start Date", + "description": "YYYY-MM-DD, ET, inclusive" }, - "reasoning": { + "end_date": { "type": "string", - "title": "Reasoning" - }, - "claimCount": { - "type": "integer", - "title": "Claimcount" - }, - "responseCount": { - "type": "integer", - "title": "Responsecount" - }, - "totalResponseCount": { - "type": "integer", - "title": "Totalresponsecount" + "title": "End Date", + "description": "YYYY-MM-DD, ET, inclusive" }, - "responseShare": { - "type": "number", - "title": "Responseshare" + "comparison_start_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Comparison Start Date", + "description": "YYYY-MM-DD, ET, inclusive (with end)." }, - "responseShareDelta": { + "comparison_end_date": { "anyOf": [ { - "type": "number" + "type": "string" }, { "type": "null" } ], - "title": "Responsesharedelta" + "title": "Comparison End Date", + "description": "YYYY-MM-DD, ET, inclusive (with start)." }, - "citationHostnames": { + "group_by": { "items": { - "type": "string" + "type": "string", + "enum": [ + "date", + "model", + "topic", + "region", + "prompt", + "persona", + "tag", + "theme", + "claim", + "run", + "competitor" + ] }, "type": "array", - "title": "Citationhostnames" - } - }, - "type": "object", - "required": [ - "clusterId", - "canonicalClaim", - "kbPath", - "kbSnippet", - "reasoning", - "claimCount", - "responseCount", - "totalResponseCount", - "responseShare", - "citationHostnames" - ], - "title": "InaccurateClusterRow" - }, - "InaccurateClustersQuery": { - "properties": { - "start_date": { - "type": "string", - "title": "Start Date" + "title": "Group By" }, - "end_date": { + "metrics": { + "anyOf": [ + { + "items": { + "type": "string", + "enum": [ + "positive_sentiment", + "negative_sentiment", + "occurrence" + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Metrics" + }, + "interval": { "type": "string", - "title": "End Date" + "enum": [ + "day", + "week", + "month" + ], + "title": "Interval", + "default": "day" }, - "comparison_start_date": { + "filter": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/FilterNode" }, { "type": "null" } - ], - "title": "Comparison Start Date" + ] }, - "comparison_end_date": { + "sort": { + "$ref": "#/components/schemas/app__routes__v2__answer_engine_insights__reports__sentiment__SortSpec" + }, + "include_cited_websites": { + "type": "boolean", + "title": "Include Cited Websites", + "description": "Return cited websites per row (only when grouping by `theme`/`claim`).", + "default": false + }, + "limit": { "anyOf": [ { - "type": "string" + "type": "integer", + "maximum": 50, + "exclusiveMinimum": 0 }, { "type": "null" } ], - "title": "Comparison End Date" - }, - "category_id": { - "type": "string", - "format": "uuid", - "title": "Category Id" + "title": "Limit", + "description": "Page size; default 10, max 50." }, - "topic_ids": { + "max_results": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "integer", + "exclusiveMinimum": 0 }, { "type": "null" } ], - "title": "Topic Ids" - }, - "exclude_topic_ids": { - "type": "boolean", - "title": "Exclude Topic Ids", - "default": false + "title": "Max Results", + "description": "Stream endpoint only: cap the number of streamed rows (default: all)." }, - "tag_ids": { + "cursor": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Tag Ids" + "title": "Cursor" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "category_id", + "asset", + "start_date", + "end_date" + ], + "title": "SentimentV2Query" + }, + "SentimentV2RegionIdFilter": { + "properties": { + "field": { + "type": "string", + "const": "region_id", + "title": "Field" }, - "tag_filter_type": { + "operator": { "type": "string", "enum": [ - "all", - "any" + "is", + "not_is", + "in", + "not_in" ], - "title": "Tag Filter Type", - "default": "any" - }, - "include_no_tag": { - "type": "boolean", - "title": "Include No Tag", - "default": true + "title": "Operator" }, - "region_ids": { + "value": { "anyOf": [ + { + "type": "string", + "format": "uuid" + }, { "items": { "type": "string", "format": "uuid" }, "type": "array" - }, - { - "type": "null" } ], - "title": "Region Ids" + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "SentimentV2RegionIdFilter" + }, + "SentimentV2ReportDataPoint": { + "properties": { + "scores": { + "$ref": "#/components/schemas/SentimentPeriodScores" }, - "platform_ids": { + "date": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Platform Ids" + "title": "Date" }, - "persona_ids": { + "prev_date": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Persona Ids" - }, - "include_no_persona": { - "type": "boolean", - "title": "Include No Persona", - "default": true + "title": "Prev Date" }, - "prompt_ids": { + "group_ids": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" + "additionalProperties": { + "type": "string" }, - "type": "array" + "type": "object" }, { "type": "null" } ], - "title": "Prompt Ids" + "title": "Group Ids" }, - "citation_categories": { + "group_names": { "anyOf": [ { - "items": { + "additionalProperties": { "type": "string" }, - "type": "array" + "type": "object" }, { "type": "null" } ], - "title": "Citation Categories" - }, - "theme_id": { - "type": "string", - "format": "uuid", - "title": "Theme Id" - }, - "limit": { - "type": "integer", - "maximum": 10000, - "minimum": 1, - "title": "Limit", - "default": 5000 - }, - "offset": { - "type": "integer", - "minimum": 0, - "title": "Offset", - "default": 0 + "title": "Group Names" }, - "search_query": { + "group_metadata": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/SentimentV2ReportGroupMetadata" }, { "type": "null" } - ], - "title": "Search Query" - } - }, - "type": "object", - "required": [ - "start_date", - "end_date", - "category_id", - "theme_id" - ], - "title": "InaccurateClustersQuery" - }, - "InaccurateClustersResponse": { - "properties": { - "data": { - "items": { - "$ref": "#/components/schemas/InaccurateClusterRow" - }, - "type": "array", - "title": "Data" - }, - "totalCount": { - "type": "integer", - "title": "Totalcount" - } - }, - "type": "object", - "required": [ - "data", - "totalCount" - ], - "title": "InaccurateClustersResponse" - }, - "InaccurateThemeRow": { - "properties": { - "themeId": { - "type": "string", - "title": "Themeid" - }, - "neutralTheme": { - "type": "string", - "title": "Neutraltheme" - }, - "description": { - "type": "string", - "title": "Description", - "default": "" - }, - "inaccurateClaimCount": { - "type": "integer", - "title": "Inaccurateclaimcount" - }, - "inaccurateClusterCount": { - "type": "integer", - "title": "Inaccurateclustercount" - }, - "totalClaimCount": { - "type": "integer", - "title": "Totalclaimcount" - }, - "totalClusterCount": { - "type": "integer", - "title": "Totalclustercount" - }, - "responseCount": { - "type": "integer", - "title": "Responsecount" - }, - "totalResponseCount": { - "type": "integer", - "title": "Totalresponsecount" - }, - "responseShare": { - "type": "number", - "title": "Responseshare" + ] }, - "responseShareDelta": { + "cited_website_hrefs": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Cited Website Hrefs" + }, + "total_count": { "anyOf": [ { - "type": "number" + "type": "integer" }, { "type": "null" } ], - "title": "Responsesharedelta" + "title": "Total Count" } }, "type": "object", "required": [ - "themeId", - "neutralTheme", - "inaccurateClaimCount", - "inaccurateClusterCount", - "totalClaimCount", - "totalClusterCount", - "responseCount", - "totalResponseCount", - "responseShare" + "scores" ], - "title": "InaccurateThemeRow" + "title": "SentimentV2ReportDataPoint" }, - "InaccurateThemesQuery": { + "SentimentV2ReportGroupMetadata": { "properties": { - "start_date": { - "type": "string", - "title": "Start Date" - }, - "end_date": { - "type": "string", - "title": "End Date" - }, - "comparison_start_date": { + "theme": { "anyOf": [ { "type": "string" @@ -12079,9 +23704,9 @@ "type": "null" } ], - "title": "Comparison Start Date" + "title": "Theme" }, - "comparison_end_date": { + "claim": { "anyOf": [ { "type": "string" @@ -12090,422 +23715,440 @@ "type": "null" } ], - "title": "Comparison End Date" - }, - "category_id": { - "type": "string", - "format": "uuid", - "title": "Category Id" + "title": "Claim" }, - "topic_ids": { + "sentiment": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "string", + "enum": [ + "positive", + "negative" + ] }, { "type": "null" } ], - "title": "Topic Ids" - }, - "exclude_topic_ids": { - "type": "boolean", - "title": "Exclude Topic Ids", - "default": false + "title": "Sentiment" }, - "tag_ids": { + "prompt_id": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Tag Ids" + "title": "Prompt Id" }, - "tag_filter_type": { - "type": "string", - "enum": [ - "all", - "any" + "prompt_text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } ], - "title": "Tag Filter Type", - "default": "any" - }, - "include_no_tag": { - "type": "boolean", - "title": "Include No Tag", - "default": true + "title": "Prompt Text" }, - "region_ids": { + "topic_id": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Region Ids" + "title": "Topic Id" }, - "platform_ids": { + "run_id": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Platform Ids" + "title": "Run Id" }, - "persona_ids": { + "created_at": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Persona Ids" - }, - "include_no_persona": { - "type": "boolean", - "title": "Include No Persona", - "default": true + "title": "Created At" }, - "prompt_ids": { + "model_id": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Prompt Ids" + "title": "Model Id" }, - "citation_categories": { + "region_id": { "anyOf": [ { - "items": { - "type": "string" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Citation Categories" - }, - "limit": { - "type": "integer", - "minimum": 1, - "title": "Limit", - "default": 10 + "title": "Region Id" }, - "offset": { - "type": "integer", - "minimum": 0, - "title": "Offset", - "default": 0 + "persona_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Persona Id" }, - "sort_by": { - "type": "string", - "const": "response_share", - "title": "Sort By", - "default": "response_share" + "asset_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Asset Name" }, - "sort_order": { - "type": "string", - "enum": [ - "asc", - "desc" + "child_count_total": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } ], - "title": "Sort Order", - "default": "desc" + "title": "Child Count Total" }, - "search_query": { + "child_count_matching": { "anyOf": [ { - "type": "string" + "type": "integer" }, { "type": "null" } ], - "title": "Search Query" - } - }, - "type": "object", - "required": [ - "start_date", - "end_date", - "category_id" - ], - "title": "InaccurateThemesQuery" - }, - "InaccurateThemesResponse": { - "properties": { - "data": { - "items": { - "$ref": "#/components/schemas/InaccurateThemeRow" - }, - "type": "array", - "title": "Data" + "title": "Child Count Matching" }, - "totalCount": { - "type": "integer", - "title": "Totalcount" - } - }, - "type": "object", - "required": [ - "data", - "totalCount" - ], - "title": "InaccurateThemesResponse" - }, - "Info": { - "properties": { - "total_rows": { - "type": "integer", - "title": "Total Rows" + "parent_matches_search": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Parent Matches Search" }, - "query": { + "child_matches_search": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "type": "boolean" }, { "type": "null" } ], + "title": "Child Matches Search" + } + }, + "type": "object", + "title": "SentimentV2ReportGroupMetadata" + }, + "SentimentV2ReportInfo": { + "properties": { + "query": { + "additionalProperties": true, + "type": "object", "title": "Query" + }, + "total_rows": { + "type": "integer", + "title": "Total Rows" } }, "type": "object", "required": [ + "query", "total_rows" ], - "title": "Info", - "description": "Base model for report information." + "title": "SentimentV2ReportInfo" }, - "KnowledgeBaseItem": { + "SentimentV2ReportQuery": { "properties": { - "id": { + "category_id": { "type": "string", "format": "uuid", - "title": "Id", - "description": "Unique knowledge base ID." + "title": "Category Id" }, - "name": { + "asset_name": { "type": "string", - "title": "Name", - "description": "Knowledge base name." + "title": "Asset Name" }, - "slug": { + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + }, + "comparison_start_date": { "anyOf": [ { - "type": "string" + "type": "string", + "format": "date-time" }, { "type": "null" } ], - "title": "Slug", - "description": "Knowledge base slug." + "title": "Comparison Start Date", + "description": "Start of the previous period for delta computation." }, - "description": { + "comparison_end_date": { "anyOf": [ { - "type": "string" + "type": "string", + "format": "date-time" }, { "type": "null" } ], - "title": "Description", - "description": "Knowledge base description." + "title": "Comparison End Date", + "description": "End of the previous period for delta computation." }, - "created_at": { + "date_bucket": { "type": "string", - "format": "date-time", - "title": "Created At", - "description": "Creation timestamp." - } - }, - "additionalProperties": false, - "type": "object", - "required": [ - "id", - "name", - "created_at" - ], - "title": "KnowledgeBaseItem" - }, - "KnowledgeBaseSearchResponse": { - "properties": { - "data": { + "enum": [ + "day", + "week", + "month" + ], + "title": "Date Bucket", + "description": "Date bucket for the report. Only used when dimensions includes date.", + "default": "day" + }, + "dimensions": { "items": { - "$ref": "#/components/schemas/KnowledgeBaseSearchResult" + "type": "string", + "enum": [ + "date", + "topic", + "region", + "model", + "prompt", + "persona", + "tag", + "theme", + "claim", + "run", + "asset_name" + ] }, "type": "array", - "title": "Data", - "description": "Knowledge base search results." - }, - "pagination": { - "$ref": "#/components/schemas/CursorPagination", - "description": "Pagination metadata." - } - }, - "additionalProperties": false, - "type": "object", - "required": [ - "data" - ], - "title": "KnowledgeBaseSearchResponse" - }, - "KnowledgeBaseSearchResult": { - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Document or chunk path." - }, - "score": { - "type": "number", - "title": "Score", - "description": "Relevance score." + "title": "Dimensions", + "description": "Dimensions to group the report by." }, - "metadata": { - "additionalProperties": true, - "type": "object", - "title": "Metadata", - "description": "Result metadata, including folder path." + "metrics": { + "items": { + "type": "string", + "enum": [ + "sentiment", + "occurrence" + ] + }, + "type": "array", + "title": "Metrics" }, - "content": { - "type": "string", - "title": "Content", - "description": "Matched content." - } - }, - "additionalProperties": false, - "type": "object", - "required": [ - "id", - "score", - "metadata", - "content" - ], - "title": "KnowledgeBaseSearchResult" - }, - "ListAgentsResponse": { - "properties": { - "data": { + "filters": { "items": { - "$ref": "#/components/schemas/Agent" + "oneOf": [ + { + "$ref": "#/components/schemas/SentimentV2ModelIdFilter" + }, + { + "$ref": "#/components/schemas/SentimentV2RegionIdFilter" + }, + { + "$ref": "#/components/schemas/SentimentV2TopicIdFilter" + }, + { + "$ref": "#/components/schemas/SentimentV2PromptIdFilter" + }, + { + "$ref": "#/components/schemas/SentimentV2PersonaIdFilter" + }, + { + "$ref": "#/components/schemas/SentimentV2TagIdFilter" + }, + { + "$ref": "#/components/schemas/SentimentV2RunIdFilter" + }, + { + "$ref": "#/components/schemas/SentimentV2ThemeFilter" + }, + { + "$ref": "#/components/schemas/SentimentV2ClaimFilter" + }, + { + "$ref": "#/components/schemas/SentimentV2ThemeIdFilter" + }, + { + "$ref": "#/components/schemas/SentimentV2ClaimIdFilter" + }, + { + "$ref": "#/components/schemas/SentimentV2SentimentFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "claim": "#/components/schemas/SentimentV2ClaimFilter", + "claim_id": "#/components/schemas/SentimentV2ClaimIdFilter", + "model_id": "#/components/schemas/SentimentV2ModelIdFilter", + "persona_id": "#/components/schemas/SentimentV2PersonaIdFilter", + "prompt_id": "#/components/schemas/SentimentV2PromptIdFilter", + "region_id": "#/components/schemas/SentimentV2RegionIdFilter", + "run_id": "#/components/schemas/SentimentV2RunIdFilter", + "sentiment": "#/components/schemas/SentimentV2SentimentFilter", + "tag_id": "#/components/schemas/SentimentV2TagIdFilter", + "theme": "#/components/schemas/SentimentV2ThemeFilter", + "theme_id": "#/components/schemas/SentimentV2ThemeIdFilter", + "topic_id": "#/components/schemas/SentimentV2TopicIdFilter" + } + } }, "type": "array", - "title": "Data", - "description": "Agents returned for this page." + "title": "Filters", + "description": "List of filters to apply to the sentiment-v2 report." + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "propertyNames": { + "enum": [ + "sentiment", + "occurrence", + "assessment_count", + "positive_sentiment", + "negative_sentiment", + "date", + "topic", + "region", + "model", + "prompt", + "persona", + "tag", + "theme", + "claim", + "run", + "asset_name" + ] + }, + "type": "object", + "title": "Order By", + "description": "Custom ordering of report results. Dimension keys must also be present in dimensions. The sentiment metric orders by positive_sentiment.", + "examples": [ + { + "occurrence": "desc" + } + ] }, "pagination": { - "$ref": "#/components/schemas/CursorPagination", - "description": "Cursor pagination details for this response." + "$ref": "#/components/schemas/Pagination", + "description": "Pagination settings for the report results." } }, "additionalProperties": false, "type": "object", "required": [ - "data" - ], - "title": "ListAgentsResponse", - "description": "Paginated list of agents." - }, - "ListAgentsStatusFilter": { - "type": "string", - "enum": [ - "published", - "draft" + "category_id", + "asset_name", + "start_date", + "end_date", + "metrics" ], - "title": "ListAgentsStatusFilter", - "description": "Statuses you can use to filter the list agents response." + "title": "SentimentV2ReportQuery" }, - "ListKnowledgeBasesResponse": { + "SentimentV2ReportResponse": { "properties": { + "info": { + "$ref": "#/components/schemas/SentimentV2ReportInfo" + }, "data": { "items": { - "$ref": "#/components/schemas/KnowledgeBaseItem" + "$ref": "#/components/schemas/SentimentV2ReportDataPoint" }, "type": "array", - "title": "Data", - "description": "Knowledge bases accessible to the API key." - }, - "pagination": { - "$ref": "#/components/schemas/CursorPagination", - "description": "Pagination metadata." + "title": "Data" } }, - "additionalProperties": false, "type": "object", "required": [ - "data" + "info" ], - "title": "ListKnowledgeBasesResponse" + "title": "SentimentV2ReportResponse" }, - "ListNodeTypesResponse": { + "SentimentV2Response": { "properties": { + "info": { + "$ref": "#/components/schemas/SentimentV2Info" + }, "data": { "items": { - "$ref": "#/components/schemas/NodeTypeSummary" + "$ref": "#/components/schemas/SentimentRow" }, "type": "array", - "title": "Data", - "description": "Allowlisted node types, returned as thin summaries." + "title": "Data" } }, - "additionalProperties": false, "type": "object", "required": [ + "info", "data" ], - "title": "ListNodeTypesResponse", - "description": "List of node types available to v1 agent authors." + "title": "SentimentV2Response" }, - "MerchantNameFilter": { + "SentimentV2RunIdFilter": { "properties": { "field": { "type": "string", - "const": "merchant_name", + "const": "run_id", "title": "Field" }, "operator": { @@ -12514,23 +24157,20 @@ "is", "not_is", "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" + "not_in" ], "title": "Operator" }, "value": { "anyOf": [ { - "type": "string" + "type": "string", + "format": "uuid" }, { "items": { - "type": "string" + "type": "string", + "format": "uuid" }, "type": "array" } @@ -12544,22 +24184,13 @@ "operator", "value" ], - "title": "MerchantNameFilter" + "title": "SentimentV2RunIdFilter" }, - "ModelIdFilter": { + "SentimentV2SentimentFilter": { "properties": { "field": { - "anyOf": [ - { - "type": "string", - "const": "model_id" - }, - { - "type": "string", - "const": "model", - "deprecated": true - } - ], + "type": "string", + "const": "sentiment", "title": "Field" }, "operator": { @@ -12576,12 +24207,18 @@ "anyOf": [ { "type": "string", - "format": "uuid" + "enum": [ + "positive", + "negative" + ] }, { "items": { "type": "string", - "format": "uuid" + "enum": [ + "positive", + "negative" + ] }, "type": "array" } @@ -12595,195 +24232,124 @@ "operator", "value" ], - "title": "ModelIdFilter", - "description": "Filter by AI model/platform UUID." - }, - "NamedResource": { - "properties": { - "id": { - "type": "string", - "title": "Id" - }, - "name": { - "type": "string", - "title": "Name" - } - }, - "type": "object", - "required": [ - "id", - "name" - ], - "title": "NamedResource", - "description": "Generic id+name reference used across domain boundaries." - }, - "NamedResourceDiffList": { - "properties": { - "added": { - "items": { - "$ref": "#/components/schemas/NamedResource" - }, - "type": "array", - "title": "Added", - "description": "Resources that were added.", - "default": [] - }, - "removed": { - "items": { - "$ref": "#/components/schemas/NamedResource" - }, - "type": "array", - "title": "Removed", - "description": "Resources that were removed.", - "default": [] - } - }, - "type": "object", - "title": "NamedResourceDiffList", - "description": "Shows which resources were added or removed." + "title": "SentimentV2SentimentFilter" }, - "NodeSchemaResponse": { + "SentimentV2TagIdFilter": { "properties": { - "node_type": { + "field": { "type": "string", - "title": "Node Type", - "description": "Stable identifier for the node type, e.g. `llm`." - }, - "schema": { - "additionalProperties": true, - "type": "object", - "title": "Schema", - "description": "Opaque JSON Schema for the node's configuration. Treat this as an arbitrary object; its internal shape can change between `schema_version` bumps." + "const": "tag_id", + "title": "Field" }, - "schema_version": { + "operator": { "type": "string", - "title": "Schema Version", - "description": "Opaque version string for the node schema. Bumps whenever the underlying schema changes, so it can be used as a client-side cache key." + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" }, - "description": { + "value": { "anyOf": [ { - "type": "string" + "type": "string", + "format": "uuid" }, - { - "type": "null" - } - ], - "title": "Description", - "description": "Short description of what the node type does, if provided." - }, - "examples": { - "anyOf": [ { "items": { - "additionalProperties": true, - "type": "object" + "type": "string", + "format": "uuid" }, "type": "array" - }, - { - "type": "null" - } - ], - "title": "Examples", - "description": "Worked example configurations for the node type, in the canonical graph dialect. These are curated guidance maintained by external-api, versioned by `docs_version` (NOT `schema_version`): they illustrate a valid shape at curation time but are a starting point, not the contract — they may lag the validator. The authoritative contract is `schema`, and the only authoritative check that a graph is valid is publishing it (or the agent-validation endpoint). Do not parse `examples` as the schema." - }, - "documentation": { - "anyOf": [ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } - ], - "title": "Documentation", - "description": "Opaque, human-oriented authoring guidance for the node type — purpose, constraints, enum values, and variable-flow notes that the machine `schema` does not always express (e.g. a conditional's else-branch rule, or an iteration's sub-graph shape). Treat as an arbitrary object; use `docs_version` as its cache key." - }, - "docs_version": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" } ], - "title": "Docs Version", - "description": "Opaque version string for `documentation`/`examples`, independent of `schema_version`. Bumps when the authoring guidance changes even if the underlying machine `schema` did not. When it trails the live `schema_version`, treat `documentation`/`examples` as guidance that may be stale and validate against the live `schema`." + "title": "Value" } }, - "additionalProperties": false, "type": "object", "required": [ - "node_type", - "schema", - "schema_version" + "field", + "operator", + "value" ], - "title": "NodeSchemaResponse", - "description": "JSON schema and worked examples for a single node type." + "title": "SentimentV2TagIdFilter" }, - "NodeTypeSummary": { + "SentimentV2ThemeFilter": { "properties": { - "node_type": { + "field": { "type": "string", - "title": "Node Type", - "description": "Stable identifier for the node type, e.g. `llm`." + "const": "theme", + "title": "Field" }, - "display_name": { + "operator": { "type": "string", - "title": "Display Name", - "description": "Human-readable name for the node type." + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" }, - "description": { + "value": { "anyOf": [ { "type": "string" }, { - "type": "null" + "items": { + "type": "string" + }, + "type": "array" } ], - "title": "Description", - "description": "Short description of what the node type does, if provided." + "title": "Value" } }, - "additionalProperties": false, "type": "object", "required": [ - "node_type", - "display_name" + "field", + "operator", + "value" ], - "title": "NodeTypeSummary", - "description": "Thin summary for a node type available to v1 agent authors." + "title": "SentimentV2ThemeFilter" }, - "NumericMetricFilter": { + "SentimentV2ThemeIdFilter": { "properties": { "field": { "type": "string", + "const": "theme_id", "title": "Field" }, "operator": { "type": "string", "enum": [ - ">", - ">=", - "<", - "<=", - "=", - "==", - "!=" + "is", + "not_is", + "in", + "not_in" ], "title": "Operator" }, "value": { "anyOf": [ { - "type": "integer" + "type": "string", + "format": "uuid" }, { - "type": "number" + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" } ], "title": "Value" @@ -12795,155 +24361,257 @@ "operator", "value" ], - "title": "NumericMetricFilter" + "title": "SentimentV2ThemeIdFilter" }, - "OptimizationQuery": { + "SentimentV2TopicIdFilter": { "properties": { - "asset_id": { + "field": { "type": "string", - "format": "uuid", - "title": "Asset Id" + "const": "topic_id", + "title": "Field" }, - "pagination": { - "$ref": "#/components/schemas/Pagination", - "description": "Pagination parameters for the results. Default is 10,000 rows with no offset." + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" + }, + "value": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + } + ], + "title": "Value" } }, "type": "object", "required": [ - "asset_id" - ], - "title": "OptimizationQuery" - }, - "OrderByDirection": { - "type": "string", - "enum": [ - "asc", - "desc" + "field", + "operator", + "value" ], - "title": "OrderByDirection" + "title": "SentimentV2TopicIdFilter" }, - "Organization": { + "ShoppingAllItemsWithMerchantsQuery": { "properties": { - "id": { + "category_id": { "type": "string", "format": "uuid", - "title": "Id" + "title": "Category Id" }, - "name": { + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "comparison_start_date": { "anyOf": [ { - "type": "string" + "type": "string", + "format": "date-time" }, { "type": "null" } ], - "title": "Name" - } - }, - "type": "object", - "required": [ - "id", - "name" - ], - "title": "Organization" - }, - "OrganizationAssetsResponse": { - "properties": { - "data": { + "title": "Comparison Start Date" + }, + "comparison_end_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Comparison End Date" + }, + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "default": "day" + }, + "filters": { "items": { - "$ref": "#/components/schemas/CategoryAssetWithCategory" + "oneOf": [ + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/PromptIdFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + }, + { + "$ref": "#/components/schemas/BrandNameFilter" + }, + { + "$ref": "#/components/schemas/MerchantNameFilter" + }, + { + "$ref": "#/components/schemas/ProductNameFilter" + }, + { + "$ref": "#/components/schemas/profound_shopping__api__AssetNameFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "#/components/schemas/profound_shopping__api__AssetNameFilter", + "brand_name": "#/components/schemas/BrandNameFilter", + "merchant_name": "#/components/schemas/MerchantNameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "product_name": "#/components/schemas/ProductNameFilter", + "prompt_id": "#/components/schemas/PromptIdFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter" + } + } }, "type": "array", - "title": "Data" - } - }, - "type": "object", - "required": [ - "data" - ], - "title": "OrganizationAssetsResponse" - }, - "OrganizationPersonasWithCategory": { - "properties": { - "id": { + "title": "Filters" + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By" + }, + "pagination": { + "anyOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { + "type": "null" + } + ] + }, + "include_count": { + "type": "boolean", + "title": "Include Count", + "default": false + }, + "tag_filter_type": { "type": "string", - "title": "Id" + "enum": [ + "any", + "all" + ], + "title": "Tag Filter Type", + "default": "any" }, - "name": { - "type": "string", - "title": "Name" + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": false }, - "persona": { - "$ref": "#/components/schemas/PersonaProfile" + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false }, - "category": { - "$ref": "#/components/schemas/Category" + "dimensions": { + "items": { + "type": "string", + "enum": [ + "period", + "product_name", + "brand_name", + "product_url", + "product_image_urls", + "product_price", + "merchant_names", + "merchant_prices" + ] + }, + "type": "array", + "title": "Dimensions" }, - "organization": { - "$ref": "#/components/schemas/Organization" - } - }, - "type": "object", - "required": [ - "id", - "name", - "persona", - "category", - "organization" - ], - "title": "OrganizationPersonasWithCategory" - }, - "OrganizationPersonasWithCategoryResponse": { - "properties": { - "data": { + "metrics": { "items": { - "$ref": "#/components/schemas/OrganizationPersonasWithCategory" + "type": "string", + "enum": [ + "visibility_score", + "share_of_voice", + "average_position", + "visibility_rank", + "product_rating", + "product_num_reviews", + "total_count" + ] }, "type": "array", - "title": "Data" - } - }, - "type": "object", - "required": [ - "data" - ], - "title": "OrganizationPersonasWithCategoryResponse" - }, - "Pagination": { - "properties": { - "limit": { - "type": "integer", - "maximum": 50000, - "exclusiveMinimum": 0, - "title": "Limit", - "description": "Maximum number of results to return. Default is 10,000, maximum is 50,000.", - "default": 10000 + "title": "Metrics" }, - "offset": { - "type": "integer", - "minimum": 0, - "title": "Offset", - "description": "Offset for the results. Used for pagination.", - "default": 0 - } - }, - "type": "object", - "title": "Pagination", - "description": "Offset-based pagination parameters." - }, - "PaginationInfo": { - "properties": { - "total_rows": { - "type": "integer", - "title": "Total Rows" + "owned_asset_names": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Owned Asset Names" }, - "limit": { - "type": "integer", - "title": "Limit" + "include_items": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Include Items" }, - "next_cursor": { + "search_item": { "anyOf": [ { "type": "string" @@ -12952,129 +24620,72 @@ "type": "null" } ], - "title": "Next Cursor" - } - }, - "type": "object", - "required": [ - "total_rows", - "limit", - "next_cursor" - ], - "title": "PaginationInfo" - }, - "PathFilter": { - "properties": { - "field": { + "title": "Search Item" + }, + "merchant_filter_type": { "type": "string", - "const": "path", - "title": "Field" + "enum": [ + "any", + "all" + ], + "title": "Merchant Filter Type", + "default": "any" }, - "operator": { + "rank_by": { "type": "string", "enum": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" + "visibility", + "average_position", + "name" ], - "title": "Operator" + "title": "Rank By", + "default": "visibility" }, - "value": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "type": "string" - }, - "type": "array" - } + "sort_order": { + "type": "string", + "enum": [ + "asc", + "desc" ], - "title": "Value" + "title": "Sort Order", + "default": "desc" } }, "type": "object", "required": [ - "field", - "operator", - "value" + "category_id", + "start_date", + "end_date" ], - "title": "PathFilter", - "description": "Filter by request path" + "title": "ShoppingAllItemsWithMerchantsQuery" }, - "PersonaIdFilter": { + "ShoppingBrandRow": { "properties": { - "field": { - "type": "string", - "const": "persona_id", - "title": "Field" - }, - "operator": { - "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in" + "asset": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } ], - "title": "Operator" + "title": "Asset" }, - "value": { + "rank": { "anyOf": [ { - "type": "string", - "format": "uuid" + "type": "integer" }, { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "null" } ], - "title": "Value" - } - }, - "type": "object", - "required": [ - "field", - "operator", - "value" - ], - "title": "PersonaIdFilter", - "description": "Filter by persona UUID." - }, - "PersonaProfile": { - "properties": { - "behavior": { - "$ref": "#/components/schemas/PersonaProfileBehavior" - }, - "employment": { - "$ref": "#/components/schemas/PersonaProfileEmployment" + "title": "Rank", + "description": "Asset visibility rank as a top-level field (ungrouped only)." }, - "demographics": { - "$ref": "#/components/schemas/PersonaProfileDemographics" - } - }, - "type": "object", - "required": [ - "behavior", - "employment", - "demographics" - ], - "title": "PersonaProfile" - }, - "PersonaProfileBehavior": { - "properties": { - "painPoints": { + "date": { "anyOf": [ { "type": "string" @@ -13083,595 +24694,589 @@ "type": "null" } ], - "title": "Painpoints" + "title": "Date" }, - "motivations": { + "topic": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/DimensionRef" }, { "type": "null" } - ], - "title": "Motivations" - } - }, - "type": "object", - "title": "PersonaProfileBehavior" - }, - "PersonaProfileDemographics": { - "properties": { - "ageRange": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Agerange" - } - }, - "type": "object", - "title": "PersonaProfileDemographics" - }, - "PersonaProfileEmployment": { - "properties": { - "industry": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Industry" + ] }, - "jobTitle": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Jobtitle" + "region": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] }, - "companySize": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Companysize" + "prompt": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] }, - "roleSeniority": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Roleseniority" - } - }, - "type": "object", - "title": "PersonaProfileEmployment" - }, - "ProductNameFilter": { - "properties": { - "field": { - "type": "string", - "const": "product_name", - "title": "Field" + "visibility_score": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Visibility Score" }, - "operator": { - "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" + "average_position": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } ], - "title": "Operator" + "title": "Average Position" }, - "value": { + "visibility_rank": { "anyOf": [ { - "type": "string" + "type": "integer" }, { - "items": { - "type": "string" - }, - "type": "array" + "type": "null" } ], - "title": "Value" + "title": "Visibility Rank", + "description": "Asset visibility rank (present on grouped rows)." } }, + "additionalProperties": true, "type": "object", - "required": [ - "field", - "operator", - "value" - ], - "title": "ProductNameFilter" + "title": "ShoppingBrandRow", + "description": "One (asset x group) row. Group dims/metrics present depend on `group_by`/`metrics`." }, - "Prompt": { + "ShoppingBrandsV2Info": { "properties": { - "id": { - "type": "string", - "title": "Id" - }, - "analysis_types": { - "items": { - "type": "string", - "enum": [ - "visibility", - "sentiment", - "sentiment_v2", - "accuracy" - ] - }, - "type": "array", - "title": "Analysis Types", - "default": [] - }, - "prompt_type": { - "type": "string", - "title": "Prompt Type", - "default": "", - "deprecated": true - }, - "prompt": { - "type": "string", - "title": "Prompt" - }, - "language": { - "type": "string", - "title": "Language" - }, - "status": { - "type": "string", - "enum": [ - "active", - "disabled" + "total_results": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } ], - "title": "Status" - }, - "topic": { - "$ref": "#/components/schemas/NamedResource" - }, - "tags": { - "items": { - "$ref": "#/components/schemas/NamedResource" - }, - "type": "array", - "title": "Tags", - "default": [] + "title": "Total Results", + "description": "Total assets matching the query before pagination." }, - "regions": { - "items": { - "$ref": "#/components/schemas/NamedResource" - }, - "type": "array", - "title": "Regions" + "count": { + "type": "integer", + "title": "Count", + "description": "Number of assets on this page. When grouped by `date`, `data` holds one row per asset x bucket, so `len(data)` can exceed `count`." }, - "platforms": { - "items": { - "$ref": "#/components/schemas/NamedResource" - }, - "type": "array", - "title": "Platforms" + "next_cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Cursor", + "description": "Opaque cursor for the next page; null on the last page." }, - "personas": { + "models": { "items": { - "$ref": "#/components/schemas/NamedResource" + "type": "string" }, - "type": "array", - "title": "Personas", - "default": [] - }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Created At" - }, - "updated_at": { - "type": "string", - "format": "date-time", - "title": "Updated At" - } - }, - "type": "object", - "required": [ - "id", - "prompt", - "language", - "status", - "topic", - "regions", - "platforms", - "created_at", - "updated_at" - ], - "title": "Prompt" - }, - "PromptFilter": { - "properties": { - "field": { - "type": "string", - "const": "prompt", - "title": "Field" - }, - "operator": { - "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" - ], - "title": "Operator" + "type": "array", + "title": "Models", + "description": "Display names of the models the report covers." }, - "value": { + "start_date": { + "type": "string", + "title": "Start Date", + "description": "Echoed request start date (YYYY-MM-DD, ET)." + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "Echoed request end date (YYYY-MM-DD, ET)." + }, + "filter": { "anyOf": [ { - "type": "string" + "additionalProperties": true, + "type": "object" }, { - "items": { - "type": "string" - }, - "type": "array" + "type": "null" } ], - "title": "Value" - } - }, - "type": "object", - "required": [ - "field", - "operator", - "value" - ], - "title": "PromptFilter", - "description": "Filter by prompt text" - }, - "PromptIdFilter": { - "properties": { - "field": { - "type": "string", - "const": "prompt_id", - "title": "Field" + "title": "Filter", + "description": "Echoed normalized filter tree, or null when no filter was sent." }, - "operator": { + "scope": { "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in" - ], - "title": "Operator" + "title": "Scope", + "description": "Asset scope: `all`, `owned`, or `custom` when `assets` was given." }, - "value": { + "assets": { "anyOf": [ { - "type": "string", - "format": "uuid" + "type": "string" }, { "items": { - "type": "string", - "format": "uuid" + "type": "string" }, "type": "array" + }, + { + "type": "null" } ], - "title": "Value" - } - }, - "type": "object", - "required": [ - "field", - "operator", - "value" - ], - "title": "PromptIdFilter", - "description": "Filter by prompt UUID." - }, - "PromptInput": { - "properties": { - "id": { - "type": "string", - "format": "uuid", - "title": "Id" + "title": "Assets", + "description": "Echoed `assets` selection; when set it overrides `scope`." }, - "name": { - "type": "string", - "title": "Name" + "metrics": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Metrics", + "description": "Metrics returned per row." } }, + "additionalProperties": true, "type": "object", "required": [ - "id", - "name" + "count", + "models", + "start_date", + "end_date", + "scope", + "metrics" ], - "title": "PromptInput" + "title": "ShoppingBrandsV2Info" }, - "PromptPreview": { + "ShoppingBrandsV2Query": { "properties": { - "id": { + "category_id": { "type": "string", - "title": "Id", - "description": "Generated prompt ID." + "format": "uuid", + "title": "Category Id" }, - "prompt": { + "start_date": { "type": "string", - "title": "Prompt", - "description": "The prompt text." - }, - "topic": { - "$ref": "#/components/schemas/NamedResource", - "description": "Resolved topic." + "title": "Start Date", + "description": "YYYY-MM-DD, ET, inclusive" }, - "language": { + "end_date": { "type": "string", - "title": "Language", - "description": "Language code." - }, - "tags": { - "items": { - "$ref": "#/components/schemas/NamedResource" - }, - "type": "array", - "title": "Tags", - "description": "Resolved tags.", - "default": [] - }, - "regions": { - "items": { - "$ref": "#/components/schemas/NamedResource" - }, - "type": "array", - "title": "Regions", - "description": "Resolved regions.", - "default": [] - }, - "platforms": { - "items": { - "$ref": "#/components/schemas/NamedResource" - }, - "type": "array", - "title": "Platforms", - "description": "Resolved platforms.", - "default": [] - }, - "personas": { - "items": { - "$ref": "#/components/schemas/NamedResource" - }, - "type": "array", - "title": "Personas", - "description": "Resolved personas.", - "default": [] + "title": "End Date", + "description": "YYYY-MM-DD, ET, inclusive" }, - "analysis_types": { + "group_by": { "items": { "type": "string", "enum": [ - "visibility", - "sentiment", - "sentiment_v2", - "accuracy" + "date", + "topic", + "region", + "prompt" ] }, "type": "array", - "title": "Analysis Types", - "description": "Analysis types assigned to this prompt.", - "default": [] + "title": "Group By" }, - "asset": { + "metrics": { "anyOf": [ { - "$ref": "#/components/schemas/NamedResource" + "items": { + "type": "string", + "enum": [ + "visibility_score", + "average_position", + "visibility_rank" + ] + }, + "type": "array" }, { "type": "null" } ], - "description": "Resolved asset, if applicable." - } - }, - "type": "object", - "required": [ - "id", - "prompt", - "topic", - "language" - ], - "title": "PromptPreview", - "description": "Preview of a prompt that was (or would be) created." - }, - "PromptType": { - "type": "string", - "enum": [ - "visibility", - "sentiment" - ], - "title": "PromptType" - }, - "PromptTypeFilter": { - "properties": { - "field": { + "title": "Metrics" + }, + "interval": { "type": "string", - "const": "prompt_type", - "title": "Field" + "enum": [ + "day", + "week", + "month" + ], + "title": "Interval", + "default": "day" }, - "operator": { + "scope": { "type": "string", "enum": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" + "owned", + "all" ], - "title": "Operator" + "title": "Scope", + "default": "owned" }, - "value": { + "assets": { "anyOf": [ { - "type": "string", - "enum": [ - "visibility", - "sentiment" - ] + "type": "string" }, { "items": { - "type": "string", - "enum": [ - "visibility", - "sentiment" - ] + "type": "string" }, "type": "array" + }, + { + "type": "null" + } + ], + "title": "Assets", + "description": "Restrict to these asset names (a name or list). Overrides `scope`." + }, + "filter": { + "anyOf": [ + { + "$ref": "#/components/schemas/FilterNode" + }, + { + "type": "null" } - ], - "title": "Value" - } - }, - "type": "object", - "required": [ - "field", - "operator", - "value" - ], - "title": "PromptTypeFilter", - "description": "Filter by prompt type (visibility or sentiment).\n\n.. deprecated::\n Use :class:`AnalysisTypeFilter` instead. ``prompt_type`` is normalised\n to ``analysis_type`` at parse time." - }, - "PromptUpdatePreview": { - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "ID of the updated prompt." + ] }, - "prompt": { + "limit": { "anyOf": [ { - "$ref": "#/components/schemas/FieldDiff" + "type": "integer", + "maximum": 50, + "exclusiveMinimum": 0 }, { "type": "null" } ], - "description": "Prompt text diff." + "title": "Limit", + "description": "Page size for scope=all; default 10, max 50." }, - "topic": { + "max_results": { "anyOf": [ { - "$ref": "#/components/schemas/FieldDiff" + "type": "integer", + "maximum": 50000, + "exclusiveMinimum": 0 }, { "type": "null" } ], - "description": "Topic diff." + "title": "Max Results", + "description": "Stream endpoint only: cap the number of streamed rows (default: all)." }, - "language": { + "cursor": { "anyOf": [ { - "$ref": "#/components/schemas/FieldDiff" + "type": "string" }, { "type": "null" } ], - "description": "Language diff." + "title": "Cursor" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "ShoppingBrandsV2Query" + }, + "ShoppingBrandsV2Response": { + "properties": { + "info": { + "$ref": "#/components/schemas/ShoppingBrandsV2Info" }, - "tags": { + "data": { + "items": { + "$ref": "#/components/schemas/ShoppingBrandRow" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "info", + "data" + ], + "title": "ShoppingBrandsV2Response" + }, + "ShoppingExecutionsQuery": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "comparison_start_date": { "anyOf": [ { - "$ref": "#/components/schemas/NamedResourceDiffList" + "type": "string", + "format": "date-time" }, { "type": "null" } ], - "description": "Tags added and removed." + "title": "Comparison Start Date" }, - "regions": { + "comparison_end_date": { "anyOf": [ { - "$ref": "#/components/schemas/NamedResourceDiffList" + "type": "string", + "format": "date-time" }, { "type": "null" } ], - "description": "Regions added and removed." + "title": "Comparison End Date" }, - "platforms": { + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "default": "day" + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/PromptIdFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + }, + { + "$ref": "#/components/schemas/BrandNameFilter" + }, + { + "$ref": "#/components/schemas/MerchantNameFilter" + }, + { + "$ref": "#/components/schemas/ProductNameFilter" + }, + { + "$ref": "#/components/schemas/profound_shopping__api__AssetNameFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "#/components/schemas/profound_shopping__api__AssetNameFilter", + "brand_name": "#/components/schemas/BrandNameFilter", + "merchant_name": "#/components/schemas/MerchantNameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "product_name": "#/components/schemas/ProductNameFilter", + "prompt_id": "#/components/schemas/PromptIdFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter" + } + } + }, + "type": "array", + "title": "Filters" + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By" + }, + "pagination": { "anyOf": [ { - "$ref": "#/components/schemas/NamedResourceDiffList" + "$ref": "#/components/schemas/Pagination" }, { "type": "null" } + ] + }, + "include_count": { + "type": "boolean", + "title": "Include Count", + "default": false + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "any", + "all" ], - "description": "Platforms added and removed." + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": false + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "analysis_types": { + "items": { + "type": "string", + "enum": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ] + }, + "type": "array", + "title": "Analysis Types" + }, + "analysis_filter_type": { + "type": "string", + "enum": [ + "any", + "all" + ], + "title": "Analysis Filter Type", + "default": "any" + }, + "owned_asset_names": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Owned Asset Names" + } + }, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "ShoppingExecutionsQuery" + }, + "ShoppingItemVisibilityQuery": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" }, - "personas": { - "anyOf": [ - { - "$ref": "#/components/schemas/NamedResourceDiffList" - }, - { - "type": "null" - } - ], - "description": "Personas added and removed." + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." }, - "analysis_types": { + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "comparison_start_date": { "anyOf": [ { - "$ref": "#/components/schemas/FieldDiff" + "type": "string", + "format": "date-time" }, { "type": "null" } ], - "description": "Analysis types diff." + "title": "Comparison Start Date" }, - "asset": { + "comparison_end_date": { "anyOf": [ { - "$ref": "#/components/schemas/FieldDiff" + "type": "string", + "format": "date-time" }, { "type": "null" } ], - "description": "Asset diff." - } - }, - "type": "object", - "required": [ - "id" - ], - "title": "PromptUpdatePreview", - "description": "Preview of changes applied (or to be applied) to a single prompt. Only changed fields are included." - }, - "QueryFanoutsQuery": { - "properties": { + "title": "Comparison End Date" + }, "date_interval": { "type": "string", "enum": [ @@ -13684,95 +25289,14 @@ "relative_week" ], "title": "Date Interval", - "description": "Date interval for the report. (only used with date dimension)", "default": "day" }, - "dimensions": { - "items": { - "type": "string", - "enum": [ - "prompt", - "query", - "model", - "region", - "date" - ] - }, - "type": "array", - "title": "Dimensions", - "description": "Dimensions to group the report by.", - "default": [] - }, - "metrics": { - "items": { - "type": "string", - "enum": [ - "fanouts_per_execution", - "total_fanouts", - "share", - "query_variations" - ] - }, - "type": "array", - "title": "Metrics" - }, - "order_by": { - "additionalProperties": { - "type": "string", - "enum": [ - "asc", - "desc" - ] - }, - "propertyNames": { - "enum": [ - "fanouts_per_execution", - "total_fanouts", - "share", - "query_variations", - "date" - ] - }, - "type": "object", - "title": "Order By", - "description": "Custom ordering. Keys must be a requested metric or the ``date`` dimension. Values are ``asc`` or ``desc``. Defaults to first metric descending.", - "default": {}, - "examples": [ - { - "fanouts_per_execution": "desc" - } - ] - }, - "pagination": { - "$ref": "#/components/schemas/Pagination", - "description": "Pagination settings for the report results." - }, - "category_id": { - "type": "string", - "format": "uuid", - "title": "Category Id" - }, - "start_date": { - "type": "string", - "format": "date-time", - "title": "Start Date", - "description": "Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." - }, - "end_date": { - "type": "string", - "format": "date-time", - "title": "End Date", - "description": "End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." - }, "filters": { "items": { "oneOf": [ { "$ref": "#/components/schemas/RegionIdFilter" }, - { - "$ref": "#/components/schemas/RegionNameFilter" - }, { "$ref": "#/components/schemas/ModelIdFilter" }, @@ -13789,24 +25313,31 @@ "$ref": "#/components/schemas/PersonaIdFilter" }, { - "$ref": "#/components/schemas/AnalysisTypeFilter" + "$ref": "#/components/schemas/BrandNameFilter" }, { - "$ref": "#/components/schemas/PromptTypeFilter" + "$ref": "#/components/schemas/MerchantNameFilter" + }, + { + "$ref": "#/components/schemas/ProductNameFilter" + }, + { + "$ref": "#/components/schemas/profound_shopping__api__AssetNameFilter" } ], "discriminator": { "propertyName": "field", "mapping": { - "analysis_type": "#/components/schemas/AnalysisTypeFilter", + "asset_name": "#/components/schemas/profound_shopping__api__AssetNameFilter", + "brand_name": "#/components/schemas/BrandNameFilter", + "merchant_name": "#/components/schemas/MerchantNameFilter", "model": "#/components/schemas/ModelIdFilter", "model_id": "#/components/schemas/ModelIdFilter", "persona_id": "#/components/schemas/PersonaIdFilter", + "product_name": "#/components/schemas/ProductNameFilter", "prompt_id": "#/components/schemas/PromptIdFilter", - "prompt_type": "#/components/schemas/PromptTypeFilter", "region": "#/components/schemas/RegionIdFilter", "region_id": "#/components/schemas/RegionIdFilter", - "region_name": "#/components/schemas/RegionNameFilter", "tag": "#/components/schemas/TagIdFilter", "tag_id": "#/components/schemas/TagIdFilter", "topic": "#/components/schemas/TopicIdFilter", @@ -13815,355 +25346,206 @@ } }, "type": "array", - "title": "Filters", - "description": "Filters to apply to the query fanout report." - } - }, - "type": "object", - "required": [ - "metrics", - "category_id", - "start_date", - "end_date" - ], - "title": "QueryFanoutsQuery" - }, - "QueryFanoutsV2Query": { - "properties": { - "category_id": { - "type": "string", - "title": "Category Id" + "title": "Filters" }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "YYYY-MM-DD, ET, inclusive" + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By" }, - "end_date": { + "pagination": { + "anyOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { + "type": "null" + } + ] + }, + "include_count": { + "type": "boolean", + "title": "Include Count", + "default": false + }, + "tag_filter_type": { "type": "string", - "title": "End Date", - "description": "YYYY-MM-DD, ET, inclusive" + "enum": [ + "any", + "all" + ], + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": false + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "period", + "product_key", + "product_name", + "brand_name", + "date", + "topic_id", + "prompt_id", + "prompt", + "product_url", + "product_image_urls", + "product_price" + ] + }, + "type": "array", + "title": "Dimensions" + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "visibility_score", + "share_of_voice", + "average_position", + "visibility_rank", + "position1_percentage", + "position2_percentage", + "position3_percentage", + "position_above3_percentage", + "product_rating", + "product_num_reviews", + "total_count" + ] + }, + "type": "array", + "title": "Metrics" + }, + "owned_asset_names": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Owned Asset Names" }, - "group_by": { + "include_items": { "items": { - "type": "string", - "enum": [ - "date", - "model", - "region", - "prompt", - "query" - ] + "type": "string" }, "type": "array", - "title": "Group By" + "title": "Include Items" }, - "metrics": { + "search_item": { "anyOf": [ { - "items": { - "type": "string", - "enum": [ - "fanouts_per_execution", - "total_fanouts", - "share", - "query_variations" - ] - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Metrics" + "title": "Search Item" }, - "interval": { + "merchant_filter_type": { "type": "string", "enum": [ - "day", - "week", - "month" + "any", + "all" ], - "title": "Interval", - "default": "day" - }, - "filter": { - "anyOf": [ - { - "$ref": "#/components/schemas/FilterNode" - }, - { - "type": "null" - } - ] + "title": "Merchant Filter Type", + "default": "any" }, - "sort": { - "anyOf": [ - { - "$ref": "#/components/schemas/app__routes__v2__answer_engine_insights__reports__query_fanouts__SortSpec" - }, - { - "type": "null" - } - ] + "include_competitors": { + "type": "boolean", + "title": "Include Competitors", + "default": false }, - "limit": { + "target_product": { "anyOf": [ { - "type": "integer", - "maximum": 50, - "exclusiveMinimum": 0 + "type": "string" }, { "type": "null" } ], - "title": "Limit", - "description": "Page size; default 10, max 50." + "title": "Target Product" }, - "max_results": { - "anyOf": [ - { - "type": "integer", - "exclusiveMinimum": 0 - }, - { - "type": "null" - } - ], - "title": "Max Results", - "description": "Stream endpoint only: cap the number of streamed rows (default: all)." + "competitor_limit": { + "type": "integer", + "minimum": 1, + "title": "Competitor Limit", + "default": 5 }, - "cursor": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Cursor" + "include_position_frequency": { + "type": "boolean", + "title": "Include Position Frequency", + "default": false } }, - "additionalProperties": false, "type": "object", "required": [ "category_id", "start_date", "end_date" ], - "title": "QueryFanoutsV2Query" - }, - "Recommendation": { - "properties": { - "title": { - "type": "string", - "title": "Title" - }, - "status": { - "$ref": "#/components/schemas/RecommendationStatus" - }, - "impact": { - "anyOf": [ - { - "$ref": "#/components/schemas/RecommendationImpact" - }, - { - "type": "null" - } - ] - }, - "suggestion": { - "$ref": "#/components/schemas/RecommendationSuggestion" - } - }, - "type": "object", - "required": [ - "title", - "status", - "impact", - "suggestion" - ], - "title": "Recommendation" - }, - "RecommendationImpact": { - "properties": { - "section": { - "type": "string", - "title": "Section" - }, - "score": { - "type": "number", - "title": "Score" - } - }, - "type": "object", - "required": [ - "section", - "score" - ], - "title": "RecommendationImpact" - }, - "RecommendationStatus": { - "type": "string", - "enum": [ - "done", - "pending" - ], - "title": "RecommendationStatus" - }, - "RecommendationSuggestion": { - "properties": { - "text": { - "type": "string", - "title": "Text" - }, - "rationale": { - "type": "string", - "title": "Rationale" - } - }, - "type": "object", - "required": [ - "text", - "rationale" - ], - "title": "RecommendationSuggestion" - }, - "ReferralSourceFilter": { - "properties": { - "field": { - "type": "string", - "const": "referral_source", - "title": "Field" - }, - "operator": { - "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" - ], - "title": "Operator" - }, - "value": { - "anyOf": [ - { - "type": "string", - "enum": [ - "openai", - "none", - "anthropic", - "deepseek", - "perplexity", - "you", - "grok", - "microsoft", - "gemini", - "internal", - "other" - ] - }, - { - "items": { - "type": "string", - "enum": [ - "openai", - "none", - "anthropic", - "deepseek", - "perplexity", - "you", - "grok", - "microsoft", - "gemini", - "internal", - "other" - ] - }, - "type": "array" - } - ], - "title": "Value" - } - }, - "type": "object", - "required": [ - "field", - "operator", - "value" - ], - "title": "ReferralSourceFilter", - "description": "Filter by referral source" + "title": "ShoppingItemVisibilityQuery" }, - "ReferralTypeFilter": { + "ShoppingMerchantByItemsQuery": { "properties": { - "field": { + "category_id": { "type": "string", - "const": "referral_type", - "title": "Field" + "format": "uuid", + "title": "Category Id" }, - "operator": { + "start_date": { "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" + "format": "date-time", + "title": "Start Date", + "description": "Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "comparison_start_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } ], - "title": "Operator" + "title": "Comparison Start Date" }, - "value": { + "comparison_end_date": { "anyOf": [ { "type": "string", - "enum": [ - "internal", - "referer", - "utm", - "none" - ] + "format": "date-time" }, { - "items": { - "type": "string", - "enum": [ - "internal", - "referer", - "utm", - "none" - ] - }, - "type": "array" + "type": "null" } ], - "title": "Value" - } - }, - "type": "object", - "required": [ - "field", - "operator", - "value" - ], - "title": "ReferralTypeFilter", - "description": "Filter by referral type" - }, - "ReferralsQuery": { - "properties": { + "title": "Comparison End Date" + }, "date_interval": { "type": "string", "enum": [ @@ -14171,139 +25553,211 @@ "day", "week", "month", + "quarter", "year", "relative_week" ], "title": "Date Interval", - "description": "Date interval for the report. (only used with date dimension)", "default": "day" }, - "dimensions": { + "filters": { "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/PromptIdFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + }, + { + "$ref": "#/components/schemas/BrandNameFilter" + }, + { + "$ref": "#/components/schemas/MerchantNameFilter" + }, + { + "$ref": "#/components/schemas/ProductNameFilter" + }, + { + "$ref": "#/components/schemas/profound_shopping__api__AssetNameFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "#/components/schemas/profound_shopping__api__AssetNameFilter", + "brand_name": "#/components/schemas/BrandNameFilter", + "merchant_name": "#/components/schemas/MerchantNameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "product_name": "#/components/schemas/ProductNameFilter", + "prompt_id": "#/components/schemas/PromptIdFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter" + } + } + }, + "type": "array", + "title": "Filters" + }, + "order_by": { + "additionalProperties": { "type": "string", "enum": [ - "date", - "path", - "referral_source" + "asc", + "desc" ] }, - "type": "array", - "title": "Dimensions", - "description": "Dimensions to group the report by.", - "default": [] + "type": "object", + "title": "Order By" }, - "metrics": { + "pagination": { + "anyOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { + "type": "null" + } + ] + }, + "include_count": { + "type": "boolean", + "title": "Include Count", + "default": false + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "any", + "all" + ], + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": false + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "dimensions": { "items": { "type": "string", "enum": [ - "visits", - "last_visit" + "period", + "merchant_name", + "product_name", + "brand_name", + "product_image_urls", + "product_price", + "merchant_prices", + "has_instant_checkout", + "delivery_options", + "merchant_url" ] }, "type": "array", - "title": "Metrics" + "title": "Dimensions" }, - "order_by": { - "additionalProperties": { + "metrics": { + "items": { "type": "string", "enum": [ - "asc", - "desc" - ] - }, - "propertyNames": { - "enum": [ - "date", - "path", - "referral_source", - "visits", - "last_visit" + "merchant_visibility", + "product_visibility", + "product_rank", + "avg_position", + "total_count" ] }, - "type": "object", - "title": "Order By", - "description": "\nCustom ordering of the report results.\n\nThe order is a record of key-value pairs where:\n- key is the field to order by, which can be a metric or dimension\n- value is the direction of the order, either 'asc' for ascending or 'desc' for descending.\n\nWhen not specified, the default order is the first metric in the query descending.\n ", - "default": {}, - "examples": [ + "type": "array", + "title": "Metrics" + }, + "product_name": { + "anyOf": [ { - "date": "asc" + "type": "string" + }, + { + "type": "null" } - ] - }, - "pagination": { - "$ref": "#/components/schemas/Pagination", - "description": "Pagination settings for the report results." - }, - "domain": { + ], + "title": "Product Name" + } + }, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "ShoppingMerchantByItemsQuery" + }, + "ShoppingMerchantDistributionQuery": { + "properties": { + "category_id": { "type": "string", - "title": "Domain", - "description": "Domain to query logs for." + "format": "uuid", + "title": "Category Id" }, "start_date": { "type": "string", "format": "date-time", "title": "Start Date", - "description": "Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp." + "description": "Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." }, "end_date": { "type": "string", "format": "date-time", "title": "End Date", - "description": "End date for logs. Accepts same formats as start_date. Defaults to now if omitted." + "description": "End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." }, - "organization_id": { + "comparison_start_date": { "anyOf": [ { "type": "string", - "format": "uuid" + "format": "date-time" }, { "type": "null" } ], - "title": "Organization Id" - }, - "metric_filters": { - "items": { - "$ref": "#/components/schemas/NumericMetricFilter" - }, - "type": "array", - "title": "Metric Filters", - "description": "Numeric filters applied after report metrics are calculated." + "title": "Comparison Start Date" }, - "filters": { - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/PathFilter" - }, - { - "$ref": "#/components/schemas/ReferralSourceFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "path": "#/components/schemas/PathFilter", - "referral_source": "#/components/schemas/ReferralSourceFilter" - } + "comparison_end_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" } - }, - "type": "array", - "title": "Filters", - "description": "Filters for referrals report." - } - }, - "type": "object", - "required": [ - "metrics", - "domain", - "start_date" - ], - "title": "ReferralsQuery" - }, - "ReferralsQueryV2": { - "properties": { + ], + "title": "Comparison End Date" + }, "date_interval": { "type": "string", "enum": [ @@ -14316,35 +25770,64 @@ "relative_week" ], "title": "Date Interval", - "description": "Date interval for the report. (only used with date dimension)", "default": "day" }, - "dimensions": { - "items": { - "type": "string", - "enum": [ - "date", - "hour", - "path", - "referral_source", - "referral_type" - ] - }, - "type": "array", - "title": "Dimensions", - "description": "Dimensions to group the report by.", - "default": [] - }, - "metrics": { + "filters": { "items": { - "type": "string", - "enum": [ - "visits", - "last_visit" - ] + "oneOf": [ + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/PromptIdFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + }, + { + "$ref": "#/components/schemas/BrandNameFilter" + }, + { + "$ref": "#/components/schemas/MerchantNameFilter" + }, + { + "$ref": "#/components/schemas/ProductNameFilter" + }, + { + "$ref": "#/components/schemas/profound_shopping__api__AssetNameFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "#/components/schemas/profound_shopping__api__AssetNameFilter", + "brand_name": "#/components/schemas/BrandNameFilter", + "merchant_name": "#/components/schemas/MerchantNameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "product_name": "#/components/schemas/ProductNameFilter", + "prompt_id": "#/components/schemas/PromptIdFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter" + } + } }, "type": "array", - "title": "Metrics" + "title": "Filters" }, "order_by": { "additionalProperties": { @@ -14354,625 +25837,634 @@ "desc" ] }, - "propertyNames": { - "enum": [ - "date", - "hour", - "path", - "referral_source", - "visits", - "last_visit", - "referral_type" - ] - }, "type": "object", - "title": "Order By", - "description": "\nCustom ordering of the report results.\n\nThe order is a record of key-value pairs where:\n- key is the field to order by, which can be a metric or dimension\n- value is the direction of the order, either 'asc' for ascending or 'desc' for descending.\n\nWhen not specified, the default order is the first metric in the query descending.\n ", - "default": {}, - "examples": [ - { - "date": "asc" - } - ] + "title": "Order By" }, "pagination": { - "$ref": "#/components/schemas/Pagination", - "description": "Pagination settings for the report results." - }, - "domain": { - "type": "string", - "title": "Domain", - "description": "Domain to query logs for." - }, - "start_date": { - "type": "string", - "format": "date-time", - "title": "Start Date", - "description": "Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp." - }, - "end_date": { - "type": "string", - "format": "date-time", - "title": "End Date", - "description": "End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted." - }, - "organization_id": { "anyOf": [ { - "type": "string", - "format": "uuid" + "$ref": "#/components/schemas/Pagination" }, { "type": "null" } + ] + }, + "include_count": { + "type": "boolean", + "title": "Include Count", + "default": false + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "any", + "all" ], - "title": "Organization Id" + "title": "Tag Filter Type", + "default": "any" }, - "metric_filters": { + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": false + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "dimensions": { "items": { - "$ref": "#/components/schemas/NumericMetricFilter" + "type": "string", + "enum": [ + "period", + "merchant_name", + "date", + "owned_asset_name" + ] }, "type": "array", - "title": "Metric Filters", - "description": "Numeric filters applied after report metrics are calculated." + "title": "Dimensions" }, - "filters": { + "metrics": { "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/PathFilter" - }, - { - "$ref": "#/components/schemas/ReferralSourceFilter" - }, - { - "$ref": "#/components/schemas/ReferralTypeFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "path": "#/components/schemas/PathFilter", - "referral_source": "#/components/schemas/ReferralSourceFilter", - "referral_type": "#/components/schemas/ReferralTypeFilter" - } - } + "type": "string", + "enum": [ + "offer_count", + "product_count", + "average_rank", + "share_of_offers", + "visibility_rank", + "total_count" + ] + }, + "type": "array", + "title": "Metrics" + }, + "owned_asset_names": { + "items": { + "type": "string" }, "type": "array", - "title": "Filters", - "description": "Filters for referrals report." + "title": "Owned Asset Names" + }, + "search_merchant": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Search Merchant" } }, "type": "object", "required": [ - "metrics", - "domain", - "start_date" + "category_id", + "start_date", + "end_date" ], - "title": "ReferralsQueryV2" + "title": "ShoppingMerchantDistributionQuery" }, - "RegionIdFilter": { + "ShoppingMerchantRow": { "properties": { - "field": { + "merchant_name": { "anyOf": [ { - "type": "string", - "const": "region_id" + "type": "string" }, { - "type": "string", - "const": "region", - "deprecated": true + "type": "null" } ], - "title": "Field" + "title": "Merchant Name" }, - "operator": { - "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in" + "merchant_share": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } ], - "title": "Operator" + "title": "Merchant Share" }, - "value": { + "merchant_share_rank": { "anyOf": [ { - "type": "string", - "format": "uuid" + "type": "integer" }, { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "null" } ], - "title": "Value" - } - }, - "type": "object", - "required": [ - "field", - "operator", - "value" - ], - "title": "RegionIdFilter", - "description": "Filter by region UUID." - }, - "RegionNameFilter": { - "properties": { - "field": { - "type": "string", - "const": "region_name", - "title": "Field" + "title": "Merchant Share Rank" }, - "operator": { - "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" + "merchant_visibility": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } ], - "title": "Operator" + "title": "Merchant Visibility" }, - "value": { + "merchant_visibility_rank": { "anyOf": [ { - "type": "string" + "type": "integer" }, { - "items": { - "type": "string" - }, - "type": "array" + "type": "null" } ], - "title": "Value" - } - }, - "type": "object", - "required": [ - "field", - "operator", - "value" - ], - "title": "RegionNameFilter", - "description": "Filter by region name." - }, - "Response": { - "properties": { - "info": { - "$ref": "#/components/schemas/Info" - }, - "data": { - "items": { - "$ref": "#/components/schemas/Result" - }, - "type": "array", - "title": "Data" - } - }, - "type": "object", - "required": [ - "info", - "data" - ], - "title": "Response", - "description": "Base response model for reports." - }, - "Result": { - "properties": { - "metrics": { - "items": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "number" - } - ] - }, - "type": "array", - "title": "Metrics" - }, - "dimensions": { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "string", - "format": "uuid" - } - ] - }, - "type": "array", - "title": "Dimensions" - } - }, - "type": "object", - "required": [ - "metrics", - "dimensions" - ], - "title": "Result", - "description": "Base model for report results." - }, - "RootDomainFilter": { - "properties": { - "field": { - "type": "string", - "const": "root_domain", - "title": "Field" + "title": "Merchant Visibility Rank" }, - "operator": { - "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" + "date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } ], - "title": "Operator" + "title": "Date" }, - "value": { + "visibility_rank": { "anyOf": [ { - "type": "string" + "type": "integer" }, { - "items": { - "type": "string" - }, - "type": "array" + "type": "null" } ], - "title": "Value" - } - }, - "type": "object", - "required": [ - "field", - "operator", - "value" - ], - "title": "RootDomainFilter", - "description": "Filter by root domain" - }, - "RunAgentRequest": { - "properties": { - "inputs": { - "additionalProperties": true, - "type": "object", - "title": "Inputs", - "description": "Input values for the run. Keys should match the property names defined in `schema.input`. Omit the request body when the agent does not require inputs." - } - }, - "additionalProperties": false, - "type": "object", - "title": "RunAgentRequest", - "description": "Request body for starting an agent run." - }, - "SearchKnowledgeBaseFilters": { - "properties": { - "tags": { + "title": "Visibility Rank" + }, + "brand_name": { "anyOf": [ { - "items": { - "type": "string", - "minLength": 1 - }, - "type": "array", - "minItems": 1 + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Brand Name" + }, + "brand_share": { + "anyOf": [ + { + "type": "number" }, { "type": "null" } ], - "title": "Tags", - "description": "Optional tags to match. Documents with any matching tag are included." + "title": "Brand Share" }, - "folders": { + "product": { "anyOf": [ { - "items": { - "type": "string", - "minLength": 1 - }, - "type": "array", - "maxItems": 1, - "minItems": 1 + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "title": "Folders", - "description": "Optional folder paths to search within. Currently limited to one folder." - } - }, - "additionalProperties": false, - "type": "object", - "title": "SearchKnowledgeBaseFilters" - }, - "SearchKnowledgeBaseRequest": { - "properties": { - "query": { - "type": "string", - "minLength": 1, - "title": "Query", - "description": "Search query." - }, - "top_k": { - "type": "integer", - "maximum": 100, - "minimum": 1, - "title": "Top K", - "description": "Maximum number of results to return." - }, - "return_full_page": { - "type": "boolean", - "title": "Return Full Page", - "description": "Return full page content instead of snippets.", - "default": false + "title": "Product" }, - "filters": { + "product_visibility": { "anyOf": [ { - "$ref": "#/components/schemas/SearchKnowledgeBaseFilters" + "type": "number" }, { "type": "null" } ], - "description": "Optional search filters." - } - }, - "additionalProperties": false, - "type": "object", - "required": [ - "query", - "top_k" - ], - "title": "SearchKnowledgeBaseRequest" - }, - "SearchQueryFilter": { - "properties": { - "field": { - "type": "string", - "const": "search_query", - "title": "Field" - }, - "operator": { - "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" - ], - "title": "Operator" + "title": "Product Visibility" }, - "value": { + "product_rank": { "anyOf": [ { - "type": "string" + "type": "integer" }, { - "items": { - "type": "string" - }, - "type": "array" + "type": "null" } ], - "title": "Value" + "title": "Product Rank" } }, + "additionalProperties": true, "type": "object", - "required": [ - "field", - "operator", - "value" - ], - "title": "SearchQueryFilter", - "description": "Filter by web-search query string." + "title": "ShoppingMerchantRow", + "description": "One merchant row. `brand_name`/`brand_share` appear in the brand-share view; `product`/product\nmetrics in the top-products view; metrics vary by view." }, - "SentimentDataPoint": { + "ShoppingMerchantShareQuery": { "properties": { - "scores": { - "$ref": "#/components/schemas/SentimentPeriodScores" + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" }, - "date": { + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + }, + "comparison_start_date": { "anyOf": [ { - "type": "string" + "type": "string", + "format": "date-time" }, { "type": "null" } ], - "title": "Date" + "title": "Comparison Start Date" }, - "prev_date": { + "comparison_end_date": { "anyOf": [ { - "type": "string" + "type": "string", + "format": "date-time" }, { "type": "null" } ], - "title": "Prev Date" + "title": "Comparison End Date" }, - "group_ids": { - "anyOf": [ - { - "additionalProperties": { - "type": "string" + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "default": "day" + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/RegionIdFilter" }, - "type": "object" - }, - { - "type": "null" + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/PromptIdFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + }, + { + "$ref": "#/components/schemas/BrandNameFilter" + }, + { + "$ref": "#/components/schemas/MerchantNameFilter" + }, + { + "$ref": "#/components/schemas/ProductNameFilter" + }, + { + "$ref": "#/components/schemas/profound_shopping__api__AssetNameFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "#/components/schemas/profound_shopping__api__AssetNameFilter", + "brand_name": "#/components/schemas/BrandNameFilter", + "merchant_name": "#/components/schemas/MerchantNameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "product_name": "#/components/schemas/ProductNameFilter", + "prompt_id": "#/components/schemas/PromptIdFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter" + } } - ], - "title": "Group Ids" + }, + "type": "array", + "title": "Filters" }, - "group_names": { + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By" + }, + "pagination": { "anyOf": [ { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "$ref": "#/components/schemas/Pagination" }, { "type": "null" } + ] + }, + "include_count": { + "type": "boolean", + "title": "Include Count", + "default": false + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "any", + "all" ], - "title": "Group Names" + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": false + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "period", + "topic_id", + "prompt_id" + ] + }, + "type": "array", + "title": "Dimensions" }, - "group_metadata": { - "anyOf": [ - { - "$ref": "#/components/schemas/SentimentGroupMetadata" - }, - { - "type": "null" - } - ] + "metrics": { + "items": { + "type": "string", + "const": "merchant_share" + }, + "type": "array", + "title": "Metrics" }, - "cited_website_hrefs": { + "target_asset_names": { "items": { "type": "string" }, "type": "array", - "title": "Cited Website Hrefs" + "title": "Target Asset Names" }, - "total_count": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Total Count" + "owned_asset_names": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Owned Asset Names" } }, "type": "object", "required": [ - "scores" + "category_id", + "start_date", + "end_date" ], - "title": "SentimentDataPoint" + "title": "ShoppingMerchantShareQuery" }, - "SentimentGroupMetadata": { + "ShoppingMerchantVisibilityByBrandQuery": { "properties": { - "theme_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Theme Id" + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" }, - "theme": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Theme" + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." }, - "claim_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Claim Id" + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." }, - "claim": { + "comparison_start_date": { "anyOf": [ { - "type": "string" + "type": "string", + "format": "date-time" }, { "type": "null" } ], - "title": "Claim" + "title": "Comparison Start Date" }, - "sentiment": { + "comparison_end_date": { "anyOf": [ { "type": "string", - "enum": [ - "positive", - "negative" - ] + "format": "date-time" }, { "type": "null" } ], - "title": "Sentiment" + "title": "Comparison End Date" }, - "prompt_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" ], - "title": "Prompt Id" + "title": "Date Interval", + "default": "day" }, - "prompt_text": { + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/PromptIdFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + }, + { + "$ref": "#/components/schemas/BrandNameFilter" + }, + { + "$ref": "#/components/schemas/MerchantNameFilter" + }, + { + "$ref": "#/components/schemas/ProductNameFilter" + }, + { + "$ref": "#/components/schemas/profound_shopping__api__AssetNameFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "#/components/schemas/profound_shopping__api__AssetNameFilter", + "brand_name": "#/components/schemas/BrandNameFilter", + "merchant_name": "#/components/schemas/MerchantNameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "product_name": "#/components/schemas/ProductNameFilter", + "prompt_id": "#/components/schemas/PromptIdFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter" + } + } + }, + "type": "array", + "title": "Filters" + }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By" + }, + "pagination": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/Pagination" }, { "type": "null" } + ] + }, + "include_count": { + "type": "boolean", + "title": "Include Count", + "default": false + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "any", + "all" ], - "title": "Prompt Text" + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": false + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "period", + "merchant_name", + "brand_name" + ] + }, + "type": "array", + "title": "Dimensions" + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "visibility_score", + "share_of_voice", + "average_position", + "visibility_rank", + "total_count" + ] + }, + "type": "array", + "title": "Metrics" + }, + "owned_asset_names": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Owned Asset Names" }, - "topic_id": { + "search_brand": { "anyOf": [ { "type": "string" @@ -14981,9 +26473,9 @@ "type": "null" } ], - "title": "Topic Id" + "title": "Search Brand" }, - "run_id": { + "include_brand": { "anyOf": [ { "type": "string" @@ -14992,31 +26484,42 @@ "type": "null" } ], - "title": "Run Id" + "title": "Include Brand" }, - "created_at": { + "include_brand_only": { + "type": "boolean", + "title": "Include Brand Only", + "default": false + } + }, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "ShoppingMerchantVisibilityByBrandQuery" + }, + "ShoppingMerchantsV2Info": { + "properties": { + "total_results": { "anyOf": [ { - "type": "string" + "type": "integer" }, { "type": "null" } ], - "title": "Created At" + "title": "Total Results", + "description": "Total rows matching the query before pagination (null when not computed)." }, - "model_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Model Id" + "count": { + "type": "integer", + "title": "Count", + "description": "Number of rows returned in `data` for this page." }, - "region_id": { + "next_cursor": { "anyOf": [ { "type": "string" @@ -15025,287 +26528,290 @@ "type": "null" } ], - "title": "Region Id" + "title": "Next Cursor", + "description": "Opaque cursor for the next page; null on the last page." }, - "persona_id": { + "models": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Models", + "description": "Display names of the models the report covers." + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "Echoed request start date (YYYY-MM-DD, ET)." + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "Echoed request end date (YYYY-MM-DD, ET)." + }, + "filter": { "anyOf": [ { - "type": "string" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "title": "Persona Id" + "title": "Filter", + "description": "Echoed normalized filter tree, or null when no filter was sent." }, - "asset_name": { + "view": { + "type": "string", + "title": "View", + "description": "`distribution`, `brand_share`, or `top_products`." + }, + "metrics": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Metrics", + "description": "Metrics returned per row." + } + }, + "additionalProperties": true, + "type": "object", + "required": [ + "count", + "models", + "start_date", + "end_date", + "view", + "metrics" + ], + "title": "ShoppingMerchantsV2Info" + }, + "ShoppingMerchantsV2Query": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "YYYY-MM-DD, ET, inclusive" + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "YYYY-MM-DD, ET, inclusive" + }, + "group_by": { + "items": { + "type": "string", + "enum": [ + "date", + "brand", + "product" + ] + }, + "type": "array", + "title": "Group By", + "description": "`[]` = distribution; `[brand]` = brand share within each merchant; `[product]` = top products per merchant. `date` (distribution only) adds a time series." + }, + "metrics": { "anyOf": [ { - "type": "string" + "items": { + "type": "string", + "enum": [ + "merchant_share", + "merchant_share_rank", + "merchant_visibility", + "merchant_visibility_rank", + "visibility_rank", + "brand_share", + "product_visibility", + "product_rank" + ] + }, + "type": "array" }, { "type": "null" } ], - "title": "Asset Name" + "title": "Metrics", + "description": "Defaults to the chosen view's metrics; must be valid for that view." }, - "child_count_total": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } + "interval": { + "type": "string", + "enum": [ + "day", + "week", + "month" ], - "title": "Child Count Total" + "title": "Interval", + "default": "day" }, - "child_count_matching": { + "filter": { "anyOf": [ { - "type": "integer" + "$ref": "#/components/schemas/FilterNode" }, { "type": "null" } - ], - "title": "Child Count Matching" + ] }, - "parent_matches_search": { + "limit": { "anyOf": [ { - "type": "boolean" + "type": "integer", + "maximum": 50, + "exclusiveMinimum": 0 }, { "type": "null" } ], - "title": "Parent Matches Search" + "title": "Limit", + "description": "Page size; default 10, max 50." }, - "child_matches_search": { + "max_results": { "anyOf": [ { - "type": "boolean" + "type": "integer", + "maximum": 50000, + "exclusiveMinimum": 0 }, { "type": "null" } ], - "title": "Child Matches Search" - } - }, - "type": "object", - "title": "SentimentGroupMetadata" - }, - "SentimentPeriodScores": { - "properties": { - "current": { - "anyOf": [ - { - "$ref": "#/components/schemas/SentimentScores" - }, - { - "type": "null" - } - ] + "title": "Max Results", + "description": "Stream endpoint only: cap streamed rows." }, - "previous": { + "cursor": { "anyOf": [ { - "$ref": "#/components/schemas/SentimentScores" + "type": "string" }, { "type": "null" } - ] - } - }, - "type": "object", - "title": "SentimentPeriodScores" - }, - "SentimentQuery": { - "properties": { - "date_interval": { - "type": "string", - "enum": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" - ], - "title": "Date Interval", - "description": "Date interval for the report. (only used with date dimension)", - "default": "day" - }, - "dimensions": { - "items": { - "type": "string", - "enum": [ - "theme", - "date", - "region", - "topic", - "topic_id", - "model", - "asset_id", - "asset_name", - "tag", - "prompt", - "prompt_id", - "sentiment_type", - "persona" - ] - }, - "type": "array", - "title": "Dimensions", - "description": "Dimensions to group the report by.", - "default": [] - }, - "metrics": { - "items": { - "type": "string", - "enum": [ - "positive", - "negative", - "occurrences" - ] - }, - "type": "array", - "title": "Metrics" - }, - "order_by": { - "additionalProperties": { - "type": "string", - "enum": [ - "asc", - "desc" - ] - }, - "type": "object", - "title": "Order By", - "description": "\nCustom ordering of the report results.\n\nThe order is a record of key-value pairs where:\n- key is the field to order by, which can be a metric or dimension\n- value is the direction of the order, either 'asc' for ascending or 'desc' for descending.\n\nWhen not specified, the default order is the first metric in the query descending.\n ", - "default": {}, - "examples": [ - { - "date": "asc" - } - ] - }, - "pagination": { - "$ref": "#/components/schemas/Pagination", - "description": "Pagination settings for the report results." + ], + "title": "Cursor" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "ShoppingMerchantsV2Query" + }, + "ShoppingMerchantsV2Response": { + "properties": { + "info": { + "$ref": "#/components/schemas/ShoppingMerchantsV2Info" }, + "data": { + "items": { + "$ref": "#/components/schemas/ShoppingMerchantRow" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "info", + "data" + ], + "title": "ShoppingMerchantsV2Response" + }, + "ShoppingProductMerchantUrlsQuery": { + "properties": { "category_id": { "type": "string", "format": "uuid", "title": "Category Id" }, + "product_names": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Product Names" + }, "start_date": { "type": "string", "format": "date-time", - "title": "Start Date", - "description": "Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + "title": "Start Date" }, "end_date": { "type": "string", "format": "date-time", - "title": "End Date", - "description": "End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." - }, - "filters": { - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/AssetIdFilter" - }, - { - "$ref": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter" - }, - { - "$ref": "#/components/schemas/ThemeFilter" - }, - { - "$ref": "#/components/schemas/RegionIdFilter" - }, - { - "$ref": "#/components/schemas/RegionNameFilter" - }, - { - "$ref": "#/components/schemas/TopicIdFilter" - }, - { - "$ref": "#/components/schemas/TopicNameFilter" - }, - { - "$ref": "#/components/schemas/ModelIdFilter" - }, - { - "$ref": "#/components/schemas/TagIdFilter" - }, - { - "$ref": "#/components/schemas/TagNameFilter" - }, - { - "$ref": "#/components/schemas/PromptFilter" - }, - { - "$ref": "#/components/schemas/PersonaIdFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "asset_id": "#/components/schemas/AssetIdFilter", - "asset_name": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter", - "model": "#/components/schemas/ModelIdFilter", - "model_id": "#/components/schemas/ModelIdFilter", - "persona_id": "#/components/schemas/PersonaIdFilter", - "prompt": "#/components/schemas/PromptFilter", - "region": "#/components/schemas/RegionIdFilter", - "region_id": "#/components/schemas/RegionIdFilter", - "region_name": "#/components/schemas/RegionNameFilter", - "tag": "#/components/schemas/TagIdFilter", - "tag_id": "#/components/schemas/TagIdFilter", - "tag_name": "#/components/schemas/TagNameFilter", - "theme": "#/components/schemas/ThemeFilter", - "topic": "#/components/schemas/TopicIdFilter", - "topic_id": "#/components/schemas/TopicIdFilter", - "topic_name": "#/components/schemas/TopicNameFilter" - } - } - }, - "type": "array", - "title": "Filters", - "description": "List of filters to apply to the sentiment report." + "title": "End Date" } }, "type": "object", "required": [ - "metrics", "category_id", + "product_names", "start_date", "end_date" ], - "title": "SentimentQuery" + "title": "ShoppingProductMerchantUrlsQuery" }, - "SentimentScores": { + "ShoppingProductRow": { "properties": { - "positive_sentiment": { - "type": "number", - "title": "Positive Sentiment" + "product": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Product" }, - "negative_sentiment": { - "type": "number", - "title": "Negative Sentiment" + "date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Date" }, - "assessment_count": { - "type": "integer", - "title": "Assessment Count" + "topic": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] }, - "occurrence": { + "prompt": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "visibility_score": { "anyOf": [ { "type": "number" @@ -15314,20 +26820,20 @@ "type": "null" } ], - "title": "Occurrence" + "title": "Visibility Score" }, - "response_count": { + "average_position": { "anyOf": [ { - "type": "integer" + "type": "number" }, { "type": "null" } ], - "title": "Response Count" + "title": "Average Position" }, - "total_response_count": { + "visibility_rank": { "anyOf": [ { "type": "integer" @@ -15336,268 +26842,216 @@ "type": "null" } ], - "title": "Total Response Count" - } - }, - "type": "object", - "required": [ - "positive_sentiment", - "negative_sentiment", - "assessment_count" - ], - "title": "SentimentScores" - }, - "SentimentTheme": { - "properties": { - "type": { + "title": "Visibility Rank" + }, + "position1_percentage": { "anyOf": [ { - "type": "string", - "const": "positive" + "type": "number" }, { - "type": "string", - "const": "negative" + "type": "null" } ], - "title": "Type" + "title": "Position1 Percentage" }, - "name": { - "type": "string", - "title": "Name" - } - }, - "type": "object", - "required": [ - "type", - "name" - ], - "title": "SentimentTheme" - }, - "SentimentV2ClaimFilter": { - "properties": { - "field": { - "type": "string", - "const": "claim", - "title": "Field" + "position2_percentage": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Position2 Percentage" }, - "operator": { - "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" + "position3_percentage": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Position3 Percentage" + }, + "position_above3_percentage": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Position Above3 Percentage" + }, + "product_rating": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Product Rating" + }, + "product_num_reviews": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } ], - "title": "Operator" + "title": "Product Num Reviews" }, - "value": { + "product_url": { "anyOf": [ { "type": "string" }, + { + "type": "null" + } + ], + "title": "Product Url" + }, + "product_image_urls": { + "anyOf": [ { "items": { "type": "string" }, "type": "array" + }, + { + "type": "null" } ], - "title": "Value" - } - }, - "type": "object", - "required": [ - "field", - "operator", - "value" - ], - "title": "SentimentV2ClaimFilter" - }, - "SentimentV2ClaimIdFilter": { - "properties": { - "field": { - "type": "string", - "const": "claim_id", - "title": "Field" - }, - "operator": { - "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in" - ], - "title": "Operator" + "title": "Product Image Urls" }, - "value": { + "merchants": { "anyOf": [ - { - "type": "string", - "format": "uuid" - }, { "items": { - "type": "string", - "format": "uuid" + "additionalProperties": true, + "type": "object" }, "type": "array" + }, + { + "type": "null" } ], - "title": "Value" + "title": "Merchants", + "description": "Per-product merchant offers `{name, price}` (only with `include_merchants`)." } }, + "additionalProperties": true, "type": "object", - "required": [ - "field", - "operator", - "value" - ], - "title": "SentimentV2ClaimIdFilter" + "title": "ShoppingProductRow", + "description": "One product row. Merchant fields present only when `include_merchants` is true." }, - "SentimentV2ModelIdFilter": { + "ShoppingProductsV2Info": { "properties": { - "field": { - "type": "string", - "const": "model_id", - "title": "Field" - }, - "operator": { - "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in" - ], - "title": "Operator" - }, - "value": { + "total_results": { "anyOf": [ { - "type": "string", - "format": "uuid" + "type": "integer" }, { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "null" } ], - "title": "Value" - } - }, - "type": "object", - "required": [ - "field", - "operator", - "value" - ], - "title": "SentimentV2ModelIdFilter" - }, - "SentimentV2PersonaIdFilter": { - "properties": { - "field": { - "type": "string", - "const": "persona_id", - "title": "Field" + "title": "Total Results", + "description": "Total products matching the query before pagination." }, - "operator": { - "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in" - ], - "title": "Operator" + "count": { + "type": "integer", + "title": "Count", + "description": "Number of products on this page. When grouped by `date`/`topic`/`prompt`, `data` holds one row per product x bucket, so `len(data)` can exceed `count`." }, - "value": { + "next_cursor": { "anyOf": [ { - "type": "string", - "format": "uuid" + "type": "string" }, { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "null" } ], - "title": "Value" - } - }, - "type": "object", - "required": [ - "field", - "operator", - "value" - ], - "title": "SentimentV2PersonaIdFilter" - }, - "SentimentV2PromptIdFilter": { - "properties": { - "field": { + "title": "Next Cursor", + "description": "Opaque cursor for the next page; null on the last page." + }, + "models": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Models", + "description": "Display names of the models the report covers." + }, + "start_date": { "type": "string", - "const": "prompt_id", - "title": "Field" + "title": "Start Date", + "description": "Echoed request start date (YYYY-MM-DD, ET)." }, - "operator": { + "end_date": { "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in" - ], - "title": "Operator" + "title": "End Date", + "description": "Echoed request end date (YYYY-MM-DD, ET)." }, - "value": { + "filter": { "anyOf": [ { - "type": "string", - "format": "uuid" + "additionalProperties": true, + "type": "object" }, { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "null" } ], - "title": "Value" + "title": "Filter", + "description": "Echoed normalized filter tree, or null when no filter was sent." + }, + "include_merchants": { + "type": "boolean", + "title": "Include Merchants", + "description": "Whether merchant offers are included in each row." + }, + "metrics": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Metrics", + "description": "Metrics returned per row." } }, + "additionalProperties": true, "type": "object", "required": [ - "field", - "operator", - "value" + "count", + "models", + "start_date", + "end_date", + "include_merchants", + "metrics" ], - "title": "SentimentV2PromptIdFilter" + "title": "ShoppingProductsV2Info" }, - "SentimentV2Query": { + "ShoppingProductsV2Query": { "properties": { "category_id": { "type": "string", + "format": "uuid", "title": "Category Id" }, - "asset": { - "type": "string", - "title": "Asset", - "description": "The brand name to analyze (sentiment is extracted on name, not id)." - }, "start_date": { "type": "string", "title": "Start Date", @@ -15608,45 +27062,13 @@ "title": "End Date", "description": "YYYY-MM-DD, ET, inclusive" }, - "comparison_start_date": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Comparison Start Date", - "description": "YYYY-MM-DD, ET, inclusive (with end)." - }, - "comparison_end_date": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Comparison End Date", - "description": "YYYY-MM-DD, ET, inclusive (with start)." - }, "group_by": { "items": { "type": "string", "enum": [ "date", - "model", "topic", - "region", - "prompt", - "persona", - "tag", - "theme", - "claim", - "run", - "competitor" + "prompt" ] }, "type": "array", @@ -15658,9 +27080,15 @@ "items": { "type": "string", "enum": [ - "positive_sentiment", - "negative_sentiment", - "occurrence" + "visibility_score", + "average_position", + "visibility_rank", + "position1_percentage", + "position2_percentage", + "position3_percentage", + "position_above3_percentage", + "product_rating", + "product_num_reviews" ] }, "type": "array" @@ -15669,17 +27097,43 @@ "type": "null" } ], - "title": "Metrics" + "title": "Metrics" + }, + "interval": { + "type": "string", + "enum": [ + "day", + "week", + "month" + ], + "title": "Interval", + "default": "day" + }, + "include_merchants": { + "type": "boolean", + "title": "Include Merchants", + "description": "Include per-product merchant offers (names, prices, urls, images).", + "default": false + }, + "target_product": { + "anyOf": [ + { + "type": "string", + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Target Product", + "description": "Return this product plus its top competitors (item view only)." }, - "interval": { - "type": "string", - "enum": [ - "day", - "week", - "month" - ], - "title": "Interval", - "default": "day" + "competitor_limit": { + "type": "integer", + "minimum": 1, + "title": "Competitor Limit", + "description": "Competitors returned when `target_product` is set.", + "default": 5 }, "filter": { "anyOf": [ @@ -15691,15 +27145,6 @@ } ] }, - "sort": { - "$ref": "#/components/schemas/app__routes__v2__answer_engine_insights__reports__sentiment__SortSpec" - }, - "include_cited_websites": { - "type": "boolean", - "title": "Include Cited Websites", - "description": "Return cited websites per row (only when grouping by `theme`/`claim`).", - "default": false - }, "limit": { "anyOf": [ { @@ -15718,6 +27163,7 @@ "anyOf": [ { "type": "integer", + "maximum": 50000, "exclusiveMinimum": 0 }, { @@ -15725,7 +27171,7 @@ } ], "title": "Max Results", - "description": "Stream endpoint only: cap the number of streamed rows (default: all)." + "description": "Stream endpoint only: cap streamed rows." }, "cursor": { "anyOf": [ @@ -15743,95 +27189,70 @@ "type": "object", "required": [ "category_id", - "asset", "start_date", "end_date" ], - "title": "SentimentV2Query" + "title": "ShoppingProductsV2Query" }, - "SentimentV2RegionIdFilter": { + "ShoppingProductsV2Response": { "properties": { - "field": { - "type": "string", - "const": "region_id", - "title": "Field" - }, - "operator": { - "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in" - ], - "title": "Operator" + "info": { + "$ref": "#/components/schemas/ShoppingProductsV2Info" }, - "value": { - "anyOf": [ - { - "type": "string", - "format": "uuid" - }, - { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" - } - ], - "title": "Value" + "data": { + "items": { + "$ref": "#/components/schemas/ShoppingProductRow" + }, + "type": "array", + "title": "Data" } }, "type": "object", "required": [ - "field", - "operator", - "value" + "info", + "data" ], - "title": "SentimentV2RegionIdFilter" + "title": "ShoppingProductsV2Response" }, - "SentimentV2ReportInfo": { + "ShoppingRowsResponse": { "properties": { - "query": { - "additionalProperties": true, - "type": "object", - "title": "Query" + "info": { + "$ref": "#/components/schemas/Info" }, - "total_rows": { - "type": "integer", - "title": "Total Rows" + "data": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array", + "title": "Data" } }, "type": "object", "required": [ - "query", - "total_rows" + "info", + "data" ], - "title": "SentimentV2ReportInfo" + "title": "ShoppingRowsResponse" }, - "SentimentV2ReportQuery": { + "ShoppingTriggerRateQuery": { "properties": { "category_id": { "type": "string", "format": "uuid", "title": "Category Id" }, - "asset_name": { - "type": "string", - "title": "Asset Name" - }, "start_date": { "type": "string", "format": "date-time", "title": "Start Date", - "description": "Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + "description": "Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." }, "end_date": { "type": "string", "format": "date-time", "title": "End Date", - "description": "End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + "description": "End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." }, "comparison_start_date": { "anyOf": [ @@ -15843,8 +27264,7 @@ "type": "null" } ], - "title": "Comparison Start Date", - "description": "Start of the previous period for delta computation." + "title": "Comparison Start Date" }, "comparison_end_date": { "anyOf": [ @@ -15856,8 +27276,7 @@ "type": "null" } ], - "title": "Comparison End Date", - "description": "End of the previous period for delta computation." + "title": "Comparison End Date" }, "date_interval": { "type": "string", @@ -15871,102 +27290,64 @@ "relative_week" ], "title": "Date Interval", - "description": "Date interval for the report. Only used when dimensions includes date.", "default": "day" }, - "dimensions": { - "items": { - "type": "string", - "enum": [ - "date", - "topic", - "region", - "model", - "prompt", - "persona", - "tag", - "theme", - "claim", - "run", - "asset_name" - ] - }, - "type": "array", - "title": "Dimensions", - "description": "Dimensions to group the report by." - }, - "metrics": { - "items": { - "type": "string", - "enum": [ - "sentiment", - "occurrence" - ] - }, - "type": "array", - "title": "Metrics" - }, "filters": { "items": { "oneOf": [ { - "$ref": "#/components/schemas/SentimentV2ModelIdFilter" - }, - { - "$ref": "#/components/schemas/SentimentV2RegionIdFilter" - }, - { - "$ref": "#/components/schemas/SentimentV2TopicIdFilter" + "$ref": "#/components/schemas/RegionIdFilter" }, { - "$ref": "#/components/schemas/SentimentV2PromptIdFilter" + "$ref": "#/components/schemas/ModelIdFilter" }, { - "$ref": "#/components/schemas/SentimentV2PersonaIdFilter" + "$ref": "#/components/schemas/TopicIdFilter" }, { - "$ref": "#/components/schemas/SentimentV2TagIdFilter" + "$ref": "#/components/schemas/TagIdFilter" }, { - "$ref": "#/components/schemas/SentimentV2RunIdFilter" + "$ref": "#/components/schemas/PromptIdFilter" }, { - "$ref": "#/components/schemas/SentimentV2ThemeIdFilter" + "$ref": "#/components/schemas/PersonaIdFilter" }, { - "$ref": "#/components/schemas/SentimentV2ThemeFilter" + "$ref": "#/components/schemas/BrandNameFilter" }, { - "$ref": "#/components/schemas/SentimentV2ClaimIdFilter" + "$ref": "#/components/schemas/MerchantNameFilter" }, { - "$ref": "#/components/schemas/SentimentV2ClaimFilter" + "$ref": "#/components/schemas/ProductNameFilter" }, { - "$ref": "#/components/schemas/SentimentV2SentimentFilter" + "$ref": "#/components/schemas/profound_shopping__api__AssetNameFilter" } ], "discriminator": { "propertyName": "field", "mapping": { - "claim": "#/components/schemas/SentimentV2ClaimFilter", - "claim_id": "#/components/schemas/SentimentV2ClaimIdFilter", - "model_id": "#/components/schemas/SentimentV2ModelIdFilter", - "persona_id": "#/components/schemas/SentimentV2PersonaIdFilter", - "prompt_id": "#/components/schemas/SentimentV2PromptIdFilter", - "region_id": "#/components/schemas/SentimentV2RegionIdFilter", - "run_id": "#/components/schemas/SentimentV2RunIdFilter", - "sentiment": "#/components/schemas/SentimentV2SentimentFilter", - "tag_id": "#/components/schemas/SentimentV2TagIdFilter", - "theme": "#/components/schemas/SentimentV2ThemeFilter", - "theme_id": "#/components/schemas/SentimentV2ThemeIdFilter", - "topic_id": "#/components/schemas/SentimentV2TopicIdFilter" + "asset_name": "#/components/schemas/profound_shopping__api__AssetNameFilter", + "brand_name": "#/components/schemas/BrandNameFilter", + "merchant_name": "#/components/schemas/MerchantNameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "product_name": "#/components/schemas/ProductNameFilter", + "prompt_id": "#/components/schemas/PromptIdFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter" } } }, "type": "array", - "title": "Filters", - "description": "List of filters to apply to the sentiment-v2 report." + "title": "Filters" }, "order_by": { "additionalProperties": { @@ -15976,332 +27357,396 @@ "desc" ] }, - "propertyNames": { + "type": "object", + "title": "Order By" + }, + "pagination": { + "anyOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { + "type": "null" + } + ] + }, + "include_count": { + "type": "boolean", + "title": "Include Count", + "default": false + }, + "tag_filter_type": { + "type": "string", + "enum": [ + "any", + "all" + ], + "title": "Tag Filter Type", + "default": "any" + }, + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": false + }, + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false + }, + "dimensions": { + "items": { + "type": "string", "enum": [ - "sentiment", - "occurrence", - "assessment_count", - "positive_sentiment", - "negative_sentiment", - "date", - "topic", - "region", - "model", - "prompt", - "persona", - "tag", - "theme", - "claim", - "run", - "asset_name" + "period", + "date", + "model_id", + "topic_id", + "region_id", + "persona_id", + "prompt_id", + "prompt" ] }, - "type": "object", - "title": "Order By", - "description": "Custom ordering of report results. Dimension keys must also be present in dimensions. The sentiment metric orders by positive_sentiment.", - "examples": [ - { - "occurrence": "desc" - } - ] - }, - "pagination": { - "$ref": "#/components/schemas/Pagination", - "description": "Pagination settings for the report results." - } - }, - "additionalProperties": false, - "type": "object", - "required": [ - "category_id", - "asset_name", - "start_date", - "end_date", - "metrics" - ], - "title": "SentimentV2ReportQuery" - }, - "SentimentV2ReportResponse": { - "properties": { - "info": { - "$ref": "#/components/schemas/SentimentV2ReportInfo" + "type": "array", + "title": "Dimensions" }, - "data": { + "metrics": { "items": { - "$ref": "#/components/schemas/SentimentDataPoint" + "type": "string", + "enum": [ + "total_runs", + "shopping_triggered_runs", + "trigger_rate_percentage" + ] }, "type": "array", - "title": "Data" + "title": "Metrics" } }, "type": "object", "required": [ - "info" + "category_id", + "start_date", + "end_date" ], - "title": "SentimentV2ReportResponse" + "title": "ShoppingTriggerRateQuery" }, - "SentimentV2RunIdFilter": { + "ShoppingTriggerRateRow": { "properties": { - "field": { - "type": "string", - "const": "run_id", - "title": "Field" + "date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Date" }, - "operator": { - "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in" + "topic": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "region": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "persona": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "prompt": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "total_runs": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } ], - "title": "Operator" + "title": "Total Runs" }, - "value": { + "shopping_triggered_runs": { "anyOf": [ { - "type": "string", - "format": "uuid" + "type": "integer" }, { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "null" } ], - "title": "Value" + "title": "Shopping Triggered Runs" + }, + "trigger_rate_percentage": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Trigger Rate Percentage" } }, + "additionalProperties": true, "type": "object", - "required": [ - "field", - "operator", - "value" - ], - "title": "SentimentV2RunIdFilter" + "title": "ShoppingTriggerRateRow", + "description": "One trigger-rate row. Group dims present depend on `group_by`." }, - "SentimentV2SentimentFilter": { + "ShoppingTriggerRateV2Info": { "properties": { - "field": { + "total_results": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Total Results", + "description": "Total rows matching the query before pagination (null when not computed)." + }, + "count": { + "type": "integer", + "title": "Count", + "description": "Number of rows returned in `data` for this page." + }, + "next_cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Cursor", + "description": "Opaque cursor for the next page; null on the last page." + }, + "models": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Models", + "description": "Display names of the models the report covers." + }, + "start_date": { "type": "string", - "const": "sentiment", - "title": "Field" + "title": "Start Date", + "description": "Echoed request start date (YYYY-MM-DD, ET)." }, - "operator": { + "end_date": { "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in" - ], - "title": "Operator" + "title": "End Date", + "description": "Echoed request end date (YYYY-MM-DD, ET)." }, - "value": { + "filter": { "anyOf": [ { - "type": "string", - "enum": [ - "positive", - "negative" - ] + "additionalProperties": true, + "type": "object" }, { - "items": { - "type": "string", - "enum": [ - "positive", - "negative" - ] - }, - "type": "array" + "type": "null" } ], - "title": "Value" + "title": "Filter", + "description": "Echoed normalized filter tree, or null when no filter was sent." + }, + "metrics": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Metrics", + "description": "Metrics returned per row." } }, + "additionalProperties": true, "type": "object", "required": [ - "field", - "operator", - "value" + "count", + "models", + "start_date", + "end_date", + "metrics" ], - "title": "SentimentV2SentimentFilter" + "title": "ShoppingTriggerRateV2Info" }, - "SentimentV2TagIdFilter": { + "ShoppingTriggerRateV2Query": { "properties": { - "field": { + "category_id": { "type": "string", - "const": "tag_id", - "title": "Field" + "format": "uuid", + "title": "Category Id" }, - "operator": { + "start_date": { "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in" - ], - "title": "Operator" + "title": "Start Date", + "description": "YYYY-MM-DD, ET, inclusive" + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "YYYY-MM-DD, ET, inclusive" + }, + "group_by": { + "items": { + "type": "string", + "enum": [ + "date", + "topic", + "region", + "persona", + "prompt" + ] + }, + "type": "array", + "title": "Group By", + "description": "Group by `prompt`/`topic` for the per-prompt/-topic trigger rate." }, - "value": { + "metrics": { "anyOf": [ - { - "type": "string", - "format": "uuid" - }, { "items": { "type": "string", - "format": "uuid" + "enum": [ + "total_runs", + "shopping_triggered_runs", + "trigger_rate_percentage" + ] }, "type": "array" + }, + { + "type": "null" } ], - "title": "Value" - } - }, - "type": "object", - "required": [ - "field", - "operator", - "value" - ], - "title": "SentimentV2TagIdFilter" - }, - "SentimentV2ThemeFilter": { - "properties": { - "field": { - "type": "string", - "const": "theme", - "title": "Field" + "title": "Metrics" }, - "operator": { + "interval": { "type": "string", "enum": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" + "day", + "week", + "month" ], - "title": "Operator" + "title": "Interval", + "default": "day" }, - "value": { + "filter": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/FilterNode" }, { - "items": { - "type": "string" - }, - "type": "array" + "type": "null" + } + ] + }, + "limit": { + "anyOf": [ + { + "type": "integer", + "maximum": 50, + "exclusiveMinimum": 0 + }, + { + "type": "null" } ], - "title": "Value" - } - }, - "type": "object", - "required": [ - "field", - "operator", - "value" - ], - "title": "SentimentV2ThemeFilter" - }, - "SentimentV2ThemeIdFilter": { - "properties": { - "field": { - "type": "string", - "const": "theme_id", - "title": "Field" + "title": "Limit", + "description": "Page size; default 10, max 50." }, - "operator": { - "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in" + "max_results": { + "anyOf": [ + { + "type": "integer", + "maximum": 50000, + "exclusiveMinimum": 0 + }, + { + "type": "null" + } ], - "title": "Operator" + "title": "Max Results", + "description": "Stream endpoint only: cap streamed rows." }, - "value": { + "cursor": { "anyOf": [ { - "type": "string", - "format": "uuid" + "type": "string" }, { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "null" } ], - "title": "Value" + "title": "Cursor" } }, + "additionalProperties": false, "type": "object", "required": [ - "field", - "operator", - "value" + "category_id", + "start_date", + "end_date" ], - "title": "SentimentV2ThemeIdFilter" + "title": "ShoppingTriggerRateV2Query" }, - "SentimentV2TopicIdFilter": { + "ShoppingTriggerRateV2Response": { "properties": { - "field": { - "type": "string", - "const": "topic_id", - "title": "Field" - }, - "operator": { - "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in" - ], - "title": "Operator" + "info": { + "$ref": "#/components/schemas/ShoppingTriggerRateV2Info" }, - "value": { - "anyOf": [ - { - "type": "string", - "format": "uuid" - }, - { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" - } - ], - "title": "Value" + "data": { + "items": { + "$ref": "#/components/schemas/ShoppingTriggerRateRow" + }, + "type": "array", + "title": "Data" } }, "type": "object", "required": [ - "field", - "operator", - "value" + "info", + "data" ], - "title": "SentimentV2TopicIdFilter" + "title": "ShoppingTriggerRateV2Response" }, - "ShoppingAllItemsWithMerchantsQuery": { + "ShoppingTriggeredPromptsQuery": { "properties": { "category_id": { "type": "string", @@ -16426,125 +27871,33 @@ "type": "object", "title": "Order By" }, - "pagination": { - "anyOf": [ - { - "$ref": "#/components/schemas/Pagination" - }, - { - "type": "null" - } - ] - }, - "include_count": { - "type": "boolean", - "title": "Include Count", - "default": false - }, - "tag_filter_type": { - "type": "string", - "enum": [ - "any", - "all" - ], - "title": "Tag Filter Type", - "default": "any" - }, - "include_no_tag": { - "type": "boolean", - "title": "Include No Tag", - "default": false - }, - "exclude_topic_ids": { - "type": "boolean", - "title": "Exclude Topic Ids", - "default": false - }, - "dimensions": { - "items": { - "type": "string", - "enum": [ - "period", - "product_name", - "brand_name", - "product_url", - "product_image_urls", - "product_price", - "merchant_names", - "merchant_prices" - ] - }, - "type": "array", - "title": "Dimensions" - }, - "metrics": { - "items": { - "type": "string", - "enum": [ - "visibility_score", - "share_of_voice", - "average_position", - "visibility_rank", - "product_rating", - "product_num_reviews", - "total_count" - ] - }, - "type": "array", - "title": "Metrics" - }, - "owned_asset_names": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Owned Asset Names" - }, - "include_items": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Include Items" - }, - "search_item": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Search Item" + "pagination": { + "type": "null", + "title": "Pagination" }, - "merchant_filter_type": { + "include_count": { + "type": "boolean", + "title": "Include Count", + "default": false + }, + "tag_filter_type": { "type": "string", "enum": [ "any", "all" ], - "title": "Merchant Filter Type", + "title": "Tag Filter Type", "default": "any" }, - "rank_by": { - "type": "string", - "enum": [ - "visibility", - "average_position", - "name" - ], - "title": "Rank By", - "default": "visibility" + "include_no_tag": { + "type": "boolean", + "title": "Include No Tag", + "default": false }, - "sort_order": { - "type": "string", - "enum": [ - "asc", - "desc" - ], - "title": "Sort Order", - "default": "desc" + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false } }, "type": "object", @@ -16553,9 +27906,9 @@ "start_date", "end_date" ], - "title": "ShoppingAllItemsWithMerchantsQuery" + "title": "ShoppingTriggeredPromptsQuery" }, - "ShoppingExecutionsQuery": { + "ShoppingTriggeredTopicsQuery": { "properties": { "category_id": { "type": "string", @@ -16681,14 +28034,8 @@ "title": "Order By" }, "pagination": { - "anyOf": [ - { - "$ref": "#/components/schemas/Pagination" - }, - { - "type": "null" - } - ] + "type": "null", + "title": "Pagination" }, "include_count": { "type": "boolean", @@ -16713,35 +28060,6 @@ "type": "boolean", "title": "Exclude Topic Ids", "default": false - }, - "analysis_types": { - "items": { - "type": "string", - "enum": [ - "visibility", - "sentiment", - "sentiment_v2", - "accuracy" - ] - }, - "type": "array", - "title": "Analysis Types" - }, - "analysis_filter_type": { - "type": "string", - "enum": [ - "any", - "all" - ], - "title": "Analysis Filter Type", - "default": "any" - }, - "owned_asset_names": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Owned Asset Names" } }, "type": "object", @@ -16750,9 +28068,9 @@ "start_date", "end_date" ], - "title": "ShoppingExecutionsQuery" + "title": "ShoppingTriggeredTopicsQuery" }, - "ShoppingItemVisibilityQuery": { + "ShoppingVisibilityQuery": { "properties": { "category_id": { "type": "string", @@ -16916,15 +28234,13 @@ "type": "string", "enum": [ "period", - "product_name", - "brand_name", + "asset_name", "date", + "model_id", "topic_id", + "region_id", "prompt_id", - "prompt", - "product_url", - "product_image_urls", - "product_price" + "prompt" ] }, "type": "array", @@ -16938,12 +28254,11 @@ "share_of_voice", "average_position", "visibility_rank", + "average_position_rank", "position1_percentage", "position2_percentage", "position3_percentage", "position_above3_percentage", - "product_rating", - "product_num_reviews", "total_count" ] }, @@ -16957,14 +28272,7 @@ "type": "array", "title": "Owned Asset Names" }, - "include_items": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Include Items" - }, - "search_item": { + "search_asset": { "anyOf": [ { "type": "string" @@ -16973,23 +28281,9 @@ "type": "null" } ], - "title": "Search Item" - }, - "merchant_filter_type": { - "type": "string", - "enum": [ - "any", - "all" - ], - "title": "Merchant Filter Type", - "default": "any" - }, - "include_competitors": { - "type": "boolean", - "title": "Include Competitors", - "default": false + "title": "Search Asset" }, - "target_product": { + "include_asset": { "anyOf": [ { "type": "string" @@ -16998,13 +28292,28 @@ "type": "null" } ], - "title": "Target Product" + "title": "Include Asset" }, - "competitor_limit": { - "type": "integer", - "minimum": 1, - "title": "Competitor Limit", - "default": 5 + "include_asset_only": { + "type": "boolean", + "title": "Include Asset Only", + "default": false + }, + "include_assets_only": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Include Assets Only" + }, + "rank_by": { + "type": "string", + "enum": [ + "visibility_score", + "average_position" + ], + "title": "Rank By", + "default": "visibility_score" }, "include_position_frequency": { "type": "boolean", @@ -17018,436 +28327,471 @@ "start_date", "end_date" ], - "title": "ShoppingItemVisibilityQuery" + "title": "ShoppingVisibilityQuery" }, - "ShoppingMerchantByItemsQuery": { + "StreamCitationsQuery": { "properties": { - "category_id": { + "date_interval": { "type": "string", - "format": "uuid", - "title": "Category Id" + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "description": "Date interval for the report. (only used with date dimension)", + "default": "day" }, - "start_date": { - "type": "string", - "format": "date-time", - "title": "Start Date", - "description": "Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + "dimensions": { + "items": { + "type": "string", + "enum": [ + "hostname", + "path", + "date", + "region", + "topic", + "topic_id", + "model", + "tag", + "prompt", + "prompt_id", + "url", + "root_domain", + "persona", + "citation_category" + ] + }, + "type": "array", + "title": "Dimensions", + "description": "Dimensions to group the report by.", + "default": [] }, - "end_date": { - "type": "string", - "format": "date-time", - "title": "End Date", - "description": "End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + "metrics": { + "items": { + "type": "string", + "enum": [ + "count", + "citation_share", + "share_of_voice", + "first_cited_at" + ] + }, + "type": "array", + "title": "Metrics", + "description": "Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead.", + "deprecated_values": { + "share_of_voice": "Use citation_share instead" + } }, - "comparison_start_date": { - "anyOf": [ + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By", + "description": "\n Custom ordering of the report results.\n\n The order is a record of key-value pairs where:\n - `key` is the field to order by, which can be a metric or dimension\n - `value` is the direction of the order, either `asc` for ascending or `desc` for descending.\n\n When not specified, the default order is the first metric in the query descending.\n ", + "default": {}, + "examples": [ { - "type": "string", - "format": "date-time" + "date": "asc" }, { - "type": "null" + "count": "desc", + "date": "asc" } - ], - "title": "Comparison Start Date" + ] }, - "comparison_end_date": { + "pagination": { "anyOf": [ { - "type": "string", - "format": "date-time" + "$ref": "#/components/schemas/Pagination" }, { "type": "null" - } - ], - "title": "Comparison End Date" + } + ] }, - "date_interval": { + "category_id": { "type": "string", - "enum": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" - ], - "title": "Date Interval", - "default": "day" + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." }, "filters": { "items": { "oneOf": [ + { + "$ref": "#/components/schemas/HostnameFilter" + }, + { + "$ref": "#/components/schemas/PathFilter" + }, { "$ref": "#/components/schemas/RegionIdFilter" }, { - "$ref": "#/components/schemas/ModelIdFilter" + "$ref": "#/components/schemas/RegionNameFilter" }, { "$ref": "#/components/schemas/TopicIdFilter" }, + { + "$ref": "#/components/schemas/TopicNameFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, { "$ref": "#/components/schemas/TagIdFilter" }, { - "$ref": "#/components/schemas/PromptIdFilter" + "$ref": "#/components/schemas/TagNameFilter" + }, + { + "$ref": "#/components/schemas/UrlFilter" + }, + { + "$ref": "#/components/schemas/RootDomainFilter" + }, + { + "$ref": "#/components/schemas/AnalysisTypeFilter" + }, + { + "$ref": "#/components/schemas/PromptTypeFilter" }, { "$ref": "#/components/schemas/PersonaIdFilter" }, { - "$ref": "#/components/schemas/BrandNameFilter" + "$ref": "#/components/schemas/CitationCategoryFilter" }, { - "$ref": "#/components/schemas/MerchantNameFilter" + "$ref": "#/components/schemas/PromptFilter" }, { - "$ref": "#/components/schemas/ProductNameFilter" + "$ref": "#/components/schemas/PromptIdFilter" }, { - "$ref": "#/components/schemas/profound_shopping__api__AssetNameFilter" + "$ref": "#/components/schemas/MentionedFilter" } ], "discriminator": { "propertyName": "field", "mapping": { - "asset_name": "#/components/schemas/profound_shopping__api__AssetNameFilter", - "brand_name": "#/components/schemas/BrandNameFilter", - "merchant_name": "#/components/schemas/MerchantNameFilter", + "analysis_type": "#/components/schemas/AnalysisTypeFilter", + "citation_category": "#/components/schemas/CitationCategoryFilter", + "hostname": "#/components/schemas/HostnameFilter", + "mentioned": "#/components/schemas/MentionedFilter", "model": "#/components/schemas/ModelIdFilter", "model_id": "#/components/schemas/ModelIdFilter", + "path": "#/components/schemas/PathFilter", "persona_id": "#/components/schemas/PersonaIdFilter", - "product_name": "#/components/schemas/ProductNameFilter", + "prompt": "#/components/schemas/PromptFilter", "prompt_id": "#/components/schemas/PromptIdFilter", + "prompt_type": "#/components/schemas/PromptTypeFilter", "region": "#/components/schemas/RegionIdFilter", "region_id": "#/components/schemas/RegionIdFilter", + "region_name": "#/components/schemas/RegionNameFilter", + "root_domain": "#/components/schemas/RootDomainFilter", "tag": "#/components/schemas/TagIdFilter", "tag_id": "#/components/schemas/TagIdFilter", + "tag_name": "#/components/schemas/TagNameFilter", "topic": "#/components/schemas/TopicIdFilter", - "topic_id": "#/components/schemas/TopicIdFilter" + "topic_id": "#/components/schemas/TopicIdFilter", + "topic_name": "#/components/schemas/TopicNameFilter", + "url": "#/components/schemas/UrlFilter" } } }, "type": "array", - "title": "Filters" - }, - "order_by": { - "additionalProperties": { - "type": "string", - "enum": [ - "asc", - "desc" - ] - }, - "type": "object", - "title": "Order By" - }, - "pagination": { - "anyOf": [ - { - "$ref": "#/components/schemas/Pagination" - }, - { - "type": "null" - } - ] - }, - "include_count": { - "type": "boolean", - "title": "Include Count", - "default": false - }, - "tag_filter_type": { + "title": "Filters", + "description": "List of filters to apply to the citations report." + } + }, + "type": "object", + "required": [ + "metrics", + "category_id", + "start_date", + "end_date" + ], + "title": "StreamCitationsQuery" + }, + "StreamSentimentQuery": { + "properties": { + "date_interval": { "type": "string", "enum": [ - "any", - "all" + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" ], - "title": "Tag Filter Type", - "default": "any" - }, - "include_no_tag": { - "type": "boolean", - "title": "Include No Tag", - "default": false - }, - "exclude_topic_ids": { - "type": "boolean", - "title": "Exclude Topic Ids", - "default": false + "title": "Date Interval", + "description": "Date interval for the report. (only used with date dimension)", + "default": "day" }, "dimensions": { "items": { "type": "string", "enum": [ - "period", - "merchant_name", - "product_name", - "brand_name", - "product_image_urls", - "product_price", - "merchant_prices", - "has_instant_checkout", - "delivery_options", - "merchant_url" + "theme", + "date", + "region", + "topic", + "topic_id", + "model", + "asset_id", + "asset_name", + "tag", + "prompt", + "prompt_id", + "sentiment_type", + "persona" ] }, "type": "array", - "title": "Dimensions" + "title": "Dimensions", + "description": "Dimensions to group the report by.", + "default": [] }, "metrics": { "items": { "type": "string", "enum": [ - "merchant_visibility", - "product_visibility", - "product_rank", - "avg_position", - "total_count" + "positive", + "negative", + "occurrences" ] }, "type": "array", "title": "Metrics" }, - "product_name": { - "anyOf": [ - { - "type": "string" - }, + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By", + "description": "\nCustom ordering of the report results.\n\nThe order is a record of key-value pairs where:\n- key is the field to order by, which can be a metric or dimension\n- value is the direction of the order, either 'asc' for ascending or 'desc' for descending.\n\nWhen not specified, the default order is the first metric in the query descending.\n ", + "default": {}, + "examples": [ { - "type": "null" + "date": "asc" } - ], - "title": "Product Name" - } - }, - "type": "object", - "required": [ - "category_id", - "start_date", - "end_date" - ], - "title": "ShoppingMerchantByItemsQuery" - }, - "ShoppingMerchantDistributionQuery": { - "properties": { - "category_id": { - "type": "string", - "format": "uuid", - "title": "Category Id" - }, - "start_date": { - "type": "string", - "format": "date-time", - "title": "Start Date", - "description": "Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." - }, - "end_date": { - "type": "string", - "format": "date-time", - "title": "End Date", - "description": "End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + ] }, - "comparison_start_date": { + "pagination": { "anyOf": [ { - "type": "string", - "format": "date-time" + "$ref": "#/components/schemas/Pagination" }, { "type": "null" } - ], - "title": "Comparison Start Date" + ] }, - "comparison_end_date": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "title": "Comparison End Date" + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" }, - "date_interval": { + "start_date": { "type": "string", - "enum": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" - ], - "title": "Date Interval", - "default": "day" + "format": "date-time", + "title": "Start Date", + "description": "Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + }, + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." }, "filters": { "items": { "oneOf": [ { - "$ref": "#/components/schemas/RegionIdFilter" + "$ref": "#/components/schemas/AssetIdFilter" }, { - "$ref": "#/components/schemas/ModelIdFilter" + "$ref": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter" }, { - "$ref": "#/components/schemas/TopicIdFilter" + "$ref": "#/components/schemas/ThemeFilter" }, { - "$ref": "#/components/schemas/TagIdFilter" + "$ref": "#/components/schemas/RegionIdFilter" }, { - "$ref": "#/components/schemas/PromptIdFilter" + "$ref": "#/components/schemas/RegionNameFilter" }, { - "$ref": "#/components/schemas/PersonaIdFilter" + "$ref": "#/components/schemas/TopicIdFilter" }, { - "$ref": "#/components/schemas/BrandNameFilter" + "$ref": "#/components/schemas/TopicNameFilter" }, { - "$ref": "#/components/schemas/MerchantNameFilter" + "$ref": "#/components/schemas/ModelIdFilter" }, { - "$ref": "#/components/schemas/ProductNameFilter" + "$ref": "#/components/schemas/TagIdFilter" }, { - "$ref": "#/components/schemas/profound_shopping__api__AssetNameFilter" + "$ref": "#/components/schemas/TagNameFilter" + }, + { + "$ref": "#/components/schemas/PromptFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" } ], "discriminator": { "propertyName": "field", "mapping": { - "asset_name": "#/components/schemas/profound_shopping__api__AssetNameFilter", - "brand_name": "#/components/schemas/BrandNameFilter", - "merchant_name": "#/components/schemas/MerchantNameFilter", + "asset_id": "#/components/schemas/AssetIdFilter", + "asset_name": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter", "model": "#/components/schemas/ModelIdFilter", "model_id": "#/components/schemas/ModelIdFilter", "persona_id": "#/components/schemas/PersonaIdFilter", - "product_name": "#/components/schemas/ProductNameFilter", - "prompt_id": "#/components/schemas/PromptIdFilter", + "prompt": "#/components/schemas/PromptFilter", "region": "#/components/schemas/RegionIdFilter", "region_id": "#/components/schemas/RegionIdFilter", + "region_name": "#/components/schemas/RegionNameFilter", "tag": "#/components/schemas/TagIdFilter", "tag_id": "#/components/schemas/TagIdFilter", + "tag_name": "#/components/schemas/TagNameFilter", + "theme": "#/components/schemas/ThemeFilter", "topic": "#/components/schemas/TopicIdFilter", - "topic_id": "#/components/schemas/TopicIdFilter" + "topic_id": "#/components/schemas/TopicIdFilter", + "topic_name": "#/components/schemas/TopicNameFilter" } } }, "type": "array", - "title": "Filters" - }, - "order_by": { - "additionalProperties": { - "type": "string", - "enum": [ - "asc", - "desc" - ] - }, - "type": "object", - "title": "Order By" - }, - "pagination": { - "anyOf": [ - { - "$ref": "#/components/schemas/Pagination" - }, - { - "type": "null" - } - ] - }, - "include_count": { - "type": "boolean", - "title": "Include Count", - "default": false - }, - "tag_filter_type": { + "title": "Filters", + "description": "List of filters to apply to the sentiment report." + } + }, + "type": "object", + "required": [ + "metrics", + "category_id", + "start_date", + "end_date" + ], + "title": "StreamSentimentQuery" + }, + "StreamVisibilityQuery": { + "properties": { + "date_interval": { "type": "string", "enum": [ - "any", - "all" + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" ], - "title": "Tag Filter Type", - "default": "any" - }, - "include_no_tag": { - "type": "boolean", - "title": "Include No Tag", - "default": false - }, - "exclude_topic_ids": { - "type": "boolean", - "title": "Exclude Topic Ids", - "default": false + "title": "Date Interval", + "description": "Date interval for the report. (only used with date dimension)", + "default": "day" }, "dimensions": { "items": { "type": "string", "enum": [ - "period", - "merchant_name", "date", - "owned_asset_name" + "region", + "topic", + "topic_id", + "model", + "asset_id", + "asset_name", + "prompt", + "prompt_id", + "tag", + "persona" ] }, "type": "array", - "title": "Dimensions" + "title": "Dimensions", + "description": "Dimensions to group the report by.", + "default": [] }, "metrics": { "items": { "type": "string", "enum": [ - "offer_count", - "product_count", - "average_rank", - "share_of_offers", - "visibility_rank", - "total_count" + "share_of_voice", + "mentions_count", + "visibility_score", + "executions", + "average_position" ] }, "type": "array", "title": "Metrics" }, - "owned_asset_names": { - "items": { - "type": "string" + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] }, - "type": "array", - "title": "Owned Asset Names" + "type": "object", + "title": "Order By", + "description": "\nCustom ordering of the report results.\n\nThe order is a record of key-value pairs where:\n- key is the field to order by, which can be a metric or dimension\n- value is the direction of the order, either 'asc' for ascending or 'desc' for descending.\n\nWhen not specified, the default order is the first metric in the query descending.\n ", + "default": {}, + "examples": [ + { + "date": "asc" + } + ] }, - "search_merchant": { + "pagination": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/Pagination" }, { "type": "null" } - ], - "title": "Search Merchant" - } - }, - "type": "object", - "required": [ - "category_id", - "start_date", - "end_date" - ], - "title": "ShoppingMerchantDistributionQuery" - }, - "ShoppingMerchantShareQuery": { - "properties": { + ] + }, "category_id": { "type": "string", "format": "uuid", @@ -17457,51 +28801,13 @@ "type": "string", "format": "date-time", "title": "Start Date", - "description": "Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + "description": "Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." }, "end_date": { "type": "string", "format": "date-time", "title": "End Date", - "description": "End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." - }, - "comparison_start_date": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "title": "Comparison Start Date" - }, - "comparison_end_date": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "title": "Comparison End Date" - }, - "date_interval": { - "type": "string", - "enum": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" - ], - "title": "Date Interval", - "default": "day" + "description": "End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." }, "filters": { "items": { @@ -17509,6 +28815,9 @@ { "$ref": "#/components/schemas/RegionIdFilter" }, + { + "$ref": "#/components/schemas/RegionNameFilter" + }, { "$ref": "#/components/schemas/ModelIdFilter" }, @@ -17516,140 +28825,149 @@ "$ref": "#/components/schemas/TopicIdFilter" }, { - "$ref": "#/components/schemas/TagIdFilter" + "$ref": "#/components/schemas/TopicNameFilter" }, { - "$ref": "#/components/schemas/PromptIdFilter" + "$ref": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter" }, { - "$ref": "#/components/schemas/PersonaIdFilter" + "$ref": "#/components/schemas/TagIdFilter" }, { - "$ref": "#/components/schemas/BrandNameFilter" + "$ref": "#/components/schemas/TagNameFilter" }, { - "$ref": "#/components/schemas/MerchantNameFilter" + "$ref": "#/components/schemas/PromptIdFilter" }, { - "$ref": "#/components/schemas/ProductNameFilter" + "$ref": "#/components/schemas/PromptFilter" }, { - "$ref": "#/components/schemas/profound_shopping__api__AssetNameFilter" + "$ref": "#/components/schemas/PersonaIdFilter" } ], "discriminator": { "propertyName": "field", "mapping": { - "asset_name": "#/components/schemas/profound_shopping__api__AssetNameFilter", - "brand_name": "#/components/schemas/BrandNameFilter", - "merchant_name": "#/components/schemas/MerchantNameFilter", + "asset_name": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter", "model": "#/components/schemas/ModelIdFilter", "model_id": "#/components/schemas/ModelIdFilter", "persona_id": "#/components/schemas/PersonaIdFilter", - "product_name": "#/components/schemas/ProductNameFilter", + "prompt": "#/components/schemas/PromptFilter", "prompt_id": "#/components/schemas/PromptIdFilter", "region": "#/components/schemas/RegionIdFilter", "region_id": "#/components/schemas/RegionIdFilter", + "region_name": "#/components/schemas/RegionNameFilter", "tag": "#/components/schemas/TagIdFilter", "tag_id": "#/components/schemas/TagIdFilter", + "tag_name": "#/components/schemas/TagNameFilter", "topic": "#/components/schemas/TopicIdFilter", - "topic_id": "#/components/schemas/TopicIdFilter" + "topic_id": "#/components/schemas/TopicIdFilter", + "topic_name": "#/components/schemas/TopicNameFilter" } } }, "type": "array", - "title": "Filters" - }, - "order_by": { - "additionalProperties": { - "type": "string", - "enum": [ - "asc", - "desc" - ] - }, - "type": "object", - "title": "Order By" - }, - "pagination": { - "anyOf": [ - { - "$ref": "#/components/schemas/Pagination" - }, - { - "type": "null" - } - ] - }, - "include_count": { - "type": "boolean", - "title": "Include Count", - "default": false - }, - "tag_filter_type": { + "title": "Filters", + "description": "List of filters to apply to the visibility report." + } + }, + "type": "object", + "required": [ + "metrics", + "category_id", + "start_date", + "end_date" + ], + "title": "StreamVisibilityQuery" + }, + "StreamWebSearchResultsQuery": { + "properties": { + "date_interval": { "type": "string", "enum": [ - "any", - "all" + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" ], - "title": "Tag Filter Type", - "default": "any" - }, - "include_no_tag": { - "type": "boolean", - "title": "Include No Tag", - "default": false - }, - "exclude_topic_ids": { - "type": "boolean", - "title": "Exclude Topic Ids", - "default": false + "title": "Date Interval", + "description": "Date interval for the report. (only used with date dimension)", + "default": "day" }, "dimensions": { "items": { "type": "string", "enum": [ - "period", + "hostname", + "path", + "url", + "root_domain", + "date", + "region", + "topic", "topic_id", - "prompt_id" + "model", + "tag", + "prompt", + "prompt_id", + "persona", + "search_query" ] }, "type": "array", - "title": "Dimensions" + "title": "Dimensions", + "description": "Dimensions to group the report by.", + "default": [] }, "metrics": { "items": { "type": "string", - "const": "merchant_share" + "enum": [ + "count", + "search_share" + ] }, "type": "array", - "title": "Metrics" + "minItems": 1, + "title": "Metrics", + "description": "Metrics to include. `search_share` is the per-prompt occurrence rate." }, - "target_asset_names": { - "items": { - "type": "string" + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] }, - "type": "array", - "title": "Target Asset Names" + "type": "object", + "title": "Order By", + "description": "\n Custom ordering of the report results.\n\n The order is a record of key-value pairs where:\n - `key` is the field to order by, which can be a metric or dimension\n - `value` is the direction of the order, either `asc` for ascending or `desc` for descending.\n\n When not specified, the default order is the first metric in the query descending.\n ", + "default": {}, + "examples": [ + { + "date": "asc" + }, + { + "count": "desc", + "date": "asc" + } + ] + }, + "pagination": { + "anyOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { + "type": "null" + } + ] }, - "owned_asset_names": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Owned Asset Names" - } - }, - "type": "object", - "required": [ - "category_id", - "start_date", - "end_date" - ], - "title": "ShoppingMerchantShareQuery" - }, - "ShoppingMerchantVisibilityByBrandQuery": { - "properties": { "category_id": { "type": "string", "format": "uuid", @@ -17659,302 +28977,300 @@ "type": "string", "format": "date-time", "title": "Start Date", - "description": "Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + "description": "Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." }, "end_date": { "type": "string", "format": "date-time", "title": "End Date", - "description": "End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." - }, - "comparison_start_date": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "title": "Comparison Start Date" - }, - "comparison_end_date": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "title": "Comparison End Date" - }, - "date_interval": { - "type": "string", - "enum": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" - ], - "title": "Date Interval", - "default": "day" + "description": "End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." }, "filters": { "items": { "oneOf": [ { - "$ref": "#/components/schemas/RegionIdFilter" + "$ref": "#/components/schemas/HostnameFilter" }, { - "$ref": "#/components/schemas/ModelIdFilter" + "$ref": "#/components/schemas/PathFilter" + }, + { + "$ref": "#/components/schemas/RegionIdFilter" }, { "$ref": "#/components/schemas/TopicIdFilter" }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, { "$ref": "#/components/schemas/TagIdFilter" }, { - "$ref": "#/components/schemas/PromptIdFilter" + "$ref": "#/components/schemas/UrlFilter" }, { - "$ref": "#/components/schemas/PersonaIdFilter" + "$ref": "#/components/schemas/RootDomainFilter" }, { - "$ref": "#/components/schemas/BrandNameFilter" + "$ref": "#/components/schemas/PersonaIdFilter" }, { - "$ref": "#/components/schemas/MerchantNameFilter" + "$ref": "#/components/schemas/PromptFilter" }, { - "$ref": "#/components/schemas/ProductNameFilter" + "$ref": "#/components/schemas/PromptIdFilter" }, { - "$ref": "#/components/schemas/profound_shopping__api__AssetNameFilter" + "$ref": "#/components/schemas/SearchQueryFilter" } ], "discriminator": { "propertyName": "field", "mapping": { - "asset_name": "#/components/schemas/profound_shopping__api__AssetNameFilter", - "brand_name": "#/components/schemas/BrandNameFilter", - "merchant_name": "#/components/schemas/MerchantNameFilter", + "hostname": "#/components/schemas/HostnameFilter", "model": "#/components/schemas/ModelIdFilter", "model_id": "#/components/schemas/ModelIdFilter", + "path": "#/components/schemas/PathFilter", "persona_id": "#/components/schemas/PersonaIdFilter", - "product_name": "#/components/schemas/ProductNameFilter", + "prompt": "#/components/schemas/PromptFilter", "prompt_id": "#/components/schemas/PromptIdFilter", "region": "#/components/schemas/RegionIdFilter", "region_id": "#/components/schemas/RegionIdFilter", + "root_domain": "#/components/schemas/RootDomainFilter", + "search_query": "#/components/schemas/SearchQueryFilter", "tag": "#/components/schemas/TagIdFilter", - "tag_id": "#/components/schemas/TagIdFilter", - "topic": "#/components/schemas/TopicIdFilter", - "topic_id": "#/components/schemas/TopicIdFilter" - } - } - }, - "type": "array", - "title": "Filters" - }, - "order_by": { - "additionalProperties": { - "type": "string", - "enum": [ - "asc", - "desc" - ] + "tag_id": "#/components/schemas/TagIdFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter", + "url": "#/components/schemas/UrlFilter" + } + } }, - "type": "object", - "title": "Order By" + "type": "array", + "title": "Filters", + "description": "List of filters to apply to the web search results report." + } + }, + "type": "object", + "required": [ + "metrics", + "category_id", + "start_date", + "end_date" + ], + "title": "StreamWebSearchResultsQuery" + }, + "Tag": { + "properties": { + "id": { + "type": "string", + "title": "Id" }, - "pagination": { + "name": { + "type": "string", + "title": "Name" + } + }, + "type": "object", + "required": [ + "id", + "name" + ], + "title": "Tag" + }, + "TagIdFilter": { + "properties": { + "field": { "anyOf": [ { - "$ref": "#/components/schemas/Pagination" + "type": "string", + "const": "tag_id" }, { - "type": "null" + "type": "string", + "const": "tag", + "deprecated": true } - ] - }, - "include_count": { - "type": "boolean", - "title": "Include Count", - "default": false + ], + "title": "Field" }, - "tag_filter_type": { + "operator": { "type": "string", "enum": [ - "any", - "all" + "is", + "not_is", + "in", + "not_in" ], - "title": "Tag Filter Type", - "default": "any" - }, - "include_no_tag": { - "type": "boolean", - "title": "Include No Tag", - "default": false - }, - "exclude_topic_ids": { - "type": "boolean", - "title": "Exclude Topic Ids", - "default": false - }, - "dimensions": { - "items": { - "type": "string", - "enum": [ - "period", - "merchant_name", - "brand_name" - ] - }, - "type": "array", - "title": "Dimensions" - }, - "metrics": { - "items": { - "type": "string", - "enum": [ - "visibility_score", - "share_of_voice", - "average_position", - "visibility_rank", - "total_count" - ] - }, - "type": "array", - "title": "Metrics" - }, - "owned_asset_names": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Owned Asset Names" + "title": "Operator" }, - "search_brand": { + "value": { "anyOf": [ { - "type": "string" + "type": "string", + "format": "uuid" }, { - "type": "null" + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" } ], - "title": "Search Brand" + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "TagIdFilter", + "description": "Filter by tag (prompt group) UUID." + }, + "TagNameFilter": { + "properties": { + "field": { + "type": "string", + "const": "tag_name", + "title": "Field" }, - "include_brand": { + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" + }, + "value": { "anyOf": [ { "type": "string" }, { - "type": "null" + "items": { + "type": "string" + }, + "type": "array" } ], - "title": "Include Brand" - }, - "include_brand_only": { - "type": "boolean", - "title": "Include Brand Only", - "default": false + "title": "Value" } }, "type": "object", "required": [ - "category_id", - "start_date", - "end_date" + "field", + "operator", + "value" ], - "title": "ShoppingMerchantVisibilityByBrandQuery" + "title": "TagNameFilter", + "description": "Filter by tag name." }, - "ShoppingProductMerchantUrlsQuery": { + "ThemeFilter": { "properties": { - "category_id": { + "field": { "type": "string", - "format": "uuid", - "title": "Category Id" - }, - "product_names": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Product Names" + "const": "theme", + "title": "Field" }, - "start_date": { + "operator": { "type": "string", - "format": "date-time", - "title": "Start Date" + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" }, - "end_date": { - "type": "string", - "format": "date-time", - "title": "End Date" + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Value" } }, "type": "object", "required": [ - "category_id", - "product_names", - "start_date", - "end_date" + "field", + "operator", + "value" ], - "title": "ShoppingProductMerchantUrlsQuery" + "title": "ThemeFilter", + "description": "Filter by theme" }, - "ShoppingRowsResponse": { + "TopInaccurateClaimRow": { "properties": { - "info": { - "$ref": "#/components/schemas/Info" + "clusterId": { + "type": "string", + "title": "Clusterid" }, - "data": { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array", - "title": "Data" + "canonicalClaim": { + "type": "string", + "title": "Canonicalclaim" + }, + "claimOccurrence": { + "type": "number", + "title": "Claimoccurrence" + }, + "claimOccurrenceDelta": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Claimoccurrencedelta" } }, "type": "object", "required": [ - "info", - "data" + "clusterId", + "canonicalClaim", + "claimOccurrence" ], - "title": "ShoppingRowsResponse" + "title": "TopInaccurateClaimRow" }, - "ShoppingTriggerRateQuery": { + "TopInaccurateClaimsQuery": { "properties": { - "category_id": { - "type": "string", - "format": "uuid", - "title": "Category Id" - }, "start_date": { "type": "string", - "format": "date-time", - "title": "Start Date", - "description": "Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + "title": "Start Date" }, "end_date": { "type": "string", - "format": "date-time", - "title": "End Date", - "description": "End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + "title": "End Date" }, "comparison_start_date": { "anyOf": [ { - "type": "string", - "format": "date-time" + "type": "string" }, { "type": "null" @@ -17965,8 +29281,7 @@ "comparison_end_date": { "anyOf": [ { - "type": "string", - "format": "date-time" + "type": "string" }, { "type": "null" @@ -17974,108 +29289,51 @@ ], "title": "Comparison End Date" }, - "date_interval": { + "category_id": { "type": "string", - "enum": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" - ], - "title": "Date Interval", - "default": "day" + "format": "uuid", + "title": "Category Id" }, - "filters": { - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/RegionIdFilter" - }, - { - "$ref": "#/components/schemas/ModelIdFilter" - }, - { - "$ref": "#/components/schemas/TopicIdFilter" - }, - { - "$ref": "#/components/schemas/TagIdFilter" - }, - { - "$ref": "#/components/schemas/PromptIdFilter" - }, - { - "$ref": "#/components/schemas/PersonaIdFilter" - }, - { - "$ref": "#/components/schemas/BrandNameFilter" - }, - { - "$ref": "#/components/schemas/MerchantNameFilter" - }, - { - "$ref": "#/components/schemas/ProductNameFilter" + "topic_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" }, - { - "$ref": "#/components/schemas/profound_shopping__api__AssetNameFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "asset_name": "#/components/schemas/profound_shopping__api__AssetNameFilter", - "brand_name": "#/components/schemas/BrandNameFilter", - "merchant_name": "#/components/schemas/MerchantNameFilter", - "model": "#/components/schemas/ModelIdFilter", - "model_id": "#/components/schemas/ModelIdFilter", - "persona_id": "#/components/schemas/PersonaIdFilter", - "product_name": "#/components/schemas/ProductNameFilter", - "prompt_id": "#/components/schemas/PromptIdFilter", - "region": "#/components/schemas/RegionIdFilter", - "region_id": "#/components/schemas/RegionIdFilter", - "tag": "#/components/schemas/TagIdFilter", - "tag_id": "#/components/schemas/TagIdFilter", - "topic": "#/components/schemas/TopicIdFilter", - "topic_id": "#/components/schemas/TopicIdFilter" - } + "type": "array" + }, + { + "type": "null" } - }, - "type": "array", - "title": "Filters" + ], + "title": "Topic Ids" }, - "order_by": { - "additionalProperties": { - "type": "string", - "enum": [ - "asc", - "desc" - ] - }, - "type": "object", - "title": "Order By" + "exclude_topic_ids": { + "type": "boolean", + "title": "Exclude Topic Ids", + "default": false }, - "pagination": { + "tag_ids": { "anyOf": [ { - "$ref": "#/components/schemas/Pagination" + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" }, { "type": "null" } - ] - }, - "include_count": { - "type": "boolean", - "title": "Include Count", - "default": false + ], + "title": "Tag Ids" }, "tag_filter_type": { "type": "string", "enum": [ - "any", - "all" + "all", + "any" ], "title": "Tag Filter Type", "default": "any" @@ -18085,857 +29343,863 @@ "title": "Include No Tag", "default": false }, - "exclude_topic_ids": { + "region_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Region Ids" + }, + "platform_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Platform Ids" + }, + "persona_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Persona Ids" + }, + "include_no_persona": { "type": "boolean", - "title": "Exclude Topic Ids", + "title": "Include No Persona", "default": false }, - "dimensions": { - "items": { - "type": "string", - "enum": [ - "period", - "date", - "model_id", - "topic_id", - "region_id", - "persona_id", - "prompt_id", - "prompt" - ] - }, - "type": "array", - "title": "Dimensions" + "prompt_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Prompt Ids" }, - "metrics": { + "citation_categories": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Citation Categories" + }, + "limit": { + "type": "integer", + "maximum": 50, + "minimum": 1, + "title": "Limit", + "default": 5 + } + }, + "type": "object", + "required": [ + "start_date", + "end_date", + "category_id" + ], + "title": "TopInaccurateClaimsQuery" + }, + "TopInaccurateClaimsResponse": { + "properties": { + "data": { "items": { - "type": "string", - "enum": [ - "total_runs", - "shopping_triggered_runs", - "trigger_rate_percentage" - ] + "$ref": "#/components/schemas/TopInaccurateClaimRow" }, "type": "array", - "title": "Metrics" + "title": "Data" } }, "type": "object", "required": [ - "category_id", - "start_date", - "end_date" + "data" ], - "title": "ShoppingTriggerRateQuery" + "title": "TopInaccurateClaimsResponse" }, - "ShoppingVisibilityQuery": { + "Topic": { "properties": { - "category_id": { + "id": { "type": "string", - "format": "uuid", - "title": "Category Id" + "title": "Id" }, - "start_date": { + "name": { "type": "string", - "format": "date-time", - "title": "Start Date", - "description": "Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." + "title": "Name" }, - "end_date": { + "status": { "type": "string", - "format": "date-time", - "title": "End Date", - "description": "End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp." - }, - "comparison_start_date": { + "enum": [ + "active", + "disabled" + ], + "title": "Status" + } + }, + "type": "object", + "required": [ + "id", + "name", + "status" + ], + "title": "Topic" + }, + "TopicIdFilter": { + "properties": { + "field": { "anyOf": [ { "type": "string", - "format": "date-time" + "const": "topic_id" }, { - "type": "null" + "type": "string", + "const": "topic", + "deprecated": true } ], - "title": "Comparison Start Date" + "title": "Field" }, - "comparison_end_date": { + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in" + ], + "title": "Operator" + }, + "value": { "anyOf": [ { "type": "string", - "format": "date-time" + "format": "uuid" }, { - "type": "null" + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" } ], - "title": "Comparison End Date" + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "TopicIdFilter", + "description": "Filter by topic UUID." + }, + "TopicInput": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id" }, - "date_interval": { + "name": { + "type": "string", + "title": "Name" + } + }, + "type": "object", + "required": [ + "id", + "name" + ], + "title": "TopicInput" + }, + "TopicNameFilter": { + "properties": { + "field": { + "type": "string", + "const": "topic_name", + "title": "Field" + }, + "operator": { "type": "string", "enum": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" ], - "title": "Date Interval", - "default": "day" + "title": "Operator" }, - "filters": { - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/RegionIdFilter" - }, - { - "$ref": "#/components/schemas/ModelIdFilter" - }, - { - "$ref": "#/components/schemas/TopicIdFilter" - }, - { - "$ref": "#/components/schemas/TagIdFilter" - }, - { - "$ref": "#/components/schemas/PromptIdFilter" - }, - { - "$ref": "#/components/schemas/PersonaIdFilter" - }, - { - "$ref": "#/components/schemas/BrandNameFilter" - }, - { - "$ref": "#/components/schemas/MerchantNameFilter" - }, - { - "$ref": "#/components/schemas/ProductNameFilter" + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" }, - { - "$ref": "#/components/schemas/profound_shopping__api__AssetNameFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "asset_name": "#/components/schemas/profound_shopping__api__AssetNameFilter", - "brand_name": "#/components/schemas/BrandNameFilter", - "merchant_name": "#/components/schemas/MerchantNameFilter", - "model": "#/components/schemas/ModelIdFilter", - "model_id": "#/components/schemas/ModelIdFilter", - "persona_id": "#/components/schemas/PersonaIdFilter", - "product_name": "#/components/schemas/ProductNameFilter", - "prompt_id": "#/components/schemas/PromptIdFilter", - "region": "#/components/schemas/RegionIdFilter", - "region_id": "#/components/schemas/RegionIdFilter", - "tag": "#/components/schemas/TagIdFilter", - "tag_id": "#/components/schemas/TagIdFilter", - "topic": "#/components/schemas/TopicIdFilter", - "topic_id": "#/components/schemas/TopicIdFilter" - } + "type": "array" } - }, - "type": "array", - "title": "Filters" - }, - "order_by": { - "additionalProperties": { - "type": "string", - "enum": [ - "asc", - "desc" - ] - }, + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "TopicNameFilter", + "description": "Filter by topic name" + }, + "UpdateAgentRequest": { + "properties": { + "graph": { + "additionalProperties": true, "type": "object", - "title": "Order By" + "title": "Graph", + "description": "New workflow graph for the agent's draft version. Replaces the current draft graph; the agent is iterated in place rather than re-created, so its ID is stable. Required — a null graph is rejected as a 422 here rather than as a relayed upstream error." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "graph" + ], + "title": "UpdateAgentRequest", + "description": "Request body for updating a draft agent's graph in place." + }, + "UpdateDocumentRequest": { + "properties": { + "organization_id": { + "type": "string", + "format": "uuid", + "title": "Organization Id", + "description": "ID of the organization that owns the document. Required — Profound API keys are user-scoped, so the owning organization must be named explicitly. The caller must be a member of this organization." }, - "pagination": { + "name": { "anyOf": [ { - "$ref": "#/components/schemas/Pagination" + "type": "string", + "minLength": 1 }, { "type": "null" } - ] - }, - "include_count": { - "type": "boolean", - "title": "Include Count", - "default": false - }, - "tag_filter_type": { - "type": "string", - "enum": [ - "any", - "all" ], - "title": "Tag Filter Type", - "default": "any" - }, - "include_no_tag": { - "type": "boolean", - "title": "Include No Tag", - "default": false - }, - "exclude_topic_ids": { - "type": "boolean", - "title": "Exclude Topic Ids", - "default": false + "title": "Name", + "description": "New title for the document. Renaming sets a permanent lock: once a document is renamed through this route, its title stops following the first heading of its content, for the rest of the document's life, and no route can undo the lock. Omit to leave the title as it is." }, - "dimensions": { - "items": { - "type": "string", - "enum": [ - "period", - "asset_name", - "date", - "model_id", - "topic_id", - "region_id", - "prompt_id", - "prompt" - ] - }, - "type": "array", - "title": "Dimensions" + "visibility": { + "anyOf": [ + { + "type": "string", + "enum": [ + "invited_only", + "organization" + ] + }, + { + "type": "null" + } + ], + "title": "Visibility", + "description": "New sharing scope: `invited_only` for only the people invited to the document, or `organization` for everyone in the owning organization. Only the document's creator can change this; omit to leave sharing as it is. Three things worth knowing before you set it: `organization` visibility grants view only — there is no value here that grants the organization edit access. Setting `invited_only` removes the organization's access entirely. And re-asserting `organization` on a document whose organization grant is already `edit` silently downgrades the whole organization to view — upstream replays the access sync whenever this field is sent, and that sync always upserts view, even when the value you sent matches the one already stored." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "organization_id" + ], + "title": "UpdateDocumentRequest", + "description": "Request body for renaming or resharing a document." + }, + "UpdateProjectTaskRequest": { + "properties": { + "title": { + "anyOf": [ + { + "type": "string", + "maxLength": 240, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Title" }, - "metrics": { - "items": { - "type": "string", - "enum": [ - "visibility_score", - "share_of_voice", - "average_position", - "visibility_rank", - "average_position_rank", - "position1_percentage", - "position2_percentage", - "position3_percentage", - "position_above3_percentage", - "total_count" - ] - }, - "type": "array", - "title": "Metrics" + "summary": { + "anyOf": [ + { + "type": "string", + "maxLength": 2000, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Summary" }, - "owned_asset_names": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Owned Asset Names" + "brief": { + "anyOf": [ + { + "type": "string", + "maxLength": 8000, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Brief" }, - "search_asset": { + "type": { "anyOf": [ { - "type": "string" + "type": "string", + "maxLength": 80, + "minLength": 1 }, { "type": "null" } ], - "title": "Search Asset" + "title": "Type" }, - "include_asset": { + "topic": { "anyOf": [ { - "type": "string" + "type": "string", + "maxLength": 120, + "minLength": 1 }, { "type": "null" } ], - "title": "Include Asset" + "title": "Topic" }, - "include_asset_only": { - "type": "boolean", - "title": "Include Asset Only", - "default": false + "impact": { + "anyOf": [ + { + "type": "integer", + "maximum": 5, + "minimum": 1 + }, + { + "type": "null" + } + ], + "title": "Impact" }, - "include_assets_only": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Include Assets Only" + "reference_url": { + "anyOf": [ + { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Reference Url" }, - "rank_by": { + "reference_label": { + "anyOf": [ + { + "type": "string", + "maxLength": 240, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Reference Label" + } + }, + "additionalProperties": false, + "type": "object", + "title": "UpdateProjectTaskRequest" + }, + "UpdateProjectTaskStatusRequest": { + "properties": { + "status": { "type": "string", "enum": [ - "visibility_score", - "average_position" + "not_started", + "in_progress", + "done", + "abandoned" ], - "title": "Rank By", - "default": "visibility_score" + "title": "Status" }, - "include_position_frequency": { - "type": "boolean", - "title": "Include Position Frequency", - "default": false + "note": { + "anyOf": [ + { + "type": "string", + "maxLength": 2000, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Note" } }, + "additionalProperties": false, "type": "object", "required": [ - "category_id", - "start_date", - "end_date" + "status" ], - "title": "ShoppingVisibilityQuery" + "title": "UpdateProjectTaskStatusRequest" }, - "StreamCitationsQuery": { + "UpdatePromptInput": { "properties": { - "date_interval": { + "id": { "type": "string", - "enum": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" - ], - "title": "Date Interval", - "description": "Date interval for the report. (only used with date dimension)", - "default": "day" - }, - "dimensions": { - "items": { - "type": "string", - "enum": [ - "hostname", - "path", - "date", - "region", - "topic", - "topic_id", - "model", - "tag", - "prompt", - "prompt_id", - "url", - "root_domain", - "persona", - "citation_category" - ] - }, - "type": "array", - "title": "Dimensions", - "description": "Dimensions to group the report by.", - "default": [] - }, - "metrics": { - "items": { - "type": "string", - "enum": [ - "count", - "citation_share", - "share_of_voice", - "first_cited_at" - ] - }, - "type": "array", - "title": "Metrics", - "description": "Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead.", - "deprecated_values": { - "share_of_voice": "Use citation_share instead" - } + "title": "Id", + "description": "ID of the prompt to update." }, - "order_by": { - "additionalProperties": { - "type": "string", - "enum": [ - "asc", - "desc" - ] - }, - "type": "object", - "title": "Order By", - "description": "\n Custom ordering of the report results.\n\n The order is a record of key-value pairs where:\n - `key` is the field to order by, which can be a metric or dimension\n - `value` is the direction of the order, either `asc` for ascending or `desc` for descending.\n\n When not specified, the default order is the first metric in the query descending.\n ", - "default": {}, - "examples": [ + "prompt": { + "anyOf": [ { - "date": "asc" + "type": "string" }, { - "count": "desc", - "date": "asc" + "type": "null" } - ] + ], + "title": "Prompt", + "description": "New prompt text." }, - "pagination": { + "topic": { "anyOf": [ { - "$ref": "#/components/schemas/Pagination" + "$ref": "#/components/schemas/IdOrName" }, { "type": "null" } - ] - }, - "category_id": { - "type": "string", - "format": "uuid", - "title": "Category Id" - }, - "start_date": { - "type": "string", - "format": "date-time", - "title": "Start Date", - "description": "Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + ], + "description": "New topic. A new topic is created if the name doesn't exist." }, - "end_date": { - "type": "string", - "format": "date-time", - "title": "End Date", - "description": "End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + "language": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Language", + "description": "New language code. Must be enabled for the organization." }, - "filters": { - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/HostnameFilter" - }, - { - "$ref": "#/components/schemas/PathFilter" - }, - { - "$ref": "#/components/schemas/RegionIdFilter" - }, - { - "$ref": "#/components/schemas/RegionNameFilter" - }, - { - "$ref": "#/components/schemas/TopicIdFilter" - }, - { - "$ref": "#/components/schemas/TopicNameFilter" - }, - { - "$ref": "#/components/schemas/ModelIdFilter" - }, - { - "$ref": "#/components/schemas/TagIdFilter" - }, - { - "$ref": "#/components/schemas/TagNameFilter" - }, - { - "$ref": "#/components/schemas/UrlFilter" - }, - { - "$ref": "#/components/schemas/RootDomainFilter" - }, - { - "$ref": "#/components/schemas/AnalysisTypeFilter" - }, - { - "$ref": "#/components/schemas/PromptTypeFilter" - }, - { - "$ref": "#/components/schemas/PersonaIdFilter" - }, - { - "$ref": "#/components/schemas/CitationCategoryFilter" - }, - { - "$ref": "#/components/schemas/PromptFilter" + "tags": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/IdOrName" }, - { - "$ref": "#/components/schemas/PromptIdFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "analysis_type": "#/components/schemas/AnalysisTypeFilter", - "citation_category": "#/components/schemas/CitationCategoryFilter", - "hostname": "#/components/schemas/HostnameFilter", - "model": "#/components/schemas/ModelIdFilter", - "model_id": "#/components/schemas/ModelIdFilter", - "path": "#/components/schemas/PathFilter", - "persona_id": "#/components/schemas/PersonaIdFilter", - "prompt": "#/components/schemas/PromptFilter", - "prompt_id": "#/components/schemas/PromptIdFilter", - "prompt_type": "#/components/schemas/PromptTypeFilter", - "region": "#/components/schemas/RegionIdFilter", - "region_id": "#/components/schemas/RegionIdFilter", - "region_name": "#/components/schemas/RegionNameFilter", - "root_domain": "#/components/schemas/RootDomainFilter", - "tag": "#/components/schemas/TagIdFilter", - "tag_id": "#/components/schemas/TagIdFilter", - "tag_name": "#/components/schemas/TagNameFilter", - "topic": "#/components/schemas/TopicIdFilter", - "topic_id": "#/components/schemas/TopicIdFilter", - "topic_name": "#/components/schemas/TopicNameFilter", - "url": "#/components/schemas/UrlFilter" - } + "type": "array" + }, + { + "type": "null" } - }, - "type": "array", - "title": "Filters", - "description": "List of filters to apply to the citations report." - } - }, - "type": "object", - "required": [ - "metrics", - "category_id", - "start_date", - "end_date" - ], - "title": "StreamCitationsQuery" - }, - "StreamSentimentQuery": { - "properties": { - "date_interval": { - "type": "string", - "enum": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" ], - "title": "Date Interval", - "description": "Date interval for the report. (only used with date dimension)", - "default": "day" + "title": "Tags", + "description": "New tag set. Replaces all existing tags on the prompt." }, - "dimensions": { - "items": { - "type": "string", - "enum": [ - "theme", - "date", - "region", - "topic", - "topic_id", - "model", - "asset_id", - "asset_name", - "tag", - "prompt", - "prompt_id", - "sentiment_type", - "persona" - ] - }, - "type": "array", - "title": "Dimensions", - "description": "Dimensions to group the report by.", - "default": [] + "regions": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/IdOrName" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Regions", + "description": "New region set. Replaces all existing regions." }, - "metrics": { - "items": { - "type": "string", - "enum": [ - "positive", - "negative", - "occurrences" - ] - }, - "type": "array", - "title": "Metrics" + "platforms": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/IdOrName" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Platforms", + "description": "New platform set. Replaces all existing platforms." }, - "order_by": { - "additionalProperties": { - "type": "string", - "enum": [ - "asc", - "desc" - ] - }, - "type": "object", - "title": "Order By", - "description": "\nCustom ordering of the report results.\n\nThe order is a record of key-value pairs where:\n- key is the field to order by, which can be a metric or dimension\n- value is the direction of the order, either 'asc' for ascending or 'desc' for descending.\n\nWhen not specified, the default order is the first metric in the query descending.\n ", - "default": {}, - "examples": [ + "personas": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/IdOrName" + }, + "type": "array" + }, { - "date": "asc" + "type": "null" } - ] + ], + "title": "Personas", + "description": "New persona set. Replaces all existing personas." }, - "pagination": { + "analysis_types": { "anyOf": [ { - "$ref": "#/components/schemas/Pagination" + "items": { + "type": "string", + "enum": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ] + }, + "type": "array" }, { "type": "null" } - ] - }, - "category_id": { - "type": "string", - "format": "uuid", - "title": "Category Id" - }, - "start_date": { - "type": "string", - "format": "date-time", - "title": "Start Date", - "description": "Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + ], + "title": "Analysis Types", + "description": "New analysis types. Replaces all existing analysis types on the prompt." }, - "end_date": { - "type": "string", - "format": "date-time", - "title": "End Date", - "description": "End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + "prompt_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Prompt Type", + "description": "Deprecated. Use analysis_types instead.", + "deprecated": true }, - "filters": { - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/AssetIdFilter" - }, - { - "$ref": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter" - }, - { - "$ref": "#/components/schemas/ThemeFilter" - }, - { - "$ref": "#/components/schemas/RegionIdFilter" - }, - { - "$ref": "#/components/schemas/RegionNameFilter" - }, - { - "$ref": "#/components/schemas/TopicIdFilter" - }, - { - "$ref": "#/components/schemas/TopicNameFilter" - }, - { - "$ref": "#/components/schemas/ModelIdFilter" - }, - { - "$ref": "#/components/schemas/TagIdFilter" - }, - { - "$ref": "#/components/schemas/TagNameFilter" - }, - { - "$ref": "#/components/schemas/PromptFilter" - }, - { - "$ref": "#/components/schemas/PersonaIdFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "asset_id": "#/components/schemas/AssetIdFilter", - "asset_name": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter", - "model": "#/components/schemas/ModelIdFilter", - "model_id": "#/components/schemas/ModelIdFilter", - "persona_id": "#/components/schemas/PersonaIdFilter", - "prompt": "#/components/schemas/PromptFilter", - "region": "#/components/schemas/RegionIdFilter", - "region_id": "#/components/schemas/RegionIdFilter", - "region_name": "#/components/schemas/RegionNameFilter", - "tag": "#/components/schemas/TagIdFilter", - "tag_id": "#/components/schemas/TagIdFilter", - "tag_name": "#/components/schemas/TagNameFilter", - "theme": "#/components/schemas/ThemeFilter", - "topic": "#/components/schemas/TopicIdFilter", - "topic_id": "#/components/schemas/TopicIdFilter", - "topic_name": "#/components/schemas/TopicNameFilter" - } + "asset": { + "anyOf": [ + { + "$ref": "#/components/schemas/IdOrName" + }, + { + "type": "null" } - }, - "type": "array", - "title": "Filters", - "description": "List of filters to apply to the sentiment report." + ], + "description": "Asset reference. Required when analysis_types includes 'sentiment'." } }, "type": "object", "required": [ - "metrics", - "category_id", - "start_date", - "end_date" + "id" ], - "title": "StreamSentimentQuery" + "title": "UpdatePromptInput", + "description": "Fields to update on an existing prompt. Only provided fields are changed; omitted fields are left unchanged." }, - "StreamVisibilityQuery": { + "UpdatePromptStatusBody": { "properties": { - "date_interval": { + "prompt_ids": { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array", + "title": "Prompt Ids", + "description": "IDs of the prompts to update." + }, + "status": { "type": "string", "enum": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" + "active", + "disabled", + "deleted" ], - "title": "Date Interval", - "description": "Date interval for the report. (only used with date dimension)", - "default": "day" + "title": "Status", + "description": "Target status: 'active', 'disabled', or 'deleted'." }, - "dimensions": { + "dry_run": { + "type": "boolean", + "title": "Dry Run", + "description": "When true, validate and preview changes without persisting them.", + "default": false + } + }, + "type": "object", + "required": [ + "prompt_ids", + "status" + ], + "title": "UpdatePromptStatusBody" + }, + "UpdatePromptStatusResponse": { + "properties": { + "dry_run": { + "type": "boolean", + "title": "Dry Run", + "description": "Whether this was a dry run (no changes persisted)." + }, + "updated_prompts": { + "type": "integer", + "title": "Updated Prompts", + "description": "Number of prompts whose status was changed.", + "default": 0 + } + }, + "type": "object", + "required": [ + "dry_run" + ], + "title": "UpdatePromptStatusResponse", + "description": "Response from updating prompt statuses." + }, + "UpdatePromptsBody": { + "properties": { + "prompts": { "items": { - "type": "string", - "enum": [ - "date", - "region", - "topic", - "topic_id", - "model", - "asset_id", - "asset_name", - "prompt", - "prompt_id", - "tag", - "persona" - ] + "$ref": "#/components/schemas/UpdatePromptInput" }, "type": "array", - "title": "Dimensions", - "description": "Dimensions to group the report by.", - "default": [] + "title": "Prompts", + "description": "List of prompt updates. Each entry must include an `id` and at least one field to change." + }, + "dry_run": { + "type": "boolean", + "title": "Dry Run", + "description": "When true, validate and preview changes without persisting them.", + "default": false + } + }, + "type": "object", + "required": [ + "prompts" + ], + "title": "UpdatePromptsBody" + }, + "UpdatePromptsResponse": { + "properties": { + "dry_run": { + "type": "boolean", + "title": "Dry Run", + "description": "Whether this was a dry run (no changes persisted)." + }, + "updated": { + "type": "integer", + "title": "Updated", + "description": "Number of prompts that had changes.", + "default": 0 + }, + "topics_created": { + "type": "integer", + "title": "Topics Created", + "description": "Number of new topics created.", + "default": 0 }, - "metrics": { + "tags_created": { + "type": "integer", + "title": "Tags Created", + "description": "Number of new tags created.", + "default": 0 + }, + "prompts": { "items": { - "type": "string", - "enum": [ - "share_of_voice", - "mentions_count", - "visibility_score", - "executions", - "average_position" - ] + "$ref": "#/components/schemas/PromptUpdatePreview" }, "type": "array", - "title": "Metrics" + "title": "Prompts", + "description": "List of prompts with their change diffs.", + "default": [] + } + }, + "type": "object", + "required": [ + "dry_run" + ], + "title": "UpdatePromptsResponse", + "description": "Response from updating prompts." + }, + "UrlFilter": { + "properties": { + "field": { + "type": "string", + "const": "url", + "title": "Field" }, - "order_by": { - "additionalProperties": { - "type": "string", - "enum": [ - "asc", - "desc" - ] - }, - "type": "object", - "title": "Order By", - "description": "\nCustom ordering of the report results.\n\nThe order is a record of key-value pairs where:\n- key is the field to order by, which can be a metric or dimension\n- value is the direction of the order, either 'asc' for ascending or 'desc' for descending.\n\nWhen not specified, the default order is the first metric in the query descending.\n ", - "default": {}, - "examples": [ - { - "date": "asc" - } - ] + "operator": { + "type": "string", + "enum": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "title": "Operator" }, - "pagination": { + "value": { "anyOf": [ { - "$ref": "#/components/schemas/Pagination" + "type": "string" }, { - "type": "null" + "items": { + "type": "string" + }, + "type": "array" } - ] - }, - "category_id": { - "type": "string", - "format": "uuid", - "title": "Category Id" - }, - "start_date": { - "type": "string", - "format": "date-time", - "title": "Start Date", - "description": "Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + ], + "title": "Value" + } + }, + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "title": "UrlFilter", + "description": "Filter by URL" + }, + "UserInput": { + "properties": { + "type": { + "$ref": "#/components/schemas/ContentType" }, - "end_date": { + "value": { "type": "string", - "format": "date-time", - "title": "End Date", - "description": "End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + "title": "Value" }, - "filters": { - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/RegionIdFilter" - }, - { - "$ref": "#/components/schemas/RegionNameFilter" - }, - { - "$ref": "#/components/schemas/ModelIdFilter" - }, - { - "$ref": "#/components/schemas/TopicIdFilter" - }, - { - "$ref": "#/components/schemas/TopicNameFilter" - }, - { - "$ref": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter" - }, - { - "$ref": "#/components/schemas/TagIdFilter" - }, + "metadata": { + "additionalProperties": { + "anyOf": [ { - "$ref": "#/components/schemas/TagNameFilter" + "type": "integer" }, { - "$ref": "#/components/schemas/PromptIdFilter" - }, + "type": "string" + } + ] + }, + "type": "object", + "title": "Metadata" + } + }, + "type": "object", + "required": [ + "type", + "value", + "metadata" + ], + "title": "UserInput" + }, + "ValidationError": { + "properties": { + "loc": { + "items": { + "anyOf": [ { - "$ref": "#/components/schemas/PromptFilter" + "type": "string" }, { - "$ref": "#/components/schemas/PersonaIdFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "asset_name": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter", - "model": "#/components/schemas/ModelIdFilter", - "model_id": "#/components/schemas/ModelIdFilter", - "persona_id": "#/components/schemas/PersonaIdFilter", - "prompt": "#/components/schemas/PromptFilter", - "prompt_id": "#/components/schemas/PromptIdFilter", - "region": "#/components/schemas/RegionIdFilter", - "region_id": "#/components/schemas/RegionIdFilter", - "region_name": "#/components/schemas/RegionNameFilter", - "tag": "#/components/schemas/TagIdFilter", - "tag_id": "#/components/schemas/TagIdFilter", - "tag_name": "#/components/schemas/TagNameFilter", - "topic": "#/components/schemas/TopicIdFilter", - "topic_id": "#/components/schemas/TopicIdFilter", - "topic_name": "#/components/schemas/TopicNameFilter" + "type": "integer" } - } + ] }, "type": "array", - "title": "Filters", - "description": "List of filters to apply to the visibility report." + "title": "Location" + }, + "msg": { + "type": "string", + "title": "Message" + }, + "type": { + "type": "string", + "title": "Error Type" + }, + "input": { + "title": "Input" + }, + "ctx": { + "type": "object", + "title": "Context" } }, "type": "object", "required": [ - "metrics", - "category_id", - "start_date", - "end_date" + "loc", + "msg", + "type" ], - "title": "StreamVisibilityQuery" + "title": "ValidationError" }, - "StreamWebSearchResultsQuery": { + "VisibilityQuery": { "properties": { "date_interval": { "type": "string", @@ -18956,20 +30220,17 @@ "items": { "type": "string", "enum": [ - "hostname", - "path", - "url", - "root_domain", "date", "region", "topic", "topic_id", "model", - "tag", + "asset_id", + "asset_name", "prompt", "prompt_id", - "persona", - "search_query" + "tag", + "persona" ] }, "type": "array", @@ -18981,14 +30242,15 @@ "items": { "type": "string", "enum": [ - "count", - "search_share" + "share_of_voice", + "mentions_count", + "visibility_score", + "executions", + "average_position" ] }, "type": "array", - "minItems": 1, - "title": "Metrics", - "description": "Metrics to include. `search_share` is the per-prompt occurrence rate." + "title": "Metrics" }, "order_by": { "additionalProperties": { @@ -19000,28 +30262,18 @@ }, "type": "object", "title": "Order By", - "description": "\n Custom ordering of the report results.\n\n The order is a record of key-value pairs where:\n - `key` is the field to order by, which can be a metric or dimension\n - `value` is the direction of the order, either `asc` for ascending or `desc` for descending.\n\n When not specified, the default order is the first metric in the query descending.\n ", + "description": "\nCustom ordering of the report results.\n\nThe order is a record of key-value pairs where:\n- key is the field to order by, which can be a metric or dimension\n- value is the direction of the order, either 'asc' for ascending or 'desc' for descending.\n\nWhen not specified, the default order is the first metric in the query descending.\n ", "default": {}, "examples": [ { "date": "asc" - }, - { - "count": "desc", - "date": "asc" - } - ] - }, - "pagination": { - "anyOf": [ - { - "$ref": "#/components/schemas/Pagination" - }, - { - "type": "null" } ] }, + "pagination": { + "$ref": "#/components/schemas/Pagination", + "description": "Pagination settings for the report results." + }, "category_id": { "type": "string", "format": "uuid", @@ -19043,67 +30295,63 @@ "items": { "oneOf": [ { - "$ref": "#/components/schemas/HostnameFilter" + "$ref": "#/components/schemas/RegionIdFilter" }, { - "$ref": "#/components/schemas/PathFilter" + "$ref": "#/components/schemas/RegionNameFilter" }, { - "$ref": "#/components/schemas/RegionIdFilter" + "$ref": "#/components/schemas/ModelIdFilter" }, { "$ref": "#/components/schemas/TopicIdFilter" }, { - "$ref": "#/components/schemas/ModelIdFilter" + "$ref": "#/components/schemas/TopicNameFilter" }, { - "$ref": "#/components/schemas/TagIdFilter" + "$ref": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter" }, { - "$ref": "#/components/schemas/UrlFilter" + "$ref": "#/components/schemas/TagIdFilter" }, { - "$ref": "#/components/schemas/RootDomainFilter" + "$ref": "#/components/schemas/TagNameFilter" }, { - "$ref": "#/components/schemas/PersonaIdFilter" + "$ref": "#/components/schemas/PromptIdFilter" }, { "$ref": "#/components/schemas/PromptFilter" }, { - "$ref": "#/components/schemas/PromptIdFilter" - }, - { - "$ref": "#/components/schemas/SearchQueryFilter" + "$ref": "#/components/schemas/PersonaIdFilter" } ], "discriminator": { "propertyName": "field", "mapping": { - "hostname": "#/components/schemas/HostnameFilter", + "asset_name": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter", "model": "#/components/schemas/ModelIdFilter", "model_id": "#/components/schemas/ModelIdFilter", - "path": "#/components/schemas/PathFilter", "persona_id": "#/components/schemas/PersonaIdFilter", "prompt": "#/components/schemas/PromptFilter", "prompt_id": "#/components/schemas/PromptIdFilter", "region": "#/components/schemas/RegionIdFilter", "region_id": "#/components/schemas/RegionIdFilter", - "root_domain": "#/components/schemas/RootDomainFilter", - "search_query": "#/components/schemas/SearchQueryFilter", + "region_name": "#/components/schemas/RegionNameFilter", "tag": "#/components/schemas/TagIdFilter", "tag_id": "#/components/schemas/TagIdFilter", + "tag_name": "#/components/schemas/TagNameFilter", "topic": "#/components/schemas/TopicIdFilter", "topic_id": "#/components/schemas/TopicIdFilter", - "url": "#/components/schemas/UrlFilter" + "topic_name": "#/components/schemas/TopicNameFilter" } } }, "type": "array", "title": "Filters", - "description": "List of filters to apply to the web search results report." + "description": "List of filters to apply to the visibility report." } }, "type": "object", @@ -19113,593 +30361,814 @@ "start_date", "end_date" ], - "title": "StreamWebSearchResultsQuery" + "title": "VisibilityQuery" }, - "Tag": { + "VisibilityRow": { "properties": { - "id": { - "type": "string", - "title": "Id" + "asset": { + "anyOf": [ + { + "$ref": "#/components/schemas/AssetRef" + }, + { + "type": "null" + } + ] }, - "name": { - "type": "string", - "title": "Name" - } - }, - "type": "object", - "required": [ - "id", - "name" - ], - "title": "Tag" - }, - "TagIdFilter": { - "properties": { - "field": { + "rank": { "anyOf": [ { - "type": "string", - "const": "tag_id" + "type": "integer" }, { - "type": "string", - "const": "tag", - "deprecated": true + "type": "null" } ], - "title": "Field" + "title": "Rank", + "description": "Asset rank (only when not grouped)." }, - "operator": { - "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in" + "date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } ], - "title": "Operator" + "title": "Date" }, - "value": { + "model": { "anyOf": [ { - "type": "string", - "format": "uuid" + "$ref": "#/components/schemas/DimensionRef" }, { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "null" + } + ] + }, + "topic": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "region": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "prompt": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "persona": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionRef" + }, + { + "type": "null" + } + ] + }, + "visibility_score": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" } ], - "title": "Value" - } - }, - "type": "object", - "required": [ - "field", - "operator", - "value" - ], - "title": "TagIdFilter", - "description": "Filter by tag (prompt group) UUID." - }, - "TagNameFilter": { - "properties": { - "field": { - "type": "string", - "const": "tag_name", - "title": "Field" + "title": "Visibility Score" }, - "operator": { - "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" + "share_of_voice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } ], - "title": "Operator" + "title": "Share Of Voice" }, - "value": { + "average_position": { "anyOf": [ { - "type": "string" + "type": "number" }, { - "items": { - "type": "string" - }, - "type": "array" + "type": "null" } ], - "title": "Value" + "title": "Average Position" } }, + "additionalProperties": true, "type": "object", - "required": [ - "field", - "operator", - "value" - ], - "title": "TagNameFilter", - "description": "Filter by tag name." + "title": "VisibilityRow", + "description": "One (asset x group) row. Group dimensions and metrics present depend on `group_by`/`metrics`." }, - "ThemeFilter": { + "VisibilityV2Info": { "properties": { - "field": { + "total_results": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Total Results", + "description": "Total rows matching the query before pagination (null when not computed)." + }, + "count": { + "type": "integer", + "title": "Count", + "description": "Number of rows returned in `data` for this page." + }, + "next_cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Cursor", + "description": "Opaque cursor for the next page; null on the last page." + }, + "models": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Models", + "description": "Display names of the models the report covers." + }, + "start_date": { "type": "string", - "const": "theme", - "title": "Field" + "title": "Start Date", + "description": "Echoed request start date (YYYY-MM-DD, ET)." }, - "operator": { + "end_date": { "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" + "title": "End Date", + "description": "Echoed request end date (YYYY-MM-DD, ET)." + }, + "filter": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } ], - "title": "Operator" + "title": "Filter", + "description": "Echoed normalized filter tree, or null when no filter was sent." }, - "value": { + "scope": { + "type": "string", + "title": "Scope", + "description": "Asset scope: `all` or `owned`." + }, + "asset_filter": { "anyOf": [ { - "type": "string" + "additionalProperties": true, + "type": "object" }, { "items": { "type": "string" }, "type": "array" + }, + { + "type": "string" + }, + { + "type": "null" } ], - "title": "Value" + "title": "Asset Filter", + "description": "Echoed `assets` selection (filter clause, name, or list), or null." } }, + "additionalProperties": true, "type": "object", "required": [ - "field", - "operator", - "value" + "count", + "models", + "start_date", + "end_date", + "scope" ], - "title": "ThemeFilter", - "description": "Filter by theme" + "title": "VisibilityV2Info" }, - "TopInaccurateClaimRow": { + "VisibilityV2Query": { "properties": { - "clusterId": { + "category_id": { "type": "string", - "title": "Clusterid" + "format": "uuid", + "title": "Category Id" }, - "canonicalClaim": { + "start_date": { "type": "string", - "title": "Canonicalclaim" + "title": "Start Date", + "description": "YYYY-MM-DD, ET, inclusive" }, - "claimOccurrence": { - "type": "number", - "title": "Claimoccurrence" + "end_date": { + "type": "string", + "title": "End Date", + "description": "YYYY-MM-DD, ET, inclusive" }, - "claimOccurrenceDelta": { + "group_by": { + "items": { + "type": "string", + "enum": [ + "date", + "model", + "topic", + "region", + "prompt", + "persona" + ] + }, + "type": "array", + "title": "Group By" + }, + "metrics": { "anyOf": [ { - "type": "number" + "items": { + "type": "string", + "enum": [ + "visibility_score", + "share_of_voice", + "average_position" + ] + }, + "type": "array" }, { "type": "null" } ], - "title": "Claimoccurrencedelta" - } - }, - "type": "object", - "required": [ - "clusterId", - "canonicalClaim", - "claimOccurrence" - ], - "title": "TopInaccurateClaimRow" - }, - "TopInaccurateClaimsQuery": { - "properties": { - "start_date": { + "title": "Metrics" + }, + "interval": { "type": "string", - "title": "Start Date" + "enum": [ + "day", + "week", + "month" + ], + "title": "Interval", + "default": "day" }, - "end_date": { + "scope": { "type": "string", - "title": "End Date" + "enum": [ + "owned", + "all" + ], + "title": "Scope", + "default": "owned" }, - "comparison_start_date": { + "assets": { "anyOf": [ { "type": "string" }, + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "$ref": "#/components/schemas/EntityFilterClause" + }, { "type": "null" } ], - "title": "Comparison Start Date" + "title": "Assets", + "description": "A name (`is`), a list (`in`), or {op,value} with op `is`/`in`/`not_in`." }, - "comparison_end_date": { + "filter": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/FilterNode" }, { "type": "null" } - ], - "title": "Comparison End Date" + ] }, - "category_id": { - "type": "string", - "format": "uuid", - "title": "Category Id" + "sort": { + "$ref": "#/components/schemas/app__routes__v2__answer_engine_insights__reports__visibility__SortSpec" }, - "topic_ids": { + "limit": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "integer", + "maximum": 50, + "exclusiveMinimum": 0 }, { "type": "null" } ], - "title": "Topic Ids" - }, - "exclude_topic_ids": { - "type": "boolean", - "title": "Exclude Topic Ids", - "default": false + "title": "Limit", + "description": "Page size; default 10, max 50." }, - "tag_ids": { + "max_results": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "integer", + "exclusiveMinimum": 0 }, { "type": "null" } ], - "title": "Tag Ids" - }, - "tag_filter_type": { - "type": "string", - "enum": [ - "all", - "any" - ], - "title": "Tag Filter Type", - "default": "any" - }, - "include_no_tag": { - "type": "boolean", - "title": "Include No Tag", - "default": true + "title": "Max Results", + "description": "Stream endpoint only: cap the number of streamed rows (default: all)." }, - "region_ids": { + "cursor": { "anyOf": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Region Ids" + "title": "Cursor" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "VisibilityV2Query" + }, + "VisibilityV2Response": { + "properties": { + "info": { + "$ref": "#/components/schemas/VisibilityV2Info" + }, + "data": { + "items": { + "$ref": "#/components/schemas/VisibilityRow" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "info", + "data" + ], + "title": "VisibilityV2Response" + }, + "WebSearchResultsQuery": { + "properties": { + "date_interval": { + "type": "string", + "enum": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "title": "Date Interval", + "description": "Date interval for the report. (only used with date dimension)", + "default": "day" + }, + "dimensions": { + "items": { + "type": "string", + "enum": [ + "hostname", + "path", + "url", + "root_domain", + "date", + "region", + "topic", + "topic_id", + "model", + "tag", + "prompt", + "prompt_id", + "persona", + "search_query" + ] + }, + "type": "array", + "title": "Dimensions", + "description": "Dimensions to group the report by.", + "default": [] + }, + "metrics": { + "items": { + "type": "string", + "enum": [ + "count", + "search_share" + ] + }, + "type": "array", + "minItems": 1, + "title": "Metrics", + "description": "Metrics to include. `search_share` is the per-prompt occurrence rate." }, - "platform_ids": { - "anyOf": [ + "order_by": { + "additionalProperties": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "type": "object", + "title": "Order By", + "description": "\n Custom ordering of the report results.\n\n The order is a record of key-value pairs where:\n - `key` is the field to order by, which can be a metric or dimension\n - `value` is the direction of the order, either `asc` for ascending or `desc` for descending.\n\n When not specified, the default order is the first metric in the query descending.\n ", + "default": {}, + "examples": [ { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "date": "asc" }, { - "type": "null" + "count": "desc", + "date": "asc" } - ], - "title": "Platform Ids" + ] }, - "persona_ids": { - "anyOf": [ - { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Persona Ids" + "pagination": { + "$ref": "#/components/schemas/Pagination", + "description": "Pagination settings for the report results." }, - "include_no_persona": { - "type": "boolean", - "title": "Include No Persona", - "default": true + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" }, - "prompt_ids": { - "anyOf": [ - { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Prompt Ids" + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." }, - "citation_categories": { - "anyOf": [ - { - "items": { - "type": "string" + "end_date": { + "type": "string", + "format": "date-time", + "title": "End Date", + "description": "End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + }, + "filters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/HostnameFilter" }, - "type": "array" - }, - { - "type": "null" + { + "$ref": "#/components/schemas/PathFilter" + }, + { + "$ref": "#/components/schemas/RegionIdFilter" + }, + { + "$ref": "#/components/schemas/TopicIdFilter" + }, + { + "$ref": "#/components/schemas/ModelIdFilter" + }, + { + "$ref": "#/components/schemas/TagIdFilter" + }, + { + "$ref": "#/components/schemas/UrlFilter" + }, + { + "$ref": "#/components/schemas/RootDomainFilter" + }, + { + "$ref": "#/components/schemas/PersonaIdFilter" + }, + { + "$ref": "#/components/schemas/PromptFilter" + }, + { + "$ref": "#/components/schemas/PromptIdFilter" + }, + { + "$ref": "#/components/schemas/SearchQueryFilter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "hostname": "#/components/schemas/HostnameFilter", + "model": "#/components/schemas/ModelIdFilter", + "model_id": "#/components/schemas/ModelIdFilter", + "path": "#/components/schemas/PathFilter", + "persona_id": "#/components/schemas/PersonaIdFilter", + "prompt": "#/components/schemas/PromptFilter", + "prompt_id": "#/components/schemas/PromptIdFilter", + "region": "#/components/schemas/RegionIdFilter", + "region_id": "#/components/schemas/RegionIdFilter", + "root_domain": "#/components/schemas/RootDomainFilter", + "search_query": "#/components/schemas/SearchQueryFilter", + "tag": "#/components/schemas/TagIdFilter", + "tag_id": "#/components/schemas/TagIdFilter", + "topic": "#/components/schemas/TopicIdFilter", + "topic_id": "#/components/schemas/TopicIdFilter", + "url": "#/components/schemas/UrlFilter" + } } - ], - "title": "Citation Categories" - }, - "limit": { - "type": "integer", - "maximum": 50, - "minimum": 1, - "title": "Limit", - "default": 5 + }, + "type": "array", + "title": "Filters", + "description": "List of filters to apply to the web search results report." } }, "type": "object", "required": [ + "metrics", + "category_id", "start_date", - "end_date", - "category_id" + "end_date" ], - "title": "TopInaccurateClaimsQuery" + "title": "WebSearchResultsQuery" }, - "TopInaccurateClaimsResponse": { + "WebSearchResultsResponse": { "properties": { + "info": { + "$ref": "#/components/schemas/Info" + }, "data": { "items": { - "$ref": "#/components/schemas/TopInaccurateClaimRow" + "$ref": "#/components/schemas/WebSearchResultsResult" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "info", + "data" + ], + "title": "WebSearchResultsResponse", + "examples": [ + { + "data": [ + { + "dimensions": [ + "example.com", + "/some/path", + "2023-10-01" + ], + "metrics": [ + 10, + 0.05 + ] + } + ], + "info": { + "query": { + "date_interval": "day", + "dimensions": [ + "hostname", + "path", + "date" + ], + "filters": [ + { + "field": "hostname", + "operator": "is", + "value": "example.com" + } + ], + "metrics": [ + "count", + "search_share" + ] + }, + "total_rows": 200 + } + } + ] + }, + "WebSearchResultsResult": { + "properties": { + "metrics": { + "items": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "type": "array", + "title": "Metrics" + }, + "dimensions": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ] }, "type": "array", - "title": "Data" + "title": "Dimensions" } }, "type": "object", "required": [ - "data" + "metrics", + "dimensions" ], - "title": "TopInaccurateClaimsResponse" + "title": "WebSearchResultsResult" }, - "Topic": { + "YoutubeChannelRow": { "properties": { - "id": { - "type": "string", - "title": "Id" - }, "name": { "type": "string", - "title": "Name" + "title": "Name", + "description": "Channel title when grouped by channel, or the handle when no title resolved; category name when grouped by `[\"video_category\"]`; source type when grouped by `[\"source_type\"]`." }, - "status": { - "type": "string", - "enum": [ - "active", - "disabled" - ], - "title": "Status" - } - }, - "type": "object", - "required": [ - "id", - "name", - "status" - ], - "title": "Topic" - }, - "TopicIdFilter": { - "properties": { - "field": { + "handle": { "anyOf": [ { - "type": "string", - "const": "topic_id" + "type": "string" }, { - "type": "string", - "const": "topic", - "deprecated": true + "type": "null" } ], - "title": "Field" - }, - "operator": { - "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in" - ], - "title": "Operator" + "title": "Handle", + "description": "Channel handle without the `@`, and the identifier this API exposes. Pass it to /videos as `channel_handle`. Null for the rare channel whose handle did not resolve." }, - "value": { + "url": { "anyOf": [ { - "type": "string", - "format": "uuid" + "type": "string" }, { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array" + "type": "null" } ], - "title": "Value" - } - }, - "type": "object", - "required": [ - "field", - "operator", - "value" - ], - "title": "TopicIdFilter", - "description": "Filter by topic UUID." - }, - "TopicInput": { - "properties": { - "id": { - "type": "string", - "format": "uuid", - "title": "Id" + "title": "Url", + "description": "Openable channel URL. Null for video-category rows." }, - "name": { - "type": "string", - "title": "Name" - } - }, - "type": "object", - "required": [ - "id", - "name" - ], - "title": "TopicInput" - }, - "TopicNameFilter": { - "properties": { - "field": { - "type": "string", - "const": "topic_name", - "title": "Field" + "rank": { + "type": "integer", + "title": "Rank", + "description": "Leading channel's 1-based position in the full ranked set, continuing across pages; repeated across that channel's cross-tab rows rather than numbering rows." }, - "operator": { - "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" + "date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } ], - "title": "Operator" + "title": "Date", + "description": "Period start. Present when `interval` is set." }, - "value": { + "video_category": { "anyOf": [ { "type": "string" }, { - "items": { - "type": "string" - }, - "type": "array" + "type": "null" } ], - "title": "Value" - } - }, - "type": "object", - "required": [ - "field", - "operator", - "value" - ], - "title": "TopicNameFilter", - "description": "Filter by topic name" - }, - "UpdateAgentRequest": { - "properties": { - "graph": { - "additionalProperties": true, - "type": "object", - "title": "Graph", - "description": "New workflow graph for the agent's draft version. Replaces the current draft graph; the agent is iterated in place rather than re-created, so its ID is stable. Required — a null graph is rejected as a 422 here rather than as a relayed upstream error." - } - }, - "additionalProperties": false, - "type": "object", - "required": [ - "graph" - ], - "title": "UpdateAgentRequest", - "description": "Request body for updating a draft agent's graph in place." - }, - "UpdatePromptInput": { - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "ID of the prompt to update." + "title": "Video Category", + "description": "Populated for a secondary video-category slice; with group_by `[\"video_category\"]`, the category is returned in `name` instead. An unresolved category is returned as an empty string." }, - "prompt": { + "model": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/DimensionRef" }, { "type": "null" } ], - "title": "Prompt", - "description": "New prompt text." + "description": "Answer engine as an object `{id, name}`, present when grouped by model. The name matches `info.models`; the id is the model id the other reports accept." }, - "topic": { + "source_type": { "anyOf": [ { - "$ref": "#/components/schemas/IdOrName" + "type": "string", + "enum": [ + "video", + "short", + "channel", + "playlist", + "other" + ] }, { "type": "null" } ], - "description": "New topic. A new topic is created if the name doesn't exist." + "title": "Source Type", + "description": "YouTube source type, present when grouped by source type, including as the second dimension of a cross-tab." }, - "language": { + "count": { + "type": "integer", + "title": "Count", + "description": "Citations attributed to this row." + }, + "videos": { + "type": "integer", + "title": "Videos", + "description": "Distinct videos of this channel that were cited." + }, + "citation_share": { + "type": "number", + "title": "Citation Share", + "description": "Share of every YouTube citation in the window (attributed and unattributed alike), or the period when `interval` is set, regardless of `source_types`. An unnarrowed complete ranking sums to slightly less than 1 because unattributed citations cannot appear in channel rows; a narrowed ranking sums to its slice's share." + } + }, + "additionalProperties": true, + "type": "object", + "required": [ + "name", + "rank", + "count", + "videos", + "citation_share" + ], + "title": "YoutubeChannelRow", + "description": "One channel (or video category) row, optionally sliced." + }, + "YoutubeChannelsInfo": { + "properties": { + "total_results": { + "type": "integer", + "title": "Total Results", + "description": "Distinct leading channels matching the window; this can differ from the number of rows returned." + }, + "count": { + "type": "integer", + "title": "Count", + "description": "Number of rows returned in `data` for this page." + }, + "next_cursor": { "anyOf": [ { "type": "string" @@ -19708,91 +31177,163 @@ "type": "null" } ], - "title": "Language", - "description": "New language code. Must be enabled for the organization." + "title": "Next Cursor", + "description": "Opaque cursor for the next page; null on the last page." }, - "tags": { + "models": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Models", + "description": "Display names of the models the report covers." + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "Echoed request start date (YYYY-MM-DD, ET)." + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "Echoed request end date (YYYY-MM-DD, ET)." + }, + "filter": { "anyOf": [ { - "items": { - "$ref": "#/components/schemas/IdOrName" - }, - "type": "array" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "title": "Tags", - "description": "New tag set. Replaces all existing tags on the prompt." + "title": "Filter", + "description": "Echoed normalized filter tree, or null when no filter was sent." }, - "regions": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id", + "description": "Echoed category id this report covers." + }, + "source_types": { + "items": { + "type": "string", + "enum": [ + "video", + "short", + "channel", + "playlist", + "other" + ] + }, + "type": "array", + "title": "Source Types", + "description": "Source types this report covers. Derived from the request, not returned rows, so a listed type may have no rows." + }, + "cursor": { "anyOf": [ { - "items": { - "$ref": "#/components/schemas/IdOrName" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Regions", - "description": "New region set. Replaces all existing regions." + "title": "Cursor", + "description": "Echoed request cursor; omitted on the first page." + }, + "limit": { + "type": "integer", + "title": "Limit", + "description": "Effective page size in leading channels, not returned rows." }, - "platforms": { + "interval": { "anyOf": [ { - "items": { - "$ref": "#/components/schemas/IdOrName" - }, - "type": "array" + "type": "string", + "enum": [ + "day", + "week", + "month" + ] }, { "type": "null" } ], - "title": "Platforms", - "description": "New platform set. Replaces all existing platforms." + "title": "Interval", + "description": "Effective channel time-series interval, or null when the channel report covers the full window." }, - "personas": { + "group_by": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Group By", + "description": "Echoed dimensions that define a row. Channel reports echo `[\"channel\"]` when group_by is omitted." + } + }, + "additionalProperties": true, + "type": "object", + "required": [ + "total_results", + "count", + "models", + "start_date", + "end_date", + "category_id", + "source_types", + "limit", + "group_by" + ], + "title": "YoutubeChannelsInfo", + "description": "Channel report metadata, including effective paging and grouping settings." + }, + "YoutubeChannelsQuery": { + "properties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id" + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "YYYY-MM-DD, ET, inclusive" + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "YYYY-MM-DD, ET, inclusive" + }, + "filter": { "anyOf": [ { - "items": { - "$ref": "#/components/schemas/IdOrName" - }, - "type": "array" + "$ref": "#/components/schemas/FilterNode" }, { "type": "null" } ], - "title": "Personas", - "description": "New persona set. Replaces all existing personas." + "description": "Advanced filter tree. Prompt-level dimensions are `model`, `topic`, `region`, `prompt`, `persona`, `tag`, `analysis_type`. `channel` covers both channel cases: `in` with a list of handles selects exactly those channels, resolving each handle to its channel so a renamed channel is never returned in pieces; `contains` matches a channel's title or handle by name. Combine with `and`/`or`/`not` up to 3 deep. An exact `channel` selection must be its own `and` clause, and a `channel` leaf cannot share an `or` or `not` with a prompt-level leaf, because those compile at different stages of the query. `domain` and `page` are rejected rather than approximated: every row here is one domain, and `page` is not a video id." }, - "analysis_types": { + "limit": { "anyOf": [ { - "items": { - "type": "string", - "enum": [ - "visibility", - "sentiment", - "sentiment_v2", - "accuracy" - ] - }, - "type": "array" + "type": "integer", + "maximum": 50, + "exclusiveMinimum": 0 }, { "type": "null" } ], - "title": "Analysis Types", - "description": "New analysis types. Replaces all existing analysis types on the prompt." + "title": "Limit", + "description": "Page size; default 10, max 50." }, - "prompt_type": { + "cursor": { "anyOf": [ { "type": "string" @@ -19801,436 +31342,267 @@ "type": "null" } ], - "title": "Prompt Type", - "description": "Deprecated. Use analysis_types instead.", - "deprecated": true + "title": "Cursor" }, - "asset": { + "source_types": { "anyOf": [ { - "$ref": "#/components/schemas/IdOrName" + "items": { + "type": "string", + "enum": [ + "video", + "short", + "channel", + "playlist", + "other" + ] + }, + "type": "array" }, { "type": "null" } ], - "description": "Asset reference. Required when analysis_types includes 'sentiment'." - } - }, - "type": "object", - "required": [ - "id" - ], - "title": "UpdatePromptInput", - "description": "Fields to update on an existing prompt. Only provided fields are changed; omitted fields are left unchanged." - }, - "UpdatePromptStatusBody": { - "properties": { - "prompt_ids": { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array", - "title": "Prompt Ids", - "description": "IDs of the prompts to update." - }, - "status": { - "type": "string", - "enum": [ - "active", - "disabled", - "deleted" - ], - "title": "Status", - "description": "Target status: 'active', 'disabled', or 'deleted'." - }, - "dry_run": { - "type": "boolean", - "title": "Dry Run", - "description": "When true, validate and preview changes without persisting them.", - "default": false - } - }, - "type": "object", - "required": [ - "prompt_ids", - "status" - ], - "title": "UpdatePromptStatusBody" - }, - "UpdatePromptStatusResponse": { - "properties": { - "dry_run": { - "type": "boolean", - "title": "Dry Run", - "description": "Whether this was a dry run (no changes persisted)." - }, - "updated_prompts": { - "type": "integer", - "title": "Updated Prompts", - "description": "Number of prompts whose status was changed.", - "default": 0 - } - }, - "type": "object", - "required": [ - "dry_run" - ], - "title": "UpdatePromptStatusResponse", - "description": "Response from updating prompt statuses." - }, - "UpdatePromptsBody": { - "properties": { - "prompts": { - "items": { - "$ref": "#/components/schemas/UpdatePromptInput" - }, - "type": "array", - "title": "Prompts", - "description": "List of prompt updates. Each entry must include an `id` and at least one field to change." - }, - "dry_run": { - "type": "boolean", - "title": "Dry Run", - "description": "When true, validate and preview changes without persisting them.", - "default": false - } - }, - "type": "object", - "required": [ - "prompts" - ], - "title": "UpdatePromptsBody" - }, - "UpdatePromptsResponse": { - "properties": { - "dry_run": { - "type": "boolean", - "title": "Dry Run", - "description": "Whether this was a dry run (no changes persisted)." - }, - "updated": { - "type": "integer", - "title": "Updated", - "description": "Number of prompts that had changes.", - "default": 0 - }, - "topics_created": { - "type": "integer", - "title": "Topics Created", - "description": "Number of new topics created.", - "default": 0 - }, - "tags_created": { - "type": "integer", - "title": "Tags Created", - "description": "Number of new tags created.", - "default": 0 + "title": "Source Types", + "description": "Limit results to YouTube source types: `video`, `short`, `channel`, `playlist`, or `other`. Omit to include `video`, `short`, `channel`, and `playlist`; `other` is excluded because those citations have no channel. Requests containing `other` are rejected." }, - "prompts": { + "group_by": { "items": { - "$ref": "#/components/schemas/PromptUpdatePreview" + "type": "string", + "enum": [ + "channel", + "video_category", + "model", + "source_type" + ] }, "type": "array", - "title": "Prompts", - "description": "List of prompts with their change diffs.", - "default": [] - } - }, - "type": "object", - "required": [ - "dry_run" - ], - "title": "UpdatePromptsResponse", - "description": "Response from updating prompts." - }, - "UrlFilter": { - "properties": { - "field": { - "type": "string", - "const": "url", - "title": "Field" - }, - "operator": { - "type": "string", - "enum": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" - ], - "title": "Operator" + "title": "Group By", + "description": "What each row represents. Empty or `[\"channel\"]` ranks channels; `[\"video_category\"]` ranks content categories; `[\"source_type\"]` ranks source types; `[\"channel\", \"video_category\"]`, `[\"channel\", \"source_type\"]` and `[\"channel\", \"model\"]` return cross-tabs — a row per channel per category, or per answer engine. `limit` counts leading channels in every case, so ten channels across nine engines is ten channels and ninety rows." }, - "value": { + "interval": { "anyOf": [ { - "type": "string" + "type": "string", + "enum": [ + "day", + "week", + "month" + ] }, { - "items": { - "type": "string" - }, - "type": "array" + "type": "null" } ], - "title": "Value" + "title": "Interval", + "description": "Return a time series instead of window totals: one row per entity per period, each carrying `date`. `citation_share` is then relative to that period, so the series is comparable across periods. Omit for window totals." } }, + "additionalProperties": false, "type": "object", "required": [ - "field", - "operator", - "value" + "category_id", + "start_date", + "end_date" ], - "title": "UrlFilter", - "description": "Filter by URL" + "title": "YoutubeChannelsQuery", + "description": "Channel and category rollups." }, - "UserInput": { + "YoutubeChannelsResponse": { "properties": { - "type": { - "$ref": "#/components/schemas/ContentType" - }, - "value": { - "type": "string", - "title": "Value" + "info": { + "$ref": "#/components/schemas/YoutubeChannelsInfo" }, - "metadata": { - "additionalProperties": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "string" - } - ] + "data": { + "items": { + "$ref": "#/components/schemas/YoutubeChannelRow" }, - "type": "object", - "title": "Metadata" + "type": "array", + "title": "Data" } }, "type": "object", "required": [ - "type", - "value", - "metadata" + "info", + "data" ], - "title": "UserInput" + "title": "YoutubeChannelsResponse" }, - "ValidationError": { + "YoutubeCoverage": { "properties": { - "loc": { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "integer" - } - ] - }, - "type": "array", - "title": "Location" + "total_youtube_citations": { + "type": "integer", + "title": "Total Youtube Citations", + "description": "Every YouTube citation in the window.", + "default": 0 }, - "msg": { - "type": "string", - "title": "Message" + "attributed_citations": { + "type": "integer", + "title": "Attributed Citations", + "description": "Citations that resolve to a channel, so can appear in the channel and video rankings. NOT the citation_share divisor — that is total_youtube_citations, so a complete channel ranking's shares sum to slightly less than 1.", + "default": 0 }, - "type": { - "type": "string", - "title": "Error Type" + "unattributed_citations": { + "type": "integer", + "title": "Unattributed Citations", + "description": "Citations with no channel: search and feed URLs, deleted sources, or not yet resolved.", + "default": 0 }, - "input": { - "title": "Input" + "citations_video": { + "type": "integer", + "title": "Citations Video", + "description": "Citations pointing at long-form videos.", + "default": 0 }, - "ctx": { - "type": "object", - "title": "Context" + "citations_short": { + "type": "integer", + "title": "Citations Short", + "description": "Citations pointing at Shorts.", + "default": 0 + }, + "citations_channel": { + "type": "integer", + "title": "Citations Channel", + "description": "Citations pointing at a channel page rather than a video.", + "default": 0 + }, + "citations_playlist": { + "type": "integer", + "title": "Citations Playlist", + "description": "Citations pointing at a playlist.", + "default": 0 + }, + "citations_other": { + "type": "integer", + "title": "Citations Other", + "description": "Search, feed, and homepage URLs. Never attributable.", + "default": 0 + }, + "distinct_channels": { + "type": "integer", + "title": "Distinct Channels", + "description": "Distinct channels cited.", + "default": 0 + }, + "distinct_videos": { + "type": "integer", + "title": "Distinct Videos", + "description": "Distinct long-form videos cited.", + "default": 0 + }, + "distinct_shorts": { + "type": "integer", + "title": "Distinct Shorts", + "description": "Distinct Shorts cited.", + "default": 0 } }, "type": "object", - "required": [ - "loc", - "msg", - "type" - ], - "title": "ValidationError" + "title": "YoutubeCoverage", + "description": "How much of youtube.com the rollups can speak for." }, - "VisibilityQuery": { + "YoutubeSummaryInfo": { "properties": { - "date_interval": { - "type": "string", - "enum": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" + "total_results": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } ], - "title": "Date Interval", - "description": "Date interval for the report. (only used with date dimension)", - "default": "day" - }, - "dimensions": { - "items": { - "type": "string", - "enum": [ - "date", - "region", - "topic", - "topic_id", - "model", - "asset_id", - "asset_name", - "prompt", - "prompt_id", - "tag", - "persona" - ] - }, - "type": "array", - "title": "Dimensions", - "description": "Dimensions to group the report by.", - "default": [] + "title": "Total Results", + "description": "Total rows matching the query before pagination (null when not computed)." }, - "metrics": { - "items": { - "type": "string", - "enum": [ - "share_of_voice", - "mentions_count", - "visibility_score", - "executions", - "average_position" - ] - }, - "type": "array", - "title": "Metrics" + "count": { + "type": "integer", + "title": "Count", + "description": "Number of rows returned in `data` for this page." }, - "order_by": { - "additionalProperties": { - "type": "string", - "enum": [ - "asc", - "desc" - ] - }, - "type": "object", - "title": "Order By", - "description": "\nCustom ordering of the report results.\n\nThe order is a record of key-value pairs where:\n- key is the field to order by, which can be a metric or dimension\n- value is the direction of the order, either 'asc' for ascending or 'desc' for descending.\n\nWhen not specified, the default order is the first metric in the query descending.\n ", - "default": {}, - "examples": [ + "next_cursor": { + "anyOf": [ { - "date": "asc" + "type": "string" + }, + { + "type": "null" } - ] - }, - "pagination": { - "$ref": "#/components/schemas/Pagination", - "description": "Pagination settings for the report results." - }, - "category_id": { - "type": "string", - "format": "uuid", - "title": "Category Id" - }, - "start_date": { - "type": "string", - "format": "date-time", - "title": "Start Date", - "description": "Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." - }, - "end_date": { - "type": "string", - "format": "date-time", - "title": "End Date", - "description": "End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + ], + "title": "Next Cursor", + "description": "Opaque cursor for the next page; null on the last page." }, - "filters": { + "models": { "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/RegionIdFilter" - }, - { - "$ref": "#/components/schemas/RegionNameFilter" - }, - { - "$ref": "#/components/schemas/ModelIdFilter" - }, - { - "$ref": "#/components/schemas/TopicIdFilter" - }, - { - "$ref": "#/components/schemas/TopicNameFilter" - }, - { - "$ref": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter" - }, - { - "$ref": "#/components/schemas/TagIdFilter" - }, - { - "$ref": "#/components/schemas/TagNameFilter" - }, - { - "$ref": "#/components/schemas/PromptIdFilter" - }, - { - "$ref": "#/components/schemas/PromptFilter" - }, - { - "$ref": "#/components/schemas/PersonaIdFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "asset_name": "#/components/schemas/profound_answer_engine_insights__filters__AssetNameFilter", - "model": "#/components/schemas/ModelIdFilter", - "model_id": "#/components/schemas/ModelIdFilter", - "persona_id": "#/components/schemas/PersonaIdFilter", - "prompt": "#/components/schemas/PromptFilter", - "prompt_id": "#/components/schemas/PromptIdFilter", - "region": "#/components/schemas/RegionIdFilter", - "region_id": "#/components/schemas/RegionIdFilter", - "region_name": "#/components/schemas/RegionNameFilter", - "tag": "#/components/schemas/TagIdFilter", - "tag_id": "#/components/schemas/TagIdFilter", - "tag_name": "#/components/schemas/TagNameFilter", - "topic": "#/components/schemas/TopicIdFilter", - "topic_id": "#/components/schemas/TopicIdFilter", - "topic_name": "#/components/schemas/TopicNameFilter" - } + "type": "string" + }, + "type": "array", + "title": "Models", + "description": "Display names of the models the report covers." + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "Echoed request start date (YYYY-MM-DD, ET)." + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "Echoed request end date (YYYY-MM-DD, ET)." + }, + "filter": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" } + ], + "title": "Filter", + "description": "Echoed normalized filter tree, or null when no filter was sent." + }, + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id", + "description": "Echoed category id this report covers." + }, + "source_types": { + "items": { + "type": "string", + "enum": [ + "video", + "short", + "channel", + "playlist", + "other" + ] }, "type": "array", - "title": "Filters", - "description": "List of filters to apply to the visibility report." + "title": "Source Types", + "description": "All five YouTube source types; this endpoint has no source_types request field and cannot be narrowed." } }, + "additionalProperties": true, "type": "object", "required": [ - "metrics", - "category_id", + "count", + "models", "start_date", - "end_date" + "end_date", + "category_id", + "source_types" ], - "title": "VisibilityQuery" + "title": "YoutubeSummaryInfo", + "description": "Summary report metadata." }, - "VisibilityV2Query": { + "YoutubeSummaryQuery": { "properties": { "category_id": { "type": "string", + "format": "uuid", "title": "Category Id" }, "start_date": { @@ -20243,121 +31615,153 @@ "title": "End Date", "description": "YYYY-MM-DD, ET, inclusive" }, - "group_by": { - "items": { - "type": "string", - "enum": [ - "date", - "model", - "topic", - "region", - "prompt", - "persona" - ] - }, - "type": "array", - "title": "Group By" - }, - "metrics": { + "filter": { "anyOf": [ { - "items": { - "type": "string", - "enum": [ - "visibility_score", - "share_of_voice", - "average_position" - ] - }, - "type": "array" + "$ref": "#/components/schemas/FilterNode" }, { "type": "null" } ], - "title": "Metrics" + "description": "Advanced filter tree. Prompt-level dimensions are `model`, `topic`, `region`, `prompt`, `persona`, `tag`, `analysis_type`. `channel` covers both channel cases: `in` with a list of handles selects exactly those channels, resolving each handle to its channel so a renamed channel is never returned in pieces; `contains` matches a channel's title or handle by name. Combine with `and`/`or`/`not` up to 3 deep. An exact `channel` selection must be its own `and` clause, and a `channel` leaf cannot share an `or` or `not` with a prompt-level leaf, because those compile at different stages of the query. `domain` and `page` are rejected rather than approximated: every row here is one domain, and `page` is not a video id." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "category_id", + "start_date", + "end_date" + ], + "title": "YoutubeSummaryQuery", + "description": "One object describing the window." + }, + "YoutubeSummaryResponse": { + "properties": { + "info": { + "$ref": "#/components/schemas/YoutubeSummaryInfo" }, - "interval": { + "data": { + "$ref": "#/components/schemas/YoutubeCoverage" + } + }, + "type": "object", + "required": [ + "info", + "data" + ], + "title": "YoutubeSummaryResponse" + }, + "YoutubeVideoRow": { + "properties": { + "video_id": { "type": "string", - "enum": [ - "day", - "week", - "month" - ], - "title": "Interval", - "default": "day" + "title": "Video Id", + "description": "YouTube video id, as in the watch URL." }, - "scope": { + "source_type": { "type": "string", "enum": [ - "owned", - "all" + "video", + "short", + "channel", + "playlist", + "other" ], - "title": "Scope", - "default": "owned" + "title": "Source Type", + "description": "YouTube source type: `video`, `short`, `channel`, `playlist` or `other`." }, - "assets": { + "title": { "anyOf": [ { "type": "string" }, { - "items": { - "type": "string" - }, - "type": "array" + "type": "null" + } + ], + "title": "Title", + "description": "Resolved title, or null when unavailable." + }, + "channel_title": { + "anyOf": [ + { + "type": "string" }, { - "$ref": "#/components/schemas/EntityFilterClause" + "type": "null" + } + ], + "title": "Channel Title", + "description": "Publishing channel title, or null when unknown." + }, + "channel_handle": { + "anyOf": [ + { + "type": "string" }, { "type": "null" } ], - "title": "Assets", - "description": "A name (`is`), a list (`in`), or {op,value} with op `is`/`in`/`not_in`." + "title": "Channel Handle", + "description": "Handle of the publishing channel; select it with a `channel` filter of `in`. Null when unknown." }, - "filter": { + "url": { "anyOf": [ { - "$ref": "#/components/schemas/FilterNode" + "type": "string" }, { "type": "null" } - ] + ], + "title": "Url", + "description": "Openable video URL, or null when unavailable." }, - "sort": { - "$ref": "#/components/schemas/app__routes__v2__answer_engine_insights__reports__visibility__SortSpec" + "channel_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Channel Url", + "description": "Openable URL for the publishing channel, or null when unknown." }, - "limit": { + "rank": { + "type": "integer", + "title": "Rank", + "description": "1-based position in the full ranked set, continuing across pages." + }, + "published_at": { "anyOf": [ { - "type": "integer", - "maximum": 50, - "exclusiveMinimum": 0 + "type": "string" }, { "type": "null" } ], - "title": "Limit", - "description": "Page size; default 10, max 50." + "title": "Published At", + "description": "Upload date, or null when unknown." }, - "max_results": { + "duration_seconds": { "anyOf": [ { - "type": "integer", - "exclusiveMinimum": 0 + "type": "integer" }, { "type": "null" } ], - "title": "Max Results", - "description": "Stream endpoint only: cap the number of streamed rows (default: all)." + "title": "Duration Seconds", + "description": "Length in seconds, or null when unknown." }, - "cursor": { + "video_category": { "anyOf": [ { "type": "string" @@ -20366,99 +31770,159 @@ "type": "null" } ], - "title": "Cursor" + "title": "Video Category", + "description": "YouTube content category, or null when unknown." + }, + "count": { + "type": "integer", + "title": "Count", + "description": "Citations attributed to this video." + }, + "citation_share": { + "type": "number", + "title": "Citation Share", + "description": "Share of every YouTube citation in the window (attributed and unattributed alike), regardless of `source_types`. Shares sum to at most 1, reaching about 1 only with `attribution=\"all\"` and no `source_types` filter; a narrowed ranking sums to its slice's share." } }, - "additionalProperties": false, + "additionalProperties": true, "type": "object", "required": [ - "category_id", - "start_date", - "end_date" + "video_id", + "source_type", + "rank", + "count", + "citation_share" ], - "title": "VisibilityV2Query" + "title": "YoutubeVideoRow" }, - "WebSearchResultsQuery": { + "YoutubeVideosInfo": { "properties": { - "date_interval": { - "type": "string", - "enum": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" + "total_results": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } ], - "title": "Date Interval", - "description": "Date interval for the report. (only used with date dimension)", - "default": "day" + "title": "Total Results", + "description": "Total rows matching the query before pagination (null when not computed)." }, - "dimensions": { - "items": { - "type": "string", - "enum": [ - "hostname", - "path", - "url", - "root_domain", - "date", - "region", - "topic", - "topic_id", - "model", - "tag", - "prompt", - "prompt_id", - "persona", - "search_query" - ] - }, - "type": "array", - "title": "Dimensions", - "description": "Dimensions to group the report by.", - "default": [] + "count": { + "type": "integer", + "title": "Count", + "description": "Number of rows returned in `data` for this page." }, - "metrics": { + "next_cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Cursor", + "description": "Opaque cursor for the next page; null on the last page." + }, + "models": { "items": { - "type": "string", - "enum": [ - "count", - "search_share" - ] + "type": "string" }, "type": "array", - "minItems": 1, - "title": "Metrics", - "description": "Metrics to include. `search_share` is the per-prompt occurrence rate." + "title": "Models", + "description": "Display names of the models the report covers." + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "Echoed request start date (YYYY-MM-DD, ET)." + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "Echoed request end date (YYYY-MM-DD, ET)." + }, + "filter": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Filter", + "description": "Echoed normalized filter tree, or null when no filter was sent." }, - "order_by": { - "additionalProperties": { + "category_id": { + "type": "string", + "format": "uuid", + "title": "Category Id", + "description": "Echoed category id this report covers." + }, + "source_types": { + "items": { "type": "string", "enum": [ - "asc", - "desc" + "video", + "short", + "channel", + "playlist", + "other" ] }, - "type": "object", - "title": "Order By", - "description": "\n Custom ordering of the report results.\n\n The order is a record of key-value pairs where:\n - `key` is the field to order by, which can be a metric or dimension\n - `value` is the direction of the order, either `asc` for ascending or `desc` for descending.\n\n When not specified, the default order is the first metric in the query descending.\n ", - "default": {}, - "examples": [ + "type": "array", + "title": "Source Types", + "description": "Source types this report covers. Derived from the request, not returned rows, so a listed type may have no rows." + }, + "cursor": { + "anyOf": [ { - "date": "asc" + "type": "string" }, { - "count": "desc", - "date": "asc" + "type": "null" } - ] + ], + "title": "Cursor", + "description": "Echoed request cursor; omitted on the first page." }, - "pagination": { - "$ref": "#/components/schemas/Pagination", - "description": "Pagination settings for the report results." + "limit": { + "type": "integer", + "title": "Limit", + "description": "Effective page size applied to this paged report." }, + "attribution": { + "type": "string", + "enum": [ + "attributed", + "unattributed", + "all" + ], + "title": "Attribution", + "description": "Effective video attribution mode." + } + }, + "additionalProperties": true, + "type": "object", + "required": [ + "count", + "models", + "start_date", + "end_date", + "category_id", + "source_types", + "limit", + "attribution" + ], + "title": "YoutubeVideosInfo", + "description": "Video report metadata, including effective paging and attribution settings." + }, + "YoutubeVideosQuery": { + "properties": { "category_id": { "type": "string", "format": "uuid", @@ -20466,100 +31930,102 @@ }, "start_date": { "type": "string", - "format": "date-time", "title": "Start Date", - "description": "Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + "description": "YYYY-MM-DD, ET, inclusive" }, "end_date": { "type": "string", - "format": "date-time", "title": "End Date", - "description": "End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp." + "description": "YYYY-MM-DD, ET, inclusive" }, - "filters": { - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/HostnameFilter" - }, - { - "$ref": "#/components/schemas/PathFilter" - }, - { - "$ref": "#/components/schemas/RegionIdFilter" - }, - { - "$ref": "#/components/schemas/TopicIdFilter" - }, - { - "$ref": "#/components/schemas/ModelIdFilter" - }, - { - "$ref": "#/components/schemas/TagIdFilter" - }, - { - "$ref": "#/components/schemas/UrlFilter" - }, - { - "$ref": "#/components/schemas/RootDomainFilter" - }, - { - "$ref": "#/components/schemas/PersonaIdFilter" - }, - { - "$ref": "#/components/schemas/PromptFilter" - }, - { - "$ref": "#/components/schemas/PromptIdFilter" + "filter": { + "anyOf": [ + { + "$ref": "#/components/schemas/FilterNode" + }, + { + "type": "null" + } + ], + "description": "Advanced filter tree. Prompt-level dimensions are `model`, `topic`, `region`, `prompt`, `persona`, `tag`, `analysis_type`. `channel` covers both channel cases: `in` with a list of handles selects exactly those channels, resolving each handle to its channel so a renamed channel is never returned in pieces; `contains` matches a channel's title or handle by name. Combine with `and`/`or`/`not` up to 3 deep. An exact `channel` selection must be its own `and` clause, and a `channel` leaf cannot share an `or` or `not` with a prompt-level leaf, because those compile at different stages of the query. `domain` and `page` are rejected rather than approximated: every row here is one domain, and `page` is not a video id." + }, + "limit": { + "anyOf": [ + { + "type": "integer", + "maximum": 50, + "exclusiveMinimum": 0 + }, + { + "type": "null" + } + ], + "title": "Limit", + "description": "Page size; default 10, max 50." + }, + "cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Cursor" + }, + "source_types": { + "anyOf": [ + { + "items": { + "type": "string", + "enum": [ + "video", + "short", + "channel", + "playlist", + "other" + ] }, - { - "$ref": "#/components/schemas/SearchQueryFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "hostname": "#/components/schemas/HostnameFilter", - "model": "#/components/schemas/ModelIdFilter", - "model_id": "#/components/schemas/ModelIdFilter", - "path": "#/components/schemas/PathFilter", - "persona_id": "#/components/schemas/PersonaIdFilter", - "prompt": "#/components/schemas/PromptFilter", - "prompt_id": "#/components/schemas/PromptIdFilter", - "region": "#/components/schemas/RegionIdFilter", - "region_id": "#/components/schemas/RegionIdFilter", - "root_domain": "#/components/schemas/RootDomainFilter", - "search_query": "#/components/schemas/SearchQueryFilter", - "tag": "#/components/schemas/TagIdFilter", - "tag_id": "#/components/schemas/TagIdFilter", - "topic": "#/components/schemas/TopicIdFilter", - "topic_id": "#/components/schemas/TopicIdFilter", - "url": "#/components/schemas/UrlFilter" - } + "type": "array" + }, + { + "type": "null" } - }, - "type": "array", - "title": "Filters", - "description": "List of filters to apply to the web search results report." + ], + "title": "Source Types", + "description": "Limit results to YouTube source types: `video`, `short`, `channel`, `playlist`, or `other`. Omit to include `video` and `short` with the default `attribution='attributed'`; `unattributed` and `all` widen the default to all five source types. Requests containing `other` with `attribution='attributed'` are rejected." + }, + "attribution": { + "type": "string", + "enum": [ + "attributed", + "unattributed", + "all" + ], + "title": "Attribution", + "description": "Choose attributed citations, unattributed citations, or all citations. An unattributed row has no channel: `source_type` is `other` for a search or feed URL that names no source, and any other type is a source we have no channel for.", + "default": "attributed" } }, + "additionalProperties": false, "type": "object", "required": [ - "metrics", "category_id", "start_date", "end_date" ], - "title": "WebSearchResultsQuery" + "title": "YoutubeVideosQuery", + "description": "Cited videos, optionally narrowed to specific channels." }, - "WebSearchResultsResponse": { + "YoutubeVideosResponse": { "properties": { "info": { - "$ref": "#/components/schemas/Info" + "$ref": "#/components/schemas/YoutubeVideosInfo" }, "data": { "items": { - "$ref": "#/components/schemas/WebSearchResultsResult" + "$ref": "#/components/schemas/YoutubeVideoRow" }, "type": "array", "title": "Data" @@ -20570,88 +32036,7 @@ "info", "data" ], - "title": "WebSearchResultsResponse", - "examples": [ - { - "data": [ - { - "dimensions": [ - "example.com", - "/some/path", - "2023-10-01" - ], - "metrics": [ - 10, - 0.05 - ] - } - ], - "info": { - "query": { - "date_interval": "day", - "dimensions": [ - "hostname", - "path", - "date" - ], - "filters": [ - { - "field": "hostname", - "operator": "is", - "value": "example.com" - } - ], - "metrics": [ - "count", - "search_share" - ] - }, - "total_rows": 200 - } - } - ] - }, - "WebSearchResultsResult": { - "properties": { - "metrics": { - "items": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "number" - } - ] - }, - "type": "array", - "title": "Metrics" - }, - "dimensions": { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "string", - "format": "uuid" - }, - { - "type": "null" - } - ] - }, - "type": "array", - "title": "Dimensions" - } - }, - "type": "object", - "required": [ - "metrics", - "dimensions" - ], - "title": "WebSearchResultsResult" + "title": "YoutubeVideosResponse" }, "app__routes__v2__answer_engine_insights__reports__query_fanouts__SortSpec": { "properties": { diff --git a/pyproject.toml b/pyproject.toml index 13f1c2e5..d7664c3b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,8 +1,12 @@ [project] name = "profound" -version = "0.3.0" +version = "0.1.0" # x-release-please-version description = "profound Python client." +readme = "README.md" license = "Apache-2.0" +authors = [ + { name = "Profound" }, +] requires-python = ">= 3.9" dependencies = [ "httpx>=0.23.0, <1", @@ -13,13 +17,15 @@ dependencies = [ "sniffio", ] +[project.optional-dependencies] +aiohttp = ["aiohttp", "httpx_aiohttp>=0.1.9"] [build-system] requires = ["hatchling>=1.18.0"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] -packages = ["src"] +packages = ["src/profound"] -[tool.hatch.build.targets.wheel.sources] -"src" = "profound" +[tool.ruff] +line-length = 120 diff --git a/release-please-config.json b/release-please-config.json new file mode 100644 index 00000000..e548eda8 --- /dev/null +++ b/release-please-config.json @@ -0,0 +1,46 @@ +{ + "packages": { + ".": { + "release-type": "python", + "extra-files": [ + "src/profound/_version.py" + ] + } + }, + "bump-minor-pre-major": true, + "bump-patch-for-minor-pre-major": false, + "include-component-in-tag": false, + "pull-request-title-pattern": "release: ${version}", + "pull-request-header": "Automated Release PR", + "pull-request-footer": "The semver version number is based on included commit messages. To release a specific version,\nedit this pull request title to `release: 1.2.3` — Scalar re-creates this pull request at that\nversion, so wait for the `Release PR version` check to pass before merging.\n\nBrought to you by [Scalar](https://scalar.com)", + "changelog-sections": [ + { + "type": "feat", + "section": "Features" + }, + { + "type": "fix", + "section": "Bug Fixes" + }, + { + "type": "perf", + "section": "Performance Improvements" + }, + { + "type": "revert", + "section": "Reverts" + }, + { + "type": "chore", + "section": "Chores" + }, + { + "type": "docs", + "section": "Documentation" + }, + { + "type": "refactor", + "section": "Refactors" + } + ] +} diff --git a/scalar-sdk.manifest.json b/scalar-sdk.manifest.json index 18b98c46..04a8dc6e 100644 --- a/scalar-sdk.manifest.json +++ b/scalar-sdk.manifest.json @@ -1,17 +1,15 @@ { "name": "Profound", "slug": "profound", - "version": "0.1.0", + "generatorVersion": "0.27.0", "servers": [ "https://api.tryprofound.com" ], "environments": { - "production_server": "https://api.tryprofound.com", "production": "https://api.tryprofound.com" }, "environmentOrder": [ - "production", - "production_server" + "production" ], "auth": [ "apiKey", @@ -33,8 +31,8 @@ "clientHeaderParams": [], "schemas": [ { - "name": "AeoScore", - "source": "AeoScore", + "name": "aeo_score", + "source": "aeo_score", "publicAliases": [], "deprecated": false, "type": { @@ -47,7 +45,7 @@ "deprecated": false, "type": { "kind": "ref", - "name": "AeoScoreTargetZone" + "name": "aeo_score_target_zone" } }, { @@ -65,8 +63,8 @@ } }, { - "name": "AeoScoreTargetZone", - "source": "AeoScoreTargetZone", + "name": "aeo_score_target_zone", + "source": "aeo_score_target_zone", "publicAliases": [], "deprecated": false, "type": { @@ -97,8 +95,8 @@ } }, { - "name": "AcceptedAgentRun", - "source": "AcceptedAgentRun", + "name": "accepted_agent_run", + "source": "accepted_agent_run", "publicAliases": [], "deprecated": false, "type": { @@ -133,7 +131,7 @@ "deprecated": false, "type": { "kind": "ref", - "name": "AgentRunStatus" + "name": "agent_run_status" } }, { @@ -160,180 +158,185 @@ } }, { - "name": "AccuracyBreakdownQuery", - "source": "AccuracyBreakdownQuery", + "name": "add_folder_request", + "source": "add_folder_request", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "start_date", - "publicName": "start_date", + "name": "path", + "publicName": "path", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "string", + "validation": { + "minLength": 1 + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "agent", + "source": "agent", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" } }, { - "name": "end_date", - "publicName": "end_date", + "name": "organization_id", + "publicName": "organization_id", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "string", + "format": "uuid" } }, { - "name": "comparison_start_date", - "publicName": "comparison_start_date", - "required": false, + "name": "name", + "publicName": "name", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string" } }, { - "name": "comparison_end_date", - "publicName": "comparison_end_date", - "required": false, + "name": "status", + "publicName": "status", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] + "kind": "ref", + "name": "agent_status" } }, { - "name": "category_id", - "publicName": "category_id", + "name": "created_at", + "publicName": "created_at", "required": true, "deprecated": false, "type": { "kind": "primitive", "type": "string", - "format": "uuid" + "format": "date-time" } }, { - "name": "topic_ids", - "publicName": "topic_ids", + "name": "description", + "publicName": "description", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } + "kind": "primitive", + "type": "string" }, { "kind": "null" } ] } + } + ], + "additionalProperties": false + } + }, + { + "name": "agent_detail", + "source": "agent_detail", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } }, { - "name": "exclude_topic_ids", - "publicName": "exclude_topic_ids", - "required": false, + "name": "organization_id", + "publicName": "organization_id", + "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "boolean" + "type": "string", + "format": "uuid" } }, { - "name": "tag_ids", - "publicName": "tag_ids", - "required": false, + "name": "name", + "publicName": "name", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string" } }, { - "name": "tag_filter_type", - "publicName": "tag_filter_type", - "required": false, + "name": "status", + "publicName": "status", + "required": true, "deprecated": false, "type": { - "kind": "enum", - "values": [ - "all", - "any" - ], - "names": [ - "All", - "Any" - ], - "deprecations": [ - false, - false - ] + "kind": "ref", + "name": "agent_status" } }, { - "name": "include_no_tag", - "publicName": "include_no_tag", - "required": false, + "name": "created_at", + "publicName": "created_at", + "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "boolean" + "type": "string", + "format": "date-time" } }, { - "name": "region_ids", - "publicName": "region_ids", + "name": "description", + "publicName": "description", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } + "kind": "primitive", + "type": "string" }, { "kind": "null" @@ -342,20 +345,16 @@ } }, { - "name": "platform_ids", - "publicName": "platform_ids", + "name": "schema", + "publicName": "schema", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } + "kind": "ref", + "name": "agent_schema" }, { "kind": "null" @@ -364,52 +363,79 @@ } }, { - "name": "persona_ids", - "publicName": "persona_ids", + "name": "validation", + "publicName": "validation", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } + "kind": "ref", + "name": "agent_validation" }, { "kind": "null" } ] } + } + ], + "additionalProperties": false + } + }, + { + "name": "agent_run", + "source": "agent_run", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } }, { - "name": "include_no_persona", - "publicName": "include_no_persona", - "required": false, + "name": "agent_id", + "publicName": "agent_id", + "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "boolean" + "type": "string", + "format": "uuid" } }, { - "name": "prompt_ids", - "publicName": "prompt_ids", + "name": "status", + "publicName": "status", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "agent_run_status" + } + }, + { + "name": "started_at", + "publicName": "started_at", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } + "kind": "primitive", + "type": "string", + "format": "date-time" }, { "kind": "null" @@ -418,19 +444,17 @@ } }, { - "name": "citation_categories", - "publicName": "citation_categories", + "name": "finished_at", + "publicName": "finished_at", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } + "kind": "primitive", + "type": "string", + "format": "date-time" }, { "kind": "null" @@ -439,74 +463,19 @@ } }, { - "name": "breakdown_by", - "publicName": "breakdown_by", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "citation", - "platform", - "topic", - "prompt", - "tag", - "region", - "persona" - ], - "names": [ - "Citation", - "Platform", - "Topic", - "Prompt", - "Tag", - "Region", - "Persona" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false - ] - } - }, - { - "name": "limit", - "publicName": "limit", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer", - "validation": {} - } - }, - { - "name": "offset", - "publicName": "offset", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer", - "validation": {} - } - }, - { - "name": "search_query", - "publicName": "search_query", + "name": "error", + "publicName": "error", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "primitive", - "type": "string" + "kind": "object", + "properties": [], + "additionalProperties": { + "kind": "unknown" + } }, { "kind": "null" @@ -515,44 +484,36 @@ } }, { - "name": "sort_by", - "publicName": "sort_by", + "name": "outputs", + "publicName": "outputs", "required": false, "deprecated": false, "type": { - "kind": "enum", - "values": [ - "citationShare", - "accuracy" - ], - "names": [ - "CitationShare", - "Accuracy" - ], - "deprecations": [ - false, - false - ] + "kind": "object", + "properties": [], + "additionalProperties": { + "kind": "unknown" + } } }, { - "name": "sort_order", - "publicName": "sort_order", + "name": "steps", + "publicName": "steps", "required": false, "deprecated": false, "type": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" - ], - "deprecations": [ - false, - false + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "ref", + "name": "agent_run_step" + } + }, + { + "kind": "null" + } ] } } @@ -561,51 +522,52 @@ } }, { - "name": "AccuracyBreakdownResponse", - "source": "AccuracyBreakdownResponse", + "name": "agent_run_status", + "source": "agent_run_status", "publicAliases": [], "deprecated": false, "type": { - "kind": "object", - "properties": [ - { - "name": "data", - "publicName": "data", - "required": true, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "AccuracyBreakdownRow" - } - } - }, - { - "name": "totalCount", - "publicName": "totalCount", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer" - } - } + "kind": "enum", + "values": [ + "queued", + "running", + "succeeded", + "failed", + "cancelled", + "skipped", + "unknown" ], - "additionalProperties": false + "names": [ + "Queued", + "Running", + "Succeeded", + "Failed", + "Cancelled", + "Skipped", + "Unknown" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] } }, { - "name": "AccuracyBreakdownRow", - "source": "AccuracyBreakdownRow", + "name": "agent_run_step", + "source": "agent_run_step", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "id", - "publicName": "id", + "name": "node_id", + "publicName": "node_id", "required": true, "deprecated": false, "type": { @@ -614,8 +576,8 @@ } }, { - "name": "name", - "publicName": "name", + "name": "node_type", + "publicName": "node_type", "required": true, "deprecated": false, "type": { @@ -624,46 +586,28 @@ } }, { - "name": "share", - "publicName": "share", + "name": "title", + "publicName": "title", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "number" - } - }, - { - "name": "shareChange", - "publicName": "shareChange", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "null" - } - ] + "type": "string" } }, { - "name": "responseAccuracy", - "publicName": "responseAccuracy", + "name": "status", + "publicName": "status", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "number" + "type": "string" } }, { - "name": "accuracyChange", - "publicName": "accuracyChange", + "name": "elapsed_time", + "publicName": "elapsed_time", "required": false, "deprecated": false, "type": { @@ -680,18 +624,8 @@ } }, { - "name": "inaccurateCount", - "publicName": "inaccurateCount", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer" - } - }, - { - "name": "inaccurateCountChange", - "publicName": "inaccurateCountChange", + "name": "finished_at", + "publicName": "finished_at", "required": false, "deprecated": false, "type": { @@ -699,7 +633,8 @@ "variants": [ { "kind": "primitive", - "type": "integer" + "type": "string", + "format": "date-time" }, { "kind": "null" @@ -708,8 +643,8 @@ } }, { - "name": "promptCount", - "publicName": "promptCount", + "name": "error_message", + "publicName": "error_message", "required": false, "deprecated": false, "type": { @@ -717,7 +652,7 @@ "variants": [ { "kind": "primitive", - "type": "integer" + "type": "string" }, { "kind": "null" @@ -726,16 +661,19 @@ } }, { - "name": "citationCategory", - "publicName": "citationCategory", + "name": "outputs", + "publicName": "outputs", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "primitive", - "type": "string" + "kind": "object", + "properties": [], + "additionalProperties": { + "kind": "unknown" + } }, { "kind": "null" @@ -748,52 +686,37 @@ } }, { - "name": "AccuracyCitationAnalysisQuery", - "source": "AccuracyCitationAnalysisQuery", + "name": "agent_schema", + "source": "agent_schema", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "category_id", - "publicName": "category_id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "clean_href", - "publicName": "clean_href", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "start_date", - "publicName": "start_date", + "name": "input", + "publicName": "input", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "object", + "properties": [], + "additionalProperties": { + "kind": "unknown" + } } }, { - "name": "end_date", - "publicName": "end_date", + "name": "output", + "publicName": "output", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "object", + "properties": [], + "additionalProperties": { + "kind": "unknown" + } } } ], @@ -801,63 +724,57 @@ } }, { - "name": "AccuracyCitationAnalysisResponse", - "source": "AccuracyCitationAnalysisResponse", + "name": "agent_status", + "source": "agent_status", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "draft", + "published", + "unknown" + ], + "names": [ + "Draft", + "Published", + "Unknown" + ], + "deprecations": [ + false, + false, + false + ] + } + }, + { + "name": "agent_validation", + "source": "agent_validation", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "href", - "publicName": "href", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "domain", - "publicName": "domain", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "pageTitle", - "publicName": "pageTitle", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "markdownContent", - "publicName": "markdownContent", + "name": "valid", + "publicName": "valid", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "boolean" } }, { - "name": "claims", - "publicName": "claims", + "name": "issues", + "publicName": "issues", "required": false, "deprecated": false, "type": { "kind": "array", "items": { "kind": "ref", - "name": "AccuracyCitationClaim" + "name": "agent_validation_issue" } } } @@ -866,66 +783,16 @@ } }, { - "name": "AccuracyCitationClaim", - "source": "AccuracyCitationClaim", + "name": "agent_validation_issue", + "source": "agent_validation_issue", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "claimId", - "publicName": "claimId", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "claim", - "publicName": "claim", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "attributeId", - "publicName": "attributeId", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "attribute", - "publicName": "attribute", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "neutralThemeId", - "publicName": "neutralThemeId", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "neutralTheme", - "publicName": "neutralTheme", + "name": "code", + "publicName": "code", "required": true, "deprecated": false, "type": { @@ -934,8 +801,8 @@ } }, { - "name": "snippet", - "publicName": "snippet", + "name": "message", + "publicName": "message", "required": true, "deprecated": false, "type": { @@ -944,67 +811,93 @@ } }, { - "name": "polarity", - "publicName": "polarity", + "name": "node_id", + "publicName": "node_id", "required": false, "deprecated": false, "type": { - "kind": "enum", - "values": [ - "positive", - "negative" - ], - "names": [ - "Positive", - "Negative" - ], - "deprecations": [ - false, - false + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } ] } }, { - "name": "kbPath", - "publicName": "kbPath", + "name": "node_title", + "publicName": "node_title", "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] } }, { - "name": "kbSnippet", - "publicName": "kbSnippet", + "name": "field", + "publicName": "field", "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] } }, { - "name": "reasoning", - "publicName": "reasoning", + "name": "field_title", + "publicName": "field_title", "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] } }, { - "name": "evidence", - "publicName": "evidence", + "name": "violation", + "publicName": "violation", "required": false, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "AccuracyCitationEvidence" - } + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] } } ], @@ -1012,17 +905,38 @@ } }, { - "name": "AccuracyCitationEvidence", - "source": "AccuracyCitationEvidence", + "name": "agent_version", + "source": "agent_version", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "published", + "draft" + ], + "names": [ + "Published", + "Draft" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "analysis_breakdown", + "source": "analysis_breakdown", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "kbName", - "publicName": "kbName", - "required": false, + "name": "title", + "publicName": "title", + "required": true, "deprecated": false, "type": { "kind": "primitive", @@ -1030,23 +944,23 @@ } }, { - "name": "kbPath", - "publicName": "kbPath", - "required": false, + "name": "weight", + "publicName": "weight", + "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "number" } }, { - "name": "kbSnippet", - "publicName": "kbSnippet", - "required": false, + "name": "score", + "publicName": "score", + "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "number" } } ], @@ -1054,44 +968,24 @@ } }, { - "name": "AccuracyOverviewQuery", - "source": "AccuracyOverviewQuery", + "name": "analysis_inputs", + "source": "analysis_inputs", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "start_date", - "publicName": "start_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "end_date", - "publicName": "end_date", + "name": "topic", + "publicName": "topic", "required": true, "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "comparison_start_date", - "publicName": "comparison_start_date", - "required": false, - "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "primitive", - "type": "string" + "kind": "ref", + "name": "topic_input" }, { "kind": "null" @@ -1100,16 +994,16 @@ } }, { - "name": "comparison_end_date", - "publicName": "comparison_end_date", - "required": false, + "name": "prompt", + "publicName": "prompt", + "required": true, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "primitive", - "type": "string" + "kind": "ref", + "name": "prompt_input" }, { "kind": "null" @@ -1118,257 +1012,364 @@ } }, { - "name": "category_id", - "publicName": "category_id", + "name": "top_citations", + "publicName": "top_citations", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } } }, { - "name": "topic_ids", - "publicName": "topic_ids", - "required": false, + "name": "user", + "publicName": "user", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "kind": "null" - } - ] + "kind": "ref", + "name": "user_input" } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "analysis_summary", + "source": "analysis_summary", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "exclude_topic_ids", - "publicName": "exclude_topic_ids", - "required": false, + "name": "breakdown", + "publicName": "breakdown", + "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "boolean" + "kind": "array", + "items": { + "kind": "ref", + "name": "analysis_breakdown" + } } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "analysis_type", + "source": "analysis_type", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ], + "names": [ + "Visibility", + "Sentiment", + "SentimentV2", + "Accuracy" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + }, + { + "name": "analysis_type_filter", + "source": "analysis_type_filter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "tag_ids", - "publicName": "tag_ids", - "required": false, + "name": "field", + "publicName": "field", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "kind": "null" - } - ] + "kind": "literal", + "value": "analysis_type" } }, { - "name": "tag_filter_type", - "publicName": "tag_filter_type", - "required": false, + "name": "operator", + "publicName": "operator", + "required": true, "deprecated": false, "type": { "kind": "enum", "values": [ - "all", - "any" + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" ], "names": [ - "All", - "Any" + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" ], "deprecations": [ + false, + false, + false, + false, + false, + false, + false, false, false ] } }, { - "name": "include_no_tag", - "publicName": "include_no_tag", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "region_ids", - "publicName": "region_ids", - "required": false, + "name": "value", + "publicName": "value", + "required": true, "deprecated": false, "type": { "kind": "union", "variants": [ + { + "kind": "enum", + "values": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ], + "names": [ + "Visibility", + "Sentiment", + "SentimentV2", + "Accuracy" + ], + "deprecations": [ + false, + false, + false, + false + ] + }, { "kind": "array", "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" + "kind": "enum", + "values": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ], + "names": [ + "Visibility", + "Sentiment", + "SentimentV2", + "Accuracy" + ], + "deprecations": [ + false, + false, + false, + false + ] } - }, - { - "kind": "null" } + ], + "variantNames": [ + null, + null ] } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "answers_query", + "source": "answers_query", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "platform_ids", - "publicName": "platform_ids", - "required": false, + "name": "category_id", + "publicName": "category_id", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string", + "format": "uuid" } }, { - "name": "persona_ids", - "publicName": "persona_ids", - "required": false, + "name": "start_date", + "publicName": "start_date", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string", + "format": "date-time" } }, { - "name": "include_no_persona", - "publicName": "include_no_persona", - "required": false, + "name": "end_date", + "publicName": "end_date", + "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "boolean" + "type": "string", + "format": "date-time" } }, { - "name": "prompt_ids", - "publicName": "prompt_ids", + "name": "pagination", + "publicName": "pagination", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "kind": "null" - } - ] + "kind": "ref", + "name": "pagination" } }, { - "name": "citation_categories", - "publicName": "citation_categories", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "date_bucket", - "publicName": "date_bucket", + "name": "filters", + "publicName": "filters", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "region_id_filter" + }, + { + "kind": "ref", + "name": "region_name_filter" + }, + { + "kind": "ref", + "name": "model_id_filter" + }, + { + "kind": "ref", + "name": "tag_id_filter" + }, + { + "kind": "ref", + "name": "analysis_type_filter" + }, + { + "kind": "ref", + "name": "prompt_type_filter" + }, + { + "kind": "ref", + "name": "prompt_filter" + }, + { + "kind": "ref", + "name": "prompt_id_filter" + }, + { + "kind": "ref", + "name": "persona_id_filter" + }, + { + "kind": "ref", + "name": "topic_id_filter" + }, + { + "kind": "ref", + "name": "asset_id_filter" + }, + { + "kind": "ref", + "name": "profound_answer_engine_insights_filters_asset_name_filter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "analysis_type": "analysis_type_filter", + "asset_id": "asset_id_filter", + "asset_name": "profound_answer_engine_insights_filters_asset_name_filter", + "model": "model_id_filter", + "model_id": "model_id_filter", + "persona_id": "persona_id_filter", + "prompt": "prompt_filter", + "prompt_id": "prompt_id_filter", + "prompt_type": "prompt_type_filter", + "region": "region_id_filter", + "region_id": "region_id_filter", + "region_name": "region_name_filter", + "tag": "tag_id_filter", + "tag_id": "tag_id_filter", + "topic": "topic_id_filter", + "topic_id": "topic_id_filter" + } }, - { - "kind": "null" - } - ] + "variantNames": [ + "RegionIdFilter", + "RegionNameFilter", + "ModelIdFilter", + "TagIdFilter", + "AnalysisTypeFilter", + "PromptTypeFilter", + "PromptFilter", + "PromptIdFilter", + "PersonaIdFilter", + "TopicIdFilter", + "AssetIdFilter", + "AssetNameFilter" + ] + } } }, { - "name": "group_by", - "publicName": "group_by", + "name": "include", + "publicName": "include", "required": false, "deprecated": false, "type": { - "kind": "enum", - "values": [ - "period", - "theme" - ], - "names": [ - "Period", - "Theme" - ], - "deprecations": [ - false, - false - ] + "kind": "ref", + "name": "enabled_fields_response" } } ], @@ -1376,39 +1377,54 @@ } }, { - "name": "AccuracyOverviewResponse", - "source": "AccuracyOverviewResponse", + "name": "answers_raw_data", + "source": "answers_raw_data", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "trendByPeriod", - "publicName": "trendByPeriod", - "required": true, + "name": "run_id", + "publicName": "run_id", + "required": false, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "AccuracyTrendPoint" - } + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "null" + } + ] } }, { - "name": "overallAccuracy", - "publicName": "overallAccuracy", - "required": true, + "name": "created_at", + "publicName": "created_at", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "number" + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] } }, { - "name": "accuracyChange", - "publicName": "accuracyChange", + "name": "prompt", + "publicName": "prompt", "required": false, "deprecated": false, "type": { @@ -1416,7 +1432,7 @@ "variants": [ { "kind": "primitive", - "type": "number" + "type": "string" }, { "kind": "null" @@ -1425,21 +1441,27 @@ } }, { - "name": "scoreBreakdown", - "publicName": "scoreBreakdown", - "required": true, + "name": "prompt_id", + "publicName": "prompt_id", + "required": false, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "AccuracyScoreBreakdown" - } + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "null" + } + ] } }, { - "name": "themeTrend", - "publicName": "themeTrend", + "name": "mentions", + "publicName": "mentions", "required": false, "deprecated": false, "type": { @@ -1448,8 +1470,8 @@ { "kind": "array", "items": { - "kind": "ref", - "name": "AccuracyThemeTrendSeries" + "kind": "primitive", + "type": "string" } }, { @@ -1459,8 +1481,8 @@ } }, { - "name": "availableSeries", - "publicName": "availableSeries", + "name": "analysis_types", + "publicName": "analysis_types", "required": false, "deprecated": false, "type": { @@ -1469,8 +1491,8 @@ { "kind": "array", "items": { - "kind": "ref", - "name": "AccuracyTrendSeriesMeta" + "kind": "primitive", + "type": "string" } }, { @@ -1478,60 +1500,78 @@ } ] } - } - ], - "additionalProperties": false - } - }, - { - "name": "AccuracyScoreBreakdown", - "source": "AccuracyScoreBreakdown", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "status", - "publicName": "status", - "required": true, + "name": "prompt_type", + "publicName": "prompt_type", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] } }, { - "name": "count", - "publicName": "count", - "required": true, + "name": "response", + "publicName": "response", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "integer" + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] } }, { - "name": "share", - "publicName": "share", - "required": true, + "name": "citations", + "publicName": "citations", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "number" + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + }, + { + "kind": "null" + } + ] } }, { - "name": "countChange", - "publicName": "countChange", + "name": "citation_details", + "publicName": "citation_details", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "primitive", - "type": "integer" + "kind": "array", + "items": { + "kind": "ref", + "name": "citation_detail" + } }, { "kind": "null" @@ -1540,273 +1580,273 @@ } }, { - "name": "shareChange", - "publicName": "shareChange", + "name": "web_search_results", + "publicName": "web_search_results", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "primitive", - "type": "number" + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } }, { "kind": "null" } ] } - } - ], - "additionalProperties": false - } - }, - { - "name": "AccuracyThemeTrendPoint", - "source": "AccuracyThemeTrendPoint", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "date", - "publicName": "date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "total", - "publicName": "total", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer" - } }, { - "name": "accurate", - "publicName": "accurate", - "required": true, + "name": "search_triggered", + "publicName": "search_triggered", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "integer" + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "null" + } + ] } }, { - "name": "ratio", - "publicName": "ratio", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "number" - } - } - ], - "additionalProperties": false - } - }, - { - "name": "AccuracyThemeTrendSeries", - "source": "AccuracyThemeTrendSeries", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "id", - "publicName": "id", - "required": true, + "name": "themes", + "publicName": "themes", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + }, + { + "kind": "null" + } + ] } }, { - "name": "label", - "publicName": "label", - "required": true, + "name": "sentiment_themes", + "publicName": "sentiment_themes", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "ref", + "name": "sentiment_theme" + } + }, + { + "kind": "null" + } + ] } }, { - "name": "data", - "publicName": "data", - "required": true, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "AccuracyThemeTrendPoint" - } - } - } - ], - "additionalProperties": false - } - }, - { - "name": "AccuracyTopicIdsQuery", - "source": "AccuracyTopicIdsQuery", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "category_id", - "publicName": "category_id", - "required": true, + "name": "search_queries", + "publicName": "search_queries", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + }, + { + "kind": "null" + } + ] } }, { - "name": "start_date", - "publicName": "start_date", - "required": true, + "name": "topic", + "publicName": "topic", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] } }, { - "name": "end_date", - "publicName": "end_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - } - ], - "additionalProperties": false - } - }, - { - "name": "AccuracyTrendPoint", - "source": "AccuracyTrendPoint", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "date", - "publicName": "date", - "required": true, + "name": "topic_id", + "publicName": "topic_id", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "null" + } + ] } }, { - "name": "total", - "publicName": "total", - "required": true, + "name": "region", + "publicName": "region", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "integer" + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] } }, { - "name": "accurate", - "publicName": "accurate", - "required": true, + "name": "model", + "publicName": "model", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "integer" + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] } }, { - "name": "ratio", - "publicName": "ratio", - "required": true, + "name": "model_id", + "publicName": "model_id", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "number" + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "null" + } + ] } }, { - "name": "prevPeriodData", - "publicName": "prevPeriodData", + "name": "asset", + "publicName": "asset", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "ref", - "name": "AccuracyTrendPoint" + "kind": "primitive", + "type": "string" }, { "kind": "null" } ] } - } - ], - "additionalProperties": false - } - }, - { - "name": "AccuracyTrendSeriesMeta", - "source": "AccuracyTrendSeriesMeta", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "id", - "publicName": "id", - "required": true, + "name": "asset_id", + "publicName": "asset_id", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "null" + } + ] } }, { - "name": "label", - "publicName": "label", - "required": true, + "name": "tags", + "publicName": "tags", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + }, + { + "kind": "null" + } + ] } }, { - "name": "total", - "publicName": "total", - "required": true, + "name": "persona", + "publicName": "persona", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "integer" + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] } } ], @@ -1814,23 +1854,33 @@ } }, { - "name": "AddFolderRequest", - "source": "AddFolderRequest", + "name": "answers_response", + "source": "answers_response", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "path", - "publicName": "path", + "name": "info", + "publicName": "info", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string", - "validation": { - "minLength": 1 + "kind": "ref", + "name": "answers_response_info" + } + }, + { + "name": "data", + "publicName": "data", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "answers_raw_data" } } } @@ -1839,81 +1889,97 @@ } }, { - "name": "Agent", - "source": "Agent", + "name": "answers_response_info", + "source": "answers_response_info", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "id", - "publicName": "id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "organization_id", - "publicName": "organization_id", + "name": "total_rows", + "publicName": "total_rows", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "string", - "format": "uuid" + "type": "integer" } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "asset_id_filter", + "source": "asset_id_filter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "name", - "publicName": "name", + "name": "field", + "publicName": "field", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "literal", + "value": "asset_id" } }, { - "name": "status", - "publicName": "status", + "name": "operator", + "publicName": "operator", "required": true, "deprecated": false, "type": { - "kind": "ref", - "name": "AgentStatus" + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn" + ], + "deprecations": [ + false, + false, + false, + false + ] } }, { - "name": "created_at", - "publicName": "created_at", + "name": "value", + "publicName": "value", "required": true, "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "description", - "publicName": "description", - "required": false, - "deprecated": false, "type": { "kind": "union", "variants": [ { "kind": "primitive", - "type": "string" + "type": "string", + "format": "uuid" }, { - "kind": "null" + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } } + ], + "variantNames": [ + null, + null ] } } @@ -1922,71 +1988,70 @@ } }, { - "name": "AgentDetail", - "source": "AgentDetail", + "name": "bot_name_filter", + "source": "bot_name_filter", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "id", - "publicName": "id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "organization_id", - "publicName": "organization_id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "name", - "publicName": "name", + "name": "field", + "publicName": "field", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "literal", + "value": "bot_name" } }, { - "name": "status", - "publicName": "status", + "name": "operator", + "publicName": "operator", "required": true, "deprecated": false, "type": { - "kind": "ref", - "name": "AgentStatus" + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] } }, { - "name": "created_at", - "publicName": "created_at", + "name": "value", + "publicName": "value", "required": true, "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "description", - "publicName": "description", - "required": false, - "deprecated": false, "type": { "kind": "union", "variants": [ @@ -1995,44 +2060,260 @@ "type": "string" }, { - "kind": "null" - } - ] + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "bot_provider_filter", + "source": "bot_provider_filter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "bot_provider" } }, { - "name": "schema", - "publicName": "schema", - "required": false, + "name": "operator", + "publicName": "operator", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "AgentSchema" - }, - { - "kind": "null" - } + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false ] } }, { - "name": "validation", - "publicName": "validation", - "required": false, + "name": "value", + "publicName": "value", + "required": true, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "ref", - "name": "AgentValidation" + "kind": "enum", + "values": [ + "openai", + "anthropic", + "chatgpt", + "deepseek", + "google", + "microsoft", + "perplexity", + "apple", + "bytedance", + "amazon", + "meta", + "duckduckgo", + "you", + "you.com", + "xai", + "grok", + "gemini", + "mistral", + "huawei", + "yandex", + "baidu", + "yahoo", + "commoncrawl", + "openclaw" + ], + "names": [ + "Openai", + "Anthropic", + "Chatgpt", + "Deepseek", + "Google", + "Microsoft", + "Perplexity", + "Apple", + "Bytedance", + "Amazon", + "Meta", + "Duckduckgo", + "You", + "YouCom", + "Xai", + "Grok", + "Gemini", + "Mistral", + "Huawei", + "Yandex", + "Baidu", + "Yahoo", + "Commoncrawl", + "Openclaw" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] }, { - "kind": "null" + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "openai", + "anthropic", + "chatgpt", + "deepseek", + "google", + "microsoft", + "perplexity", + "apple", + "bytedance", + "amazon", + "meta", + "duckduckgo", + "you", + "you.com", + "xai", + "grok", + "gemini", + "mistral", + "huawei", + "yandex", + "baidu", + "yahoo", + "commoncrawl", + "openclaw" + ], + "names": [ + "Openai", + "Anthropic", + "Chatgpt", + "Deepseek", + "Google", + "Microsoft", + "Perplexity", + "Apple", + "Bytedance", + "Amazon", + "Meta", + "Duckduckgo", + "You", + "YouCom", + "Xai", + "Grok", + "Gemini", + "Mistral", + "Huawei", + "Yandex", + "Baidu", + "Yahoo", + "Commoncrawl", + "Openclaw" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } } + ], + "variantNames": [ + null, + null ] } } @@ -2041,45 +2322,123 @@ } }, { - "name": "AgentGraph", - "source": "AgentGraph", + "name": "bot_type_filter", + "source": "bot_type_filter", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "agent_id", - "publicName": "agent_id", + "name": "field", + "publicName": "field", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" + "kind": "literal", + "value": "bot_type" } }, { - "name": "version", - "publicName": "version", + "name": "operator", + "publicName": "operator", "required": true, "deprecated": false, "type": { - "kind": "ref", - "name": "AgentVersion" + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] } }, { - "name": "graph", - "publicName": "graph", + "name": "value", + "publicName": "value", "required": true, "deprecated": false, "type": { - "kind": "object", - "properties": [], - "additionalProperties": { - "kind": "unknown" - } + "kind": "union", + "variants": [ + { + "kind": "enum", + "values": [ + "ai_assistant", + "ai_training", + "index", + "ai_agent" + ], + "names": [ + "AiAssistant", + "AiTraining", + "Index", + "AiAgent" + ], + "deprecations": [ + false, + false, + false, + false + ] + }, + { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "ai_assistant", + "ai_training", + "index", + "ai_agent" + ], + "names": [ + "AiAssistant", + "AiTraining", + "Index", + "AiAgent" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + } + ], + "variantNames": [ + null, + null + ] } } ], @@ -2087,247 +2446,258 @@ } }, { - "name": "AgentRun", - "source": "AgentRun", + "name": "bots_report_query", + "source": "bots_report_query", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "id", - "publicName": "id", - "required": true, + "name": "date_interval", + "publicName": "date_interval", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false + ] } }, { - "name": "agent_id", - "publicName": "agent_id", - "required": true, + "name": "dimensions", + "publicName": "dimensions", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "date", + "host", + "path", + "bot_name", + "bot_provider" + ], + "names": [ + "Date", + "Host", + "Path", + "BotName", + "BotProvider" + ], + "deprecations": [ + false, + false, + false, + false, + false + ] + } } }, { - "name": "status", - "publicName": "status", + "name": "metrics", + "publicName": "metrics", "required": true, "deprecated": false, "type": { - "kind": "ref", - "name": "AgentRunStatus" + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "count", + "citations", + "indexing", + "training", + "last_visit" + ], + "names": [ + "Count", + "Citations", + "Indexing", + "Training", + "LastVisit" + ], + "deprecations": [ + false, + false, + false, + false, + false + ] + } } }, { - "name": "started_at", - "publicName": "started_at", + "name": "order_by", + "publicName": "order_by", "required": false, "deprecated": false, + "extensions": { + "source": [ + "examples" + ], + "examples": { + "date": "asc" + } + }, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "date-time" - }, - { - "kind": "null" - } - ] + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } } }, { - "name": "finished_at", - "publicName": "finished_at", + "name": "pagination", + "publicName": "pagination", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "date-time" - }, - { - "kind": "null" - } - ] + "kind": "ref", + "name": "pagination" } }, { - "name": "error", - "publicName": "error", - "required": false, + "name": "domain", + "publicName": "domain", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "object", - "properties": [], - "additionalProperties": { - "kind": "unknown" - } - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string" } }, { - "name": "outputs", - "publicName": "outputs", - "required": false, + "name": "start_date", + "publicName": "start_date", + "required": true, "deprecated": false, "type": { - "kind": "object", - "properties": [], - "additionalProperties": { - "kind": "unknown" - } + "kind": "primitive", + "type": "string", + "format": "date-time" } - } - ], - "additionalProperties": false - } - }, - { - "name": "AgentRunStatus", - "source": "AgentRunStatus", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "queued", - "running", - "succeeded", - "failed", - "cancelled", - "skipped", - "unknown" - ], - "names": [ - "Queued", - "Running", - "Succeeded", - "Failed", - "Cancelled", - "Skipped", - "Unknown" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false - ] - } - }, - { - "name": "AgentSchema", - "source": "AgentSchema", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "input", - "publicName": "input", - "required": true, + "name": "end_date", + "publicName": "end_date", + "required": false, "deprecated": false, "type": { - "kind": "object", - "properties": [], - "additionalProperties": { - "kind": "unknown" - } + "kind": "primitive", + "type": "string", + "format": "date-time" } }, { - "name": "output", - "publicName": "output", - "required": true, + "name": "organization_id", + "publicName": "organization_id", + "required": false, "deprecated": false, "type": { - "kind": "object", - "properties": [], - "additionalProperties": { - "kind": "unknown" - } + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "null" + } + ] } - } - ], - "additionalProperties": false - } - }, - { - "name": "AgentStatus", - "source": "AgentStatus", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "draft", - "published", - "unknown" - ], - "names": [ - "Draft", - "Published", - "Unknown" - ], - "deprecations": [ - false, - false, - false - ] - } - }, - { - "name": "AgentValidation", - "source": "AgentValidation", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "valid", - "publicName": "valid", - "required": true, + "name": "metric_filters", + "publicName": "metric_filters", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "boolean" + "kind": "array", + "items": { + "kind": "ref", + "name": "numeric_metric_filter" + } } }, { - "name": "issues", - "publicName": "issues", + "name": "filters", + "publicName": "filters", "required": false, "deprecated": false, "type": { "kind": "array", "items": { - "kind": "ref", - "name": "AgentValidationIssue" + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "path_filter" + }, + { + "kind": "ref", + "name": "bot_name_filter" + }, + { + "kind": "ref", + "name": "bot_provider_filter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "bot_name": "bot_name_filter", + "bot_provider": "bot_provider_filter", + "path": "path_filter" + } + }, + "variantNames": [ + "PathFilter", + "BotNameFilter", + "BotProviderFilter" + ] } } } @@ -2336,159 +2706,183 @@ } }, { - "name": "AgentValidationIssue", - "source": "AgentValidationIssue", + "name": "bots_report_query_v2", + "source": "bots_report_query_v2", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "code", - "publicName": "code", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "message", - "publicName": "message", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "node_id", - "publicName": "node_id", + "name": "date_interval", + "publicName": "date_interval", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false ] } }, { - "name": "node_title", - "publicName": "node_title", + "name": "dimensions", + "publicName": "dimensions", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "field", - "publicName": "field", - "required": false, + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "date", + "hour", + "host", + "path", + "bot_name", + "bot_provider", + "bot_type" + ], + "names": [ + "Date", + "Hour", + "Host", + "Path", + "BotName", + "BotProvider", + "BotType" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "enum", + "values": [ + "count", + "citations", + "indexing", + "training", + "last_visit" + ], + "names": [ + "Count", + "Citations", + "Indexing", + "Training", + "LastVisit" + ], + "deprecations": [ + false, + false, + false, + false, + false + ] + }, + { + "kind": "literal", + "value": "agents" + } + ], + "variantNames": [ + null, + null + ] + } } }, { - "name": "field_title", - "publicName": "field_title", + "name": "order_by", + "publicName": "order_by", "required": false, "deprecated": false, + "extensions": { + "source": [ + "examples" + ], + "examples": { + "date": "asc" + } + }, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } } }, { - "name": "violation", - "publicName": "violation", + "name": "pagination", + "publicName": "pagination", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] + "kind": "ref", + "name": "pagination" } - } - ], - "additionalProperties": false - } - }, - { - "name": "AgentVersion", - "source": "AgentVersion", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "published", - "draft" - ], - "names": [ - "Published", - "Draft" - ], - "deprecations": [ - false, - false - ] - } - }, - { - "name": "AnalysisBreakdown", - "source": "AnalysisBreakdown", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "title", - "publicName": "title", + "name": "domain", + "publicName": "domain", "required": true, "deprecated": false, "type": { @@ -2497,48 +2891,39 @@ } }, { - "name": "weight", - "publicName": "weight", + "name": "start_date", + "publicName": "start_date", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "number" + "type": "string", + "format": "date-time" } }, { - "name": "score", - "publicName": "score", - "required": true, + "name": "end_date", + "publicName": "end_date", + "required": false, "deprecated": false, "type": { "kind": "primitive", - "type": "number" + "type": "string", + "format": "date-time" } - } - ], - "additionalProperties": false - } - }, - { - "name": "AnalysisInputs", - "source": "AnalysisInputs", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "topic", - "publicName": "topic", - "required": true, + "name": "organization_id", + "publicName": "organization_id", + "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "ref", - "name": "TopicInput" + "kind": "primitive", + "type": "string", + "format": "uuid" }, { "kind": "null" @@ -2547,105 +2932,112 @@ } }, { - "name": "prompt", - "publicName": "prompt", - "required": true, + "name": "timezone", + "publicName": "timezone", + "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "PromptInput" - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string" } }, { - "name": "top_citations", - "publicName": "top_citations", - "required": true, + "name": "metric_filters", + "publicName": "metric_filters", + "required": false, "deprecated": false, "type": { "kind": "array", "items": { - "kind": "primitive", - "type": "string" + "kind": "ref", + "name": "numeric_metric_filter" } } }, { - "name": "user", - "publicName": "user", - "required": true, - "deprecated": false, - "type": { - "kind": "ref", - "name": "UserInput" - } - } - ], - "additionalProperties": false - } - }, - { - "name": "AnalysisSummary", - "source": "AnalysisSummary", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "breakdown", - "publicName": "breakdown", - "required": true, + "name": "filters", + "publicName": "filters", + "required": false, "deprecated": false, "type": { "kind": "array", "items": { - "kind": "ref", - "name": "AnalysisBreakdown" - } - } - } - ], - "additionalProperties": false - } - }, - { - "name": "AnalysisType", - "source": "AnalysisType", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "visibility", - "sentiment", - "sentiment_v2", - "accuracy" - ], - "names": [ - "Visibility", - "Sentiment", - "SentimentV2", - "Accuracy" + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "path_filter" + }, + { + "kind": "ref", + "name": "bot_name_filter" + }, + { + "kind": "ref", + "name": "bot_provider_filter" + }, + { + "kind": "ref", + "name": "bot_type_filter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "bot_name": "bot_name_filter", + "bot_provider": "bot_provider_filter", + "bot_type": "bot_type_filter", + "path": "path_filter" + } + }, + "variantNames": [ + "PathFilter", + "BotNameFilter", + "BotProviderFilter", + "BotTypeFilter" + ] + } + } + }, + { + "name": "domain_id", + "publicName": "domain_id", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "tags", + "publicName": "tags", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + } ], - "deprecations": [ - false, - false, - false, - false - ] + "additionalProperties": false } }, { - "name": "AnalysisTypeFilter", - "source": "AnalysisTypeFilter", + "name": "brand_name_filter", + "source": "brand_name_filter", "publicAliases": [], "deprecated": false, "type": { @@ -2658,7 +3050,7 @@ "deprecated": false, "type": { "kind": "literal", - "value": "analysis_type" + "value": "brand_name" } }, { @@ -2712,48 +3104,14 @@ "kind": "union", "variants": [ { - "kind": "enum", - "values": [ - "visibility", - "sentiment", - "sentiment_v2", - "accuracy" - ], - "names": [ - "Visibility", - "Sentiment", - "SentimentV2", - "Accuracy" - ], - "deprecations": [ - false, - false, - false, - false - ] + "kind": "primitive", + "type": "string" }, { "kind": "array", "items": { - "kind": "enum", - "values": [ - "visibility", - "sentiment", - "sentiment_v2", - "accuracy" - ], - "names": [ - "Visibility", - "Sentiment", - "SentimentV2", - "Accuracy" - ], - "deprecations": [ - false, - false, - false, - false - ] + "kind": "primitive", + "type": "string" } } ], @@ -2768,16 +3126,16 @@ } }, { - "name": "AnswersQuery", - "source": "AnswersQuery", + "name": "category", + "source": "category", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "category_id", - "publicName": "category_id", + "name": "id", + "publicName": "id", "required": true, "deprecated": false, "type": { @@ -2787,136 +3145,31 @@ } }, { - "name": "start_date", - "publicName": "start_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "end_date", - "publicName": "end_date", + "name": "name", + "publicName": "name", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "pagination", - "publicName": "pagination", - "required": false, - "deprecated": false, - "type": { - "kind": "ref", - "name": "Pagination" + "type": "string" } }, { - "name": "filters", - "publicName": "filters", + "name": "internal_name", + "publicName": "internal_name", "required": false, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "RegionIdFilter" - }, - { - "kind": "ref", - "name": "RegionNameFilter" - }, - { - "kind": "ref", - "name": "ModelIdFilter" - }, - { - "kind": "ref", - "name": "TagIdFilter" - }, - { - "kind": "ref", - "name": "AnalysisTypeFilter" - }, - { - "kind": "ref", - "name": "PromptTypeFilter" - }, - { - "kind": "ref", - "name": "PromptFilter" - }, - { - "kind": "ref", - "name": "PersonaIdFilter" - }, - { - "kind": "ref", - "name": "TopicIdFilter" - }, - { - "kind": "ref", - "name": "AssetIdFilter" - }, - { - "kind": "ref", - "name": "ProfoundAnswerEngineInsightsFiltersAssetNameFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "analysis_type": "AnalysisTypeFilter", - "asset_id": "AssetIdFilter", - "asset_name": "ProfoundAnswerEngineInsightsFiltersAssetNameFilter", - "model": "ModelIdFilter", - "model_id": "ModelIdFilter", - "persona_id": "PersonaIdFilter", - "prompt": "PromptFilter", - "prompt_type": "PromptTypeFilter", - "region": "RegionIdFilter", - "region_id": "RegionIdFilter", - "region_name": "RegionNameFilter", - "tag": "TagIdFilter", - "tag_id": "TagIdFilter", - "topic": "TopicIdFilter", - "topic_id": "TopicIdFilter" - } + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" }, - "variantNames": [ - "RegionIdFilter", - "RegionNameFilter", - "ModelIdFilter", - "TagIdFilter", - "AnalysisTypeFilter", - "PromptTypeFilter", - "PromptFilter", - "PersonaIdFilter", - "TopicIdFilter", - "AssetIdFilter", - "AssetNameFilter" - ] - } - } - }, - { - "name": "include", - "publicName": "include", - "required": false, - "deprecated": false, - "type": { - "kind": "ref", - "name": "EnabledFieldsResponse" + { + "kind": "null" + } + ] } } ], @@ -2924,91 +3177,47 @@ } }, { - "name": "AnswersRawData", - "source": "AnswersRawData", + "name": "category_asset", + "source": "category_asset", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "run_id", - "publicName": "run_id", - "required": false, + "name": "id", + "publicName": "id", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "uuid" - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string", + "format": "uuid" } }, { - "name": "created_at", - "publicName": "created_at", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "date-time" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "prompt", - "publicName": "prompt", - "required": false, + "name": "name", + "publicName": "name", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string" } }, { - "name": "prompt_id", - "publicName": "prompt_id", - "required": false, + "name": "website", + "publicName": "website", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "uuid" - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string" } }, { - "name": "mentions", - "publicName": "mentions", + "name": "alternate_domains", + "publicName": "alternate_domains", "required": false, "deprecated": false, "type": { @@ -3028,107 +3237,82 @@ } }, { - "name": "analysis_types", - "publicName": "analysis_types", - "required": false, + "name": "is_owned", + "publicName": "is_owned", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "boolean" } }, { - "name": "prompt_type", - "publicName": "prompt_type", - "required": false, + "name": "created_at", + "publicName": "created_at", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string", + "format": "date-time" } }, { - "name": "response", - "publicName": "response", - "required": false, + "name": "logo_url", + "publicName": "logo_url", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "category_asset_with_category", + "source": "category_asset_with_category", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" } }, { - "name": "citations", - "publicName": "citations", - "required": false, + "name": "name", + "publicName": "name", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string" } }, { - "name": "citation_details", - "publicName": "citation_details", - "required": false, + "name": "website", + "publicName": "website", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "ref", - "name": "CitationDetail" - } - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string" } }, { - "name": "web_search_results", - "publicName": "web_search_results", + "name": "alternate_domains", + "publicName": "alternate_domains", "required": false, "deprecated": false, "type": { @@ -3148,252 +3332,96 @@ } }, { - "name": "search_triggered", - "publicName": "search_triggered", - "required": false, + "name": "is_owned", + "publicName": "is_owned", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "boolean" } }, { - "name": "themes", - "publicName": "themes", - "required": false, + "name": "created_at", + "publicName": "created_at", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string", + "format": "date-time" } }, { - "name": "sentiment_themes", - "publicName": "sentiment_themes", - "required": false, + "name": "logo_url", + "publicName": "logo_url", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "ref", - "name": "SentimentTheme" - } - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string" } }, { - "name": "search_queries", - "publicName": "search_queries", - "required": false, + "name": "category", + "publicName": "category", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "topic", - "publicName": "topic", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "topic_id", - "publicName": "topic_id", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "uuid" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "region", - "publicName": "region", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "model", - "publicName": "model", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "model_id", - "publicName": "model_id", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "uuid" - }, - { - "kind": "null" - } - ] + "kind": "ref", + "name": "category" } }, { - "name": "asset", - "publicName": "asset", - "required": false, + "name": "organization", + "publicName": "organization", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] + "kind": "ref", + "name": "organization" } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "category_persona", + "source": "category_persona", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "asset_id", - "publicName": "asset_id", - "required": false, + "name": "id", + "publicName": "id", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "uuid" - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string" } }, { - "name": "tags", - "publicName": "tags", - "required": false, + "name": "name", + "publicName": "name", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string" } }, { "name": "persona", "publicName": "persona", - "required": false, + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] + "kind": "ref", + "name": "persona_profile" } } ], @@ -3401,23 +3429,13 @@ } }, { - "name": "AnswersResponse", - "source": "AnswersResponse", + "name": "category_personas_response", + "source": "category_personas_response", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ - { - "name": "info", - "publicName": "info", - "required": true, - "deprecated": false, - "type": { - "kind": "ref", - "name": "AnswersResponseInfo" - } - }, { "name": "data", "publicName": "data", @@ -3427,7 +3445,7 @@ "kind": "array", "items": { "kind": "ref", - "name": "AnswersRawData" + "name": "category_persona" } } } @@ -3436,21 +3454,34 @@ } }, { - "name": "AnswersResponseInfo", - "source": "AnswersResponseInfo", + "name": "category_prompts_response", + "source": "category_prompts_response", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "total_rows", - "publicName": "total_rows", + "name": "info", + "publicName": "info", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "integer" + "kind": "ref", + "name": "pagination_info" + } + }, + { + "name": "data", + "publicName": "data", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "prompt" + } } } ], @@ -3458,26 +3489,27 @@ } }, { - "name": "AnswersV2Query", - "source": "AnswersV2Query", + "name": "category_with_organization", + "source": "category_with_organization", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "category_id", - "publicName": "category_id", + "name": "id", + "publicName": "id", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "string", + "format": "uuid" } }, { - "name": "start_date", - "publicName": "start_date", + "name": "name", + "publicName": "name", "required": true, "deprecated": false, "type": { @@ -3486,160 +3518,31 @@ } }, { - "name": "end_date", - "publicName": "end_date", - "required": true, + "name": "internal_name", + "publicName": "internal_name", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] } }, { - "name": "include", - "publicName": "include", - "required": false, + "name": "organization", + "publicName": "organization", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "run_id", - "date", - "model", - "topic", - "topic_id", - "persona", - "region", - "tags", - "prompt", - "prompt_id", - "response", - "mentions", - "citations", - "search_queries", - "analysis_types", - "sentiment_claims" - ], - "names": [ - "RunId", - "Date", - "Model", - "Topic", - "TopicId", - "Persona", - "Region", - "Tags", - "Prompt", - "PromptId", - "Response", - "Mentions", - "Citations", - "SearchQueries", - "AnalysisTypes", - "SentimentClaims" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false - ] - } - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "filter", - "publicName": "filter", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "FilterNode" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "limit", - "publicName": "limit", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "integer", - "validation": {} - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "max_results", - "publicName": "max_results", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "integer" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "cursor", - "publicName": "cursor", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] + "kind": "ref", + "name": "organization" } } ], @@ -3647,8 +3550,8 @@ } }, { - "name": "AssetIdFilter", - "source": "AssetIdFilter", + "name": "citation_category_filter", + "source": "citation_category_filter", "publicAliases": [], "deprecated": false, "type": { @@ -3661,7 +3564,7 @@ "deprecated": false, "type": { "kind": "literal", - "value": "asset_id" + "value": "citation_category" } }, { @@ -3675,15 +3578,30 @@ "is", "not_is", "in", - "not_in" + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" ], "names": [ "Is", "NotIs", "In", - "NotIn" + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" ], "deprecations": [ + false, + false, + false, + false, + false, false, false, false, @@ -3701,15 +3619,13 @@ "variants": [ { "kind": "primitive", - "type": "string", - "format": "uuid" + "type": "string" }, { "kind": "array", "items": { "kind": "primitive", - "type": "string", - "format": "uuid" + "type": "string" } } ], @@ -3724,332 +3640,148 @@ } }, { - "name": "BotNameFilter", - "source": "BotNameFilter", + "name": "citation_detail", + "source": "citation_detail", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "field", - "publicName": "field", + "name": "url", + "publicName": "url", "required": true, "deprecated": false, "type": { - "kind": "literal", - "value": "bot_name" + "kind": "primitive", + "type": "string" } }, { - "name": "operator", - "publicName": "operator", + "name": "clean_url", + "publicName": "clean_url", "required": true, "deprecated": false, "type": { - "kind": "enum", - "values": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" - ], - "names": [ - "Is", - "NotIs", - "In", - "NotIn", - "Contains", - "NotContains", - "Matches", - "ContainsCaseInsensitive", - "NotContainsCaseInsensitive" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false - ] + "kind": "primitive", + "type": "string" } }, { - "name": "value", - "publicName": "value", + "name": "title", + "publicName": "title", "required": true, "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "text", + "publicName": "text", + "required": false, + "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "enum", - "values": [ - "Amazonbot", - "ClaudeBot", - "Claude-User", - "Claude-SearchBot", - "Applebot", - "Applebot-Extended", - "Bytespider", - "DeepSeek", - "DuckAssistBot", - "DuckDuckBot", - "Googlebot", - "Googlebot-News", - "Googlebot-Video", - "Googlebot-Image", - "Google-Extended", - "Storebot-Google", - "Google-CloudVertexBot", - "meta-externalfetcher", - "meta-externalagent", - "bingbot", - "MicrosoftPreview", - "ChatGPT-User", - "GPTBot", - "OAI-SearchBot", - "OAI-Operator", - "PerplexityBot", - "Perplexity-User", - "Grok-PageBrowser", - "YouBot", - "OpenClaw", - "baiduspider", - "CCBot", - "ERNIEBot", - "Gemini-Fetch", - "YandexBot", - "PetalBot", - "MistralAI-User", - "Slurp", - "Gemini-Deep-Research" - ], - "names": [ - "Amazonbot", - "ClaudeBot", - "ClaudeUser", - "ClaudeSearchBot", - "Applebot", - "ApplebotExtended", - "Bytespider", - "DeepSeek", - "DuckAssistBot", - "DuckDuckBot", - "Googlebot", - "GooglebotNews", - "GooglebotVideo", - "GooglebotImage", - "GoogleExtended", - "StorebotGoogle", - "GoogleCloudVertexBot", - "MetaExternalfetcher", - "MetaExternalagent", - "Bingbot", - "MicrosoftPreview", - "ChatGptUser", - "GptBot", - "OaiSearchBot", - "OaiOperator", - "PerplexityBot", - "PerplexityUser", - "GrokPageBrowser", - "YouBot", - "OpenClaw", - "Baiduspider", - "CcBot", - "ErnieBot", - "GeminiFetch", - "YandexBot", - "PetalBot", - "MistralAiUser", - "Slurp", - "GeminiDeepResearch" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false - ] + "kind": "primitive", + "type": "string" }, { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "Amazonbot", - "ClaudeBot", - "Claude-User", - "Claude-SearchBot", - "Applebot", - "Applebot-Extended", - "Bytespider", - "DeepSeek", - "DuckAssistBot", - "DuckDuckBot", - "Googlebot", - "Googlebot-News", - "Googlebot-Video", - "Googlebot-Image", - "Google-Extended", - "Storebot-Google", - "Google-CloudVertexBot", - "meta-externalfetcher", - "meta-externalagent", - "bingbot", - "MicrosoftPreview", - "ChatGPT-User", - "GPTBot", - "OAI-SearchBot", - "OAI-Operator", - "PerplexityBot", - "Perplexity-User", - "Grok-PageBrowser", - "YouBot", - "OpenClaw", - "baiduspider", - "CCBot", - "ERNIEBot", - "Gemini-Fetch", - "YandexBot", - "PetalBot", - "MistralAI-User", - "Slurp", - "Gemini-Deep-Research" - ], - "names": [ - "Amazonbot", - "ClaudeBot", - "ClaudeUser", - "ClaudeSearchBot", - "Applebot", - "ApplebotExtended", - "Bytespider", - "DeepSeek", - "DuckAssistBot", - "DuckDuckBot", - "Googlebot", - "GooglebotNews", - "GooglebotVideo", - "GooglebotImage", - "GoogleExtended", - "StorebotGoogle", - "GoogleCloudVertexBot", - "MetaExternalfetcher", - "MetaExternalagent", - "Bingbot", - "MicrosoftPreview", - "ChatGptUser", - "GptBot", - "OaiSearchBot", - "OaiOperator", - "PerplexityBot", - "PerplexityUser", - "GrokPageBrowser", - "YouBot", - "OpenClaw", - "Baiduspider", - "CcBot", - "ErnieBot", - "GeminiFetch", - "YandexBot", - "PetalBot", - "MistralAiUser", - "Slurp", - "GeminiDeepResearch" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false - ] + "kind": "null" + } + ] + } + }, + { + "name": "hostname", + "publicName": "hostname", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "path", + "publicName": "path", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "first_cited_at", + "publicName": "first_cited_at", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "positions", + "publicName": "positions", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "integer" + } + } + }, + { + "name": "groups", + "publicName": "groups", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "ref", + "name": "citation_detail_group" } + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "citation_category", + "publicName": "citation_category", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" } - ], - "variantNames": [ - null, - null ] } } @@ -4058,51 +3790,69 @@ } }, { - "name": "BotProviderFilter", - "source": "BotProviderFilter", + "name": "citation_detail_group", + "source": "citation_detail_group", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "field", - "publicName": "field", + "name": "group_id", + "publicName": "group_id", "required": true, "deprecated": false, "type": { - "kind": "literal", - "value": "bot_provider" + "kind": "primitive", + "type": "integer" } }, { - "name": "operator", - "publicName": "operator", + "name": "group_position", + "publicName": "group_position", "required": true, "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "citations_query", + "source": "citations_query", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "date_interval", + "publicName": "date_interval", + "required": false, + "deprecated": false, "type": { "kind": "enum", "values": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" ], "names": [ - "Is", - "NotIs", - "In", - "NotIn", - "Contains", - "NotContains", - "Matches", - "ContainsCaseInsensitive", - "NotContainsCaseInsensitive" + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" ], "deprecations": [ false, @@ -4111,464 +3861,155 @@ false, false, false, - false, - false, false ] } }, { - "name": "value", - "publicName": "value", + "name": "dimensions", + "publicName": "dimensions", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "hostname", + "path", + "date", + "region", + "topic", + "topic_id", + "model", + "tag", + "prompt", + "prompt_id", + "url", + "root_domain", + "persona", + "citation_category" + ], + "names": [ + "Hostname", + "Path", + "Date", + "Region", + "Topic", + "TopicId", + "Model", + "Tag", + "Prompt", + "PromptId", + "Url", + "RootDomain", + "Persona", + "CitationCategory" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "enum", - "values": [ - "openai", - "anthropic", - "chatgpt", - "deepseek", - "google", - "microsoft", - "perplexity", - "apple", - "bytedance", - "amazon", - "meta", - "duckduckgo", - "you", - "xai", - "grok", - "gemini", - "mistral", - "huawei", - "yandex", - "baidu", - "yahoo", - "commoncrawl", - "openclaw" - ], - "names": [ - "Openai", - "Anthropic", - "Chatgpt", - "Deepseek", - "Google", - "Microsoft", - "Perplexity", - "Apple", - "Bytedance", - "Amazon", - "Meta", - "Duckduckgo", - "You", - "Xai", - "Grok", - "Gemini", - "Mistral", - "Huawei", - "Yandex", - "Baidu", - "Yahoo", - "Commoncrawl", - "Openclaw" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false - ] - }, - { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "openai", - "anthropic", - "chatgpt", - "deepseek", - "google", - "microsoft", - "perplexity", - "apple", - "bytedance", - "amazon", - "meta", - "duckduckgo", - "you", - "xai", - "grok", - "gemini", - "mistral", - "huawei", - "yandex", - "baidu", - "yahoo", - "commoncrawl", - "openclaw" - ], - "names": [ - "Openai", - "Anthropic", - "Chatgpt", - "Deepseek", - "Google", - "Microsoft", - "Perplexity", - "Apple", - "Bytedance", - "Amazon", - "Meta", - "Duckduckgo", - "You", - "Xai", - "Grok", - "Gemini", - "Mistral", - "Huawei", - "Yandex", - "Baidu", - "Yahoo", - "Commoncrawl", - "Openclaw" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false - ] - } - } - ], - "variantNames": [ - null, - null - ] + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "count", + "citation_share", + "share_of_voice", + "first_cited_at" + ], + "names": [ + "Count", + "CitationShare", + "ShareOfVoice", + "FirstCitedAt" + ], + "deprecations": [ + false, + false, + false, + false + ] + } } - } - ], - "additionalProperties": false - } - }, - { - "name": "BotTypeFilter", - "source": "BotTypeFilter", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "field", - "publicName": "field", - "required": true, + "name": "order_by", + "publicName": "order_by", + "required": false, "deprecated": false, + "extensions": { + "source": [ + "examples" + ], + "examples": { + "date": "asc" + } + }, "type": { - "kind": "literal", - "value": "bot_type" + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } } }, { - "name": "operator", - "publicName": "operator", - "required": true, + "name": "pagination", + "publicName": "pagination", + "required": false, "deprecated": false, "type": { - "kind": "enum", - "values": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" - ], - "names": [ - "Is", - "NotIs", - "In", - "NotIn", - "Contains", - "NotContains", - "Matches", - "ContainsCaseInsensitive", - "NotContainsCaseInsensitive" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false - ] + "kind": "ref", + "name": "pagination" } }, { - "name": "value", - "publicName": "value", - "required": true, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "enum", - "values": [ - "ai_assistant", - "ai_training", - "index", - "ai_agent" - ], - "names": [ - "AiAssistant", - "AiTraining", - "Index", - "AiAgent" - ], - "deprecations": [ - false, - false, - false, - false - ] - }, - { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "ai_assistant", - "ai_training", - "index", - "ai_agent" - ], - "names": [ - "AiAssistant", - "AiTraining", - "Index", - "AiAgent" - ], - "deprecations": [ - false, - false, - false, - false - ] - } - } - ], - "variantNames": [ - null, - null - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "BotsReportQuery", - "source": "BotsReportQuery", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "date_interval", - "publicName": "date_interval", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "hour", - "day", - "week", - "month", - "year", - "relative_week" - ], - "names": [ - "Hour", - "Day", - "Week", - "Month", - "Year", - "RelativeWeek" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false - ] - } - }, - { - "name": "dimensions", - "publicName": "dimensions", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "date", - "path", - "bot_name", - "bot_provider" - ], - "names": [ - "Date", - "Path", - "BotName", - "BotProvider" - ], - "deprecations": [ - false, - false, - false, - false - ] - } - } - }, - { - "name": "metrics", - "publicName": "metrics", - "required": true, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "count", - "citations", - "indexing", - "training", - "last_visit" - ], - "names": [ - "Count", - "Citations", - "Indexing", - "Training", - "LastVisit" - ], - "deprecations": [ - false, - false, - false, - false, - false - ] - } - } - }, - { - "name": "order_by", - "publicName": "order_by", - "required": false, - "deprecated": false, - "type": { - "kind": "record", - "value": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" - ], - "deprecations": [ - false, - false - ] - }, - "propertyNames": { - "kind": "primitive", - "type": "string" - } - } - }, - { - "name": "pagination", - "publicName": "pagination", - "required": false, - "deprecated": false, - "type": { - "kind": "ref", - "name": "Pagination" - } - }, - { - "name": "domain", - "publicName": "domain", + "name": "category_id", + "publicName": "category_id", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "string", + "format": "uuid" } }, { @@ -4585,7 +4026,7 @@ { "name": "end_date", "publicName": "end_date", - "required": false, + "required": true, "deprecated": false, "type": { "kind": "primitive", @@ -4593,38 +4034,6 @@ "format": "date-time" } }, - { - "name": "organization_id", - "publicName": "organization_id", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "uuid" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "metric_filters", - "publicName": "metric_filters", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "NumericMetricFilter" - } - } - }, { "name": "filters", "publicName": "filters", @@ -4637,117 +4046,216 @@ "variants": [ { "kind": "ref", - "name": "PathFilter" + "name": "hostname_filter" }, { "kind": "ref", - "name": "BotNameFilter" + "name": "path_filter" }, { "kind": "ref", - "name": "BotProviderFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "bot_name": "BotNameFilter", - "bot_provider": "BotProviderFilter", - "path": "PathFilter" - } - }, - "variantNames": [ - "PathFilter", - "BotNameFilter", - "BotProviderFilter" - ] - } - } + "name": "region_id_filter" + }, + { + "kind": "ref", + "name": "region_name_filter" + }, + { + "kind": "ref", + "name": "topic_id_filter" + }, + { + "kind": "ref", + "name": "topic_name_filter" + }, + { + "kind": "ref", + "name": "model_id_filter" + }, + { + "kind": "ref", + "name": "tag_id_filter" + }, + { + "kind": "ref", + "name": "tag_name_filter" + }, + { + "kind": "ref", + "name": "url_filter" + }, + { + "kind": "ref", + "name": "root_domain_filter" + }, + { + "kind": "ref", + "name": "analysis_type_filter" + }, + { + "kind": "ref", + "name": "prompt_type_filter" + }, + { + "kind": "ref", + "name": "persona_id_filter" + }, + { + "kind": "ref", + "name": "citation_category_filter" + }, + { + "kind": "ref", + "name": "prompt_filter" + }, + { + "kind": "ref", + "name": "prompt_id_filter" + }, + { + "kind": "ref", + "name": "mentioned_filter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "analysis_type": "analysis_type_filter", + "citation_category": "citation_category_filter", + "hostname": "hostname_filter", + "mentioned": "mentioned_filter", + "model": "model_id_filter", + "model_id": "model_id_filter", + "path": "path_filter", + "persona_id": "persona_id_filter", + "prompt": "prompt_filter", + "prompt_id": "prompt_id_filter", + "prompt_type": "prompt_type_filter", + "region": "region_id_filter", + "region_id": "region_id_filter", + "region_name": "region_name_filter", + "root_domain": "root_domain_filter", + "tag": "tag_id_filter", + "tag_id": "tag_id_filter", + "tag_name": "tag_name_filter", + "topic": "topic_id_filter", + "topic_id": "topic_id_filter", + "topic_name": "topic_name_filter", + "url": "url_filter" + } + }, + "variantNames": [ + "HostnameFilter", + "PathFilter", + "RegionIdFilter", + "RegionNameFilter", + "TopicIdFilter", + "TopicNameFilter", + "ModelIdFilter", + "TagIdFilter", + "TagNameFilter", + "UrlFilter", + "RootDomainFilter", + "AnalysisTypeFilter", + "PromptTypeFilter", + "PersonaIdFilter", + "CitationCategoryFilter", + "PromptFilter", + "PromptIdFilter", + "MentionedFilter" + ] + } + } } ], "additionalProperties": false } }, { - "name": "BotsReportQueryV2", - "source": "BotsReportQueryV2", + "name": "citations_response", + "source": "citations_response", "publicAliases": [], "deprecated": false, + "extensions": { + "source": [ + "examples" + ], + "examples": { + "data": [ + { + "dimensions": [ + "example.com", + "/some/path", + "2023-10-01" + ], + "metrics": [ + 10, + 0.05 + ] + } + ], + "info": { + "query": { + "date_interval": "day", + "dimensions": [ + "hostname", + "path", + "date" + ], + "filters": [ + { + "field": "hostname", + "operator": "is", + "value": "example.com" + } + ], + "metrics": [ + "count", + "citation_share" + ] + }, + "total_rows": 200 + } + } + }, "type": { "kind": "object", "properties": [ { - "name": "date_interval", - "publicName": "date_interval", - "required": false, + "name": "info", + "publicName": "info", + "required": true, "deprecated": false, "type": { - "kind": "enum", - "values": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" - ], - "names": [ - "Hour", - "Day", - "Week", - "Month", - "Quarter", - "Year", - "RelativeWeek" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false - ] + "kind": "ref", + "name": "report_info" } }, { - "name": "dimensions", - "publicName": "dimensions", - "required": false, + "name": "data", + "publicName": "data", + "required": true, "deprecated": false, "type": { "kind": "array", "items": { - "kind": "enum", - "values": [ - "date", - "hour", - "path", - "bot_name", - "bot_provider", - "bot_type" - ], - "names": [ - "Date", - "Hour", - "Path", - "BotName", - "BotProvider", - "BotType" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false - ] + "kind": "ref", + "name": "citations_result" } } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "citations_result", + "source": "citations_result", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { "name": "metrics", "publicName": "metrics", @@ -4756,113 +4264,97 @@ "type": { "kind": "array", "items": { - "kind": "enum", - "values": [ - "count", - "citations", - "indexing", - "training", - "last_visit" - ], - "names": [ - "Count", - "Citations", - "Indexing", - "Training", - "LastVisit" - ], - "deprecations": [ - false, - false, - false, - false, - false + "kind": "union", + "variants": [ + { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "integer" + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "primitive", + "type": "string" + } + ], + "variantNames": [ + null, + null, + null + ] + }, + { + "kind": "null" + } ] } } }, { - "name": "order_by", - "publicName": "order_by", - "required": false, + "name": "dimensions", + "publicName": "dimensions", + "required": true, "deprecated": false, "type": { - "kind": "record", - "value": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "primitive", + "type": "string", + "format": "uuid" + } ], - "deprecations": [ - false, - false + "variantNames": [ + null, + null ] - }, - "propertyNames": { - "kind": "primitive", - "type": "string" } } - }, - { - "name": "pagination", - "publicName": "pagination", - "required": false, - "deprecated": false, - "type": { - "kind": "ref", - "name": "Pagination" - } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "content_analysis", + "source": "content_analysis", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "domain", - "publicName": "domain", + "name": "content", + "publicName": "content", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "ref", + "name": "document_content" } }, { - "name": "start_date", - "publicName": "start_date", + "name": "aeo_content_score", + "publicName": "aeo_content_score", "required": true, "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "end_date", - "publicName": "end_date", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "organization_id", - "publicName": "organization_id", - "required": false, - "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "primitive", - "type": "string", - "format": "uuid" + "kind": "ref", + "name": "aeo_score" }, { "kind": "null" @@ -4871,61 +4363,36 @@ } }, { - "name": "metric_filters", - "publicName": "metric_filters", - "required": false, + "name": "analysis", + "publicName": "analysis", + "required": true, + "deprecated": false, + "type": { + "kind": "ref", + "name": "analysis_summary" + } + }, + { + "name": "recommendations", + "publicName": "recommendations", + "required": true, "deprecated": false, "type": { "kind": "array", "items": { "kind": "ref", - "name": "NumericMetricFilter" + "name": "recommendation" } } }, { - "name": "filters", - "publicName": "filters", - "required": false, + "name": "inputs", + "publicName": "inputs", + "required": true, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "PathFilter" - }, - { - "kind": "ref", - "name": "BotNameFilter" - }, - { - "kind": "ref", - "name": "BotProviderFilter" - }, - { - "kind": "ref", - "name": "BotTypeFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "bot_name": "BotNameFilter", - "bot_provider": "BotProviderFilter", - "bot_type": "BotTypeFilter", - "path": "PathFilter" - } - }, - "variantNames": [ - "PathFilter", - "BotNameFilter", - "BotProviderFilter", - "BotTypeFilter" - ] - } + "kind": "ref", + "name": "analysis_inputs" } } ], @@ -4933,68 +4400,69 @@ } }, { - "name": "BrandNameFilter", - "source": "BrandNameFilter", + "name": "content_format", + "source": "content_format", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "markdown", + "html" + ], + "names": [ + "Markdown", + "Html" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "content_optimization", + "source": "content_optimization", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "field", - "publicName": "field", + "name": "id", + "publicName": "id", "required": true, "deprecated": false, "type": { - "kind": "literal", - "value": "brand_name" + "kind": "primitive", + "type": "string", + "format": "uuid" } }, { - "name": "operator", - "publicName": "operator", + "name": "title", + "publicName": "title", "required": true, "deprecated": false, "type": { - "kind": "enum", - "values": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" - ], - "names": [ - "Is", - "NotIs", - "In", - "NotIn", - "Contains", - "NotContains", - "Matches", - "ContainsCaseInsensitive", - "NotContainsCaseInsensitive" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false - ] + "kind": "primitive", + "type": "string" } }, { - "name": "value", - "publicName": "value", + "name": "created_at", + "publicName": "created_at", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "extracted_input", + "publicName": "extracted_input", "required": true, "deprecated": false, "type": { @@ -5005,45 +4473,24 @@ "type": "string" }, { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } + "kind": "null" } - ], - "variantNames": [ - null, - null ] } - } - ], - "additionalProperties": false - } - }, - { - "name": "Category", - "source": "Category", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "id", - "publicName": "id", + "name": "type", + "publicName": "type", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" + "kind": "ref", + "name": "content_type" } }, { - "name": "name", - "publicName": "name", + "name": "status", + "publicName": "status", "required": true, "deprecated": false, "type": { @@ -5056,94 +4503,88 @@ } }, { - "name": "CategoryAsset", - "source": "CategoryAsset", + "name": "content_optimization_analysis_response", + "source": "content_optimization_analysis_response", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "id", - "publicName": "id", + "name": "data", + "publicName": "data", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" + "kind": "ref", + "name": "content_analysis" } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "content_optimization_response", + "source": "content_optimization_response", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "name", - "publicName": "name", + "name": "info", + "publicName": "info", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "ref", + "name": "content_optimization_response_info" } }, { - "name": "website", - "publicName": "website", + "name": "data", + "publicName": "data", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "alternate_domains", - "publicName": "alternate_domains", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "is_owned", - "publicName": "is_owned", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" + "kind": "array", + "items": { + "kind": "ref", + "name": "content_optimization" + } } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "content_optimization_response_info", + "source": "content_optimization_response_info", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "created_at", - "publicName": "created_at", + "name": "total_rows", + "publicName": "total_rows", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "string", - "format": "date-time" + "type": "integer" } }, { - "name": "logo_url", - "publicName": "logo_url", + "name": "query", + "publicName": "query", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "ref", + "name": "optimization_query" } } ], @@ -5151,8 +4592,32 @@ } }, { - "name": "CategoryAssetWithCategory", - "source": "CategoryAssetWithCategory", + "name": "content_type", + "source": "content_type", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "file", + "text", + "url" + ], + "names": [ + "File", + "Text", + "Url" + ], + "deprecations": [ + false, + false, + false + ] + } + }, + { + "name": "create_prompt_input", + "source": "create_prompt_input", "publicAliases": [], "deprecated": false, "type": { @@ -5161,27 +4626,47 @@ { "name": "id", "publicName": "id", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "prompt", + "publicName": "prompt", "required": true, "deprecated": false, "type": { "kind": "primitive", "type": "string", - "format": "uuid" + "validation": { + "minLength": 1 + } } }, { - "name": "name", - "publicName": "name", + "name": "topic", + "publicName": "topic", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "ref", + "name": "id_or_name" } }, { - "name": "website", - "publicName": "website", + "name": "language", + "publicName": "language", "required": true, "deprecated": false, "type": { @@ -5190,75 +4675,135 @@ } }, { - "name": "alternate_domains", - "publicName": "alternate_domains", + "name": "tags", + "publicName": "tags", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - }, - { - "kind": "null" - } - ] + "kind": "array", + "items": { + "kind": "ref", + "name": "id_or_name" + } } }, { - "name": "is_owned", - "publicName": "is_owned", + "name": "regions", + "publicName": "regions", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "boolean" + "kind": "array", + "items": { + "kind": "ref", + "name": "id_or_name" + }, + "validation": { + "minItems": 1 + } } }, { - "name": "created_at", - "publicName": "created_at", + "name": "platforms", + "publicName": "platforms", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" + "kind": "array", + "items": { + "kind": "ref", + "name": "id_or_name" + }, + "validation": { + "minItems": 1 + } } }, { - "name": "logo_url", - "publicName": "logo_url", - "required": true, + "name": "personas", + "publicName": "personas", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "array", + "items": { + "kind": "ref", + "name": "id_or_name" + } } }, { - "name": "category", - "publicName": "category", - "required": true, + "name": "analysis_types", + "publicName": "analysis_types", + "required": false, "deprecated": false, "type": { - "kind": "ref", - "name": "Category" + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ], + "names": [ + "Visibility", + "Sentiment", + "SentimentV2", + "Accuracy" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + }, + { + "kind": "null" + } + ] } }, { - "name": "organization", - "publicName": "organization", - "required": true, + "name": "prompt_type", + "publicName": "prompt_type", + "required": false, + "deprecated": true, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "asset", + "publicName": "asset", + "required": false, "deprecated": false, "type": { - "kind": "ref", - "name": "Organization" + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "id_or_name" + }, + { + "kind": "null" + } + ] } } ], @@ -5266,41 +4811,34 @@ } }, { - "name": "CategoryPersona", - "source": "CategoryPersona", + "name": "create_prompts_body", + "source": "create_prompts_body", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "id", - "publicName": "id", + "name": "prompts", + "publicName": "prompts", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "name", - "publicName": "name", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" + "kind": "array", + "items": { + "kind": "ref", + "name": "create_prompt_input" + } } }, { - "name": "persona", - "publicName": "persona", - "required": true, + "name": "dry_run", + "publicName": "dry_run", + "required": false, "deprecated": false, "type": { - "kind": "ref", - "name": "PersonaProfile" + "kind": "primitive", + "type": "boolean" } } ], @@ -5308,23 +4846,63 @@ } }, { - "name": "CategoryPersonasResponse", - "source": "CategoryPersonasResponse", + "name": "create_prompts_response", + "source": "create_prompts_response", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "data", - "publicName": "data", + "name": "dry_run", + "publicName": "dry_run", "required": true, "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "created", + "publicName": "created", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "topics_created", + "publicName": "topics_created", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "tags_created", + "publicName": "tags_created", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "prompts", + "publicName": "prompts", + "required": false, + "deprecated": false, "type": { "kind": "array", "items": { "kind": "ref", - "name": "CategoryPersona" + "name": "prompt_preview" } } } @@ -5333,34 +4911,40 @@ } }, { - "name": "CategoryPromptsResponse", - "source": "CategoryPromptsResponse", + "name": "cursor_pagination", + "source": "cursor_pagination", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "info", - "publicName": "info", - "required": true, + "name": "limit", + "publicName": "limit", + "required": false, "deprecated": false, "type": { - "kind": "ref", - "name": "PaginationInfo" + "kind": "primitive", + "type": "integer", + "validation": {} } }, { - "name": "data", - "publicName": "data", - "required": true, + "name": "next_cursor", + "publicName": "next_cursor", + "required": false, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "Prompt" - } + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] } } ], @@ -5368,42 +4952,59 @@ } }, { - "name": "CategoryWithOrganization", - "source": "CategoryWithOrganization", + "name": "delete_document_request", + "source": "delete_document_request", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "id", - "publicName": "id", + "name": "name", + "publicName": "name", "required": true, "deprecated": false, "type": { "kind": "primitive", "type": "string", - "format": "uuid" + "validation": { + "minLength": 1 + } } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "delete_folder_request", + "source": "delete_folder_request", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "name", - "publicName": "name", + "name": "path", + "publicName": "path", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "string", + "validation": { + "minLength": 1 + } } }, { - "name": "organization", - "publicName": "organization", - "required": true, + "name": "recursive", + "publicName": "recursive", + "required": false, "deprecated": false, "type": { - "kind": "ref", - "name": "Organization" + "kind": "primitive", + "type": "boolean" } } ], @@ -5411,63 +5012,21 @@ } }, { - "name": "CitationCategoryFilter", - "source": "CitationCategoryFilter", + "name": "document_content", + "source": "document_content", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "field", - "publicName": "field", - "required": true, - "deprecated": false, - "type": { - "kind": "literal", - "value": "citation_category" - } - }, - { - "name": "operator", - "publicName": "operator", + "name": "format", + "publicName": "format", "required": true, "deprecated": false, "type": { - "kind": "enum", - "values": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" - ], - "names": [ - "Is", - "NotIs", - "In", - "NotIn", - "Contains", - "NotContains", - "Matches", - "ContainsCaseInsensitive", - "NotContainsCaseInsensitive" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false - ] + "kind": "ref", + "name": "content_format" } }, { @@ -5476,24 +5035,8 @@ "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - } - ], - "variantNames": [ - null, - null - ] + "kind": "primitive", + "type": "string" } } ], @@ -5501,16 +5044,16 @@ } }, { - "name": "CitationDetail", - "source": "CitationDetail", + "name": "document_operation_response", + "source": "document_operation_response", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "url", - "publicName": "url", + "name": "message", + "publicName": "message", "required": true, "deprecated": false, "type": { @@ -5519,8 +5062,8 @@ } }, { - "name": "clean_url", - "publicName": "clean_url", + "name": "name", + "publicName": "name", "required": true, "deprecated": false, "type": { @@ -5529,8 +5072,8 @@ } }, { - "name": "title", - "publicName": "title", + "name": "path", + "publicName": "path", "required": true, "deprecated": false, "type": { @@ -5539,8 +5082,8 @@ } }, { - "name": "text", - "publicName": "text", + "name": "folder", + "publicName": "folder", "required": false, "deprecated": false, "type": { @@ -5555,20 +5098,44 @@ } ] } + } + ], + "additionalProperties": false + } + }, + { + "name": "domain_with_organization", + "source": "domain_with_organization", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "created_at", + "publicName": "created_at", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } }, { - "name": "hostname", - "publicName": "hostname", + "name": "id", + "publicName": "id", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "string", + "format": "uuid" } }, { - "name": "path", - "publicName": "path", + "name": "name", + "publicName": "name", "required": true, "deprecated": false, "type": { @@ -5577,73 +5144,13 @@ } }, { - "name": "first_cited_at", - "publicName": "first_cited_at", - "required": false, + "name": "organization", + "publicName": "organization", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "positions", - "publicName": "positions", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "primitive", - "type": "integer" - } - } - }, - { - "name": "groups", - "publicName": "groups", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "ref", - "name": "CitationDetailGroup" - } - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "citation_category", - "publicName": "citation_category", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] + "kind": "ref", + "name": "organization" } } ], @@ -5651,717 +5158,281 @@ } }, { - "name": "CitationDetailGroup", - "source": "CitationDetailGroup", + "name": "enabled_fields_response", + "source": "enabled_fields_response", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "group_id", - "publicName": "group_id", - "required": true, + "name": "run_id", + "publicName": "run_id", + "required": false, "deprecated": false, "type": { "kind": "primitive", - "type": "integer" + "type": "boolean" } }, { - "name": "group_position", - "publicName": "group_position", - "required": true, + "name": "created_at", + "publicName": "created_at", + "required": false, "deprecated": false, "type": { "kind": "primitive", - "type": "integer" + "type": "boolean" } - } - ], - "additionalProperties": false - } - }, - { - "name": "CitationsQuery", - "source": "CitationsQuery", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "date_interval", - "publicName": "date_interval", + "name": "prompt", + "publicName": "prompt", "required": false, "deprecated": false, "type": { - "kind": "enum", - "values": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" - ], - "names": [ - "Hour", - "Day", - "Week", - "Month", - "Quarter", - "Year", - "RelativeWeek" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false - ] + "kind": "primitive", + "type": "boolean" } }, { - "name": "dimensions", - "publicName": "dimensions", + "name": "prompt_id", + "publicName": "prompt_id", "required": false, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "hostname", - "path", - "date", - "region", - "topic", - "topic_id", - "model", - "tag", - "prompt", - "prompt_id", - "url", - "root_domain", - "persona", - "citation_category" - ], - "names": [ - "Hostname", - "Path", - "Date", - "Region", - "Topic", - "TopicId", - "Model", - "Tag", - "Prompt", - "PromptId", - "Url", - "RootDomain", - "Persona", - "CitationCategory" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false - ] - } + "kind": "primitive", + "type": "boolean" } }, { - "name": "metrics", - "publicName": "metrics", - "required": true, + "name": "mentions", + "publicName": "mentions", + "required": false, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "count", - "citation_share", - "share_of_voice", - "first_cited_at" - ], - "names": [ - "Count", - "CitationShare", - "ShareOfVoice", - "FirstCitedAt" - ], - "deprecations": [ - false, - false, - false, - false - ] - } + "kind": "primitive", + "type": "boolean" } }, { - "name": "order_by", - "publicName": "order_by", + "name": "analysis_types", + "publicName": "analysis_types", "required": false, "deprecated": false, "type": { - "kind": "record", - "value": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" - ], - "deprecations": [ - false, - false - ] - }, - "propertyNames": { - "kind": "primitive", - "type": "string" - } + "kind": "primitive", + "type": "boolean" } }, { - "name": "pagination", - "publicName": "pagination", + "name": "prompt_type", + "publicName": "prompt_type", "required": false, - "deprecated": false, + "deprecated": true, "type": { - "kind": "ref", - "name": "Pagination" + "kind": "primitive", + "type": "boolean" } }, { - "name": "category_id", - "publicName": "category_id", - "required": true, + "name": "response", + "publicName": "response", + "required": false, "deprecated": false, "type": { "kind": "primitive", - "type": "string", - "format": "uuid" + "type": "boolean" } }, { - "name": "start_date", - "publicName": "start_date", - "required": true, + "name": "citations", + "publicName": "citations", + "required": false, "deprecated": false, "type": { "kind": "primitive", - "type": "string", - "format": "date-time" + "type": "boolean" } }, { - "name": "end_date", - "publicName": "end_date", - "required": true, + "name": "citation_details", + "publicName": "citation_details", + "required": false, "deprecated": false, "type": { "kind": "primitive", - "type": "string", - "format": "date-time" + "type": "boolean" } }, { - "name": "filters", - "publicName": "filters", + "name": "web_search_results", + "publicName": "web_search_results", "required": false, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "HostnameFilter" - }, - { - "kind": "ref", - "name": "PathFilter" - }, - { - "kind": "ref", - "name": "RegionIdFilter" - }, - { - "kind": "ref", - "name": "RegionNameFilter" - }, - { - "kind": "ref", - "name": "TopicIdFilter" - }, - { - "kind": "ref", - "name": "TopicNameFilter" - }, - { - "kind": "ref", - "name": "ModelIdFilter" - }, - { - "kind": "ref", - "name": "TagIdFilter" - }, - { - "kind": "ref", - "name": "TagNameFilter" - }, - { - "kind": "ref", - "name": "UrlFilter" - }, - { - "kind": "ref", - "name": "RootDomainFilter" - }, - { - "kind": "ref", - "name": "AnalysisTypeFilter" - }, - { - "kind": "ref", - "name": "PromptTypeFilter" - }, - { - "kind": "ref", - "name": "PersonaIdFilter" - }, - { - "kind": "ref", - "name": "CitationCategoryFilter" - }, - { - "kind": "ref", - "name": "PromptFilter" - }, - { - "kind": "ref", - "name": "PromptIdFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "analysis_type": "AnalysisTypeFilter", - "citation_category": "CitationCategoryFilter", - "hostname": "HostnameFilter", - "model": "ModelIdFilter", - "model_id": "ModelIdFilter", - "path": "PathFilter", - "persona_id": "PersonaIdFilter", - "prompt": "PromptFilter", - "prompt_id": "PromptIdFilter", - "prompt_type": "PromptTypeFilter", - "region": "RegionIdFilter", - "region_id": "RegionIdFilter", - "region_name": "RegionNameFilter", - "root_domain": "RootDomainFilter", - "tag": "TagIdFilter", - "tag_id": "TagIdFilter", - "tag_name": "TagNameFilter", - "topic": "TopicIdFilter", - "topic_id": "TopicIdFilter", - "topic_name": "TopicNameFilter", - "url": "UrlFilter" - } - }, - "variantNames": [ - "HostnameFilter", - "PathFilter", - "RegionIdFilter", - "RegionNameFilter", - "TopicIdFilter", - "TopicNameFilter", - "ModelIdFilter", - "TagIdFilter", - "TagNameFilter", - "UrlFilter", - "RootDomainFilter", - "AnalysisTypeFilter", - "PromptTypeFilter", - "PersonaIdFilter", - "CitationCategoryFilter", - "PromptFilter", - "PromptIdFilter" - ] - } + "kind": "primitive", + "type": "boolean" } - } - ], - "additionalProperties": false - } - }, - { - "name": "CitationsResponse", - "source": "CitationsResponse", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "info", - "publicName": "info", - "required": true, + "name": "search_triggered", + "publicName": "search_triggered", + "required": false, "deprecated": false, "type": { - "kind": "ref", - "name": "ReportInfo" + "kind": "primitive", + "type": "boolean" } }, { - "name": "data", - "publicName": "data", - "required": true, - "deprecated": false, + "name": "themes", + "publicName": "themes", + "required": false, + "deprecated": true, "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "CitationsResult" - } + "kind": "primitive", + "type": "boolean" } - } - ], - "additionalProperties": false - } - }, - { - "name": "CitationsResult", - "source": "CitationsResult", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "metrics", - "publicName": "metrics", - "required": true, + "name": "sentiment_themes", + "publicName": "sentiment_themes", + "required": false, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "union", - "variants": [ - { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "integer" - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "primitive", - "type": "string" - } - ], - "variantNames": [ - null, - null, - null - ] - }, - { - "kind": "null" - } - ] - } + "kind": "primitive", + "type": "boolean" } }, { - "name": "dimensions", - "publicName": "dimensions", - "required": true, + "name": "topic", + "publicName": "topic", + "required": false, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - ], - "variantNames": [ - null, - null - ] - } + "kind": "primitive", + "type": "boolean" } - } - ], - "additionalProperties": false - } - }, - { - "name": "CitationsV2Query", - "source": "CitationsV2Query", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "category_id", - "publicName": "category_id", - "required": true, + "name": "topic_id", + "publicName": "topic_id", + "required": false, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "boolean" } }, { - "name": "start_date", - "publicName": "start_date", - "required": true, + "name": "region", + "publicName": "region", + "required": false, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "boolean" } }, { - "name": "end_date", - "publicName": "end_date", - "required": true, + "name": "model", + "publicName": "model", + "required": false, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "boolean" } }, { - "name": "group_by", - "publicName": "group_by", + "name": "model_id", + "publicName": "model_id", "required": false, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "page", - "date", - "model", - "topic", - "region", - "persona", - "prompt" - ], - "names": [ - "Page", - "Date", - "Model", - "Topic", - "Region", - "Persona", - "Prompt" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false - ] - } + "kind": "primitive", + "type": "boolean" } }, { - "name": "metrics", - "publicName": "metrics", + "name": "asset", + "publicName": "asset", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "count", - "citation_share", - "rank", - "first_cited_at" - ], - "names": [ - "Count", - "CitationShare", - "Rank", - "FirstCitedAt" - ], - "deprecations": [ - false, - false, - false, - false - ] - } - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "boolean" } }, { - "name": "interval", - "publicName": "interval", + "name": "asset_id", + "publicName": "asset_id", "required": false, "deprecated": false, "type": { - "kind": "enum", - "values": [ - "day", - "week", - "month" - ], - "names": [ - "Day", - "Week", - "Month" - ], - "deprecations": [ - false, - false, - false - ] + "kind": "primitive", + "type": "boolean" } }, { - "name": "scope", - "publicName": "scope", + "name": "tags", + "publicName": "tags", "required": false, "deprecated": false, "type": { - "kind": "enum", - "values": [ - "all", - "owned" - ], - "names": [ - "All", - "Owned" - ], - "deprecations": [ - false, - false - ] + "kind": "primitive", + "type": "boolean" } }, { - "name": "filter", - "publicName": "filter", + "name": "search_queries", + "publicName": "search_queries", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "FilterNode" - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "boolean" } }, { - "name": "limit", - "publicName": "limit", + "name": "persona", + "publicName": "persona", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "integer", - "validation": {} - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "boolean" } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "field_diff", + "source": "field_diff", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "max_results", - "publicName": "max_results", + "name": "old", + "publicName": "old", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "integer" - }, - { - "kind": "null" - } - ] + "kind": "unknown" } }, { - "name": "cursor", - "publicName": "cursor", + "name": "new", + "publicName": "new", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] + "kind": "unknown" } } ], @@ -6369,16 +5440,16 @@ } }, { - "name": "ClaimBreakdownQuery", - "source": "ClaimBreakdownQuery", + "name": "folder_operation_response", + "source": "folder_operation_response", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "start_date", - "publicName": "start_date", + "name": "message", + "publicName": "message", "required": true, "deprecated": false, "type": { @@ -6387,162 +5458,153 @@ } }, { - "name": "end_date", - "publicName": "end_date", + "name": "path", + "publicName": "path", "required": true, "deprecated": false, "type": { "kind": "primitive", "type": "string" } - }, - { - "name": "comparison_start_date", - "publicName": "comparison_start_date", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "http_validation_error", + "source": "http_validation_error", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "comparison_end_date", - "publicName": "comparison_end_date", + "name": "detail", + "publicName": "detail", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] + "kind": "array", + "items": { + "kind": "ref", + "name": "validation_error" + } } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "hostname_filter", + "source": "hostname_filter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "category_id", - "publicName": "category_id", + "name": "field", + "publicName": "field", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" + "kind": "literal", + "value": "hostname" } }, { - "name": "topic_ids", - "publicName": "topic_ids", - "required": false, + "name": "operator", + "publicName": "operator", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "exclude_topic_ids", - "publicName": "exclude_topic_ids", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] } }, { - "name": "tag_ids", - "publicName": "tag_ids", - "required": false, + "name": "value", + "publicName": "value", + "required": true, "deprecated": false, "type": { "kind": "union", "variants": [ + { + "kind": "primitive", + "type": "string" + }, { "kind": "array", "items": { "kind": "primitive", - "type": "string", - "format": "uuid" + "type": "string" } - }, - { - "kind": "null" } - ] - } - }, - { - "name": "tag_filter_type", - "publicName": "tag_filter_type", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "all", - "any" - ], - "names": [ - "All", - "Any" ], - "deprecations": [ - false, - false + "variantNames": [ + null, + null ] } - }, - { - "name": "include_no_tag", - "publicName": "include_no_tag", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "id_or_name", + "source": "id_or_name", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "region_ids", - "publicName": "region_ids", + "name": "id", + "publicName": "id", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } + "kind": "primitive", + "type": "string" }, { "kind": "null" @@ -6551,41 +5613,58 @@ } }, { - "name": "platform_ids", - "publicName": "platform_ids", + "name": "name", + "publicName": "name", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } + "kind": "primitive", + "type": "string" }, { "kind": "null" } ] } + } + ], + "additionalProperties": false + } + }, + { + "name": "report_info", + "source": "report_info", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "total_rows", + "publicName": "total_rows", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } }, { - "name": "persona_ids", - "publicName": "persona_ids", + "name": "query", + "publicName": "query", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" + "kind": "object", + "properties": [], + "additionalProperties": { + "kind": "unknown" } }, { @@ -6593,32 +5672,51 @@ } ] } + } + ], + "additionalProperties": false + } + }, + { + "name": "knowledge_base_item", + "source": "knowledge_base_item", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } }, { - "name": "include_no_persona", - "publicName": "include_no_persona", - "required": false, + "name": "name", + "publicName": "name", + "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "boolean" + "type": "string" } }, { - "name": "prompt_ids", - "publicName": "prompt_ids", + "name": "slug", + "publicName": "slug", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } + "kind": "primitive", + "type": "string" }, { "kind": "null" @@ -6627,19 +5725,16 @@ } }, { - "name": "citation_categories", - "publicName": "citation_categories", + "name": "description", + "publicName": "description", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } + "kind": "primitive", + "type": "string" }, { "kind": "null" @@ -6648,14 +5743,14 @@ } }, { - "name": "cluster_id", - "publicName": "cluster_id", + "name": "created_at", + "publicName": "created_at", "required": true, "deprecated": false, "type": { "kind": "primitive", "type": "string", - "format": "uuid" + "format": "date-time" } } ], @@ -6663,37 +5758,34 @@ } }, { - "name": "ClaimBreakdownResponse", - "source": "ClaimBreakdownResponse", + "name": "knowledge_base_search_response", + "source": "knowledge_base_search_response", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "platform", - "publicName": "platform", + "name": "data", + "publicName": "data", "required": true, "deprecated": false, "type": { "kind": "array", "items": { "kind": "ref", - "name": "ClaimBreakdownRow" + "name": "knowledge_base_search_result" } } }, { - "name": "prompt", - "publicName": "prompt", - "required": true, + "name": "pagination", + "publicName": "pagination", + "required": false, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "ClaimPromptBreakdownRow" - } + "kind": "ref", + "name": "cursor_pagination" } } ], @@ -6701,8 +5793,8 @@ } }, { - "name": "ClaimBreakdownRow", - "source": "ClaimBreakdownRow", + "name": "knowledge_base_search_result", + "source": "knowledge_base_search_result", "publicAliases": [], "deprecated": false, "type": { @@ -6719,81 +5811,71 @@ } }, { - "name": "label", - "publicName": "label", + "name": "score", + "publicName": "score", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "number" } }, { - "name": "responseCount", - "publicName": "responseCount", + "name": "metadata", + "publicName": "metadata", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "integer" + "kind": "object", + "properties": [], + "additionalProperties": { + "kind": "unknown" + } } }, { - "name": "totalResponseCount", - "publicName": "totalResponseCount", + "name": "content", + "publicName": "content", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "integer" + "type": "string" } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "list_agents_response", + "source": "list_agents_response", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "responseShare", - "publicName": "responseShare", + "name": "data", + "publicName": "data", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "number" + "kind": "array", + "items": { + "kind": "ref", + "name": "agent" + } } }, { - "name": "responseShareDelta", - "publicName": "responseShareDelta", + "name": "pagination", + "publicName": "pagination", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "prevResponseCount", - "publicName": "prevResponseCount", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer" - } - }, - { - "name": "prevTotalResponseCount", - "publicName": "prevTotalResponseCount", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer" + "kind": "ref", + "name": "cursor_pagination" } } ], @@ -6801,108 +5883,112 @@ } }, { - "name": "ClaimCitationRow", - "source": "ClaimCitationRow", + "name": "list_agents_status_filter", + "source": "list_agents_status_filter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "published", + "draft" + ], + "names": [ + "Published", + "Draft" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "list_knowledge_bases_response", + "source": "list_knowledge_bases_response", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "href", - "publicName": "href", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "hostname", - "publicName": "hostname", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "path", - "publicName": "path", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "citationCategory", - "publicName": "citationCategory", + "name": "data", + "publicName": "data", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "array", + "items": { + "kind": "ref", + "name": "knowledge_base_item" + } } }, { - "name": "domainCategory", - "publicName": "domainCategory", - "required": true, + "name": "pagination", + "publicName": "pagination", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "ref", + "name": "cursor_pagination" } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "mentioned_filter", + "source": "mentioned_filter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "snippet", - "publicName": "snippet", + "name": "field", + "publicName": "field", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "literal", + "value": "mentioned" } }, { - "name": "citationCount", - "publicName": "citationCount", + "name": "operator", + "publicName": "operator", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "number" + "kind": "literal", + "value": "is" } }, { - "name": "citationShare", - "publicName": "citationShare", + "name": "value", + "publicName": "value", "required": true, "deprecated": false, - "type": { - "kind": "primitive", - "type": "number" - } - }, - { - "name": "citationShareDelta", - "publicName": "citationShareDelta", - "required": false, - "deprecated": false, "type": { "kind": "union", "variants": [ { "kind": "primitive", - "type": "number" + "type": "boolean" }, { - "kind": "null" + "kind": "array", + "items": { + "kind": "primitive", + "type": "boolean" + } } + ], + "variantNames": [ + null, + null ] } } @@ -6911,37 +5997,69 @@ } }, { - "name": "ClaimCitationsQuery", - "source": "ClaimCitationsQuery", + "name": "merchant_name_filter", + "source": "merchant_name_filter", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "start_date", - "publicName": "start_date", + "name": "field", + "publicName": "field", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "literal", + "value": "merchant_name" } }, { - "name": "end_date", - "publicName": "end_date", + "name": "operator", + "publicName": "operator", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] } }, { - "name": "comparison_start_date", - "publicName": "comparison_start_date", - "required": false, + "name": "value", + "publicName": "value", + "required": true, "deprecated": false, "type": { "kind": "union", @@ -6951,48 +6069,94 @@ "type": "string" }, { - "kind": "null" + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } } + ], + "variantNames": [ + null, + null ] } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "model_id_filter", + "source": "model_id_filter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "comparison_end_date", - "publicName": "comparison_end_date", - "required": false, + "name": "field", + "publicName": "field", + "required": true, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "primitive", - "type": "string" + "kind": "literal", + "value": "model_id" }, { - "kind": "null" + "kind": "literal", + "value": "model" } + ], + "variantNames": [ + null, + null ] } }, { - "name": "category_id", - "publicName": "category_id", + "name": "operator", + "publicName": "operator", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn" + ], + "deprecations": [ + false, + false, + false, + false + ] } }, { - "name": "topic_ids", - "publicName": "topic_ids", - "required": false, + "name": "value", + "publicName": "value", + "required": true, "deprecated": false, "type": { "kind": "union", "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, { "kind": "array", "items": { @@ -7000,274 +6164,267 @@ "type": "string", "format": "uuid" } - }, - { - "kind": "null" } - ] - } - }, + ], + "variantNames": [ + null, + null + ] + } + } + ], + "additionalProperties": false + } + }, + { + "name": "named_resource", + "source": "named_resource", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "exclude_topic_ids", - "publicName": "exclude_topic_ids", - "required": false, + "name": "id", + "publicName": "id", + "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "boolean" + "type": "string" } }, { - "name": "tag_ids", - "publicName": "tag_ids", + "name": "name", + "publicName": "name", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "named_resource_diff_list", + "source": "named_resource_diff_list", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "added", + "publicName": "added", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "kind": "null" - } - ] + "kind": "array", + "items": { + "kind": "ref", + "name": "named_resource" + } } }, { - "name": "tag_filter_type", - "publicName": "tag_filter_type", + "name": "removed", + "publicName": "removed", "required": false, "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "named_resource" + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "numeric_metric_filter", + "source": "numeric_metric_filter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, "type": { "kind": "enum", "values": [ - "all", - "any" + ">", + ">=", + "<", + "<=", + "=", + "==", + "!=" ], "names": [ - "All", - "Any" + "GreaterThan", + "GreaterThanEqual", + "LessThan", + "LessThanEqual", + "Equal", + "EqualEqual", + "NotEqual" ], "deprecations": [ + false, + false, + false, + false, + false, false, false ] } }, { - "name": "include_no_tag", - "publicName": "include_no_tag", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "region_ids", - "publicName": "region_ids", - "required": false, + "name": "value", + "publicName": "value", + "required": true, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } + "kind": "primitive", + "type": "integer" }, { - "kind": "null" + "kind": "primitive", + "type": "number" } + ], + "variantNames": [ + null, + null ] } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "optimization_query", + "source": "optimization_query", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "platform_ids", - "publicName": "platform_ids", - "required": false, + "name": "asset_id", + "publicName": "asset_id", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string", + "format": "uuid" } }, { - "name": "persona_ids", - "publicName": "persona_ids", + "name": "pagination", + "publicName": "pagination", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "kind": "null" - } - ] + "kind": "ref", + "name": "pagination" } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "order_by_direction", + "source": "order_by_direction", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "organization", + "source": "organization", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "include_no_persona", - "publicName": "include_no_persona", - "required": false, + "name": "id", + "publicName": "id", + "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "boolean" + "type": "string", + "format": "uuid" } }, { - "name": "prompt_ids", - "publicName": "prompt_ids", - "required": false, + "name": "name", + "publicName": "name", + "required": true, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } + "kind": "primitive", + "type": "string" }, { "kind": "null" } ] } - }, - { - "name": "citation_categories", - "publicName": "citation_categories", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "cluster_id", - "publicName": "cluster_id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "limit", - "publicName": "limit", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer", - "validation": {} - } - }, - { - "name": "offset", - "publicName": "offset", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer", - "validation": {} - } - }, - { - "name": "search_query", - "publicName": "search_query", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "sort_order", - "publicName": "sort_order", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" - ], - "deprecations": [ - false, - false - ] - } } ], "additionalProperties": false } }, { - "name": "ClaimCitationsResponse", - "source": "ClaimCitationsResponse", + "name": "organization_assets_response", + "source": "organization_assets_response", "publicAliases": [], "deprecated": false, "type": { @@ -7282,27 +6439,17 @@ "kind": "array", "items": { "kind": "ref", - "name": "ClaimCitationRow" + "name": "category_asset_with_category" } } - }, - { - "name": "totalCount", - "publicName": "totalCount", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer" - } } ], "additionalProperties": false } }, { - "name": "ClaimPromptBreakdownRow", - "source": "ClaimPromptBreakdownRow", + "name": "organization_personas_with_category", + "source": "organization_personas_with_category", "publicAliases": [], "deprecated": false, "type": { @@ -7319,86 +6466,8 @@ } }, { - "name": "label", - "publicName": "label", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "responseCount", - "publicName": "responseCount", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer" - } - }, - { - "name": "totalResponseCount", - "publicName": "totalResponseCount", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer" - } - }, - { - "name": "responseShare", - "publicName": "responseShare", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "number" - } - }, - { - "name": "responseShareDelta", - "publicName": "responseShareDelta", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "prevResponseCount", - "publicName": "prevResponseCount", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer" - } - }, - { - "name": "prevTotalResponseCount", - "publicName": "prevTotalResponseCount", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer" - } - }, - { - "name": "promptId", - "publicName": "promptId", + "name": "name", + "publicName": "name", "required": true, "deprecated": false, "type": { @@ -7407,33 +6476,33 @@ } }, { - "name": "promptText", - "publicName": "promptText", + "name": "persona", + "publicName": "persona", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "ref", + "name": "persona_profile" } }, { - "name": "topicId", - "publicName": "topicId", + "name": "category", + "publicName": "category", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "ref", + "name": "category" } }, { - "name": "hasCurrent", - "publicName": "hasCurrent", + "name": "organization", + "publicName": "organization", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "boolean" + "kind": "ref", + "name": "organization" } } ], @@ -7441,71 +6510,108 @@ } }, { - "name": "ClusterExampleRun", - "source": "ClusterExampleRun", + "name": "organization_personas_with_category_response", + "source": "organization_personas_with_category_response", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "runId", - "publicName": "runId", + "name": "data", + "publicName": "data", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "array", + "items": { + "kind": "ref", + "name": "organization_personas_with_category" + } } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "pagination", + "source": "pagination", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "claim", - "publicName": "claim", - "required": true, + "name": "limit", + "publicName": "limit", + "required": false, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "integer", + "validation": {} } }, { - "name": "responseSnippet", - "publicName": "responseSnippet", - "required": true, + "name": "offset", + "publicName": "offset", + "required": false, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "integer", + "validation": {} } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "pagination_info", + "source": "pagination_info", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "modelId", - "publicName": "modelId", + "name": "total_rows", + "publicName": "total_rows", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "integer" } }, { - "name": "regionId", - "publicName": "regionId", + "name": "limit", + "publicName": "limit", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "integer" } }, { - "name": "createdAt", - "publicName": "createdAt", + "name": "next_cursor", + "publicName": "next_cursor", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] } } ], @@ -7513,75 +6619,89 @@ } }, { - "name": "ClusterExampleRunsQuery", - "source": "ClusterExampleRunsQuery", + "name": "path_filter", + "source": "path_filter", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "category_id", - "publicName": "category_id", + "name": "field", + "publicName": "field", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" + "kind": "literal", + "value": "path" } }, { - "name": "cluster_id", - "publicName": "cluster_id", + "name": "operator", + "publicName": "operator", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "start_date", - "publicName": "start_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] } }, { - "name": "end_date", - "publicName": "end_date", + "name": "value", + "publicName": "value", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "limit", - "publicName": "limit", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer", - "validation": {} - } - }, - { - "name": "offset", - "publicName": "offset", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer", - "validation": {} + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + ], + "variantNames": [ + null, + null + ] } } ], @@ -7589,34 +6709,76 @@ } }, { - "name": "ClusterExampleRunsResponse", - "source": "ClusterExampleRunsResponse", + "name": "persona_id_filter", + "source": "persona_id_filter", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "data", - "publicName": "data", + "name": "field", + "publicName": "field", "required": true, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "ClusterExampleRun" - } + "kind": "literal", + "value": "persona_id" } }, { - "name": "totalCount", - "publicName": "totalCount", + "name": "operator", + "publicName": "operator", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "integer" + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + } + ], + "variantNames": [ + null, + null + ] } } ], @@ -7624,66 +6786,76 @@ } }, { - "name": "ClusterVerificationPair", - "source": "ClusterVerificationPair", + "name": "persona_profile", + "source": "persona_profile", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "pairId", - "publicName": "pairId", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "snippetIdx", - "publicName": "snippetIdx", + "name": "behavior", + "publicName": "behavior", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "integer" + "kind": "ref", + "name": "persona_profile_behavior" } }, { - "name": "kbPath", - "publicName": "kbPath", + "name": "employment", + "publicName": "employment", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "ref", + "name": "persona_profile_employment" } }, { - "name": "quote", - "publicName": "quote", + "name": "demographics", + "publicName": "demographics", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "ref", + "name": "persona_profile_demographics" } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "persona_profile_behavior", + "source": "persona_profile_behavior", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "reasoning", - "publicName": "reasoning", - "required": true, + "name": "painPoints", + "publicName": "painPoints", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] } }, { - "name": "sourceUpdatedAt", - "publicName": "sourceUpdatedAt", + "name": "motivations", + "publicName": "motivations", "required": false, "deprecated": false, "type": { @@ -7704,33 +6876,24 @@ } }, { - "name": "ClusterVerificationPairsQuery", - "source": "ClusterVerificationPairsQuery", + "name": "persona_profile_demographics", + "source": "persona_profile_demographics", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "category_id", - "publicName": "category_id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "cluster_id", - "publicName": "cluster_id", - "required": true, + "name": "ageRange", + "publicName": "ageRange", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } } } ], @@ -7738,115 +6901,63 @@ } }, { - "name": "ClusterVerificationPairsResponse", - "source": "ClusterVerificationPairsResponse", + "name": "persona_profile_employment", + "source": "persona_profile_employment", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "data", - "publicName": "data", - "required": true, + "name": "industry", + "publicName": "industry", + "required": false, "deprecated": false, "type": { "kind": "array", "items": { - "kind": "ref", - "name": "ClusterVerificationPair" + "kind": "primitive", + "type": "string" } } }, { - "name": "clusterReasoning", - "publicName": "clusterReasoning", + "name": "jobTitle", + "publicName": "jobTitle", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "ContentAnalysis", - "source": "ContentAnalysis", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "content", - "publicName": "content", - "required": true, - "deprecated": false, - "type": { - "kind": "ref", - "name": "DocumentContent" - } - }, - { - "name": "aeo_content_score", - "publicName": "aeo_content_score", - "required": true, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "AeoScore" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "analysis", - "publicName": "analysis", - "required": true, - "deprecated": false, - "type": { - "kind": "ref", - "name": "AnalysisSummary" + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } } }, { - "name": "recommendations", - "publicName": "recommendations", - "required": true, + "name": "companySize", + "publicName": "companySize", + "required": false, "deprecated": false, "type": { "kind": "array", "items": { - "kind": "ref", - "name": "Recommendation" + "kind": "primitive", + "type": "string" } } }, { - "name": "inputs", - "publicName": "inputs", - "required": true, + "name": "roleSeniority", + "publicName": "roleSeniority", + "required": false, "deprecated": false, "type": { - "kind": "ref", - "name": "AnalysisInputs" + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } } } ], @@ -7854,69 +6965,68 @@ } }, { - "name": "ContentFormat", - "source": "ContentFormat", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "markdown", - "html" - ], - "names": [ - "Markdown", - "Html" - ], - "deprecations": [ - false, - false - ] - } - }, - { - "name": "ContentOptimization", - "source": "ContentOptimization", + "name": "product_name_filter", + "source": "product_name_filter", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "id", - "publicName": "id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "title", - "publicName": "title", + "name": "field", + "publicName": "field", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "literal", + "value": "product_name" } }, { - "name": "created_at", - "publicName": "created_at", + "name": "operator", + "publicName": "operator", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] } }, { - "name": "extracted_input", - "publicName": "extracted_input", + "name": "value", + "publicName": "value", "required": true, "deprecated": false, "type": { @@ -7927,242 +7037,120 @@ "type": "string" }, { - "kind": "null" + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } } + ], + "variantNames": [ + null, + null ] } - }, - { - "name": "type", - "publicName": "type", - "required": true, - "deprecated": false, - "type": { - "kind": "ref", - "name": "ContentType" - } - }, - { - "name": "status", - "publicName": "status", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - } - ], - "additionalProperties": false - } - }, - { - "name": "ContentOptimizationAnalysisResponse", - "source": "ContentOptimizationAnalysisResponse", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "data", - "publicName": "data", - "required": true, - "deprecated": false, - "type": { - "kind": "ref", - "name": "ContentAnalysis" - } } ], "additionalProperties": false } }, { - "name": "ContentOptimizationResponse", - "source": "ContentOptimizationResponse", + "name": "prompt", + "source": "prompt", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "info", - "publicName": "info", + "name": "id", + "publicName": "id", "required": true, "deprecated": false, "type": { - "kind": "ref", - "name": "ContentOptimizationResponseInfo" + "kind": "primitive", + "type": "string" } }, { - "name": "data", - "publicName": "data", - "required": true, + "name": "analysis_types", + "publicName": "analysis_types", + "required": false, "deprecated": false, "type": { "kind": "array", "items": { - "kind": "ref", - "name": "ContentOptimization" + "kind": "enum", + "values": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ], + "names": [ + "Visibility", + "Sentiment", + "SentimentV2", + "Accuracy" + ], + "deprecations": [ + false, + false, + false, + false + ] } } - } - ], - "additionalProperties": false - } - }, - { - "name": "ContentOptimizationResponseInfo", - "source": "ContentOptimizationResponseInfo", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "total_rows", - "publicName": "total_rows", - "required": true, - "deprecated": false, + "name": "prompt_type", + "publicName": "prompt_type", + "required": false, + "deprecated": true, "type": { "kind": "primitive", - "type": "integer" + "type": "string" } }, { - "name": "query", - "publicName": "query", + "name": "prompt", + "publicName": "prompt", "required": true, "deprecated": false, "type": { - "kind": "ref", - "name": "OptimizationQuery" - } - } - ], - "additionalProperties": false - } - }, - { - "name": "ContentType", - "source": "ContentType", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "file", - "text", - "url" - ], - "names": [ - "File", - "Text", - "Url" - ], - "deprecations": [ - false, - false, - false - ] - } - }, - { - "name": "CreateAgentRequest", - "source": "CreateAgentRequest", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "organization_id", - "publicName": "organization_id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" + "kind": "primitive", + "type": "string" } }, { - "name": "name", - "publicName": "name", + "name": "language", + "publicName": "language", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "string", - "validation": { - "minLength": 1 - } - } - }, - { - "name": "description", - "publicName": "description", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] + "type": "string" } }, { - "name": "graph", - "publicName": "graph", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "object", - "properties": [], - "additionalProperties": { - "kind": "unknown" - } - }, - { - "kind": "null" - } - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "CreatePromptInput", - "source": "CreatePromptInput", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "prompt", - "publicName": "prompt", + "name": "status", + "publicName": "status", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string", - "validation": { - "minLength": 1 - } + "kind": "enum", + "values": [ + "active", + "disabled" + ], + "names": [ + "Active", + "Disabled" + ], + "deprecations": [ + false, + false + ] } }, { @@ -8172,17 +7160,7 @@ "deprecated": false, "type": { "kind": "ref", - "name": "IdOrName" - } - }, - { - "name": "language", - "publicName": "language", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" + "name": "named_resource" } }, { @@ -8194,7 +7172,7 @@ "kind": "array", "items": { "kind": "ref", - "name": "IdOrName" + "name": "named_resource" } } }, @@ -8207,10 +7185,7 @@ "kind": "array", "items": { "kind": "ref", - "name": "IdOrName" - }, - "validation": { - "minItems": 1 + "name": "named_resource" } } }, @@ -8223,10 +7198,7 @@ "kind": "array", "items": { "kind": "ref", - "name": "IdOrName" - }, - "validation": { - "minItems": 1 + "name": "named_resource" } } }, @@ -8239,117 +7211,30 @@ "kind": "array", "items": { "kind": "ref", - "name": "IdOrName" + "name": "named_resource" } } }, { - "name": "analysis_types", - "publicName": "analysis_types", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "visibility", - "sentiment", - "sentiment_v2", - "accuracy" - ], - "names": [ - "Visibility", - "Sentiment", - "SentimentV2", - "Accuracy" - ], - "deprecations": [ - false, - false, - false, - false - ] - } - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "prompt_type", - "publicName": "prompt_type", - "required": false, - "deprecated": true, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "asset", - "publicName": "asset", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "IdOrName" - }, - { - "kind": "null" - } - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "CreatePromptsBody", - "source": "CreatePromptsBody", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "prompts", - "publicName": "prompts", + "name": "created_at", + "publicName": "created_at", "required": true, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "CreatePromptInput" - } + "kind": "primitive", + "type": "string", + "format": "date-time" } }, { - "name": "dry_run", - "publicName": "dry_run", - "required": false, + "name": "updated_at", + "publicName": "updated_at", + "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "boolean" + "type": "string", + "format": "date-time" } } ], @@ -8357,64 +7242,89 @@ } }, { - "name": "CreatePromptsResponse", - "source": "CreatePromptsResponse", + "name": "prompt_filter", + "source": "prompt_filter", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "dry_run", - "publicName": "dry_run", + "name": "field", + "publicName": "field", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "boolean" + "kind": "literal", + "value": "prompt" } }, { - "name": "created", - "publicName": "created", - "required": false, + "name": "operator", + "publicName": "operator", + "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "integer" - } - }, - { - "name": "topics_created", - "publicName": "topics_created", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer" - } - }, - { - "name": "tags_created", - "publicName": "tags_created", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer" + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] } }, { - "name": "prompts", - "publicName": "prompts", - "required": false, + "name": "value", + "publicName": "value", + "required": true, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "PromptPreview" - } + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + ], + "variantNames": [ + null, + null + ] } } ], @@ -8422,39 +7332,75 @@ } }, { - "name": "CursorPagination", - "source": "CursorPagination", + "name": "prompt_id_filter", + "source": "prompt_id_filter", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "limit", - "publicName": "limit", - "required": false, + "name": "field", + "publicName": "field", + "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "integer", - "validation": {} + "kind": "literal", + "value": "prompt_id" } }, { - "name": "next_cursor", - "publicName": "next_cursor", - "required": false, + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn" + ], + "deprecations": [ + false, + false, + false, + false + ] + } + }, + { + "name": "value", + "publicName": "value", + "required": true, "deprecated": false, "type": { "kind": "union", "variants": [ { "kind": "primitive", - "type": "string" + "type": "string", + "format": "uuid" }, { - "kind": "null" + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } } + ], + "variantNames": [ + null, + null ] } } @@ -8463,13 +7409,24 @@ } }, { - "name": "DeleteDocumentRequest", - "source": "DeleteDocumentRequest", + "name": "prompt_input", + "source": "prompt_input", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ + { + "name": "id", + "publicName": "id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, { "name": "name", "publicName": "name", @@ -8477,10 +7434,7 @@ "deprecated": false, "type": { "kind": "primitive", - "type": "string", - "validation": { - "minLength": 1 - } + "type": "string" } } ], @@ -8488,93 +7442,67 @@ } }, { - "name": "DeleteFolderRequest", - "source": "DeleteFolderRequest", + "name": "prompt_order_by", + "source": "prompt_order_by", "publicAliases": [], "deprecated": false, "type": { - "kind": "object", - "properties": [ - { - "name": "path", - "publicName": "path", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "validation": { - "minLength": 1 - } - } - }, - { - "name": "recursive", - "publicName": "recursive", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - } + "kind": "enum", + "values": [ + "created_at", + "prompt" ], - "additionalProperties": false + "names": [ + "CreatedAt", + "Prompt" + ], + "deprecations": [ + false, + false + ] } }, { - "name": "DocumentContent", - "source": "DocumentContent", + "name": "prompt_preview", + "source": "prompt_preview", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "format", - "publicName": "format", + "name": "id", + "publicName": "id", "required": true, "deprecated": false, "type": { - "kind": "ref", - "name": "ContentFormat" + "kind": "primitive", + "type": "string" } }, { - "name": "value", - "publicName": "value", + "name": "prompt", + "publicName": "prompt", "required": true, "deprecated": false, "type": { "kind": "primitive", "type": "string" } - } - ], - "additionalProperties": false - } - }, - { - "name": "DocumentOperationResponse", - "source": "DocumentOperationResponse", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "message", - "publicName": "message", + "name": "topic", + "publicName": "topic", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "ref", + "name": "named_resource" } }, { - "name": "name", - "publicName": "name", + "name": "language", + "publicName": "language", "required": true, "deprecated": false, "type": { @@ -8583,85 +7511,103 @@ } }, { - "name": "path", - "publicName": "path", - "required": true, + "name": "tags", + "publicName": "tags", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "array", + "items": { + "kind": "ref", + "name": "named_resource" + } } }, { - "name": "folder", - "publicName": "folder", + "name": "regions", + "publicName": "regions", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] + "kind": "array", + "items": { + "kind": "ref", + "name": "named_resource" + } } - } - ], - "additionalProperties": false - } - }, - { - "name": "DomainWithOrganization", - "source": "DomainWithOrganization", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "created_at", - "publicName": "created_at", - "required": true, + "name": "platforms", + "publicName": "platforms", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" + "kind": "array", + "items": { + "kind": "ref", + "name": "named_resource" + } } }, { - "name": "id", - "publicName": "id", - "required": true, + "name": "personas", + "publicName": "personas", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" + "kind": "array", + "items": { + "kind": "ref", + "name": "named_resource" + } } }, { - "name": "name", - "publicName": "name", - "required": true, + "name": "analysis_types", + "publicName": "analysis_types", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ], + "names": [ + "Visibility", + "Sentiment", + "SentimentV2", + "Accuracy" + ], + "deprecations": [ + false, + false, + false, + false + ] + } } }, { - "name": "organization", - "publicName": "organization", - "required": true, + "name": "asset", + "publicName": "asset", + "required": false, "deprecated": false, "type": { - "kind": "ref", - "name": "Organization" + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "named_resource" + }, + { + "kind": "null" + } + ] } } ], @@ -8669,201 +7615,298 @@ } }, { - "name": "EnabledFieldsResponse", - "source": "EnabledFieldsResponse", + "name": "prompt_type", + "source": "prompt_type", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "visibility", + "sentiment" + ], + "names": [ + "Visibility", + "Sentiment" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "prompt_type_filter", + "source": "prompt_type_filter", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "run_id", - "publicName": "run_id", - "required": false, + "name": "field", + "publicName": "field", + "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "boolean" + "kind": "literal", + "value": "prompt_type" } }, { - "name": "created_at", - "publicName": "created_at", - "required": false, + "name": "operator", + "publicName": "operator", + "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "boolean" + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] } }, { - "name": "prompt", - "publicName": "prompt", - "required": false, + "name": "value", + "publicName": "value", + "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "boolean" + "kind": "union", + "variants": [ + { + "kind": "enum", + "values": [ + "visibility", + "sentiment" + ], + "names": [ + "Visibility", + "Sentiment" + ], + "deprecations": [ + false, + false + ] + }, + { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "visibility", + "sentiment" + ], + "names": [ + "Visibility", + "Sentiment" + ], + "deprecations": [ + false, + false + ] + } + } + ], + "variantNames": [ + null, + null + ] } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "prompt_update_preview", + "source": "prompt_update_preview", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "prompt_id", - "publicName": "prompt_id", - "required": false, + "name": "id", + "publicName": "id", + "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "boolean" + "type": "string" } }, { - "name": "mentions", - "publicName": "mentions", + "name": "prompt", + "publicName": "prompt", "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "boolean" + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "field_diff" + }, + { + "kind": "null" + } + ] } }, { - "name": "analysis_types", - "publicName": "analysis_types", + "name": "topic", + "publicName": "topic", "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "boolean" + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "field_diff" + }, + { + "kind": "null" + } + ] } }, { - "name": "prompt_type", - "publicName": "prompt_type", + "name": "language", + "publicName": "language", "required": false, - "deprecated": true, + "deprecated": false, "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "response", - "publicName": "response", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "citations", - "publicName": "citations", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "citation_details", - "publicName": "citation_details", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "web_search_results", - "publicName": "web_search_results", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "search_triggered", - "publicName": "search_triggered", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "themes", - "publicName": "themes", - "required": false, - "deprecated": true, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "sentiment_themes", - "publicName": "sentiment_themes", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "field_diff" + }, + { + "kind": "null" + } + ] } }, { - "name": "topic", - "publicName": "topic", + "name": "tags", + "publicName": "tags", "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "boolean" + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "named_resource_diff_list" + }, + { + "kind": "null" + } + ] } }, { - "name": "topic_id", - "publicName": "topic_id", + "name": "regions", + "publicName": "regions", "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "boolean" + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "named_resource_diff_list" + }, + { + "kind": "null" + } + ] } }, { - "name": "region", - "publicName": "region", + "name": "platforms", + "publicName": "platforms", "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "boolean" + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "named_resource_diff_list" + }, + { + "kind": "null" + } + ] } }, { - "name": "model", - "publicName": "model", + "name": "personas", + "publicName": "personas", "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "boolean" + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "named_resource_diff_list" + }, + { + "kind": "null" + } + ] } }, { - "name": "model_id", - "publicName": "model_id", + "name": "analysis_types", + "publicName": "analysis_types", "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "boolean" + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "field_diff" + }, + { + "kind": "null" + } + ] } }, { @@ -8872,48 +7915,16 @@ "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "asset_id", - "publicName": "asset_id", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "tags", - "publicName": "tags", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "search_queries", - "publicName": "search_queries", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "persona", - "publicName": "persona", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "field_diff" + }, + { + "kind": "null" + } + ] } } ], @@ -8921,41 +7932,37 @@ } }, { - "name": "EntityFilterClause", - "source": "EntityFilterClause", + "name": "query_fanouts_query", + "source": "query_fanouts_query", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "op", - "publicName": "op", - "required": true, + "name": "date_interval", + "publicName": "date_interval", + "required": false, "deprecated": false, "type": { "kind": "enum", "values": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" ], "names": [ - "Is", - "NotIs", - "In", - "NotIn", - "Contains", - "NotContains", - "Matches", - "ContainsCaseInsensitive", - "NotContainsCaseInsensitive" + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" ], "deprecations": [ false, @@ -8964,50 +7971,122 @@ false, false, false, - false, - false, false ] } }, { - "name": "value", - "publicName": "value", - "required": true, + "name": "dimensions", + "publicName": "dimensions", + "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - } + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "prompt", + "query", + "model", + "region", + "date" + ], + "names": [ + "Prompt", + "Query", + "Model", + "Region", + "Date" + ], + "deprecations": [ + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "fanouts_per_execution", + "total_fanouts", + "share", + "query_variations" + ], + "names": [ + "FanoutsPerExecution", + "TotalFanouts", + "Share", + "QueryVariations" + ], + "deprecations": [ + false, + false, + false, + false + ] + }, + "validation": { + "minItems": 1 + } + } + }, + { + "name": "order_by", + "publicName": "order_by", + "required": false, + "deprecated": false, + "extensions": { + "source": [ + "examples" ], - "variantNames": [ - null, - null - ] + "examples": { + "fanouts_per_execution": "desc" + } + }, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } } - } - ], - "additionalProperties": false - } - }, - { - "name": "FactCheckSetupStatusQuery", - "source": "FactCheckSetupStatusQuery", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "ref", + "name": "pagination" + } + }, { "name": "category_id", "publicName": "category_id", @@ -9018,60 +8097,151 @@ "type": "string", "format": "uuid" } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_date", + "publicName": "end_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "region_id_filter" + }, + { + "kind": "ref", + "name": "region_name_filter" + }, + { + "kind": "ref", + "name": "model_id_filter" + }, + { + "kind": "ref", + "name": "topic_id_filter" + }, + { + "kind": "ref", + "name": "tag_id_filter" + }, + { + "kind": "ref", + "name": "prompt_id_filter" + }, + { + "kind": "ref", + "name": "persona_id_filter" + }, + { + "kind": "ref", + "name": "analysis_type_filter" + }, + { + "kind": "ref", + "name": "prompt_type_filter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "analysis_type": "analysis_type_filter", + "model": "model_id_filter", + "model_id": "model_id_filter", + "persona_id": "persona_id_filter", + "prompt_id": "prompt_id_filter", + "prompt_type": "prompt_type_filter", + "region": "region_id_filter", + "region_id": "region_id_filter", + "region_name": "region_name_filter", + "tag": "tag_id_filter", + "tag_id": "tag_id_filter", + "topic": "topic_id_filter", + "topic_id": "topic_id_filter" + } + }, + "variantNames": [ + "RegionIdFilter", + "RegionNameFilter", + "ModelIdFilter", + "TopicIdFilter", + "TagIdFilter", + "PromptIdFilter", + "PersonaIdFilter", + "AnalysisTypeFilter", + "PromptTypeFilter" + ] + } + } } ], "additionalProperties": false } }, { - "name": "FactCheckSetupStatusResponse", - "source": "FactCheckSetupStatusResponse", + "name": "recommendation", + "source": "recommendation", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "activeAccuracyPromptCount", - "publicName": "activeAccuracyPromptCount", + "name": "title", + "publicName": "title", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "integer" + "type": "string" } }, { - "name": "hasVerificationData", - "publicName": "hasVerificationData", + "name": "status", + "publicName": "status", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "boolean" + "kind": "ref", + "name": "recommendation_status" } }, { - "name": "isSetupComplete", - "publicName": "isSetupComplete", + "name": "impact", + "publicName": "impact", "required": true, "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "setupCreatedAt", - "publicName": "setupCreatedAt", - "required": false, - "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "primitive", - "type": "string" + "kind": "ref", + "name": "recommendation_impact" }, { "kind": "null" @@ -9080,21 +8250,13 @@ } }, { - "name": "setupKnowledgeBaseId", - "publicName": "setupKnowledgeBaseId", - "required": false, + "name": "suggestion", + "publicName": "suggestion", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] + "kind": "ref", + "name": "recommendation_suggestion" } } ], @@ -9102,17 +8264,17 @@ } }, { - "name": "FieldDiff", - "source": "FieldDiff", + "name": "recommendation_impact", + "source": "recommendation_impact", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "old", - "publicName": "old", - "required": false, + "name": "section", + "publicName": "section", + "required": true, "deprecated": false, "type": { "kind": "primitive", @@ -9120,13 +8282,13 @@ } }, { - "name": "new", - "publicName": "new", - "required": false, + "name": "score", + "publicName": "score", + "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "number" } } ], @@ -9134,134 +8296,37 @@ } }, { - "name": "FilterNode", - "source": "FilterNode", + "name": "recommendation_status", + "source": "recommendation_status", "publicAliases": [], "deprecated": false, "type": { - "kind": "object", - "properties": [ - { - "name": "and", - "publicName": "and", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "ref", - "name": "FilterNode" - } - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "or", - "publicName": "or", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "ref", - "name": "FilterNode" - } - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "not", - "publicName": "not", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "FilterNode" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "field", - "publicName": "field", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "op", - "publicName": "op", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "value", - "publicName": "value", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - } + "kind": "enum", + "values": [ + "done", + "pending" ], - "additionalProperties": false + "names": [ + "Done", + "Pending" + ], + "deprecations": [ + false, + false + ] } }, { - "name": "FolderOperationResponse", - "source": "FolderOperationResponse", + "name": "recommendation_suggestion", + "source": "recommendation_suggestion", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "message", - "publicName": "message", + "name": "text", + "publicName": "text", "required": true, "deprecated": false, "type": { @@ -9270,8 +8335,8 @@ } }, { - "name": "path", - "publicName": "path", + "name": "rationale", + "publicName": "rationale", "required": true, "deprecated": false, "type": { @@ -9284,33 +8349,8 @@ } }, { - "name": "HttpValidationError", - "source": "HttpValidationError", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "detail", - "publicName": "detail", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "ValidationError" - } - } - } - ], - "additionalProperties": false - } - }, - { - "name": "HostnameFilter", - "source": "HostnameFilter", + "name": "referral_source_filter", + "source": "referral_source_filter", "publicAliases": [], "deprecated": false, "type": { @@ -9323,7 +8363,7 @@ "deprecated": false, "type": { "kind": "literal", - "value": "hostname" + "value": "referral_source" } }, { @@ -9399,46 +8439,122 @@ } }, { - "name": "IdOrName", - "source": "IdOrName", + "name": "referral_type_filter", + "source": "referral_type_filter", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "id", - "publicName": "id", - "required": false, + "name": "field", + "publicName": "field", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } + "kind": "literal", + "value": "referral_type" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false ] } }, { - "name": "name", - "publicName": "name", - "required": false, + "name": "value", + "publicName": "value", + "required": true, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "primitive", - "type": "string" + "kind": "enum", + "values": [ + "internal", + "referer", + "utm", + "none" + ], + "names": [ + "Internal", + "Referer", + "Utm", + "None" + ], + "deprecations": [ + false, + false, + false, + false + ] }, { - "kind": "null" + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "internal", + "referer", + "utm", + "none" + ], + "names": [ + "Internal", + "Referer", + "Utm", + "None" + ], + "deprecations": [ + false, + false, + false, + false + ] + } } + ], + "variantNames": [ + null, + null ] } } @@ -9447,114 +8563,149 @@ } }, { - "name": "InaccuracyDriverRow", - "source": "InaccuracyDriverRow", + "name": "referrals_query", + "source": "referrals_query", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "rowId", - "publicName": "rowId", - "required": true, + "name": "date_interval", + "publicName": "date_interval", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "clusterId", - "publicName": "clusterId", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "canonicalClaim", - "publicName": "canonicalClaim", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "snippet", - "publicName": "snippet", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false + ] } }, { - "name": "snippetClaimId", - "publicName": "snippetClaimId", - "required": true, + "name": "dimensions", + "publicName": "dimensions", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "date", + "host", + "path", + "referral_source" + ], + "names": [ + "Date", + "Host", + "Path", + "ReferralSource" + ], + "deprecations": [ + false, + false, + false, + false + ] + } } }, { - "name": "claimOccurrence", - "publicName": "claimOccurrence", + "name": "metrics", + "publicName": "metrics", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "number" + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "visits", + "last_visit" + ], + "names": [ + "Visits", + "LastVisit" + ], + "deprecations": [ + false, + false + ] + } } }, { - "name": "claimOccurrenceDelta", - "publicName": "claimOccurrenceDelta", + "name": "order_by", + "publicName": "order_by", "required": false, "deprecated": false, + "extensions": { + "source": [ + "examples" + ], + "examples": { + "date": "asc" + } + }, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "href", - "publicName": "href", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } } }, { - "name": "citationCategory", - "publicName": "citationCategory", - "required": true, + "name": "pagination", + "publicName": "pagination", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "ref", + "name": "pagination" } }, { - "name": "domainCategory", - "publicName": "domainCategory", + "name": "domain", + "publicName": "domain", "required": true, "deprecated": false, "type": { @@ -9562,28 +8713,6 @@ "type": "string" } }, - { - "name": "citationCount", - "publicName": "citationCount", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer" - } - } - ], - "additionalProperties": false - } - }, - { - "name": "InaccuracyDriversQuery", - "source": "InaccuracyDriversQuery", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ { "name": "start_date", "publicName": "start_date", @@ -9591,22 +8720,24 @@ "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "string", + "format": "date-time" } }, { "name": "end_date", "publicName": "end_date", - "required": true, + "required": false, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "string", + "format": "date-time" } }, { - "name": "comparison_start_date", - "publicName": "comparison_start_date", + "name": "organization_id", + "publicName": "organization_id", "required": false, "deprecated": false, "type": { @@ -9614,7 +8745,8 @@ "variants": [ { "kind": "primitive", - "type": "string" + "type": "string", + "format": "uuid" }, { "kind": "null" @@ -9623,231 +8755,249 @@ } }, { - "name": "comparison_end_date", - "publicName": "comparison_end_date", + "name": "metric_filters", + "publicName": "metric_filters", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "category_id", - "publicName": "category_id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" + "kind": "array", + "items": { + "kind": "ref", + "name": "numeric_metric_filter" + } } }, { - "name": "topic_ids", - "publicName": "topic_ids", + "name": "filters", + "publicName": "filters", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "path_filter" + }, + { + "kind": "ref", + "name": "referral_source_filter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "path": "path_filter", + "referral_source": "referral_source_filter" } }, - { - "kind": "null" - } - ] + "variantNames": [ + "PathFilter", + "ReferralSourceFilter" + ] + } } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "referrals_query_v2", + "source": "referrals_query_v2", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "exclude_topic_ids", - "publicName": "exclude_topic_ids", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "tag_ids", - "publicName": "tag_ids", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "tag_filter_type", - "publicName": "tag_filter_type", + "name": "date_interval", + "publicName": "date_interval", "required": false, "deprecated": false, "type": { "kind": "enum", "values": [ - "all", - "any" + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" ], "names": [ - "All", - "Any" + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" ], "deprecations": [ + false, + false, + false, + false, + false, false, false ] } }, { - "name": "include_no_tag", - "publicName": "include_no_tag", + "name": "dimensions", + "publicName": "dimensions", "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "boolean" + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "date", + "hour", + "host", + "path", + "referral_source", + "referral_type" + ], + "names": [ + "Date", + "Hour", + "Host", + "Path", + "ReferralSource", + "ReferralType" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false + ] + } } }, { - "name": "region_ids", - "publicName": "region_ids", - "required": false, + "name": "metrics", + "publicName": "metrics", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "kind": "null" - } - ] + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "visits", + "last_visit" + ], + "names": [ + "Visits", + "LastVisit" + ], + "deprecations": [ + false, + false + ] + } } }, { - "name": "platform_ids", - "publicName": "platform_ids", + "name": "order_by", + "publicName": "order_by", "required": false, "deprecated": false, + "extensions": { + "source": [ + "examples" + ], + "examples": { + "date": "asc" + } + }, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "kind": "null" - } - ] + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } } }, { - "name": "persona_ids", - "publicName": "persona_ids", + "name": "pagination", + "publicName": "pagination", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "kind": "null" - } - ] + "kind": "ref", + "name": "pagination" } }, { - "name": "include_no_persona", - "publicName": "include_no_persona", - "required": false, + "name": "domain", + "publicName": "domain", + "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "boolean" + "type": "string" } }, { - "name": "prompt_ids", - "publicName": "prompt_ids", + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_date", + "publicName": "end_date", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string", + "format": "date-time" } }, { - "name": "citation_categories", - "publicName": "citation_categories", + "name": "organization_id", + "publicName": "organization_id", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } + "kind": "primitive", + "type": "string", + "format": "uuid" }, { "kind": "null" @@ -9856,238 +9006,420 @@ } }, { - "name": "limit", - "publicName": "limit", + "name": "timezone", + "publicName": "timezone", "required": false, "deprecated": false, "type": { "kind": "primitive", - "type": "integer", - "validation": {} + "type": "string" } - } - ], - "additionalProperties": false - } - }, - { - "name": "InaccuracyDriversResponse", - "source": "InaccuracyDriversResponse", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "data", - "publicName": "data", - "required": true, + "name": "metric_filters", + "publicName": "metric_filters", + "required": false, "deprecated": false, "type": { "kind": "array", "items": { "kind": "ref", - "name": "InaccuracyDriverRow" + "name": "numeric_metric_filter" } } - } - ], - "additionalProperties": false - } - }, - { - "name": "InaccurateClusterRow", - "source": "InaccurateClusterRow", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "clusterId", - "publicName": "clusterId", - "required": true, + "name": "filters", + "publicName": "filters", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "canonicalClaim", - "publicName": "canonicalClaim", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "description", - "publicName": "description", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "kbPath", - "publicName": "kbPath", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "path_filter" + }, + { + "kind": "ref", + "name": "referral_source_filter" + }, + { + "kind": "ref", + "name": "referral_type_filter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "path": "path_filter", + "referral_source": "referral_source_filter", + "referral_type": "referral_type_filter" + } + }, + "variantNames": [ + "PathFilter", + "ReferralSourceFilter", + "ReferralTypeFilter" + ] + } } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "region_id_filter", + "source": "region_id_filter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "kbSnippet", - "publicName": "kbSnippet", + "name": "field", + "publicName": "field", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "union", + "variants": [ + { + "kind": "literal", + "value": "region_id" + }, + { + "kind": "literal", + "value": "region" + } + ], + "variantNames": [ + null, + null + ] } }, { - "name": "reasoning", - "publicName": "reasoning", + "name": "operator", + "publicName": "operator", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn" + ], + "deprecations": [ + false, + false, + false, + false + ] } }, { - "name": "claimCount", - "publicName": "claimCount", + "name": "value", + "publicName": "value", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "integer" + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "uuid" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + } + ], + "variantNames": [ + null, + null + ] } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "region_name_filter", + "source": "region_name_filter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "responseCount", - "publicName": "responseCount", + "name": "field", + "publicName": "field", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "integer" + "kind": "literal", + "value": "region_name" } }, { - "name": "totalResponseCount", - "publicName": "totalResponseCount", + "name": "operator", + "publicName": "operator", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "integer" + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] } }, { - "name": "responseShare", - "publicName": "responseShare", + "name": "value", + "publicName": "value", "required": true, "deprecated": false, - "type": { - "kind": "primitive", - "type": "number" - } - }, - { - "name": "responseShareDelta", - "publicName": "responseShareDelta", - "required": false, - "deprecated": false, "type": { "kind": "union", "variants": [ { "kind": "primitive", - "type": "number" + "type": "string" }, { - "kind": "null" + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } } + ], + "variantNames": [ + null, + null ] } - }, - { - "name": "citationHostnames", - "publicName": "citationHostnames", - "required": true, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - } } ], "additionalProperties": false } }, { - "name": "InaccurateClustersQuery", - "source": "InaccurateClustersQuery", + "name": "report_response", + "source": "report_response", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "start_date", - "publicName": "start_date", + "name": "info", + "publicName": "info", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "ref", + "name": "report_info" } }, { - "name": "end_date", - "publicName": "end_date", + "name": "data", + "publicName": "data", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "array", + "items": { + "kind": "ref", + "name": "report_result" + } } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "report_result", + "source": "report_result", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "comparison_start_date", - "publicName": "comparison_start_date", - "required": false, + "name": "metrics", + "publicName": "metrics", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "integer" + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "primitive", + "type": "string" + } + ], + "variantNames": [ + null, + null, + null + ] + } + } + }, + { + "name": "dimensions", + "publicName": "dimensions", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + ], + "variantNames": [ + null, + null + ] + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "root_domain_filter", + "source": "root_domain_filter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "root_domain" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false ] } }, { - "name": "comparison_end_date", - "publicName": "comparison_end_date", - "required": false, + "name": "value", + "publicName": "value", + "required": true, "deprecated": false, "type": { "kind": "union", @@ -10097,25 +9429,59 @@ "type": "string" }, { - "kind": "null" + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } } + ], + "variantNames": [ + null, + null ] } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "run_agent_request", + "source": "run_agent_request", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "category_id", - "publicName": "category_id", - "required": true, + "name": "inputs", + "publicName": "inputs", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" + "kind": "object", + "properties": [], + "additionalProperties": { + "kind": "unknown" + } } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "search_knowledge_base_filters", + "source": "search_knowledge_base_filters", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "topic_ids", - "publicName": "topic_ids", + "name": "tags", + "publicName": "tags", "required": false, "deprecated": false, "type": { @@ -10126,7 +9492,12 @@ "items": { "kind": "primitive", "type": "string", - "format": "uuid" + "validation": { + "minLength": 1 + } + }, + "validation": { + "minItems": 1 } }, { @@ -10136,18 +9507,8 @@ } }, { - "name": "exclude_topic_ids", - "publicName": "exclude_topic_ids", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "tag_ids", - "publicName": "tag_ids", + "name": "folders", + "publicName": "folders", "required": false, "deprecated": false, "type": { @@ -10158,7 +9519,13 @@ "items": { "kind": "primitive", "type": "string", - "format": "uuid" + "validation": { + "minLength": 1 + } + }, + "validation": { + "minItems": 1, + "maxItems": 1 } }, { @@ -10166,31 +9533,46 @@ } ] } + } + ], + "additionalProperties": false + } + }, + { + "name": "search_knowledge_base_request", + "source": "search_knowledge_base_request", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "query", + "publicName": "query", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "validation": { + "minLength": 1 + } + } }, { - "name": "tag_filter_type", - "publicName": "tag_filter_type", - "required": false, + "name": "top_k", + "publicName": "top_k", + "required": true, "deprecated": false, "type": { - "kind": "enum", - "values": [ - "all", - "any" - ], - "names": [ - "All", - "Any" - ], - "deprecations": [ - false, - false - ] + "kind": "primitive", + "type": "integer", + "validation": {} } }, { - "name": "include_no_tag", - "publicName": "include_no_tag", + "name": "return_full_page", + "publicName": "return_full_page", "required": false, "deprecated": false, "type": { @@ -10199,172 +9581,110 @@ } }, { - "name": "region_ids", - "publicName": "region_ids", + "name": "filters", + "publicName": "filters", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } + "kind": "ref", + "name": "search_knowledge_base_filters" }, { "kind": "null" } ] } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "search_query_filter", + "source": "search_query_filter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "platform_ids", - "publicName": "platform_ids", - "required": false, + "name": "field", + "publicName": "field", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "kind": "null" - } - ] + "kind": "literal", + "value": "search_query" } }, { - "name": "persona_ids", - "publicName": "persona_ids", - "required": false, + "name": "operator", + "publicName": "operator", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "kind": "null" - } + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false ] } }, { - "name": "include_no_persona", - "publicName": "include_no_persona", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "prompt_ids", - "publicName": "prompt_ids", - "required": false, + "name": "value", + "publicName": "value", + "required": true, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } + "kind": "primitive", + "type": "string" }, - { - "kind": "null" - } - ] - } - }, - { - "name": "citation_categories", - "publicName": "citation_categories", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ { "kind": "array", "items": { "kind": "primitive", "type": "string" } - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "theme_id", - "publicName": "theme_id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "limit", - "publicName": "limit", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer", - "validation": {} - } - }, - { - "name": "offset", - "publicName": "offset", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer", - "validation": {} - } - }, - { - "name": "search_query", - "publicName": "search_query", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" } + ], + "variantNames": [ + null, + null ] } } @@ -10373,178 +9693,377 @@ } }, { - "name": "InaccurateClustersResponse", - "source": "InaccurateClustersResponse", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "data", - "publicName": "data", - "required": true, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "InaccurateClusterRow" - } - } - }, - { - "name": "totalCount", - "publicName": "totalCount", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer" - } - } - ], - "additionalProperties": false - } - }, - { - "name": "InaccurateThemeRow", - "source": "InaccurateThemeRow", + "name": "sentiment_query", + "source": "sentiment_query", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "themeId", - "publicName": "themeId", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "neutralTheme", - "publicName": "neutralTheme", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "description", - "publicName": "description", + "name": "date_interval", + "publicName": "date_interval", "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] } }, { - "name": "inaccurateClaimCount", - "publicName": "inaccurateClaimCount", - "required": true, + "name": "dimensions", + "publicName": "dimensions", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "integer" - } + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "theme", + "date", + "region", + "topic", + "topic_id", + "model", + "asset_id", + "asset_name", + "tag", + "prompt", + "prompt_id", + "sentiment_type", + "persona" + ], + "names": [ + "Theme", + "Date", + "Region", + "Topic", + "TopicId", + "Model", + "AssetId", + "AssetName", + "Tag", + "Prompt", + "PromptId", + "SentimentType", + "Persona" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + } }, { - "name": "inaccurateClusterCount", - "publicName": "inaccurateClusterCount", + "name": "metrics", + "publicName": "metrics", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "integer" + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "positive", + "negative", + "occurrences" + ], + "names": [ + "Positive", + "Negative", + "Occurrences" + ], + "deprecations": [ + false, + false, + false + ] + } } }, { - "name": "totalClaimCount", - "publicName": "totalClaimCount", - "required": true, + "name": "order_by", + "publicName": "order_by", + "required": false, "deprecated": false, + "extensions": { + "source": [ + "examples" + ], + "examples": { + "date": "asc" + } + }, "type": { - "kind": "primitive", - "type": "integer" + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } } }, { - "name": "totalClusterCount", - "publicName": "totalClusterCount", - "required": true, + "name": "pagination", + "publicName": "pagination", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "integer" + "kind": "ref", + "name": "pagination" } }, { - "name": "responseCount", - "publicName": "responseCount", + "name": "category_id", + "publicName": "category_id", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "integer" + "type": "string", + "format": "uuid" } }, { - "name": "totalResponseCount", - "publicName": "totalResponseCount", + "name": "start_date", + "publicName": "start_date", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "integer" + "type": "string", + "format": "date-time" } }, { - "name": "responseShare", - "publicName": "responseShare", + "name": "end_date", + "publicName": "end_date", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "number" + "type": "string", + "format": "date-time" } }, { - "name": "responseShareDelta", - "publicName": "responseShareDelta", + "name": "filters", + "publicName": "filters", "required": false, "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "asset_id_filter" + }, + { + "kind": "ref", + "name": "profound_answer_engine_insights_filters_asset_name_filter" + }, + { + "kind": "ref", + "name": "theme_filter" + }, + { + "kind": "ref", + "name": "region_id_filter" + }, + { + "kind": "ref", + "name": "region_name_filter" + }, + { + "kind": "ref", + "name": "topic_id_filter" + }, + { + "kind": "ref", + "name": "topic_name_filter" + }, + { + "kind": "ref", + "name": "model_id_filter" + }, + { + "kind": "ref", + "name": "tag_id_filter" + }, + { + "kind": "ref", + "name": "tag_name_filter" + }, + { + "kind": "ref", + "name": "prompt_filter" + }, + { + "kind": "ref", + "name": "persona_id_filter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_id": "asset_id_filter", + "asset_name": "profound_answer_engine_insights_filters_asset_name_filter", + "model": "model_id_filter", + "model_id": "model_id_filter", + "persona_id": "persona_id_filter", + "prompt": "prompt_filter", + "region": "region_id_filter", + "region_id": "region_id_filter", + "region_name": "region_name_filter", + "tag": "tag_id_filter", + "tag_id": "tag_id_filter", + "tag_name": "tag_name_filter", + "theme": "theme_filter", + "topic": "topic_id_filter", + "topic_id": "topic_id_filter", + "topic_name": "topic_name_filter" + } + }, + "variantNames": [ + "AssetIdFilter", + "AssetNameFilter", + "ThemeFilter", + "RegionIdFilter", + "RegionNameFilter", + "TopicIdFilter", + "TopicNameFilter", + "ModelIdFilter", + "TagIdFilter", + "TagNameFilter", + "PromptFilter", + "PersonaIdFilter" + ] + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "sentiment_theme", + "source": "sentiment_theme", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "type", + "publicName": "type", + "required": true, + "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "primitive", - "type": "number" + "kind": "literal", + "value": "positive" }, { - "kind": "null" + "kind": "literal", + "value": "negative" } + ], + "variantNames": [ + null, + null ] } + }, + { + "name": "name", + "publicName": "name", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } } ], "additionalProperties": false } }, { - "name": "InaccurateThemesQuery", - "source": "InaccurateThemesQuery", + "name": "shopping_all_items_with_merchants_query", + "source": "shopping_all_items_with_merchants_query", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, { "name": "start_date", "publicName": "start_date", @@ -10552,7 +10071,8 @@ "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "string", + "format": "date-time" } }, { @@ -10562,7 +10082,8 @@ "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "string", + "format": "date-time" } }, { @@ -10575,7 +10096,8 @@ "variants": [ { "kind": "primitive", - "type": "string" + "type": "string", + "format": "date-time" }, { "kind": "null" @@ -10593,7 +10115,8 @@ "variants": [ { "kind": "primitive", - "type": "string" + "type": "string", + "format": "date-time" }, { "kind": "null" @@ -10602,63 +10125,165 @@ } }, { - "name": "category_id", - "publicName": "category_id", - "required": true, + "name": "date_interval", + "publicName": "date_interval", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] } }, { - "name": "topic_ids", - "publicName": "topic_ids", + "name": "filters", + "publicName": "filters", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "region_id_filter" + }, + { + "kind": "ref", + "name": "model_id_filter" + }, + { + "kind": "ref", + "name": "topic_id_filter" + }, + { + "kind": "ref", + "name": "tag_id_filter" + }, + { + "kind": "ref", + "name": "prompt_id_filter" + }, + { + "kind": "ref", + "name": "persona_id_filter" + }, + { + "kind": "ref", + "name": "brand_name_filter" + }, + { + "kind": "ref", + "name": "merchant_name_filter" + }, + { + "kind": "ref", + "name": "product_name_filter" + }, + { + "kind": "ref", + "name": "profound_shopping_api_asset_name_filter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "profound_shopping_api_asset_name_filter", + "brand_name": "brand_name_filter", + "merchant_name": "merchant_name_filter", + "model": "model_id_filter", + "model_id": "model_id_filter", + "persona_id": "persona_id_filter", + "product_name": "product_name_filter", + "prompt_id": "prompt_id_filter", + "region": "region_id_filter", + "region_id": "region_id_filter", + "tag": "tag_id_filter", + "tag_id": "tag_id_filter", + "topic": "topic_id_filter", + "topic_id": "topic_id_filter" } }, - { - "kind": "null" - } - ] + "variantNames": [ + "RegionIdFilter", + "ModelIdFilter", + "TopicIdFilter", + "TagIdFilter", + "PromptIdFilter", + "PersonaIdFilter", + "BrandNameFilter", + "MerchantNameFilter", + "ProductNameFilter", + "AssetNameFilter" + ] + } } }, { - "name": "exclude_topic_ids", - "publicName": "exclude_topic_ids", + "name": "order_by", + "publicName": "order_by", "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "boolean" + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } } }, { - "name": "tag_ids", - "publicName": "tag_ids", + "name": "pagination", + "publicName": "pagination", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } + "kind": "ref", + "name": "pagination" }, { "kind": "null" @@ -10666,6 +10291,16 @@ ] } }, + { + "name": "include_count", + "publicName": "include_count", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, { "name": "tag_filter_type", "publicName": "tag_filter_type", @@ -10674,12 +10309,12 @@ "type": { "kind": "enum", "values": [ - "all", - "any" + "any", + "all" ], "names": [ - "All", - "Any" + "Any", + "All" ], "deprecations": [ false, @@ -10698,117 +10333,133 @@ } }, { - "name": "region_ids", - "publicName": "region_ids", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "platform_ids", - "publicName": "platform_ids", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "persona_ids", - "publicName": "persona_ids", + "name": "exclude_topic_ids", + "publicName": "exclude_topic_ids", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "boolean" } }, { - "name": "include_no_persona", - "publicName": "include_no_persona", + "name": "dimensions", + "publicName": "dimensions", "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "boolean" + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "period", + "product_name", + "brand_name", + "product_url", + "product_image_urls", + "product_price", + "merchant_names", + "merchant_prices" + ], + "names": [ + "Period", + "ProductName", + "BrandName", + "ProductUrl", + "ProductImageUrls", + "ProductPrice", + "MerchantNames", + "MerchantPrices" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false + ] + } } }, { - "name": "prompt_ids", - "publicName": "prompt_ids", + "name": "metrics", + "publicName": "metrics", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "kind": "null" - } - ] + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "visibility_score", + "share_of_voice", + "average_position", + "visibility_rank", + "product_rating", + "product_num_reviews", + "total_count" + ], + "names": [ + "VisibilityScore", + "ShareOfVoice", + "AveragePosition", + "VisibilityRank", + "ProductRating", + "ProductNumReviews", + "TotalCount" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } } }, { - "name": "citation_categories", - "publicName": "citation_categories", + "name": "owned_asset_names", + "publicName": "owned_asset_names", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "include_items", + "publicName": "include_items", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "search_item", + "publicName": "search_item", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } + "kind": "primitive", + "type": "string" }, { "kind": "null" @@ -10817,35 +10468,48 @@ } }, { - "name": "limit", - "publicName": "limit", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer", - "validation": {} - } - }, - { - "name": "offset", - "publicName": "offset", + "name": "merchant_filter_type", + "publicName": "merchant_filter_type", "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "integer", - "validation": {} + "kind": "enum", + "values": [ + "any", + "all" + ], + "names": [ + "Any", + "All" + ], + "deprecations": [ + false, + false + ] } }, { - "name": "sort_by", - "publicName": "sort_by", + "name": "rank_by", + "publicName": "rank_by", "required": false, "deprecated": false, "type": { - "kind": "literal", - "value": "response_share" + "kind": "enum", + "values": [ + "visibility", + "average_position", + "name" + ], + "names": [ + "Visibility", + "AveragePosition", + "Name" + ], + "deprecations": [ + false, + false, + false + ] } }, { @@ -10868,139 +10532,55 @@ false ] } - }, - { - "name": "search_query", - "publicName": "search_query", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "InaccurateThemesResponse", - "source": "InaccurateThemesResponse", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "data", - "publicName": "data", - "required": true, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "InaccurateThemeRow" - } - } - }, - { - "name": "totalCount", - "publicName": "totalCount", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer" - } } ], "additionalProperties": false } }, { - "name": "ReportInfo", - "source": "ReportInfo", + "name": "shopping_executions_query", + "source": "shopping_executions_query", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "total_rows", - "publicName": "total_rows", + "name": "category_id", + "publicName": "category_id", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "integer" + "type": "string", + "format": "uuid" } }, { - "name": "query", - "publicName": "query", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "object", - "properties": [], - "additionalProperties": { - "kind": "unknown" - } - }, - { - "kind": "null" - } - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "KnowledgeBaseItem", - "source": "KnowledgeBaseItem", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "id", - "publicName": "id", + "name": "start_date", + "publicName": "start_date", "required": true, "deprecated": false, "type": { "kind": "primitive", "type": "string", - "format": "uuid" + "format": "date-time" } }, { - "name": "name", - "publicName": "name", + "name": "end_date", + "publicName": "end_date", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "string", + "format": "date-time" } }, { - "name": "slug", - "publicName": "slug", + "name": "comparison_start_date", + "publicName": "comparison_start_date", "required": false, "deprecated": false, "type": { @@ -11008,7 +10588,8 @@ "variants": [ { "kind": "primitive", - "type": "string" + "type": "string", + "format": "date-time" }, { "kind": "null" @@ -11017,8 +10598,8 @@ } }, { - "name": "description", - "publicName": "description", + "name": "comparison_end_date", + "publicName": "comparison_end_date", "required": false, "deprecated": false, "type": { @@ -11026,7 +10607,8 @@ "variants": [ { "kind": "primitive", - "type": "string" + "type": "string", + "format": "date-time" }, { "kind": "null" @@ -11035,38 +10617,151 @@ } }, { - "name": "created_at", - "publicName": "created_at", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - } - ], - "additionalProperties": false - } - }, - { - "name": "KnowledgeBaseSearchResponse", - "source": "KnowledgeBaseSearchResponse", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "data", - "publicName": "data", - "required": true, + "name": "date_interval", + "publicName": "date_interval", + "required": false, "deprecated": false, "type": { - "kind": "array", + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false + ] + } + }, + { + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", "items": { - "kind": "ref", - "name": "KnowledgeBaseSearchResult" + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "region_id_filter" + }, + { + "kind": "ref", + "name": "model_id_filter" + }, + { + "kind": "ref", + "name": "topic_id_filter" + }, + { + "kind": "ref", + "name": "tag_id_filter" + }, + { + "kind": "ref", + "name": "prompt_id_filter" + }, + { + "kind": "ref", + "name": "persona_id_filter" + }, + { + "kind": "ref", + "name": "brand_name_filter" + }, + { + "kind": "ref", + "name": "merchant_name_filter" + }, + { + "kind": "ref", + "name": "product_name_filter" + }, + { + "kind": "ref", + "name": "profound_shopping_api_asset_name_filter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "profound_shopping_api_asset_name_filter", + "brand_name": "brand_name_filter", + "merchant_name": "merchant_name_filter", + "model": "model_id_filter", + "model_id": "model_id_filter", + "persona_id": "persona_id_filter", + "product_name": "product_name_filter", + "prompt_id": "prompt_id_filter", + "region": "region_id_filter", + "region_id": "region_id_filter", + "tag": "tag_id_filter", + "tag_id": "tag_id_filter", + "topic": "topic_id_filter", + "topic_id": "topic_id_filter" + } + }, + "variantNames": [ + "RegionIdFilter", + "ModelIdFilter", + "TopicIdFilter", + "TagIdFilter", + "PromptIdFilter", + "PersonaIdFilter", + "BrandNameFilter", + "MerchantNameFilter", + "ProductNameFilter", + "AssetNameFilter" + ] + } + } + }, + { + "name": "order_by", + "publicName": "order_by", + "required": false, + "deprecated": false, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" } } }, @@ -11076,63 +10771,131 @@ "required": false, "deprecated": false, "type": { - "kind": "ref", - "name": "CursorPagination" + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "pagination" + }, + { + "kind": "null" + } + ] } - } - ], - "additionalProperties": false - } - }, - { - "name": "KnowledgeBaseSearchResult", - "source": "KnowledgeBaseSearchResult", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "id", - "publicName": "id", - "required": true, + "name": "include_count", + "publicName": "include_count", + "required": false, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "boolean" } }, { - "name": "score", - "publicName": "score", - "required": true, + "name": "tag_filter_type", + "publicName": "tag_filter_type", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "any", + "all" + ], + "names": [ + "Any", + "All" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "include_no_tag", + "publicName": "include_no_tag", + "required": false, "deprecated": false, "type": { "kind": "primitive", - "type": "number" + "type": "boolean" } }, { - "name": "metadata", - "publicName": "metadata", - "required": true, + "name": "exclude_topic_ids", + "publicName": "exclude_topic_ids", + "required": false, "deprecated": false, "type": { - "kind": "object", - "properties": [], - "additionalProperties": { - "kind": "unknown" + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "analysis_types", + "publicName": "analysis_types", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ], + "names": [ + "Visibility", + "Sentiment", + "SentimentV2", + "Accuracy" + ], + "deprecations": [ + false, + false, + false, + false + ] } } }, { - "name": "content", - "publicName": "content", - "required": true, + "name": "analysis_filter_type", + "publicName": "analysis_filter_type", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "enum", + "values": [ + "any", + "all" + ], + "names": [ + "Any", + "All" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "owned_asset_names", + "publicName": "owned_asset_names", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } } } ], @@ -11140,262 +10903,113 @@ } }, { - "name": "ListAgentsResponse", - "source": "ListAgentsResponse", + "name": "shopping_item_visibility_query", + "source": "shopping_item_visibility_query", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "data", - "publicName": "data", + "name": "category_id", + "publicName": "category_id", "required": true, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "Agent" - } - } - }, - { - "name": "pagination", - "publicName": "pagination", - "required": false, - "deprecated": false, - "type": { - "kind": "ref", - "name": "CursorPagination" - } - } - ], - "additionalProperties": false - } - }, - { - "name": "ListAgentsStatusFilter", - "source": "ListAgentsStatusFilter", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "published", - "draft" - ], - "names": [ - "Published", - "Draft" - ], - "deprecations": [ - false, - false - ] - } - }, - { - "name": "ListKnowledgeBasesResponse", - "source": "ListKnowledgeBasesResponse", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "data", - "publicName": "data", - "required": true, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "KnowledgeBaseItem" - } + "kind": "primitive", + "type": "string", + "format": "uuid" } }, { - "name": "pagination", - "publicName": "pagination", - "required": false, - "deprecated": false, - "type": { - "kind": "ref", - "name": "CursorPagination" - } - } - ], - "additionalProperties": false - } - }, - { - "name": "ListNodeTypesResponse", - "source": "ListNodeTypesResponse", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "data", - "publicName": "data", - "required": true, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "NodeTypeSummary" - } - } - } - ], - "additionalProperties": false - } - }, - { - "name": "MerchantNameFilter", - "source": "MerchantNameFilter", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "field", - "publicName": "field", + "name": "start_date", + "publicName": "start_date", "required": true, "deprecated": false, "type": { - "kind": "literal", - "value": "merchant_name" + "kind": "primitive", + "type": "string", + "format": "date-time" } }, { - "name": "operator", - "publicName": "operator", + "name": "end_date", + "publicName": "end_date", "required": true, "deprecated": false, "type": { - "kind": "enum", - "values": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" - ], - "names": [ - "Is", - "NotIs", - "In", - "NotIn", - "Contains", - "NotContains", - "Matches", - "ContainsCaseInsensitive", - "NotContainsCaseInsensitive" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false - ] + "kind": "primitive", + "type": "string", + "format": "date-time" } }, { - "name": "value", - "publicName": "value", - "required": true, + "name": "comparison_start_date", + "publicName": "comparison_start_date", + "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { "kind": "primitive", - "type": "string" + "type": "string", + "format": "date-time" }, { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } + "kind": "null" } - ], - "variantNames": [ - null, - null ] } - } - ], - "additionalProperties": false - } - }, - { - "name": "ModelIdFilter", - "source": "ModelIdFilter", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "field", - "publicName": "field", - "required": true, + "name": "comparison_end_date", + "publicName": "comparison_end_date", + "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "literal", - "value": "model_id" + "kind": "primitive", + "type": "string", + "format": "date-time" }, { - "kind": "literal", - "value": "model" + "kind": "null" } - ], - "variantNames": [ - null, - null ] } }, { - "name": "operator", - "publicName": "operator", - "required": true, + "name": "date_interval", + "publicName": "date_interval", + "required": false, "deprecated": false, "type": { "kind": "enum", "values": [ - "is", - "not_is", - "in", - "not_in" + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" ], "names": [ - "Is", - "NotIs", - "In", - "NotIn" + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" ], "deprecations": [ + false, + false, + false, false, false, false, @@ -11404,159 +11018,129 @@ } }, { - "name": "value", - "publicName": "value", - "required": true, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "uuid" - }, - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - } - ], - "variantNames": [ - null, - null - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "NamedResource", - "source": "NamedResource", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "id", - "publicName": "id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "name", - "publicName": "name", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - } - ], - "additionalProperties": false - } - }, - { - "name": "NamedResourceDiffList", - "source": "NamedResourceDiffList", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "added", - "publicName": "added", - "required": false, + "name": "filters", + "publicName": "filters", + "required": false, "deprecated": false, "type": { "kind": "array", "items": { - "kind": "ref", - "name": "NamedResource" + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "region_id_filter" + }, + { + "kind": "ref", + "name": "model_id_filter" + }, + { + "kind": "ref", + "name": "topic_id_filter" + }, + { + "kind": "ref", + "name": "tag_id_filter" + }, + { + "kind": "ref", + "name": "prompt_id_filter" + }, + { + "kind": "ref", + "name": "persona_id_filter" + }, + { + "kind": "ref", + "name": "brand_name_filter" + }, + { + "kind": "ref", + "name": "merchant_name_filter" + }, + { + "kind": "ref", + "name": "product_name_filter" + }, + { + "kind": "ref", + "name": "profound_shopping_api_asset_name_filter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "profound_shopping_api_asset_name_filter", + "brand_name": "brand_name_filter", + "merchant_name": "merchant_name_filter", + "model": "model_id_filter", + "model_id": "model_id_filter", + "persona_id": "persona_id_filter", + "product_name": "product_name_filter", + "prompt_id": "prompt_id_filter", + "region": "region_id_filter", + "region_id": "region_id_filter", + "tag": "tag_id_filter", + "tag_id": "tag_id_filter", + "topic": "topic_id_filter", + "topic_id": "topic_id_filter" + } + }, + "variantNames": [ + "RegionIdFilter", + "ModelIdFilter", + "TopicIdFilter", + "TagIdFilter", + "PromptIdFilter", + "PersonaIdFilter", + "BrandNameFilter", + "MerchantNameFilter", + "ProductNameFilter", + "AssetNameFilter" + ] } } }, { - "name": "removed", - "publicName": "removed", + "name": "order_by", + "publicName": "order_by", "required": false, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "NamedResource" - } - } - } - ], - "additionalProperties": false - } - }, - { - "name": "NodeSchemaResponse", - "source": "NodeSchemaResponse", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "node_type", - "publicName": "node_type", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "schema", - "publicName": "schema", - "required": true, - "deprecated": false, - "type": { - "kind": "object", - "properties": [], - "additionalProperties": { - "kind": "unknown" + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" } } }, { - "name": "schema_version", - "publicName": "schema_version", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "description", - "publicName": "description", + "name": "pagination", + "publicName": "pagination", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "primitive", - "type": "string" + "kind": "ref", + "name": "pagination" }, { "kind": "null" @@ -11565,109 +11149,193 @@ } }, { - "name": "examples", - "publicName": "examples", + "name": "include_count", + "publicName": "include_count", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "object", - "properties": [], - "additionalProperties": { - "kind": "unknown" - } - } - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "boolean" } }, { - "name": "documentation", - "publicName": "documentation", + "name": "tag_filter_type", + "publicName": "tag_filter_type", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "object", - "properties": [], - "additionalProperties": { - "kind": "unknown" - } - }, - { - "kind": "null" - } + "kind": "enum", + "values": [ + "any", + "all" + ], + "names": [ + "Any", + "All" + ], + "deprecations": [ + false, + false ] } }, { - "name": "docs_version", - "publicName": "docs_version", + "name": "include_no_tag", + "publicName": "include_no_tag", "required": false, "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "NodeTypeSummary", - "source": "NodeTypeSummary", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "node_type", - "publicName": "node_type", - "required": true, - "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "boolean" } }, { - "name": "display_name", - "publicName": "display_name", - "required": true, + "name": "exclude_topic_ids", + "publicName": "exclude_topic_ids", + "required": false, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "boolean" } }, { - "name": "description", - "publicName": "description", + "name": "dimensions", + "publicName": "dimensions", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "period", + "product_key", + "product_name", + "brand_name", + "date", + "topic_id", + "prompt_id", + "prompt", + "product_url", + "product_image_urls", + "product_price" + ], + "names": [ + "Period", + "ProductKey", + "ProductName", + "BrandName", + "Date", + "TopicId", + "PromptId", + "Prompt", + "ProductUrl", + "ProductImageUrls", + "ProductPrice" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "visibility_score", + "share_of_voice", + "average_position", + "visibility_rank", + "position1_percentage", + "position2_percentage", + "position3_percentage", + "position_above3_percentage", + "product_rating", + "product_num_reviews", + "total_count" + ], + "names": [ + "VisibilityScore", + "ShareOfVoice", + "AveragePosition", + "VisibilityRank", + "Position1Percentage", + "Position2Percentage", + "Position3Percentage", + "PositionAbove3Percentage", + "ProductRating", + "ProductNumReviews", + "TotalCount" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "owned_asset_names", + "publicName": "owned_asset_names", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "include_items", + "publicName": "include_items", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "search_item", + "publicName": "search_item", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { "kind": "primitive", "type": "string" }, @@ -11676,119 +11344,75 @@ } ] } - } - ], - "additionalProperties": false - } - }, - { - "name": "NumericMetricFilter", - "source": "NumericMetricFilter", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "field", - "publicName": "field", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } }, { - "name": "operator", - "publicName": "operator", - "required": true, + "name": "merchant_filter_type", + "publicName": "merchant_filter_type", + "required": false, "deprecated": false, "type": { "kind": "enum", "values": [ - ">", - ">=", - "<", - "<=", - "=", - "==", - "!=" + "any", + "all" ], "names": [ - "GreaterThan", - "GreaterThanEqual", - "LessThan", - "LessThanEqual", - "Equal", - "EqualEqual", - "NotEqual" + "Any", + "All" ], "deprecations": [ - false, - false, - false, - false, - false, false, false ] } }, { - "name": "value", - "publicName": "value", - "required": true, + "name": "include_competitors", + "publicName": "include_competitors", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + }, + { + "name": "target_product", + "publicName": "target_product", + "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { "kind": "primitive", - "type": "integer" + "type": "string" }, { - "kind": "primitive", - "type": "number" + "kind": "null" } - ], - "variantNames": [ - null, - null ] } - } - ], - "additionalProperties": false - } - }, - { - "name": "OptimizationQuery", - "source": "OptimizationQuery", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "asset_id", - "publicName": "asset_id", - "required": true, + "name": "competitor_limit", + "publicName": "competitor_limit", + "required": false, "deprecated": false, "type": { "kind": "primitive", - "type": "string", - "format": "uuid" + "type": "integer", + "validation": {} } }, { - "name": "pagination", - "publicName": "pagination", + "name": "include_position_frequency", + "publicName": "include_position_frequency", "required": false, "deprecated": false, "type": { - "kind": "ref", - "name": "Pagination" + "kind": "primitive", + "type": "boolean" } } ], @@ -11796,37 +11420,16 @@ } }, { - "name": "OrderByDirection", - "source": "OrderByDirection", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" - ], - "deprecations": [ - false, - false - ] - } - }, - { - "name": "Organization", - "source": "Organization", + "name": "shopping_merchant_by_items_query", + "source": "shopping_merchant_by_items_query", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "id", - "publicName": "id", + "name": "category_id", + "publicName": "category_id", "required": true, "deprecated": false, "type": { @@ -11836,269 +11439,89 @@ } }, { - "name": "name", - "publicName": "name", - "required": true, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "OrganizationAssetsResponse", - "source": "OrganizationAssetsResponse", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "data", - "publicName": "data", - "required": true, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "CategoryAssetWithCategory" - } - } - } - ], - "additionalProperties": false - } - }, - { - "name": "OrganizationPersonasWithCategory", - "source": "OrganizationPersonasWithCategory", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "id", - "publicName": "id", + "name": "start_date", + "publicName": "start_date", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "string", + "format": "date-time" } }, { - "name": "name", - "publicName": "name", + "name": "end_date", + "publicName": "end_date", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "string" - } - }, - { - "name": "persona", - "publicName": "persona", - "required": true, - "deprecated": false, - "type": { - "kind": "ref", - "name": "PersonaProfile" - } - }, - { - "name": "category", - "publicName": "category", - "required": true, - "deprecated": false, - "type": { - "kind": "ref", - "name": "Category" + "type": "string", + "format": "date-time" } }, { - "name": "organization", - "publicName": "organization", - "required": true, - "deprecated": false, - "type": { - "kind": "ref", - "name": "Organization" - } - } - ], - "additionalProperties": false - } - }, - { - "name": "OrganizationPersonasWithCategoryResponse", - "source": "OrganizationPersonasWithCategoryResponse", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "data", - "publicName": "data", - "required": true, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "OrganizationPersonasWithCategory" - } - } - } - ], - "additionalProperties": false - } - }, - { - "name": "Pagination", - "source": "Pagination", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "limit", - "publicName": "limit", + "name": "comparison_start_date", + "publicName": "comparison_start_date", "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "integer", - "validation": {} + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] } }, { - "name": "offset", - "publicName": "offset", + "name": "comparison_end_date", + "publicName": "comparison_end_date", "required": false, "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer", - "validation": {} - } - } - ], - "additionalProperties": false - } - }, - { - "name": "PaginationInfo", - "source": "PaginationInfo", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "total_rows", - "publicName": "total_rows", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer" - } - }, - { - "name": "limit", - "publicName": "limit", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer" - } - }, - { - "name": "next_cursor", - "publicName": "next_cursor", - "required": true, - "deprecated": false, "type": { "kind": "union", "variants": [ { "kind": "primitive", - "type": "string" + "type": "string", + "format": "date-time" }, { "kind": "null" } ] } - } - ], - "additionalProperties": false - } - }, - { - "name": "PathFilter", - "source": "PathFilter", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "field", - "publicName": "field", - "required": true, - "deprecated": false, - "type": { - "kind": "literal", - "value": "path" - } }, { - "name": "operator", - "publicName": "operator", - "required": true, + "name": "date_interval", + "publicName": "date_interval", + "required": false, "deprecated": false, "type": { "kind": "enum", "values": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" ], "names": [ - "Is", - "NotIs", - "In", - "NotIn", - "Contains", - "NotContains", - "Matches", - "ContainsCaseInsensitive", - "NotContainsCaseInsensitive" + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" ], "deprecations": [ false, @@ -12107,344 +11530,398 @@ false, false, false, - false, - false, false ] } }, { - "name": "value", - "publicName": "value", - "required": true, + "name": "filters", + "publicName": "filters", + "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "region_id_filter" + }, + { + "kind": "ref", + "name": "model_id_filter" + }, + { + "kind": "ref", + "name": "topic_id_filter" + }, + { + "kind": "ref", + "name": "tag_id_filter" + }, + { + "kind": "ref", + "name": "prompt_id_filter" + }, + { + "kind": "ref", + "name": "persona_id_filter" + }, + { + "kind": "ref", + "name": "brand_name_filter" + }, + { + "kind": "ref", + "name": "merchant_name_filter" + }, + { + "kind": "ref", + "name": "product_name_filter" + }, + { + "kind": "ref", + "name": "profound_shopping_api_asset_name_filter" } - } - ], - "variantNames": [ - null, - null - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "PersonaIdFilter", - "source": "PersonaIdFilter", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "field", - "publicName": "field", - "required": true, - "deprecated": false, - "type": { - "kind": "literal", - "value": "persona_id" + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "profound_shopping_api_asset_name_filter", + "brand_name": "brand_name_filter", + "merchant_name": "merchant_name_filter", + "model": "model_id_filter", + "model_id": "model_id_filter", + "persona_id": "persona_id_filter", + "product_name": "product_name_filter", + "prompt_id": "prompt_id_filter", + "region": "region_id_filter", + "region_id": "region_id_filter", + "tag": "tag_id_filter", + "tag_id": "tag_id_filter", + "topic": "topic_id_filter", + "topic_id": "topic_id_filter" + } + }, + "variantNames": [ + "RegionIdFilter", + "ModelIdFilter", + "TopicIdFilter", + "TagIdFilter", + "PromptIdFilter", + "PersonaIdFilter", + "BrandNameFilter", + "MerchantNameFilter", + "ProductNameFilter", + "AssetNameFilter" + ] + } } }, { - "name": "operator", - "publicName": "operator", - "required": true, + "name": "order_by", + "publicName": "order_by", + "required": false, "deprecated": false, "type": { - "kind": "enum", - "values": [ - "is", - "not_is", - "in", - "not_in" - ], - "names": [ - "Is", - "NotIs", - "In", - "NotIn" - ], - "deprecations": [ - false, - false, - false, - false - ] + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } } }, { - "name": "value", - "publicName": "value", - "required": true, + "name": "pagination", + "publicName": "pagination", + "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "primitive", - "type": "string", - "format": "uuid" + "kind": "ref", + "name": "pagination" }, { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } + "kind": "null" } - ], - "variantNames": [ - null, - null ] } - } - ], - "additionalProperties": false - } - }, - { - "name": "PersonaProfile", - "source": "PersonaProfile", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "behavior", - "publicName": "behavior", - "required": true, + "name": "include_count", + "publicName": "include_count", + "required": false, "deprecated": false, "type": { - "kind": "ref", - "name": "PersonaProfileBehavior" + "kind": "primitive", + "type": "boolean" } }, { - "name": "employment", - "publicName": "employment", - "required": true, + "name": "tag_filter_type", + "publicName": "tag_filter_type", + "required": false, "deprecated": false, "type": { - "kind": "ref", - "name": "PersonaProfileEmployment" + "kind": "enum", + "values": [ + "any", + "all" + ], + "names": [ + "Any", + "All" + ], + "deprecations": [ + false, + false + ] } }, { - "name": "demographics", - "publicName": "demographics", - "required": true, + "name": "include_no_tag", + "publicName": "include_no_tag", + "required": false, "deprecated": false, "type": { - "kind": "ref", - "name": "PersonaProfileDemographics" + "kind": "primitive", + "type": "boolean" } - } - ], - "additionalProperties": false - } - }, - { - "name": "PersonaProfileBehavior", - "source": "PersonaProfileBehavior", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "painPoints", - "publicName": "painPoints", + "name": "exclude_topic_ids", + "publicName": "exclude_topic_ids", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "boolean" } }, { - "name": "motivations", - "publicName": "motivations", + "name": "dimensions", + "publicName": "dimensions", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "PersonaProfileDemographics", - "source": "PersonaProfileDemographics", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "period", + "merchant_name", + "product_name", + "brand_name", + "product_image_urls", + "product_price", + "merchant_prices", + "has_instant_checkout", + "delivery_options", + "merchant_url" + ], + "names": [ + "Period", + "MerchantName", + "ProductName", + "BrandName", + "ProductImageUrls", + "ProductPrice", + "MerchantPrices", + "HasInstantCheckout", + "DeliveryOptions", + "MerchantUrl" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + } + }, { - "name": "ageRange", - "publicName": "ageRange", + "name": "metrics", + "publicName": "metrics", "required": false, "deprecated": false, "type": { "kind": "array", "items": { - "kind": "primitive", - "type": "string" + "kind": "enum", + "values": [ + "merchant_visibility", + "product_visibility", + "product_rank", + "avg_position", + "total_count" + ], + "names": [ + "MerchantVisibility", + "ProductVisibility", + "ProductRank", + "AvgPosition", + "TotalCount" + ], + "deprecations": [ + false, + false, + false, + false, + false + ] } } + }, + { + "name": "product_name", + "publicName": "product_name", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } } ], "additionalProperties": false } }, { - "name": "PersonaProfileEmployment", - "source": "PersonaProfileEmployment", + "name": "shopping_merchant_distribution_query", + "source": "shopping_merchant_distribution_query", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "industry", - "publicName": "industry", - "required": false, + "name": "category_id", + "publicName": "category_id", + "required": true, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } + "kind": "primitive", + "type": "string", + "format": "uuid" } }, { - "name": "jobTitle", - "publicName": "jobTitle", - "required": false, + "name": "start_date", + "publicName": "start_date", + "required": true, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } + "kind": "primitive", + "type": "string", + "format": "date-time" } }, { - "name": "companySize", - "publicName": "companySize", - "required": false, + "name": "end_date", + "publicName": "end_date", + "required": true, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } + "kind": "primitive", + "type": "string", + "format": "date-time" } }, { - "name": "roleSeniority", - "publicName": "roleSeniority", + "name": "comparison_start_date", + "publicName": "comparison_start_date", "required": false, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] } - } - ], - "additionalProperties": false - } - }, - { - "name": "ProductNameFilter", - "source": "ProductNameFilter", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "field", - "publicName": "field", - "required": true, + "name": "comparison_end_date", + "publicName": "comparison_end_date", + "required": false, "deprecated": false, "type": { - "kind": "literal", - "value": "product_name" + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] } }, { - "name": "operator", - "publicName": "operator", - "required": true, + "name": "date_interval", + "publicName": "date_interval", + "required": false, "deprecated": false, "type": { "kind": "enum", "values": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" ], "names": [ - "Is", - "NotIs", - "In", - "NotIn", - "Contains", - "NotContains", - "Matches", - "ContainsCaseInsensitive", - "NotContainsCaseInsensitive" + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" ], "deprecations": [ false, @@ -12453,134 +11930,165 @@ false, false, false, - false, - false, false ] } }, { - "name": "value", - "publicName": "value", - "required": true, + "name": "filters", + "publicName": "filters", + "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - } - ], - "variantNames": [ - null, - null - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "Prompt", - "source": "Prompt", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "id", - "publicName": "id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "region_id_filter" + }, + { + "kind": "ref", + "name": "model_id_filter" + }, + { + "kind": "ref", + "name": "topic_id_filter" + }, + { + "kind": "ref", + "name": "tag_id_filter" + }, + { + "kind": "ref", + "name": "prompt_id_filter" + }, + { + "kind": "ref", + "name": "persona_id_filter" + }, + { + "kind": "ref", + "name": "brand_name_filter" + }, + { + "kind": "ref", + "name": "merchant_name_filter" + }, + { + "kind": "ref", + "name": "product_name_filter" + }, + { + "kind": "ref", + "name": "profound_shopping_api_asset_name_filter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "profound_shopping_api_asset_name_filter", + "brand_name": "brand_name_filter", + "merchant_name": "merchant_name_filter", + "model": "model_id_filter", + "model_id": "model_id_filter", + "persona_id": "persona_id_filter", + "product_name": "product_name_filter", + "prompt_id": "prompt_id_filter", + "region": "region_id_filter", + "region_id": "region_id_filter", + "tag": "tag_id_filter", + "tag_id": "tag_id_filter", + "topic": "topic_id_filter", + "topic_id": "topic_id_filter" + } + }, + "variantNames": [ + "RegionIdFilter", + "ModelIdFilter", + "TopicIdFilter", + "TagIdFilter", + "PromptIdFilter", + "PersonaIdFilter", + "BrandNameFilter", + "MerchantNameFilter", + "ProductNameFilter", + "AssetNameFilter" + ] + } } }, { - "name": "analysis_types", - "publicName": "analysis_types", + "name": "order_by", + "publicName": "order_by", "required": false, "deprecated": false, "type": { - "kind": "array", - "items": { + "kind": "record", + "value": { "kind": "enum", "values": [ - "visibility", - "sentiment", - "sentiment_v2", - "accuracy" + "asc", + "desc" ], "names": [ - "Visibility", - "Sentiment", - "SentimentV2", - "Accuracy" + "Asc", + "Desc" ], "deprecations": [ - false, - false, false, false ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" } } }, { - "name": "prompt_type", - "publicName": "prompt_type", + "name": "pagination", + "publicName": "pagination", "required": false, - "deprecated": true, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "prompt", - "publicName": "prompt", - "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "pagination" + }, + { + "kind": "null" + } + ] } }, { - "name": "language", - "publicName": "language", - "required": true, + "name": "include_count", + "publicName": "include_count", + "required": false, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "boolean" } }, { - "name": "status", - "publicName": "status", - "required": true, + "name": "tag_filter_type", + "publicName": "tag_filter_type", + "required": false, "deprecated": false, "type": { "kind": "enum", "values": [ - "active", - "disabled" + "any", + "all" ], "names": [ - "Active", - "Disabled" + "Any", + "All" ], "deprecations": [ false, @@ -12589,87 +12097,120 @@ } }, { - "name": "topic", - "publicName": "topic", - "required": true, + "name": "include_no_tag", + "publicName": "include_no_tag", + "required": false, "deprecated": false, "type": { - "kind": "ref", - "name": "NamedResource" + "kind": "primitive", + "type": "boolean" } }, { - "name": "tags", - "publicName": "tags", + "name": "exclude_topic_ids", + "publicName": "exclude_topic_ids", "required": false, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "NamedResource" - } + "kind": "primitive", + "type": "boolean" } }, { - "name": "regions", - "publicName": "regions", - "required": true, + "name": "dimensions", + "publicName": "dimensions", + "required": false, "deprecated": false, "type": { "kind": "array", "items": { - "kind": "ref", - "name": "NamedResource" + "kind": "enum", + "values": [ + "period", + "merchant_name", + "date", + "owned_asset_name" + ], + "names": [ + "Period", + "MerchantName", + "Date", + "OwnedAssetName" + ], + "deprecations": [ + false, + false, + false, + false + ] } } }, { - "name": "platforms", - "publicName": "platforms", - "required": true, + "name": "metrics", + "publicName": "metrics", + "required": false, "deprecated": false, "type": { "kind": "array", "items": { - "kind": "ref", - "name": "NamedResource" + "kind": "enum", + "values": [ + "offer_count", + "product_count", + "average_rank", + "share_of_offers", + "visibility_rank", + "total_count" + ], + "names": [ + "OfferCount", + "ProductCount", + "AverageRank", + "ShareOfOffers", + "VisibilityRank", + "TotalCount" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false + ] } } }, { - "name": "personas", - "publicName": "personas", + "name": "owned_asset_names", + "publicName": "owned_asset_names", "required": false, "deprecated": false, "type": { "kind": "array", "items": { - "kind": "ref", - "name": "NamedResource" + "kind": "primitive", + "type": "string" } } }, { - "name": "created_at", - "publicName": "created_at", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "updated_at", - "publicName": "updated_at", - "required": true, + "name": "search_merchant", + "publicName": "search_merchant", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] } } ], @@ -12677,133 +12218,113 @@ } }, { - "name": "PromptFilter", - "source": "PromptFilter", + "name": "shopping_merchant_share_query", + "source": "shopping_merchant_share_query", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "field", - "publicName": "field", + "name": "category_id", + "publicName": "category_id", "required": true, "deprecated": false, "type": { - "kind": "literal", - "value": "prompt" + "kind": "primitive", + "type": "string", + "format": "uuid" } }, { - "name": "operator", - "publicName": "operator", + "name": "start_date", + "publicName": "start_date", "required": true, "deprecated": false, "type": { - "kind": "enum", - "values": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" - ], - "names": [ - "Is", - "NotIs", - "In", - "NotIn", - "Contains", - "NotContains", - "Matches", - "ContainsCaseInsensitive", - "NotContainsCaseInsensitive" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false - ] + "kind": "primitive", + "type": "string", + "format": "date-time" } }, { - "name": "value", - "publicName": "value", + "name": "end_date", + "publicName": "end_date", "required": true, "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "comparison_start_date", + "publicName": "comparison_start_date", + "required": false, + "deprecated": false, "type": { "kind": "union", "variants": [ { "kind": "primitive", - "type": "string" + "type": "string", + "format": "date-time" }, { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } + "kind": "null" } - ], - "variantNames": [ - null, - null ] } - } - ], - "additionalProperties": false - } - }, - { - "name": "PromptIdFilter", - "source": "PromptIdFilter", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "field", - "publicName": "field", - "required": true, + "name": "comparison_end_date", + "publicName": "comparison_end_date", + "required": false, "deprecated": false, "type": { - "kind": "literal", - "value": "prompt_id" + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] } }, { - "name": "operator", - "publicName": "operator", - "required": true, + "name": "date_interval", + "publicName": "date_interval", + "required": false, "deprecated": false, "type": { "kind": "enum", "values": [ - "is", - "not_is", - "in", - "not_in" + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" ], "names": [ - "Is", - "NotIs", - "In", - "NotIn" + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" ], "deprecations": [ + false, + false, + false, false, false, false, @@ -12812,384 +12333,329 @@ } }, { - "name": "value", - "publicName": "value", - "required": true, + "name": "filters", + "publicName": "filters", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "region_id_filter" + }, + { + "kind": "ref", + "name": "model_id_filter" + }, + { + "kind": "ref", + "name": "topic_id_filter" + }, + { + "kind": "ref", + "name": "tag_id_filter" + }, + { + "kind": "ref", + "name": "prompt_id_filter" + }, + { + "kind": "ref", + "name": "persona_id_filter" + }, + { + "kind": "ref", + "name": "brand_name_filter" + }, + { + "kind": "ref", + "name": "merchant_name_filter" + }, + { + "kind": "ref", + "name": "product_name_filter" + }, + { + "kind": "ref", + "name": "profound_shopping_api_asset_name_filter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "profound_shopping_api_asset_name_filter", + "brand_name": "brand_name_filter", + "merchant_name": "merchant_name_filter", + "model": "model_id_filter", + "model_id": "model_id_filter", + "persona_id": "persona_id_filter", + "product_name": "product_name_filter", + "prompt_id": "prompt_id_filter", + "region": "region_id_filter", + "region_id": "region_id_filter", + "tag": "tag_id_filter", + "tag_id": "tag_id_filter", + "topic": "topic_id_filter", + "topic_id": "topic_id_filter" + } + }, + "variantNames": [ + "RegionIdFilter", + "ModelIdFilter", + "TopicIdFilter", + "TagIdFilter", + "PromptIdFilter", + "PersonaIdFilter", + "BrandNameFilter", + "MerchantNameFilter", + "ProductNameFilter", + "AssetNameFilter" + ] + } + } + }, + { + "name": "order_by", + "publicName": "order_by", + "required": false, + "deprecated": false, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "primitive", - "type": "string", - "format": "uuid" + "kind": "ref", + "name": "pagination" }, { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } + "kind": "null" } - ], - "variantNames": [ - null, - null ] } - } - ], - "additionalProperties": false - } - }, - { - "name": "PromptInput", - "source": "PromptInput", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "id", - "publicName": "id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "name", - "publicName": "name", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - } - ], - "additionalProperties": false - } - }, - { - "name": "PromptPreview", - "source": "PromptPreview", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "id", - "publicName": "id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "prompt", - "publicName": "prompt", - "required": true, + "name": "include_count", + "publicName": "include_count", + "required": false, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "boolean" } }, { - "name": "topic", - "publicName": "topic", - "required": true, + "name": "tag_filter_type", + "publicName": "tag_filter_type", + "required": false, "deprecated": false, "type": { - "kind": "ref", - "name": "NamedResource" + "kind": "enum", + "values": [ + "any", + "all" + ], + "names": [ + "Any", + "All" + ], + "deprecations": [ + false, + false + ] } }, { - "name": "language", - "publicName": "language", - "required": true, + "name": "include_no_tag", + "publicName": "include_no_tag", + "required": false, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "boolean" } }, { - "name": "tags", - "publicName": "tags", + "name": "exclude_topic_ids", + "publicName": "exclude_topic_ids", "required": false, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "NamedResource" - } + "kind": "primitive", + "type": "boolean" } }, { - "name": "regions", - "publicName": "regions", + "name": "dimensions", + "publicName": "dimensions", "required": false, "deprecated": false, "type": { "kind": "array", "items": { - "kind": "ref", - "name": "NamedResource" + "kind": "enum", + "values": [ + "period", + "topic_id", + "prompt_id" + ], + "names": [ + "Period", + "TopicId", + "PromptId" + ], + "deprecations": [ + false, + false, + false + ] } } }, { - "name": "platforms", - "publicName": "platforms", + "name": "metrics", + "publicName": "metrics", "required": false, "deprecated": false, "type": { "kind": "array", "items": { - "kind": "ref", - "name": "NamedResource" + "kind": "literal", + "value": "merchant_share" } } }, { - "name": "personas", - "publicName": "personas", + "name": "target_asset_names", + "publicName": "target_asset_names", "required": false, "deprecated": false, "type": { "kind": "array", "items": { - "kind": "ref", - "name": "NamedResource" + "kind": "primitive", + "type": "string" } } }, { - "name": "analysis_types", - "publicName": "analysis_types", + "name": "owned_asset_names", + "publicName": "owned_asset_names", "required": false, "deprecated": false, "type": { "kind": "array", "items": { - "kind": "enum", - "values": [ - "visibility", - "sentiment", - "sentiment_v2", - "accuracy" - ], - "names": [ - "Visibility", - "Sentiment", - "SentimentV2", - "Accuracy" - ], - "deprecations": [ - false, - false, - false, - false - ] + "kind": "primitive", + "type": "string" } } - }, - { - "name": "asset", - "publicName": "asset", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "NamedResource" - }, - { - "kind": "null" - } - ] - } } ], "additionalProperties": false } }, { - "name": "PromptType", - "source": "PromptType", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "visibility", - "sentiment" - ], - "names": [ - "Visibility", - "Sentiment" - ], - "deprecations": [ - false, - false - ] - } - }, - { - "name": "PromptTypeFilter", - "source": "PromptTypeFilter", + "name": "shopping_merchant_visibility_by_brand_query", + "source": "shopping_merchant_visibility_by_brand_query", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "field", - "publicName": "field", + "name": "category_id", + "publicName": "category_id", "required": true, "deprecated": false, "type": { - "kind": "literal", - "value": "prompt_type" + "kind": "primitive", + "type": "string", + "format": "uuid" } }, { - "name": "operator", - "publicName": "operator", + "name": "start_date", + "publicName": "start_date", "required": true, "deprecated": false, "type": { - "kind": "enum", - "values": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" - ], - "names": [ - "Is", - "NotIs", - "In", - "NotIn", - "Contains", - "NotContains", - "Matches", - "ContainsCaseInsensitive", - "NotContainsCaseInsensitive" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false - ] + "kind": "primitive", + "type": "string", + "format": "date-time" } }, { - "name": "value", - "publicName": "value", + "name": "end_date", + "publicName": "end_date", "required": true, "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, + { + "name": "comparison_start_date", + "publicName": "comparison_start_date", + "required": false, + "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "enum", - "values": [ - "visibility", - "sentiment" - ], - "names": [ - "Visibility", - "Sentiment" - ], - "deprecations": [ - false, - false - ] + "kind": "primitive", + "type": "string", + "format": "date-time" }, { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "visibility", - "sentiment" - ], - "names": [ - "Visibility", - "Sentiment" - ], - "deprecations": [ - false, - false - ] - } + "kind": "null" } - ], - "variantNames": [ - null, - null ] } - } - ], - "additionalProperties": false - } - }, - { - "name": "PromptUpdatePreview", - "source": "PromptUpdatePreview", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "id", - "publicName": "id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } }, { - "name": "prompt", - "publicName": "prompt", + "name": "comparison_end_date", + "publicName": "comparison_end_date", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "ref", - "name": "FieldDiff" + "kind": "primitive", + "type": "string", + "format": "date-time" }, { "kind": "null" @@ -13198,62 +12664,157 @@ } }, { - "name": "topic", - "publicName": "topic", + "name": "date_interval", + "publicName": "date_interval", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "FieldDiff" - }, - { - "kind": "null" - } + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false ] } }, { - "name": "language", - "publicName": "language", + "name": "filters", + "publicName": "filters", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "FieldDiff" + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "region_id_filter" + }, + { + "kind": "ref", + "name": "model_id_filter" + }, + { + "kind": "ref", + "name": "topic_id_filter" + }, + { + "kind": "ref", + "name": "tag_id_filter" + }, + { + "kind": "ref", + "name": "prompt_id_filter" + }, + { + "kind": "ref", + "name": "persona_id_filter" + }, + { + "kind": "ref", + "name": "brand_name_filter" + }, + { + "kind": "ref", + "name": "merchant_name_filter" + }, + { + "kind": "ref", + "name": "product_name_filter" + }, + { + "kind": "ref", + "name": "profound_shopping_api_asset_name_filter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "profound_shopping_api_asset_name_filter", + "brand_name": "brand_name_filter", + "merchant_name": "merchant_name_filter", + "model": "model_id_filter", + "model_id": "model_id_filter", + "persona_id": "persona_id_filter", + "product_name": "product_name_filter", + "prompt_id": "prompt_id_filter", + "region": "region_id_filter", + "region_id": "region_id_filter", + "tag": "tag_id_filter", + "tag_id": "tag_id_filter", + "topic": "topic_id_filter", + "topic_id": "topic_id_filter" + } }, - { - "kind": "null" - } - ] + "variantNames": [ + "RegionIdFilter", + "ModelIdFilter", + "TopicIdFilter", + "TagIdFilter", + "PromptIdFilter", + "PersonaIdFilter", + "BrandNameFilter", + "MerchantNameFilter", + "ProductNameFilter", + "AssetNameFilter" + ] + } } }, { - "name": "tags", - "publicName": "tags", + "name": "order_by", + "publicName": "order_by", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "NamedResourceDiffList" - }, - { - "kind": "null" - } - ] + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } } }, { - "name": "regions", - "publicName": "regions", + "name": "pagination", + "publicName": "pagination", "required": false, "deprecated": false, "type": { @@ -13261,7 +12822,7 @@ "variants": [ { "kind": "ref", - "name": "NamedResourceDiffList" + "name": "pagination" }, { "kind": "null" @@ -13270,123 +12831,54 @@ } }, { - "name": "platforms", - "publicName": "platforms", + "name": "include_count", + "publicName": "include_count", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "NamedResourceDiffList" - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "boolean" } }, { - "name": "personas", - "publicName": "personas", + "name": "tag_filter_type", + "publicName": "tag_filter_type", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "NamedResourceDiffList" - }, - { - "kind": "null" - } + "kind": "enum", + "values": [ + "any", + "all" + ], + "names": [ + "Any", + "All" + ], + "deprecations": [ + false, + false ] } }, { - "name": "analysis_types", - "publicName": "analysis_types", + "name": "include_no_tag", + "publicName": "include_no_tag", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "FieldDiff" - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "boolean" } }, { - "name": "asset", - "publicName": "asset", + "name": "exclude_topic_ids", + "publicName": "exclude_topic_ids", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "FieldDiff" - }, - { - "kind": "null" - } - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "QueryFanoutsQuery", - "source": "QueryFanoutsQuery", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "date_interval", - "publicName": "date_interval", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" - ], - "names": [ - "Hour", - "Day", - "Week", - "Month", - "Quarter", - "Year", - "RelativeWeek" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false - ] + "kind": "primitive", + "type": "boolean" } }, { @@ -13399,22 +12891,16 @@ "items": { "kind": "enum", "values": [ - "prompt", - "query", - "model", - "region", - "date" + "period", + "merchant_name", + "brand_name" ], "names": [ - "Prompt", - "Query", - "Model", - "Region", - "Date" + "Period", + "MerchantName", + "BrandName" ], "deprecations": [ - false, - false, false, false, false @@ -13425,71 +12911,107 @@ { "name": "metrics", "publicName": "metrics", - "required": true, + "required": false, "deprecated": false, "type": { "kind": "array", "items": { "kind": "enum", "values": [ - "fanouts_per_execution", - "total_fanouts", - "share", - "query_variations" + "visibility_score", + "share_of_voice", + "average_position", + "visibility_rank", + "total_count" ], "names": [ - "FanoutsPerExecution", - "TotalFanouts", - "Share", - "QueryVariations" + "VisibilityScore", + "ShareOfVoice", + "AveragePosition", + "VisibilityRank", + "TotalCount" ], "deprecations": [ false, false, false, + false, false ] } } }, { - "name": "order_by", - "publicName": "order_by", + "name": "owned_asset_names", + "publicName": "owned_asset_names", "required": false, "deprecated": false, "type": { - "kind": "record", - "value": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" - ], - "deprecations": [ - false, - false - ] - }, - "propertyNames": { + "kind": "array", + "items": { "kind": "primitive", "type": "string" } } }, { - "name": "pagination", - "publicName": "pagination", + "name": "search_brand", + "publicName": "search_brand", "required": false, "deprecated": false, "type": { - "kind": "ref", - "name": "Pagination" + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] + } + }, + { + "name": "include_brand", + "publicName": "include_brand", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] } }, + { + "name": "include_brand_only", + "publicName": "include_brand_only", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "shopping_product_merchant_urls_query", + "source": "shopping_product_merchant_urls_query", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { "name": "category_id", "publicName": "category_id", @@ -13501,6 +13023,19 @@ "format": "uuid" } }, + { + "name": "product_names", + "publicName": "product_names", + "required": true, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + }, { "name": "start_date", "publicName": "start_date", @@ -13522,118 +13057,79 @@ "type": "string", "format": "date-time" } - }, - { - "name": "filters", - "publicName": "filters", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "RegionIdFilter" - }, - { - "kind": "ref", - "name": "RegionNameFilter" - }, - { - "kind": "ref", - "name": "ModelIdFilter" - }, - { - "kind": "ref", - "name": "TopicIdFilter" - }, - { - "kind": "ref", - "name": "TagIdFilter" - }, - { - "kind": "ref", - "name": "PromptIdFilter" - }, - { - "kind": "ref", - "name": "PersonaIdFilter" - }, - { - "kind": "ref", - "name": "AnalysisTypeFilter" - }, - { - "kind": "ref", - "name": "PromptTypeFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "analysis_type": "AnalysisTypeFilter", - "model": "ModelIdFilter", - "model_id": "ModelIdFilter", - "persona_id": "PersonaIdFilter", - "prompt_id": "PromptIdFilter", - "prompt_type": "PromptTypeFilter", - "region": "RegionIdFilter", - "region_id": "RegionIdFilter", - "region_name": "RegionNameFilter", - "tag": "TagIdFilter", - "tag_id": "TagIdFilter", - "topic": "TopicIdFilter", - "topic_id": "TopicIdFilter" - } - }, - "variantNames": [ - "RegionIdFilter", - "RegionNameFilter", - "ModelIdFilter", - "TopicIdFilter", - "TagIdFilter", - "PromptIdFilter", - "PersonaIdFilter", - "AnalysisTypeFilter", - "PromptTypeFilter" - ] - } - } } ], "additionalProperties": false } }, { - "name": "QueryFanoutsV2Query", - "source": "QueryFanoutsV2Query", + "name": "shopping_rows_response", + "source": "shopping_rows_response", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "category_id", - "publicName": "category_id", + "name": "info", + "publicName": "info", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "ref", + "name": "report_info" } }, { - "name": "start_date", - "publicName": "start_date", + "name": "data", + "publicName": "data", "required": true, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" - } - }, + "kind": "array", + "items": { + "kind": "object", + "properties": [], + "additionalProperties": { + "kind": "unknown" + } + } + } + } + ], + "additionalProperties": false + } + }, + { + "name": "shopping_trigger_rate_query", + "source": "shopping_trigger_rate_query", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "category_id", + "publicName": "category_id", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + }, + { + "name": "start_date", + "publicName": "start_date", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string", + "format": "date-time" + } + }, { "name": "end_date", "publicName": "end_date", @@ -13641,73 +13137,41 @@ "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "string", + "format": "date-time" } }, { - "name": "group_by", - "publicName": "group_by", + "name": "comparison_start_date", + "publicName": "comparison_start_date", "required": false, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "date", - "model", - "region", - "prompt", - "query" - ], - "names": [ - "Date", - "Model", - "Region", - "Prompt", - "Query" - ], - "deprecations": [ - false, - false, - false, - false, - false - ] - } + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] } }, { - "name": "metrics", - "publicName": "metrics", + "name": "comparison_end_date", + "publicName": "comparison_end_date", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "fanouts_per_execution", - "total_fanouts", - "share", - "query_variations" - ], - "names": [ - "FanoutsPerExecution", - "TotalFanouts", - "Share", - "QueryVariations" - ], - "deprecations": [ - false, - false, - false, - false - ] - } + "kind": "primitive", + "type": "string", + "format": "date-time" }, { "kind": "null" @@ -13716,23 +13180,35 @@ } }, { - "name": "interval", - "publicName": "interval", + "name": "date_interval", + "publicName": "date_interval", "required": false, "deprecated": false, "type": { "kind": "enum", "values": [ + "hour", "day", "week", - "month" + "month", + "quarter", + "year", + "relative_week" ], "names": [ + "Hour", "Day", "Week", - "Month" + "Month", + "Quarter", + "Year", + "RelativeWeek" ], "deprecations": [ + false, + false, + false, + false, false, false, false @@ -13740,53 +13216,129 @@ } }, { - "name": "filter", - "publicName": "filter", + "name": "filters", + "publicName": "filters", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "FilterNode" + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "region_id_filter" + }, + { + "kind": "ref", + "name": "model_id_filter" + }, + { + "kind": "ref", + "name": "topic_id_filter" + }, + { + "kind": "ref", + "name": "tag_id_filter" + }, + { + "kind": "ref", + "name": "prompt_id_filter" + }, + { + "kind": "ref", + "name": "persona_id_filter" + }, + { + "kind": "ref", + "name": "brand_name_filter" + }, + { + "kind": "ref", + "name": "merchant_name_filter" + }, + { + "kind": "ref", + "name": "product_name_filter" + }, + { + "kind": "ref", + "name": "profound_shopping_api_asset_name_filter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "profound_shopping_api_asset_name_filter", + "brand_name": "brand_name_filter", + "merchant_name": "merchant_name_filter", + "model": "model_id_filter", + "model_id": "model_id_filter", + "persona_id": "persona_id_filter", + "product_name": "product_name_filter", + "prompt_id": "prompt_id_filter", + "region": "region_id_filter", + "region_id": "region_id_filter", + "tag": "tag_id_filter", + "tag_id": "tag_id_filter", + "topic": "topic_id_filter", + "topic_id": "topic_id_filter" + } }, - { - "kind": "null" - } - ] + "variantNames": [ + "RegionIdFilter", + "ModelIdFilter", + "TopicIdFilter", + "TagIdFilter", + "PromptIdFilter", + "PersonaIdFilter", + "BrandNameFilter", + "MerchantNameFilter", + "ProductNameFilter", + "AssetNameFilter" + ] + } } }, { - "name": "sort", - "publicName": "sort", + "name": "order_by", + "publicName": "order_by", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "AppRoutesV2AnswerEngineInsightsReportsQueryFanoutsSortSpec" - }, - { - "kind": "null" - } - ] + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } } }, { - "name": "limit", - "publicName": "limit", + "name": "pagination", + "publicName": "pagination", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "primitive", - "type": "integer", - "validation": {} + "kind": "ref", + "name": "pagination" }, { "kind": "null" @@ -13795,99 +13347,123 @@ } }, { - "name": "max_results", - "publicName": "max_results", + "name": "include_count", + "publicName": "include_count", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "integer" - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "boolean" } }, { - "name": "cursor", - "publicName": "cursor", + "name": "tag_filter_type", + "publicName": "tag_filter_type", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } + "kind": "enum", + "values": [ + "any", + "all" + ], + "names": [ + "Any", + "All" + ], + "deprecations": [ + false, + false ] } - } - ], - "additionalProperties": false - } - }, - { - "name": "Recommendation", - "source": "Recommendation", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "title", - "publicName": "title", - "required": true, + "name": "include_no_tag", + "publicName": "include_no_tag", + "required": false, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "boolean" } }, { - "name": "status", - "publicName": "status", - "required": true, + "name": "exclude_topic_ids", + "publicName": "exclude_topic_ids", + "required": false, "deprecated": false, "type": { - "kind": "ref", - "name": "RecommendationStatus" + "kind": "primitive", + "type": "boolean" } }, { - "name": "impact", - "publicName": "impact", - "required": true, + "name": "dimensions", + "publicName": "dimensions", + "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "RecommendationImpact" - }, - { - "kind": "null" - } - ] + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "period", + "date", + "model_id", + "topic_id", + "region_id", + "persona_id", + "prompt_id", + "prompt" + ], + "names": [ + "Period", + "Date", + "ModelId", + "TopicId", + "RegionId", + "PersonaId", + "PromptId", + "Prompt" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false + ] + } } }, { - "name": "suggestion", - "publicName": "suggestion", - "required": true, + "name": "metrics", + "publicName": "metrics", + "required": false, "deprecated": false, "type": { - "kind": "ref", - "name": "RecommendationSuggestion" + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "total_runs", + "shopping_triggered_runs", + "trigger_rate_percentage" + ], + "names": [ + "TotalRuns", + "ShoppingTriggeredRuns", + "TriggerRatePercentage" + ], + "deprecations": [ + false, + false, + false + ] + } } } ], @@ -13895,136 +13471,108 @@ } }, { - "name": "RecommendationImpact", - "source": "RecommendationImpact", + "name": "shopping_visibility_query", + "source": "shopping_visibility_query", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "section", - "publicName": "section", + "name": "category_id", + "publicName": "category_id", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "string", + "format": "uuid" } }, { - "name": "score", - "publicName": "score", + "name": "start_date", + "publicName": "start_date", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "number" + "type": "string", + "format": "date-time" } - } - ], - "additionalProperties": false - } - }, - { - "name": "RecommendationStatus", - "source": "RecommendationStatus", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "done", - "pending" - ], - "names": [ - "Done", - "Pending" - ], - "deprecations": [ - false, - false - ] - } - }, - { - "name": "RecommendationSuggestion", - "source": "RecommendationSuggestion", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "text", - "publicName": "text", + "name": "end_date", + "publicName": "end_date", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "string", + "format": "date-time" } }, { - "name": "rationale", - "publicName": "rationale", - "required": true, + "name": "comparison_start_date", + "publicName": "comparison_start_date", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] } - } - ], - "additionalProperties": false - } - }, - { - "name": "ReferralSourceFilter", - "source": "ReferralSourceFilter", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "field", - "publicName": "field", - "required": true, + "name": "comparison_end_date", + "publicName": "comparison_end_date", + "required": false, "deprecated": false, "type": { - "kind": "literal", - "value": "referral_source" + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string", + "format": "date-time" + }, + { + "kind": "null" + } + ] } }, { - "name": "operator", - "publicName": "operator", - "required": true, + "name": "date_interval", + "publicName": "date_interval", + "required": false, "deprecated": false, "type": { "kind": "enum", "values": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" ], "names": [ - "Is", - "NotIs", - "In", - "NotIn", - "Contains", - "NotContains", - "Matches", - "ContainsCaseInsensitive", - "NotContainsCaseInsensitive" + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" ], "deprecations": [ false, @@ -14033,281 +13581,190 @@ false, false, false, - false, - false, false ] } }, { - "name": "value", - "publicName": "value", - "required": true, + "name": "filters", + "publicName": "filters", + "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "enum", - "values": [ - "openai", - "none", - "anthropic", - "deepseek", - "perplexity", - "you", - "grok", - "microsoft", - "gemini", - "internal", - "other" - ], - "names": [ - "Openai", - "None", - "Anthropic", - "Deepseek", - "Perplexity", - "You", - "Grok", - "Microsoft", - "Gemini", - "Internal", - "Other" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false - ] + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "region_id_filter" + }, + { + "kind": "ref", + "name": "model_id_filter" + }, + { + "kind": "ref", + "name": "topic_id_filter" + }, + { + "kind": "ref", + "name": "tag_id_filter" + }, + { + "kind": "ref", + "name": "prompt_id_filter" + }, + { + "kind": "ref", + "name": "persona_id_filter" + }, + { + "kind": "ref", + "name": "brand_name_filter" + }, + { + "kind": "ref", + "name": "merchant_name_filter" + }, + { + "kind": "ref", + "name": "product_name_filter" + }, + { + "kind": "ref", + "name": "profound_shopping_api_asset_name_filter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "profound_shopping_api_asset_name_filter", + "brand_name": "brand_name_filter", + "merchant_name": "merchant_name_filter", + "model": "model_id_filter", + "model_id": "model_id_filter", + "persona_id": "persona_id_filter", + "product_name": "product_name_filter", + "prompt_id": "prompt_id_filter", + "region": "region_id_filter", + "region_id": "region_id_filter", + "tag": "tag_id_filter", + "tag_id": "tag_id_filter", + "topic": "topic_id_filter", + "topic_id": "topic_id_filter" + } }, + "variantNames": [ + "RegionIdFilter", + "ModelIdFilter", + "TopicIdFilter", + "TagIdFilter", + "PromptIdFilter", + "PersonaIdFilter", + "BrandNameFilter", + "MerchantNameFilter", + "ProductNameFilter", + "AssetNameFilter" + ] + } + } + }, + { + "name": "order_by", + "publicName": "order_by", + "required": false, + "deprecated": false, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } + } + }, + { + "name": "pagination", + "publicName": "pagination", + "required": false, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "openai", - "none", - "anthropic", - "deepseek", - "perplexity", - "you", - "grok", - "microsoft", - "gemini", - "internal", - "other" - ], - "names": [ - "Openai", - "None", - "Anthropic", - "Deepseek", - "Perplexity", - "You", - "Grok", - "Microsoft", - "Gemini", - "Internal", - "Other" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false - ] - } + "kind": "ref", + "name": "pagination" + }, + { + "kind": "null" } - ], - "variantNames": [ - null, - null ] } - } - ], - "additionalProperties": false - } - }, - { - "name": "ReferralTypeFilter", - "source": "ReferralTypeFilter", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "field", - "publicName": "field", - "required": true, + "name": "include_count", + "publicName": "include_count", + "required": false, "deprecated": false, "type": { - "kind": "literal", - "value": "referral_type" + "kind": "primitive", + "type": "boolean" } }, { - "name": "operator", - "publicName": "operator", - "required": true, + "name": "tag_filter_type", + "publicName": "tag_filter_type", + "required": false, "deprecated": false, "type": { "kind": "enum", "values": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" + "any", + "all" ], "names": [ - "Is", - "NotIs", - "In", - "NotIn", - "Contains", - "NotContains", - "Matches", - "ContainsCaseInsensitive", - "NotContainsCaseInsensitive" + "Any", + "All" ], "deprecations": [ - false, - false, - false, - false, - false, - false, - false, false, false ] } }, { - "name": "value", - "publicName": "value", - "required": true, + "name": "include_no_tag", + "publicName": "include_no_tag", + "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "enum", - "values": [ - "internal", - "referer", - "utm", - "none" - ], - "names": [ - "Internal", - "Referer", - "Utm", - "None" - ], - "deprecations": [ - false, - false, - false, - false - ] - }, - { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "internal", - "referer", - "utm", - "none" - ], - "names": [ - "Internal", - "Referer", - "Utm", - "None" - ], - "deprecations": [ - false, - false, - false, - false - ] - } - } - ], - "variantNames": [ - null, - null - ] + "kind": "primitive", + "type": "boolean" } - } - ], - "additionalProperties": false - } - }, - { - "name": "ReferralsQuery", - "source": "ReferralsQuery", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "date_interval", - "publicName": "date_interval", + "name": "exclude_topic_ids", + "publicName": "exclude_topic_ids", "required": false, "deprecated": false, "type": { - "kind": "enum", - "values": [ - "hour", - "day", - "week", - "month", - "year", - "relative_week" - ], - "names": [ - "Hour", - "Day", - "Week", - "Month", - "Year", - "RelativeWeek" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false - ] + "kind": "primitive", + "type": "boolean" } }, { @@ -14320,16 +13777,31 @@ "items": { "kind": "enum", "values": [ + "period", + "asset_name", "date", - "path", - "referral_source" + "model_id", + "topic_id", + "region_id", + "prompt_id", + "prompt" ], "names": [ + "Period", + "AssetName", "Date", - "Path", - "ReferralSource" + "ModelId", + "TopicId", + "RegionId", + "PromptId", + "Prompt" ], "deprecations": [ + false, + false, + false, + false, + false, false, false, false @@ -14340,21 +13812,45 @@ { "name": "metrics", "publicName": "metrics", - "required": true, + "required": false, "deprecated": false, "type": { "kind": "array", "items": { "kind": "enum", "values": [ - "visits", - "last_visit" + "visibility_score", + "share_of_voice", + "average_position", + "visibility_rank", + "average_position_rank", + "position1_percentage", + "position2_percentage", + "position3_percentage", + "position_above3_percentage", + "total_count" ], "names": [ - "Visits", - "LastVisit" + "VisibilityScore", + "ShareOfVoice", + "AveragePosition", + "VisibilityRank", + "AveragePositionRank", + "Position1Percentage", + "Position2Percentage", + "Position3Percentage", + "PositionAbove3Percentage", + "TotalCount" ], "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, false, false ] @@ -14362,78 +13858,39 @@ } }, { - "name": "order_by", - "publicName": "order_by", + "name": "owned_asset_names", + "publicName": "owned_asset_names", "required": false, "deprecated": false, "type": { - "kind": "record", - "value": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" - ], - "deprecations": [ - false, - false - ] - }, - "propertyNames": { + "kind": "array", + "items": { "kind": "primitive", "type": "string" } } }, { - "name": "pagination", - "publicName": "pagination", - "required": false, - "deprecated": false, - "type": { - "kind": "ref", - "name": "Pagination" - } - }, - { - "name": "domain", - "publicName": "domain", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "start_date", - "publicName": "start_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "end_date", - "publicName": "end_date", + "name": "search_asset", + "publicName": "search_asset", "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] } }, { - "name": "organization_id", - "publicName": "organization_id", + "name": "include_asset", + "publicName": "include_asset", "required": false, "deprecated": false, "type": { @@ -14441,8 +13898,7 @@ "variants": [ { "kind": "primitive", - "type": "string", - "format": "uuid" + "type": "string" }, { "kind": "null" @@ -14451,66 +13907,74 @@ } }, { - "name": "metric_filters", - "publicName": "metric_filters", + "name": "include_asset_only", + "publicName": "include_asset_only", "required": false, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "NumericMetricFilter" - } + "kind": "primitive", + "type": "boolean" } }, { - "name": "filters", - "publicName": "filters", + "name": "include_assets_only", + "publicName": "include_assets_only", "required": false, "deprecated": false, "type": { "kind": "array", "items": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "PathFilter" - }, - { - "kind": "ref", - "name": "ReferralSourceFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "path": "PathFilter", - "referral_source": "ReferralSourceFilter" - } - }, - "variantNames": [ - "PathFilter", - "ReferralSourceFilter" - ] + "kind": "primitive", + "type": "string" } } - } - ], - "additionalProperties": false - } - }, - { - "name": "ReferralsQueryV2", - "source": "ReferralsQueryV2", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "date_interval", - "publicName": "date_interval", + "name": "rank_by", + "publicName": "rank_by", + "required": false, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "visibility_score", + "average_position" + ], + "names": [ + "VisibilityScore", + "AveragePosition" + ], + "deprecations": [ + false, + false + ] + } + }, + { + "name": "include_position_frequency", + "publicName": "include_position_frequency", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "boolean" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "stream_citations_query", + "source": "stream_citations_query", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "date_interval", + "publicName": "date_interval", "required": false, "deprecated": false, "type": { @@ -14554,20 +14018,47 @@ "items": { "kind": "enum", "values": [ - "date", - "hour", + "hostname", "path", - "referral_source", - "referral_type" + "date", + "region", + "topic", + "topic_id", + "model", + "tag", + "prompt", + "prompt_id", + "url", + "root_domain", + "persona", + "citation_category" ], "names": [ - "Date", - "Hour", + "Hostname", "Path", - "ReferralSource", - "ReferralType" + "Date", + "Region", + "Topic", + "TopicId", + "Model", + "Tag", + "Prompt", + "PromptId", + "Url", + "RootDomain", + "Persona", + "CitationCategory" ], "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, false, false, false, @@ -14587,14 +14078,20 @@ "items": { "kind": "enum", "values": [ - "visits", - "last_visit" + "count", + "citation_share", + "share_of_voice", + "first_cited_at" ], "names": [ - "Visits", - "LastVisit" + "Count", + "CitationShare", + "ShareOfVoice", + "FirstCitedAt" ], "deprecations": [ + false, + false, false, false ] @@ -14606,6 +14103,14 @@ "publicName": "order_by", "required": false, "deprecated": false, + "extensions": { + "source": [ + "examples" + ], + "examples": { + "date": "asc" + } + }, "type": { "kind": "record", "value": { @@ -14635,18 +14140,27 @@ "required": false, "deprecated": false, "type": { - "kind": "ref", - "name": "Pagination" + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "pagination" + }, + { + "kind": "null" + } + ] } }, { - "name": "domain", - "publicName": "domain", + "name": "category_id", + "publicName": "category_id", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "string", + "format": "uuid" } }, { @@ -14663,7 +14177,7 @@ { "name": "end_date", "publicName": "end_date", - "required": false, + "required": true, "deprecated": false, "type": { "kind": "primitive", @@ -14671,38 +14185,6 @@ "format": "date-time" } }, - { - "name": "organization_id", - "publicName": "organization_id", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "uuid" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "metric_filters", - "publicName": "metric_filters", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "NumericMetricFilter" - } - } - }, { "name": "filters", "publicName": "filters", @@ -14715,29 +14197,123 @@ "variants": [ { "kind": "ref", - "name": "PathFilter" + "name": "hostname_filter" + }, + { + "kind": "ref", + "name": "path_filter" + }, + { + "kind": "ref", + "name": "region_id_filter" + }, + { + "kind": "ref", + "name": "region_name_filter" + }, + { + "kind": "ref", + "name": "topic_id_filter" + }, + { + "kind": "ref", + "name": "topic_name_filter" + }, + { + "kind": "ref", + "name": "model_id_filter" + }, + { + "kind": "ref", + "name": "tag_id_filter" + }, + { + "kind": "ref", + "name": "tag_name_filter" + }, + { + "kind": "ref", + "name": "url_filter" + }, + { + "kind": "ref", + "name": "root_domain_filter" + }, + { + "kind": "ref", + "name": "analysis_type_filter" + }, + { + "kind": "ref", + "name": "prompt_type_filter" + }, + { + "kind": "ref", + "name": "persona_id_filter" + }, + { + "kind": "ref", + "name": "citation_category_filter" + }, + { + "kind": "ref", + "name": "prompt_filter" }, { "kind": "ref", - "name": "ReferralSourceFilter" + "name": "prompt_id_filter" }, { "kind": "ref", - "name": "ReferralTypeFilter" + "name": "mentioned_filter" } ], "discriminator": { "propertyName": "field", "mapping": { - "path": "PathFilter", - "referral_source": "ReferralSourceFilter", - "referral_type": "ReferralTypeFilter" + "analysis_type": "analysis_type_filter", + "citation_category": "citation_category_filter", + "hostname": "hostname_filter", + "mentioned": "mentioned_filter", + "model": "model_id_filter", + "model_id": "model_id_filter", + "path": "path_filter", + "persona_id": "persona_id_filter", + "prompt": "prompt_filter", + "prompt_id": "prompt_id_filter", + "prompt_type": "prompt_type_filter", + "region": "region_id_filter", + "region_id": "region_id_filter", + "region_name": "region_name_filter", + "root_domain": "root_domain_filter", + "tag": "tag_id_filter", + "tag_id": "tag_id_filter", + "tag_name": "tag_name_filter", + "topic": "topic_id_filter", + "topic_id": "topic_id_filter", + "topic_name": "topic_name_filter", + "url": "url_filter" } }, "variantNames": [ + "HostnameFilter", "PathFilter", - "ReferralSourceFilter", - "ReferralTypeFilter" + "RegionIdFilter", + "RegionNameFilter", + "TopicIdFilter", + "TopicNameFilter", + "ModelIdFilter", + "TagIdFilter", + "TagNameFilter", + "UrlFilter", + "RootDomainFilter", + "AnalysisTypeFilter", + "PromptTypeFilter", + "PersonaIdFilter", + "CitationCategoryFilter", + "PromptFilter", + "PromptIdFilter", + "MentionedFilter" ] } } @@ -14747,56 +14323,42 @@ } }, { - "name": "RegionIdFilter", - "source": "RegionIdFilter", + "name": "stream_sentiment_query", + "source": "stream_sentiment_query", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "field", - "publicName": "field", - "required": true, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "literal", - "value": "region_id" - }, - { - "kind": "literal", - "value": "region" - } - ], - "variantNames": [ - null, - null - ] - } - }, - { - "name": "operator", - "publicName": "operator", - "required": true, + "name": "date_interval", + "publicName": "date_interval", + "required": false, "deprecated": false, "type": { "kind": "enum", "values": [ - "is", - "not_is", - "in", - "not_in" + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" ], "names": [ - "Is", - "NotIs", - "In", - "NotIn" + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" ], "deprecations": [ + false, + false, + false, false, false, false, @@ -14805,200 +14367,180 @@ } }, { - "name": "value", - "publicName": "value", - "required": true, + "name": "dimensions", + "publicName": "dimensions", + "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "uuid" - }, - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - } - ], - "variantNames": [ - null, - null - ] + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "theme", + "date", + "region", + "topic", + "topic_id", + "model", + "asset_id", + "asset_name", + "tag", + "prompt", + "prompt_id", + "sentiment_type", + "persona" + ], + "names": [ + "Theme", + "Date", + "Region", + "Topic", + "TopicId", + "Model", + "AssetId", + "AssetName", + "Tag", + "Prompt", + "PromptId", + "SentimentType", + "Persona" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } } - } - ], - "additionalProperties": false - } - }, - { - "name": "RegionNameFilter", - "source": "RegionNameFilter", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "field", - "publicName": "field", + "name": "metrics", + "publicName": "metrics", "required": true, "deprecated": false, "type": { - "kind": "literal", - "value": "region_name" + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "positive", + "negative", + "occurrences" + ], + "names": [ + "Positive", + "Negative", + "Occurrences" + ], + "deprecations": [ + false, + false, + false + ] + } } }, { - "name": "operator", - "publicName": "operator", - "required": true, + "name": "order_by", + "publicName": "order_by", + "required": false, "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" - ], - "names": [ - "Is", - "NotIs", - "In", - "NotIn", - "Contains", - "NotContains", - "Matches", - "ContainsCaseInsensitive", - "NotContainsCaseInsensitive" + "extensions": { + "source": [ + "examples" ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false - ] + "examples": { + "date": "asc" + } + }, + "type": { + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } } }, { - "name": "value", - "publicName": "value", - "required": true, + "name": "pagination", + "publicName": "pagination", + "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "primitive", - "type": "string" + "kind": "ref", + "name": "pagination" }, { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } + "kind": "null" } - ], - "variantNames": [ - null, - null ] } - } - ], - "additionalProperties": false - } - }, - { - "name": "ReportResponse", - "source": "ReportResponse", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "info", - "publicName": "info", + "name": "category_id", + "publicName": "category_id", "required": true, "deprecated": false, "type": { - "kind": "ref", - "name": "ReportInfo" + "kind": "primitive", + "type": "string", + "format": "uuid" } }, { - "name": "data", - "publicName": "data", + "name": "start_date", + "publicName": "start_date", "required": true, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "ReportResult" - } + "kind": "primitive", + "type": "string", + "format": "date-time" } - } - ], - "additionalProperties": false - } - }, - { - "name": "ReportResult", - "source": "ReportResult", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "metrics", - "publicName": "metrics", + "name": "end_date", + "publicName": "end_date", "required": true, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "integer" - }, - { - "kind": "primitive", - "type": "number" - } - ], - "variantNames": [ - null, - null - ] - } + "kind": "primitive", + "type": "string", + "format": "date-time" } }, { - "name": "dimensions", - "publicName": "dimensions", - "required": true, + "name": "filters", + "publicName": "filters", + "required": false, "deprecated": false, "type": { "kind": "array", @@ -15006,18 +14548,88 @@ "kind": "union", "variants": [ { - "kind": "primitive", - "type": "string" + "kind": "ref", + "name": "asset_id_filter" }, { - "kind": "primitive", - "type": "string", - "format": "uuid" + "kind": "ref", + "name": "profound_answer_engine_insights_filters_asset_name_filter" + }, + { + "kind": "ref", + "name": "theme_filter" + }, + { + "kind": "ref", + "name": "region_id_filter" + }, + { + "kind": "ref", + "name": "region_name_filter" + }, + { + "kind": "ref", + "name": "topic_id_filter" + }, + { + "kind": "ref", + "name": "topic_name_filter" + }, + { + "kind": "ref", + "name": "model_id_filter" + }, + { + "kind": "ref", + "name": "tag_id_filter" + }, + { + "kind": "ref", + "name": "tag_name_filter" + }, + { + "kind": "ref", + "name": "prompt_filter" + }, + { + "kind": "ref", + "name": "persona_id_filter" } ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_id": "asset_id_filter", + "asset_name": "profound_answer_engine_insights_filters_asset_name_filter", + "model": "model_id_filter", + "model_id": "model_id_filter", + "persona_id": "persona_id_filter", + "prompt": "prompt_filter", + "region": "region_id_filter", + "region_id": "region_id_filter", + "region_name": "region_name_filter", + "tag": "tag_id_filter", + "tag_id": "tag_id_filter", + "tag_name": "tag_name_filter", + "theme": "theme_filter", + "topic": "topic_id_filter", + "topic_id": "topic_id_filter", + "topic_name": "topic_name_filter" + } + }, "variantNames": [ - null, - null + "AssetIdFilter", + "AssetNameFilter", + "ThemeFilter", + "RegionIdFilter", + "RegionNameFilter", + "TopicIdFilter", + "TopicNameFilter", + "ModelIdFilter", + "TagIdFilter", + "TagNameFilter", + "PromptFilter", + "PersonaIdFilter" ] } } @@ -15027,51 +14639,37 @@ } }, { - "name": "RootDomainFilter", - "source": "RootDomainFilter", + "name": "stream_visibility_query", + "source": "stream_visibility_query", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "field", - "publicName": "field", - "required": true, - "deprecated": false, - "type": { - "kind": "literal", - "value": "root_domain" - } - }, - { - "name": "operator", - "publicName": "operator", - "required": true, + "name": "date_interval", + "publicName": "date_interval", + "required": false, "deprecated": false, "type": { "kind": "enum", "values": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" ], "names": [ - "Is", - "NotIs", - "In", - "NotIn", - "Contains", - "NotContains", - "Matches", - "ContainsCaseInsensitive", - "NotContainsCaseInsensitive" + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" ], "deprecations": [ false, @@ -15080,174 +14678,179 @@ false, false, false, - false, - false, false ] } }, { - "name": "value", - "publicName": "value", - "required": true, + "name": "dimensions", + "publicName": "dimensions", + "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - } - ], - "variantNames": [ - null, - null - ] + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "date", + "region", + "topic", + "topic_id", + "model", + "asset_id", + "asset_name", + "prompt", + "prompt_id", + "tag", + "persona" + ], + "names": [ + "Date", + "Region", + "Topic", + "TopicId", + "Model", + "AssetId", + "AssetName", + "Prompt", + "PromptId", + "Tag", + "Persona" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } } - } - ], - "additionalProperties": false - } - }, - { - "name": "RunAgentRequest", - "source": "RunAgentRequest", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "inputs", - "publicName": "inputs", - "required": false, + "name": "metrics", + "publicName": "metrics", + "required": true, "deprecated": false, "type": { - "kind": "object", - "properties": [], - "additionalProperties": { - "kind": "unknown" + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "share_of_voice", + "mentions_count", + "visibility_score", + "executions", + "average_position" + ], + "names": [ + "ShareOfVoice", + "MentionsCount", + "VisibilityScore", + "Executions", + "AveragePosition" + ], + "deprecations": [ + false, + false, + false, + false, + false + ] } } - } - ], - "additionalProperties": false - } - }, - { - "name": "SearchKnowledgeBaseFilters", - "source": "SearchKnowledgeBaseFilters", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "tags", - "publicName": "tags", + "name": "order_by", + "publicName": "order_by", "required": false, "deprecated": false, + "extensions": { + "source": [ + "examples" + ], + "examples": { + "date": "asc" + } + }, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "validation": { - "minLength": 1 - } - }, - "validation": { - "minItems": 1 - } - }, - { - "kind": "null" - } - ] + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } } }, { - "name": "folders", - "publicName": "folders", + "name": "pagination", + "publicName": "pagination", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "validation": { - "minLength": 1 - } - }, - "validation": { - "minItems": 1, - "maxItems": 1 - } + "kind": "ref", + "name": "pagination" }, { "kind": "null" } ] } - } - ], - "additionalProperties": false - } - }, - { - "name": "SearchKnowledgeBaseRequest", - "source": "SearchKnowledgeBaseRequest", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "query", - "publicName": "query", + "name": "category_id", + "publicName": "category_id", "required": true, "deprecated": false, "type": { "kind": "primitive", "type": "string", - "validation": { - "minLength": 1 - } + "format": "uuid" } }, { - "name": "top_k", - "publicName": "top_k", + "name": "start_date", + "publicName": "start_date", "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "integer", - "validation": {} + "type": "string", + "format": "date-time" } }, { - "name": "return_full_page", - "publicName": "return_full_page", - "required": false, + "name": "end_date", + "publicName": "end_date", + "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "boolean" + "type": "string", + "format": "date-time" } }, { @@ -15256,16 +14859,89 @@ "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "SearchKnowledgeBaseFilters" + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "region_id_filter" + }, + { + "kind": "ref", + "name": "region_name_filter" + }, + { + "kind": "ref", + "name": "model_id_filter" + }, + { + "kind": "ref", + "name": "topic_id_filter" + }, + { + "kind": "ref", + "name": "topic_name_filter" + }, + { + "kind": "ref", + "name": "profound_answer_engine_insights_filters_asset_name_filter" + }, + { + "kind": "ref", + "name": "tag_id_filter" + }, + { + "kind": "ref", + "name": "tag_name_filter" + }, + { + "kind": "ref", + "name": "prompt_id_filter" + }, + { + "kind": "ref", + "name": "prompt_filter" + }, + { + "kind": "ref", + "name": "persona_id_filter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "profound_answer_engine_insights_filters_asset_name_filter", + "model": "model_id_filter", + "model_id": "model_id_filter", + "persona_id": "persona_id_filter", + "prompt": "prompt_filter", + "prompt_id": "prompt_id_filter", + "region": "region_id_filter", + "region_id": "region_id_filter", + "region_name": "region_name_filter", + "tag": "tag_id_filter", + "tag_id": "tag_id_filter", + "tag_name": "tag_name_filter", + "topic": "topic_id_filter", + "topic_id": "topic_id_filter", + "topic_name": "topic_name_filter" + } }, - { - "kind": "null" - } - ] + "variantNames": [ + "RegionIdFilter", + "RegionNameFilter", + "ModelIdFilter", + "TopicIdFilter", + "TopicNameFilter", + "AssetNameFilter", + "TagIdFilter", + "TagNameFilter", + "PromptIdFilter", + "PromptFilter", + "PersonaIdFilter" + ] + } } } ], @@ -15273,51 +14949,37 @@ } }, { - "name": "SearchQueryFilter", - "source": "SearchQueryFilter", + "name": "stream_web_search_results_query", + "source": "stream_web_search_results_query", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "field", - "publicName": "field", - "required": true, - "deprecated": false, - "type": { - "kind": "literal", - "value": "search_query" - } - }, - { - "name": "operator", - "publicName": "operator", - "required": true, + "name": "date_interval", + "publicName": "date_interval", + "required": false, "deprecated": false, "type": { "kind": "enum", "values": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" ], "names": [ - "Is", - "NotIs", - "In", - "NotIn", - "Contains", - "NotContains", - "Matches", - "ContainsCaseInsensitive", - "NotContainsCaseInsensitive" + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" ], "deprecations": [ false, @@ -15326,114 +14988,144 @@ false, false, false, - false, - false, false ] } }, { - "name": "value", - "publicName": "value", - "required": true, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - } - ], - "variantNames": [ - null, - null - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "SentimentDataPoint", - "source": "SentimentDataPoint", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "scores", - "publicName": "scores", - "required": true, + "name": "dimensions", + "publicName": "dimensions", + "required": false, "deprecated": false, "type": { - "kind": "ref", - "name": "SentimentPeriodScores" - } - }, - { - "name": "date", - "publicName": "date", - "required": false, + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "hostname", + "path", + "url", + "root_domain", + "date", + "region", + "topic", + "topic_id", + "model", + "tag", + "prompt", + "prompt_id", + "persona", + "search_query" + ], + "names": [ + "Hostname", + "Path", + "Url", + "RootDomain", + "Date", + "Region", + "Topic", + "TopicId", + "Model", + "Tag", + "Prompt", + "PromptId", + "Persona", + "SearchQuery" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "count", + "search_share" + ], + "names": [ + "Count", + "SearchShare" + ], + "deprecations": [ + false, + false + ] + }, + "validation": { + "minItems": 1 + } } }, { - "name": "prev_date", - "publicName": "prev_date", + "name": "order_by", + "publicName": "order_by", "required": false, "deprecated": false, + "extensions": { + "source": [ + "examples" + ], + "examples": { + "date": "asc" + } + }, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } } }, { - "name": "group_ids", - "publicName": "group_ids", + "name": "pagination", + "publicName": "pagination", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "record", - "value": { - "kind": "primitive", - "type": "string" - }, - "propertyNames": { - "kind": "primitive", - "type": "string" - } + "kind": "ref", + "name": "pagination" }, { "kind": "null" @@ -15442,77 +15134,133 @@ } }, { - "name": "group_names", - "publicName": "group_names", - "required": false, + "name": "category_id", + "publicName": "category_id", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "record", - "value": { - "kind": "primitive", - "type": "string" - }, - "propertyNames": { - "kind": "primitive", - "type": "string" - } - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string", + "format": "uuid" } }, { - "name": "group_metadata", - "publicName": "group_metadata", - "required": false, + "name": "start_date", + "publicName": "start_date", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "SentimentGroupMetadata" - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string", + "format": "date-time" } }, { - "name": "cited_website_hrefs", - "publicName": "cited_website_hrefs", - "required": false, + "name": "end_date", + "publicName": "end_date", + "required": true, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } + "kind": "primitive", + "type": "string", + "format": "date-time" } }, { - "name": "total_count", - "publicName": "total_count", + "name": "filters", + "publicName": "filters", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "integer" + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "hostname_filter" + }, + { + "kind": "ref", + "name": "path_filter" + }, + { + "kind": "ref", + "name": "region_id_filter" + }, + { + "kind": "ref", + "name": "topic_id_filter" + }, + { + "kind": "ref", + "name": "model_id_filter" + }, + { + "kind": "ref", + "name": "tag_id_filter" + }, + { + "kind": "ref", + "name": "url_filter" + }, + { + "kind": "ref", + "name": "root_domain_filter" + }, + { + "kind": "ref", + "name": "persona_id_filter" + }, + { + "kind": "ref", + "name": "prompt_filter" + }, + { + "kind": "ref", + "name": "prompt_id_filter" + }, + { + "kind": "ref", + "name": "search_query_filter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "hostname": "hostname_filter", + "model": "model_id_filter", + "model_id": "model_id_filter", + "path": "path_filter", + "persona_id": "persona_id_filter", + "prompt": "prompt_filter", + "prompt_id": "prompt_id_filter", + "region": "region_id_filter", + "region_id": "region_id_filter", + "root_domain": "root_domain_filter", + "search_query": "search_query_filter", + "tag": "tag_id_filter", + "tag_id": "tag_id_filter", + "topic": "topic_id_filter", + "topic_id": "topic_id_filter", + "url": "url_filter" + } }, - { - "kind": "null" - } - ] + "variantNames": [ + "HostnameFilter", + "PathFilter", + "RegionIdFilter", + "TopicIdFilter", + "ModelIdFilter", + "TagIdFilter", + "UrlFilter", + "RootDomainFilter", + "PersonaIdFilter", + "PromptFilter", + "PromptIdFilter", + "SearchQueryFilter" + ] + } } } ], @@ -15520,118 +15268,191 @@ } }, { - "name": "SentimentGroupMetadata", - "source": "SentimentGroupMetadata", + "name": "tag", + "source": "tag", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "theme_id", - "publicName": "theme_id", - "required": false, + "name": "id", + "publicName": "id", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string" } }, { - "name": "theme", - "publicName": "theme", - "required": false, + "name": "name", + "publicName": "name", + "required": true, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "string" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "tag_id_filter", + "source": "tag_id_filter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "primitive", - "type": "string" + "kind": "literal", + "value": "tag_id" }, { - "kind": "null" + "kind": "literal", + "value": "tag" } + ], + "variantNames": [ + null, + null ] } }, { - "name": "claim_id", - "publicName": "claim_id", - "required": false, + "name": "operator", + "publicName": "operator", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn" + ], + "deprecations": [ + false, + false, + false, + false ] } }, { - "name": "claim", - "publicName": "claim", - "required": false, + "name": "value", + "publicName": "value", + "required": true, "deprecated": false, "type": { "kind": "union", "variants": [ { "kind": "primitive", - "type": "string" + "type": "string", + "format": "uuid" }, { - "kind": "null" + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } } + ], + "variantNames": [ + null, + null ] } + } + ], + "additionalProperties": false + } + }, + { + "name": "tag_name_filter", + "source": "tag_name_filter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "tag_name" + } }, { - "name": "sentiment", - "publicName": "sentiment", - "required": false, + "name": "operator", + "publicName": "operator", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "enum", - "values": [ - "positive", - "negative" - ], - "names": [ - "Positive", - "Negative" - ], - "deprecations": [ - false, - false - ] - }, - { - "kind": "null" - } + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false ] } }, { - "name": "prompt_id", - "publicName": "prompt_id", - "required": false, + "name": "value", + "publicName": "value", + "required": true, "deprecated": false, "type": { "kind": "union", @@ -15641,33 +15462,87 @@ "type": "string" }, { - "kind": "null" + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } } + ], + "variantNames": [ + null, + null ] } + } + ], + "additionalProperties": false + } + }, + { + "name": "theme_filter", + "source": "theme_filter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "theme" + } }, { - "name": "prompt_text", - "publicName": "prompt_text", - "required": false, + "name": "operator", + "publicName": "operator", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false ] } }, { - "name": "topic_id", - "publicName": "topic_id", - "required": false, + "name": "value", + "publicName": "value", + "required": true, "deprecated": false, "type": { "kind": "union", @@ -15677,188 +15552,159 @@ "type": "string" }, { - "kind": "null" - } - ] - } - }, - { - "name": "run_id", - "publicName": "run_id", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "created_at", - "publicName": "created_at", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "model_id", - "publicName": "model_id", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "region_id", - "publicName": "region_id", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } } + ], + "variantNames": [ + null, + null ] } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "topic", + "source": "topic", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "persona_id", - "publicName": "persona_id", - "required": false, + "name": "id", + "publicName": "id", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string" } }, { - "name": "asset_name", - "publicName": "asset_name", - "required": false, + "name": "name", + "publicName": "name", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string" } }, { - "name": "child_count_total", - "publicName": "child_count_total", - "required": false, + "name": "status", + "publicName": "status", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "integer" - }, - { - "kind": "null" - } + "kind": "enum", + "values": [ + "active", + "disabled" + ], + "names": [ + "Active", + "Disabled" + ], + "deprecations": [ + false, + false ] } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "topic_id_filter", + "source": "topic_id_filter", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "child_count_matching", - "publicName": "child_count_matching", - "required": false, + "name": "field", + "publicName": "field", + "required": true, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "primitive", - "type": "integer" + "kind": "literal", + "value": "topic_id" }, { - "kind": "null" + "kind": "literal", + "value": "topic" } + ], + "variantNames": [ + null, + null ] } }, { - "name": "parent_matches_search", - "publicName": "parent_matches_search", - "required": false, + "name": "operator", + "publicName": "operator", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "null" - } + "kind": "enum", + "values": [ + "is", + "not_is", + "in", + "not_in" + ], + "names": [ + "Is", + "NotIs", + "In", + "NotIn" + ], + "deprecations": [ + false, + false, + false, + false ] } }, { - "name": "child_matches_search", - "publicName": "child_matches_search", - "required": false, + "name": "value", + "publicName": "value", + "required": true, "deprecated": false, "type": { "kind": "union", "variants": [ { "kind": "primitive", - "type": "boolean" + "type": "string", + "format": "uuid" }, { - "kind": "null" + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } } + ], + "variantNames": [ + null, + null ] } } @@ -15867,47 +15713,32 @@ } }, { - "name": "SentimentPeriodScores", - "source": "SentimentPeriodScores", + "name": "topic_input", + "source": "topic_input", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "current", - "publicName": "current", - "required": false, + "name": "id", + "publicName": "id", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "SentimentScores" - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string", + "format": "uuid" } }, { - "name": "previous", - "publicName": "previous", - "required": false, + "name": "name", + "publicName": "name", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "SentimentScores" - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string" } } ], @@ -15915,37 +15746,51 @@ } }, { - "name": "SentimentQuery", - "source": "SentimentQuery", + "name": "topic_name_filter", + "source": "topic_name_filter", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "date_interval", - "publicName": "date_interval", - "required": false, + "name": "field", + "publicName": "field", + "required": true, + "deprecated": false, + "type": { + "kind": "literal", + "value": "topic_name" + } + }, + { + "name": "operator", + "publicName": "operator", + "required": true, "deprecated": false, "type": { "kind": "enum", "values": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" ], "names": [ - "Hour", - "Day", - "Week", - "Month", - "Quarter", - "Year", - "RelativeWeek" + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" ], "deprecations": [ false, @@ -15954,315 +15799,229 @@ false, false, false, + false, + false, false ] } }, { - "name": "dimensions", - "publicName": "dimensions", - "required": false, + "name": "value", + "publicName": "value", + "required": true, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "theme", - "date", - "region", - "topic", - "topic_id", - "model", - "asset_id", - "asset_name", - "tag", - "prompt", - "prompt_id", - "sentiment_type", - "persona" - ], - "names": [ - "Theme", - "Date", - "Region", - "Topic", - "TopicId", - "Model", - "AssetId", - "AssetName", - "Tag", - "Prompt", - "PromptId", - "SentimentType", - "Persona" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false - ] - } + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + ], + "variantNames": [ + null, + null + ] } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "update_prompt_input", + "source": "update_prompt_input", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "metrics", - "publicName": "metrics", + "name": "id", + "publicName": "id", "required": true, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "positive", - "negative", - "occurrences" - ], - "names": [ - "Positive", - "Negative", - "Occurrences" - ], - "deprecations": [ - false, - false, - false - ] - } + "kind": "primitive", + "type": "string" } }, { - "name": "order_by", - "publicName": "order_by", + "name": "prompt", + "publicName": "prompt", "required": false, "deprecated": false, "type": { - "kind": "record", - "value": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" - ], - "deprecations": [ - false, - false - ] - }, - "propertyNames": { - "kind": "primitive", - "type": "string" - } + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] } }, { - "name": "pagination", - "publicName": "pagination", + "name": "topic", + "publicName": "topic", "required": false, "deprecated": false, "type": { - "kind": "ref", - "name": "Pagination" + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "id_or_name" + }, + { + "kind": "null" + } + ] } }, { - "name": "category_id", - "publicName": "category_id", - "required": true, + "name": "language", + "publicName": "language", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "null" + } + ] } }, { - "name": "start_date", - "publicName": "start_date", - "required": true, + "name": "tags", + "publicName": "tags", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "ref", + "name": "id_or_name" + } + }, + { + "kind": "null" + } + ] } }, { - "name": "end_date", - "publicName": "end_date", - "required": true, + "name": "regions", + "publicName": "regions", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "ref", + "name": "id_or_name" + } + }, + { + "kind": "null" + } + ] } }, { - "name": "filters", - "publicName": "filters", + "name": "platforms", + "publicName": "platforms", "required": false, "deprecated": false, "type": { - "kind": "array", - "items": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "AssetIdFilter" - }, - { - "kind": "ref", - "name": "ProfoundAnswerEngineInsightsFiltersAssetNameFilter" - }, - { - "kind": "ref", - "name": "ThemeFilter" - }, - { - "kind": "ref", - "name": "RegionIdFilter" - }, - { - "kind": "ref", - "name": "RegionNameFilter" - }, - { - "kind": "ref", - "name": "TopicIdFilter" - }, - { - "kind": "ref", - "name": "TopicNameFilter" - }, - { - "kind": "ref", - "name": "ModelIdFilter" - }, - { - "kind": "ref", - "name": "TagIdFilter" - }, - { - "kind": "ref", - "name": "TagNameFilter" - }, - { - "kind": "ref", - "name": "PromptFilter" - }, - { + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { "kind": "ref", - "name": "PersonaIdFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "asset_id": "AssetIdFilter", - "asset_name": "ProfoundAnswerEngineInsightsFiltersAssetNameFilter", - "model": "ModelIdFilter", - "model_id": "ModelIdFilter", - "persona_id": "PersonaIdFilter", - "prompt": "PromptFilter", - "region": "RegionIdFilter", - "region_id": "RegionIdFilter", - "region_name": "RegionNameFilter", - "tag": "TagIdFilter", - "tag_id": "TagIdFilter", - "tag_name": "TagNameFilter", - "theme": "ThemeFilter", - "topic": "TopicIdFilter", - "topic_id": "TopicIdFilter", - "topic_name": "TopicNameFilter" + "name": "id_or_name" } }, - "variantNames": [ - "AssetIdFilter", - "AssetNameFilter", - "ThemeFilter", - "RegionIdFilter", - "RegionNameFilter", - "TopicIdFilter", - "TopicNameFilter", - "ModelIdFilter", - "TagIdFilter", - "TagNameFilter", - "PromptFilter", - "PersonaIdFilter" - ] - } - } - } - ], - "additionalProperties": false - } - }, - { - "name": "SentimentScores", - "source": "SentimentScores", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "positive_sentiment", - "publicName": "positive_sentiment", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "number" - } - }, - { - "name": "negative_sentiment", - "publicName": "negative_sentiment", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "number" + { + "kind": "null" + } + ] } }, { - "name": "assessment_count", - "publicName": "assessment_count", - "required": true, + "name": "personas", + "publicName": "personas", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "integer" + "kind": "union", + "variants": [ + { + "kind": "array", + "items": { + "kind": "ref", + "name": "id_or_name" + } + }, + { + "kind": "null" + } + ] } }, { - "name": "occurrence", - "publicName": "occurrence", + "name": "analysis_types", + "publicName": "analysis_types", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "primitive", - "type": "number" + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "visibility", + "sentiment", + "sentiment_v2", + "accuracy" + ], + "names": [ + "Visibility", + "Sentiment", + "SentimentV2", + "Accuracy" + ], + "deprecations": [ + false, + false, + false, + false + ] + } }, { "kind": "null" @@ -16271,16 +16030,16 @@ } }, { - "name": "response_count", - "publicName": "response_count", + "name": "prompt_type", + "publicName": "prompt_type", "required": false, - "deprecated": false, + "deprecated": true, "type": { "kind": "union", "variants": [ { "kind": "primitive", - "type": "integer" + "type": "string" }, { "kind": "null" @@ -16289,16 +16048,16 @@ } }, { - "name": "total_response_count", - "publicName": "total_response_count", + "name": "asset", + "publicName": "asset", "required": false, "deprecated": false, "type": { "kind": "union", "variants": [ { - "kind": "primitive", - "type": "integer" + "kind": "ref", + "name": "id_or_name" }, { "kind": "null" @@ -16311,44 +16070,59 @@ } }, { - "name": "SentimentTheme", - "source": "SentimentTheme", + "name": "update_prompt_status_body", + "source": "update_prompt_status_body", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "type", - "publicName": "type", + "name": "prompt_ids", + "publicName": "prompt_ids", "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "literal", - "value": "positive" - }, - { - "kind": "literal", - "value": "negative" - } + "kind": "array", + "items": { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + } + }, + { + "name": "status", + "publicName": "status", + "required": true, + "deprecated": false, + "type": { + "kind": "enum", + "values": [ + "active", + "disabled", + "deleted" ], - "variantNames": [ - null, - null + "names": [ + "Active", + "Disabled", + "Deleted" + ], + "deprecations": [ + false, + false, + false ] } }, { - "name": "name", - "publicName": "name", - "required": true, + "name": "dry_run", + "publicName": "dry_run", + "required": false, "deprecated": false, "type": { "kind": "primitive", - "type": "string" + "type": "boolean" } } ], @@ -16356,89 +16130,66 @@ } }, { - "name": "SentimentV2ClaimFilter", - "source": "SentimentV2ClaimFilter", + "name": "update_prompt_status_response", + "source": "update_prompt_status_response", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "field", - "publicName": "field", + "name": "dry_run", + "publicName": "dry_run", "required": true, "deprecated": false, "type": { - "kind": "literal", - "value": "claim" + "kind": "primitive", + "type": "boolean" } }, { - "name": "operator", - "publicName": "operator", + "name": "updated_prompts", + "publicName": "updated_prompts", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + } + ], + "additionalProperties": false + } + }, + { + "name": "update_prompts_body", + "source": "update_prompts_body", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ + { + "name": "prompts", + "publicName": "prompts", "required": true, "deprecated": false, "type": { - "kind": "enum", - "values": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" - ], - "names": [ - "Is", - "NotIs", - "In", - "NotIn", - "Contains", - "NotContains", - "Matches", - "ContainsCaseInsensitive", - "NotContainsCaseInsensitive" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false - ] + "kind": "array", + "items": { + "kind": "ref", + "name": "update_prompt_input" + } } }, { - "name": "value", - "publicName": "value", - "required": true, + "name": "dry_run", + "publicName": "dry_run", + "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - } - ], - "variantNames": [ - null, - null - ] + "kind": "primitive", + "type": "boolean" } } ], @@ -16446,76 +16197,64 @@ } }, { - "name": "SentimentV2ClaimIdFilter", - "source": "SentimentV2ClaimIdFilter", + "name": "update_prompts_response", + "source": "update_prompts_response", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "field", - "publicName": "field", + "name": "dry_run", + "publicName": "dry_run", "required": true, "deprecated": false, "type": { - "kind": "literal", - "value": "claim_id" + "kind": "primitive", + "type": "boolean" } }, { - "name": "operator", - "publicName": "operator", - "required": true, + "name": "updated", + "publicName": "updated", + "required": false, "deprecated": false, "type": { - "kind": "enum", - "values": [ - "is", - "not_is", - "in", - "not_in" - ], - "names": [ - "Is", - "NotIs", - "In", - "NotIn" - ], - "deprecations": [ - false, - false, - false, - false - ] + "kind": "primitive", + "type": "integer" } }, { - "name": "value", - "publicName": "value", - "required": true, + "name": "topics_created", + "publicName": "topics_created", + "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "uuid" - }, - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - } - ], - "variantNames": [ - null, - null - ] + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "tags_created", + "publicName": "tags_created", + "required": false, + "deprecated": false, + "type": { + "kind": "primitive", + "type": "integer" + } + }, + { + "name": "prompts", + "publicName": "prompts", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "ref", + "name": "prompt_update_preview" + } } } ], @@ -16523,8 +16262,8 @@ } }, { - "name": "SentimentV2ModelIdFilter", - "source": "SentimentV2ModelIdFilter", + "name": "url_filter", + "source": "url_filter", "publicAliases": [], "deprecated": false, "type": { @@ -16537,7 +16276,7 @@ "deprecated": false, "type": { "kind": "literal", - "value": "model_id" + "value": "url" } }, { @@ -16551,15 +16290,30 @@ "is", "not_is", "in", - "not_in" + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" ], "names": [ "Is", "NotIs", "In", - "NotIn" + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" ], "deprecations": [ + false, + false, + false, + false, + false, false, false, false, @@ -16577,15 +16331,13 @@ "variants": [ { "kind": "primitive", - "type": "string", - "format": "uuid" + "type": "string" }, { "kind": "array", "items": { "kind": "primitive", - "type": "string", - "format": "uuid" + "type": "string" } } ], @@ -16600,76 +16352,61 @@ } }, { - "name": "SentimentV2PersonaIdFilter", - "source": "SentimentV2PersonaIdFilter", + "name": "user_input", + "source": "user_input", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "field", - "publicName": "field", + "name": "type", + "publicName": "type", "required": true, "deprecated": false, "type": { - "kind": "literal", - "value": "persona_id" + "kind": "ref", + "name": "content_type" } }, { - "name": "operator", - "publicName": "operator", + "name": "value", + "publicName": "value", "required": true, "deprecated": false, "type": { - "kind": "enum", - "values": [ - "is", - "not_is", - "in", - "not_in" - ], - "names": [ - "Is", - "NotIs", - "In", - "NotIn" - ], - "deprecations": [ - false, - false, - false, - false - ] + "kind": "primitive", + "type": "string" } }, { - "name": "value", - "publicName": "value", + "name": "metadata", + "publicName": "metadata", "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "uuid" - }, - { - "kind": "array", - "items": { + "kind": "record", + "value": { + "kind": "union", + "variants": [ + { "kind": "primitive", - "type": "string", - "format": "uuid" + "type": "integer" + }, + { + "kind": "primitive", + "type": "string" } - } - ], - "variantNames": [ - null, - null - ] + ], + "variantNames": [ + null, + null + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } } } ], @@ -16677,103 +16414,42 @@ } }, { - "name": "SentimentV2PromptIdFilter", - "source": "SentimentV2PromptIdFilter", + "name": "validation_error", + "source": "validation_error", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "field", - "publicName": "field", - "required": true, - "deprecated": false, - "type": { - "kind": "literal", - "value": "prompt_id" - } - }, - { - "name": "operator", - "publicName": "operator", + "name": "loc", + "publicName": "loc", "required": true, "deprecated": false, "type": { - "kind": "enum", - "values": [ - "is", - "not_is", - "in", - "not_in" - ], - "names": [ - "Is", - "NotIs", - "In", - "NotIn" - ], - "deprecations": [ - false, - false, - false, - false - ] - } - }, - { - "name": "value", - "publicName": "value", - "required": true, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "uuid" - }, - { - "kind": "array", - "items": { + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { "kind": "primitive", - "type": "string", - "format": "uuid" + "type": "string" + }, + { + "kind": "primitive", + "type": "integer" } - } - ], - "variantNames": [ - null, - null - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "SentimentV2Query", - "source": "SentimentV2Query", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "category_id", - "publicName": "category_id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" + ], + "variantNames": [ + null, + null + ] + } } }, { - "name": "asset", - "publicName": "asset", + "name": "msg", + "publicName": "msg", "required": true, "deprecated": false, "type": { @@ -16782,8 +16458,8 @@ } }, { - "name": "start_date", - "publicName": "start_date", + "name": "type", + "publicName": "type", "required": true, "deprecated": false, "type": { @@ -16792,54 +16468,76 @@ } }, { - "name": "end_date", - "publicName": "end_date", - "required": true, + "name": "input", + "publicName": "input", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "string" + "kind": "unknown" } }, { - "name": "comparison_start_date", - "publicName": "comparison_start_date", + "name": "ctx", + "publicName": "ctx", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] + "kind": "object", + "properties": [], + "additionalProperties": false } - }, + } + ], + "additionalProperties": false + } + }, + { + "name": "visibility_query", + "source": "visibility_query", + "publicAliases": [], + "deprecated": false, + "type": { + "kind": "object", + "properties": [ { - "name": "comparison_end_date", - "publicName": "comparison_end_date", + "name": "date_interval", + "publicName": "date_interval", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } + "kind": "enum", + "values": [ + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" + ], + "names": [ + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false ] } }, { - "name": "group_by", - "publicName": "group_by", + "name": "dimensions", + "publicName": "dimensions", "required": false, "deprecated": false, "type": { @@ -16848,29 +16546,29 @@ "kind": "enum", "values": [ "date", - "model", - "topic", "region", + "topic", + "topic_id", + "model", + "asset_id", + "asset_name", "prompt", - "persona", + "prompt_id", "tag", - "theme", - "claim", - "run", - "competitor" + "persona" ], "names": [ "Date", - "Model", - "Topic", "Region", + "Topic", + "TopicId", + "Model", + "AssetId", + "AssetName", "Prompt", - "Persona", + "PromptId", "Tag", - "Theme", - "Claim", - "Run", - "Competitor" + "Persona" ], "deprecations": [ false, @@ -16891,153 +16589,204 @@ { "name": "metrics", "publicName": "metrics", - "required": false, + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "positive_sentiment", - "negative_sentiment", - "occurrence" - ], - "names": [ - "PositiveSentiment", - "NegativeSentiment", - "Occurrence" - ], - "deprecations": [ - false, - false, - false - ] - } - }, - { - "kind": "null" - } - ] + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "share_of_voice", + "mentions_count", + "visibility_score", + "executions", + "average_position" + ], + "names": [ + "ShareOfVoice", + "MentionsCount", + "VisibilityScore", + "Executions", + "AveragePosition" + ], + "deprecations": [ + false, + false, + false, + false, + false + ] + } } }, { - "name": "interval", - "publicName": "interval", + "name": "order_by", + "publicName": "order_by", "required": false, "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "day", - "week", - "month" - ], - "names": [ - "Day", - "Week", - "Month" + "extensions": { + "source": [ + "examples" ], - "deprecations": [ - false, - false, - false - ] - } - }, - { - "name": "filter", - "publicName": "filter", - "required": false, - "deprecated": false, + "examples": { + "date": "asc" + } + }, "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "FilterNode" - }, - { - "kind": "null" - } - ] + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" + } } }, { - "name": "sort", - "publicName": "sort", + "name": "pagination", + "publicName": "pagination", "required": false, "deprecated": false, "type": { "kind": "ref", - "name": "AppRoutesV2AnswerEngineInsightsReportsSentimentSortSpec" + "name": "pagination" } }, { - "name": "include_cited_websites", - "publicName": "include_cited_websites", - "required": false, + "name": "category_id", + "publicName": "category_id", + "required": true, "deprecated": false, "type": { "kind": "primitive", - "type": "boolean" + "type": "string", + "format": "uuid" } }, { - "name": "limit", - "publicName": "limit", - "required": false, + "name": "start_date", + "publicName": "start_date", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "integer", - "validation": {} - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string", + "format": "date-time" } }, { - "name": "max_results", - "publicName": "max_results", - "required": false, + "name": "end_date", + "publicName": "end_date", + "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "integer" - }, - { - "kind": "null" - } - ] + "kind": "primitive", + "type": "string", + "format": "date-time" } }, { - "name": "cursor", - "publicName": "cursor", + "name": "filters", + "publicName": "filters", "required": false, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "ref", + "name": "region_id_filter" + }, + { + "kind": "ref", + "name": "region_name_filter" + }, + { + "kind": "ref", + "name": "model_id_filter" + }, + { + "kind": "ref", + "name": "topic_id_filter" + }, + { + "kind": "ref", + "name": "topic_name_filter" + }, + { + "kind": "ref", + "name": "profound_answer_engine_insights_filters_asset_name_filter" + }, + { + "kind": "ref", + "name": "tag_id_filter" + }, + { + "kind": "ref", + "name": "tag_name_filter" + }, + { + "kind": "ref", + "name": "prompt_id_filter" + }, + { + "kind": "ref", + "name": "prompt_filter" + }, + { + "kind": "ref", + "name": "persona_id_filter" + } + ], + "discriminator": { + "propertyName": "field", + "mapping": { + "asset_name": "profound_answer_engine_insights_filters_asset_name_filter", + "model": "model_id_filter", + "model_id": "model_id_filter", + "persona_id": "persona_id_filter", + "prompt": "prompt_filter", + "prompt_id": "prompt_id_filter", + "region": "region_id_filter", + "region_id": "region_id_filter", + "region_name": "region_name_filter", + "tag": "tag_id_filter", + "tag_id": "tag_id_filter", + "tag_name": "tag_name_filter", + "topic": "topic_id_filter", + "topic_id": "topic_id_filter", + "topic_name": "topic_name_filter" + } }, - { - "kind": "null" - } - ] + "variantNames": [ + "RegionIdFilter", + "RegionNameFilter", + "ModelIdFilter", + "TopicIdFilter", + "TopicNameFilter", + "AssetNameFilter", + "TagIdFilter", + "TagNameFilter", + "PromptIdFilter", + "PromptFilter", + "PersonaIdFilter" + ] + } } } ], @@ -17045,43 +16794,42 @@ } }, { - "name": "SentimentV2RegionIdFilter", - "source": "SentimentV2RegionIdFilter", + "name": "web_search_results_query", + "source": "web_search_results_query", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "field", - "publicName": "field", - "required": true, - "deprecated": false, - "type": { - "kind": "literal", - "value": "region_id" - } - }, - { - "name": "operator", - "publicName": "operator", - "required": true, + "name": "date_interval", + "publicName": "date_interval", + "required": false, "deprecated": false, "type": { "kind": "enum", "values": [ - "is", - "not_is", - "in", - "not_in" + "hour", + "day", + "week", + "month", + "quarter", + "year", + "relative_week" ], "names": [ - "Is", - "NotIs", - "In", - "NotIn" + "Hour", + "Day", + "Week", + "Month", + "Quarter", + "Year", + "RelativeWeek" ], "deprecations": [ + false, + false, + false, false, false, false, @@ -17090,80 +16838,138 @@ } }, { - "name": "value", - "publicName": "value", + "name": "dimensions", + "publicName": "dimensions", + "required": false, + "deprecated": false, + "type": { + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "hostname", + "path", + "url", + "root_domain", + "date", + "region", + "topic", + "topic_id", + "model", + "tag", + "prompt", + "prompt_id", + "persona", + "search_query" + ], + "names": [ + "Hostname", + "Path", + "Url", + "RootDomain", + "Date", + "Region", + "Topic", + "TopicId", + "Model", + "Tag", + "Prompt", + "PromptId", + "Persona", + "SearchQuery" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + } + }, + { + "name": "metrics", + "publicName": "metrics", "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "uuid" - }, - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - } - ], - "variantNames": [ - null, - null - ] + "kind": "array", + "items": { + "kind": "enum", + "values": [ + "count", + "search_share" + ], + "names": [ + "Count", + "SearchShare" + ], + "deprecations": [ + false, + false + ] + }, + "validation": { + "minItems": 1 + } } - } - ], - "additionalProperties": false - } - }, - { - "name": "SentimentV2ReportInfo", - "source": "SentimentV2ReportInfo", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { - "name": "query", - "publicName": "query", - "required": true, + "name": "order_by", + "publicName": "order_by", + "required": false, "deprecated": false, + "extensions": { + "source": [ + "examples" + ], + "examples": { + "date": "asc" + } + }, "type": { - "kind": "object", - "properties": [], - "additionalProperties": { - "kind": "unknown" + "kind": "record", + "value": { + "kind": "enum", + "values": [ + "asc", + "desc" + ], + "names": [ + "Asc", + "Desc" + ], + "deprecations": [ + false, + false + ] + }, + "propertyNames": { + "kind": "primitive", + "type": "string" } } }, { - "name": "total_rows", - "publicName": "total_rows", - "required": true, + "name": "pagination", + "publicName": "pagination", + "required": false, "deprecated": false, "type": { - "kind": "primitive", - "type": "integer" + "kind": "ref", + "name": "pagination" } - } - ], - "additionalProperties": false - } - }, - { - "name": "SentimentV2ReportQuery", - "source": "SentimentV2ReportQuery", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ + }, { "name": "category_id", "publicName": "category_id", @@ -17175,16 +16981,6 @@ "format": "uuid" } }, - { - "name": "asset_name", - "publicName": "asset_name", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, { "name": "start_date", "publicName": "start_date", @@ -17207,155 +17003,6 @@ "format": "date-time" } }, - { - "name": "comparison_start_date", - "publicName": "comparison_start_date", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "date-time" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "comparison_end_date", - "publicName": "comparison_end_date", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "date-time" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "date_interval", - "publicName": "date_interval", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" - ], - "names": [ - "Hour", - "Day", - "Week", - "Month", - "Quarter", - "Year", - "RelativeWeek" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false - ] - } - }, - { - "name": "dimensions", - "publicName": "dimensions", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "date", - "topic", - "region", - "model", - "prompt", - "persona", - "tag", - "theme", - "claim", - "run", - "asset_name" - ], - "names": [ - "Date", - "Topic", - "Region", - "Model", - "Prompt", - "Persona", - "Tag", - "Theme", - "Claim", - "Run", - "AssetName" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false - ] - } - } - }, - { - "name": "metrics", - "publicName": "metrics", - "required": true, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "sentiment", - "occurrence" - ], - "names": [ - "Sentiment", - "Occurrence" - ], - "deprecations": [ - false, - false - ] - } - } - }, { "name": "filters", "publicName": "filters", @@ -17368,134 +17015,142 @@ "variants": [ { "kind": "ref", - "name": "SentimentV2ModelIdFilter" + "name": "hostname_filter" }, { "kind": "ref", - "name": "SentimentV2RegionIdFilter" + "name": "path_filter" }, { "kind": "ref", - "name": "SentimentV2TopicIdFilter" + "name": "region_id_filter" }, { "kind": "ref", - "name": "SentimentV2PromptIdFilter" + "name": "topic_id_filter" }, { "kind": "ref", - "name": "SentimentV2PersonaIdFilter" + "name": "model_id_filter" }, { "kind": "ref", - "name": "SentimentV2TagIdFilter" + "name": "tag_id_filter" }, { "kind": "ref", - "name": "SentimentV2RunIdFilter" + "name": "url_filter" }, { "kind": "ref", - "name": "SentimentV2ThemeIdFilter" + "name": "root_domain_filter" }, { "kind": "ref", - "name": "SentimentV2ThemeFilter" + "name": "persona_id_filter" }, { "kind": "ref", - "name": "SentimentV2ClaimIdFilter" + "name": "prompt_filter" }, { "kind": "ref", - "name": "SentimentV2ClaimFilter" + "name": "prompt_id_filter" }, { "kind": "ref", - "name": "SentimentV2SentimentFilter" + "name": "search_query_filter" } ], "discriminator": { "propertyName": "field", "mapping": { - "claim": "SentimentV2ClaimFilter", - "claim_id": "SentimentV2ClaimIdFilter", - "model_id": "SentimentV2ModelIdFilter", - "persona_id": "SentimentV2PersonaIdFilter", - "prompt_id": "SentimentV2PromptIdFilter", - "region_id": "SentimentV2RegionIdFilter", - "run_id": "SentimentV2RunIdFilter", - "sentiment": "SentimentV2SentimentFilter", - "tag_id": "SentimentV2TagIdFilter", - "theme": "SentimentV2ThemeFilter", - "theme_id": "SentimentV2ThemeIdFilter", - "topic_id": "SentimentV2TopicIdFilter" + "hostname": "hostname_filter", + "model": "model_id_filter", + "model_id": "model_id_filter", + "path": "path_filter", + "persona_id": "persona_id_filter", + "prompt": "prompt_filter", + "prompt_id": "prompt_id_filter", + "region": "region_id_filter", + "region_id": "region_id_filter", + "root_domain": "root_domain_filter", + "search_query": "search_query_filter", + "tag": "tag_id_filter", + "tag_id": "tag_id_filter", + "topic": "topic_id_filter", + "topic_id": "topic_id_filter", + "url": "url_filter" } }, "variantNames": [ - "SentimentV2ModelIdFilter", - "SentimentV2RegionIdFilter", - "SentimentV2TopicIdFilter", - "SentimentV2PromptIdFilter", - "SentimentV2PersonaIdFilter", - "SentimentV2TagIdFilter", - "SentimentV2RunIdFilter", - "SentimentV2ThemeIdFilter", - "SentimentV2ThemeFilter", - "SentimentV2ClaimIdFilter", - "SentimentV2ClaimFilter", - "SentimentV2SentimentFilter" + "HostnameFilter", + "PathFilter", + "RegionIdFilter", + "TopicIdFilter", + "ModelIdFilter", + "TagIdFilter", + "UrlFilter", + "RootDomainFilter", + "PersonaIdFilter", + "PromptFilter", + "PromptIdFilter", + "SearchQueryFilter" ] } } - }, - { - "name": "order_by", - "publicName": "order_by", - "required": false, - "deprecated": false, - "type": { - "kind": "record", - "value": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" - ], - "deprecations": [ - false, - false - ] - }, - "propertyNames": { - "kind": "primitive", - "type": "string" - } - } - }, - { - "name": "pagination", - "publicName": "pagination", - "required": false, - "deprecated": false, - "type": { - "kind": "ref", - "name": "Pagination" - } } ], "additionalProperties": false } }, { - "name": "SentimentV2ReportResponse", - "source": "SentimentV2ReportResponse", + "name": "web_search_results_response", + "source": "web_search_results_response", "publicAliases": [], "deprecated": false, + "extensions": { + "source": [ + "examples" + ], + "examples": { + "data": [ + { + "dimensions": [ + "example.com", + "/some/path", + "2023-10-01" + ], + "metrics": [ + 10, + 0.05 + ] + } + ], + "info": { + "query": { + "date_interval": "day", + "dimensions": [ + "hostname", + "path", + "date" + ], + "filters": [ + { + "field": "hostname", + "operator": "is", + "value": "example.com" + } + ], + "metrics": [ + "count", + "search_share" + ] + }, + "total_rows": 200 + } + } + }, "type": { "kind": "object", "properties": [ @@ -17506,19 +17161,19 @@ "deprecated": false, "type": { "kind": "ref", - "name": "SentimentV2ReportInfo" + "name": "report_info" } }, { "name": "data", "publicName": "data", - "required": false, + "required": true, "deprecated": false, "type": { "kind": "array", "items": { "kind": "ref", - "name": "SentimentDataPoint" + "name": "web_search_results_result" } } } @@ -17527,76 +17182,77 @@ } }, { - "name": "SentimentV2RunIdFilter", - "source": "SentimentV2RunIdFilter", + "name": "web_search_results_result", + "source": "web_search_results_result", "publicAliases": [], "deprecated": false, "type": { "kind": "object", "properties": [ { - "name": "field", - "publicName": "field", - "required": true, - "deprecated": false, - "type": { - "kind": "literal", - "value": "run_id" - } - }, - { - "name": "operator", - "publicName": "operator", + "name": "metrics", + "publicName": "metrics", "required": true, "deprecated": false, "type": { - "kind": "enum", - "values": [ - "is", - "not_is", - "in", - "not_in" - ], - "names": [ - "Is", - "NotIs", - "In", - "NotIn" - ], - "deprecations": [ - false, - false, - false, - false - ] + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "integer" + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "primitive", + "type": "string" + } + ], + "variantNames": [ + null, + null, + null + ] + } } }, { - "name": "value", - "publicName": "value", + "name": "dimensions", + "publicName": "dimensions", "required": true, "deprecated": false, "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "uuid" - }, - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" + "kind": "array", + "items": { + "kind": "union", + "variants": [ + { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "primitive", + "type": "string", + "format": "uuid" + } + ], + "variantNames": [ + null, + null + ] + }, + { + "kind": "null" } - } - ], - "variantNames": [ - null, - null - ] + ] + } } } ], @@ -17604,8 +17260,8 @@ } }, { - "name": "SentimentV2SentimentFilter", - "source": "SentimentV2SentimentFilter", + "name": "profound_answer_engine_insights_filters_asset_name_filter", + "source": "profound_answer_engine_insights_filters_asset_name_filter", "publicAliases": [], "deprecated": false, "type": { @@ -17618,7 +17274,7 @@ "deprecated": false, "type": { "kind": "literal", - "value": "sentiment" + "value": "asset_name" } }, { @@ -17632,15 +17288,30 @@ "is", "not_is", "in", - "not_in" + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" ], "names": [ "Is", "NotIs", "In", - "NotIn" + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" ], "deprecations": [ + false, + false, + false, + false, + false, false, false, false, @@ -17657,36 +17328,14 @@ "kind": "union", "variants": [ { - "kind": "enum", - "values": [ - "positive", - "negative" - ], - "names": [ - "Positive", - "Negative" - ], - "deprecations": [ - false, - false - ] + "kind": "primitive", + "type": "string" }, { "kind": "array", "items": { - "kind": "enum", - "values": [ - "positive", - "negative" - ], - "names": [ - "Positive", - "Negative" - ], - "deprecations": [ - false, - false - ] + "kind": "primitive", + "type": "string" } } ], @@ -17701,8 +17350,8 @@ } }, { - "name": "SentimentV2TagIdFilter", - "source": "SentimentV2TagIdFilter", + "name": "profound_shopping_api_asset_name_filter", + "source": "profound_shopping_api_asset_name_filter", "publicAliases": [], "deprecated": false, "type": { @@ -17715,7 +17364,7 @@ "deprecated": false, "type": { "kind": "literal", - "value": "tag_id" + "value": "asset_name" } }, { @@ -17729,11355 +17378,135 @@ "is", "not_is", "in", - "not_in" - ], - "names": [ - "Is", - "NotIs", - "In", - "NotIn" - ], - "deprecations": [ - false, - false, - false, - false - ] - } - }, - { - "name": "value", - "publicName": "value", - "required": true, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "uuid" - }, - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - } + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive" ], - "variantNames": [ - null, - null - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "SentimentV2ThemeFilter", - "source": "SentimentV2ThemeFilter", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "field", - "publicName": "field", - "required": true, - "deprecated": false, - "type": { - "kind": "literal", - "value": "theme" - } - }, - { - "name": "operator", - "publicName": "operator", - "required": true, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" - ], - "names": [ - "Is", - "NotIs", - "In", - "NotIn", - "Contains", - "NotContains", - "Matches", - "ContainsCaseInsensitive", - "NotContainsCaseInsensitive" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false - ] - } - }, - { - "name": "value", - "publicName": "value", - "required": true, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - } - ], - "variantNames": [ - null, - null - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "SentimentV2ThemeIdFilter", - "source": "SentimentV2ThemeIdFilter", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "field", - "publicName": "field", - "required": true, - "deprecated": false, - "type": { - "kind": "literal", - "value": "theme_id" - } - }, - { - "name": "operator", - "publicName": "operator", - "required": true, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "is", - "not_is", - "in", - "not_in" - ], - "names": [ - "Is", - "NotIs", - "In", - "NotIn" - ], - "deprecations": [ - false, - false, - false, - false - ] - } - }, - { - "name": "value", - "publicName": "value", - "required": true, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "uuid" - }, - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - } - ], - "variantNames": [ - null, - null - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "SentimentV2TopicIdFilter", - "source": "SentimentV2TopicIdFilter", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "field", - "publicName": "field", - "required": true, - "deprecated": false, - "type": { - "kind": "literal", - "value": "topic_id" - } - }, - { - "name": "operator", - "publicName": "operator", - "required": true, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "is", - "not_is", - "in", - "not_in" - ], - "names": [ - "Is", - "NotIs", - "In", - "NotIn" - ], - "deprecations": [ - false, - false, - false, - false - ] - } - }, - { - "name": "value", - "publicName": "value", - "required": true, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "uuid" - }, - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - } - ], - "variantNames": [ - null, - null - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "ShoppingAllItemsWithMerchantsQuery", - "source": "ShoppingAllItemsWithMerchantsQuery", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "category_id", - "publicName": "category_id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "start_date", - "publicName": "start_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "end_date", - "publicName": "end_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "comparison_start_date", - "publicName": "comparison_start_date", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "date-time" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "comparison_end_date", - "publicName": "comparison_end_date", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "date-time" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "date_interval", - "publicName": "date_interval", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" - ], - "names": [ - "Hour", - "Day", - "Week", - "Month", - "Quarter", - "Year", - "RelativeWeek" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false - ] - } - }, - { - "name": "filters", - "publicName": "filters", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "RegionIdFilter" - }, - { - "kind": "ref", - "name": "ModelIdFilter" - }, - { - "kind": "ref", - "name": "TopicIdFilter" - }, - { - "kind": "ref", - "name": "TagIdFilter" - }, - { - "kind": "ref", - "name": "PromptIdFilter" - }, - { - "kind": "ref", - "name": "PersonaIdFilter" - }, - { - "kind": "ref", - "name": "BrandNameFilter" - }, - { - "kind": "ref", - "name": "MerchantNameFilter" - }, - { - "kind": "ref", - "name": "ProductNameFilter" - }, - { - "kind": "ref", - "name": "ProfoundShoppingApiAssetNameFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "asset_name": "ProfoundShoppingApiAssetNameFilter", - "brand_name": "BrandNameFilter", - "merchant_name": "MerchantNameFilter", - "model": "ModelIdFilter", - "model_id": "ModelIdFilter", - "persona_id": "PersonaIdFilter", - "product_name": "ProductNameFilter", - "prompt_id": "PromptIdFilter", - "region": "RegionIdFilter", - "region_id": "RegionIdFilter", - "tag": "TagIdFilter", - "tag_id": "TagIdFilter", - "topic": "TopicIdFilter", - "topic_id": "TopicIdFilter" - } - }, - "variantNames": [ - "RegionIdFilter", - "ModelIdFilter", - "TopicIdFilter", - "TagIdFilter", - "PromptIdFilter", - "PersonaIdFilter", - "BrandNameFilter", - "MerchantNameFilter", - "ProductNameFilter", - "AssetNameFilter" - ] - } - } - }, - { - "name": "order_by", - "publicName": "order_by", - "required": false, - "deprecated": false, - "type": { - "kind": "record", - "value": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" - ], - "deprecations": [ - false, - false - ] - }, - "propertyNames": { - "kind": "primitive", - "type": "string" - } - } - }, - { - "name": "pagination", - "publicName": "pagination", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "Pagination" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "include_count", - "publicName": "include_count", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "tag_filter_type", - "publicName": "tag_filter_type", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "any", - "all" - ], - "names": [ - "Any", - "All" - ], - "deprecations": [ - false, - false - ] - } - }, - { - "name": "include_no_tag", - "publicName": "include_no_tag", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "exclude_topic_ids", - "publicName": "exclude_topic_ids", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "dimensions", - "publicName": "dimensions", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "period", - "product_name", - "brand_name", - "product_url", - "product_image_urls", - "product_price", - "merchant_names", - "merchant_prices" - ], - "names": [ - "Period", - "ProductName", - "BrandName", - "ProductUrl", - "ProductImageUrls", - "ProductPrice", - "MerchantNames", - "MerchantPrices" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false - ] - } - } - }, - { - "name": "metrics", - "publicName": "metrics", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "visibility_score", - "share_of_voice", - "average_position", - "visibility_rank", - "product_rating", - "product_num_reviews", - "total_count" - ], - "names": [ - "VisibilityScore", - "ShareOfVoice", - "AveragePosition", - "VisibilityRank", - "ProductRating", - "ProductNumReviews", - "TotalCount" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false - ] - } - } - }, - { - "name": "owned_asset_names", - "publicName": "owned_asset_names", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - } - }, - { - "name": "include_items", - "publicName": "include_items", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - } - }, - { - "name": "search_item", - "publicName": "search_item", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "merchant_filter_type", - "publicName": "merchant_filter_type", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "any", - "all" - ], - "names": [ - "Any", - "All" - ], - "deprecations": [ - false, - false - ] - } - }, - { - "name": "rank_by", - "publicName": "rank_by", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "visibility", - "average_position", - "name" - ], - "names": [ - "Visibility", - "AveragePosition", - "Name" - ], - "deprecations": [ - false, - false, - false - ] - } - }, - { - "name": "sort_order", - "publicName": "sort_order", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" - ], - "deprecations": [ - false, - false - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "ShoppingExecutionsQuery", - "source": "ShoppingExecutionsQuery", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "category_id", - "publicName": "category_id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "start_date", - "publicName": "start_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "end_date", - "publicName": "end_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "comparison_start_date", - "publicName": "comparison_start_date", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "date-time" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "comparison_end_date", - "publicName": "comparison_end_date", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "date-time" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "date_interval", - "publicName": "date_interval", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" - ], - "names": [ - "Hour", - "Day", - "Week", - "Month", - "Quarter", - "Year", - "RelativeWeek" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false - ] - } - }, - { - "name": "filters", - "publicName": "filters", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "RegionIdFilter" - }, - { - "kind": "ref", - "name": "ModelIdFilter" - }, - { - "kind": "ref", - "name": "TopicIdFilter" - }, - { - "kind": "ref", - "name": "TagIdFilter" - }, - { - "kind": "ref", - "name": "PromptIdFilter" - }, - { - "kind": "ref", - "name": "PersonaIdFilter" - }, - { - "kind": "ref", - "name": "BrandNameFilter" - }, - { - "kind": "ref", - "name": "MerchantNameFilter" - }, - { - "kind": "ref", - "name": "ProductNameFilter" - }, - { - "kind": "ref", - "name": "ProfoundShoppingApiAssetNameFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "asset_name": "ProfoundShoppingApiAssetNameFilter", - "brand_name": "BrandNameFilter", - "merchant_name": "MerchantNameFilter", - "model": "ModelIdFilter", - "model_id": "ModelIdFilter", - "persona_id": "PersonaIdFilter", - "product_name": "ProductNameFilter", - "prompt_id": "PromptIdFilter", - "region": "RegionIdFilter", - "region_id": "RegionIdFilter", - "tag": "TagIdFilter", - "tag_id": "TagIdFilter", - "topic": "TopicIdFilter", - "topic_id": "TopicIdFilter" - } - }, - "variantNames": [ - "RegionIdFilter", - "ModelIdFilter", - "TopicIdFilter", - "TagIdFilter", - "PromptIdFilter", - "PersonaIdFilter", - "BrandNameFilter", - "MerchantNameFilter", - "ProductNameFilter", - "AssetNameFilter" - ] - } - } - }, - { - "name": "order_by", - "publicName": "order_by", - "required": false, - "deprecated": false, - "type": { - "kind": "record", - "value": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" - ], - "deprecations": [ - false, - false - ] - }, - "propertyNames": { - "kind": "primitive", - "type": "string" - } - } - }, - { - "name": "pagination", - "publicName": "pagination", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "Pagination" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "include_count", - "publicName": "include_count", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "tag_filter_type", - "publicName": "tag_filter_type", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "any", - "all" - ], - "names": [ - "Any", - "All" - ], - "deprecations": [ - false, - false - ] - } - }, - { - "name": "include_no_tag", - "publicName": "include_no_tag", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "exclude_topic_ids", - "publicName": "exclude_topic_ids", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "analysis_types", - "publicName": "analysis_types", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "visibility", - "sentiment", - "sentiment_v2", - "accuracy" - ], - "names": [ - "Visibility", - "Sentiment", - "SentimentV2", - "Accuracy" - ], - "deprecations": [ - false, - false, - false, - false - ] - } - } - }, - { - "name": "analysis_filter_type", - "publicName": "analysis_filter_type", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "any", - "all" - ], - "names": [ - "Any", - "All" - ], - "deprecations": [ - false, - false - ] - } - }, - { - "name": "owned_asset_names", - "publicName": "owned_asset_names", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - } - } - ], - "additionalProperties": false - } - }, - { - "name": "ShoppingItemVisibilityQuery", - "source": "ShoppingItemVisibilityQuery", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "category_id", - "publicName": "category_id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "start_date", - "publicName": "start_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "end_date", - "publicName": "end_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "comparison_start_date", - "publicName": "comparison_start_date", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "date-time" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "comparison_end_date", - "publicName": "comparison_end_date", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "date-time" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "date_interval", - "publicName": "date_interval", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" - ], - "names": [ - "Hour", - "Day", - "Week", - "Month", - "Quarter", - "Year", - "RelativeWeek" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false - ] - } - }, - { - "name": "filters", - "publicName": "filters", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "RegionIdFilter" - }, - { - "kind": "ref", - "name": "ModelIdFilter" - }, - { - "kind": "ref", - "name": "TopicIdFilter" - }, - { - "kind": "ref", - "name": "TagIdFilter" - }, - { - "kind": "ref", - "name": "PromptIdFilter" - }, - { - "kind": "ref", - "name": "PersonaIdFilter" - }, - { - "kind": "ref", - "name": "BrandNameFilter" - }, - { - "kind": "ref", - "name": "MerchantNameFilter" - }, - { - "kind": "ref", - "name": "ProductNameFilter" - }, - { - "kind": "ref", - "name": "ProfoundShoppingApiAssetNameFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "asset_name": "ProfoundShoppingApiAssetNameFilter", - "brand_name": "BrandNameFilter", - "merchant_name": "MerchantNameFilter", - "model": "ModelIdFilter", - "model_id": "ModelIdFilter", - "persona_id": "PersonaIdFilter", - "product_name": "ProductNameFilter", - "prompt_id": "PromptIdFilter", - "region": "RegionIdFilter", - "region_id": "RegionIdFilter", - "tag": "TagIdFilter", - "tag_id": "TagIdFilter", - "topic": "TopicIdFilter", - "topic_id": "TopicIdFilter" - } - }, - "variantNames": [ - "RegionIdFilter", - "ModelIdFilter", - "TopicIdFilter", - "TagIdFilter", - "PromptIdFilter", - "PersonaIdFilter", - "BrandNameFilter", - "MerchantNameFilter", - "ProductNameFilter", - "AssetNameFilter" - ] - } - } - }, - { - "name": "order_by", - "publicName": "order_by", - "required": false, - "deprecated": false, - "type": { - "kind": "record", - "value": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" - ], - "deprecations": [ - false, - false - ] - }, - "propertyNames": { - "kind": "primitive", - "type": "string" - } - } - }, - { - "name": "pagination", - "publicName": "pagination", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "Pagination" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "include_count", - "publicName": "include_count", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "tag_filter_type", - "publicName": "tag_filter_type", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "any", - "all" - ], - "names": [ - "Any", - "All" - ], - "deprecations": [ - false, - false - ] - } - }, - { - "name": "include_no_tag", - "publicName": "include_no_tag", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "exclude_topic_ids", - "publicName": "exclude_topic_ids", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "dimensions", - "publicName": "dimensions", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "period", - "product_name", - "brand_name", - "date", - "topic_id", - "prompt_id", - "prompt", - "product_url", - "product_image_urls", - "product_price" - ], - "names": [ - "Period", - "ProductName", - "BrandName", - "Date", - "TopicId", - "PromptId", - "Prompt", - "ProductUrl", - "ProductImageUrls", - "ProductPrice" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false, - false - ] - } - } - }, - { - "name": "metrics", - "publicName": "metrics", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "visibility_score", - "share_of_voice", - "average_position", - "visibility_rank", - "position1_percentage", - "position2_percentage", - "position3_percentage", - "position_above3_percentage", - "product_rating", - "product_num_reviews", - "total_count" - ], - "names": [ - "VisibilityScore", - "ShareOfVoice", - "AveragePosition", - "VisibilityRank", - "Position1Percentage", - "Position2Percentage", - "Position3Percentage", - "PositionAbove3Percentage", - "ProductRating", - "ProductNumReviews", - "TotalCount" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false - ] - } - } - }, - { - "name": "owned_asset_names", - "publicName": "owned_asset_names", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - } - }, - { - "name": "include_items", - "publicName": "include_items", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - } - }, - { - "name": "search_item", - "publicName": "search_item", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "merchant_filter_type", - "publicName": "merchant_filter_type", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "any", - "all" - ], - "names": [ - "Any", - "All" - ], - "deprecations": [ - false, - false - ] - } - }, - { - "name": "include_competitors", - "publicName": "include_competitors", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "target_product", - "publicName": "target_product", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "competitor_limit", - "publicName": "competitor_limit", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer", - "validation": {} - } - }, - { - "name": "include_position_frequency", - "publicName": "include_position_frequency", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - } - ], - "additionalProperties": false - } - }, - { - "name": "ShoppingMerchantByItemsQuery", - "source": "ShoppingMerchantByItemsQuery", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "category_id", - "publicName": "category_id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "start_date", - "publicName": "start_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "end_date", - "publicName": "end_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "comparison_start_date", - "publicName": "comparison_start_date", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "date-time" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "comparison_end_date", - "publicName": "comparison_end_date", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "date-time" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "date_interval", - "publicName": "date_interval", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" - ], - "names": [ - "Hour", - "Day", - "Week", - "Month", - "Quarter", - "Year", - "RelativeWeek" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false - ] - } - }, - { - "name": "filters", - "publicName": "filters", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "RegionIdFilter" - }, - { - "kind": "ref", - "name": "ModelIdFilter" - }, - { - "kind": "ref", - "name": "TopicIdFilter" - }, - { - "kind": "ref", - "name": "TagIdFilter" - }, - { - "kind": "ref", - "name": "PromptIdFilter" - }, - { - "kind": "ref", - "name": "PersonaIdFilter" - }, - { - "kind": "ref", - "name": "BrandNameFilter" - }, - { - "kind": "ref", - "name": "MerchantNameFilter" - }, - { - "kind": "ref", - "name": "ProductNameFilter" - }, - { - "kind": "ref", - "name": "ProfoundShoppingApiAssetNameFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "asset_name": "ProfoundShoppingApiAssetNameFilter", - "brand_name": "BrandNameFilter", - "merchant_name": "MerchantNameFilter", - "model": "ModelIdFilter", - "model_id": "ModelIdFilter", - "persona_id": "PersonaIdFilter", - "product_name": "ProductNameFilter", - "prompt_id": "PromptIdFilter", - "region": "RegionIdFilter", - "region_id": "RegionIdFilter", - "tag": "TagIdFilter", - "tag_id": "TagIdFilter", - "topic": "TopicIdFilter", - "topic_id": "TopicIdFilter" - } - }, - "variantNames": [ - "RegionIdFilter", - "ModelIdFilter", - "TopicIdFilter", - "TagIdFilter", - "PromptIdFilter", - "PersonaIdFilter", - "BrandNameFilter", - "MerchantNameFilter", - "ProductNameFilter", - "AssetNameFilter" - ] - } - } - }, - { - "name": "order_by", - "publicName": "order_by", - "required": false, - "deprecated": false, - "type": { - "kind": "record", - "value": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" - ], - "deprecations": [ - false, - false - ] - }, - "propertyNames": { - "kind": "primitive", - "type": "string" - } - } - }, - { - "name": "pagination", - "publicName": "pagination", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "Pagination" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "include_count", - "publicName": "include_count", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "tag_filter_type", - "publicName": "tag_filter_type", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "any", - "all" - ], - "names": [ - "Any", - "All" - ], - "deprecations": [ - false, - false - ] - } - }, - { - "name": "include_no_tag", - "publicName": "include_no_tag", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "exclude_topic_ids", - "publicName": "exclude_topic_ids", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "dimensions", - "publicName": "dimensions", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "period", - "merchant_name", - "product_name", - "brand_name", - "product_image_urls", - "product_price", - "merchant_prices", - "has_instant_checkout", - "delivery_options", - "merchant_url" - ], - "names": [ - "Period", - "MerchantName", - "ProductName", - "BrandName", - "ProductImageUrls", - "ProductPrice", - "MerchantPrices", - "HasInstantCheckout", - "DeliveryOptions", - "MerchantUrl" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false, - false - ] - } - } - }, - { - "name": "metrics", - "publicName": "metrics", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "merchant_visibility", - "product_visibility", - "product_rank", - "avg_position", - "total_count" - ], - "names": [ - "MerchantVisibility", - "ProductVisibility", - "ProductRank", - "AvgPosition", - "TotalCount" - ], - "deprecations": [ - false, - false, - false, - false, - false - ] - } - } - }, - { - "name": "product_name", - "publicName": "product_name", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "ShoppingMerchantDistributionQuery", - "source": "ShoppingMerchantDistributionQuery", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "category_id", - "publicName": "category_id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "start_date", - "publicName": "start_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "end_date", - "publicName": "end_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "comparison_start_date", - "publicName": "comparison_start_date", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "date-time" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "comparison_end_date", - "publicName": "comparison_end_date", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "date-time" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "date_interval", - "publicName": "date_interval", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" - ], - "names": [ - "Hour", - "Day", - "Week", - "Month", - "Quarter", - "Year", - "RelativeWeek" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false - ] - } - }, - { - "name": "filters", - "publicName": "filters", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "RegionIdFilter" - }, - { - "kind": "ref", - "name": "ModelIdFilter" - }, - { - "kind": "ref", - "name": "TopicIdFilter" - }, - { - "kind": "ref", - "name": "TagIdFilter" - }, - { - "kind": "ref", - "name": "PromptIdFilter" - }, - { - "kind": "ref", - "name": "PersonaIdFilter" - }, - { - "kind": "ref", - "name": "BrandNameFilter" - }, - { - "kind": "ref", - "name": "MerchantNameFilter" - }, - { - "kind": "ref", - "name": "ProductNameFilter" - }, - { - "kind": "ref", - "name": "ProfoundShoppingApiAssetNameFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "asset_name": "ProfoundShoppingApiAssetNameFilter", - "brand_name": "BrandNameFilter", - "merchant_name": "MerchantNameFilter", - "model": "ModelIdFilter", - "model_id": "ModelIdFilter", - "persona_id": "PersonaIdFilter", - "product_name": "ProductNameFilter", - "prompt_id": "PromptIdFilter", - "region": "RegionIdFilter", - "region_id": "RegionIdFilter", - "tag": "TagIdFilter", - "tag_id": "TagIdFilter", - "topic": "TopicIdFilter", - "topic_id": "TopicIdFilter" - } - }, - "variantNames": [ - "RegionIdFilter", - "ModelIdFilter", - "TopicIdFilter", - "TagIdFilter", - "PromptIdFilter", - "PersonaIdFilter", - "BrandNameFilter", - "MerchantNameFilter", - "ProductNameFilter", - "AssetNameFilter" - ] - } - } - }, - { - "name": "order_by", - "publicName": "order_by", - "required": false, - "deprecated": false, - "type": { - "kind": "record", - "value": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" - ], - "deprecations": [ - false, - false - ] - }, - "propertyNames": { - "kind": "primitive", - "type": "string" - } - } - }, - { - "name": "pagination", - "publicName": "pagination", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "Pagination" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "include_count", - "publicName": "include_count", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "tag_filter_type", - "publicName": "tag_filter_type", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "any", - "all" - ], - "names": [ - "Any", - "All" - ], - "deprecations": [ - false, - false - ] - } - }, - { - "name": "include_no_tag", - "publicName": "include_no_tag", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "exclude_topic_ids", - "publicName": "exclude_topic_ids", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "dimensions", - "publicName": "dimensions", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "period", - "merchant_name", - "date", - "owned_asset_name" - ], - "names": [ - "Period", - "MerchantName", - "Date", - "OwnedAssetName" - ], - "deprecations": [ - false, - false, - false, - false - ] - } - } - }, - { - "name": "metrics", - "publicName": "metrics", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "offer_count", - "product_count", - "average_rank", - "share_of_offers", - "visibility_rank", - "total_count" - ], - "names": [ - "OfferCount", - "ProductCount", - "AverageRank", - "ShareOfOffers", - "VisibilityRank", - "TotalCount" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false - ] - } - } - }, - { - "name": "owned_asset_names", - "publicName": "owned_asset_names", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - } - }, - { - "name": "search_merchant", - "publicName": "search_merchant", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "ShoppingMerchantShareQuery", - "source": "ShoppingMerchantShareQuery", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "category_id", - "publicName": "category_id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "start_date", - "publicName": "start_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "end_date", - "publicName": "end_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "comparison_start_date", - "publicName": "comparison_start_date", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "date-time" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "comparison_end_date", - "publicName": "comparison_end_date", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "date-time" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "date_interval", - "publicName": "date_interval", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" - ], - "names": [ - "Hour", - "Day", - "Week", - "Month", - "Quarter", - "Year", - "RelativeWeek" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false - ] - } - }, - { - "name": "filters", - "publicName": "filters", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "RegionIdFilter" - }, - { - "kind": "ref", - "name": "ModelIdFilter" - }, - { - "kind": "ref", - "name": "TopicIdFilter" - }, - { - "kind": "ref", - "name": "TagIdFilter" - }, - { - "kind": "ref", - "name": "PromptIdFilter" - }, - { - "kind": "ref", - "name": "PersonaIdFilter" - }, - { - "kind": "ref", - "name": "BrandNameFilter" - }, - { - "kind": "ref", - "name": "MerchantNameFilter" - }, - { - "kind": "ref", - "name": "ProductNameFilter" - }, - { - "kind": "ref", - "name": "ProfoundShoppingApiAssetNameFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "asset_name": "ProfoundShoppingApiAssetNameFilter", - "brand_name": "BrandNameFilter", - "merchant_name": "MerchantNameFilter", - "model": "ModelIdFilter", - "model_id": "ModelIdFilter", - "persona_id": "PersonaIdFilter", - "product_name": "ProductNameFilter", - "prompt_id": "PromptIdFilter", - "region": "RegionIdFilter", - "region_id": "RegionIdFilter", - "tag": "TagIdFilter", - "tag_id": "TagIdFilter", - "topic": "TopicIdFilter", - "topic_id": "TopicIdFilter" - } - }, - "variantNames": [ - "RegionIdFilter", - "ModelIdFilter", - "TopicIdFilter", - "TagIdFilter", - "PromptIdFilter", - "PersonaIdFilter", - "BrandNameFilter", - "MerchantNameFilter", - "ProductNameFilter", - "AssetNameFilter" - ] - } - } - }, - { - "name": "order_by", - "publicName": "order_by", - "required": false, - "deprecated": false, - "type": { - "kind": "record", - "value": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" - ], - "deprecations": [ - false, - false - ] - }, - "propertyNames": { - "kind": "primitive", - "type": "string" - } - } - }, - { - "name": "pagination", - "publicName": "pagination", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "Pagination" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "include_count", - "publicName": "include_count", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "tag_filter_type", - "publicName": "tag_filter_type", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "any", - "all" - ], - "names": [ - "Any", - "All" - ], - "deprecations": [ - false, - false - ] - } - }, - { - "name": "include_no_tag", - "publicName": "include_no_tag", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "exclude_topic_ids", - "publicName": "exclude_topic_ids", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "dimensions", - "publicName": "dimensions", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "period", - "topic_id", - "prompt_id" - ], - "names": [ - "Period", - "TopicId", - "PromptId" - ], - "deprecations": [ - false, - false, - false - ] - } - } - }, - { - "name": "metrics", - "publicName": "metrics", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "literal", - "value": "merchant_share" - } - } - }, - { - "name": "target_asset_names", - "publicName": "target_asset_names", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - } - }, - { - "name": "owned_asset_names", - "publicName": "owned_asset_names", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - } - } - ], - "additionalProperties": false - } - }, - { - "name": "ShoppingMerchantVisibilityByBrandQuery", - "source": "ShoppingMerchantVisibilityByBrandQuery", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "category_id", - "publicName": "category_id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "start_date", - "publicName": "start_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "end_date", - "publicName": "end_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "comparison_start_date", - "publicName": "comparison_start_date", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "date-time" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "comparison_end_date", - "publicName": "comparison_end_date", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "date-time" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "date_interval", - "publicName": "date_interval", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" - ], - "names": [ - "Hour", - "Day", - "Week", - "Month", - "Quarter", - "Year", - "RelativeWeek" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false - ] - } - }, - { - "name": "filters", - "publicName": "filters", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "RegionIdFilter" - }, - { - "kind": "ref", - "name": "ModelIdFilter" - }, - { - "kind": "ref", - "name": "TopicIdFilter" - }, - { - "kind": "ref", - "name": "TagIdFilter" - }, - { - "kind": "ref", - "name": "PromptIdFilter" - }, - { - "kind": "ref", - "name": "PersonaIdFilter" - }, - { - "kind": "ref", - "name": "BrandNameFilter" - }, - { - "kind": "ref", - "name": "MerchantNameFilter" - }, - { - "kind": "ref", - "name": "ProductNameFilter" - }, - { - "kind": "ref", - "name": "ProfoundShoppingApiAssetNameFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "asset_name": "ProfoundShoppingApiAssetNameFilter", - "brand_name": "BrandNameFilter", - "merchant_name": "MerchantNameFilter", - "model": "ModelIdFilter", - "model_id": "ModelIdFilter", - "persona_id": "PersonaIdFilter", - "product_name": "ProductNameFilter", - "prompt_id": "PromptIdFilter", - "region": "RegionIdFilter", - "region_id": "RegionIdFilter", - "tag": "TagIdFilter", - "tag_id": "TagIdFilter", - "topic": "TopicIdFilter", - "topic_id": "TopicIdFilter" - } - }, - "variantNames": [ - "RegionIdFilter", - "ModelIdFilter", - "TopicIdFilter", - "TagIdFilter", - "PromptIdFilter", - "PersonaIdFilter", - "BrandNameFilter", - "MerchantNameFilter", - "ProductNameFilter", - "AssetNameFilter" - ] - } - } - }, - { - "name": "order_by", - "publicName": "order_by", - "required": false, - "deprecated": false, - "type": { - "kind": "record", - "value": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" - ], - "deprecations": [ - false, - false - ] - }, - "propertyNames": { - "kind": "primitive", - "type": "string" - } - } - }, - { - "name": "pagination", - "publicName": "pagination", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "Pagination" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "include_count", - "publicName": "include_count", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "tag_filter_type", - "publicName": "tag_filter_type", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "any", - "all" - ], - "names": [ - "Any", - "All" - ], - "deprecations": [ - false, - false - ] - } - }, - { - "name": "include_no_tag", - "publicName": "include_no_tag", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "exclude_topic_ids", - "publicName": "exclude_topic_ids", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "dimensions", - "publicName": "dimensions", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "period", - "merchant_name", - "brand_name" - ], - "names": [ - "Period", - "MerchantName", - "BrandName" - ], - "deprecations": [ - false, - false, - false - ] - } - } - }, - { - "name": "metrics", - "publicName": "metrics", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "visibility_score", - "share_of_voice", - "average_position", - "visibility_rank", - "total_count" - ], - "names": [ - "VisibilityScore", - "ShareOfVoice", - "AveragePosition", - "VisibilityRank", - "TotalCount" - ], - "deprecations": [ - false, - false, - false, - false, - false - ] - } - } - }, - { - "name": "owned_asset_names", - "publicName": "owned_asset_names", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - } - }, - { - "name": "search_brand", - "publicName": "search_brand", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "include_brand", - "publicName": "include_brand", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "include_brand_only", - "publicName": "include_brand_only", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - } - ], - "additionalProperties": false - } - }, - { - "name": "ShoppingProductMerchantUrlsQuery", - "source": "ShoppingProductMerchantUrlsQuery", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "category_id", - "publicName": "category_id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "product_names", - "publicName": "product_names", - "required": true, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - } - }, - { - "name": "start_date", - "publicName": "start_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "end_date", - "publicName": "end_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - } - ], - "additionalProperties": false - } - }, - { - "name": "ShoppingRowsResponse", - "source": "ShoppingRowsResponse", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "info", - "publicName": "info", - "required": true, - "deprecated": false, - "type": { - "kind": "ref", - "name": "ReportInfo" - } - }, - { - "name": "data", - "publicName": "data", - "required": true, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "object", - "properties": [], - "additionalProperties": { - "kind": "unknown" - } - } - } - } - ], - "additionalProperties": false - } - }, - { - "name": "ShoppingTriggerRateQuery", - "source": "ShoppingTriggerRateQuery", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "category_id", - "publicName": "category_id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "start_date", - "publicName": "start_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "end_date", - "publicName": "end_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "comparison_start_date", - "publicName": "comparison_start_date", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "date-time" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "comparison_end_date", - "publicName": "comparison_end_date", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "date-time" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "date_interval", - "publicName": "date_interval", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" - ], - "names": [ - "Hour", - "Day", - "Week", - "Month", - "Quarter", - "Year", - "RelativeWeek" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false - ] - } - }, - { - "name": "filters", - "publicName": "filters", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "RegionIdFilter" - }, - { - "kind": "ref", - "name": "ModelIdFilter" - }, - { - "kind": "ref", - "name": "TopicIdFilter" - }, - { - "kind": "ref", - "name": "TagIdFilter" - }, - { - "kind": "ref", - "name": "PromptIdFilter" - }, - { - "kind": "ref", - "name": "PersonaIdFilter" - }, - { - "kind": "ref", - "name": "BrandNameFilter" - }, - { - "kind": "ref", - "name": "MerchantNameFilter" - }, - { - "kind": "ref", - "name": "ProductNameFilter" - }, - { - "kind": "ref", - "name": "ProfoundShoppingApiAssetNameFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "asset_name": "ProfoundShoppingApiAssetNameFilter", - "brand_name": "BrandNameFilter", - "merchant_name": "MerchantNameFilter", - "model": "ModelIdFilter", - "model_id": "ModelIdFilter", - "persona_id": "PersonaIdFilter", - "product_name": "ProductNameFilter", - "prompt_id": "PromptIdFilter", - "region": "RegionIdFilter", - "region_id": "RegionIdFilter", - "tag": "TagIdFilter", - "tag_id": "TagIdFilter", - "topic": "TopicIdFilter", - "topic_id": "TopicIdFilter" - } - }, - "variantNames": [ - "RegionIdFilter", - "ModelIdFilter", - "TopicIdFilter", - "TagIdFilter", - "PromptIdFilter", - "PersonaIdFilter", - "BrandNameFilter", - "MerchantNameFilter", - "ProductNameFilter", - "AssetNameFilter" - ] - } - } - }, - { - "name": "order_by", - "publicName": "order_by", - "required": false, - "deprecated": false, - "type": { - "kind": "record", - "value": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" - ], - "deprecations": [ - false, - false - ] - }, - "propertyNames": { - "kind": "primitive", - "type": "string" - } - } - }, - { - "name": "pagination", - "publicName": "pagination", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "Pagination" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "include_count", - "publicName": "include_count", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "tag_filter_type", - "publicName": "tag_filter_type", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "any", - "all" - ], - "names": [ - "Any", - "All" - ], - "deprecations": [ - false, - false - ] - } - }, - { - "name": "include_no_tag", - "publicName": "include_no_tag", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "exclude_topic_ids", - "publicName": "exclude_topic_ids", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "dimensions", - "publicName": "dimensions", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "period", - "date", - "model_id", - "topic_id", - "region_id", - "persona_id", - "prompt_id", - "prompt" - ], - "names": [ - "Period", - "Date", - "ModelId", - "TopicId", - "RegionId", - "PersonaId", - "PromptId", - "Prompt" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false - ] - } - } - }, - { - "name": "metrics", - "publicName": "metrics", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "total_runs", - "shopping_triggered_runs", - "trigger_rate_percentage" - ], - "names": [ - "TotalRuns", - "ShoppingTriggeredRuns", - "TriggerRatePercentage" - ], - "deprecations": [ - false, - false, - false - ] - } - } - } - ], - "additionalProperties": false - } - }, - { - "name": "ShoppingVisibilityQuery", - "source": "ShoppingVisibilityQuery", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "category_id", - "publicName": "category_id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "start_date", - "publicName": "start_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "end_date", - "publicName": "end_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "comparison_start_date", - "publicName": "comparison_start_date", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "date-time" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "comparison_end_date", - "publicName": "comparison_end_date", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "date-time" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "date_interval", - "publicName": "date_interval", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" - ], - "names": [ - "Hour", - "Day", - "Week", - "Month", - "Quarter", - "Year", - "RelativeWeek" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false - ] - } - }, - { - "name": "filters", - "publicName": "filters", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "RegionIdFilter" - }, - { - "kind": "ref", - "name": "ModelIdFilter" - }, - { - "kind": "ref", - "name": "TopicIdFilter" - }, - { - "kind": "ref", - "name": "TagIdFilter" - }, - { - "kind": "ref", - "name": "PromptIdFilter" - }, - { - "kind": "ref", - "name": "PersonaIdFilter" - }, - { - "kind": "ref", - "name": "BrandNameFilter" - }, - { - "kind": "ref", - "name": "MerchantNameFilter" - }, - { - "kind": "ref", - "name": "ProductNameFilter" - }, - { - "kind": "ref", - "name": "ProfoundShoppingApiAssetNameFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "asset_name": "ProfoundShoppingApiAssetNameFilter", - "brand_name": "BrandNameFilter", - "merchant_name": "MerchantNameFilter", - "model": "ModelIdFilter", - "model_id": "ModelIdFilter", - "persona_id": "PersonaIdFilter", - "product_name": "ProductNameFilter", - "prompt_id": "PromptIdFilter", - "region": "RegionIdFilter", - "region_id": "RegionIdFilter", - "tag": "TagIdFilter", - "tag_id": "TagIdFilter", - "topic": "TopicIdFilter", - "topic_id": "TopicIdFilter" - } - }, - "variantNames": [ - "RegionIdFilter", - "ModelIdFilter", - "TopicIdFilter", - "TagIdFilter", - "PromptIdFilter", - "PersonaIdFilter", - "BrandNameFilter", - "MerchantNameFilter", - "ProductNameFilter", - "AssetNameFilter" - ] - } - } - }, - { - "name": "order_by", - "publicName": "order_by", - "required": false, - "deprecated": false, - "type": { - "kind": "record", - "value": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" - ], - "deprecations": [ - false, - false - ] - }, - "propertyNames": { - "kind": "primitive", - "type": "string" - } - } - }, - { - "name": "pagination", - "publicName": "pagination", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "Pagination" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "include_count", - "publicName": "include_count", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "tag_filter_type", - "publicName": "tag_filter_type", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "any", - "all" - ], - "names": [ - "Any", - "All" - ], - "deprecations": [ - false, - false - ] - } - }, - { - "name": "include_no_tag", - "publicName": "include_no_tag", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "exclude_topic_ids", - "publicName": "exclude_topic_ids", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "dimensions", - "publicName": "dimensions", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "period", - "asset_name", - "date", - "model_id", - "topic_id", - "region_id", - "prompt_id", - "prompt" - ], - "names": [ - "Period", - "AssetName", - "Date", - "ModelId", - "TopicId", - "RegionId", - "PromptId", - "Prompt" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false - ] - } - } - }, - { - "name": "metrics", - "publicName": "metrics", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "visibility_score", - "share_of_voice", - "average_position", - "visibility_rank", - "average_position_rank", - "position1_percentage", - "position2_percentage", - "position3_percentage", - "position_above3_percentage", - "total_count" - ], - "names": [ - "VisibilityScore", - "ShareOfVoice", - "AveragePosition", - "VisibilityRank", - "AveragePositionRank", - "Position1Percentage", - "Position2Percentage", - "Position3Percentage", - "PositionAbove3Percentage", - "TotalCount" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false, - false - ] - } - } - }, - { - "name": "owned_asset_names", - "publicName": "owned_asset_names", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - } - }, - { - "name": "search_asset", - "publicName": "search_asset", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "include_asset", - "publicName": "include_asset", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "include_asset_only", - "publicName": "include_asset_only", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "include_assets_only", - "publicName": "include_assets_only", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - } - }, - { - "name": "rank_by", - "publicName": "rank_by", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "visibility_score", - "average_position" - ], - "names": [ - "VisibilityScore", - "AveragePosition" - ], - "deprecations": [ - false, - false - ] - } - }, - { - "name": "include_position_frequency", - "publicName": "include_position_frequency", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - } - ], - "additionalProperties": false - } - }, - { - "name": "StreamCitationsQuery", - "source": "StreamCitationsQuery", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "date_interval", - "publicName": "date_interval", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" - ], - "names": [ - "Hour", - "Day", - "Week", - "Month", - "Quarter", - "Year", - "RelativeWeek" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false - ] - } - }, - { - "name": "dimensions", - "publicName": "dimensions", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "hostname", - "path", - "date", - "region", - "topic", - "topic_id", - "model", - "tag", - "prompt", - "prompt_id", - "url", - "root_domain", - "persona", - "citation_category" - ], - "names": [ - "Hostname", - "Path", - "Date", - "Region", - "Topic", - "TopicId", - "Model", - "Tag", - "Prompt", - "PromptId", - "Url", - "RootDomain", - "Persona", - "CitationCategory" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false - ] - } - } - }, - { - "name": "metrics", - "publicName": "metrics", - "required": true, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "count", - "citation_share", - "share_of_voice", - "first_cited_at" - ], - "names": [ - "Count", - "CitationShare", - "ShareOfVoice", - "FirstCitedAt" - ], - "deprecations": [ - false, - false, - false, - false - ] - } - } - }, - { - "name": "order_by", - "publicName": "order_by", - "required": false, - "deprecated": false, - "type": { - "kind": "record", - "value": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" - ], - "deprecations": [ - false, - false - ] - }, - "propertyNames": { - "kind": "primitive", - "type": "string" - } - } - }, - { - "name": "pagination", - "publicName": "pagination", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "Pagination" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "category_id", - "publicName": "category_id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "start_date", - "publicName": "start_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "end_date", - "publicName": "end_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "filters", - "publicName": "filters", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "HostnameFilter" - }, - { - "kind": "ref", - "name": "PathFilter" - }, - { - "kind": "ref", - "name": "RegionIdFilter" - }, - { - "kind": "ref", - "name": "RegionNameFilter" - }, - { - "kind": "ref", - "name": "TopicIdFilter" - }, - { - "kind": "ref", - "name": "TopicNameFilter" - }, - { - "kind": "ref", - "name": "ModelIdFilter" - }, - { - "kind": "ref", - "name": "TagIdFilter" - }, - { - "kind": "ref", - "name": "TagNameFilter" - }, - { - "kind": "ref", - "name": "UrlFilter" - }, - { - "kind": "ref", - "name": "RootDomainFilter" - }, - { - "kind": "ref", - "name": "AnalysisTypeFilter" - }, - { - "kind": "ref", - "name": "PromptTypeFilter" - }, - { - "kind": "ref", - "name": "PersonaIdFilter" - }, - { - "kind": "ref", - "name": "CitationCategoryFilter" - }, - { - "kind": "ref", - "name": "PromptFilter" - }, - { - "kind": "ref", - "name": "PromptIdFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "analysis_type": "AnalysisTypeFilter", - "citation_category": "CitationCategoryFilter", - "hostname": "HostnameFilter", - "model": "ModelIdFilter", - "model_id": "ModelIdFilter", - "path": "PathFilter", - "persona_id": "PersonaIdFilter", - "prompt": "PromptFilter", - "prompt_id": "PromptIdFilter", - "prompt_type": "PromptTypeFilter", - "region": "RegionIdFilter", - "region_id": "RegionIdFilter", - "region_name": "RegionNameFilter", - "root_domain": "RootDomainFilter", - "tag": "TagIdFilter", - "tag_id": "TagIdFilter", - "tag_name": "TagNameFilter", - "topic": "TopicIdFilter", - "topic_id": "TopicIdFilter", - "topic_name": "TopicNameFilter", - "url": "UrlFilter" - } - }, - "variantNames": [ - "HostnameFilter", - "PathFilter", - "RegionIdFilter", - "RegionNameFilter", - "TopicIdFilter", - "TopicNameFilter", - "ModelIdFilter", - "TagIdFilter", - "TagNameFilter", - "UrlFilter", - "RootDomainFilter", - "AnalysisTypeFilter", - "PromptTypeFilter", - "PersonaIdFilter", - "CitationCategoryFilter", - "PromptFilter", - "PromptIdFilter" - ] - } - } - } - ], - "additionalProperties": false - } - }, - { - "name": "StreamSentimentQuery", - "source": "StreamSentimentQuery", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "date_interval", - "publicName": "date_interval", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" - ], - "names": [ - "Hour", - "Day", - "Week", - "Month", - "Quarter", - "Year", - "RelativeWeek" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false - ] - } - }, - { - "name": "dimensions", - "publicName": "dimensions", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "theme", - "date", - "region", - "topic", - "topic_id", - "model", - "asset_id", - "asset_name", - "tag", - "prompt", - "prompt_id", - "sentiment_type", - "persona" - ], - "names": [ - "Theme", - "Date", - "Region", - "Topic", - "TopicId", - "Model", - "AssetId", - "AssetName", - "Tag", - "Prompt", - "PromptId", - "SentimentType", - "Persona" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false - ] - } - } - }, - { - "name": "metrics", - "publicName": "metrics", - "required": true, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "positive", - "negative", - "occurrences" - ], - "names": [ - "Positive", - "Negative", - "Occurrences" - ], - "deprecations": [ - false, - false, - false - ] - } - } - }, - { - "name": "order_by", - "publicName": "order_by", - "required": false, - "deprecated": false, - "type": { - "kind": "record", - "value": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" - ], - "deprecations": [ - false, - false - ] - }, - "propertyNames": { - "kind": "primitive", - "type": "string" - } - } - }, - { - "name": "pagination", - "publicName": "pagination", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "Pagination" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "category_id", - "publicName": "category_id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "start_date", - "publicName": "start_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "end_date", - "publicName": "end_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "filters", - "publicName": "filters", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "AssetIdFilter" - }, - { - "kind": "ref", - "name": "ProfoundAnswerEngineInsightsFiltersAssetNameFilter" - }, - { - "kind": "ref", - "name": "ThemeFilter" - }, - { - "kind": "ref", - "name": "RegionIdFilter" - }, - { - "kind": "ref", - "name": "RegionNameFilter" - }, - { - "kind": "ref", - "name": "TopicIdFilter" - }, - { - "kind": "ref", - "name": "TopicNameFilter" - }, - { - "kind": "ref", - "name": "ModelIdFilter" - }, - { - "kind": "ref", - "name": "TagIdFilter" - }, - { - "kind": "ref", - "name": "TagNameFilter" - }, - { - "kind": "ref", - "name": "PromptFilter" - }, - { - "kind": "ref", - "name": "PersonaIdFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "asset_id": "AssetIdFilter", - "asset_name": "ProfoundAnswerEngineInsightsFiltersAssetNameFilter", - "model": "ModelIdFilter", - "model_id": "ModelIdFilter", - "persona_id": "PersonaIdFilter", - "prompt": "PromptFilter", - "region": "RegionIdFilter", - "region_id": "RegionIdFilter", - "region_name": "RegionNameFilter", - "tag": "TagIdFilter", - "tag_id": "TagIdFilter", - "tag_name": "TagNameFilter", - "theme": "ThemeFilter", - "topic": "TopicIdFilter", - "topic_id": "TopicIdFilter", - "topic_name": "TopicNameFilter" - } - }, - "variantNames": [ - "AssetIdFilter", - "AssetNameFilter", - "ThemeFilter", - "RegionIdFilter", - "RegionNameFilter", - "TopicIdFilter", - "TopicNameFilter", - "ModelIdFilter", - "TagIdFilter", - "TagNameFilter", - "PromptFilter", - "PersonaIdFilter" - ] - } - } - } - ], - "additionalProperties": false - } - }, - { - "name": "StreamVisibilityQuery", - "source": "StreamVisibilityQuery", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "date_interval", - "publicName": "date_interval", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" - ], - "names": [ - "Hour", - "Day", - "Week", - "Month", - "Quarter", - "Year", - "RelativeWeek" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false - ] - } - }, - { - "name": "dimensions", - "publicName": "dimensions", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "date", - "region", - "topic", - "topic_id", - "model", - "asset_id", - "asset_name", - "prompt", - "prompt_id", - "tag", - "persona" - ], - "names": [ - "Date", - "Region", - "Topic", - "TopicId", - "Model", - "AssetId", - "AssetName", - "Prompt", - "PromptId", - "Tag", - "Persona" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false - ] - } - } - }, - { - "name": "metrics", - "publicName": "metrics", - "required": true, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "share_of_voice", - "mentions_count", - "visibility_score", - "executions", - "average_position" - ], - "names": [ - "ShareOfVoice", - "MentionsCount", - "VisibilityScore", - "Executions", - "AveragePosition" - ], - "deprecations": [ - false, - false, - false, - false, - false - ] - } - } - }, - { - "name": "order_by", - "publicName": "order_by", - "required": false, - "deprecated": false, - "type": { - "kind": "record", - "value": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" - ], - "deprecations": [ - false, - false - ] - }, - "propertyNames": { - "kind": "primitive", - "type": "string" - } - } - }, - { - "name": "pagination", - "publicName": "pagination", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "Pagination" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "category_id", - "publicName": "category_id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "start_date", - "publicName": "start_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "end_date", - "publicName": "end_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "filters", - "publicName": "filters", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "RegionIdFilter" - }, - { - "kind": "ref", - "name": "RegionNameFilter" - }, - { - "kind": "ref", - "name": "ModelIdFilter" - }, - { - "kind": "ref", - "name": "TopicIdFilter" - }, - { - "kind": "ref", - "name": "TopicNameFilter" - }, - { - "kind": "ref", - "name": "ProfoundAnswerEngineInsightsFiltersAssetNameFilter" - }, - { - "kind": "ref", - "name": "TagIdFilter" - }, - { - "kind": "ref", - "name": "TagNameFilter" - }, - { - "kind": "ref", - "name": "PromptIdFilter" - }, - { - "kind": "ref", - "name": "PromptFilter" - }, - { - "kind": "ref", - "name": "PersonaIdFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "asset_name": "ProfoundAnswerEngineInsightsFiltersAssetNameFilter", - "model": "ModelIdFilter", - "model_id": "ModelIdFilter", - "persona_id": "PersonaIdFilter", - "prompt": "PromptFilter", - "prompt_id": "PromptIdFilter", - "region": "RegionIdFilter", - "region_id": "RegionIdFilter", - "region_name": "RegionNameFilter", - "tag": "TagIdFilter", - "tag_id": "TagIdFilter", - "tag_name": "TagNameFilter", - "topic": "TopicIdFilter", - "topic_id": "TopicIdFilter", - "topic_name": "TopicNameFilter" - } - }, - "variantNames": [ - "RegionIdFilter", - "RegionNameFilter", - "ModelIdFilter", - "TopicIdFilter", - "TopicNameFilter", - "AssetNameFilter", - "TagIdFilter", - "TagNameFilter", - "PromptIdFilter", - "PromptFilter", - "PersonaIdFilter" - ] - } - } - } - ], - "additionalProperties": false - } - }, - { - "name": "StreamWebSearchResultsQuery", - "source": "StreamWebSearchResultsQuery", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "date_interval", - "publicName": "date_interval", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" - ], - "names": [ - "Hour", - "Day", - "Week", - "Month", - "Quarter", - "Year", - "RelativeWeek" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false - ] - } - }, - { - "name": "dimensions", - "publicName": "dimensions", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "hostname", - "path", - "url", - "root_domain", - "date", - "region", - "topic", - "topic_id", - "model", - "tag", - "prompt", - "prompt_id", - "persona", - "search_query" - ], - "names": [ - "Hostname", - "Path", - "Url", - "RootDomain", - "Date", - "Region", - "Topic", - "TopicId", - "Model", - "Tag", - "Prompt", - "PromptId", - "Persona", - "SearchQuery" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false - ] - } - } - }, - { - "name": "metrics", - "publicName": "metrics", - "required": true, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "count", - "search_share" - ], - "names": [ - "Count", - "SearchShare" - ], - "deprecations": [ - false, - false - ] - }, - "validation": { - "minItems": 1 - } - } - }, - { - "name": "order_by", - "publicName": "order_by", - "required": false, - "deprecated": false, - "type": { - "kind": "record", - "value": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" - ], - "deprecations": [ - false, - false - ] - }, - "propertyNames": { - "kind": "primitive", - "type": "string" - } - } - }, - { - "name": "pagination", - "publicName": "pagination", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "Pagination" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "category_id", - "publicName": "category_id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "start_date", - "publicName": "start_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "end_date", - "publicName": "end_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "filters", - "publicName": "filters", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "HostnameFilter" - }, - { - "kind": "ref", - "name": "PathFilter" - }, - { - "kind": "ref", - "name": "RegionIdFilter" - }, - { - "kind": "ref", - "name": "TopicIdFilter" - }, - { - "kind": "ref", - "name": "ModelIdFilter" - }, - { - "kind": "ref", - "name": "TagIdFilter" - }, - { - "kind": "ref", - "name": "UrlFilter" - }, - { - "kind": "ref", - "name": "RootDomainFilter" - }, - { - "kind": "ref", - "name": "PersonaIdFilter" - }, - { - "kind": "ref", - "name": "PromptFilter" - }, - { - "kind": "ref", - "name": "PromptIdFilter" - }, - { - "kind": "ref", - "name": "SearchQueryFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "hostname": "HostnameFilter", - "model": "ModelIdFilter", - "model_id": "ModelIdFilter", - "path": "PathFilter", - "persona_id": "PersonaIdFilter", - "prompt": "PromptFilter", - "prompt_id": "PromptIdFilter", - "region": "RegionIdFilter", - "region_id": "RegionIdFilter", - "root_domain": "RootDomainFilter", - "search_query": "SearchQueryFilter", - "tag": "TagIdFilter", - "tag_id": "TagIdFilter", - "topic": "TopicIdFilter", - "topic_id": "TopicIdFilter", - "url": "UrlFilter" - } - }, - "variantNames": [ - "HostnameFilter", - "PathFilter", - "RegionIdFilter", - "TopicIdFilter", - "ModelIdFilter", - "TagIdFilter", - "UrlFilter", - "RootDomainFilter", - "PersonaIdFilter", - "PromptFilter", - "PromptIdFilter", - "SearchQueryFilter" - ] - } - } - } - ], - "additionalProperties": false - } - }, - { - "name": "Tag", - "source": "Tag", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "id", - "publicName": "id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "name", - "publicName": "name", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - } - ], - "additionalProperties": false - } - }, - { - "name": "TagIdFilter", - "source": "TagIdFilter", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "field", - "publicName": "field", - "required": true, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "literal", - "value": "tag_id" - }, - { - "kind": "literal", - "value": "tag" - } - ], - "variantNames": [ - null, - null - ] - } - }, - { - "name": "operator", - "publicName": "operator", - "required": true, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "is", - "not_is", - "in", - "not_in" - ], - "names": [ - "Is", - "NotIs", - "In", - "NotIn" - ], - "deprecations": [ - false, - false, - false, - false - ] - } - }, - { - "name": "value", - "publicName": "value", - "required": true, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "uuid" - }, - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - } - ], - "variantNames": [ - null, - null - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "TagNameFilter", - "source": "TagNameFilter", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "field", - "publicName": "field", - "required": true, - "deprecated": false, - "type": { - "kind": "literal", - "value": "tag_name" - } - }, - { - "name": "operator", - "publicName": "operator", - "required": true, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" - ], - "names": [ - "Is", - "NotIs", - "In", - "NotIn", - "Contains", - "NotContains", - "Matches", - "ContainsCaseInsensitive", - "NotContainsCaseInsensitive" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false - ] - } - }, - { - "name": "value", - "publicName": "value", - "required": true, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - } - ], - "variantNames": [ - null, - null - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "ThemeFilter", - "source": "ThemeFilter", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "field", - "publicName": "field", - "required": true, - "deprecated": false, - "type": { - "kind": "literal", - "value": "theme" - } - }, - { - "name": "operator", - "publicName": "operator", - "required": true, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" - ], - "names": [ - "Is", - "NotIs", - "In", - "NotIn", - "Contains", - "NotContains", - "Matches", - "ContainsCaseInsensitive", - "NotContainsCaseInsensitive" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false - ] - } - }, - { - "name": "value", - "publicName": "value", - "required": true, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - } - ], - "variantNames": [ - null, - null - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "TopInaccurateClaimRow", - "source": "TopInaccurateClaimRow", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "clusterId", - "publicName": "clusterId", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "canonicalClaim", - "publicName": "canonicalClaim", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "claimOccurrence", - "publicName": "claimOccurrence", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "number" - } - }, - { - "name": "claimOccurrenceDelta", - "publicName": "claimOccurrenceDelta", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "null" - } - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "TopInaccurateClaimsQuery", - "source": "TopInaccurateClaimsQuery", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "start_date", - "publicName": "start_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "end_date", - "publicName": "end_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "comparison_start_date", - "publicName": "comparison_start_date", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "comparison_end_date", - "publicName": "comparison_end_date", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "category_id", - "publicName": "category_id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "topic_ids", - "publicName": "topic_ids", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "exclude_topic_ids", - "publicName": "exclude_topic_ids", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "tag_ids", - "publicName": "tag_ids", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "tag_filter_type", - "publicName": "tag_filter_type", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "all", - "any" - ], - "names": [ - "All", - "Any" - ], - "deprecations": [ - false, - false - ] - } - }, - { - "name": "include_no_tag", - "publicName": "include_no_tag", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "region_ids", - "publicName": "region_ids", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "platform_ids", - "publicName": "platform_ids", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "persona_ids", - "publicName": "persona_ids", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "include_no_persona", - "publicName": "include_no_persona", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "prompt_ids", - "publicName": "prompt_ids", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "citation_categories", - "publicName": "citation_categories", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "limit", - "publicName": "limit", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer", - "validation": {} - } - } - ], - "additionalProperties": false - } - }, - { - "name": "TopInaccurateClaimsResponse", - "source": "TopInaccurateClaimsResponse", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "data", - "publicName": "data", - "required": true, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "TopInaccurateClaimRow" - } - } - } - ], - "additionalProperties": false - } - }, - { - "name": "Topic", - "source": "Topic", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "id", - "publicName": "id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "name", - "publicName": "name", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "status", - "publicName": "status", - "required": true, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "active", - "disabled" - ], - "names": [ - "Active", - "Disabled" - ], - "deprecations": [ - false, - false - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "TopicIdFilter", - "source": "TopicIdFilter", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "field", - "publicName": "field", - "required": true, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "literal", - "value": "topic_id" - }, - { - "kind": "literal", - "value": "topic" - } - ], - "variantNames": [ - null, - null - ] - } - }, - { - "name": "operator", - "publicName": "operator", - "required": true, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "is", - "not_is", - "in", - "not_in" - ], - "names": [ - "Is", - "NotIs", - "In", - "NotIn" - ], - "deprecations": [ - false, - false, - false, - false - ] - } - }, - { - "name": "value", - "publicName": "value", - "required": true, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string", - "format": "uuid" - }, - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - } - ], - "variantNames": [ - null, - null - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "TopicInput", - "source": "TopicInput", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "id", - "publicName": "id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "name", - "publicName": "name", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - } - ], - "additionalProperties": false - } - }, - { - "name": "TopicNameFilter", - "source": "TopicNameFilter", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "field", - "publicName": "field", - "required": true, - "deprecated": false, - "type": { - "kind": "literal", - "value": "topic_name" - } - }, - { - "name": "operator", - "publicName": "operator", - "required": true, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" - ], - "names": [ - "Is", - "NotIs", - "In", - "NotIn", - "Contains", - "NotContains", - "Matches", - "ContainsCaseInsensitive", - "NotContainsCaseInsensitive" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false - ] - } - }, - { - "name": "value", - "publicName": "value", - "required": true, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - } - ], - "variantNames": [ - null, - null - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "UpdateAgentRequest", - "source": "UpdateAgentRequest", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "graph", - "publicName": "graph", - "required": true, - "deprecated": false, - "type": { - "kind": "object", - "properties": [], - "additionalProperties": { - "kind": "unknown" - } - } - } - ], - "additionalProperties": false - } - }, - { - "name": "UpdatePromptInput", - "source": "UpdatePromptInput", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "id", - "publicName": "id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "prompt", - "publicName": "prompt", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "topic", - "publicName": "topic", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "IdOrName" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "language", - "publicName": "language", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "tags", - "publicName": "tags", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "ref", - "name": "IdOrName" - } - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "regions", - "publicName": "regions", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "ref", - "name": "IdOrName" - } - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "platforms", - "publicName": "platforms", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "ref", - "name": "IdOrName" - } - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "personas", - "publicName": "personas", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "ref", - "name": "IdOrName" - } - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "analysis_types", - "publicName": "analysis_types", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "visibility", - "sentiment", - "sentiment_v2", - "accuracy" - ], - "names": [ - "Visibility", - "Sentiment", - "SentimentV2", - "Accuracy" - ], - "deprecations": [ - false, - false, - false, - false - ] - } - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "prompt_type", - "publicName": "prompt_type", - "required": false, - "deprecated": true, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "asset", - "publicName": "asset", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "IdOrName" - }, - { - "kind": "null" - } - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "UpdatePromptStatusBody", - "source": "UpdatePromptStatusBody", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "prompt_ids", - "publicName": "prompt_ids", - "required": true, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - } - }, - { - "name": "status", - "publicName": "status", - "required": true, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "active", - "disabled", - "deleted" - ], - "names": [ - "Active", - "Disabled", - "Deleted" - ], - "deprecations": [ - false, - false, - false - ] - } - }, - { - "name": "dry_run", - "publicName": "dry_run", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - } - ], - "additionalProperties": false - } - }, - { - "name": "UpdatePromptStatusResponse", - "source": "UpdatePromptStatusResponse", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "dry_run", - "publicName": "dry_run", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "updated_prompts", - "publicName": "updated_prompts", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer" - } - } - ], - "additionalProperties": false - } - }, - { - "name": "UpdatePromptsBody", - "source": "UpdatePromptsBody", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "prompts", - "publicName": "prompts", - "required": true, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "UpdatePromptInput" - } - } - }, - { - "name": "dry_run", - "publicName": "dry_run", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - } - ], - "additionalProperties": false - } - }, - { - "name": "UpdatePromptsResponse", - "source": "UpdatePromptsResponse", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "dry_run", - "publicName": "dry_run", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "boolean" - } - }, - { - "name": "updated", - "publicName": "updated", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer" - } - }, - { - "name": "topics_created", - "publicName": "topics_created", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer" - } - }, - { - "name": "tags_created", - "publicName": "tags_created", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "integer" - } - }, - { - "name": "prompts", - "publicName": "prompts", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "PromptUpdatePreview" - } - } - } - ], - "additionalProperties": false - } - }, - { - "name": "UrlFilter", - "source": "UrlFilter", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "field", - "publicName": "field", - "required": true, - "deprecated": false, - "type": { - "kind": "literal", - "value": "url" - } - }, - { - "name": "operator", - "publicName": "operator", - "required": true, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" - ], - "names": [ - "Is", - "NotIs", - "In", - "NotIn", - "Contains", - "NotContains", - "Matches", - "ContainsCaseInsensitive", - "NotContainsCaseInsensitive" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false - ] - } - }, - { - "name": "value", - "publicName": "value", - "required": true, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - } - ], - "variantNames": [ - null, - null - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "UserInput", - "source": "UserInput", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "type", - "publicName": "type", - "required": true, - "deprecated": false, - "type": { - "kind": "ref", - "name": "ContentType" - } - }, - { - "name": "value", - "publicName": "value", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "metadata", - "publicName": "metadata", - "required": true, - "deprecated": false, - "type": { - "kind": "record", - "value": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "integer" - }, - { - "kind": "primitive", - "type": "string" - } - ], - "variantNames": [ - null, - null - ] - }, - "propertyNames": { - "kind": "primitive", - "type": "string" - } - } - } - ], - "additionalProperties": false - } - }, - { - "name": "ValidationError", - "source": "ValidationError", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "loc", - "publicName": "loc", - "required": true, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "primitive", - "type": "integer" - } - ], - "variantNames": [ - null, - null - ] - } - } - }, - { - "name": "msg", - "publicName": "msg", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "type", - "publicName": "type", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "input", - "publicName": "input", - "required": false, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "ctx", - "publicName": "ctx", - "required": false, - "deprecated": false, - "type": { - "kind": "object", - "properties": [], - "additionalProperties": false - } - } - ], - "additionalProperties": false - } - }, - { - "name": "VisibilityQuery", - "source": "VisibilityQuery", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "date_interval", - "publicName": "date_interval", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" - ], - "names": [ - "Hour", - "Day", - "Week", - "Month", - "Quarter", - "Year", - "RelativeWeek" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false - ] - } - }, - { - "name": "dimensions", - "publicName": "dimensions", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "date", - "region", - "topic", - "topic_id", - "model", - "asset_id", - "asset_name", - "prompt", - "prompt_id", - "tag", - "persona" - ], - "names": [ - "Date", - "Region", - "Topic", - "TopicId", - "Model", - "AssetId", - "AssetName", - "Prompt", - "PromptId", - "Tag", - "Persona" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false - ] - } - } - }, - { - "name": "metrics", - "publicName": "metrics", - "required": true, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "share_of_voice", - "mentions_count", - "visibility_score", - "executions", - "average_position" - ], - "names": [ - "ShareOfVoice", - "MentionsCount", - "VisibilityScore", - "Executions", - "AveragePosition" - ], - "deprecations": [ - false, - false, - false, - false, - false - ] - } - } - }, - { - "name": "order_by", - "publicName": "order_by", - "required": false, - "deprecated": false, - "type": { - "kind": "record", - "value": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" - ], - "deprecations": [ - false, - false - ] - }, - "propertyNames": { - "kind": "primitive", - "type": "string" - } - } - }, - { - "name": "pagination", - "publicName": "pagination", - "required": false, - "deprecated": false, - "type": { - "kind": "ref", - "name": "Pagination" - } - }, - { - "name": "category_id", - "publicName": "category_id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "start_date", - "publicName": "start_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "end_date", - "publicName": "end_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "filters", - "publicName": "filters", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "RegionIdFilter" - }, - { - "kind": "ref", - "name": "RegionNameFilter" - }, - { - "kind": "ref", - "name": "ModelIdFilter" - }, - { - "kind": "ref", - "name": "TopicIdFilter" - }, - { - "kind": "ref", - "name": "TopicNameFilter" - }, - { - "kind": "ref", - "name": "ProfoundAnswerEngineInsightsFiltersAssetNameFilter" - }, - { - "kind": "ref", - "name": "TagIdFilter" - }, - { - "kind": "ref", - "name": "TagNameFilter" - }, - { - "kind": "ref", - "name": "PromptIdFilter" - }, - { - "kind": "ref", - "name": "PromptFilter" - }, - { - "kind": "ref", - "name": "PersonaIdFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "asset_name": "ProfoundAnswerEngineInsightsFiltersAssetNameFilter", - "model": "ModelIdFilter", - "model_id": "ModelIdFilter", - "persona_id": "PersonaIdFilter", - "prompt": "PromptFilter", - "prompt_id": "PromptIdFilter", - "region": "RegionIdFilter", - "region_id": "RegionIdFilter", - "region_name": "RegionNameFilter", - "tag": "TagIdFilter", - "tag_id": "TagIdFilter", - "tag_name": "TagNameFilter", - "topic": "TopicIdFilter", - "topic_id": "TopicIdFilter", - "topic_name": "TopicNameFilter" - } - }, - "variantNames": [ - "RegionIdFilter", - "RegionNameFilter", - "ModelIdFilter", - "TopicIdFilter", - "TopicNameFilter", - "AssetNameFilter", - "TagIdFilter", - "TagNameFilter", - "PromptIdFilter", - "PromptFilter", - "PersonaIdFilter" - ] - } - } - } - ], - "additionalProperties": false - } - }, - { - "name": "VisibilityV2Query", - "source": "VisibilityV2Query", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "category_id", - "publicName": "category_id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "start_date", - "publicName": "start_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "end_date", - "publicName": "end_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "group_by", - "publicName": "group_by", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "date", - "model", - "topic", - "region", - "prompt", - "persona" - ], - "names": [ - "Date", - "Model", - "Topic", - "Region", - "Prompt", - "Persona" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false - ] - } - } - }, - { - "name": "metrics", - "publicName": "metrics", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "visibility_score", - "share_of_voice", - "average_position" - ], - "names": [ - "VisibilityScore", - "ShareOfVoice", - "AveragePosition" - ], - "deprecations": [ - false, - false, - false - ] - } - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "interval", - "publicName": "interval", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "day", - "week", - "month" - ], - "names": [ - "Day", - "Week", - "Month" - ], - "deprecations": [ - false, - false, - false - ] - } - }, - { - "name": "scope", - "publicName": "scope", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "owned", - "all" - ], - "names": [ - "Owned", - "All" - ], - "deprecations": [ - false, - false - ] - } - }, - { - "name": "assets", - "publicName": "assets", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - }, - { - "kind": "ref", - "name": "EntityFilterClause" - } - ], - "variantNames": [ - null, - null, - "EntityFilterClause" - ] - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "filter", - "publicName": "filter", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "FilterNode" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "sort", - "publicName": "sort", - "required": false, - "deprecated": false, - "type": { - "kind": "ref", - "name": "AppRoutesV2AnswerEngineInsightsReportsVisibilitySortSpec" - } - }, - { - "name": "limit", - "publicName": "limit", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "integer", - "validation": {} - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "max_results", - "publicName": "max_results", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "integer" - }, - { - "kind": "null" - } - ] - } - }, - { - "name": "cursor", - "publicName": "cursor", - "required": false, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "null" - } - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "WebSearchResultsQuery", - "source": "WebSearchResultsQuery", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "date_interval", - "publicName": "date_interval", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "hour", - "day", - "week", - "month", - "quarter", - "year", - "relative_week" - ], - "names": [ - "Hour", - "Day", - "Week", - "Month", - "Quarter", - "Year", - "RelativeWeek" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false - ] - } - }, - { - "name": "dimensions", - "publicName": "dimensions", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "hostname", - "path", - "url", - "root_domain", - "date", - "region", - "topic", - "topic_id", - "model", - "tag", - "prompt", - "prompt_id", - "persona", - "search_query" - ], - "names": [ - "Hostname", - "Path", - "Url", - "RootDomain", - "Date", - "Region", - "Topic", - "TopicId", - "Model", - "Tag", - "Prompt", - "PromptId", - "Persona", - "SearchQuery" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false - ] - } - } - }, - { - "name": "metrics", - "publicName": "metrics", - "required": true, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "enum", - "values": [ - "count", - "search_share" - ], - "names": [ - "Count", - "SearchShare" - ], - "deprecations": [ - false, - false - ] - }, - "validation": { - "minItems": 1 - } - } - }, - { - "name": "order_by", - "publicName": "order_by", - "required": false, - "deprecated": false, - "type": { - "kind": "record", - "value": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" - ], - "deprecations": [ - false, - false - ] - }, - "propertyNames": { - "kind": "primitive", - "type": "string" - } - } - }, - { - "name": "pagination", - "publicName": "pagination", - "required": false, - "deprecated": false, - "type": { - "kind": "ref", - "name": "Pagination" - } - }, - { - "name": "category_id", - "publicName": "category_id", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - }, - { - "name": "start_date", - "publicName": "start_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "end_date", - "publicName": "end_date", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string", - "format": "date-time" - } - }, - { - "name": "filters", - "publicName": "filters", - "required": false, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "union", - "variants": [ - { - "kind": "ref", - "name": "HostnameFilter" - }, - { - "kind": "ref", - "name": "PathFilter" - }, - { - "kind": "ref", - "name": "RegionIdFilter" - }, - { - "kind": "ref", - "name": "TopicIdFilter" - }, - { - "kind": "ref", - "name": "ModelIdFilter" - }, - { - "kind": "ref", - "name": "TagIdFilter" - }, - { - "kind": "ref", - "name": "UrlFilter" - }, - { - "kind": "ref", - "name": "RootDomainFilter" - }, - { - "kind": "ref", - "name": "PersonaIdFilter" - }, - { - "kind": "ref", - "name": "PromptFilter" - }, - { - "kind": "ref", - "name": "PromptIdFilter" - }, - { - "kind": "ref", - "name": "SearchQueryFilter" - } - ], - "discriminator": { - "propertyName": "field", - "mapping": { - "hostname": "HostnameFilter", - "model": "ModelIdFilter", - "model_id": "ModelIdFilter", - "path": "PathFilter", - "persona_id": "PersonaIdFilter", - "prompt": "PromptFilter", - "prompt_id": "PromptIdFilter", - "region": "RegionIdFilter", - "region_id": "RegionIdFilter", - "root_domain": "RootDomainFilter", - "search_query": "SearchQueryFilter", - "tag": "TagIdFilter", - "tag_id": "TagIdFilter", - "topic": "TopicIdFilter", - "topic_id": "TopicIdFilter", - "url": "UrlFilter" - } - }, - "variantNames": [ - "HostnameFilter", - "PathFilter", - "RegionIdFilter", - "TopicIdFilter", - "ModelIdFilter", - "TagIdFilter", - "UrlFilter", - "RootDomainFilter", - "PersonaIdFilter", - "PromptFilter", - "PromptIdFilter", - "SearchQueryFilter" - ] - } - } - } - ], - "additionalProperties": false - } - }, - { - "name": "WebSearchResultsResponse", - "source": "WebSearchResultsResponse", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "info", - "publicName": "info", - "required": true, - "deprecated": false, - "type": { - "kind": "ref", - "name": "ReportInfo" - } - }, - { - "name": "data", - "publicName": "data", - "required": true, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "ref", - "name": "WebSearchResultsResult" - } - } - } - ], - "additionalProperties": false - } - }, - { - "name": "WebSearchResultsResult", - "source": "WebSearchResultsResult", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "metrics", - "publicName": "metrics", - "required": true, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "integer" - }, - { - "kind": "primitive", - "type": "number" - } - ], - "variantNames": [ - null, - null - ] - } - } - }, - { - "name": "dimensions", - "publicName": "dimensions", - "required": true, - "deprecated": false, - "type": { - "kind": "array", - "items": { - "kind": "union", - "variants": [ - { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "primitive", - "type": "string", - "format": "uuid" - } - ], - "variantNames": [ - null, - null - ] - }, - { - "kind": "null" - } - ] - } - } - } - ], - "additionalProperties": false - } - }, - { - "name": "AppRoutesV2AnswerEngineInsightsReportsQueryFanoutsSortSpec", - "source": "AppRoutesV2AnswerEngineInsightsReportsQueryFanoutsSortSpec", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "field", - "publicName": "field", - "required": true, - "deprecated": false, - "type": { - "kind": "primitive", - "type": "string" - } - }, - { - "name": "dir", - "publicName": "dir", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" - ], - "deprecations": [ - false, - false - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "AppRoutesV2AnswerEngineInsightsReportsSentimentSortSpec", - "source": "AppRoutesV2AnswerEngineInsightsReportsSentimentSortSpec", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "field", - "publicName": "field", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "occurrence", - "positive_sentiment", - "negative_sentiment" - ], - "names": [ - "Occurrence", - "PositiveSentiment", - "NegativeSentiment" - ], - "deprecations": [ - false, - false, - false - ] - } - }, - { - "name": "dir", - "publicName": "dir", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "asc", - "desc" - ], - "names": [ - "Asc", - "Desc" - ], - "deprecations": [ - false, - false - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "AppRoutesV2AnswerEngineInsightsReportsVisibilitySortSpec", - "source": "AppRoutesV2AnswerEngineInsightsReportsVisibilitySortSpec", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "field", - "publicName": "field", - "required": false, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "visibility_score", - "share_of_voice", - "average_position" - ], - "names": [ - "VisibilityScore", - "ShareOfVoice", - "AveragePosition" - ], - "deprecations": [ - false, - false, - false - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "ProfoundAnswerEngineInsightsFiltersAssetNameFilter", - "source": "ProfoundAnswerEngineInsightsFiltersAssetNameFilter", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "field", - "publicName": "field", - "required": true, - "deprecated": false, - "type": { - "kind": "literal", - "value": "asset_name" - } - }, - { - "name": "operator", - "publicName": "operator", - "required": true, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" - ], - "names": [ - "Is", - "NotIs", - "In", - "NotIn", - "Contains", - "NotContains", - "Matches", - "ContainsCaseInsensitive", - "NotContainsCaseInsensitive" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false - ] - } - }, - { - "name": "value", - "publicName": "value", - "required": true, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - } - ], - "variantNames": [ - null, - null - ] - } - } - ], - "additionalProperties": false - } - }, - { - "name": "ProfoundShoppingApiAssetNameFilter", - "source": "ProfoundShoppingApiAssetNameFilter", - "publicAliases": [], - "deprecated": false, - "type": { - "kind": "object", - "properties": [ - { - "name": "field", - "publicName": "field", - "required": true, - "deprecated": false, - "type": { - "kind": "literal", - "value": "asset_name" - } - }, - { - "name": "operator", - "publicName": "operator", - "required": true, - "deprecated": false, - "type": { - "kind": "enum", - "values": [ - "is", - "not_is", - "in", - "not_in", - "contains", - "not_contains", - "matches", - "contains_case_insensitive", - "not_contains_case_insensitive" - ], - "names": [ - "Is", - "NotIs", - "In", - "NotIn", - "Contains", - "NotContains", - "Matches", - "ContainsCaseInsensitive", - "NotContainsCaseInsensitive" - ], - "deprecations": [ - false, - false, - false, - false, - false, - false, - false, - false, - false - ] - } - }, - { - "name": "value", - "publicName": "value", - "required": true, - "deprecated": false, - "type": { - "kind": "union", - "variants": [ - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "array", - "items": { - "kind": "primitive", - "type": "string" - } - } - ], - "variantNames": [ - null, - null - ] - } - } - ], - "additionalProperties": false - } - } - ], - "resources": [ - "organization", - "prompts", - "prompts.answers", - "reports", - "reports.citations", - "reports.visibility", - "reports.sentiment", - "reports.webSearchResults", - "reports.referrals", - "reports.bots", - "reports.queryFanouts", - "reports.shopping", - "reports.accuracy", - "content", - "content.optimization", - "knowledgeBases", - "knowledgeBases.documents", - "knowledgeBases.folders", - "agents", - "agents.nodeTypes", - "agents.runs", - "organizations", - "organizations.categories" - ], - "publicResources": [ - "organization", - "prompts", - "prompts.answers", - "reports", - "reports.citations", - "reports.visibility", - "reports.sentiment", - "reports.webSearchResults", - "reports.referrals", - "reports.bots", - "reports.queryFanouts", - "reports.shopping", - "reports.accuracy", - "content", - "content.optimization", - "knowledgeBases", - "knowledgeBases.documents", - "knowledgeBases.folders", - "agents", - "agents.nodeTypes", - "agents.runs", - "organizations", - "organizations.categories" - ], - "operations": [ - { - "resource": "organization", - "publicResource": "organization", - "operation": "listCategoryRegionsV1OrgCategoriesCategoryRegionsGet", - "publicOperation": "listCategoryRegionsV1OrgCategoriesCategoryRegionsGet", - "deprecated": false, - "method": "GET", - "path": "/v1/org/categories/{category_id}/regions", - "pathParams": [ - "category_id" - ], - "publicPathParams": [ - "category_id" - ], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [], - "publicBodyParams": [], - "pathParamDetails": [ - { - "name": "category_id", - "required": true, - "style": "simple", - "explode": false - } - ], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "OrganizationListCategoryRegionsV1OrgCategoriesCategoryRegionsGetParams" - }, - "response": { - "status": "200", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http" - }, - { - "resource": "prompts.answers", - "publicResource": "prompts.answers", - "operation": "createV1PromptsPost", - "publicOperation": "createV1PromptsPost", - "deprecated": false, - "method": "POST", - "path": "/v1/prompts/answers", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "category_id", - "start_date", - "end_date", - "pagination", - "filters", - "include" - ], - "publicBodyParams": [ - "category_id", - "start_date", - "end_date", - "pagination", - "filters", - "include" - ], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "AnswerCreateV1PromptsPostParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, - "response": { - "status": "200", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ] - }, - "responseModel": { - "name": "AnswersResponse", - "publicAliases": [] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http" - }, - { - "resource": "prompts.answers", - "publicResource": "prompts.answers", - "operation": "queryV2V2PromptsPost", - "publicOperation": "queryV2V2PromptsPost", - "deprecated": false, - "method": "POST", - "path": "/v2/prompts/answers", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "category_id", - "start_date", - "end_date", - "include", - "filter", - "limit", - "max_results", - "cursor" - ], - "publicBodyParams": [ - "category_id", - "start_date", - "end_date", - "include", - "filter", - "limit", - "max_results", - "cursor" - ], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "AnswerQueryV2V2PromptsPostParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, - "response": { - "status": "200", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http" - }, - { - "resource": "prompts.answers", - "publicResource": "prompts.answers", - "operation": "streamV2V2PromptsStreamPost", - "publicOperation": "streamV2V2PromptsStreamPost", - "deprecated": false, - "method": "POST", - "path": "/v2/prompts/answers/stream", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "category_id", - "start_date", - "end_date", - "include", - "filter", - "limit", - "max_results", - "cursor" - ], - "publicBodyParams": [ - "category_id", - "start_date", - "end_date", - "include", - "filter", - "limit", - "max_results", - "cursor" - ], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "AnswerStreamV2V2PromptsStreamPostParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, - "response": { - "status": "200", - "contentType": "text/event-stream", - "encoding": "text", - "contents": [ - { - "contentType": "text/event-stream", - "encoding": "text" - } - ] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http", - "streaming": "sse" - }, - { - "resource": "reports", - "publicResource": "reports", - "operation": "querySentimentV2V1SentimentV2Post", - "publicOperation": "querySentimentV2V1SentimentV2Post", - "deprecated": false, - "method": "POST", - "path": "/v1/reports/sentiment-v2", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "category_id", - "asset_name", - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "date_interval", - "dimensions", - "metrics", - "filters", - "order_by", - "pagination" - ], - "publicBodyParams": [ - "category_id", - "asset_name", - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "date_interval", - "dimensions", - "metrics", - "filters", - "order_by", - "pagination" - ], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "ReportQuerySentimentV2V1SentimentV2PostParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, - "response": { - "status": "200", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ] - }, - "responseModel": { - "name": "SentimentV2ReportResponse", - "publicAliases": [] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http" - }, - { - "resource": "reports.citations", - "publicResource": "reports.citations", - "operation": "queryV1ReportsPost", - "publicOperation": "queryV1ReportsPost", - "deprecated": false, - "method": "POST", - "path": "/v1/reports/citations", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "date_interval", - "dimensions", - "metrics", - "order_by", - "pagination", - "category_id", - "start_date", - "end_date", - "filters" - ], - "publicBodyParams": [ - "date_interval", - "dimensions", - "metrics", - "order_by", - "pagination", - "category_id", - "start_date", - "end_date", - "filters" - ], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "CitationQueryV1ReportsPostParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, - "response": { - "status": "200", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ] - }, - "responseModel": { - "name": "CitationsResponse", - "publicAliases": [] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http" - }, - { - "resource": "reports.citations", - "publicResource": "reports.citations", - "operation": "streamV1ReportsStreamPost", - "publicOperation": "streamV1ReportsStreamPost", - "deprecated": false, - "method": "POST", - "path": "/v1/reports/citations/stream", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "date_interval", - "dimensions", - "metrics", - "order_by", - "pagination", - "category_id", - "start_date", - "end_date", - "filters" - ], - "publicBodyParams": [ - "date_interval", - "dimensions", - "metrics", - "order_by", - "pagination", - "category_id", - "start_date", - "end_date", - "filters" - ], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "CitationStreamV1ReportsStreamPostParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, - "response": { - "status": "200", - "contentType": "text/event-stream", - "encoding": "text", - "contents": [ - { - "contentType": "text/event-stream", - "encoding": "text" - } - ] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http", - "streaming": "sse" - }, - { - "resource": "reports.citations", - "publicResource": "reports.citations", - "operation": "queryV2V2ReportsPost", - "publicOperation": "queryV2V2ReportsPost", - "deprecated": false, - "method": "POST", - "path": "/v2/reports/citations", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "category_id", - "start_date", - "end_date", - "group_by", - "metrics", - "interval", - "scope", - "filter", - "limit", - "max_results", - "cursor" - ], - "publicBodyParams": [ - "category_id", - "start_date", - "end_date", - "group_by", - "metrics", - "interval", - "scope", - "filter", - "limit", - "max_results", - "cursor" - ], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "CitationQueryV2V2ReportsPostParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, - "response": { - "status": "200", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http" - }, - { - "resource": "reports.citations", - "publicResource": "reports.citations", - "operation": "streamV2V2ReportsStreamPost", - "publicOperation": "streamV2V2ReportsStreamPost", - "deprecated": false, - "method": "POST", - "path": "/v2/reports/citations/stream", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "category_id", - "start_date", - "end_date", - "group_by", - "metrics", - "interval", - "scope", - "filter", - "limit", - "max_results", - "cursor" - ], - "publicBodyParams": [ - "category_id", - "start_date", - "end_date", - "group_by", - "metrics", - "interval", - "scope", - "filter", - "limit", - "max_results", - "cursor" - ], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "CitationStreamV2V2ReportsStreamPostParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, - "response": { - "status": "200", - "contentType": "text/event-stream", - "encoding": "text", - "contents": [ - { - "contentType": "text/event-stream", - "encoding": "text" - } - ] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http", - "streaming": "sse" - }, - { - "resource": "reports.visibility", - "publicResource": "reports.visibility", - "operation": "queryV1ReportsPost", - "publicOperation": "queryV1ReportsPost", - "deprecated": false, - "method": "POST", - "path": "/v1/reports/visibility", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "date_interval", - "dimensions", - "metrics", - "order_by", - "pagination", - "category_id", - "start_date", - "end_date", - "filters" - ], - "publicBodyParams": [ - "date_interval", - "dimensions", - "metrics", - "order_by", - "pagination", - "category_id", - "start_date", - "end_date", - "filters" - ], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "VisibilityQueryV1ReportsPostParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, - "response": { - "status": "200", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ] - }, - "responseModel": { - "name": "ReportResponse", - "publicAliases": [] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http" - }, - { - "resource": "reports.visibility", - "publicResource": "reports.visibility", - "operation": "streamV1ReportsStreamPost", - "publicOperation": "streamV1ReportsStreamPost", - "deprecated": false, - "method": "POST", - "path": "/v1/reports/visibility/stream", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "date_interval", - "dimensions", - "metrics", - "order_by", - "pagination", - "category_id", - "start_date", - "end_date", - "filters" - ], - "publicBodyParams": [ - "date_interval", - "dimensions", - "metrics", - "order_by", - "pagination", - "category_id", - "start_date", - "end_date", - "filters" - ], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "VisibilityStreamV1ReportsStreamPostParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, - "response": { - "status": "200", - "contentType": "text/event-stream", - "encoding": "text", - "contents": [ - { - "contentType": "text/event-stream", - "encoding": "text" - } - ] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http", - "streaming": "sse" - }, - { - "resource": "reports.visibility", - "publicResource": "reports.visibility", - "operation": "queryV2V2ReportsPost", - "publicOperation": "queryV2V2ReportsPost", - "deprecated": false, - "method": "POST", - "path": "/v2/reports/visibility", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "category_id", - "start_date", - "end_date", - "group_by", - "metrics", - "interval", - "scope", - "assets", - "filter", - "sort", - "limit", - "max_results", - "cursor" - ], - "publicBodyParams": [ - "category_id", - "start_date", - "end_date", - "group_by", - "metrics", - "interval", - "scope", - "assets", - "filter", - "sort", - "limit", - "max_results", - "cursor" - ], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "VisibilityQueryV2V2ReportsPostParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, - "response": { - "status": "200", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http" - }, - { - "resource": "reports.visibility", - "publicResource": "reports.visibility", - "operation": "streamV2V2ReportsStreamPost", - "publicOperation": "streamV2V2ReportsStreamPost", - "deprecated": false, - "method": "POST", - "path": "/v2/reports/visibility/stream", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "category_id", - "start_date", - "end_date", - "group_by", - "metrics", - "interval", - "scope", - "assets", - "filter", - "sort", - "limit", - "max_results", - "cursor" - ], - "publicBodyParams": [ - "category_id", - "start_date", - "end_date", - "group_by", - "metrics", - "interval", - "scope", - "assets", - "filter", - "sort", - "limit", - "max_results", - "cursor" - ], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "VisibilityStreamV2V2ReportsStreamPostParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, - "response": { - "status": "200", - "contentType": "text/event-stream", - "encoding": "text", - "contents": [ - { - "contentType": "text/event-stream", - "encoding": "text" - } - ] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http", - "streaming": "sse" - }, - { - "resource": "reports.sentiment", - "publicResource": "reports.sentiment", - "operation": "queryV1ReportsPost", - "publicOperation": "queryV1ReportsPost", - "deprecated": false, - "method": "POST", - "path": "/v1/reports/sentiment", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "date_interval", - "dimensions", - "metrics", - "order_by", - "pagination", - "category_id", - "start_date", - "end_date", - "filters" - ], - "publicBodyParams": [ - "date_interval", - "dimensions", - "metrics", - "order_by", - "pagination", - "category_id", - "start_date", - "end_date", - "filters" - ], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "SentimentQueryV1ReportsPostParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, - "response": { - "status": "200", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ] - }, - "responseModel": { - "name": "ReportResponse", - "publicAliases": [] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http" - }, - { - "resource": "reports.sentiment", - "publicResource": "reports.sentiment", - "operation": "streamV1ReportsStreamPost", - "publicOperation": "streamV1ReportsStreamPost", - "deprecated": false, - "method": "POST", - "path": "/v1/reports/sentiment/stream", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "date_interval", - "dimensions", - "metrics", - "order_by", - "pagination", - "category_id", - "start_date", - "end_date", - "filters" - ], - "publicBodyParams": [ - "date_interval", - "dimensions", - "metrics", - "order_by", - "pagination", - "category_id", - "start_date", - "end_date", - "filters" - ], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "SentimentStreamV1ReportsStreamPostParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, - "response": { - "status": "200", - "contentType": "text/event-stream", - "encoding": "text", - "contents": [ - { - "contentType": "text/event-stream", - "encoding": "text" - } - ] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http", - "streaming": "sse" - }, - { - "resource": "reports.sentiment", - "publicResource": "reports.sentiment", - "operation": "queryV2V2ReportsPost", - "publicOperation": "queryV2V2ReportsPost", - "deprecated": false, - "method": "POST", - "path": "/v2/reports/sentiment", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "category_id", - "asset", - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "group_by", - "metrics", - "interval", - "filter", - "sort", - "include_cited_websites", - "limit", - "max_results", - "cursor" - ], - "publicBodyParams": [ - "category_id", - "asset", - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "group_by", - "metrics", - "interval", - "filter", - "sort", - "include_cited_websites", - "limit", - "max_results", - "cursor" - ], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "SentimentQueryV2V2ReportsPostParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, - "response": { - "status": "200", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http" - }, - { - "resource": "reports.sentiment", - "publicResource": "reports.sentiment", - "operation": "streamV2V2ReportsStreamPost", - "publicOperation": "streamV2V2ReportsStreamPost", - "deprecated": false, - "method": "POST", - "path": "/v2/reports/sentiment/stream", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "category_id", - "asset", - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "group_by", - "metrics", - "interval", - "filter", - "sort", - "include_cited_websites", - "limit", - "max_results", - "cursor" - ], - "publicBodyParams": [ - "category_id", - "asset", - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "group_by", - "metrics", - "interval", - "filter", - "sort", - "include_cited_websites", - "limit", - "max_results", - "cursor" - ], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "SentimentStreamV2V2ReportsStreamPostParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, - "response": { - "status": "200", - "contentType": "text/event-stream", - "encoding": "text", - "contents": [ - { - "contentType": "text/event-stream", - "encoding": "text" - } - ] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http", - "streaming": "sse" - }, - { - "resource": "reports.webSearchResults", - "publicResource": "reports.webSearchResults", - "operation": "query", - "publicOperation": "query", - "deprecated": false, - "method": "POST", - "path": "/v1/reports/web-search-results", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "date_interval", - "dimensions", - "metrics", - "order_by", - "pagination", - "category_id", - "start_date", - "end_date", - "filters" - ], - "publicBodyParams": [ - "date_interval", - "dimensions", - "metrics", - "order_by", - "pagination", - "category_id", - "start_date", - "end_date", - "filters" - ], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "WebSearchResultQueryParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, - "response": { - "status": "200", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ] - }, - "responseModel": { - "name": "WebSearchResultsResponse", - "publicAliases": [] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http" - }, - { - "resource": "reports.webSearchResults", - "publicResource": "reports.webSearchResults", - "operation": "stream", - "publicOperation": "stream", - "deprecated": false, - "method": "POST", - "path": "/v1/reports/web-search-results/stream", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "date_interval", - "dimensions", - "metrics", - "order_by", - "pagination", - "category_id", - "start_date", - "end_date", - "filters" - ], - "publicBodyParams": [ - "date_interval", - "dimensions", - "metrics", - "order_by", - "pagination", - "category_id", - "start_date", - "end_date", - "filters" - ], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "WebSearchResultStreamParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, - "response": { - "status": "200", - "contentType": "text/event-stream", - "encoding": "text", - "contents": [ - { - "contentType": "text/event-stream", - "encoding": "text" - } - ] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http", - "streaming": "sse" - }, - { - "resource": "reports.referrals", - "publicResource": "reports.referrals", - "operation": "createReportV1V1ReportsPost", - "publicOperation": "createReportV1V1ReportsPost", - "deprecated": false, - "method": "POST", - "path": "/v1/reports/referrals", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "date_interval", - "dimensions", - "metrics", - "order_by", - "pagination", - "domain", - "start_date", - "end_date", - "organization_id", - "metric_filters", - "filters" - ], - "publicBodyParams": [ - "date_interval", - "dimensions", - "metrics", - "order_by", - "pagination", - "domain", - "start_date", - "end_date", - "organization_id", - "metric_filters", - "filters" - ], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "ReferralCreateReportV1V1ReportsPostParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, - "response": { - "status": "200", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ] - }, - "responseModel": { - "name": "ReportResponse", - "publicAliases": [] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http" - }, - { - "resource": "reports.referrals", - "publicResource": "reports.referrals", - "operation": "createReportV2V2ReportsPost", - "publicOperation": "createReportV2V2ReportsPost", - "deprecated": false, - "method": "POST", - "path": "/v2/reports/referrals", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "date_interval", - "dimensions", - "metrics", - "order_by", - "pagination", - "domain", - "start_date", - "end_date", - "organization_id", - "metric_filters", - "filters" - ], - "publicBodyParams": [ - "date_interval", - "dimensions", - "metrics", - "order_by", - "pagination", - "domain", - "start_date", - "end_date", - "organization_id", - "metric_filters", - "filters" - ], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "ReferralCreateReportV2V2ReportsPostParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, - "response": { - "status": "200", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ] - }, - "responseModel": { - "name": "ReportResponse", - "publicAliases": [] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http" - }, - { - "resource": "reports.bots", - "publicResource": "reports.bots", - "operation": "createReportV1V1ReportsPost", - "publicOperation": "createReportV1V1ReportsPost", - "deprecated": false, - "method": "POST", - "path": "/v1/reports/bots", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "date_interval", - "dimensions", - "metrics", - "order_by", - "pagination", - "domain", - "start_date", - "end_date", - "organization_id", - "metric_filters", - "filters" - ], - "publicBodyParams": [ - "date_interval", - "dimensions", - "metrics", - "order_by", - "pagination", - "domain", - "start_date", - "end_date", - "organization_id", - "metric_filters", - "filters" - ], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "BotCreateReportV1V1ReportsPostParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, - "response": { - "status": "200", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ] - }, - "responseModel": { - "name": "ReportResponse", - "publicAliases": [] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http" - }, - { - "resource": "reports.bots", - "publicResource": "reports.bots", - "operation": "createReportV2V2ReportsPost", - "publicOperation": "createReportV2V2ReportsPost", - "deprecated": false, - "method": "POST", - "path": "/v2/reports/bots", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "date_interval", - "dimensions", - "metrics", - "order_by", - "pagination", - "domain", - "start_date", - "end_date", - "organization_id", - "metric_filters", - "filters" - ], - "publicBodyParams": [ - "date_interval", - "dimensions", - "metrics", - "order_by", - "pagination", - "domain", - "start_date", - "end_date", - "organization_id", - "metric_filters", - "filters" - ], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "BotCreateReportV2V2ReportsPostParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, - "response": { - "status": "200", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ] - }, - "responseModel": { - "name": "ReportResponse", - "publicAliases": [] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http" - }, - { - "resource": "reports.queryFanouts", - "publicResource": "reports.queryFanouts", - "operation": "v1ReportsPost", - "publicOperation": "v1ReportsPost", - "deprecated": false, - "method": "POST", - "path": "/v1/reports/query-fanouts", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "date_interval", - "dimensions", - "metrics", - "order_by", - "pagination", - "category_id", - "start_date", - "end_date", - "filters" - ], - "publicBodyParams": [ - "date_interval", - "dimensions", - "metrics", - "order_by", - "pagination", - "category_id", - "start_date", - "end_date", - "filters" - ], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "QueryFanoutV1ReportsPostParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, - "response": { - "status": "200", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ] - }, - "responseModel": { - "name": "ReportResponse", - "publicAliases": [] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http" - }, - { - "resource": "reports.queryFanouts", - "publicResource": "reports.queryFanouts", - "operation": "v2V2ReportsPost", - "publicOperation": "v2V2ReportsPost", - "deprecated": false, - "method": "POST", - "path": "/v2/reports/query-fanouts", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "category_id", - "start_date", - "end_date", - "group_by", - "metrics", - "interval", - "filter", - "sort", - "limit", - "max_results", - "cursor" - ], - "publicBodyParams": [ - "category_id", - "start_date", - "end_date", - "group_by", - "metrics", - "interval", - "filter", - "sort", - "limit", - "max_results", - "cursor" - ], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "QueryFanoutV2V2ReportsPostParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, - "response": { - "status": "200", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http" - }, - { - "resource": "reports.queryFanouts", - "publicResource": "reports.queryFanouts", - "operation": "streamV2V2ReportsStreamPost", - "publicOperation": "streamV2V2ReportsStreamPost", - "deprecated": false, - "method": "POST", - "path": "/v2/reports/query-fanouts/stream", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "category_id", - "start_date", - "end_date", - "group_by", - "metrics", - "interval", - "filter", - "sort", - "limit", - "max_results", - "cursor" - ], - "publicBodyParams": [ - "category_id", - "start_date", - "end_date", - "group_by", - "metrics", - "interval", - "filter", - "sort", - "limit", - "max_results", - "cursor" - ], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "QueryFanoutStreamV2V2ReportsStreamPostParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, - "response": { - "status": "200", - "contentType": "text/event-stream", - "encoding": "text", - "contents": [ - { - "contentType": "text/event-stream", - "encoding": "text" - } - ] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http", - "streaming": "sse" - }, - { - "resource": "reports.shopping", - "publicResource": "reports.shopping", - "operation": "visibility", - "publicOperation": "visibility", - "deprecated": false, - "method": "POST", - "path": "/v1/reports/shopping/visibility", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "category_id", - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "date_interval", - "filters", - "order_by", - "pagination", - "include_count", - "tag_filter_type", - "include_no_tag", - "exclude_topic_ids", - "dimensions", - "metrics", - "owned_asset_names", - "search_asset", - "include_asset", - "include_asset_only", - "include_assets_only", - "rank_by", - "include_position_frequency" - ], - "publicBodyParams": [ - "category_id", - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "date_interval", - "filters", - "order_by", - "pagination", - "include_count", - "tag_filter_type", - "include_no_tag", - "exclude_topic_ids", - "dimensions", - "metrics", - "owned_asset_names", - "search_asset", - "include_asset", - "include_asset_only", - "include_assets_only", - "rank_by", - "include_position_frequency" - ], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "ShoppingVisibilityParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, - "response": { - "status": "200", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ] - }, - "responseModel": { - "name": "ShoppingRowsResponse", - "publicAliases": [] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http" - }, - { - "resource": "reports.shopping", - "publicResource": "reports.shopping", - "operation": "itemVisibility", - "publicOperation": "itemVisibility", - "deprecated": false, - "method": "POST", - "path": "/v1/reports/shopping/item-visibility", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "category_id", - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "date_interval", - "filters", - "order_by", - "pagination", - "include_count", - "tag_filter_type", - "include_no_tag", - "exclude_topic_ids", - "dimensions", - "metrics", - "owned_asset_names", - "include_items", - "search_item", - "merchant_filter_type", - "include_competitors", - "target_product", - "competitor_limit", - "include_position_frequency" - ], - "publicBodyParams": [ - "category_id", - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "date_interval", - "filters", - "order_by", - "pagination", - "include_count", - "tag_filter_type", - "include_no_tag", - "exclude_topic_ids", - "dimensions", - "metrics", - "owned_asset_names", - "include_items", - "search_item", - "merchant_filter_type", - "include_competitors", - "target_product", - "competitor_limit", - "include_position_frequency" - ], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "ShoppingItemVisibilityParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, - "response": { - "status": "200", - "contentType": "application/json", - "encoding": "json", - "contents": [ + "names": [ + "Is", + "NotIs", + "In", + "NotIn", + "Contains", + "NotContains", + "Matches", + "ContainsCaseInsensitive", + "NotContainsCaseInsensitive" + ], + "deprecations": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + } + }, { - "contentType": "application/json", - "encoding": "json" - } - ] - }, - "responseModel": { - "name": "ShoppingRowsResponse", - "publicAliases": [] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" + "name": "value", + "publicName": "value", + "required": true, + "deprecated": false, + "type": { + "kind": "union", + "variants": [ + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "array", + "items": { + "kind": "primitive", + "type": "string" + } + } + ], + "variantNames": [ + null, + null + ] } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] } - } - ], - "responseLinks": [], - "transport": "http" - }, + ], + "additionalProperties": false + } + } + ], + "resources": [ + "organizations", + "organizations.categories", + "prompts", + "reports", + "reports.webSearchResults", + "reports.shopping", + "content", + "content.optimization", + "agents", + "agents.runs", + "knowledgeBases", + "knowledgeBases.documents", + "knowledgeBases.folders" + ], + "publicResources": [ + "organizations", + "organizations.categories", + "prompts", + "reports", + "reports.webSearchResults", + "reports.shopping", + "content", + "content.optimization", + "agents", + "agents.runs", + "knowledgeBases", + "knowledgeBases.documents", + "knowledgeBases.folders" + ], + "operations": [ { - "resource": "reports.shopping", - "publicResource": "reports.shopping", - "operation": "merchantDistribution", - "publicOperation": "merchantDistribution", + "resource": "organizations", + "publicResource": "organizations", + "operation": "regions", + "publicOperation": "regions", "deprecated": false, - "method": "POST", - "path": "/v1/reports/shopping/merchant-distribution", + "method": "GET", + "path": "/v1/org/regions", "pathParams": [], "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "category_id", - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "date_interval", - "filters", - "order_by", - "pagination", - "include_count", - "tag_filter_type", - "include_no_tag", - "exclude_topic_ids", - "dimensions", - "metrics", - "owned_asset_names", - "search_merchant" + "queryParams": [ + "organization_ids" ], - "publicBodyParams": [ - "category_id", - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "date_interval", - "filters", - "order_by", - "pagination", - "include_count", - "tag_filter_type", - "include_no_tag", - "exclude_topic_ids", - "dimensions", - "metrics", - "owned_asset_names", - "search_merchant" + "publicQueryParams": [ + "organization_ids" ], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "bodyParamDetails": [], "pathParamDetails": [], - "queryParamDetails": [], + "queryParamDetails": [ + { + "name": "organization_ids", + "required": false, + "style": "form", + "explode": true + } + ], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "ShoppingMerchantDistributionParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" + "publicName": "OrganizationRegionsParams" }, "response": { "status": "200", @@ -29090,10 +17519,6 @@ } ] }, - "responseModel": { - "name": "ShoppingRowsResponse", - "publicAliases": [] - }, "result": { "successStatus": "200", "errorStatuses": [ @@ -29112,7 +17537,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -29121,83 +17546,28 @@ "transport": "http" }, { - "resource": "reports.shopping", - "publicResource": "reports.shopping", - "operation": "merchantVisibilityByBrand", - "publicOperation": "merchantVisibilityByBrand", - "deprecated": false, - "method": "POST", - "path": "/v1/reports/shopping/merchant-visibility-by-brand", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "category_id", - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "date_interval", - "filters", - "order_by", - "pagination", - "include_count", - "tag_filter_type", - "include_no_tag", - "exclude_topic_ids", - "dimensions", - "metrics", - "owned_asset_names", - "search_brand", - "include_brand", - "include_brand_only" - ], - "publicBodyParams": [ - "category_id", - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "date_interval", - "filters", - "order_by", - "pagination", - "include_count", - "tag_filter_type", - "include_no_tag", - "exclude_topic_ids", - "dimensions", - "metrics", - "owned_asset_names", - "search_brand", - "include_brand", - "include_brand_only" - ], + "resource": "organizations", + "publicResource": "organizations", + "operation": "models", + "publicOperation": "models", + "deprecated": false, + "method": "GET", + "path": "/v1/org/models", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "bodyParamDetails": [], "pathParamDetails": [], "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], - "paramsModel": { - "publicName": "ShoppingMerchantVisibilityByBrandParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, "response": { "status": "200", "contentType": "application/json", @@ -29209,10 +17579,6 @@ } ] }, - "responseModel": { - "name": "ShoppingRowsResponse", - "publicAliases": [] - }, "result": { "successStatus": "200", "errorStatuses": [ @@ -29231,7 +17597,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -29240,76 +17606,41 @@ "transport": "http" }, { - "resource": "reports.shopping", - "publicResource": "reports.shopping", - "operation": "merchantByItems", - "publicOperation": "merchantByItems", + "resource": "organizations", + "publicResource": "organizations", + "operation": "domains", + "publicOperation": "domains", "deprecated": false, - "method": "POST", - "path": "/v1/reports/shopping/merchant-by-items", + "method": "GET", + "path": "/v1/org/domains", "pathParams": [], "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "category_id", - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "date_interval", - "filters", - "order_by", - "pagination", - "include_count", - "tag_filter_type", - "include_no_tag", - "exclude_topic_ids", - "dimensions", - "metrics", - "product_name" + "queryParams": [ + "organization_ids" ], - "publicBodyParams": [ - "category_id", - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "date_interval", - "filters", - "order_by", - "pagination", - "include_count", - "tag_filter_type", - "include_no_tag", - "exclude_topic_ids", - "dimensions", - "metrics", - "product_name" + "publicQueryParams": [ + "organization_ids" ], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "bodyParamDetails": [], "pathParamDetails": [], - "queryParamDetails": [], + "queryParamDetails": [ + { + "name": "organization_ids", + "required": false, + "style": "form", + "explode": true + } + ], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "ShoppingMerchantByItemsParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" + "publicName": "OrganizationDomainsParams" }, "response": { "status": "200", @@ -29322,10 +17653,6 @@ } ] }, - "responseModel": { - "name": "ShoppingRowsResponse", - "publicAliases": [] - }, "result": { "successStatus": "200", "errorStatuses": [ @@ -29344,7 +17671,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -29353,86 +17680,41 @@ "transport": "http" }, { - "resource": "reports.shopping", - "publicResource": "reports.shopping", - "operation": "allItemsWithMerchants", - "publicOperation": "allItemsWithMerchants", + "resource": "organizations", + "publicResource": "organizations", + "operation": "listAssets", + "publicOperation": "listAssets", "deprecated": false, - "method": "POST", - "path": "/v1/reports/shopping/all-items-with-merchants", + "method": "GET", + "path": "/v1/org/assets", "pathParams": [], "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "category_id", - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "date_interval", - "filters", - "order_by", - "pagination", - "include_count", - "tag_filter_type", - "include_no_tag", - "exclude_topic_ids", - "dimensions", - "metrics", - "owned_asset_names", - "include_items", - "search_item", - "merchant_filter_type", - "rank_by", - "sort_order" + "queryParams": [ + "organization_ids" ], - "publicBodyParams": [ - "category_id", - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "date_interval", - "filters", - "order_by", - "pagination", - "include_count", - "tag_filter_type", - "include_no_tag", - "exclude_topic_ids", - "dimensions", - "metrics", - "owned_asset_names", - "include_items", - "search_item", - "merchant_filter_type", - "rank_by", - "sort_order" + "publicQueryParams": [ + "organization_ids" ], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "bodyParamDetails": [], "pathParamDetails": [], - "queryParamDetails": [], + "queryParamDetails": [ + { + "name": "organization_ids", + "required": false, + "style": "form", + "explode": true + } + ], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "ShoppingAllItemsWithMerchantsParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" + "publicName": "OrganizationListAssetsParams" }, "response": { "status": "200", @@ -29446,7 +17728,7 @@ ] }, "responseModel": { - "name": "ShoppingRowsResponse", + "name": "organization_assets_response", "publicAliases": [] }, "result": { @@ -29467,7 +17749,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -29476,74 +17758,41 @@ "transport": "http" }, { - "resource": "reports.shopping", - "publicResource": "reports.shopping", - "operation": "triggerRate", - "publicOperation": "triggerRate", + "resource": "organizations", + "publicResource": "organizations", + "operation": "getPersonas", + "publicOperation": "getPersonas", "deprecated": false, - "method": "POST", - "path": "/v1/reports/shopping/trigger-rate", + "method": "GET", + "path": "/v1/org/personas", "pathParams": [], "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "category_id", - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "date_interval", - "filters", - "order_by", - "pagination", - "include_count", - "tag_filter_type", - "include_no_tag", - "exclude_topic_ids", - "dimensions", - "metrics" - ], - "publicBodyParams": [ - "category_id", - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "date_interval", - "filters", - "order_by", - "pagination", - "include_count", - "tag_filter_type", - "include_no_tag", - "exclude_topic_ids", - "dimensions", - "metrics" + "queryParams": [ + "organization_ids" + ], + "publicQueryParams": [ + "organization_ids" ], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "bodyParamDetails": [], "pathParamDetails": [], - "queryParamDetails": [], + "queryParamDetails": [ + { + "name": "organization_ids", + "required": false, + "style": "form", + "explode": true + } + ], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "ShoppingTriggerRateParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" + "publicName": "OrganizationGetPersonasParams" }, "response": { "status": "200", @@ -29557,7 +17806,7 @@ ] }, "responseModel": { - "name": "ShoppingRowsResponse", + "name": "organization_personas_with_category_response", "publicAliases": [] }, "result": { @@ -29578,7 +17827,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -29587,79 +17836,28 @@ "transport": "http" }, { - "resource": "reports.shopping", - "publicResource": "reports.shopping", - "operation": "merchantShare", - "publicOperation": "merchantShare", + "resource": "organizations", + "publicResource": "organizations", + "operation": "list", + "publicOperation": "list", "deprecated": false, - "method": "POST", - "path": "/v1/reports/shopping/merchant-share", + "method": "GET", + "path": "/v1/org", "pathParams": [], "publicPathParams": [], "queryParams": [], "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], - "bodyParams": [ - "category_id", - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "date_interval", - "filters", - "order_by", - "pagination", - "include_count", - "tag_filter_type", - "include_no_tag", - "exclude_topic_ids", - "dimensions", - "metrics", - "target_asset_names", - "owned_asset_names" - ], - "publicBodyParams": [ - "category_id", - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "date_interval", - "filters", - "order_by", - "pagination", - "include_count", - "tag_filter_type", - "include_no_tag", - "exclude_topic_ids", - "dimensions", - "metrics", - "target_asset_names", - "owned_asset_names" - ], + "bodyParams": [], + "publicBodyParams": [], + "bodyParamDetails": [], "pathParamDetails": [], "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], - "paramsModel": { - "publicName": "ShoppingMerchantShareParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" - }, "response": { "status": "200", "contentType": "application/json", @@ -29671,10 +17869,6 @@ } ] }, - "responseModel": { - "name": "ShoppingRowsResponse", - "publicAliases": [] - }, "result": { "successStatus": "200", "errorStatuses": [ @@ -29693,7 +17887,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -29702,52 +17896,41 @@ "transport": "http" }, { - "resource": "reports.shopping", - "publicResource": "reports.shopping", - "operation": "productMerchantUrls", - "publicOperation": "productMerchantUrls", + "resource": "organizations.categories", + "publicResource": "organizations.categories", + "operation": "list", + "publicOperation": "list", "deprecated": false, - "method": "POST", - "path": "/v1/reports/shopping/product-merchant-urls", + "method": "GET", + "path": "/v1/org/categories", "pathParams": [], "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "category_id", - "product_names", - "start_date", - "end_date" + "queryParams": [ + "organization_ids" ], - "publicBodyParams": [ - "category_id", - "product_names", - "start_date", - "end_date" + "publicQueryParams": [ + "organization_ids" ], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "bodyParamDetails": [], "pathParamDetails": [], - "queryParamDetails": [], + "queryParamDetails": [ + { + "name": "organization_ids", + "required": false, + "style": "form", + "explode": true + } + ], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "ShoppingProductMerchantUrlsParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" + "publicName": "CategoryListParams" }, "response": { "status": "200", @@ -29760,10 +17943,6 @@ } ] }, - "responseModel": { - "name": "ShoppingRowsResponse", - "publicAliases": [] - }, "result": { "successStatus": "200", "errorStatuses": [ @@ -29782,7 +17961,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -29791,76 +17970,41 @@ "transport": "http" }, { - "resource": "reports.shopping", - "publicResource": "reports.shopping", - "operation": "executions", - "publicOperation": "executions", + "resource": "organizations.categories", + "publicResource": "organizations.categories", + "operation": "topics", + "publicOperation": "topics", "deprecated": false, - "method": "POST", - "path": "/v1/reports/shopping/executions", - "pathParams": [], - "publicPathParams": [], + "method": "GET", + "path": "/v1/org/categories/{category_id}/topics", + "pathParams": [ + "category_id" + ], + "publicPathParams": [ + "category_id" + ], "queryParams": [], "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], - "bodyParams": [ - "category_id", - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "date_interval", - "filters", - "order_by", - "pagination", - "include_count", - "tag_filter_type", - "include_no_tag", - "exclude_topic_ids", - "analysis_types", - "analysis_filter_type", - "owned_asset_names" - ], - "publicBodyParams": [ - "category_id", - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "date_interval", - "filters", - "order_by", - "pagination", - "include_count", - "tag_filter_type", - "include_no_tag", - "exclude_topic_ids", - "analysis_types", - "analysis_filter_type", - "owned_asset_names" + "bodyParams": [], + "publicBodyParams": [], + "bodyParamDetails": [], + "pathParamDetails": [ + { + "name": "category_id", + "required": true, + "style": "simple", + "explode": false + } ], - "pathParamDetails": [], "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "ShoppingExecutionsParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" + "publicName": "CategoryTopicsParams" }, "response": { "status": "200", @@ -29873,10 +18017,6 @@ } ] }, - "responseModel": { - "name": "ShoppingRowsResponse", - "publicAliases": [] - }, "result": { "successStatus": "200", "errorStatuses": [ @@ -29895,7 +18035,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -29904,80 +18044,41 @@ "transport": "http" }, { - "resource": "reports.accuracy", - "publicResource": "reports.accuracy", - "operation": "overviewV1ReportsOverviewPost", - "publicOperation": "overviewV1ReportsOverviewPost", + "resource": "organizations.categories", + "publicResource": "organizations.categories", + "operation": "tags", + "publicOperation": "tags", "deprecated": false, - "method": "POST", - "path": "/v1/reports/accuracy/overview", - "pathParams": [], - "publicPathParams": [], + "method": "GET", + "path": "/v1/org/categories/{category_id}/tags", + "pathParams": [ + "category_id" + ], + "publicPathParams": [ + "category_id" + ], "queryParams": [], "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], - "bodyParams": [ - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "category_id", - "topic_ids", - "exclude_topic_ids", - "tag_ids", - "tag_filter_type", - "include_no_tag", - "region_ids", - "platform_ids", - "persona_ids", - "include_no_persona", - "prompt_ids", - "citation_categories", - "date_bucket", - "group_by" - ], - "publicBodyParams": [ - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "category_id", - "topic_ids", - "exclude_topic_ids", - "tag_ids", - "tag_filter_type", - "include_no_tag", - "region_ids", - "platform_ids", - "persona_ids", - "include_no_persona", - "prompt_ids", - "citation_categories", - "date_bucket", - "group_by" + "bodyParams": [], + "publicBodyParams": [], + "bodyParamDetails": [], + "pathParamDetails": [ + { + "name": "category_id", + "required": true, + "style": "simple", + "explode": false + } ], - "pathParamDetails": [], "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "AccuracyOverviewV1ReportsOverviewPostParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" + "publicName": "CategoryTagsParams" }, "response": { "status": "200", @@ -29990,10 +18091,6 @@ } ] }, - "responseModel": { - "name": "AccuracyOverviewResponse", - "publicAliases": [] - }, "result": { "successStatus": "200", "errorStatuses": [ @@ -30012,7 +18109,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -30021,88 +18118,144 @@ "transport": "http" }, { - "resource": "reports.accuracy", - "publicResource": "reports.accuracy", - "operation": "breakdownV1ReportsBreakdownPost", - "publicOperation": "breakdownV1ReportsBreakdownPost", + "resource": "organizations.categories", + "publicResource": "organizations.categories", + "operation": "prompts", + "publicOperation": "prompts", "deprecated": false, - "method": "POST", - "path": "/v1/reports/accuracy/breakdown", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [ - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "category_id", - "topic_ids", - "exclude_topic_ids", - "tag_ids", - "tag_filter_type", - "include_no_tag", - "region_ids", - "platform_ids", - "persona_ids", - "include_no_persona", - "prompt_ids", - "citation_categories", - "breakdown_by", + "method": "GET", + "path": "/v1/org/categories/{category_id}/prompts", + "pathParams": [ + "category_id" + ], + "publicPathParams": [ + "category_id" + ], + "queryParams": [ "limit", - "offset", - "search_query", - "sort_by", - "sort_order" + "cursor", + "order_by", + "order_dir", + "analysis_type", + "prompt_type", + "status", + "topic_id", + "tag_id", + "region_id", + "platform_id", + "persona_id" ], - "publicBodyParams": [ - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "category_id", - "topic_ids", - "exclude_topic_ids", - "tag_ids", - "tag_filter_type", - "include_no_tag", - "region_ids", - "platform_ids", - "persona_ids", - "include_no_persona", - "prompt_ids", - "citation_categories", - "breakdown_by", + "publicQueryParams": [ "limit", - "offset", - "search_query", - "sort_by", - "sort_order" + "cursor", + "order_by", + "order_dir", + "analysis_type", + "prompt_type", + "status", + "topic_id", + "tag_id", + "region_id", + "platform_id", + "persona_id" + ], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "bodyParamDetails": [], + "pathParamDetails": [ + { + "name": "category_id", + "required": true, + "style": "simple", + "explode": false + } + ], + "queryParamDetails": [ + { + "name": "limit", + "required": false, + "style": "form", + "explode": true, + "defaultValue": 10000 + }, + { + "name": "cursor", + "required": false, + "style": "form", + "explode": true + }, + { + "name": "order_by", + "required": false, + "style": "form", + "explode": true + }, + { + "name": "order_dir", + "required": false, + "style": "form", + "explode": true + }, + { + "name": "analysis_type", + "required": false, + "style": "form", + "explode": true + }, + { + "name": "prompt_type", + "required": false, + "style": "form", + "explode": true + }, + { + "name": "status", + "required": false, + "style": "form", + "explode": true, + "defaultValue": [ + "active" + ] + }, + { + "name": "topic_id", + "required": false, + "style": "form", + "explode": true + }, + { + "name": "tag_id", + "required": false, + "style": "form", + "explode": true + }, + { + "name": "region_id", + "required": false, + "style": "form", + "explode": true + }, + { + "name": "platform_id", + "required": false, + "style": "form", + "explode": true + }, + { + "name": "persona_id", + "required": false, + "style": "form", + "explode": true + } ], - "pathParamDetails": [], - "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "AccuracyBreakdownV1ReportsBreakdownPostParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" + "publicName": "CategoryPromptsParams" }, "response": { "status": "200", @@ -30116,7 +18269,7 @@ ] }, "responseModel": { - "name": "AccuracyBreakdownResponse", + "name": "category_prompts_response", "publicAliases": [] }, "result": { @@ -30137,7 +18290,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -30146,52 +18299,41 @@ "transport": "http" }, { - "resource": "reports.accuracy", - "publicResource": "reports.accuracy", - "operation": "citationAnalysisV1ReportsCitationAnalysisPost", - "publicOperation": "citationAnalysisV1ReportsCitationAnalysisPost", + "resource": "organizations.categories", + "publicResource": "organizations.categories", + "operation": "assets", + "publicOperation": "assets", "deprecated": false, - "method": "POST", - "path": "/v1/reports/accuracy/citation-analysis", - "pathParams": [], - "publicPathParams": [], + "method": "GET", + "path": "/v1/org/categories/{category_id}/assets", + "pathParams": [ + "category_id" + ], + "publicPathParams": [ + "category_id" + ], "queryParams": [], "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], - "bodyParams": [ - "category_id", - "clean_href", - "start_date", - "end_date" - ], - "publicBodyParams": [ - "category_id", - "clean_href", - "start_date", - "end_date" + "bodyParams": [], + "publicBodyParams": [], + "bodyParamDetails": [], + "pathParamDetails": [ + { + "name": "category_id", + "required": true, + "style": "simple", + "explode": false + } ], - "pathParamDetails": [], "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "AccuracyCitationAnalysisV1ReportsCitationAnalysisPostParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" + "publicName": "CategoryAssetsParams" }, "response": { "status": "200", @@ -30204,10 +18346,6 @@ } ] }, - "responseModel": { - "name": "AccuracyCitationAnalysisResponse", - "publicAliases": [] - }, "result": { "successStatus": "200", "errorStatuses": [ @@ -30226,7 +18364,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -30235,50 +18373,41 @@ "transport": "http" }, { - "resource": "reports.accuracy", - "publicResource": "reports.accuracy", - "operation": "topicIdsV1ReportsTopicIdsPost", - "publicOperation": "topicIdsV1ReportsTopicIdsPost", + "resource": "organizations.categories", + "publicResource": "organizations.categories", + "operation": "getCategoryPersonas", + "publicOperation": "getCategoryPersonas", "deprecated": false, - "method": "POST", - "path": "/v1/reports/accuracy/topic-ids", - "pathParams": [], - "publicPathParams": [], + "method": "GET", + "path": "/v1/org/categories/{category_id}/personas", + "pathParams": [ + "category_id" + ], + "publicPathParams": [ + "category_id" + ], "queryParams": [], "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], - "bodyParams": [ - "category_id", - "start_date", - "end_date" - ], - "publicBodyParams": [ - "category_id", - "start_date", - "end_date" + "bodyParams": [], + "publicBodyParams": [], + "bodyParamDetails": [], + "pathParamDetails": [ + { + "name": "category_id", + "required": true, + "style": "simple", + "explode": false + } ], - "pathParamDetails": [], "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "AccuracyTopicIdsV1ReportsTopicIdsPostParams" - }, - "requestBody": { - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "required": true, - "publicName": "body", - "publicIdentifier": "body" + "publicName": "CategoryGetCategoryPersonasParams" }, "response": { "status": "200", @@ -30291,6 +18420,10 @@ } ] }, + "responseModel": { + "name": "category_personas_response", + "publicAliases": [] + }, "result": { "successStatus": "200", "errorStatuses": [ @@ -30309,7 +18442,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -30318,73 +18451,56 @@ "transport": "http" }, { - "resource": "reports.accuracy", - "publicResource": "reports.accuracy", - "operation": "inaccurateThemesV1ReportsInaccurateThemesPost", - "publicOperation": "inaccurateThemesV1ReportsInaccurateThemesPost", + "resource": "organizations.categories", + "publicResource": "organizations.categories", + "operation": "createPrompts", + "publicOperation": "createPrompts", "deprecated": false, "method": "POST", - "path": "/v1/reports/accuracy/inaccurate-themes", - "pathParams": [], - "publicPathParams": [], + "path": "/v1/org/categories/{category_id}/prompts", + "pathParams": [ + "category_id" + ], + "publicPathParams": [ + "category_id" + ], "queryParams": [], "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], "bodyParams": [ - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "category_id", - "topic_ids", - "exclude_topic_ids", - "tag_ids", - "tag_filter_type", - "include_no_tag", - "region_ids", - "platform_ids", - "persona_ids", - "include_no_persona", - "prompt_ids", - "citation_categories", - "limit", - "offset", - "sort_by", - "sort_order", - "search_query" + "prompts", + "dry_run" ], "publicBodyParams": [ - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "category_id", - "topic_ids", - "exclude_topic_ids", - "tag_ids", - "tag_filter_type", - "include_no_tag", - "region_ids", - "platform_ids", - "persona_ids", - "include_no_persona", - "prompt_ids", - "citation_categories", - "limit", - "offset", - "sort_by", - "sort_order", - "search_query" + "prompts", + "dry_run" + ], + "bodyParamDetails": [ + { + "name": "prompts", + "required": true + }, + { + "name": "dry_run", + "required": false + } + ], + "pathParamDetails": [ + { + "name": "category_id", + "required": true, + "style": "simple", + "explode": false + } ], - "pathParamDetails": [], "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "AccuracyInaccurateThemesV1ReportsInaccurateThemesPostParams" + "publicName": "CategoryCreatePromptsParams" }, "requestBody": { "contentType": "application/json", @@ -30411,7 +18527,7 @@ ] }, "responseModel": { - "name": "InaccurateThemesResponse", + "name": "create_prompts_response", "publicAliases": [] }, "result": { @@ -30432,7 +18548,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -30441,71 +18557,56 @@ "transport": "http" }, { - "resource": "reports.accuracy", - "publicResource": "reports.accuracy", - "operation": "inaccurateClustersV1ReportsInaccurateClustersPost", - "publicOperation": "inaccurateClustersV1ReportsInaccurateClustersPost", + "resource": "organizations.categories", + "publicResource": "organizations.categories", + "operation": "updatePrompts", + "publicOperation": "updatePrompts", "deprecated": false, - "method": "POST", - "path": "/v1/reports/accuracy/inaccurate-clusters", - "pathParams": [], - "publicPathParams": [], + "method": "PATCH", + "path": "/v1/org/categories/{category_id}/prompts", + "pathParams": [ + "category_id" + ], + "publicPathParams": [ + "category_id" + ], "queryParams": [], "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], "bodyParams": [ - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "category_id", - "topic_ids", - "exclude_topic_ids", - "tag_ids", - "tag_filter_type", - "include_no_tag", - "region_ids", - "platform_ids", - "persona_ids", - "include_no_persona", - "prompt_ids", - "citation_categories", - "theme_id", - "limit", - "offset", - "search_query" + "prompts", + "dry_run" ], "publicBodyParams": [ - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "category_id", - "topic_ids", - "exclude_topic_ids", - "tag_ids", - "tag_filter_type", - "include_no_tag", - "region_ids", - "platform_ids", - "persona_ids", - "include_no_persona", - "prompt_ids", - "citation_categories", - "theme_id", - "limit", - "offset", - "search_query" + "prompts", + "dry_run" + ], + "bodyParamDetails": [ + { + "name": "prompts", + "required": true + }, + { + "name": "dry_run", + "required": false + } + ], + "pathParamDetails": [ + { + "name": "category_id", + "required": true, + "style": "simple", + "explode": false + } ], - "pathParamDetails": [], "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "AccuracyInaccurateClustersV1ReportsInaccurateClustersPostParams" + "publicName": "CategoryUpdatePromptsParams" }, "requestBody": { "contentType": "application/json", @@ -30532,7 +18633,7 @@ ] }, "responseModel": { - "name": "InaccurateClustersResponse", + "name": "update_prompts_response", "publicAliases": [] }, "result": { @@ -30553,7 +18654,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -30562,65 +18663,62 @@ "transport": "http" }, { - "resource": "reports.accuracy", - "publicResource": "reports.accuracy", - "operation": "inaccuracyDriversV1ReportsInaccuracyDriversPost", - "publicOperation": "inaccuracyDriversV1ReportsInaccuracyDriversPost", + "resource": "organizations.categories", + "publicResource": "organizations.categories", + "operation": "updatePromptStatus", + "publicOperation": "updatePromptStatus", "deprecated": false, - "method": "POST", - "path": "/v1/reports/accuracy/inaccuracy-drivers", - "pathParams": [], - "publicPathParams": [], + "method": "PATCH", + "path": "/v1/org/categories/{category_id}/prompts/status", + "pathParams": [ + "category_id" + ], + "publicPathParams": [ + "category_id" + ], "queryParams": [], "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], "bodyParams": [ - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "category_id", - "topic_ids", - "exclude_topic_ids", - "tag_ids", - "tag_filter_type", - "include_no_tag", - "region_ids", - "platform_ids", - "persona_ids", - "include_no_persona", "prompt_ids", - "citation_categories", - "limit" + "status", + "dry_run" ], "publicBodyParams": [ - "start_date", - "end_date", - "comparison_start_date", - "comparison_end_date", - "category_id", - "topic_ids", - "exclude_topic_ids", - "tag_ids", - "tag_filter_type", - "include_no_tag", - "region_ids", - "platform_ids", - "persona_ids", - "include_no_persona", "prompt_ids", - "citation_categories", - "limit" + "status", + "dry_run" + ], + "bodyParamDetails": [ + { + "name": "prompt_ids", + "required": true + }, + { + "name": "status", + "required": true + }, + { + "name": "dry_run", + "required": false + } + ], + "pathParamDetails": [ + { + "name": "category_id", + "required": true, + "style": "simple", + "explode": false + } ], - "pathParamDetails": [], "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostParams" + "publicName": "CategoryUpdatePromptStatusParams" }, "requestBody": { "contentType": "application/json", @@ -30647,7 +18745,7 @@ ] }, "responseModel": { - "name": "InaccuracyDriversResponse", + "name": "update_prompt_status_response", "publicAliases": [] }, "result": { @@ -30668,7 +18766,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -30677,13 +18775,13 @@ "transport": "http" }, { - "resource": "reports.accuracy", - "publicResource": "reports.accuracy", - "operation": "topInaccurateClaimsV1ReportsTopInaccurateClaimsPost", - "publicOperation": "topInaccurateClaimsV1ReportsTopInaccurateClaimsPost", + "resource": "prompts", + "publicResource": "prompts", + "operation": "answers", + "publicOperation": "answers", "deprecated": false, "method": "POST", - "path": "/v1/reports/accuracy/top-inaccurate-claims", + "path": "/v1/prompts/answers", "pathParams": [], "publicPathParams": [], "queryParams": [], @@ -30691,42 +18789,46 @@ "headerParams": [], "publicHeaderParams": [], "bodyParams": [ + "category_id", "start_date", "end_date", - "comparison_start_date", - "comparison_end_date", - "category_id", - "topic_ids", - "exclude_topic_ids", - "tag_ids", - "tag_filter_type", - "include_no_tag", - "region_ids", - "platform_ids", - "persona_ids", - "include_no_persona", - "prompt_ids", - "citation_categories", - "limit" + "pagination", + "filters", + "include" ], "publicBodyParams": [ + "category_id", "start_date", "end_date", - "comparison_start_date", - "comparison_end_date", - "category_id", - "topic_ids", - "exclude_topic_ids", - "tag_ids", - "tag_filter_type", - "include_no_tag", - "region_ids", - "platform_ids", - "persona_ids", - "include_no_persona", - "prompt_ids", - "citation_categories", - "limit" + "pagination", + "filters", + "include" + ], + "bodyParamDetails": [ + { + "name": "category_id", + "required": true + }, + { + "name": "start_date", + "required": true + }, + { + "name": "end_date", + "required": true + }, + { + "name": "pagination", + "required": false + }, + { + "name": "filters", + "required": false + }, + { + "name": "include", + "required": false + } ], "pathParamDetails": [], "queryParamDetails": [], @@ -30735,7 +18837,7 @@ "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostParams" + "publicName": "PromptAnswersParams" }, "requestBody": { "contentType": "application/json", @@ -30762,7 +18864,7 @@ ] }, "responseModel": { - "name": "TopInaccurateClaimsResponse", + "name": "answers_response", "publicAliases": [] }, "result": { @@ -30783,7 +18885,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -30792,13 +18894,13 @@ "transport": "http" }, { - "resource": "reports.accuracy", - "publicResource": "reports.accuracy", - "operation": "claimBreakdownV1ReportsClaimBreakdownPost", - "publicOperation": "claimBreakdownV1ReportsClaimBreakdownPost", + "resource": "reports", + "publicResource": "reports", + "operation": "citations", + "publicOperation": "citations", "deprecated": false, "method": "POST", - "path": "/v1/reports/accuracy/claim-breakdown", + "path": "/v1/reports/citations", "pathParams": [], "publicPathParams": [], "queryParams": [], @@ -30806,42 +18908,64 @@ "headerParams": [], "publicHeaderParams": [], "bodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", "start_date", "end_date", - "comparison_start_date", - "comparison_end_date", - "category_id", - "topic_ids", - "exclude_topic_ids", - "tag_ids", - "tag_filter_type", - "include_no_tag", - "region_ids", - "platform_ids", - "persona_ids", - "include_no_persona", - "prompt_ids", - "citation_categories", - "cluster_id" + "filters" ], "publicBodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", "start_date", "end_date", - "comparison_start_date", - "comparison_end_date", - "category_id", - "topic_ids", - "exclude_topic_ids", - "tag_ids", - "tag_filter_type", - "include_no_tag", - "region_ids", - "platform_ids", - "persona_ids", - "include_no_persona", - "prompt_ids", - "citation_categories", - "cluster_id" + "filters" + ], + "bodyParamDetails": [ + { + "name": "date_interval", + "required": false + }, + { + "name": "dimensions", + "required": false + }, + { + "name": "metrics", + "required": true + }, + { + "name": "order_by", + "required": false + }, + { + "name": "pagination", + "required": false + }, + { + "name": "category_id", + "required": true + }, + { + "name": "start_date", + "required": true + }, + { + "name": "end_date", + "required": true + }, + { + "name": "filters", + "required": false + } ], "pathParamDetails": [], "queryParamDetails": [], @@ -30850,7 +18974,7 @@ "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "AccuracyClaimBreakdownV1ReportsClaimBreakdownPostParams" + "publicName": "ReportCitationsParams" }, "requestBody": { "contentType": "application/json", @@ -30877,7 +19001,7 @@ ] }, "responseModel": { - "name": "ClaimBreakdownResponse", + "name": "citations_response", "publicAliases": [] }, "result": { @@ -30898,7 +19022,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -30907,13 +19031,13 @@ "transport": "http" }, { - "resource": "reports.accuracy", - "publicResource": "reports.accuracy", - "operation": "claimCitationsV1ReportsClaimCitationsPost", - "publicOperation": "claimCitationsV1ReportsClaimCitationsPost", + "resource": "reports", + "publicResource": "reports", + "operation": "visibility", + "publicOperation": "visibility", "deprecated": false, "method": "POST", - "path": "/v1/reports/accuracy/claim-citations", + "path": "/v1/reports/visibility", "pathParams": [], "publicPathParams": [], "queryParams": [], @@ -30921,50 +19045,64 @@ "headerParams": [], "publicHeaderParams": [], "bodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", "start_date", "end_date", - "comparison_start_date", - "comparison_end_date", - "category_id", - "topic_ids", - "exclude_topic_ids", - "tag_ids", - "tag_filter_type", - "include_no_tag", - "region_ids", - "platform_ids", - "persona_ids", - "include_no_persona", - "prompt_ids", - "citation_categories", - "cluster_id", - "limit", - "offset", - "search_query", - "sort_order" + "filters" ], "publicBodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", "start_date", "end_date", - "comparison_start_date", - "comparison_end_date", - "category_id", - "topic_ids", - "exclude_topic_ids", - "tag_ids", - "tag_filter_type", - "include_no_tag", - "region_ids", - "platform_ids", - "persona_ids", - "include_no_persona", - "prompt_ids", - "citation_categories", - "cluster_id", - "limit", - "offset", - "search_query", - "sort_order" + "filters" + ], + "bodyParamDetails": [ + { + "name": "date_interval", + "required": false + }, + { + "name": "dimensions", + "required": false + }, + { + "name": "metrics", + "required": true + }, + { + "name": "order_by", + "required": false + }, + { + "name": "pagination", + "required": false + }, + { + "name": "category_id", + "required": true + }, + { + "name": "start_date", + "required": true + }, + { + "name": "end_date", + "required": true + }, + { + "name": "filters", + "required": false + } ], "pathParamDetails": [], "queryParamDetails": [], @@ -30973,7 +19111,7 @@ "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "AccuracyClaimCitationsV1ReportsClaimCitationsPostParams" + "publicName": "ReportVisibilityParams" }, "requestBody": { "contentType": "application/json", @@ -31000,7 +19138,7 @@ ] }, "responseModel": { - "name": "ClaimCitationsResponse", + "name": "report_response", "publicAliases": [] }, "result": { @@ -31021,7 +19159,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -31030,13 +19168,13 @@ "transport": "http" }, { - "resource": "reports.accuracy", - "publicResource": "reports.accuracy", - "operation": "clusterExampleRunsV1ReportsClusterExampleRunsPost", - "publicOperation": "clusterExampleRunsV1ReportsClusterExampleRunsPost", + "resource": "reports", + "publicResource": "reports", + "operation": "sentiment", + "publicOperation": "sentiment", "deprecated": false, "method": "POST", - "path": "/v1/reports/accuracy/cluster-example-runs", + "path": "/v1/reports/sentiment", "pathParams": [], "publicPathParams": [], "queryParams": [], @@ -31044,20 +19182,64 @@ "headerParams": [], "publicHeaderParams": [], "bodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", "category_id", - "cluster_id", "start_date", "end_date", - "limit", - "offset" + "filters" ], "publicBodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", "category_id", - "cluster_id", "start_date", "end_date", - "limit", - "offset" + "filters" + ], + "bodyParamDetails": [ + { + "name": "date_interval", + "required": false + }, + { + "name": "dimensions", + "required": false + }, + { + "name": "metrics", + "required": true + }, + { + "name": "order_by", + "required": false + }, + { + "name": "pagination", + "required": false + }, + { + "name": "category_id", + "required": true + }, + { + "name": "start_date", + "required": true + }, + { + "name": "end_date", + "required": true + }, + { + "name": "filters", + "required": false + } ], "pathParamDetails": [], "queryParamDetails": [], @@ -31066,7 +19248,7 @@ "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostParams" + "publicName": "ReportSentimentParams" }, "requestBody": { "contentType": "application/json", @@ -31093,7 +19275,7 @@ ] }, "responseModel": { - "name": "ClusterExampleRunsResponse", + "name": "report_response", "publicAliases": [] }, "result": { @@ -31114,7 +19296,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -31123,13 +19305,13 @@ "transport": "http" }, { - "resource": "reports.accuracy", - "publicResource": "reports.accuracy", - "operation": "clusterVerificationPairsV1ReportsClusterVerificationPairsPost", - "publicOperation": "clusterVerificationPairsV1ReportsClusterVerificationPairsPost", + "resource": "reports", + "publicResource": "reports", + "operation": "getReferralsReport", + "publicOperation": "getReferralsReport", "deprecated": false, "method": "POST", - "path": "/v1/reports/accuracy/cluster-verification-pairs", + "path": "/v1/reports/referrals", "pathParams": [], "publicPathParams": [], "queryParams": [], @@ -31137,12 +19319,76 @@ "headerParams": [], "publicHeaderParams": [], "bodyParams": [ - "category_id", - "cluster_id" + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "domain", + "start_date", + "end_date", + "organization_id", + "metric_filters", + "filters" ], "publicBodyParams": [ - "category_id", - "cluster_id" + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "domain", + "start_date", + "end_date", + "organization_id", + "metric_filters", + "filters" + ], + "bodyParamDetails": [ + { + "name": "date_interval", + "required": false + }, + { + "name": "dimensions", + "required": false + }, + { + "name": "metrics", + "required": true + }, + { + "name": "order_by", + "required": false + }, + { + "name": "pagination", + "required": false + }, + { + "name": "domain", + "required": true + }, + { + "name": "start_date", + "required": true + }, + { + "name": "end_date", + "required": false + }, + { + "name": "organization_id", + "required": false + }, + { + "name": "metric_filters", + "required": false + }, + { + "name": "filters", + "required": false + } ], "pathParamDetails": [], "queryParamDetails": [], @@ -31151,7 +19397,7 @@ "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostParams" + "publicName": "GetReferralsReportParams" }, "requestBody": { "contentType": "application/json", @@ -31178,7 +19424,7 @@ ] }, "responseModel": { - "name": "ClusterVerificationPairsResponse", + "name": "report_response", "publicAliases": [] }, "result": { @@ -31199,7 +19445,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -31208,13 +19454,13 @@ "transport": "http" }, { - "resource": "reports.accuracy", - "publicResource": "reports.accuracy", - "operation": "factcheckSetupStatusV1ReportsFactcheckSetupStatusPost", - "publicOperation": "factcheckSetupStatusV1ReportsFactcheckSetupStatusPost", + "resource": "reports", + "publicResource": "reports", + "operation": "getBotsReport", + "publicOperation": "getBotsReport", "deprecated": false, "method": "POST", - "path": "/v1/reports/accuracy/factcheck-setup-status", + "path": "/v1/reports/bots", "pathParams": [], "publicPathParams": [], "queryParams": [], @@ -31222,10 +19468,76 @@ "headerParams": [], "publicHeaderParams": [], "bodyParams": [ - "category_id" + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "domain", + "start_date", + "end_date", + "organization_id", + "metric_filters", + "filters" ], "publicBodyParams": [ - "category_id" + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "domain", + "start_date", + "end_date", + "organization_id", + "metric_filters", + "filters" + ], + "bodyParamDetails": [ + { + "name": "date_interval", + "required": false + }, + { + "name": "dimensions", + "required": false + }, + { + "name": "metrics", + "required": true + }, + { + "name": "order_by", + "required": false + }, + { + "name": "pagination", + "required": false + }, + { + "name": "domain", + "required": true + }, + { + "name": "start_date", + "required": true + }, + { + "name": "end_date", + "required": false + }, + { + "name": "organization_id", + "required": false + }, + { + "name": "metric_filters", + "required": false + }, + { + "name": "filters", + "required": false + } ], "pathParamDetails": [], "queryParamDetails": [], @@ -31234,7 +19546,7 @@ "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostParams" + "publicName": "GetBotsReportParams" }, "requestBody": { "contentType": "application/json", @@ -31261,7 +19573,7 @@ ] }, "responseModel": { - "name": "FactCheckSetupStatusResponse", + "name": "report_response", "publicAliases": [] }, "result": { @@ -31282,7 +19594,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -31291,61 +19603,118 @@ "transport": "http" }, { - "resource": "content.optimization", - "publicResource": "content.optimization", - "operation": "list", - "publicOperation": "list", + "resource": "reports", + "publicResource": "reports", + "operation": "getReferralsReportV2", + "publicOperation": "getReferralsReportV2", "deprecated": false, - "method": "GET", - "path": "/v1/content/{asset_id}/optimization", - "pathParams": [ - "asset_id" - ], - "publicPathParams": [ - "asset_id" - ], - "queryParams": [ - "limit", - "offset" - ], - "publicQueryParams": [ - "limit", - "offset" - ], + "method": "POST", + "path": "/v2/reports/referrals", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], - "bodyParams": [], - "publicBodyParams": [], - "pathParamDetails": [ - { - "name": "asset_id", - "required": true, - "style": "simple", - "explode": false - } + "bodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "domain", + "start_date", + "end_date", + "organization_id", + "timezone", + "metric_filters", + "filters" ], - "queryParamDetails": [ + "publicBodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "domain", + "start_date", + "end_date", + "organization_id", + "timezone", + "metric_filters", + "filters" + ], + "bodyParamDetails": [ { - "name": "limit", - "required": false, - "style": "form", - "explode": true, - "defaultValue": 10000 + "name": "date_interval", + "required": false }, { - "name": "offset", - "required": false, - "style": "form", - "explode": true, - "defaultValue": 0 + "name": "dimensions", + "required": false + }, + { + "name": "metrics", + "required": true + }, + { + "name": "order_by", + "required": false + }, + { + "name": "pagination", + "required": false + }, + { + "name": "domain", + "required": true + }, + { + "name": "start_date", + "required": true + }, + { + "name": "end_date", + "required": false + }, + { + "name": "organization_id", + "required": false + }, + { + "name": "timezone", + "required": false + }, + { + "name": "metric_filters", + "required": false + }, + { + "name": "filters", + "required": false } ], + "pathParamDetails": [], + "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "OptimizationListParams" + "publicName": "ReportGetReferralsReportV2Params" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" }, "response": { "status": "200", @@ -31359,7 +19728,7 @@ ] }, "responseModel": { - "name": "ContentOptimizationResponse", + "name": "report_response", "publicAliases": [] }, "result": { @@ -31380,7 +19749,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -31389,48 +19758,130 @@ "transport": "http" }, { - "resource": "content.optimization", - "publicResource": "content.optimization", - "operation": "retrieve", - "publicOperation": "retrieve", + "resource": "reports", + "publicResource": "reports", + "operation": "getBotsReportV2", + "publicOperation": "getBotsReportV2", "deprecated": false, - "method": "GET", - "path": "/v1/content/{asset_id}/optimization/{content_id}", - "pathParams": [ - "asset_id", - "content_id" - ], - "publicPathParams": [ - "asset_id", - "content_id" - ], + "method": "POST", + "path": "/v2/reports/bots", + "pathParams": [], + "publicPathParams": [], "queryParams": [], "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], - "bodyParams": [], - "publicBodyParams": [], - "pathParamDetails": [ + "bodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "domain", + "start_date", + "end_date", + "organization_id", + "timezone", + "metric_filters", + "filters", + "domain_id", + "tags" + ], + "publicBodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "domain", + "start_date", + "end_date", + "organization_id", + "timezone", + "metric_filters", + "filters", + "domain_id", + "tags" + ], + "bodyParamDetails": [ { - "name": "asset_id", - "required": true, - "style": "simple", - "explode": false + "name": "date_interval", + "required": false }, { - "name": "content_id", - "required": true, - "style": "simple", - "explode": false + "name": "dimensions", + "required": false + }, + { + "name": "metrics", + "required": true + }, + { + "name": "order_by", + "required": false + }, + { + "name": "pagination", + "required": false + }, + { + "name": "domain", + "required": true + }, + { + "name": "start_date", + "required": true + }, + { + "name": "end_date", + "required": false + }, + { + "name": "organization_id", + "required": false + }, + { + "name": "timezone", + "required": false + }, + { + "name": "metric_filters", + "required": false + }, + { + "name": "filters", + "required": false + }, + { + "name": "domain_id", + "required": false + }, + { + "name": "tags", + "required": false } ], + "pathParamDetails": [], "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "OptimizationRetrieveParams" + "publicName": "ReportGetBotsReportV2Params" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" }, "response": { "status": "200", @@ -31444,7 +19895,7 @@ ] }, "responseModel": { - "name": "ContentOptimizationAnalysisResponse", + "name": "report_response", "publicAliases": [] }, "result": { @@ -31465,7 +19916,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -31474,40 +19925,100 @@ "transport": "http" }, { - "resource": "knowledgeBases", - "publicResource": "knowledgeBases", - "operation": "list", - "publicOperation": "list", + "resource": "reports", + "publicResource": "reports", + "operation": "queryFanouts", + "publicOperation": "queryFanouts", "deprecated": false, - "method": "GET", - "path": "/v1/knowledge-bases", + "method": "POST", + "path": "/v1/reports/query-fanouts", "pathParams": [], "publicPathParams": [], - "queryParams": [ - "organization_id" - ], - "publicQueryParams": [ - "organization_id" - ], + "queryParams": [], + "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], - "bodyParams": [], - "publicBodyParams": [], - "pathParamDetails": [], - "queryParamDetails": [ + "bodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" + ], + "publicBodyParams": [ + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" + ], + "bodyParamDetails": [ + { + "name": "date_interval", + "required": false + }, { - "name": "organization_id", - "required": false, - "style": "form", - "explode": true + "name": "dimensions", + "required": false + }, + { + "name": "metrics", + "required": true + }, + { + "name": "order_by", + "required": false + }, + { + "name": "pagination", + "required": false + }, + { + "name": "category_id", + "required": true + }, + { + "name": "start_date", + "required": true + }, + { + "name": "end_date", + "required": true + }, + { + "name": "filters", + "required": false } ], + "pathParamDetails": [], + "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "KnowledgeBaseListParams" + "publicName": "ReportQueryFanoutsParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" }, "response": { "status": "200", @@ -31521,7 +20032,7 @@ ] }, "responseModel": { - "name": "ListKnowledgeBasesResponse", + "name": "report_response", "publicAliases": [] }, "result": { @@ -31542,7 +20053,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -31551,61 +20062,87 @@ "transport": "http" }, { - "resource": "knowledgeBases", - "publicResource": "knowledgeBases", - "operation": "search", - "publicOperation": "search", + "resource": "reports", + "publicResource": "reports", + "operation": "streamCitations", + "publicOperation": "streamCitations", "deprecated": false, "method": "POST", - "path": "/v1/knowledge-bases/{knowledge_base_id}/search", - "pathParams": [ - "knowledge_base_id" - ], - "publicPathParams": [ - "knowledge_base_id" - ], - "queryParams": [ - "organization_id" - ], - "publicQueryParams": [ - "organization_id" - ], + "path": "/v1/reports/citations/stream", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], "bodyParams": [ - "query", - "top_k", - "return_full_page", + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", "filters" ], "publicBodyParams": [ - "query", - "top_k", - "return_full_page", + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", "filters" ], - "pathParamDetails": [ + "bodyParamDetails": [ { - "name": "knowledge_base_id", - "required": true, - "style": "simple", - "explode": false - } - ], - "queryParamDetails": [ + "name": "date_interval", + "required": false + }, { - "name": "organization_id", - "required": false, - "style": "form", - "explode": true + "name": "dimensions", + "required": false + }, + { + "name": "metrics", + "required": true + }, + { + "name": "order_by", + "required": false + }, + { + "name": "pagination", + "required": false + }, + { + "name": "category_id", + "required": true + }, + { + "name": "start_date", + "required": true + }, + { + "name": "end_date", + "required": true + }, + { + "name": "filters", + "required": false } ], + "pathParamDetails": [], + "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "KnowledgeBaseSearchParams" + "publicName": "ReportStreamCitationsParams" }, "requestBody": { "contentType": "application/json", @@ -31622,19 +20159,15 @@ }, "response": { "status": "200", - "contentType": "application/json", - "encoding": "json", + "contentType": "text/event-stream", + "encoding": "text", "contents": [ { - "contentType": "application/json", - "encoding": "json" + "contentType": "text/event-stream", + "encoding": "text" } ] }, - "responseModel": { - "name": "KnowledgeBaseSearchResponse", - "publicAliases": [] - }, "result": { "successStatus": "200", "errorStatuses": [ @@ -31653,68 +20186,97 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } ], "responseLinks": [], - "transport": "http" + "transport": "http", + "streaming": "sse" }, { - "resource": "knowledgeBases.documents", - "publicResource": "knowledgeBases.documents", - "operation": "create", - "publicOperation": "create", + "resource": "reports", + "publicResource": "reports", + "operation": "streamVisibility", + "publicOperation": "streamVisibility", "deprecated": false, "method": "POST", - "path": "/v1/knowledge-bases/{knowledge_base_id}/documents", - "pathParams": [ - "knowledge_base_id" - ], - "publicPathParams": [ - "knowledge_base_id" - ], - "queryParams": [ - "organization_id" - ], - "publicQueryParams": [ - "organization_id" - ], + "path": "/v1/reports/visibility/stream", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], "bodyParams": [ - "name", - "text", - "folder" + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" ], "publicBodyParams": [ - "name", - "text", - "folder" + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" ], - "pathParamDetails": [ + "bodyParamDetails": [ { - "name": "knowledge_base_id", - "required": true, - "style": "simple", - "explode": false - } - ], - "queryParamDetails": [ + "name": "date_interval", + "required": false + }, { - "name": "organization_id", - "required": false, - "style": "form", - "explode": true + "name": "dimensions", + "required": false + }, + { + "name": "metrics", + "required": true + }, + { + "name": "order_by", + "required": false + }, + { + "name": "pagination", + "required": false + }, + { + "name": "category_id", + "required": true + }, + { + "name": "start_date", + "required": true + }, + { + "name": "end_date", + "required": true + }, + { + "name": "filters", + "required": false } ], + "pathParamDetails": [], + "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "DocumentCreateParams" + "publicName": "ReportStreamVisibilityParams" }, "requestBody": { "contentType": "application/json", @@ -31723,10 +20285,6 @@ { "contentType": "application/json", "encoding": "json" - }, - { - "contentType": "multipart/form-data", - "encoding": "multipart" } ], "required": true, @@ -31734,22 +20292,18 @@ "publicIdentifier": "body" }, "response": { - "status": "201", - "contentType": "application/json", - "encoding": "json", + "status": "200", + "contentType": "text/event-stream", + "encoding": "text", "contents": [ { - "contentType": "application/json", - "encoding": "json" + "contentType": "text/event-stream", + "encoding": "text" } ] }, - "responseModel": { - "name": "DocumentOperationResponse", - "publicAliases": [] - }, "result": { - "successStatus": "201", + "successStatus": "200", "errorStatuses": [ "422" ] @@ -31761,73 +20315,102 @@ "encoding": "json", "contents": [ { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http" - }, - { - "resource": "knowledgeBases.documents", - "publicResource": "knowledgeBases.documents", - "operation": "update", - "publicOperation": "update", - "deprecated": false, - "method": "PUT", - "path": "/v1/knowledge-bases/{knowledge_base_id}/documents", - "pathParams": [ - "knowledge_base_id" - ], - "publicPathParams": [ - "knowledge_base_id" - ], - "queryParams": [ - "organization_id" - ], - "publicQueryParams": [ - "organization_id" + "contentType": "application/json", + "encoding": "json" + } + ], + "model": { + "name": "http_validation_error", + "publicAliases": [] + } + } ], + "responseLinks": [], + "transport": "http", + "streaming": "sse" + }, + { + "resource": "reports", + "publicResource": "reports", + "operation": "streamSentiment", + "publicOperation": "streamSentiment", + "deprecated": false, + "method": "POST", + "path": "/v1/reports/sentiment/stream", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], "bodyParams": [ - "name", - "text", - "folder" + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" ], "publicBodyParams": [ - "name", - "text", - "folder" + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" ], - "pathParamDetails": [ + "bodyParamDetails": [ { - "name": "knowledge_base_id", - "required": true, - "style": "simple", - "explode": false - } - ], - "queryParamDetails": [ + "name": "date_interval", + "required": false + }, { - "name": "organization_id", - "required": false, - "style": "form", - "explode": true + "name": "dimensions", + "required": false + }, + { + "name": "metrics", + "required": true + }, + { + "name": "order_by", + "required": false + }, + { + "name": "pagination", + "required": false + }, + { + "name": "category_id", + "required": true + }, + { + "name": "start_date", + "required": true + }, + { + "name": "end_date", + "required": true + }, + { + "name": "filters", + "required": false } ], + "pathParamDetails": [], + "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "DocumentUpdateParams" + "publicName": "ReportStreamSentimentParams" }, "requestBody": { "contentType": "application/json", @@ -31836,10 +20419,6 @@ { "contentType": "application/json", "encoding": "json" - }, - { - "contentType": "multipart/form-data", - "encoding": "multipart" } ], "required": true, @@ -31848,19 +20427,15 @@ }, "response": { "status": "200", - "contentType": "application/json", - "encoding": "json", + "contentType": "text/event-stream", + "encoding": "text", "contents": [ { - "contentType": "application/json", - "encoding": "json" + "contentType": "text/event-stream", + "encoding": "text" } ] }, - "responseModel": { - "name": "DocumentOperationResponse", - "publicAliases": [] - }, "result": { "successStatus": "200", "errorStatuses": [ @@ -31879,64 +20454,97 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } ], "responseLinks": [], - "transport": "http" + "transport": "http", + "streaming": "sse" }, { - "resource": "knowledgeBases.documents", - "publicResource": "knowledgeBases.documents", - "operation": "delete", - "publicOperation": "delete", + "resource": "reports.webSearchResults", + "publicResource": "reports.webSearchResults", + "operation": "query", + "publicOperation": "query", "deprecated": false, - "method": "DELETE", - "path": "/v1/knowledge-bases/{knowledge_base_id}/documents", - "pathParams": [ - "knowledge_base_id" - ], - "publicPathParams": [ - "knowledge_base_id" - ], - "queryParams": [ - "organization_id" - ], - "publicQueryParams": [ - "organization_id" - ], + "method": "POST", + "path": "/v1/reports/web-search-results", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], "bodyParams": [ - "name" + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" ], "publicBodyParams": [ - "name" + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" ], - "pathParamDetails": [ + "bodyParamDetails": [ { - "name": "knowledge_base_id", - "required": true, - "style": "simple", - "explode": false - } - ], - "queryParamDetails": [ + "name": "date_interval", + "required": false + }, { - "name": "organization_id", - "required": false, - "style": "form", - "explode": true + "name": "dimensions", + "required": false + }, + { + "name": "metrics", + "required": true + }, + { + "name": "order_by", + "required": false + }, + { + "name": "pagination", + "required": false + }, + { + "name": "category_id", + "required": true + }, + { + "name": "start_date", + "required": true + }, + { + "name": "end_date", + "required": true + }, + { + "name": "filters", + "required": false } ], + "pathParamDetails": [], + "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "DocumentDeleteParams" + "publicName": "WebSearchResultQueryParams" }, "requestBody": { "contentType": "application/json", @@ -31963,7 +20571,7 @@ ] }, "responseModel": { - "name": "DocumentOperationResponse", + "name": "web_search_results_response", "publicAliases": [] }, "result": { @@ -31984,7 +20592,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -31993,55 +20601,87 @@ "transport": "http" }, { - "resource": "knowledgeBases.folders", - "publicResource": "knowledgeBases.folders", - "operation": "create", - "publicOperation": "create", + "resource": "reports.webSearchResults", + "publicResource": "reports.webSearchResults", + "operation": "stream", + "publicOperation": "stream", "deprecated": false, "method": "POST", - "path": "/v1/knowledge-bases/{knowledge_base_id}/folders", - "pathParams": [ - "knowledge_base_id" - ], - "publicPathParams": [ - "knowledge_base_id" - ], - "queryParams": [ - "organization_id" - ], - "publicQueryParams": [ - "organization_id" - ], + "path": "/v1/reports/web-search-results/stream", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], "bodyParams": [ - "path" + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" ], "publicBodyParams": [ - "path" + "date_interval", + "dimensions", + "metrics", + "order_by", + "pagination", + "category_id", + "start_date", + "end_date", + "filters" ], - "pathParamDetails": [ + "bodyParamDetails": [ { - "name": "knowledge_base_id", - "required": true, - "style": "simple", - "explode": false - } - ], - "queryParamDetails": [ + "name": "date_interval", + "required": false + }, { - "name": "organization_id", - "required": false, - "style": "form", - "explode": true + "name": "dimensions", + "required": false + }, + { + "name": "metrics", + "required": true + }, + { + "name": "order_by", + "required": false + }, + { + "name": "pagination", + "required": false + }, + { + "name": "category_id", + "required": true + }, + { + "name": "start_date", + "required": true + }, + { + "name": "end_date", + "required": true + }, + { + "name": "filters", + "required": false } ], + "pathParamDetails": [], + "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "FolderCreateParams" + "publicName": "WebSearchResultStreamParams" }, "requestBody": { "contentType": "application/json", @@ -32057,22 +20697,18 @@ "publicIdentifier": "body" }, "response": { - "status": "201", - "contentType": "application/json", - "encoding": "json", + "status": "200", + "contentType": "text/event-stream", + "encoding": "text", "contents": [ { - "contentType": "application/json", - "encoding": "json" + "contentType": "text/event-stream", + "encoding": "text" } ] }, - "responseModel": { - "name": "FolderOperationResponse", - "publicAliases": [] - }, "result": { - "successStatus": "201", + "successStatus": "200", "errorStatuses": [ "422" ] @@ -32089,66 +20725,175 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } ], "responseLinks": [], - "transport": "http" + "transport": "http", + "streaming": "sse" }, { - "resource": "knowledgeBases.folders", - "publicResource": "knowledgeBases.folders", - "operation": "delete", - "publicOperation": "delete", + "resource": "reports.shopping", + "publicResource": "reports.shopping", + "operation": "visibility", + "publicOperation": "visibility", "deprecated": false, - "method": "DELETE", - "path": "/v1/knowledge-bases/{knowledge_base_id}/folders", - "pathParams": [ - "knowledge_base_id" - ], - "publicPathParams": [ - "knowledge_base_id" - ], - "queryParams": [ - "organization_id" - ], - "publicQueryParams": [ - "organization_id" - ], + "method": "POST", + "path": "/v1/reports/shopping/visibility", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], "bodyParams": [ - "path", - "recursive" + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "owned_asset_names", + "search_asset", + "include_asset", + "include_asset_only", + "include_assets_only", + "rank_by", + "include_position_frequency" ], "publicBodyParams": [ - "path", - "recursive" + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "owned_asset_names", + "search_asset", + "include_asset", + "include_asset_only", + "include_assets_only", + "rank_by", + "include_position_frequency" ], - "pathParamDetails": [ + "bodyParamDetails": [ { - "name": "knowledge_base_id", - "required": true, - "style": "simple", - "explode": false - } - ], - "queryParamDetails": [ + "name": "category_id", + "required": true + }, { - "name": "organization_id", - "required": false, - "style": "form", - "explode": true + "name": "start_date", + "required": true + }, + { + "name": "end_date", + "required": true + }, + { + "name": "comparison_start_date", + "required": false + }, + { + "name": "comparison_end_date", + "required": false + }, + { + "name": "date_interval", + "required": false + }, + { + "name": "filters", + "required": false + }, + { + "name": "order_by", + "required": false + }, + { + "name": "pagination", + "required": false + }, + { + "name": "include_count", + "required": false + }, + { + "name": "tag_filter_type", + "required": false + }, + { + "name": "include_no_tag", + "required": false + }, + { + "name": "exclude_topic_ids", + "required": false + }, + { + "name": "dimensions", + "required": false + }, + { + "name": "metrics", + "required": false + }, + { + "name": "owned_asset_names", + "required": false + }, + { + "name": "search_asset", + "required": false + }, + { + "name": "include_asset", + "required": false + }, + { + "name": "include_asset_only", + "required": false + }, + { + "name": "include_assets_only", + "required": false + }, + { + "name": "rank_by", + "required": false + }, + { + "name": "include_position_frequency", + "required": false } ], + "pathParamDetails": [], + "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "FolderDeleteParams" + "publicName": "ShoppingVisibilityParams" }, "requestBody": { "contentType": "application/json", @@ -32175,7 +20920,7 @@ ] }, "responseModel": { - "name": "FolderOperationResponse", + "name": "shopping_rows_response", "publicAliases": [] }, "result": { @@ -32196,7 +20941,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -32205,57 +20950,184 @@ "transport": "http" }, { - "resource": "agents", - "publicResource": "agents", - "operation": "list", - "publicOperation": "list", + "resource": "reports.shopping", + "publicResource": "reports.shopping", + "operation": "itemVisibility", + "publicOperation": "itemVisibility", "deprecated": false, - "method": "GET", - "path": "/v1/agents", + "method": "POST", + "path": "/v1/reports/shopping/item-visibility", "pathParams": [], "publicPathParams": [], - "queryParams": [ - "statuses", - "limit", - "next_cursor" - ], - "publicQueryParams": [ - "statuses", - "limit", - "next_cursor" - ], + "queryParams": [], + "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], - "bodyParams": [], - "publicBodyParams": [], - "pathParamDetails": [], - "queryParamDetails": [ + "bodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "owned_asset_names", + "include_items", + "search_item", + "merchant_filter_type", + "include_competitors", + "target_product", + "competitor_limit", + "include_position_frequency" + ], + "publicBodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "owned_asset_names", + "include_items", + "search_item", + "merchant_filter_type", + "include_competitors", + "target_product", + "competitor_limit", + "include_position_frequency" + ], + "bodyParamDetails": [ + { + "name": "category_id", + "required": true + }, + { + "name": "start_date", + "required": true + }, + { + "name": "end_date", + "required": true + }, + { + "name": "comparison_start_date", + "required": false + }, + { + "name": "comparison_end_date", + "required": false + }, + { + "name": "date_interval", + "required": false + }, + { + "name": "filters", + "required": false + }, + { + "name": "order_by", + "required": false + }, + { + "name": "pagination", + "required": false + }, + { + "name": "include_count", + "required": false + }, + { + "name": "tag_filter_type", + "required": false + }, + { + "name": "include_no_tag", + "required": false + }, + { + "name": "exclude_topic_ids", + "required": false + }, + { + "name": "dimensions", + "required": false + }, { - "name": "statuses", - "required": false, - "style": "form", - "explode": true + "name": "metrics", + "required": false }, { - "name": "limit", - "required": false, - "style": "form", - "explode": true, - "defaultValue": 100 + "name": "owned_asset_names", + "required": false }, { - "name": "next_cursor", - "required": false, - "style": "form", - "explode": true + "name": "include_items", + "required": false + }, + { + "name": "search_item", + "required": false + }, + { + "name": "merchant_filter_type", + "required": false + }, + { + "name": "include_competitors", + "required": false + }, + { + "name": "target_product", + "required": false + }, + { + "name": "competitor_limit", + "required": false + }, + { + "name": "include_position_frequency", + "required": false } ], + "pathParamDetails": [], + "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "AgentListParams" + "publicName": "ShoppingItemVisibilityParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" }, "response": { "status": "200", @@ -32269,7 +21141,7 @@ ] }, "responseModel": { - "name": "ListAgentsResponse", + "name": "shopping_rows_response", "publicAliases": [] }, "result": { @@ -32290,7 +21162,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -32299,13 +21171,13 @@ "transport": "http" }, { - "resource": "agents", - "publicResource": "agents", - "operation": "createV1Post", - "publicOperation": "createV1Post", + "resource": "reports.shopping", + "publicResource": "reports.shopping", + "operation": "merchantDistribution", + "publicOperation": "merchantDistribution", "deprecated": false, "method": "POST", - "path": "/v1/agents", + "path": "/v1/reports/shopping/merchant-distribution", "pathParams": [], "publicPathParams": [], "queryParams": [], @@ -32313,16 +21185,112 @@ "headerParams": [], "publicHeaderParams": [], "bodyParams": [ - "organization_id", - "name", - "description", - "graph" + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "owned_asset_names", + "search_merchant" ], "publicBodyParams": [ - "organization_id", - "name", - "description", - "graph" + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "owned_asset_names", + "search_merchant" + ], + "bodyParamDetails": [ + { + "name": "category_id", + "required": true + }, + { + "name": "start_date", + "required": true + }, + { + "name": "end_date", + "required": true + }, + { + "name": "comparison_start_date", + "required": false + }, + { + "name": "comparison_end_date", + "required": false + }, + { + "name": "date_interval", + "required": false + }, + { + "name": "filters", + "required": false + }, + { + "name": "order_by", + "required": false + }, + { + "name": "pagination", + "required": false + }, + { + "name": "include_count", + "required": false + }, + { + "name": "tag_filter_type", + "required": false + }, + { + "name": "include_no_tag", + "required": false + }, + { + "name": "exclude_topic_ids", + "required": false + }, + { + "name": "dimensions", + "required": false + }, + { + "name": "metrics", + "required": false + }, + { + "name": "owned_asset_names", + "required": false + }, + { + "name": "search_merchant", + "required": false + } ], "pathParamDetails": [], "queryParamDetails": [], @@ -32331,7 +21299,7 @@ "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "AgentCreateV1PostParams" + "publicName": "ShoppingMerchantDistributionParams" }, "requestBody": { "contentType": "application/json", @@ -32347,7 +21315,7 @@ "publicIdentifier": "body" }, "response": { - "status": "201", + "status": "200", "contentType": "application/json", "encoding": "json", "contents": [ @@ -32358,11 +21326,11 @@ ] }, "responseModel": { - "name": "Agent", + "name": "shopping_rows_response", "publicAliases": [] }, "result": { - "successStatus": "201", + "successStatus": "200", "errorStatuses": [ "422" ] @@ -32379,7 +21347,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -32388,128 +21356,160 @@ "transport": "http" }, { - "resource": "agents", - "publicResource": "agents", - "operation": "publishV1IdPublishPost", - "publicOperation": "publishV1IdPublishPost", + "resource": "reports.shopping", + "publicResource": "reports.shopping", + "operation": "merchantVisibilityByBrand", + "publicOperation": "merchantVisibilityByBrand", "deprecated": false, "method": "POST", - "path": "/v1/agents/{agent_id}/publish", - "pathParams": [ - "agent_id" - ], - "publicPathParams": [ - "agent_id" - ], + "path": "/v1/reports/shopping/merchant-visibility-by-brand", + "pathParams": [], + "publicPathParams": [], "queryParams": [], "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], - "bodyParams": [], - "publicBodyParams": [], - "pathParamDetails": [ - { - "name": "agent_id", - "required": true, - "style": "simple", - "explode": false - } - ], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "AgentPublishV1IdPublishPostParams" - }, - "response": { - "status": "201", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ] - }, - "responseModel": { - "name": "Agent", - "publicAliases": [] - }, - "result": { - "successStatus": "201", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http" - }, - { - "resource": "agents", - "publicResource": "agents", - "operation": "retrieve", - "publicOperation": "retrieve", - "deprecated": false, - "method": "GET", - "path": "/v1/agents/{agent_id}", - "pathParams": [ - "agent_id" - ], - "publicPathParams": [ - "agent_id" - ], - "queryParams": [ - "version" + "bodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "owned_asset_names", + "search_brand", + "include_brand", + "include_brand_only" ], - "publicQueryParams": [ - "version" + "publicBodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "owned_asset_names", + "search_brand", + "include_brand", + "include_brand_only" ], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [], - "publicBodyParams": [], - "pathParamDetails": [ + "bodyParamDetails": [ { - "name": "agent_id", - "required": true, - "style": "simple", - "explode": false - } - ], - "queryParamDetails": [ + "name": "category_id", + "required": true + }, { - "name": "version", - "required": false, - "style": "form", - "explode": true + "name": "start_date", + "required": true + }, + { + "name": "end_date", + "required": true + }, + { + "name": "comparison_start_date", + "required": false + }, + { + "name": "comparison_end_date", + "required": false + }, + { + "name": "date_interval", + "required": false + }, + { + "name": "filters", + "required": false + }, + { + "name": "order_by", + "required": false + }, + { + "name": "pagination", + "required": false + }, + { + "name": "include_count", + "required": false + }, + { + "name": "tag_filter_type", + "required": false + }, + { + "name": "include_no_tag", + "required": false + }, + { + "name": "exclude_topic_ids", + "required": false + }, + { + "name": "dimensions", + "required": false + }, + { + "name": "metrics", + "required": false + }, + { + "name": "owned_asset_names", + "required": false + }, + { + "name": "search_brand", + "required": false + }, + { + "name": "include_brand", + "required": false + }, + { + "name": "include_brand_only", + "required": false } ], + "pathParamDetails": [], + "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "AgentRetrieveParams" + "publicName": "ShoppingMerchantVisibilityByBrandParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" }, "response": { "status": "200", @@ -32523,7 +21523,7 @@ ] }, "responseModel": { - "name": "AgentDetail", + "name": "shopping_rows_response", "publicAliases": [] }, "result": { @@ -32544,7 +21544,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -32553,44 +21553,129 @@ "transport": "http" }, { - "resource": "agents", - "publicResource": "agents", - "operation": "updateV1IdPatch", - "publicOperation": "updateV1IdPatch", + "resource": "reports.shopping", + "publicResource": "reports.shopping", + "operation": "merchantByItems", + "publicOperation": "merchantByItems", "deprecated": false, - "method": "PATCH", - "path": "/v1/agents/{agent_id}", - "pathParams": [ - "agent_id" - ], - "publicPathParams": [ - "agent_id" - ], + "method": "POST", + "path": "/v1/reports/shopping/merchant-by-items", + "pathParams": [], + "publicPathParams": [], "queryParams": [], "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], "bodyParams": [ - "graph" + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "product_name" ], "publicBodyParams": [ - "graph" + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "product_name" ], - "pathParamDetails": [ + "bodyParamDetails": [ { - "name": "agent_id", - "required": true, - "style": "simple", - "explode": false + "name": "category_id", + "required": true + }, + { + "name": "start_date", + "required": true + }, + { + "name": "end_date", + "required": true + }, + { + "name": "comparison_start_date", + "required": false + }, + { + "name": "comparison_end_date", + "required": false + }, + { + "name": "date_interval", + "required": false + }, + { + "name": "filters", + "required": false + }, + { + "name": "order_by", + "required": false + }, + { + "name": "pagination", + "required": false + }, + { + "name": "include_count", + "required": false + }, + { + "name": "tag_filter_type", + "required": false + }, + { + "name": "include_no_tag", + "required": false + }, + { + "name": "exclude_topic_ids", + "required": false + }, + { + "name": "dimensions", + "required": false + }, + { + "name": "metrics", + "required": false + }, + { + "name": "product_name", + "required": false } ], + "pathParamDetails": [], "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "AgentUpdateV1IdPatchParams" + "publicName": "ShoppingMerchantByItemsParams" }, "requestBody": { "contentType": "application/json", @@ -32617,7 +21702,7 @@ ] }, "responseModel": { - "name": "AgentDetail", + "name": "shopping_rows_response", "publicAliases": [] }, "result": { @@ -32638,7 +21723,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -32647,54 +21732,161 @@ "transport": "http" }, { - "resource": "agents", - "publicResource": "agents", - "operation": "listGraphV1GraphGet", - "publicOperation": "listGraphV1GraphGet", + "resource": "reports.shopping", + "publicResource": "reports.shopping", + "operation": "allItemsWithMerchants", + "publicOperation": "allItemsWithMerchants", "deprecated": false, - "method": "GET", - "path": "/v1/agents/{agent_id}/graph", - "pathParams": [ - "agent_id" - ], - "publicPathParams": [ - "agent_id" - ], - "queryParams": [ - "version" - ], - "publicQueryParams": [ - "version" - ], + "method": "POST", + "path": "/v1/reports/shopping/all-items-with-merchants", + "pathParams": [], + "publicPathParams": [], + "queryParams": [], + "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], - "bodyParams": [], - "publicBodyParams": [], - "pathParamDetails": [ + "bodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "owned_asset_names", + "include_items", + "search_item", + "merchant_filter_type", + "rank_by", + "sort_order" + ], + "publicBodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "owned_asset_names", + "include_items", + "search_item", + "merchant_filter_type", + "rank_by", + "sort_order" + ], + "bodyParamDetails": [ + { + "name": "category_id", + "required": true + }, + { + "name": "start_date", + "required": true + }, + { + "name": "end_date", + "required": true + }, + { + "name": "comparison_start_date", + "required": false + }, + { + "name": "comparison_end_date", + "required": false + }, + { + "name": "date_interval", + "required": false + }, + { + "name": "filters", + "required": false + }, + { + "name": "order_by", + "required": false + }, + { + "name": "pagination", + "required": false + }, + { + "name": "include_count", + "required": false + }, + { + "name": "tag_filter_type", + "required": false + }, { - "name": "agent_id", - "required": true, - "style": "simple", - "explode": false - } - ], - "queryParamDetails": [ + "name": "include_no_tag", + "required": false + }, { - "name": "version", - "required": false, - "style": "form", - "explode": true + "name": "exclude_topic_ids", + "required": false + }, + { + "name": "dimensions", + "required": false + }, + { + "name": "metrics", + "required": false + }, + { + "name": "owned_asset_names", + "required": false + }, + { + "name": "include_items", + "required": false + }, + { + "name": "search_item", + "required": false + }, + { + "name": "merchant_filter_type", + "required": false + }, + { + "name": "rank_by", + "required": false + }, + { + "name": "sort_order", + "required": false } ], + "pathParamDetails": [], + "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "AgentListGraphV1GraphGetParams" + "publicName": "ShoppingAllItemsWithMerchantsParams" }, - "response": { - "status": "200", + "requestBody": { "contentType": "application/json", "encoding": "json", "contents": [ @@ -32702,60 +21894,11 @@ "contentType": "application/json", "encoding": "json" } - ] - }, - "responseModel": { - "name": "AgentGraph", - "publicAliases": [] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http" - }, - { - "resource": "agents.nodeTypes", - "publicResource": "agents.nodeTypes", - "operation": "listV1AgentsGet", - "publicOperation": "listV1AgentsGet", - "deprecated": false, - "method": "GET", - "path": "/v1/agents/node-types", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [], - "publicBodyParams": [], - "pathParamDetails": [], - "queryParamDetails": [], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], "response": { "status": "200", "contentType": "application/json", @@ -32768,7 +21911,7 @@ ] }, "responseModel": { - "name": "ListNodeTypesResponse", + "name": "shopping_rows_response", "publicAliases": [] }, "result": { @@ -32789,7 +21932,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -32798,40 +21941,136 @@ "transport": "http" }, { - "resource": "agents.nodeTypes", - "publicResource": "agents.nodeTypes", - "operation": "listSchemaV1AgentsSchemaGet", - "publicOperation": "listSchemaV1AgentsSchemaGet", + "resource": "reports.shopping", + "publicResource": "reports.shopping", + "operation": "triggerRate", + "publicOperation": "triggerRate", "deprecated": false, - "method": "GET", - "path": "/v1/agents/node-types/{node_type}/schema", - "pathParams": [ - "node_type" - ], - "publicPathParams": [ - "node_type" - ], + "method": "POST", + "path": "/v1/reports/shopping/trigger-rate", + "pathParams": [], + "publicPathParams": [], "queryParams": [], "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], - "bodyParams": [], - "publicBodyParams": [], - "pathParamDetails": [ + "bodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics" + ], + "publicBodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics" + ], + "bodyParamDetails": [ { - "name": "node_type", - "required": true, - "style": "simple", - "explode": false + "name": "category_id", + "required": true + }, + { + "name": "start_date", + "required": true + }, + { + "name": "end_date", + "required": true + }, + { + "name": "comparison_start_date", + "required": false + }, + { + "name": "comparison_end_date", + "required": false + }, + { + "name": "date_interval", + "required": false + }, + { + "name": "filters", + "required": false + }, + { + "name": "order_by", + "required": false + }, + { + "name": "pagination", + "required": false + }, + { + "name": "include_count", + "required": false + }, + { + "name": "tag_filter_type", + "required": false + }, + { + "name": "include_no_tag", + "required": false + }, + { + "name": "exclude_topic_ids", + "required": false + }, + { + "name": "dimensions", + "required": false + }, + { + "name": "metrics", + "required": false } ], + "pathParamDetails": [], "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "NodeTypeListSchemaV1AgentsSchemaGetParams" + "publicName": "ShoppingTriggerRateParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" }, "response": { "status": "200", @@ -32845,7 +22084,7 @@ ] }, "responseModel": { - "name": "NodeSchemaResponse", + "name": "shopping_rows_response", "publicAliases": [] }, "result": { @@ -32866,7 +22105,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -32875,44 +22114,135 @@ "transport": "http" }, { - "resource": "agents.runs", - "publicResource": "agents.runs", - "operation": "create", - "publicOperation": "create", + "resource": "reports.shopping", + "publicResource": "reports.shopping", + "operation": "merchantShare", + "publicOperation": "merchantShare", "deprecated": false, "method": "POST", - "path": "/v1/agents/{agent_id}/runs", - "pathParams": [ - "agent_id" - ], - "publicPathParams": [ - "agent_id" - ], + "path": "/v1/reports/shopping/merchant-share", + "pathParams": [], + "publicPathParams": [], "queryParams": [], "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], "bodyParams": [ - "body" + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "target_asset_names", + "owned_asset_names" ], "publicBodyParams": [ - "body" + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "dimensions", + "metrics", + "target_asset_names", + "owned_asset_names" ], - "pathParamDetails": [ + "bodyParamDetails": [ + { + "name": "category_id", + "required": true + }, + { + "name": "start_date", + "required": true + }, + { + "name": "end_date", + "required": true + }, + { + "name": "comparison_start_date", + "required": false + }, + { + "name": "comparison_end_date", + "required": false + }, + { + "name": "date_interval", + "required": false + }, + { + "name": "filters", + "required": false + }, + { + "name": "order_by", + "required": false + }, + { + "name": "pagination", + "required": false + }, + { + "name": "include_count", + "required": false + }, { - "name": "agent_id", - "required": true, - "style": "simple", - "explode": false + "name": "tag_filter_type", + "required": false + }, + { + "name": "include_no_tag", + "required": false + }, + { + "name": "exclude_topic_ids", + "required": false + }, + { + "name": "dimensions", + "required": false + }, + { + "name": "metrics", + "required": false + }, + { + "name": "target_asset_names", + "required": false + }, + { + "name": "owned_asset_names", + "required": false } ], + "pathParamDetails": [], "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "RunCreateParams" + "publicName": "ShoppingMerchantShareParams" }, "requestBody": { "contentType": "application/json", @@ -32923,12 +22253,12 @@ "encoding": "json" } ], - "required": false, + "required": true, "publicName": "body", "publicIdentifier": "body" }, "response": { - "status": "202", + "status": "200", "contentType": "application/json", "encoding": "json", "contents": [ @@ -32939,11 +22269,11 @@ ] }, "responseModel": { - "name": "AcceptedAgentRun", + "name": "shopping_rows_response", "publicAliases": [] }, "result": { - "successStatus": "202", + "successStatus": "200", "errorStatuses": [ "422" ] @@ -32960,7 +22290,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -32969,48 +22299,70 @@ "transport": "http" }, { - "resource": "agents.runs", - "publicResource": "agents.runs", - "operation": "retrieve", - "publicOperation": "retrieve", + "resource": "reports.shopping", + "publicResource": "reports.shopping", + "operation": "productMerchantUrls", + "publicOperation": "productMerchantUrls", "deprecated": false, - "method": "GET", - "path": "/v1/agents/{agent_id}/runs/{run_id}", - "pathParams": [ - "agent_id", - "run_id" - ], - "publicPathParams": [ - "agent_id", - "run_id" - ], + "method": "POST", + "path": "/v1/reports/shopping/product-merchant-urls", + "pathParams": [], + "publicPathParams": [], "queryParams": [], "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], - "bodyParams": [], - "publicBodyParams": [], - "pathParamDetails": [ + "bodyParams": [ + "category_id", + "product_names", + "start_date", + "end_date" + ], + "publicBodyParams": [ + "category_id", + "product_names", + "start_date", + "end_date" + ], + "bodyParamDetails": [ { - "name": "agent_id", - "required": true, - "style": "simple", - "explode": false + "name": "category_id", + "required": true }, { - "name": "run_id", - "required": true, - "style": "simple", - "explode": false + "name": "product_names", + "required": true + }, + { + "name": "start_date", + "required": true + }, + { + "name": "end_date", + "required": true } ], + "pathParamDetails": [], "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "RunRetrieveParams" + "publicName": "ShoppingProductMerchantUrlsParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" }, "response": { "status": "200", @@ -33024,7 +22376,7 @@ ] }, "responseModel": { - "name": "AgentRun", + "name": "shopping_rows_response", "publicAliases": [] }, "result": { @@ -33045,7 +22397,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -33054,29 +22406,131 @@ "transport": "http" }, { - "resource": "organizations", - "publicResource": "organizations", - "operation": "list", - "publicOperation": "list", + "resource": "reports.shopping", + "publicResource": "reports.shopping", + "operation": "executions", + "publicOperation": "executions", "deprecated": false, - "method": "GET", - "path": "/v1/org", + "method": "POST", + "path": "/v1/reports/shopping/executions", "pathParams": [], "publicPathParams": [], "queryParams": [], "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], - "bodyParams": [], - "publicBodyParams": [], + "bodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "analysis_types", + "analysis_filter_type", + "owned_asset_names" + ], + "publicBodyParams": [ + "category_id", + "start_date", + "end_date", + "comparison_start_date", + "comparison_end_date", + "date_interval", + "filters", + "order_by", + "pagination", + "include_count", + "tag_filter_type", + "include_no_tag", + "exclude_topic_ids", + "analysis_types", + "analysis_filter_type", + "owned_asset_names" + ], + "bodyParamDetails": [ + { + "name": "category_id", + "required": true + }, + { + "name": "start_date", + "required": true + }, + { + "name": "end_date", + "required": true + }, + { + "name": "comparison_start_date", + "required": false + }, + { + "name": "comparison_end_date", + "required": false + }, + { + "name": "date_interval", + "required": false + }, + { + "name": "filters", + "required": false + }, + { + "name": "order_by", + "required": false + }, + { + "name": "pagination", + "required": false + }, + { + "name": "include_count", + "required": false + }, + { + "name": "tag_filter_type", + "required": false + }, + { + "name": "include_no_tag", + "required": false + }, + { + "name": "exclude_topic_ids", + "required": false + }, + { + "name": "analysis_types", + "required": false + }, + { + "name": "analysis_filter_type", + "required": false + }, + { + "name": "owned_asset_names", + "required": false + } + ], "pathParamDetails": [], "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], - "response": { - "status": "200", + "paramsModel": { + "publicName": "ShoppingExecutionsParams" + }, + "requestBody": { "contentType": "application/json", "encoding": "json", "contents": [ @@ -33084,69 +22538,10 @@ "contentType": "application/json", "encoding": "json" } - ] - }, - "result": { - "successStatus": "200", - "errorStatuses": [ - "422" - ] - }, - "errorResponses": [ - { - "status": "422", - "contentType": "application/json", - "encoding": "json", - "contents": [ - { - "contentType": "application/json", - "encoding": "json" - } - ], - "model": { - "name": "HttpValidationError", - "publicAliases": [] - } - } - ], - "responseLinks": [], - "transport": "http" - }, - { - "resource": "organizations", - "publicResource": "organizations", - "operation": "regions", - "publicOperation": "regions", - "deprecated": false, - "method": "GET", - "path": "/v1/org/regions", - "pathParams": [], - "publicPathParams": [], - "queryParams": [ - "organization_ids" - ], - "publicQueryParams": [ - "organization_ids" - ], - "headerParams": [], - "publicHeaderParams": [], - "bodyParams": [], - "publicBodyParams": [], - "pathParamDetails": [], - "queryParamDetails": [ - { - "name": "organization_ids", - "required": false, - "style": "form", - "explode": true - } - ], - "headerParamDetails": [], - "cookieParams": [], - "publicCookieParams": [], - "cookieParamDetails": [], - "paramsModel": { - "publicName": "OrganizationRegionsParams" + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" }, "response": { "status": "200", @@ -33159,6 +22554,10 @@ } ] }, + "responseModel": { + "name": "shopping_rows_response", + "publicAliases": [] + }, "result": { "successStatus": "200", "errorStatuses": [ @@ -33177,7 +22576,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -33185,28 +22584,64 @@ "responseLinks": [], "transport": "http" }, - { - "resource": "organizations", - "publicResource": "organizations", - "operation": "models", - "publicOperation": "models", + { + "resource": "content.optimization", + "publicResource": "content.optimization", + "operation": "list", + "publicOperation": "list", "deprecated": false, "method": "GET", - "path": "/v1/org/models", - "pathParams": [], - "publicPathParams": [], - "queryParams": [], - "publicQueryParams": [], + "path": "/v1/content/{asset_id}/optimization", + "pathParams": [ + "asset_id" + ], + "publicPathParams": [ + "asset_id" + ], + "queryParams": [ + "limit", + "offset" + ], + "publicQueryParams": [ + "limit", + "offset" + ], "headerParams": [], "publicHeaderParams": [], "bodyParams": [], "publicBodyParams": [], - "pathParamDetails": [], - "queryParamDetails": [], + "bodyParamDetails": [], + "pathParamDetails": [ + { + "name": "asset_id", + "required": true, + "style": "simple", + "explode": false + } + ], + "queryParamDetails": [ + { + "name": "limit", + "required": false, + "style": "form", + "explode": true, + "defaultValue": 10000 + }, + { + "name": "offset", + "required": false, + "style": "form", + "explode": true, + "defaultValue": 0 + } + ], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], + "paramsModel": { + "publicName": "OptimizationListParams" + }, "response": { "status": "200", "contentType": "application/json", @@ -33218,6 +22653,10 @@ } ] }, + "responseModel": { + "name": "content_optimization_response", + "publicAliases": [] + }, "result": { "successStatus": "200", "errorStatuses": [ @@ -33236,7 +22675,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -33245,40 +22684,49 @@ "transport": "http" }, { - "resource": "organizations", - "publicResource": "organizations", - "operation": "domains", - "publicOperation": "domains", + "resource": "content.optimization", + "publicResource": "content.optimization", + "operation": "retrieve", + "publicOperation": "retrieve", "deprecated": false, "method": "GET", - "path": "/v1/org/domains", - "pathParams": [], - "publicPathParams": [], - "queryParams": [ - "organization_ids" + "path": "/v1/content/{asset_id}/optimization/{content_id}", + "pathParams": [ + "asset_id", + "content_id" ], - "publicQueryParams": [ - "organization_ids" + "publicPathParams": [ + "asset_id", + "content_id" ], + "queryParams": [], + "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], "bodyParams": [], "publicBodyParams": [], - "pathParamDetails": [], - "queryParamDetails": [ + "bodyParamDetails": [], + "pathParamDetails": [ { - "name": "organization_ids", - "required": false, - "style": "form", - "explode": true + "name": "asset_id", + "required": true, + "style": "simple", + "explode": false + }, + { + "name": "content_id", + "required": true, + "style": "simple", + "explode": false } ], + "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "OrganizationDomainsParams" + "publicName": "OptimizationRetrieveParams" }, "response": { "status": "200", @@ -33291,6 +22739,10 @@ } ] }, + "responseModel": { + "name": "content_optimization_analysis_response", + "publicAliases": [] + }, "result": { "successStatus": "200", "errorStatuses": [ @@ -33309,7 +22761,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -33318,29 +22770,47 @@ "transport": "http" }, { - "resource": "organizations", - "publicResource": "organizations", - "operation": "listAssets", - "publicOperation": "listAssets", + "resource": "agents", + "publicResource": "agents", + "operation": "list", + "publicOperation": "list", "deprecated": false, "method": "GET", - "path": "/v1/org/assets", + "path": "/v1/agents", "pathParams": [], "publicPathParams": [], "queryParams": [ - "organization_ids" + "statuses", + "limit", + "next_cursor" ], "publicQueryParams": [ - "organization_ids" + "statuses", + "limit", + "next_cursor" ], "headerParams": [], "publicHeaderParams": [], "bodyParams": [], "publicBodyParams": [], + "bodyParamDetails": [], "pathParamDetails": [], "queryParamDetails": [ { - "name": "organization_ids", + "name": "statuses", + "required": false, + "style": "form", + "explode": true + }, + { + "name": "limit", + "required": false, + "style": "form", + "explode": true, + "defaultValue": 100 + }, + { + "name": "next_cursor", "required": false, "style": "form", "explode": true @@ -33351,7 +22821,7 @@ "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "OrganizationListAssetsParams" + "publicName": "AgentListParams" }, "response": { "status": "200", @@ -33365,7 +22835,7 @@ ] }, "responseModel": { - "name": "OrganizationAssetsResponse", + "name": "list_agents_response", "publicAliases": [] }, "result": { @@ -33386,7 +22856,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -33395,29 +22865,41 @@ "transport": "http" }, { - "resource": "organizations", - "publicResource": "organizations", - "operation": "getPersonas", - "publicOperation": "getPersonas", + "resource": "agents", + "publicResource": "agents", + "operation": "retrieve", + "publicOperation": "retrieve", "deprecated": false, "method": "GET", - "path": "/v1/org/personas", - "pathParams": [], - "publicPathParams": [], + "path": "/v1/agents/{agent_id}", + "pathParams": [ + "agent_id" + ], + "publicPathParams": [ + "agent_id" + ], "queryParams": [ - "organization_ids" + "version" ], "publicQueryParams": [ - "organization_ids" + "version" ], "headerParams": [], "publicHeaderParams": [], "bodyParams": [], "publicBodyParams": [], - "pathParamDetails": [], + "bodyParamDetails": [], + "pathParamDetails": [ + { + "name": "agent_id", + "required": true, + "style": "simple", + "explode": false + } + ], "queryParamDetails": [ { - "name": "organization_ids", + "name": "version", "required": false, "style": "form", "explode": true @@ -33428,7 +22910,7 @@ "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "OrganizationGetPersonasParams" + "publicName": "AgentRetrieveParams" }, "response": { "status": "200", @@ -33442,7 +22924,7 @@ ] }, "responseModel": { - "name": "OrganizationPersonasWithCategoryResponse", + "name": "agent_detail", "publicAliases": [] }, "result": { @@ -33463,7 +22945,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -33472,43 +22954,66 @@ "transport": "http" }, { - "resource": "organizations.categories", - "publicResource": "organizations.categories", - "operation": "list", - "publicOperation": "list", + "resource": "agents.runs", + "publicResource": "agents.runs", + "operation": "create", + "publicOperation": "create", "deprecated": false, - "method": "GET", - "path": "/v1/org/categories", - "pathParams": [], - "publicPathParams": [], - "queryParams": [ - "organization_ids" + "method": "POST", + "path": "/v1/agents/{agent_id}/runs", + "pathParams": [ + "agent_id" ], - "publicQueryParams": [ - "organization_ids" + "publicPathParams": [ + "agent_id" ], + "queryParams": [], + "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], - "bodyParams": [], - "publicBodyParams": [], - "pathParamDetails": [], - "queryParamDetails": [ + "bodyParams": [ + "body" + ], + "publicBodyParams": [ + "body" + ], + "bodyParamDetails": [ { - "name": "organization_ids", - "required": false, - "style": "form", - "explode": true + "name": "body", + "required": false + } + ], + "pathParamDetails": [ + { + "name": "agent_id", + "required": true, + "style": "simple", + "explode": false } ], + "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "CategoryListParams" + "publicName": "RunCreateParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": false, + "publicName": "body", + "publicIdentifier": "body" }, "response": { - "status": "200", + "status": "202", "contentType": "application/json", "encoding": "json", "contents": [ @@ -33518,8 +23023,12 @@ } ] }, + "responseModel": { + "name": "accepted_agent_run", + "publicAliases": [] + }, "result": { - "successStatus": "200", + "successStatus": "202", "errorStatuses": [ "422" ] @@ -33536,7 +23045,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -33545,40 +23054,61 @@ "transport": "http" }, { - "resource": "organizations.categories", - "publicResource": "organizations.categories", - "operation": "topics", - "publicOperation": "topics", + "resource": "agents.runs", + "publicResource": "agents.runs", + "operation": "retrieve", + "publicOperation": "retrieve", "deprecated": false, "method": "GET", - "path": "/v1/org/categories/{category_id}/topics", + "path": "/v1/agents/{agent_id}/runs/{run_id}", "pathParams": [ - "category_id" + "agent_id", + "run_id" ], "publicPathParams": [ - "category_id" + "agent_id", + "run_id" + ], + "queryParams": [ + "verbose" + ], + "publicQueryParams": [ + "verbose" ], - "queryParams": [], - "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], "bodyParams": [], "publicBodyParams": [], + "bodyParamDetails": [], "pathParamDetails": [ { - "name": "category_id", + "name": "agent_id", + "required": true, + "style": "simple", + "explode": false + }, + { + "name": "run_id", "required": true, "style": "simple", "explode": false } ], - "queryParamDetails": [], + "queryParamDetails": [ + { + "name": "verbose", + "required": false, + "style": "form", + "explode": true, + "defaultValue": false + } + ], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "CategoryTopicsParams" + "publicName": "RunRetrieveParams" }, "response": { "status": "200", @@ -33591,6 +23121,10 @@ } ] }, + "responseModel": { + "name": "agent_run", + "publicAliases": [] + }, "result": { "successStatus": "200", "errorStatuses": [ @@ -33609,7 +23143,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -33618,40 +23152,41 @@ "transport": "http" }, { - "resource": "organizations.categories", - "publicResource": "organizations.categories", - "operation": "tags", - "publicOperation": "tags", + "resource": "knowledgeBases", + "publicResource": "knowledgeBases", + "operation": "list", + "publicOperation": "list", "deprecated": false, "method": "GET", - "path": "/v1/org/categories/{category_id}/tags", - "pathParams": [ - "category_id" + "path": "/v1/knowledge-bases", + "pathParams": [], + "publicPathParams": [], + "queryParams": [ + "organization_id" ], - "publicPathParams": [ - "category_id" + "publicQueryParams": [ + "organization_id" ], - "queryParams": [], - "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], "bodyParams": [], "publicBodyParams": [], - "pathParamDetails": [ + "bodyParamDetails": [], + "pathParamDetails": [], + "queryParamDetails": [ { - "name": "category_id", - "required": true, - "style": "simple", - "explode": false + "name": "organization_id", + "required": false, + "style": "form", + "explode": true } ], - "queryParamDetails": [], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "CategoryTagsParams" + "publicName": "KnowledgeBaseListParams" }, "response": { "status": "200", @@ -33664,6 +23199,10 @@ } ] }, + "responseModel": { + "name": "list_knowledge_bases_response", + "publicAliases": [] + }, "result": { "successStatus": "200", "errorStatuses": [ @@ -33682,7 +23221,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -33691,124 +23230,68 @@ "transport": "http" }, { - "resource": "organizations.categories", - "publicResource": "organizations.categories", - "operation": "prompts", - "publicOperation": "prompts", + "resource": "knowledgeBases", + "publicResource": "knowledgeBases", + "operation": "search", + "publicOperation": "search", "deprecated": false, - "method": "GET", - "path": "/v1/org/categories/{category_id}/prompts", + "method": "POST", + "path": "/v1/knowledge-bases/{knowledge_base_id}/search", "pathParams": [ - "category_id" + "knowledge_base_id" ], "publicPathParams": [ - "category_id" + "knowledge_base_id" ], "queryParams": [ - "limit", - "cursor", - "order_dir", - "analysis_type", - "prompt_type", - "status", - "topic_id", - "tag_id", - "region_id", - "platform_id", - "persona_id" + "organization_id" ], "publicQueryParams": [ - "limit", - "cursor", - "order_dir", - "analysis_type", - "prompt_type", - "status", - "topic_id", - "tag_id", - "region_id", - "platform_id", - "persona_id" + "organization_id" ], "headerParams": [], "publicHeaderParams": [], - "bodyParams": [], - "publicBodyParams": [], - "pathParamDetails": [ - { - "name": "category_id", - "required": true, - "style": "simple", - "explode": false - } + "bodyParams": [ + "query", + "top_k", + "return_full_page", + "filters" ], - "queryParamDetails": [ - { - "name": "limit", - "required": false, - "style": "form", - "explode": true, - "defaultValue": 10000 - }, - { - "name": "cursor", - "required": false, - "style": "form", - "explode": true - }, - { - "name": "order_dir", - "required": false, - "style": "form", - "explode": true - }, - { - "name": "analysis_type", - "required": false, - "style": "form", - "explode": true - }, - { - "name": "prompt_type", - "required": false, - "style": "form", - "explode": true - }, + "publicBodyParams": [ + "query", + "top_k", + "return_full_page", + "filters" + ], + "bodyParamDetails": [ { - "name": "status", - "required": false, - "style": "form", - "explode": true, - "defaultValue": [ - "active" - ] + "name": "query", + "required": true }, { - "name": "topic_id", - "required": false, - "style": "form", - "explode": true + "name": "top_k", + "required": true }, { - "name": "tag_id", - "required": false, - "style": "form", - "explode": true + "name": "return_full_page", + "required": false }, { - "name": "region_id", - "required": false, - "style": "form", - "explode": true - }, + "name": "filters", + "required": false + } + ], + "pathParamDetails": [ { - "name": "platform_id", - "required": false, - "style": "form", - "explode": true - }, + "name": "knowledge_base_id", + "required": true, + "style": "simple", + "explode": false + } + ], + "queryParamDetails": [ { - "name": "persona_id", + "name": "organization_id", "required": false, "style": "form", "explode": true @@ -33819,7 +23302,20 @@ "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "CategoryPromptsParams" + "publicName": "KnowledgeBaseSearchParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" }, "response": { "status": "200", @@ -33833,7 +23329,7 @@ ] }, "responseModel": { - "name": "CategoryPromptsResponse", + "name": "knowledge_base_search_response", "publicAliases": [] }, "result": { @@ -33854,7 +23350,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -33863,46 +23359,73 @@ "transport": "http" }, { - "resource": "organizations.categories", - "publicResource": "organizations.categories", - "operation": "createPrompts", - "publicOperation": "createPrompts", + "resource": "knowledgeBases.documents", + "publicResource": "knowledgeBases.documents", + "operation": "create", + "publicOperation": "create", "deprecated": false, "method": "POST", - "path": "/v1/org/categories/{category_id}/prompts", + "path": "/v1/knowledge-bases/{knowledge_base_id}/documents", "pathParams": [ - "category_id" + "knowledge_base_id" ], "publicPathParams": [ - "category_id" + "knowledge_base_id" + ], + "queryParams": [ + "organization_id" + ], + "publicQueryParams": [ + "organization_id" ], - "queryParams": [], - "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], "bodyParams": [ - "prompts", - "dry_run" + "name", + "text", + "folder" ], "publicBodyParams": [ - "prompts", - "dry_run" + "name", + "text", + "folder" + ], + "bodyParamDetails": [ + { + "name": "name", + "required": true + }, + { + "name": "text", + "required": true + }, + { + "name": "folder", + "required": false + } ], "pathParamDetails": [ { - "name": "category_id", + "name": "knowledge_base_id", "required": true, "style": "simple", "explode": false } ], - "queryParamDetails": [], + "queryParamDetails": [ + { + "name": "organization_id", + "required": false, + "style": "form", + "explode": true + } + ], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "CategoryCreatePromptsParams" + "publicName": "DocumentCreateParams" }, "requestBody": { "contentType": "application/json", @@ -33911,6 +23434,10 @@ { "contentType": "application/json", "encoding": "json" + }, + { + "contentType": "multipart/form-data", + "encoding": "multipart" } ], "required": true, @@ -33918,7 +23445,7 @@ "publicIdentifier": "body" }, "response": { - "status": "200", + "status": "201", "contentType": "application/json", "encoding": "json", "contents": [ @@ -33929,11 +23456,11 @@ ] }, "responseModel": { - "name": "CreatePromptsResponse", + "name": "document_operation_response", "publicAliases": [] }, "result": { - "successStatus": "200", + "successStatus": "201", "errorStatuses": [ "422" ] @@ -33950,7 +23477,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -33959,46 +23486,73 @@ "transport": "http" }, { - "resource": "organizations.categories", - "publicResource": "organizations.categories", - "operation": "updatePrompts", - "publicOperation": "updatePrompts", + "resource": "knowledgeBases.documents", + "publicResource": "knowledgeBases.documents", + "operation": "update", + "publicOperation": "update", "deprecated": false, - "method": "PATCH", - "path": "/v1/org/categories/{category_id}/prompts", + "method": "PUT", + "path": "/v1/knowledge-bases/{knowledge_base_id}/documents", "pathParams": [ - "category_id" + "knowledge_base_id" ], "publicPathParams": [ - "category_id" + "knowledge_base_id" + ], + "queryParams": [ + "organization_id" + ], + "publicQueryParams": [ + "organization_id" ], - "queryParams": [], - "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], "bodyParams": [ - "prompts", - "dry_run" + "name", + "text", + "folder" ], "publicBodyParams": [ - "prompts", - "dry_run" + "name", + "text", + "folder" + ], + "bodyParamDetails": [ + { + "name": "name", + "required": true + }, + { + "name": "text", + "required": true + }, + { + "name": "folder", + "required": false + } ], "pathParamDetails": [ { - "name": "category_id", + "name": "knowledge_base_id", "required": true, "style": "simple", "explode": false } ], - "queryParamDetails": [], + "queryParamDetails": [ + { + "name": "organization_id", + "required": false, + "style": "form", + "explode": true + } + ], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "CategoryUpdatePromptsParams" + "publicName": "DocumentUpdateParams" }, "requestBody": { "contentType": "application/json", @@ -34007,6 +23561,10 @@ { "contentType": "application/json", "encoding": "json" + }, + { + "contentType": "multipart/form-data", + "encoding": "multipart" } ], "required": true, @@ -34025,7 +23583,7 @@ ] }, "responseModel": { - "name": "UpdatePromptsResponse", + "name": "document_operation_response", "publicAliases": [] }, "result": { @@ -34046,7 +23604,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -34055,48 +23613,61 @@ "transport": "http" }, { - "resource": "organizations.categories", - "publicResource": "organizations.categories", - "operation": "updatePromptStatus", - "publicOperation": "updatePromptStatus", + "resource": "knowledgeBases.documents", + "publicResource": "knowledgeBases.documents", + "operation": "delete", + "publicOperation": "delete", "deprecated": false, - "method": "PATCH", - "path": "/v1/org/categories/{category_id}/prompts/status", + "method": "DELETE", + "path": "/v1/knowledge-bases/{knowledge_base_id}/documents", "pathParams": [ - "category_id" + "knowledge_base_id" ], "publicPathParams": [ - "category_id" + "knowledge_base_id" + ], + "queryParams": [ + "organization_id" + ], + "publicQueryParams": [ + "organization_id" ], - "queryParams": [], - "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], "bodyParams": [ - "prompt_ids", - "status", - "dry_run" + "name" ], "publicBodyParams": [ - "prompt_ids", - "status", - "dry_run" + "name" + ], + "bodyParamDetails": [ + { + "name": "name", + "required": true + } ], "pathParamDetails": [ { - "name": "category_id", + "name": "knowledge_base_id", "required": true, "style": "simple", "explode": false } ], - "queryParamDetails": [], + "queryParamDetails": [ + { + "name": "organization_id", + "required": false, + "style": "form", + "explode": true + } + ], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "CategoryUpdatePromptStatusParams" + "publicName": "DocumentDeleteParams" }, "requestBody": { "contentType": "application/json", @@ -34123,7 +23694,7 @@ ] }, "responseModel": { - "name": "UpdatePromptStatusResponse", + "name": "document_operation_response", "publicAliases": [] }, "result": { @@ -34144,7 +23715,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -34153,43 +23724,77 @@ "transport": "http" }, { - "resource": "organizations.categories", - "publicResource": "organizations.categories", - "operation": "assets", - "publicOperation": "assets", + "resource": "knowledgeBases.folders", + "publicResource": "knowledgeBases.folders", + "operation": "create", + "publicOperation": "create", "deprecated": false, - "method": "GET", - "path": "/v1/org/categories/{category_id}/assets", + "method": "POST", + "path": "/v1/knowledge-bases/{knowledge_base_id}/folders", "pathParams": [ - "category_id" + "knowledge_base_id" ], "publicPathParams": [ - "category_id" + "knowledge_base_id" + ], + "queryParams": [ + "organization_id" + ], + "publicQueryParams": [ + "organization_id" ], - "queryParams": [], - "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], - "bodyParams": [], - "publicBodyParams": [], + "bodyParams": [ + "path" + ], + "publicBodyParams": [ + "path" + ], + "bodyParamDetails": [ + { + "name": "path", + "required": true + } + ], "pathParamDetails": [ { - "name": "category_id", + "name": "knowledge_base_id", "required": true, "style": "simple", "explode": false } ], - "queryParamDetails": [], + "queryParamDetails": [ + { + "name": "organization_id", + "required": false, + "style": "form", + "explode": true + } + ], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "CategoryAssetsParams" + "publicName": "FolderCreateParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" }, "response": { - "status": "200", + "status": "201", "contentType": "application/json", "encoding": "json", "contents": [ @@ -34199,8 +23804,12 @@ } ] }, + "responseModel": { + "name": "folder_operation_response", + "publicAliases": [] + }, "result": { - "successStatus": "200", + "successStatus": "201", "errorStatuses": [ "422" ] @@ -34217,7 +23826,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } @@ -34226,40 +23835,80 @@ "transport": "http" }, { - "resource": "organizations.categories", - "publicResource": "organizations.categories", - "operation": "getCategoryPersonas", - "publicOperation": "getCategoryPersonas", + "resource": "knowledgeBases.folders", + "publicResource": "knowledgeBases.folders", + "operation": "delete", + "publicOperation": "delete", "deprecated": false, - "method": "GET", - "path": "/v1/org/categories/{category_id}/personas", + "method": "DELETE", + "path": "/v1/knowledge-bases/{knowledge_base_id}/folders", "pathParams": [ - "category_id" + "knowledge_base_id" ], "publicPathParams": [ - "category_id" + "knowledge_base_id" + ], + "queryParams": [ + "organization_id" + ], + "publicQueryParams": [ + "organization_id" ], - "queryParams": [], - "publicQueryParams": [], "headerParams": [], "publicHeaderParams": [], - "bodyParams": [], - "publicBodyParams": [], + "bodyParams": [ + "path", + "recursive" + ], + "publicBodyParams": [ + "path", + "recursive" + ], + "bodyParamDetails": [ + { + "name": "path", + "required": true + }, + { + "name": "recursive", + "required": false + } + ], "pathParamDetails": [ { - "name": "category_id", + "name": "knowledge_base_id", "required": true, "style": "simple", "explode": false } ], - "queryParamDetails": [], + "queryParamDetails": [ + { + "name": "organization_id", + "required": false, + "style": "form", + "explode": true + } + ], "headerParamDetails": [], "cookieParams": [], "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "CategoryGetCategoryPersonasParams" + "publicName": "FolderDeleteParams" + }, + "requestBody": { + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ], + "required": true, + "publicName": "body", + "publicIdentifier": "body" }, "response": { "status": "200", @@ -34273,7 +23922,7 @@ ] }, "responseModel": { - "name": "CategoryPersonasResponse", + "name": "folder_operation_response", "publicAliases": [] }, "result": { @@ -34294,7 +23943,7 @@ } ], "model": { - "name": "HttpValidationError", + "name": "http_validation_error", "publicAliases": [] } } diff --git a/src/__init__.py b/src/profound/__init__.py similarity index 93% rename from src/__init__.py rename to src/profound/__init__.py index 09396e6b..aaa8e94a 100644 --- a/src/__init__.py +++ b/src/profound/__init__.py @@ -5,7 +5,17 @@ from . import types from ._types import NOT_GIVEN, Omit, NoneType, NotGiven, Transport, ProxiesTypes, omit, not_given from ._utils import file_from_path -from ._client import Client, Stream, Profound, Timeout, Transport, AsyncClient, AsyncStream, AsyncProfound, RequestOptions, ENVIRONMENTS +from ._client import ( + Client, + Stream, + Profound, + Timeout, + Transport, + AsyncClient, + AsyncStream, + AsyncProfound, + RequestOptions, +) from ._models import BaseModel from ._version import __title__, __version__ from ._response import APIResponse as APIResponse, AsyncAPIResponse as AsyncAPIResponse @@ -30,7 +40,6 @@ from ._utils._logs import setup_logging as _setup_logging __all__ = [ - "ENVIRONMENTS", "types", "__version__", "__title__", diff --git a/src/_base_client.py b/src/profound/_base_client.py similarity index 98% rename from src/_base_client.py rename to src/profound/_base_client.py index 654de9df..5622b794 100644 --- a/src/_base_client.py +++ b/src/profound/_base_client.py @@ -18,6 +18,7 @@ TYPE_CHECKING, Any, Dict, + List, Type, Union, Generic, @@ -478,12 +479,6 @@ def _make_status_error( ) -> _exceptions.APIStatusError: raise NotImplementedError() - def _auth_headers( - self, - security: SecurityOptions, # noqa: ARG002 - ) -> dict[str, str]: - return {} - def _auth_query( self, security: SecurityOptions, # noqa: ARG002 @@ -500,7 +495,11 @@ def _custom_auth( self, security: SecurityOptions, # noqa: ARG002 ) -> httpx.Auth | None: - return None + # Single hook for custom httpx auth on both the sync and async request paths. It defaults to + # the legacy public `custom_auth` property so subclasses that already override that property + # keep applying identically on both paths; override `_custom_auth` itself to layer + # per-operation, security-aware auth on top. + return self.custom_auth def _build_headers( self, @@ -511,7 +510,9 @@ def _build_headers( retries_taken: int = 0, ) -> httpx.Headers: custom_headers = options.headers or {} - headers_dict = _merge_mappings({**self._auth_headers(options.security), **self.default_headers}, custom_headers) + # Auth headers are folded into `default_headers` (matching the reference SDKs), so + # merging `default_headers` here already applies the configured credentials. + headers_dict = _merge_mappings(self.default_headers, custom_headers) self._validate_headers(headers_dict, custom_headers, params, cookies) # headers are case-insensitive while dictionaries are not. @@ -754,6 +755,7 @@ def default_headers(self) -> dict[str, str | Omit]: "Content-Type": "application/json", "User-Agent": self.user_agent, **self.platform_headers(), + **self.auth_headers, **self._custom_headers, } @@ -1449,11 +1451,14 @@ def get_api_list( model: Type[object], page: Type[SyncPageT], body: Body | None = None, + files: RequestFiles | None = None, options: RequestOptions = {}, method: str = "get", cursor_config: Optional[CursorPageConfig] = None, ) -> SyncPageT: - opts = FinalRequestOptions.construct(method=method, url=path, json_data=body, **options) + opts = FinalRequestOptions.construct( + method=method, url=path, json_data=body, files=to_httpx_files(files), **options + ) return self._request_api_list(model, page, opts, cursor_config=cursor_config) @@ -1668,8 +1673,9 @@ async def request( await self._prepare_request(request) kwargs: HttpxSendArgs = {} - if self.custom_auth is not None: - kwargs["auth"] = self.custom_auth + custom_auth = self._custom_auth(options.security) + if custom_auth is not None: + kwargs["auth"] = custom_auth if options.follow_redirects is not None: kwargs["follow_redirects"] = options.follow_redirects @@ -1831,9 +1837,7 @@ def _request_api_list( options: FinalRequestOptions, cursor_config: Optional[CursorPageConfig] = None, ) -> AsyncPaginator[_T, AsyncPageT]: - return AsyncPaginator( - client=self, options=options, page_cls=page, model=model, cursor_config=cursor_config - ) + return AsyncPaginator(client=self, options=options, page_cls=page, model=model, cursor_config=cursor_config) @overload async def get( @@ -2033,11 +2037,14 @@ def get_api_list( model: Type[_T], page: Type[AsyncPageT], body: Body | None = None, + files: RequestFiles | None = None, options: RequestOptions = {}, method: str = "get", cursor_config: Optional[CursorPageConfig] = None, ) -> AsyncPaginator[_T, AsyncPageT]: - opts = FinalRequestOptions.construct(method=method, url=path, json_data=body, **options) + opts = FinalRequestOptions.construct( + method=method, url=path, json_data=body, files=to_httpx_files(files), **options + ) return self._request_api_list(model, page, opts, cursor_config=cursor_config) diff --git a/src/_client.py b/src/profound/_client.py similarity index 75% rename from src/_client.py rename to src/profound/_client.py index f40b6e03..0bfa7d8d 100644 --- a/src/_client.py +++ b/src/profound/_client.py @@ -5,7 +5,7 @@ import os import threading from typing import TYPE_CHECKING, Any, Mapping -from typing_extensions import Literal, Self, override +from typing_extensions import Self, override import httpx @@ -33,43 +33,41 @@ from ._version import __version__ if TYPE_CHECKING: - from .resources import organization, prompts, reports, content, knowledge_bases, agents, organizations - from .resources.organization import OrganizationResource, AsyncOrganizationResource + from .resources import organizations, prompts, reports, content, agents, knowledge_bases + from .resources.organizations import OrganizationsResource, AsyncOrganizationsResource from .resources.prompts import PromptsResource, AsyncPromptsResource from .resources.reports import ReportsResource, AsyncReportsResource from .resources.content import ContentResource, AsyncContentResource - from .resources.knowledge_bases import KnowledgeBasesResource, AsyncKnowledgeBasesResource from .resources.agents import AgentsResource, AsyncAgentsResource - from .resources.organizations import OrganizationsResource, AsyncOrganizationsResource + from .resources.knowledge_bases import KnowledgeBasesResource, AsyncKnowledgeBasesResource # Serializes lazy resource imports so concurrent cold access from multiple # threads cannot deadlock on CPython import locks (see CPython 3.14). _RESOURCE_IMPORT_LOCK = threading.RLock() -ENVIRONMENTS: dict[str, str] = { - "production": "https://api.tryprofound.com", - "production_server": "https://api.tryprofound.com", -} - -__all__ = ["ENVIRONMENTS", "Profound", "AsyncProfound", "Client", "AsyncClient", "Timeout", "Transport", "ProxiesTypes", "RequestOptions"] +__all__ = [ + "Profound", + "AsyncProfound", + "Client", + "AsyncClient", + "Timeout", + "Transport", + "ProxiesTypes", + "RequestOptions", +] class Profound(SyncAPIClient): # client options - api_key_header: str | None - bearer_auth: str | None access_token: str | None api_key: str | None def __init__( self, *, - api_key_header: str | None = None, - bearer_auth: str | None = None, access_token: str | None = None, api_key: str | None = None, - environment: Literal["production", "production_server"] | NotGiven = not_given, - base_url: str | httpx.URL | None | NotGiven = not_given, + base_url: str | httpx.URL | None = None, timeout: float | Timeout | None | NotGiven = not_given, max_retries: int = DEFAULT_MAX_RETRIES, default_headers: Mapping[str, str] | None = None, @@ -91,47 +89,19 @@ def __init__( """Construct a new synchronous Profound client instance. This automatically infers the following arguments from their corresponding environment variables if they are not provided: - - `api_key_header` from `API_KEY_HEADER` - - `bearer_auth` from `BEARER_AUTH` - `access_token` from `PROFOUND_ACCESS_TOKEN` - `api_key` from `PROFOUND_API_KEY` """ - if api_key_header is None: - api_key_header = os.environ.get("API_KEY_HEADER") - self.api_key_header = api_key_header - if bearer_auth is None: - bearer_auth = os.environ.get("BEARER_AUTH") - self.bearer_auth = bearer_auth if access_token is None: access_token = os.environ.get("PROFOUND_ACCESS_TOKEN") self.access_token = access_token if api_key is None: api_key = os.environ.get("PROFOUND_API_KEY") self.api_key = api_key - self._environment = environment - base_url_env = os.environ.get("PROFOUND_BASE_URL") - if is_given(base_url) and base_url is not None: - if is_given(environment): - raise ValueError( - "Ambiguous URL; the `base_url` and `environment` arguments are both set. Pass `base_url=None` to use the environment.", - ) - elif is_given(environment): - if base_url_env and base_url is not None: - raise ValueError( - "Ambiguous URL; the base URL environment variable and the `environment` argument are both set. Pass base_url=None to use the environment.", - ) - try: - base_url = ENVIRONMENTS[environment] - except KeyError as exc: - raise ValueError(f"Unknown environment: {environment}") from exc - elif base_url_env is not None: - base_url = base_url_env - else: - self._environment = environment = "production" - try: - base_url = ENVIRONMENTS[environment] - except KeyError as exc: - raise ValueError(f"Unknown environment: {environment}") from exc + if base_url is None: + base_url = os.environ.get("PROFOUND_BASE_URL") + if base_url is None: + base_url = "https://api.tryprofound.com" custom_headers_env = os.environ.get("PROFOUND_CUSTOM_HEADERS") if custom_headers_env is not None: parsed: dict[str, str] = {} @@ -150,14 +120,14 @@ def __init__( custom_query=default_query, _strict_response_validation=_strict_response_validation, ) - self._idempotency_header = "Idempotency-Key" + self._idempotency_header = None self._default_stream_cls = Stream @cached_property - def organization(self) -> "OrganizationResource": + def organizations(self) -> "OrganizationsResource": with _RESOURCE_IMPORT_LOCK: - from .resources.organization import OrganizationResource - return OrganizationResource(self) + from .resources.organizations import OrganizationsResource + return OrganizationsResource(self) @cached_property def prompts(self) -> "PromptsResource": @@ -177,12 +147,6 @@ def content(self) -> "ContentResource": from .resources.content import ContentResource return ContentResource(self) - @cached_property - def knowledge_bases(self) -> "KnowledgeBasesResource": - with _RESOURCE_IMPORT_LOCK: - from .resources.knowledge_bases import KnowledgeBasesResource - return KnowledgeBasesResource(self) - @cached_property def agents(self) -> "AgentsResource": with _RESOURCE_IMPORT_LOCK: @@ -190,10 +154,10 @@ def agents(self) -> "AgentsResource": return AgentsResource(self) @cached_property - def organizations(self) -> "OrganizationsResource": + def knowledge_bases(self) -> "KnowledgeBasesResource": with _RESOURCE_IMPORT_LOCK: - from .resources.organizations import OrganizationsResource - return OrganizationsResource(self) + from .resources.knowledge_bases import KnowledgeBasesResource + return KnowledgeBasesResource(self) @cached_property def with_raw_response(self) -> ProfoundWithRawResponse: @@ -208,12 +172,10 @@ def with_streaming_response(self) -> ProfoundWithStreamedResponse: def qs(self) -> Querystring: return Querystring(array_format="repeat") + @property @override - def _auth_headers(self, security: dict[str, bool]) -> dict[str, str]: - _ = security + def auth_headers(self) -> dict[str, str]: return { - **self._api_key_header_header_auth, - **self._bearer_auth_header_auth, **self._access_token_header_auth, **self._api_key_header_auth, } @@ -221,28 +183,12 @@ def _auth_headers(self, security: dict[str, bool]) -> dict[str, str]: @override def _auth_query(self, security: dict[str, bool]) -> dict[str, str]: _ = security - return { - } + return {} @override def _auth_cookies(self, security: dict[str, bool]) -> dict[str, str]: _ = security - return { - } - - @property - def _api_key_header_header_auth(self) -> dict[str, str]: - value = self.api_key_header - if value is None: - return {} - return {"X-API-Key": value} - - @property - def _bearer_auth_header_auth(self) -> dict[str, str]: - value = self.bearer_auth - if value is None: - return {} - return {"Authorization": f"Bearer {value}"} + return {} @property def _access_token_header_auth(self) -> dict[str, str]: @@ -258,7 +204,6 @@ def _api_key_header_auth(self) -> dict[str, str]: return {} return {"X-API-Key": value} - @property @override def default_headers(self) -> dict[str, str | Omit]: @@ -276,25 +221,23 @@ def _validate_headers( params: Mapping[str, object], cookies: Mapping[str, str], ) -> None: - if headers.get("X-API-Key"): - return - if isinstance(custom_headers.get("X-API-Key"), Omit): - return if headers.get("Authorization"): return if isinstance(custom_headers.get("Authorization"), Omit): return - raise TypeError("Could not resolve authentication method. Expected X-API-Key or Authorization to be set.") - + if headers.get("X-API-Key"): + return + if isinstance(custom_headers.get("X-API-Key"), Omit): + return + raise TypeError( + '"Could not resolve authentication method. Expected either access_token or api_key to be set. Or for one of the `Authorization` or `X-API-Key` headers to be explicitly omitted"' + ) def copy( self, *, - api_key_header: str | None = None, - bearer_auth: str | None = None, access_token: str | None = None, api_key: str | None = None, - environment: str | None = None, base_url: str | httpx.URL | None = None, timeout: float | Timeout | None | NotGiven = not_given, http_client: httpx.Client | None = None, @@ -321,17 +264,10 @@ def copy( elif set_default_query is not None: params = set_default_query http_client = http_client or self._client - copied_base_url = base_url if base_url is not None else self.base_url - # Environment overrides must resolve their own URL instead of reusing this client's host. - if environment is not None and base_url is None: - copied_base_url = None return self.__class__( - api_key_header=api_key_header or self.api_key_header, - bearer_auth=bearer_auth or self.bearer_auth, access_token=access_token or self.access_token, api_key=api_key or self.api_key, - environment=environment if environment is not None else self._environment, - base_url=copied_base_url, + base_url=base_url or self.base_url, timeout=self.timeout if isinstance(timeout, NotGiven) else timeout, http_client=http_client, max_retries=max_retries if is_given(max_retries) else self.max_retries, @@ -366,20 +302,15 @@ def _make_status_error(self, err_msg: str, *, body: object, response: httpx.Resp class AsyncProfound(AsyncAPIClient): # client options - api_key_header: str | None - bearer_auth: str | None access_token: str | None api_key: str | None def __init__( self, *, - api_key_header: str | None = None, - bearer_auth: str | None = None, access_token: str | None = None, api_key: str | None = None, - environment: Literal["production", "production_server"] | NotGiven = not_given, - base_url: str | httpx.URL | None | NotGiven = not_given, + base_url: str | httpx.URL | None = None, timeout: float | Timeout | None | NotGiven = not_given, max_retries: int = DEFAULT_MAX_RETRIES, default_headers: Mapping[str, str] | None = None, @@ -401,47 +332,19 @@ def __init__( """Construct a new async AsyncProfound client instance. This automatically infers the following arguments from their corresponding environment variables if they are not provided: - - `api_key_header` from `API_KEY_HEADER` - - `bearer_auth` from `BEARER_AUTH` - `access_token` from `PROFOUND_ACCESS_TOKEN` - `api_key` from `PROFOUND_API_KEY` """ - if api_key_header is None: - api_key_header = os.environ.get("API_KEY_HEADER") - self.api_key_header = api_key_header - if bearer_auth is None: - bearer_auth = os.environ.get("BEARER_AUTH") - self.bearer_auth = bearer_auth if access_token is None: access_token = os.environ.get("PROFOUND_ACCESS_TOKEN") self.access_token = access_token if api_key is None: api_key = os.environ.get("PROFOUND_API_KEY") self.api_key = api_key - self._environment = environment - base_url_env = os.environ.get("PROFOUND_BASE_URL") - if is_given(base_url) and base_url is not None: - if is_given(environment): - raise ValueError( - "Ambiguous URL; the `base_url` and `environment` arguments are both set. Pass `base_url=None` to use the environment.", - ) - elif is_given(environment): - if base_url_env and base_url is not None: - raise ValueError( - "Ambiguous URL; the base URL environment variable and the `environment` argument are both set. Pass base_url=None to use the environment.", - ) - try: - base_url = ENVIRONMENTS[environment] - except KeyError as exc: - raise ValueError(f"Unknown environment: {environment}") from exc - elif base_url_env is not None: - base_url = base_url_env - else: - self._environment = environment = "production" - try: - base_url = ENVIRONMENTS[environment] - except KeyError as exc: - raise ValueError(f"Unknown environment: {environment}") from exc + if base_url is None: + base_url = os.environ.get("PROFOUND_BASE_URL") + if base_url is None: + base_url = "https://api.tryprofound.com" custom_headers_env = os.environ.get("PROFOUND_CUSTOM_HEADERS") if custom_headers_env is not None: parsed: dict[str, str] = {} @@ -460,14 +363,14 @@ def __init__( custom_query=default_query, _strict_response_validation=_strict_response_validation, ) - self._idempotency_header = "Idempotency-Key" + self._idempotency_header = None self._default_stream_cls = AsyncStream @cached_property - def organization(self) -> "AsyncOrganizationResource": + def organizations(self) -> "AsyncOrganizationsResource": with _RESOURCE_IMPORT_LOCK: - from .resources.organization import AsyncOrganizationResource - return AsyncOrganizationResource(self) + from .resources.organizations import AsyncOrganizationsResource + return AsyncOrganizationsResource(self) @cached_property def prompts(self) -> "AsyncPromptsResource": @@ -487,12 +390,6 @@ def content(self) -> "AsyncContentResource": from .resources.content import AsyncContentResource return AsyncContentResource(self) - @cached_property - def knowledge_bases(self) -> "AsyncKnowledgeBasesResource": - with _RESOURCE_IMPORT_LOCK: - from .resources.knowledge_bases import AsyncKnowledgeBasesResource - return AsyncKnowledgeBasesResource(self) - @cached_property def agents(self) -> "AsyncAgentsResource": with _RESOURCE_IMPORT_LOCK: @@ -500,10 +397,10 @@ def agents(self) -> "AsyncAgentsResource": return AsyncAgentsResource(self) @cached_property - def organizations(self) -> "AsyncOrganizationsResource": + def knowledge_bases(self) -> "AsyncKnowledgeBasesResource": with _RESOURCE_IMPORT_LOCK: - from .resources.organizations import AsyncOrganizationsResource - return AsyncOrganizationsResource(self) + from .resources.knowledge_bases import AsyncKnowledgeBasesResource + return AsyncKnowledgeBasesResource(self) @cached_property def with_raw_response(self) -> AsyncProfoundWithRawResponse: @@ -518,12 +415,10 @@ def with_streaming_response(self) -> AsyncProfoundWithStreamedResponse: def qs(self) -> Querystring: return Querystring(array_format="repeat") + @property @override - def _auth_headers(self, security: dict[str, bool]) -> dict[str, str]: - _ = security + def auth_headers(self) -> dict[str, str]: return { - **self._api_key_header_header_auth, - **self._bearer_auth_header_auth, **self._access_token_header_auth, **self._api_key_header_auth, } @@ -531,28 +426,12 @@ def _auth_headers(self, security: dict[str, bool]) -> dict[str, str]: @override def _auth_query(self, security: dict[str, bool]) -> dict[str, str]: _ = security - return { - } + return {} @override def _auth_cookies(self, security: dict[str, bool]) -> dict[str, str]: _ = security - return { - } - - @property - def _api_key_header_header_auth(self) -> dict[str, str]: - value = self.api_key_header - if value is None: - return {} - return {"X-API-Key": value} - - @property - def _bearer_auth_header_auth(self) -> dict[str, str]: - value = self.bearer_auth - if value is None: - return {} - return {"Authorization": f"Bearer {value}"} + return {} @property def _access_token_header_auth(self) -> dict[str, str]: @@ -568,7 +447,6 @@ def _api_key_header_auth(self) -> dict[str, str]: return {} return {"X-API-Key": value} - @property @override def default_headers(self) -> dict[str, str | Omit]: @@ -586,25 +464,23 @@ def _validate_headers( params: Mapping[str, object], cookies: Mapping[str, str], ) -> None: - if headers.get("X-API-Key"): - return - if isinstance(custom_headers.get("X-API-Key"), Omit): - return if headers.get("Authorization"): return if isinstance(custom_headers.get("Authorization"), Omit): return - raise TypeError("Could not resolve authentication method. Expected X-API-Key or Authorization to be set.") - + if headers.get("X-API-Key"): + return + if isinstance(custom_headers.get("X-API-Key"), Omit): + return + raise TypeError( + '"Could not resolve authentication method. Expected either access_token or api_key to be set. Or for one of the `Authorization` or `X-API-Key` headers to be explicitly omitted"' + ) def copy( self, *, - api_key_header: str | None = None, - bearer_auth: str | None = None, access_token: str | None = None, api_key: str | None = None, - environment: str | None = None, base_url: str | httpx.URL | None = None, timeout: float | Timeout | None | NotGiven = not_given, http_client: httpx.AsyncClient | None = None, @@ -631,17 +507,10 @@ def copy( elif set_default_query is not None: params = set_default_query http_client = http_client or self._client - copied_base_url = base_url if base_url is not None else self.base_url - # Environment overrides must resolve their own URL instead of reusing this client's host. - if environment is not None and base_url is None: - copied_base_url = None return self.__class__( - api_key_header=api_key_header or self.api_key_header, - bearer_auth=bearer_auth or self.bearer_auth, access_token=access_token or self.access_token, api_key=api_key or self.api_key, - environment=environment if environment is not None else self._environment, - base_url=copied_base_url, + base_url=base_url or self.base_url, timeout=self.timeout if isinstance(timeout, NotGiven) else timeout, http_client=http_client, max_retries=max_retries if is_given(max_retries) else self.max_retries, @@ -681,10 +550,10 @@ def __init__(self, client: Profound) -> None: self._client = client @cached_property - def organization(self) -> organization.OrganizationResourceWithRawResponse: + def organizations(self) -> organizations.OrganizationsResourceWithRawResponse: with _RESOURCE_IMPORT_LOCK: - from .resources.organization import OrganizationResourceWithRawResponse - return OrganizationResourceWithRawResponse(self._client.organization) + from .resources.organizations import OrganizationsResourceWithRawResponse + return OrganizationsResourceWithRawResponse(self._client.organizations) @cached_property def prompts(self) -> prompts.PromptsResourceWithRawResponse: @@ -704,12 +573,6 @@ def content(self) -> content.ContentResourceWithRawResponse: from .resources.content import ContentResourceWithRawResponse return ContentResourceWithRawResponse(self._client.content) - @cached_property - def knowledge_bases(self) -> knowledge_bases.KnowledgeBasesResourceWithRawResponse: - with _RESOURCE_IMPORT_LOCK: - from .resources.knowledge_bases import KnowledgeBasesResourceWithRawResponse - return KnowledgeBasesResourceWithRawResponse(self._client.knowledge_bases) - @cached_property def agents(self) -> agents.AgentsResourceWithRawResponse: with _RESOURCE_IMPORT_LOCK: @@ -717,10 +580,10 @@ def agents(self) -> agents.AgentsResourceWithRawResponse: return AgentsResourceWithRawResponse(self._client.agents) @cached_property - def organizations(self) -> organizations.OrganizationsResourceWithRawResponse: + def knowledge_bases(self) -> knowledge_bases.KnowledgeBasesResourceWithRawResponse: with _RESOURCE_IMPORT_LOCK: - from .resources.organizations import OrganizationsResourceWithRawResponse - return OrganizationsResourceWithRawResponse(self._client.organizations) + from .resources.knowledge_bases import KnowledgeBasesResourceWithRawResponse + return KnowledgeBasesResourceWithRawResponse(self._client.knowledge_bases) class AsyncProfoundWithRawResponse: @@ -730,10 +593,10 @@ def __init__(self, client: AsyncProfound) -> None: self._client = client @cached_property - def organization(self) -> organization.AsyncOrganizationResourceWithRawResponse: + def organizations(self) -> organizations.AsyncOrganizationsResourceWithRawResponse: with _RESOURCE_IMPORT_LOCK: - from .resources.organization import AsyncOrganizationResourceWithRawResponse - return AsyncOrganizationResourceWithRawResponse(self._client.organization) + from .resources.organizations import AsyncOrganizationsResourceWithRawResponse + return AsyncOrganizationsResourceWithRawResponse(self._client.organizations) @cached_property def prompts(self) -> prompts.AsyncPromptsResourceWithRawResponse: @@ -753,12 +616,6 @@ def content(self) -> content.AsyncContentResourceWithRawResponse: from .resources.content import AsyncContentResourceWithRawResponse return AsyncContentResourceWithRawResponse(self._client.content) - @cached_property - def knowledge_bases(self) -> knowledge_bases.AsyncKnowledgeBasesResourceWithRawResponse: - with _RESOURCE_IMPORT_LOCK: - from .resources.knowledge_bases import AsyncKnowledgeBasesResourceWithRawResponse - return AsyncKnowledgeBasesResourceWithRawResponse(self._client.knowledge_bases) - @cached_property def agents(self) -> agents.AsyncAgentsResourceWithRawResponse: with _RESOURCE_IMPORT_LOCK: @@ -766,10 +623,10 @@ def agents(self) -> agents.AsyncAgentsResourceWithRawResponse: return AsyncAgentsResourceWithRawResponse(self._client.agents) @cached_property - def organizations(self) -> organizations.AsyncOrganizationsResourceWithRawResponse: + def knowledge_bases(self) -> knowledge_bases.AsyncKnowledgeBasesResourceWithRawResponse: with _RESOURCE_IMPORT_LOCK: - from .resources.organizations import AsyncOrganizationsResourceWithRawResponse - return AsyncOrganizationsResourceWithRawResponse(self._client.organizations) + from .resources.knowledge_bases import AsyncKnowledgeBasesResourceWithRawResponse + return AsyncKnowledgeBasesResourceWithRawResponse(self._client.knowledge_bases) class ProfoundWithStreamedResponse: @@ -779,10 +636,10 @@ def __init__(self, client: Profound) -> None: self._client = client @cached_property - def organization(self) -> organization.OrganizationResourceWithStreamingResponse: + def organizations(self) -> organizations.OrganizationsResourceWithStreamingResponse: with _RESOURCE_IMPORT_LOCK: - from .resources.organization import OrganizationResourceWithStreamingResponse - return OrganizationResourceWithStreamingResponse(self._client.organization) + from .resources.organizations import OrganizationsResourceWithStreamingResponse + return OrganizationsResourceWithStreamingResponse(self._client.organizations) @cached_property def prompts(self) -> prompts.PromptsResourceWithStreamingResponse: @@ -802,12 +659,6 @@ def content(self) -> content.ContentResourceWithStreamingResponse: from .resources.content import ContentResourceWithStreamingResponse return ContentResourceWithStreamingResponse(self._client.content) - @cached_property - def knowledge_bases(self) -> knowledge_bases.KnowledgeBasesResourceWithStreamingResponse: - with _RESOURCE_IMPORT_LOCK: - from .resources.knowledge_bases import KnowledgeBasesResourceWithStreamingResponse - return KnowledgeBasesResourceWithStreamingResponse(self._client.knowledge_bases) - @cached_property def agents(self) -> agents.AgentsResourceWithStreamingResponse: with _RESOURCE_IMPORT_LOCK: @@ -815,10 +666,10 @@ def agents(self) -> agents.AgentsResourceWithStreamingResponse: return AgentsResourceWithStreamingResponse(self._client.agents) @cached_property - def organizations(self) -> organizations.OrganizationsResourceWithStreamingResponse: + def knowledge_bases(self) -> knowledge_bases.KnowledgeBasesResourceWithStreamingResponse: with _RESOURCE_IMPORT_LOCK: - from .resources.organizations import OrganizationsResourceWithStreamingResponse - return OrganizationsResourceWithStreamingResponse(self._client.organizations) + from .resources.knowledge_bases import KnowledgeBasesResourceWithStreamingResponse + return KnowledgeBasesResourceWithStreamingResponse(self._client.knowledge_bases) class AsyncProfoundWithStreamedResponse: @@ -828,10 +679,10 @@ def __init__(self, client: AsyncProfound) -> None: self._client = client @cached_property - def organization(self) -> organization.AsyncOrganizationResourceWithStreamingResponse: + def organizations(self) -> organizations.AsyncOrganizationsResourceWithStreamingResponse: with _RESOURCE_IMPORT_LOCK: - from .resources.organization import AsyncOrganizationResourceWithStreamingResponse - return AsyncOrganizationResourceWithStreamingResponse(self._client.organization) + from .resources.organizations import AsyncOrganizationsResourceWithStreamingResponse + return AsyncOrganizationsResourceWithStreamingResponse(self._client.organizations) @cached_property def prompts(self) -> prompts.AsyncPromptsResourceWithStreamingResponse: @@ -851,12 +702,6 @@ def content(self) -> content.AsyncContentResourceWithStreamingResponse: from .resources.content import AsyncContentResourceWithStreamingResponse return AsyncContentResourceWithStreamingResponse(self._client.content) - @cached_property - def knowledge_bases(self) -> knowledge_bases.AsyncKnowledgeBasesResourceWithStreamingResponse: - with _RESOURCE_IMPORT_LOCK: - from .resources.knowledge_bases import AsyncKnowledgeBasesResourceWithStreamingResponse - return AsyncKnowledgeBasesResourceWithStreamingResponse(self._client.knowledge_bases) - @cached_property def agents(self) -> agents.AsyncAgentsResourceWithStreamingResponse: with _RESOURCE_IMPORT_LOCK: @@ -864,10 +709,10 @@ def agents(self) -> agents.AsyncAgentsResourceWithStreamingResponse: return AsyncAgentsResourceWithStreamingResponse(self._client.agents) @cached_property - def organizations(self) -> organizations.AsyncOrganizationsResourceWithStreamingResponse: + def knowledge_bases(self) -> knowledge_bases.AsyncKnowledgeBasesResourceWithStreamingResponse: with _RESOURCE_IMPORT_LOCK: - from .resources.organizations import AsyncOrganizationsResourceWithStreamingResponse - return AsyncOrganizationsResourceWithStreamingResponse(self._client.organizations) + from .resources.knowledge_bases import AsyncKnowledgeBasesResourceWithStreamingResponse + return AsyncKnowledgeBasesResourceWithStreamingResponse(self._client.knowledge_bases) # Alias names for the documented `Client` / `AsyncClient` symbols. diff --git a/src/_compat.py b/src/profound/_compat.py similarity index 100% rename from src/_compat.py rename to src/profound/_compat.py diff --git a/src/_constants.py b/src/profound/_constants.py similarity index 100% rename from src/_constants.py rename to src/profound/_constants.py diff --git a/src/_event_handler.py b/src/profound/_event_handler.py similarity index 100% rename from src/_event_handler.py rename to src/profound/_event_handler.py diff --git a/src/_exceptions.py b/src/profound/_exceptions.py similarity index 100% rename from src/_exceptions.py rename to src/profound/_exceptions.py diff --git a/src/_files.py b/src/profound/_files.py similarity index 100% rename from src/_files.py rename to src/profound/_files.py diff --git a/src/_models.py b/src/profound/_models.py similarity index 100% rename from src/_models.py rename to src/profound/_models.py diff --git a/src/_qs.py b/src/profound/_qs.py similarity index 100% rename from src/_qs.py rename to src/profound/_qs.py diff --git a/src/_resource.py b/src/profound/_resource.py similarity index 100% rename from src/_resource.py rename to src/profound/_resource.py diff --git a/src/_response.py b/src/profound/_response.py similarity index 99% rename from src/_response.py rename to src/profound/_response.py index e9123c5a..14c1be12 100644 --- a/src/_response.py +++ b/src/profound/_response.py @@ -227,9 +227,7 @@ def _parse(self, *, to: type[_T] | None = None) -> R | _T: and not issubclass(origin, BaseModel) and issubclass(origin, pydantic.BaseModel) ): - raise TypeError( - "Pydantic models must subclass our base model type, e.g. `from profound import BaseModel`" - ) + raise TypeError("Pydantic models must subclass our base model type, e.g. `from profound import BaseModel`") if ( cast_to is not object diff --git a/src/_send_queue.py b/src/profound/_send_queue.py similarity index 100% rename from src/_send_queue.py rename to src/profound/_send_queue.py diff --git a/src/_streaming.py b/src/profound/_streaming.py similarity index 100% rename from src/_streaming.py rename to src/profound/_streaming.py diff --git a/src/_types.py b/src/profound/_types.py similarity index 100% rename from src/_types.py rename to src/profound/_types.py diff --git a/src/_utils/__init__.py b/src/profound/_utils/__init__.py similarity index 100% rename from src/_utils/__init__.py rename to src/profound/_utils/__init__.py diff --git a/src/_utils/_compat.py b/src/profound/_utils/_compat.py similarity index 100% rename from src/_utils/_compat.py rename to src/profound/_utils/_compat.py diff --git a/src/_utils/_datetime_parse.py b/src/profound/_utils/_datetime_parse.py similarity index 100% rename from src/_utils/_datetime_parse.py rename to src/profound/_utils/_datetime_parse.py diff --git a/src/_utils/_json.py b/src/profound/_utils/_json.py similarity index 100% rename from src/_utils/_json.py rename to src/profound/_utils/_json.py diff --git a/src/_utils/_logs.py b/src/profound/_utils/_logs.py similarity index 100% rename from src/_utils/_logs.py rename to src/profound/_utils/_logs.py diff --git a/src/_utils/_path.py b/src/profound/_utils/_path.py similarity index 100% rename from src/_utils/_path.py rename to src/profound/_utils/_path.py diff --git a/src/_utils/_proxy.py b/src/profound/_utils/_proxy.py similarity index 100% rename from src/_utils/_proxy.py rename to src/profound/_utils/_proxy.py diff --git a/src/_utils/_reflection.py b/src/profound/_utils/_reflection.py similarity index 100% rename from src/_utils/_reflection.py rename to src/profound/_utils/_reflection.py diff --git a/src/_utils/_resources_proxy.py b/src/profound/_utils/_resources_proxy.py similarity index 100% rename from src/_utils/_resources_proxy.py rename to src/profound/_utils/_resources_proxy.py diff --git a/src/_utils/_streams.py b/src/profound/_utils/_streams.py similarity index 100% rename from src/_utils/_streams.py rename to src/profound/_utils/_streams.py diff --git a/src/_utils/_sync.py b/src/profound/_utils/_sync.py similarity index 100% rename from src/_utils/_sync.py rename to src/profound/_utils/_sync.py diff --git a/src/_utils/_transform.py b/src/profound/_utils/_transform.py similarity index 100% rename from src/_utils/_transform.py rename to src/profound/_utils/_transform.py diff --git a/src/_utils/_typing.py b/src/profound/_utils/_typing.py similarity index 100% rename from src/_utils/_typing.py rename to src/profound/_utils/_typing.py diff --git a/src/_utils/_utils.py b/src/profound/_utils/_utils.py similarity index 100% rename from src/_utils/_utils.py rename to src/profound/_utils/_utils.py diff --git a/src/_version.py b/src/profound/_version.py similarity index 66% rename from src/_version.py rename to src/profound/_version.py index c906e793..8350dd40 100644 --- a/src/_version.py +++ b/src/profound/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Scalar. See README.md for details. __title__ = "profound" -__version__ = "0.3.0" +__version__ = "0.1.0" # x-release-please-version diff --git a/src/py.typed b/src/profound/py.typed similarity index 100% rename from src/py.typed rename to src/profound/py.typed diff --git a/src/resources/__init__.py b/src/profound/resources/__init__.py similarity index 85% rename from src/resources/__init__.py rename to src/profound/resources/__init__.py index 6434619f..79538775 100644 --- a/src/resources/__init__.py +++ b/src/profound/resources/__init__.py @@ -1,12 +1,12 @@ # File generated from our OpenAPI spec by Scalar. See README.md for details. -from .organization import ( - OrganizationResource, - AsyncOrganizationResource, - OrganizationResourceWithRawResponse, - AsyncOrganizationResourceWithRawResponse, - OrganizationResourceWithStreamingResponse, - AsyncOrganizationResourceWithStreamingResponse, +from .organizations import ( + OrganizationsResource, + AsyncOrganizationsResource, + OrganizationsResourceWithRawResponse, + AsyncOrganizationsResourceWithRawResponse, + OrganizationsResourceWithStreamingResponse, + AsyncOrganizationsResourceWithStreamingResponse, ) from .prompts import ( PromptsResource, @@ -32,14 +32,6 @@ ContentResourceWithStreamingResponse, AsyncContentResourceWithStreamingResponse, ) -from .knowledge_bases import ( - KnowledgeBasesResource, - AsyncKnowledgeBasesResource, - KnowledgeBasesResourceWithRawResponse, - AsyncKnowledgeBasesResourceWithRawResponse, - KnowledgeBasesResourceWithStreamingResponse, - AsyncKnowledgeBasesResourceWithStreamingResponse, -) from .agents import ( AgentsResource, AsyncAgentsResource, @@ -48,22 +40,22 @@ AgentsResourceWithStreamingResponse, AsyncAgentsResourceWithStreamingResponse, ) -from .organizations import ( - OrganizationsResource, - AsyncOrganizationsResource, - OrganizationsResourceWithRawResponse, - AsyncOrganizationsResourceWithRawResponse, - OrganizationsResourceWithStreamingResponse, - AsyncOrganizationsResourceWithStreamingResponse, +from .knowledge_bases import ( + KnowledgeBasesResource, + AsyncKnowledgeBasesResource, + KnowledgeBasesResourceWithRawResponse, + AsyncKnowledgeBasesResourceWithRawResponse, + KnowledgeBasesResourceWithStreamingResponse, + AsyncKnowledgeBasesResourceWithStreamingResponse, ) __all__ = [ - "OrganizationResource", - "AsyncOrganizationResource", - "OrganizationResourceWithRawResponse", - "AsyncOrganizationResourceWithRawResponse", - "OrganizationResourceWithStreamingResponse", - "AsyncOrganizationResourceWithStreamingResponse", + "OrganizationsResource", + "AsyncOrganizationsResource", + "OrganizationsResourceWithRawResponse", + "AsyncOrganizationsResourceWithRawResponse", + "OrganizationsResourceWithStreamingResponse", + "AsyncOrganizationsResourceWithStreamingResponse", "PromptsResource", "AsyncPromptsResource", "PromptsResourceWithRawResponse", @@ -82,22 +74,16 @@ "AsyncContentResourceWithRawResponse", "ContentResourceWithStreamingResponse", "AsyncContentResourceWithStreamingResponse", - "KnowledgeBasesResource", - "AsyncKnowledgeBasesResource", - "KnowledgeBasesResourceWithRawResponse", - "AsyncKnowledgeBasesResourceWithRawResponse", - "KnowledgeBasesResourceWithStreamingResponse", - "AsyncKnowledgeBasesResourceWithStreamingResponse", "AgentsResource", "AsyncAgentsResource", "AgentsResourceWithRawResponse", "AsyncAgentsResourceWithRawResponse", "AgentsResourceWithStreamingResponse", "AsyncAgentsResourceWithStreamingResponse", - "OrganizationsResource", - "AsyncOrganizationsResource", - "OrganizationsResourceWithRawResponse", - "AsyncOrganizationsResourceWithRawResponse", - "OrganizationsResourceWithStreamingResponse", - "AsyncOrganizationsResourceWithStreamingResponse", + "KnowledgeBasesResource", + "AsyncKnowledgeBasesResource", + "KnowledgeBasesResourceWithRawResponse", + "AsyncKnowledgeBasesResourceWithRawResponse", + "KnowledgeBasesResourceWithStreamingResponse", + "AsyncKnowledgeBasesResourceWithStreamingResponse", ] diff --git a/src/resources/agents/__init__.py b/src/profound/resources/agents/__init__.py similarity index 66% rename from src/resources/agents/__init__.py rename to src/profound/resources/agents/__init__.py index 1b3286ea..8d8709af 100644 --- a/src/resources/agents/__init__.py +++ b/src/profound/resources/agents/__init__.py @@ -8,14 +8,6 @@ AgentsResourceWithStreamingResponse, AsyncAgentsResourceWithStreamingResponse, ) -from .node_types import ( - NodeTypesResource, - AsyncNodeTypesResource, - NodeTypesResourceWithRawResponse, - AsyncNodeTypesResourceWithRawResponse, - NodeTypesResourceWithStreamingResponse, - AsyncNodeTypesResourceWithStreamingResponse, -) from .runs import ( RunsResource, AsyncRunsResource, @@ -32,12 +24,6 @@ "AsyncAgentsResourceWithRawResponse", "AgentsResourceWithStreamingResponse", "AsyncAgentsResourceWithStreamingResponse", - "NodeTypesResource", - "AsyncNodeTypesResource", - "NodeTypesResourceWithRawResponse", - "AsyncNodeTypesResourceWithRawResponse", - "NodeTypesResourceWithStreamingResponse", - "AsyncNodeTypesResourceWithStreamingResponse", "RunsResource", "AsyncRunsResource", "RunsResourceWithRawResponse", diff --git a/src/profound/resources/agents/agents.py b/src/profound/resources/agents/agents.py new file mode 100644 index 00000000..2bce1070 --- /dev/null +++ b/src/profound/resources/agents/agents.py @@ -0,0 +1,333 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +import httpx + +from typing import List, Optional +from typing_extensions import Literal + +from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given +from ..._utils import path_template, maybe_transform, async_maybe_transform +from ..._compat import cached_property +from ..._resource import SyncAPIResource, AsyncAPIResource +from ..._response import ( + to_raw_response_wrapper, + to_streamed_response_wrapper, + async_to_raw_response_wrapper, + async_to_streamed_response_wrapper, +) +from ..._base_client import make_request_options +from .runs import ( + RunsResource, + AsyncRunsResource, + RunsResourceWithRawResponse, + AsyncRunsResourceWithRawResponse, + RunsResourceWithStreamingResponse, + AsyncRunsResourceWithStreamingResponse, +) +from ...types.agent_list_response import AgentListResponse +from ...types import agent_list_params, agent_retrieve_params +from ...types.agent_retrieve_response import AgentRetrieveResponse + +__all__ = ["AgentsResource", "AsyncAgentsResource"] + + +class AgentsResource(SyncAPIResource): + @cached_property + def runs(self) -> RunsResource: + return RunsResource(self._client) + + @cached_property + def with_raw_response(self) -> AgentsResourceWithRawResponse: + return AgentsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AgentsResourceWithStreamingResponse: + return AgentsResourceWithStreamingResponse(self) + + def list( + self, + *, + statuses: Optional[List[Literal["published", "draft"]]] | Omit = omit, + limit: int | Omit = omit, + next_cursor: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AgentListResponse: + """ + List agents available to your organization. + + Agent status reflects whether an agent has ever been published. `published` + agents have a live published version. `draft` agents have not been + published yet. + + Args: + statuses: Optional status filter. Use `published` to list agents that have a live published version, or `draft` to list agents that have not been published yet. Defaults to `published`. + limit: Query parameter. + next_cursor: Query parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AgentListResponse: Successful Response + + Example: + ```python + agent = client.agents.list( + limit=100, + ) + ``` + """ + return self._get( + "/v1/agents", + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=maybe_transform( + {"statuses": statuses, "limit": limit, "next_cursor": next_cursor}, + agent_list_params.AgentListParams, + ), + ), + cast_to=AgentListResponse, + ) + + def retrieve( + self, + agent_id: str, + *, + version: Literal["published", "draft"] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AgentRetrieveResponse: + """ + Retrieve an agent and its schema details. + + Agents can have both a live published version and a draft version with newer + unpublished changes. Use the `version` parameter to choose which state to return. + + Args: + agent_id: The ID of the agent to retrieve. + version: Version of the agent to retrieve. Use `published` for the live version, or `draft` for the latest unpublished changes for the same agent. Defaults to `published`. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AgentRetrieveResponse: Successful Response + + Example: + ```python + agent = client.agents.retrieve( + agent_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + ) + ``` + """ + if agent_id is None or (isinstance(agent_id, str) and not agent_id): + raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") + return self._get( + path_template("/v1/agents/{agent_id}", **{"agent_id": agent_id}), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=maybe_transform({"version": version}, agent_retrieve_params.AgentRetrieveParams), + ), + cast_to=AgentRetrieveResponse, + ) + + +class AsyncAgentsResource(AsyncAPIResource): + @cached_property + def runs(self) -> AsyncRunsResource: + return AsyncRunsResource(self._client) + + @cached_property + def with_raw_response(self) -> AsyncAgentsResourceWithRawResponse: + return AsyncAgentsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncAgentsResourceWithStreamingResponse: + return AsyncAgentsResourceWithStreamingResponse(self) + + async def list( + self, + *, + statuses: Optional[List[Literal["published", "draft"]]] | Omit = omit, + limit: int | Omit = omit, + next_cursor: Optional[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AgentListResponse: + """ + List agents available to your organization. + + Agent status reflects whether an agent has ever been published. `published` + agents have a live published version. `draft` agents have not been + published yet. + + Args: + statuses: Optional status filter. Use `published` to list agents that have a live published version, or `draft` to list agents that have not been published yet. Defaults to `published`. + limit: Query parameter. + next_cursor: Query parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AgentListResponse: Successful Response + + Example: + ```python + agent = await client.agents.list( + limit=100, + ) + ``` + """ + return await self._get( + "/v1/agents", + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=await async_maybe_transform( + {"statuses": statuses, "limit": limit, "next_cursor": next_cursor}, + agent_list_params.AgentListParams, + ), + ), + cast_to=AgentListResponse, + ) + + async def retrieve( + self, + agent_id: str, + *, + version: Literal["published", "draft"] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AgentRetrieveResponse: + """ + Retrieve an agent and its schema details. + + Agents can have both a live published version and a draft version with newer + unpublished changes. Use the `version` parameter to choose which state to return. + + Args: + agent_id: The ID of the agent to retrieve. + version: Version of the agent to retrieve. Use `published` for the live version, or `draft` for the latest unpublished changes for the same agent. Defaults to `published`. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AgentRetrieveResponse: Successful Response + + Example: + ```python + agent = await client.agents.retrieve( + agent_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + ) + ``` + """ + if agent_id is None or (isinstance(agent_id, str) and not agent_id): + raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") + return await self._get( + path_template("/v1/agents/{agent_id}", **{"agent_id": agent_id}), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=await async_maybe_transform({"version": version}, agent_retrieve_params.AgentRetrieveParams), + ), + cast_to=AgentRetrieveResponse, + ) + + +class AgentsResourceWithRawResponse: + def __init__(self, agents: AgentsResource) -> None: + self._agents = agents + + self.list = to_raw_response_wrapper( + agents.list, + ) + self.retrieve = to_raw_response_wrapper( + agents.retrieve, + ) + + @cached_property + def runs(self) -> RunsResourceWithRawResponse: + return RunsResourceWithRawResponse(self._agents.runs) + + +class AsyncAgentsResourceWithRawResponse: + def __init__(self, agents: AsyncAgentsResource) -> None: + self._agents = agents + + self.list = async_to_raw_response_wrapper( + agents.list, + ) + self.retrieve = async_to_raw_response_wrapper( + agents.retrieve, + ) + + @cached_property + def runs(self) -> AsyncRunsResourceWithRawResponse: + return AsyncRunsResourceWithRawResponse(self._agents.runs) + + +class AgentsResourceWithStreamingResponse: + def __init__(self, agents: AgentsResource) -> None: + self._agents = agents + + self.list = to_streamed_response_wrapper( + agents.list, + ) + self.retrieve = to_streamed_response_wrapper( + agents.retrieve, + ) + + @cached_property + def runs(self) -> RunsResourceWithStreamingResponse: + return RunsResourceWithStreamingResponse(self._agents.runs) + + +class AsyncAgentsResourceWithStreamingResponse: + def __init__(self, agents: AsyncAgentsResource) -> None: + self._agents = agents + + self.list = async_to_streamed_response_wrapper( + agents.list, + ) + self.retrieve = async_to_streamed_response_wrapper( + agents.retrieve, + ) + + @cached_property + def runs(self) -> AsyncRunsResourceWithStreamingResponse: + return AsyncRunsResourceWithStreamingResponse(self._agents.runs) diff --git a/src/resources/agents/runs.py b/src/profound/resources/agents/runs.py similarity index 82% rename from src/resources/agents/runs.py rename to src/profound/resources/agents/runs.py index e226b6c8..a4109057 100644 --- a/src/resources/agents/runs.py +++ b/src/profound/resources/agents/runs.py @@ -4,6 +4,8 @@ import httpx +from typing import Dict + from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given from ..._utils import path_template, maybe_transform, async_maybe_transform from ..._compat import cached_property @@ -16,14 +18,13 @@ ) from ..._base_client import make_request_options from ...types.agents.run_create_response import RunCreateResponse -from ...types.agents import run_create_params -from ...types.agents.run_retrieve_response import RunRetrieveResponse, Error, Outputs +from ...types.agents import run_create_params, run_retrieve_params +from ...types.agents.run_retrieve_response import RunRetrieveResponse __all__ = ["RunsResource", "AsyncRunsResource"] class RunsResource(SyncAPIResource): - @cached_property def with_raw_response(self) -> RunsResourceWithRawResponse: return RunsResourceWithRawResponse(self) @@ -36,7 +37,7 @@ def create( self, agent_id: str, *, - inputs: run_create_params.Inputs | Omit = omit, + inputs: Dict[str, object] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -46,11 +47,11 @@ def create( ) -> RunCreateResponse: """ Start a new run for an agent. - + Runs always execute the agent's live published version, so the agent must be published first with `POST /v1/agents/{agent_id}/publish`. Unpublished drafts cannot be run. - + Args: agent_id: The ID of the agent to run. inputs: Input values for the run. Keys should match the property names defined in `schema.input`. Omit the request body when the agent does not require inputs. @@ -58,14 +59,14 @@ def create( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: RunCreateResponse: Successful Response - + Example: ```python run = client.agents.runs.create( - agent_id="agentId", + agent_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", ) ``` """ @@ -74,10 +75,12 @@ def create( return self._post( path_template("/v1/agents/{agent_id}/runs", **{"agent_id": agent_id}), body=maybe_transform( - {"inputs": inputs}, - run_create_params.RunCreateParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + {"inputs": inputs}, + run_create_params.RunCreateParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=RunCreateResponse, ) @@ -86,6 +89,7 @@ def retrieve( run_id: str, *, agent_id: str, + verbose: bool | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -95,23 +99,25 @@ def retrieve( ) -> RunRetrieveResponse: """ Retrieve the current status and result details for an agent run. - + Args: run_id: The ID of the run to retrieve. agent_id: The ID of the agent that owns the run. + verbose: Include each step's raw `outputs` payload in the execution trace. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: RunRetrieveResponse: Successful Response - + Example: ```python run = client.agents.runs.retrieve( - agent_id="agentId", - run_id="runId", + agent_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + run_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + verbose=False, ) ``` """ @@ -121,13 +127,18 @@ def retrieve( raise ValueError(f"Expected a non-empty value for `run_id` but received {run_id!r}") return self._get( path_template("/v1/agents/{agent_id}/runs/{run_id}", **{"agent_id": agent_id, "run_id": run_id}), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=maybe_transform({"verbose": verbose}, run_retrieve_params.RunRetrieveParams), + ), cast_to=RunRetrieveResponse, ) class AsyncRunsResource(AsyncAPIResource): - @cached_property def with_raw_response(self) -> AsyncRunsResourceWithRawResponse: return AsyncRunsResourceWithRawResponse(self) @@ -140,7 +151,7 @@ async def create( self, agent_id: str, *, - inputs: run_create_params.Inputs | Omit = omit, + inputs: Dict[str, object] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -150,11 +161,11 @@ async def create( ) -> RunCreateResponse: """ Start a new run for an agent. - + Runs always execute the agent's live published version, so the agent must be published first with `POST /v1/agents/{agent_id}/publish`. Unpublished drafts cannot be run. - + Args: agent_id: The ID of the agent to run. inputs: Input values for the run. Keys should match the property names defined in `schema.input`. Omit the request body when the agent does not require inputs. @@ -162,14 +173,14 @@ async def create( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: RunCreateResponse: Successful Response - + Example: ```python run = await client.agents.runs.create( - agent_id="agentId", + agent_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", ) ``` """ @@ -178,10 +189,12 @@ async def create( return await self._post( path_template("/v1/agents/{agent_id}/runs", **{"agent_id": agent_id}), body=await async_maybe_transform( - {"inputs": inputs}, - run_create_params.RunCreateParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + {"inputs": inputs}, + run_create_params.RunCreateParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=RunCreateResponse, ) @@ -190,6 +203,7 @@ async def retrieve( run_id: str, *, agent_id: str, + verbose: bool | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -199,23 +213,25 @@ async def retrieve( ) -> RunRetrieveResponse: """ Retrieve the current status and result details for an agent run. - + Args: run_id: The ID of the run to retrieve. agent_id: The ID of the agent that owns the run. + verbose: Include each step's raw `outputs` payload in the execution trace. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: RunRetrieveResponse: Successful Response - + Example: ```python run = await client.agents.runs.retrieve( - agent_id="agentId", - run_id="runId", + agent_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + run_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + verbose=False, ) ``` """ @@ -225,7 +241,13 @@ async def retrieve( raise ValueError(f"Expected a non-empty value for `run_id` but received {run_id!r}") return await self._get( path_template("/v1/agents/{agent_id}/runs/{run_id}", **{"agent_id": agent_id, "run_id": run_id}), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=await async_maybe_transform({"verbose": verbose}, run_retrieve_params.RunRetrieveParams), + ), cast_to=RunRetrieveResponse, ) diff --git a/src/resources/content/__init__.py b/src/profound/resources/content/__init__.py similarity index 100% rename from src/resources/content/__init__.py rename to src/profound/resources/content/__init__.py diff --git a/src/resources/content/content.py b/src/profound/resources/content/content.py similarity index 95% rename from src/resources/content/content.py rename to src/profound/resources/content/content.py index 67d8914e..778bb2fd 100644 --- a/src/resources/content/content.py +++ b/src/profound/resources/content/content.py @@ -4,8 +4,6 @@ import httpx -from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from ..._utils import path_template, maybe_transform, async_maybe_transform from ..._compat import cached_property from ..._resource import SyncAPIResource, AsyncAPIResource from ..._response import ( @@ -28,7 +26,6 @@ class ContentResource(SyncAPIResource): - @cached_property def optimization(self) -> OptimizationResource: return OptimizationResource(self._client) @@ -43,7 +40,6 @@ def with_streaming_response(self) -> ContentResourceWithStreamingResponse: class AsyncContentResource(AsyncAPIResource): - @cached_property def optimization(self) -> AsyncOptimizationResource: return AsyncOptimizationResource(self._client) @@ -61,7 +57,6 @@ class ContentResourceWithRawResponse: def __init__(self, content: ContentResource) -> None: self._content = content - @cached_property def optimization(self) -> OptimizationResourceWithRawResponse: return OptimizationResourceWithRawResponse(self._content.optimization) @@ -71,7 +66,6 @@ class AsyncContentResourceWithRawResponse: def __init__(self, content: AsyncContentResource) -> None: self._content = content - @cached_property def optimization(self) -> AsyncOptimizationResourceWithRawResponse: return AsyncOptimizationResourceWithRawResponse(self._content.optimization) @@ -81,7 +75,6 @@ class ContentResourceWithStreamingResponse: def __init__(self, content: ContentResource) -> None: self._content = content - @cached_property def optimization(self) -> OptimizationResourceWithStreamingResponse: return OptimizationResourceWithStreamingResponse(self._content.optimization) @@ -91,7 +84,6 @@ class AsyncContentResourceWithStreamingResponse: def __init__(self, content: AsyncContentResource) -> None: self._content = content - @cached_property def optimization(self) -> AsyncOptimizationResourceWithStreamingResponse: return AsyncOptimizationResourceWithStreamingResponse(self._content.optimization) diff --git a/src/resources/content/optimization.py b/src/profound/resources/content/optimization.py similarity index 84% rename from src/resources/content/optimization.py rename to src/profound/resources/content/optimization.py index a978df67..c11d4118 100644 --- a/src/resources/content/optimization.py +++ b/src/profound/resources/content/optimization.py @@ -15,15 +15,14 @@ async_to_streamed_response_wrapper, ) from ..._base_client import make_request_options -from ...types.content.optimization_list_response import OptimizationListResponse, ContentOptimizationResponseInfo, OptimizationQuery, ContentOptimization +from ...types.content.optimization_list_response import OptimizationListResponse from ...types.content import optimization_list_params -from ...types.content.optimization_retrieve_response import OptimizationRetrieveResponse, ContentAnalysis, DocumentContent, AeoScore, AeoScoreTargetZone, AnalysisSummary, AnalysisBreakdown, Recommendation, RecommendationImpact, RecommendationSuggestion, AnalysisInputs, TopicInput, PromptInput, UserInput +from ...types.content.optimization_retrieve_response import OptimizationRetrieveResponse __all__ = ["OptimizationResource", "AsyncOptimizationResource"] class OptimizationResource(SyncAPIResource): - @cached_property def with_raw_response(self) -> OptimizationResourceWithRawResponse: return OptimizationResourceWithRawResponse(self) @@ -47,7 +46,7 @@ def list( ) -> OptimizationListResponse: """ Optimization List - + Args: asset_id: Path parameter. limit: Maximum number of results to return @@ -56,14 +55,14 @@ def list( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: OptimizationListResponse: Successful Response - + Example: ```python optimization = client.content.optimization.list( - asset_id="assetId", + asset_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", limit=10000, offset=0, ) @@ -73,7 +72,15 @@ def list( raise ValueError(f"Expected a non-empty value for `asset_id` but received {asset_id!r}") return self._get( path_template("/v1/content/{asset_id}/optimization", **{"asset_id": asset_id}), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"limit": limit, "offset": offset}, optimization_list_params.OptimizationListParams)), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=maybe_transform( + {"limit": limit, "offset": offset}, optimization_list_params.OptimizationListParams + ), + ), cast_to=OptimizationListResponse, ) @@ -91,7 +98,7 @@ def retrieve( ) -> OptimizationRetrieveResponse: """ Optimization Analysis - + Args: content_id: Path parameter. asset_id: Path parameter. @@ -99,15 +106,15 @@ def retrieve( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: OptimizationRetrieveResponse: Successful Response - + Example: ```python optimization = client.content.optimization.retrieve( - asset_id="assetId", - content_id="contentId", + asset_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + content_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", ) ``` """ @@ -116,14 +123,17 @@ def retrieve( if content_id is None or (isinstance(content_id, str) and not content_id): raise ValueError(f"Expected a non-empty value for `content_id` but received {content_id!r}") return self._get( - path_template("/v1/content/{asset_id}/optimization/{content_id}", **{"asset_id": asset_id, "content_id": content_id}), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + path_template( + "/v1/content/{asset_id}/optimization/{content_id}", **{"asset_id": asset_id, "content_id": content_id} + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=OptimizationRetrieveResponse, ) class AsyncOptimizationResource(AsyncAPIResource): - @cached_property def with_raw_response(self) -> AsyncOptimizationResourceWithRawResponse: return AsyncOptimizationResourceWithRawResponse(self) @@ -147,7 +157,7 @@ async def list( ) -> OptimizationListResponse: """ Optimization List - + Args: asset_id: Path parameter. limit: Maximum number of results to return @@ -156,14 +166,14 @@ async def list( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: OptimizationListResponse: Successful Response - + Example: ```python optimization = await client.content.optimization.list( - asset_id="assetId", + asset_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", limit=10000, offset=0, ) @@ -173,7 +183,15 @@ async def list( raise ValueError(f"Expected a non-empty value for `asset_id` but received {asset_id!r}") return await self._get( path_template("/v1/content/{asset_id}/optimization", **{"asset_id": asset_id}), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"limit": limit, "offset": offset}, optimization_list_params.OptimizationListParams)), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=await async_maybe_transform( + {"limit": limit, "offset": offset}, optimization_list_params.OptimizationListParams + ), + ), cast_to=OptimizationListResponse, ) @@ -191,7 +209,7 @@ async def retrieve( ) -> OptimizationRetrieveResponse: """ Optimization Analysis - + Args: content_id: Path parameter. asset_id: Path parameter. @@ -199,15 +217,15 @@ async def retrieve( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: OptimizationRetrieveResponse: Successful Response - + Example: ```python optimization = await client.content.optimization.retrieve( - asset_id="assetId", - content_id="contentId", + asset_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + content_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", ) ``` """ @@ -216,8 +234,12 @@ async def retrieve( if content_id is None or (isinstance(content_id, str) and not content_id): raise ValueError(f"Expected a non-empty value for `content_id` but received {content_id!r}") return await self._get( - path_template("/v1/content/{asset_id}/optimization/{content_id}", **{"asset_id": asset_id, "content_id": content_id}), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + path_template( + "/v1/content/{asset_id}/optimization/{content_id}", **{"asset_id": asset_id, "content_id": content_id} + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=OptimizationRetrieveResponse, ) diff --git a/src/resources/knowledge_bases/__init__.py b/src/profound/resources/knowledge_bases/__init__.py similarity index 100% rename from src/resources/knowledge_bases/__init__.py rename to src/profound/resources/knowledge_bases/__init__.py diff --git a/src/resources/knowledge_bases/documents.py b/src/profound/resources/knowledge_bases/documents.py similarity index 74% rename from src/resources/knowledge_bases/documents.py rename to src/profound/resources/knowledge_bases/documents.py index cd63a876..e78fb6a3 100644 --- a/src/resources/knowledge_bases/documents.py +++ b/src/profound/resources/knowledge_bases/documents.py @@ -18,17 +18,14 @@ ) from ..._base_client import make_request_options from ...types.knowledge_bases.document_create_response import DocumentCreateResponse -from ...types.knowledge_bases import document_create_params +from ...types.knowledge_bases import document_create_params, document_update_params, document_delete_params from ...types.knowledge_bases.document_update_response import DocumentUpdateResponse -from ...types.knowledge_bases import document_update_params from ...types.knowledge_bases.document_delete_response import DocumentDeleteResponse -from ...types.knowledge_bases import document_delete_params __all__ = ["DocumentsResource", "AsyncDocumentsResource"] class DocumentsResource(SyncAPIResource): - @cached_property def with_raw_response(self) -> DocumentsResourceWithRawResponse: return DocumentsResourceWithRawResponse(self) @@ -54,7 +51,7 @@ def create( ) -> DocumentCreateResponse: """ Add a document to a knowledge base using JSON text or multipart file upload. - + Args: knowledge_base_id: Unique knowledge base ID. name: Unique document name. @@ -65,32 +62,42 @@ def create( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: DocumentCreateResponse: Successful Response - + Example: ```python document = client.knowledge_bases.documents.create( - knowledge_base_id="knowledgeBaseId", - name="", - text="", + knowledge_base_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + name="x", + text="x", ) ``` """ if knowledge_base_id is None or (isinstance(knowledge_base_id, str) and not knowledge_base_id): raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") return self._post( - path_template("/v1/knowledge-bases/{knowledge_base_id}/documents", **{"knowledge_base_id": knowledge_base_id}), + path_template( + "/v1/knowledge-bases/{knowledge_base_id}/documents", **{"knowledge_base_id": knowledge_base_id} + ), body=maybe_transform( - { - "name": name, - "text": text, - "folder": folder, - }, - document_create_params.DocumentCreateParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"organization_id": organization_id}, document_create_params.DocumentCreateParams)), + { + "name": name, + "text": text, + "folder": folder, + }, + document_create_params.DocumentCreateParams, + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=maybe_transform( + {"organization_id": organization_id}, document_create_params.DocumentCreateParams + ), + ), cast_to=DocumentCreateResponse, ) @@ -111,7 +118,7 @@ def update( ) -> DocumentUpdateResponse: """ Overwrite a knowledge base document using JSON text or multipart file upload. - + Args: knowledge_base_id: Unique knowledge base ID. name: Document name or path to update. @@ -122,32 +129,42 @@ def update( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: DocumentUpdateResponse: Successful Response - + Example: ```python document = client.knowledge_bases.documents.update( - knowledge_base_id="knowledgeBaseId", - name="", - text="", + knowledge_base_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + name="x", + text="x", ) ``` """ if knowledge_base_id is None or (isinstance(knowledge_base_id, str) and not knowledge_base_id): raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") return self._put( - path_template("/v1/knowledge-bases/{knowledge_base_id}/documents", **{"knowledge_base_id": knowledge_base_id}), + path_template( + "/v1/knowledge-bases/{knowledge_base_id}/documents", **{"knowledge_base_id": knowledge_base_id} + ), body=maybe_transform( - { - "name": name, - "text": text, - "folder": folder, - }, - document_update_params.DocumentUpdateParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"organization_id": organization_id}, document_update_params.DocumentUpdateParams)), + { + "name": name, + "text": text, + "folder": folder, + }, + document_update_params.DocumentUpdateParams, + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=maybe_transform( + {"organization_id": organization_id}, document_update_params.DocumentUpdateParams + ), + ), cast_to=DocumentUpdateResponse, ) @@ -166,7 +183,7 @@ def delete( ) -> DocumentDeleteResponse: """ Delete an existing document from a knowledge base. - + Args: knowledge_base_id: Unique knowledge base ID. name: Document path to delete. @@ -175,33 +192,42 @@ def delete( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: DocumentDeleteResponse: Successful Response - + Example: ```python document = client.knowledge_bases.documents.delete( - knowledge_base_id="knowledgeBaseId", - name="", + knowledge_base_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + name="x", ) ``` """ if knowledge_base_id is None or (isinstance(knowledge_base_id, str) and not knowledge_base_id): raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") return self._delete( - path_template("/v1/knowledge-bases/{knowledge_base_id}/documents", **{"knowledge_base_id": knowledge_base_id}), + path_template( + "/v1/knowledge-bases/{knowledge_base_id}/documents", **{"knowledge_base_id": knowledge_base_id} + ), body=maybe_transform( - {"name": name}, - document_delete_params.DocumentDeleteParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"organization_id": organization_id}, document_delete_params.DocumentDeleteParams)), + {"name": name}, + document_delete_params.DocumentDeleteParams, + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=maybe_transform( + {"organization_id": organization_id}, document_delete_params.DocumentDeleteParams + ), + ), cast_to=DocumentDeleteResponse, ) class AsyncDocumentsResource(AsyncAPIResource): - @cached_property def with_raw_response(self) -> AsyncDocumentsResourceWithRawResponse: return AsyncDocumentsResourceWithRawResponse(self) @@ -227,7 +253,7 @@ async def create( ) -> DocumentCreateResponse: """ Add a document to a knowledge base using JSON text or multipart file upload. - + Args: knowledge_base_id: Unique knowledge base ID. name: Unique document name. @@ -238,32 +264,42 @@ async def create( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: DocumentCreateResponse: Successful Response - + Example: ```python document = await client.knowledge_bases.documents.create( - knowledge_base_id="knowledgeBaseId", - name="", - text="", + knowledge_base_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + name="x", + text="x", ) ``` """ if knowledge_base_id is None or (isinstance(knowledge_base_id, str) and not knowledge_base_id): raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") return await self._post( - path_template("/v1/knowledge-bases/{knowledge_base_id}/documents", **{"knowledge_base_id": knowledge_base_id}), + path_template( + "/v1/knowledge-bases/{knowledge_base_id}/documents", **{"knowledge_base_id": knowledge_base_id} + ), body=await async_maybe_transform( - { - "name": name, - "text": text, - "folder": folder, - }, - document_create_params.DocumentCreateParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"organization_id": organization_id}, document_create_params.DocumentCreateParams)), + { + "name": name, + "text": text, + "folder": folder, + }, + document_create_params.DocumentCreateParams, + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=await async_maybe_transform( + {"organization_id": organization_id}, document_create_params.DocumentCreateParams + ), + ), cast_to=DocumentCreateResponse, ) @@ -284,7 +320,7 @@ async def update( ) -> DocumentUpdateResponse: """ Overwrite a knowledge base document using JSON text or multipart file upload. - + Args: knowledge_base_id: Unique knowledge base ID. name: Document name or path to update. @@ -295,32 +331,42 @@ async def update( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: DocumentUpdateResponse: Successful Response - + Example: ```python document = await client.knowledge_bases.documents.update( - knowledge_base_id="knowledgeBaseId", - name="", - text="", + knowledge_base_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + name="x", + text="x", ) ``` """ if knowledge_base_id is None or (isinstance(knowledge_base_id, str) and not knowledge_base_id): raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") return await self._put( - path_template("/v1/knowledge-bases/{knowledge_base_id}/documents", **{"knowledge_base_id": knowledge_base_id}), + path_template( + "/v1/knowledge-bases/{knowledge_base_id}/documents", **{"knowledge_base_id": knowledge_base_id} + ), body=await async_maybe_transform( - { - "name": name, - "text": text, - "folder": folder, - }, - document_update_params.DocumentUpdateParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"organization_id": organization_id}, document_update_params.DocumentUpdateParams)), + { + "name": name, + "text": text, + "folder": folder, + }, + document_update_params.DocumentUpdateParams, + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=await async_maybe_transform( + {"organization_id": organization_id}, document_update_params.DocumentUpdateParams + ), + ), cast_to=DocumentUpdateResponse, ) @@ -339,7 +385,7 @@ async def delete( ) -> DocumentDeleteResponse: """ Delete an existing document from a knowledge base. - + Args: knowledge_base_id: Unique knowledge base ID. name: Document path to delete. @@ -348,27 +394,37 @@ async def delete( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: DocumentDeleteResponse: Successful Response - + Example: ```python document = await client.knowledge_bases.documents.delete( - knowledge_base_id="knowledgeBaseId", - name="", + knowledge_base_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + name="x", ) ``` """ if knowledge_base_id is None or (isinstance(knowledge_base_id, str) and not knowledge_base_id): raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") return await self._delete( - path_template("/v1/knowledge-bases/{knowledge_base_id}/documents", **{"knowledge_base_id": knowledge_base_id}), + path_template( + "/v1/knowledge-bases/{knowledge_base_id}/documents", **{"knowledge_base_id": knowledge_base_id} + ), body=await async_maybe_transform( - {"name": name}, - document_delete_params.DocumentDeleteParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"organization_id": organization_id}, document_delete_params.DocumentDeleteParams)), + {"name": name}, + document_delete_params.DocumentDeleteParams, + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=await async_maybe_transform( + {"organization_id": organization_id}, document_delete_params.DocumentDeleteParams + ), + ), cast_to=DocumentDeleteResponse, ) diff --git a/src/resources/knowledge_bases/folders.py b/src/profound/resources/knowledge_bases/folders.py similarity index 77% rename from src/resources/knowledge_bases/folders.py rename to src/profound/resources/knowledge_bases/folders.py index ff004480..7def3037 100644 --- a/src/resources/knowledge_bases/folders.py +++ b/src/profound/resources/knowledge_bases/folders.py @@ -18,15 +18,13 @@ ) from ..._base_client import make_request_options from ...types.knowledge_bases.folder_create_response import FolderCreateResponse -from ...types.knowledge_bases import folder_create_params +from ...types.knowledge_bases import folder_create_params, folder_delete_params from ...types.knowledge_bases.folder_delete_response import FolderDeleteResponse -from ...types.knowledge_bases import folder_delete_params __all__ = ["FoldersResource", "AsyncFoldersResource"] class FoldersResource(SyncAPIResource): - @cached_property def with_raw_response(self) -> FoldersResourceWithRawResponse: return FoldersResourceWithRawResponse(self) @@ -50,7 +48,7 @@ def create( ) -> FolderCreateResponse: """ Create an empty folder at the requested knowledge base path. - + Args: knowledge_base_id: Unique knowledge base ID. path: Folder path to create. @@ -59,27 +57,35 @@ def create( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: FolderCreateResponse: Successful Response - + Example: ```python folder = client.knowledge_bases.folders.create( - knowledge_base_id="knowledgeBaseId", - path="", + knowledge_base_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + path="x", ) ``` """ if knowledge_base_id is None or (isinstance(knowledge_base_id, str) and not knowledge_base_id): raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") return self._post( - path_template("/v1/knowledge-bases/{knowledge_base_id}/folders", **{"knowledge_base_id": knowledge_base_id}), + path_template( + "/v1/knowledge-bases/{knowledge_base_id}/folders", **{"knowledge_base_id": knowledge_base_id} + ), body=maybe_transform( - {"path": path}, - folder_create_params.FolderCreateParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"organization_id": organization_id}, folder_create_params.FolderCreateParams)), + {"path": path}, + folder_create_params.FolderCreateParams, + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=maybe_transform({"organization_id": organization_id}, folder_create_params.FolderCreateParams), + ), cast_to=FolderCreateResponse, ) @@ -99,7 +105,7 @@ def delete( ) -> FolderDeleteResponse: """ Delete a folder. With recursive=false, non-empty folders return 409 and no contents are deleted. - + Args: knowledge_base_id: Unique knowledge base ID. path: Folder path to delete. @@ -109,15 +115,15 @@ def delete( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: FolderDeleteResponse: Successful Response - + Example: ```python folder = client.knowledge_bases.folders.delete( - knowledge_base_id="knowledgeBaseId", - path="", + knowledge_base_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + path="x", recursive=False, ) ``` @@ -125,21 +131,28 @@ def delete( if knowledge_base_id is None or (isinstance(knowledge_base_id, str) and not knowledge_base_id): raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") return self._delete( - path_template("/v1/knowledge-bases/{knowledge_base_id}/folders", **{"knowledge_base_id": knowledge_base_id}), + path_template( + "/v1/knowledge-bases/{knowledge_base_id}/folders", **{"knowledge_base_id": knowledge_base_id} + ), body=maybe_transform( - { - "path": path, - "recursive": recursive, - }, - folder_delete_params.FolderDeleteParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"organization_id": organization_id}, folder_delete_params.FolderDeleteParams)), + { + "path": path, + "recursive": recursive, + }, + folder_delete_params.FolderDeleteParams, + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=maybe_transform({"organization_id": organization_id}, folder_delete_params.FolderDeleteParams), + ), cast_to=FolderDeleteResponse, ) class AsyncFoldersResource(AsyncAPIResource): - @cached_property def with_raw_response(self) -> AsyncFoldersResourceWithRawResponse: return AsyncFoldersResourceWithRawResponse(self) @@ -163,7 +176,7 @@ async def create( ) -> FolderCreateResponse: """ Create an empty folder at the requested knowledge base path. - + Args: knowledge_base_id: Unique knowledge base ID. path: Folder path to create. @@ -172,27 +185,37 @@ async def create( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: FolderCreateResponse: Successful Response - + Example: ```python folder = await client.knowledge_bases.folders.create( - knowledge_base_id="knowledgeBaseId", - path="", + knowledge_base_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + path="x", ) ``` """ if knowledge_base_id is None or (isinstance(knowledge_base_id, str) and not knowledge_base_id): raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") return await self._post( - path_template("/v1/knowledge-bases/{knowledge_base_id}/folders", **{"knowledge_base_id": knowledge_base_id}), + path_template( + "/v1/knowledge-bases/{knowledge_base_id}/folders", **{"knowledge_base_id": knowledge_base_id} + ), body=await async_maybe_transform( - {"path": path}, - folder_create_params.FolderCreateParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"organization_id": organization_id}, folder_create_params.FolderCreateParams)), + {"path": path}, + folder_create_params.FolderCreateParams, + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=await async_maybe_transform( + {"organization_id": organization_id}, folder_create_params.FolderCreateParams + ), + ), cast_to=FolderCreateResponse, ) @@ -212,7 +235,7 @@ async def delete( ) -> FolderDeleteResponse: """ Delete a folder. With recursive=false, non-empty folders return 409 and no contents are deleted. - + Args: knowledge_base_id: Unique knowledge base ID. path: Folder path to delete. @@ -222,15 +245,15 @@ async def delete( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: FolderDeleteResponse: Successful Response - + Example: ```python folder = await client.knowledge_bases.folders.delete( - knowledge_base_id="knowledgeBaseId", - path="", + knowledge_base_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + path="x", recursive=False, ) ``` @@ -238,15 +261,25 @@ async def delete( if knowledge_base_id is None or (isinstance(knowledge_base_id, str) and not knowledge_base_id): raise ValueError(f"Expected a non-empty value for `knowledge_base_id` but received {knowledge_base_id!r}") return await self._delete( - path_template("/v1/knowledge-bases/{knowledge_base_id}/folders", **{"knowledge_base_id": knowledge_base_id}), + path_template( + "/v1/knowledge-bases/{knowledge_base_id}/folders", **{"knowledge_base_id": knowledge_base_id} + ), body=await async_maybe_transform( - { - "path": path, - "recursive": recursive, - }, - folder_delete_params.FolderDeleteParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"organization_id": organization_id}, folder_delete_params.FolderDeleteParams)), + { + "path": path, + "recursive": recursive, + }, + folder_delete_params.FolderDeleteParams, + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=await async_maybe_transform( + {"organization_id": organization_id}, folder_delete_params.FolderDeleteParams + ), + ), cast_to=FolderDeleteResponse, ) diff --git a/src/resources/knowledge_bases/knowledge_bases.py b/src/profound/resources/knowledge_bases/knowledge_bases.py similarity index 83% rename from src/resources/knowledge_bases/knowledge_bases.py rename to src/profound/resources/knowledge_bases/knowledge_bases.py index 79eba3c0..74412a05 100644 --- a/src/resources/knowledge_bases/knowledge_bases.py +++ b/src/profound/resources/knowledge_bases/knowledge_bases.py @@ -33,16 +33,14 @@ FoldersResourceWithStreamingResponse, AsyncFoldersResourceWithStreamingResponse, ) -from ...types.knowledge_base_list_response import KnowledgeBaseListResponse, KnowledgeBaseItem -from ...types import knowledge_base_list_params -from ...types.knowledge_base_search_response import KnowledgeBaseSearchResponse, KnowledgeBaseSearchResult, Metadata -from ...types import knowledge_base_search_params +from ...types.knowledge_base_list_response import KnowledgeBaseListResponse +from ...types import knowledge_base_list_params, knowledge_base_search_params +from ...types.knowledge_base_search_response import KnowledgeBaseSearchResponse __all__ = ["KnowledgeBasesResource", "AsyncKnowledgeBasesResource"] class KnowledgeBasesResource(SyncAPIResource): - @cached_property def documents(self) -> DocumentsResource: return DocumentsResource(self._client) @@ -72,17 +70,17 @@ def list( ) -> KnowledgeBaseListResponse: """ List knowledge bases accessible to the API key. - + Args: organization_id: Organization scope for API keys that can access multiple organizations. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: KnowledgeBaseListResponse: Successful Response - + Example: ```python knowledge_base = client.knowledge_bases.list() @@ -90,7 +88,15 @@ def list( """ return self._get( "/v1/knowledge-bases", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"organization_id": organization_id}, knowledge_base_list_params.KnowledgeBaseListParams)), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=maybe_transform( + {"organization_id": organization_id}, knowledge_base_list_params.KnowledgeBaseListParams + ), + ), cast_to=KnowledgeBaseListResponse, ) @@ -112,7 +118,7 @@ def search( ) -> KnowledgeBaseSearchResponse: """ Search a knowledge base and return matching snippets or pages. - + Args: knowledge_base_id: Unique knowledge base ID. query: Search query. @@ -124,15 +130,15 @@ def search( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: KnowledgeBaseSearchResponse: Successful Response - + Example: ```python knowledge_base = client.knowledge_bases.search( - knowledge_base_id="knowledgeBaseId", - query="", + knowledge_base_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + query="x", top_k=0, return_full_page=False, ) @@ -143,21 +149,28 @@ def search( return self._post( path_template("/v1/knowledge-bases/{knowledge_base_id}/search", **{"knowledge_base_id": knowledge_base_id}), body=maybe_transform( - { - "query": query, - "top_k": top_k, - "return_full_page": return_full_page, - "filters": filters, - }, - knowledge_base_search_params.KnowledgeBaseSearchParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"organization_id": organization_id}, knowledge_base_search_params.KnowledgeBaseSearchParams)), + { + "query": query, + "top_k": top_k, + "return_full_page": return_full_page, + "filters": filters, + }, + knowledge_base_search_params.KnowledgeBaseSearchParams, + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=maybe_transform( + {"organization_id": organization_id}, knowledge_base_search_params.KnowledgeBaseSearchParams + ), + ), cast_to=KnowledgeBaseSearchResponse, ) class AsyncKnowledgeBasesResource(AsyncAPIResource): - @cached_property def documents(self) -> AsyncDocumentsResource: return AsyncDocumentsResource(self._client) @@ -187,17 +200,17 @@ async def list( ) -> KnowledgeBaseListResponse: """ List knowledge bases accessible to the API key. - + Args: organization_id: Organization scope for API keys that can access multiple organizations. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: KnowledgeBaseListResponse: Successful Response - + Example: ```python knowledge_base = await client.knowledge_bases.list() @@ -205,7 +218,15 @@ async def list( """ return await self._get( "/v1/knowledge-bases", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"organization_id": organization_id}, knowledge_base_list_params.KnowledgeBaseListParams)), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=await async_maybe_transform( + {"organization_id": organization_id}, knowledge_base_list_params.KnowledgeBaseListParams + ), + ), cast_to=KnowledgeBaseListResponse, ) @@ -227,7 +248,7 @@ async def search( ) -> KnowledgeBaseSearchResponse: """ Search a knowledge base and return matching snippets or pages. - + Args: knowledge_base_id: Unique knowledge base ID. query: Search query. @@ -239,15 +260,15 @@ async def search( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: KnowledgeBaseSearchResponse: Successful Response - + Example: ```python knowledge_base = await client.knowledge_bases.search( - knowledge_base_id="knowledgeBaseId", - query="", + knowledge_base_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + query="x", top_k=0, return_full_page=False, ) @@ -258,15 +279,23 @@ async def search( return await self._post( path_template("/v1/knowledge-bases/{knowledge_base_id}/search", **{"knowledge_base_id": knowledge_base_id}), body=await async_maybe_transform( - { - "query": query, - "top_k": top_k, - "return_full_page": return_full_page, - "filters": filters, - }, - knowledge_base_search_params.KnowledgeBaseSearchParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"organization_id": organization_id}, knowledge_base_search_params.KnowledgeBaseSearchParams)), + { + "query": query, + "top_k": top_k, + "return_full_page": return_full_page, + "filters": filters, + }, + knowledge_base_search_params.KnowledgeBaseSearchParams, + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=await async_maybe_transform( + {"organization_id": organization_id}, knowledge_base_search_params.KnowledgeBaseSearchParams + ), + ), cast_to=KnowledgeBaseSearchResponse, ) diff --git a/src/resources/organizations/__init__.py b/src/profound/resources/organizations/__init__.py similarity index 100% rename from src/resources/organizations/__init__.py rename to src/profound/resources/organizations/__init__.py diff --git a/src/resources/organizations/categories.py b/src/profound/resources/organizations/categories.py similarity index 80% rename from src/resources/organizations/categories.py rename to src/profound/resources/organizations/categories.py index b883a445..de18d3d5 100644 --- a/src/resources/organizations/categories.py +++ b/src/profound/resources/organizations/categories.py @@ -4,8 +4,9 @@ import httpx -from typing import Iterable, Optional +from typing import Iterable, List, Optional from typing_extensions import Literal +from ..._types import SequenceNotStr from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given from ..._utils import path_template, maybe_transform, async_maybe_transform @@ -18,26 +19,27 @@ async_to_streamed_response_wrapper, ) from ..._base_client import make_request_options -from ...types.organizations.category_list_response import CategoryListResponse, CategoryWithOrganization -from ...types.organizations import category_list_params -from ...types.organizations.category_topics_response import CategoryTopicsResponse, Topic -from ...types.organizations.category_tags_response import CategoryTagsResponse, Tag -from ...types.organizations.category_prompts_response import CategoryPromptsResponse, PaginationInfo, Prompt -from ...types.organizations import category_prompts_params -from ...types.organizations.category_create_prompts_response import CategoryCreatePromptsResponse, PromptPreview -from ...types.organizations import category_create_prompts_params -from ...types.organizations.category_update_prompts_response import CategoryUpdatePromptsResponse, PromptUpdatePreview -from ...types.organizations import category_update_prompts_params +from ...types.organizations.category_list_response import CategoryListResponse +from ...types.organizations import ( + category_list_params, + category_prompts_params, + category_create_prompts_params, + category_update_prompts_params, + category_update_prompt_status_params, +) +from ...types.organizations.category_topics_response import CategoryTopicsResponse +from ...types.organizations.category_tags_response import CategoryTagsResponse +from ...types.organizations.category_prompts_response import CategoryPromptsResponse +from ...types.organizations.category_assets_response import CategoryAssetsResponse +from ...types.organizations.category_get_category_personas_response import CategoryGetCategoryPersonasResponse +from ...types.organizations.category_create_prompts_response import CategoryCreatePromptsResponse +from ...types.organizations.category_update_prompts_response import CategoryUpdatePromptsResponse from ...types.organizations.category_update_prompt_status_response import CategoryUpdatePromptStatusResponse -from ...types.organizations import category_update_prompt_status_params -from ...types.organizations.category_assets_response import CategoryAssetsResponse, CategoryAsset -from ...types.organizations.category_get_category_personas_response import CategoryGetCategoryPersonasResponse, CategoryPersona __all__ = ["CategoriesResource", "AsyncCategoriesResource"] class CategoriesResource(SyncAPIResource): - @cached_property def with_raw_response(self) -> CategoriesResourceWithRawResponse: return CategoriesResourceWithRawResponse(self) @@ -49,7 +51,7 @@ def with_streaming_response(self) -> CategoriesResourceWithStreamingResponse: def list( self, *, - organization_ids: Optional[Iterable[str]] | Omit = omit, + organization_ids: Optional[SequenceNotStr[str]] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -59,17 +61,17 @@ def list( ) -> CategoryListResponse: """ Get the organization categories, one row per (category, organization) pair. - + Args: organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: CategoryListResponse: Successful Response - + Example: ```python category = client.organizations.categories.list() @@ -77,7 +79,13 @@ def list( """ return self._get( "/v1/org/categories", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"organization_ids": organization_ids}, category_list_params.CategoryListParams)), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=maybe_transform({"organization_ids": organization_ids}, category_list_params.CategoryListParams), + ), cast_to=CategoryListResponse, ) @@ -94,21 +102,21 @@ def topics( ) -> CategoryTopicsResponse: """ Get the topics for a specific category. - + Args: category_id: Path parameter. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: CategoryTopicsResponse: Successful Response - + Example: ```python category = client.organizations.categories.topics( - category_id="categoryId", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", ) ``` """ @@ -116,7 +124,9 @@ def topics( raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") return self._get( path_template("/v1/org/categories/{category_id}/topics", **{"category_id": category_id}), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=CategoryTopicsResponse, ) @@ -133,21 +143,21 @@ def tags( ) -> CategoryTagsResponse: """ Get the tags for a specific category. - + Args: category_id: Path parameter. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: CategoryTagsResponse: Successful Response - + Example: ```python category = client.organizations.categories.tags( - category_id="categoryId", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", ) ``` """ @@ -155,7 +165,9 @@ def tags( raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") return self._get( path_template("/v1/org/categories/{category_id}/tags", **{"category_id": category_id}), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=CategoryTagsResponse, ) @@ -165,15 +177,16 @@ def prompts( *, limit: int | Omit = omit, cursor: Optional[str] | Omit = omit, + order_by: Literal["created_at", "prompt"] | Omit = omit, order_dir: Literal["asc", "desc"] | Omit = omit, - analysis_type: Iterable[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]] | Omit = omit, - prompt_type: Iterable[Literal["visibility", "sentiment"]] | Omit = omit, - status: Iterable[Literal["active", "disabled"]] | Omit = omit, - topic_id: Iterable[str] | Omit = omit, - tag_id: Iterable[str] | Omit = omit, - region_id: Iterable[str] | Omit = omit, - platform_id: Iterable[str] | Omit = omit, - persona_id: Iterable[str] | Omit = omit, + analysis_type: List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]] | Omit = omit, + prompt_type: List[Literal["visibility", "sentiment"]] | Omit = omit, + status: List[Literal["active", "disabled"]] | Omit = omit, + topic_id: SequenceNotStr[str] | Omit = omit, + tag_id: SequenceNotStr[str] | Omit = omit, + region_id: SequenceNotStr[str] | Omit = omit, + platform_id: SequenceNotStr[str] | Omit = omit, + persona_id: SequenceNotStr[str] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -183,12 +196,13 @@ def prompts( ) -> CategoryPromptsResponse: """ Retrieve prompts in a category with optional filtering by type, topic, tag, region, platform, or persona. Supports cursor-based pagination. - + Args: category_id: Path parameter. limit: Maximum number of prompts to return. cursor: Pagination cursor from a previous response. - order_dir: Sort direction by creation date. + order_by: Field used to order prompts. + order_dir: Sort direction for the selected order field. analysis_type: Filter by analysis type (visibility, sentiment, accuracy). prompt_type: Deprecated. Use analysis_type instead. status: Filter by prompt status. Defaults to `active` only. @@ -201,14 +215,14 @@ def prompts( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: CategoryPromptsResponse: Successful Response - + Example: ```python category = client.organizations.categories.prompts( - category_id="categoryId", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", limit=10000, status=["active"], ) @@ -218,120 +232,119 @@ def prompts( raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") return self._get( path_template("/v1/org/categories/{category_id}/prompts", **{"category_id": category_id}), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"limit": limit, "cursor": cursor, "order_dir": order_dir, "analysis_type": analysis_type, "prompt_type": prompt_type, "status": status, "topic_id": topic_id, "tag_id": tag_id, "region_id": region_id, "platform_id": platform_id, "persona_id": persona_id}, category_prompts_params.CategoryPromptsParams)), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=maybe_transform( + { + "limit": limit, + "cursor": cursor, + "order_by": order_by, + "order_dir": order_dir, + "analysis_type": analysis_type, + "prompt_type": prompt_type, + "status": status, + "topic_id": topic_id, + "tag_id": tag_id, + "region_id": region_id, + "platform_id": platform_id, + "persona_id": persona_id, + }, + category_prompts_params.CategoryPromptsParams, + ), + ), cast_to=CategoryPromptsResponse, ) - def create_prompts( + def assets( self, category_id: str, *, - prompts: Iterable[category_create_prompts_params.Prompt], - dry_run: bool | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryCreatePromptsResponse: + ) -> CategoryAssetsResponse: """ - Create one or more prompts in a category. Topics and tags are auto-created if referenced by name and not yet existing. Use dry_run to preview without persisting. - + Get Category Assets + Args: category_id: Path parameter. - prompts: List of prompts to create. - dry_run: When true, validate and preview changes without persisting them. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: - CategoryCreatePromptsResponse: Successful Response - + CategoryAssetsResponse: Successful Response + Example: ```python - category = client.organizations.categories.create_prompts( - category_id="categoryId", - prompts=[], - dry_run=False, + category = client.organizations.categories.assets( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", ) ``` """ if category_id is None or (isinstance(category_id, str) and not category_id): raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return self._post( - path_template("/v1/org/categories/{category_id}/prompts", **{"category_id": category_id}), - body=maybe_transform( - { - "prompts": prompts, - "dry_run": dry_run, - }, - category_create_prompts_params.CategoryCreatePromptsParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=CategoryCreatePromptsResponse, + return self._get( + path_template("/v1/org/categories/{category_id}/assets", **{"category_id": category_id}), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=CategoryAssetsResponse, ) - def update_prompts( + def get_category_personas( self, category_id: str, *, - prompts: Iterable[category_update_prompts_params.Prompt], - dry_run: bool | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryUpdatePromptsResponse: + ) -> CategoryGetCategoryPersonasResponse: """ - Update one or more existing prompts. Only provided fields are changed. Dimension fields (regions, platforms, personas, tags) replace the full set when provided. Use dry_run to preview without persisting. - + Get Category Personas + Args: category_id: Path parameter. - prompts: List of prompt updates. Each entry must include an `id` and at least one field to change. - dry_run: When true, validate and preview changes without persisting them. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: - CategoryUpdatePromptsResponse: Successful Response - + CategoryGetCategoryPersonasResponse: Successful Response + Example: ```python - category = client.organizations.categories.update_prompts( - category_id="categoryId", - prompts=[], - dry_run=False, + category = client.organizations.categories.get_category_personas( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", ) ``` """ if category_id is None or (isinstance(category_id, str) and not category_id): raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return self._patch( - path_template("/v1/org/categories/{category_id}/prompts", **{"category_id": category_id}), - body=maybe_transform( - { - "prompts": prompts, - "dry_run": dry_run, - }, - category_update_prompts_params.CategoryUpdatePromptsParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=CategoryUpdatePromptsResponse, + return self._get( + path_template("/v1/org/categories/{category_id}/personas", **{"category_id": category_id}), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=CategoryGetCategoryPersonasResponse, ) - def update_prompt_status( + def create_prompts( self, category_id: str, *, - prompt_ids: Iterable[str], - status: Literal["active", "disabled", "deleted"], + prompts: Iterable[category_create_prompts_params.Prompt], dry_run: bool | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -339,135 +352,167 @@ def update_prompt_status( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryUpdatePromptStatusResponse: + ) -> CategoryCreatePromptsResponse: """ - Bulk-update the status of one or more prompts. Prompts already in the target status are skipped. Use dry_run to preview without persisting. - - Status options: - - 'active': Prompts will run daily. - - 'disabled': Prompts will not run moving forward, but historical data is preserved. - - 'deleted': Prompts are deleted along with historical data - + Create one or more prompts in a category. Topics and tags are auto-created if referenced by name and not yet existing. Use dry_run to preview without persisting. + Args: category_id: Path parameter. - prompt_ids: IDs of the prompts to update. - status: Target status: 'active', 'disabled', or 'deleted'. + prompts: List of prompts to create. dry_run: When true, validate and preview changes without persisting them. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: - CategoryUpdatePromptStatusResponse: Successful Response - + CategoryCreatePromptsResponse: Successful Response + Example: ```python - category = client.organizations.categories.update_prompt_status( - category_id="categoryId", - prompt_ids=[], - status="active", + category = client.organizations.categories.create_prompts( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + prompts=[], dry_run=False, ) ``` """ if category_id is None or (isinstance(category_id, str) and not category_id): raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return self._patch( - path_template("/v1/org/categories/{category_id}/prompts/status", **{"category_id": category_id}), + return self._post( + path_template("/v1/org/categories/{category_id}/prompts", **{"category_id": category_id}), body=maybe_transform( - { - "prompt_ids": prompt_ids, - "status": status, - "dry_run": dry_run, - }, - category_update_prompt_status_params.CategoryUpdatePromptStatusParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=CategoryUpdatePromptStatusResponse, + { + "prompts": prompts, + "dry_run": dry_run, + }, + category_create_prompts_params.CategoryCreatePromptsParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=CategoryCreatePromptsResponse, ) - def assets( + def update_prompts( self, category_id: str, *, + prompts: Iterable[category_update_prompts_params.Prompt], + dry_run: bool | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryAssetsResponse: + ) -> CategoryUpdatePromptsResponse: """ - Get Category Assets - + Update one or more existing prompts. Only provided fields are changed. Dimension fields (regions, platforms, personas, tags) replace the full set when provided. Use dry_run to preview without persisting. + Args: category_id: Path parameter. + prompts: List of prompt updates. Each entry must include an `id` and at least one field to change. + dry_run: When true, validate and preview changes without persisting them. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: - CategoryAssetsResponse: Successful Response - + CategoryUpdatePromptsResponse: Successful Response + Example: ```python - category = client.organizations.categories.assets( - category_id="categoryId", + category = client.organizations.categories.update_prompts( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + prompts=[], + dry_run=False, ) ``` """ if category_id is None or (isinstance(category_id, str) and not category_id): raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return self._get( - path_template("/v1/org/categories/{category_id}/assets", **{"category_id": category_id}), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=CategoryAssetsResponse, + return self._patch( + path_template("/v1/org/categories/{category_id}/prompts", **{"category_id": category_id}), + body=maybe_transform( + { + "prompts": prompts, + "dry_run": dry_run, + }, + category_update_prompts_params.CategoryUpdatePromptsParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=CategoryUpdatePromptsResponse, ) - def get_category_personas( + def update_prompt_status( self, category_id: str, *, + prompt_ids: SequenceNotStr[str], + status: Literal["active", "disabled", "deleted"], + dry_run: bool | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryGetCategoryPersonasResponse: + ) -> CategoryUpdatePromptStatusResponse: """ - Get Category Personas - + Bulk-update the status of one or more prompts. Prompts already in the target status are skipped. Use dry_run to preview without persisting. + + Status options: + - 'active': Prompts will run daily. + - 'disabled': Prompts will not run moving forward, but historical data is preserved. + - 'deleted': Prompts are deleted along with historical data + Args: category_id: Path parameter. + prompt_ids: IDs of the prompts to update. + status: Target status: 'active', 'disabled', or 'deleted'. + dry_run: When true, validate and preview changes without persisting them. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: - CategoryGetCategoryPersonasResponse: Successful Response - + CategoryUpdatePromptStatusResponse: Successful Response + Example: ```python - category = client.organizations.categories.get_category_personas( - category_id="categoryId", + category = client.organizations.categories.update_prompt_status( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + prompt_ids=[], + status="active", + dry_run=False, ) ``` """ if category_id is None or (isinstance(category_id, str) and not category_id): raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return self._get( - path_template("/v1/org/categories/{category_id}/personas", **{"category_id": category_id}), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=CategoryGetCategoryPersonasResponse, + return self._patch( + path_template("/v1/org/categories/{category_id}/prompts/status", **{"category_id": category_id}), + body=maybe_transform( + { + "prompt_ids": prompt_ids, + "status": status, + "dry_run": dry_run, + }, + category_update_prompt_status_params.CategoryUpdatePromptStatusParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=CategoryUpdatePromptStatusResponse, ) class AsyncCategoriesResource(AsyncAPIResource): - @cached_property def with_raw_response(self) -> AsyncCategoriesResourceWithRawResponse: return AsyncCategoriesResourceWithRawResponse(self) @@ -479,7 +524,7 @@ def with_streaming_response(self) -> AsyncCategoriesResourceWithStreamingRespons async def list( self, *, - organization_ids: Optional[Iterable[str]] | Omit = omit, + organization_ids: Optional[SequenceNotStr[str]] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -489,17 +534,17 @@ async def list( ) -> CategoryListResponse: """ Get the organization categories, one row per (category, organization) pair. - + Args: organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: CategoryListResponse: Successful Response - + Example: ```python category = await client.organizations.categories.list() @@ -507,7 +552,15 @@ async def list( """ return await self._get( "/v1/org/categories", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"organization_ids": organization_ids}, category_list_params.CategoryListParams)), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=await async_maybe_transform( + {"organization_ids": organization_ids}, category_list_params.CategoryListParams + ), + ), cast_to=CategoryListResponse, ) @@ -524,21 +577,21 @@ async def topics( ) -> CategoryTopicsResponse: """ Get the topics for a specific category. - + Args: category_id: Path parameter. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: CategoryTopicsResponse: Successful Response - + Example: ```python category = await client.organizations.categories.topics( - category_id="categoryId", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", ) ``` """ @@ -546,7 +599,9 @@ async def topics( raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") return await self._get( path_template("/v1/org/categories/{category_id}/topics", **{"category_id": category_id}), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=CategoryTopicsResponse, ) @@ -563,21 +618,21 @@ async def tags( ) -> CategoryTagsResponse: """ Get the tags for a specific category. - + Args: category_id: Path parameter. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: CategoryTagsResponse: Successful Response - + Example: ```python category = await client.organizations.categories.tags( - category_id="categoryId", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", ) ``` """ @@ -585,7 +640,9 @@ async def tags( raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") return await self._get( path_template("/v1/org/categories/{category_id}/tags", **{"category_id": category_id}), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=CategoryTagsResponse, ) @@ -595,15 +652,16 @@ async def prompts( *, limit: int | Omit = omit, cursor: Optional[str] | Omit = omit, + order_by: Literal["created_at", "prompt"] | Omit = omit, order_dir: Literal["asc", "desc"] | Omit = omit, - analysis_type: Iterable[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]] | Omit = omit, - prompt_type: Iterable[Literal["visibility", "sentiment"]] | Omit = omit, - status: Iterable[Literal["active", "disabled"]] | Omit = omit, - topic_id: Iterable[str] | Omit = omit, - tag_id: Iterable[str] | Omit = omit, - region_id: Iterable[str] | Omit = omit, - platform_id: Iterable[str] | Omit = omit, - persona_id: Iterable[str] | Omit = omit, + analysis_type: List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]] | Omit = omit, + prompt_type: List[Literal["visibility", "sentiment"]] | Omit = omit, + status: List[Literal["active", "disabled"]] | Omit = omit, + topic_id: SequenceNotStr[str] | Omit = omit, + tag_id: SequenceNotStr[str] | Omit = omit, + region_id: SequenceNotStr[str] | Omit = omit, + platform_id: SequenceNotStr[str] | Omit = omit, + persona_id: SequenceNotStr[str] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -613,12 +671,13 @@ async def prompts( ) -> CategoryPromptsResponse: """ Retrieve prompts in a category with optional filtering by type, topic, tag, region, platform, or persona. Supports cursor-based pagination. - + Args: category_id: Path parameter. limit: Maximum number of prompts to return. cursor: Pagination cursor from a previous response. - order_dir: Sort direction by creation date. + order_by: Field used to order prompts. + order_dir: Sort direction for the selected order field. analysis_type: Filter by analysis type (visibility, sentiment, accuracy). prompt_type: Deprecated. Use analysis_type instead. status: Filter by prompt status. Defaults to `active` only. @@ -631,14 +690,14 @@ async def prompts( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: CategoryPromptsResponse: Successful Response - + Example: ```python category = await client.organizations.categories.prompts( - category_id="categoryId", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", limit=10000, status=["active"], ) @@ -648,120 +707,119 @@ async def prompts( raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") return await self._get( path_template("/v1/org/categories/{category_id}/prompts", **{"category_id": category_id}), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"limit": limit, "cursor": cursor, "order_dir": order_dir, "analysis_type": analysis_type, "prompt_type": prompt_type, "status": status, "topic_id": topic_id, "tag_id": tag_id, "region_id": region_id, "platform_id": platform_id, "persona_id": persona_id}, category_prompts_params.CategoryPromptsParams)), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=await async_maybe_transform( + { + "limit": limit, + "cursor": cursor, + "order_by": order_by, + "order_dir": order_dir, + "analysis_type": analysis_type, + "prompt_type": prompt_type, + "status": status, + "topic_id": topic_id, + "tag_id": tag_id, + "region_id": region_id, + "platform_id": platform_id, + "persona_id": persona_id, + }, + category_prompts_params.CategoryPromptsParams, + ), + ), cast_to=CategoryPromptsResponse, ) - async def create_prompts( + async def assets( self, category_id: str, *, - prompts: Iterable[category_create_prompts_params.Prompt], - dry_run: bool | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryCreatePromptsResponse: + ) -> CategoryAssetsResponse: """ - Create one or more prompts in a category. Topics and tags are auto-created if referenced by name and not yet existing. Use dry_run to preview without persisting. - + Get Category Assets + Args: category_id: Path parameter. - prompts: List of prompts to create. - dry_run: When true, validate and preview changes without persisting them. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: - CategoryCreatePromptsResponse: Successful Response - + CategoryAssetsResponse: Successful Response + Example: ```python - category = await client.organizations.categories.create_prompts( - category_id="categoryId", - prompts=[], - dry_run=False, + category = await client.organizations.categories.assets( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", ) ``` """ if category_id is None or (isinstance(category_id, str) and not category_id): raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return await self._post( - path_template("/v1/org/categories/{category_id}/prompts", **{"category_id": category_id}), - body=await async_maybe_transform( - { - "prompts": prompts, - "dry_run": dry_run, - }, - category_create_prompts_params.CategoryCreatePromptsParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=CategoryCreatePromptsResponse, + return await self._get( + path_template("/v1/org/categories/{category_id}/assets", **{"category_id": category_id}), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=CategoryAssetsResponse, ) - async def update_prompts( + async def get_category_personas( self, category_id: str, *, - prompts: Iterable[category_update_prompts_params.Prompt], - dry_run: bool | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryUpdatePromptsResponse: + ) -> CategoryGetCategoryPersonasResponse: """ - Update one or more existing prompts. Only provided fields are changed. Dimension fields (regions, platforms, personas, tags) replace the full set when provided. Use dry_run to preview without persisting. - + Get Category Personas + Args: category_id: Path parameter. - prompts: List of prompt updates. Each entry must include an `id` and at least one field to change. - dry_run: When true, validate and preview changes without persisting them. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: - CategoryUpdatePromptsResponse: Successful Response - + CategoryGetCategoryPersonasResponse: Successful Response + Example: ```python - category = await client.organizations.categories.update_prompts( - category_id="categoryId", - prompts=[], - dry_run=False, + category = await client.organizations.categories.get_category_personas( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", ) ``` """ if category_id is None or (isinstance(category_id, str) and not category_id): raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return await self._patch( - path_template("/v1/org/categories/{category_id}/prompts", **{"category_id": category_id}), - body=await async_maybe_transform( - { - "prompts": prompts, - "dry_run": dry_run, - }, - category_update_prompts_params.CategoryUpdatePromptsParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=CategoryUpdatePromptsResponse, + return await self._get( + path_template("/v1/org/categories/{category_id}/personas", **{"category_id": category_id}), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=CategoryGetCategoryPersonasResponse, ) - async def update_prompt_status( + async def create_prompts( self, category_id: str, *, - prompt_ids: Iterable[str], - status: Literal["active", "disabled", "deleted"], + prompts: Iterable[category_create_prompts_params.Prompt], dry_run: bool | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -769,130 +827,163 @@ async def update_prompt_status( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryUpdatePromptStatusResponse: + ) -> CategoryCreatePromptsResponse: """ - Bulk-update the status of one or more prompts. Prompts already in the target status are skipped. Use dry_run to preview without persisting. - - Status options: - - 'active': Prompts will run daily. - - 'disabled': Prompts will not run moving forward, but historical data is preserved. - - 'deleted': Prompts are deleted along with historical data - + Create one or more prompts in a category. Topics and tags are auto-created if referenced by name and not yet existing. Use dry_run to preview without persisting. + Args: category_id: Path parameter. - prompt_ids: IDs of the prompts to update. - status: Target status: 'active', 'disabled', or 'deleted'. + prompts: List of prompts to create. dry_run: When true, validate and preview changes without persisting them. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: - CategoryUpdatePromptStatusResponse: Successful Response - + CategoryCreatePromptsResponse: Successful Response + Example: ```python - category = await client.organizations.categories.update_prompt_status( - category_id="categoryId", - prompt_ids=[], - status="active", + category = await client.organizations.categories.create_prompts( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + prompts=[], dry_run=False, ) ``` """ if category_id is None or (isinstance(category_id, str) and not category_id): raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return await self._patch( - path_template("/v1/org/categories/{category_id}/prompts/status", **{"category_id": category_id}), + return await self._post( + path_template("/v1/org/categories/{category_id}/prompts", **{"category_id": category_id}), body=await async_maybe_transform( - { - "prompt_ids": prompt_ids, - "status": status, - "dry_run": dry_run, - }, - category_update_prompt_status_params.CategoryUpdatePromptStatusParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=CategoryUpdatePromptStatusResponse, + { + "prompts": prompts, + "dry_run": dry_run, + }, + category_create_prompts_params.CategoryCreatePromptsParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=CategoryCreatePromptsResponse, ) - async def assets( + async def update_prompts( self, category_id: str, *, + prompts: Iterable[category_update_prompts_params.Prompt], + dry_run: bool | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryAssetsResponse: + ) -> CategoryUpdatePromptsResponse: """ - Get Category Assets - + Update one or more existing prompts. Only provided fields are changed. Dimension fields (regions, platforms, personas, tags) replace the full set when provided. Use dry_run to preview without persisting. + Args: category_id: Path parameter. + prompts: List of prompt updates. Each entry must include an `id` and at least one field to change. + dry_run: When true, validate and preview changes without persisting them. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: - CategoryAssetsResponse: Successful Response - + CategoryUpdatePromptsResponse: Successful Response + Example: ```python - category = await client.organizations.categories.assets( - category_id="categoryId", + category = await client.organizations.categories.update_prompts( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + prompts=[], + dry_run=False, ) ``` """ if category_id is None or (isinstance(category_id, str) and not category_id): raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return await self._get( - path_template("/v1/org/categories/{category_id}/assets", **{"category_id": category_id}), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=CategoryAssetsResponse, + return await self._patch( + path_template("/v1/org/categories/{category_id}/prompts", **{"category_id": category_id}), + body=await async_maybe_transform( + { + "prompts": prompts, + "dry_run": dry_run, + }, + category_update_prompts_params.CategoryUpdatePromptsParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=CategoryUpdatePromptsResponse, ) - async def get_category_personas( + async def update_prompt_status( self, category_id: str, *, + prompt_ids: SequenceNotStr[str], + status: Literal["active", "disabled", "deleted"], + dry_run: bool | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CategoryGetCategoryPersonasResponse: + ) -> CategoryUpdatePromptStatusResponse: """ - Get Category Personas - + Bulk-update the status of one or more prompts. Prompts already in the target status are skipped. Use dry_run to preview without persisting. + + Status options: + - 'active': Prompts will run daily. + - 'disabled': Prompts will not run moving forward, but historical data is preserved. + - 'deleted': Prompts are deleted along with historical data + Args: category_id: Path parameter. + prompt_ids: IDs of the prompts to update. + status: Target status: 'active', 'disabled', or 'deleted'. + dry_run: When true, validate and preview changes without persisting them. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: - CategoryGetCategoryPersonasResponse: Successful Response - + CategoryUpdatePromptStatusResponse: Successful Response + Example: ```python - category = await client.organizations.categories.get_category_personas( - category_id="categoryId", + category = await client.organizations.categories.update_prompt_status( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + prompt_ids=[], + status="active", + dry_run=False, ) ``` """ if category_id is None or (isinstance(category_id, str) and not category_id): raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return await self._get( - path_template("/v1/org/categories/{category_id}/personas", **{"category_id": category_id}), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=CategoryGetCategoryPersonasResponse, + return await self._patch( + path_template("/v1/org/categories/{category_id}/prompts/status", **{"category_id": category_id}), + body=await async_maybe_transform( + { + "prompt_ids": prompt_ids, + "status": status, + "dry_run": dry_run, + }, + category_update_prompt_status_params.CategoryUpdatePromptStatusParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=CategoryUpdatePromptStatusResponse, ) @@ -912,6 +1003,12 @@ def __init__(self, categories: CategoriesResource) -> None: self.prompts = to_raw_response_wrapper( categories.prompts, ) + self.assets = to_raw_response_wrapper( + categories.assets, + ) + self.get_category_personas = to_raw_response_wrapper( + categories.get_category_personas, + ) self.create_prompts = to_raw_response_wrapper( categories.create_prompts, ) @@ -921,12 +1018,6 @@ def __init__(self, categories: CategoriesResource) -> None: self.update_prompt_status = to_raw_response_wrapper( categories.update_prompt_status, ) - self.assets = to_raw_response_wrapper( - categories.assets, - ) - self.get_category_personas = to_raw_response_wrapper( - categories.get_category_personas, - ) class AsyncCategoriesResourceWithRawResponse: @@ -945,6 +1036,12 @@ def __init__(self, categories: AsyncCategoriesResource) -> None: self.prompts = async_to_raw_response_wrapper( categories.prompts, ) + self.assets = async_to_raw_response_wrapper( + categories.assets, + ) + self.get_category_personas = async_to_raw_response_wrapper( + categories.get_category_personas, + ) self.create_prompts = async_to_raw_response_wrapper( categories.create_prompts, ) @@ -954,12 +1051,6 @@ def __init__(self, categories: AsyncCategoriesResource) -> None: self.update_prompt_status = async_to_raw_response_wrapper( categories.update_prompt_status, ) - self.assets = async_to_raw_response_wrapper( - categories.assets, - ) - self.get_category_personas = async_to_raw_response_wrapper( - categories.get_category_personas, - ) class CategoriesResourceWithStreamingResponse: @@ -978,6 +1069,12 @@ def __init__(self, categories: CategoriesResource) -> None: self.prompts = to_streamed_response_wrapper( categories.prompts, ) + self.assets = to_streamed_response_wrapper( + categories.assets, + ) + self.get_category_personas = to_streamed_response_wrapper( + categories.get_category_personas, + ) self.create_prompts = to_streamed_response_wrapper( categories.create_prompts, ) @@ -987,12 +1084,6 @@ def __init__(self, categories: CategoriesResource) -> None: self.update_prompt_status = to_streamed_response_wrapper( categories.update_prompt_status, ) - self.assets = to_streamed_response_wrapper( - categories.assets, - ) - self.get_category_personas = to_streamed_response_wrapper( - categories.get_category_personas, - ) class AsyncCategoriesResourceWithStreamingResponse: @@ -1011,6 +1102,12 @@ def __init__(self, categories: AsyncCategoriesResource) -> None: self.prompts = async_to_streamed_response_wrapper( categories.prompts, ) + self.assets = async_to_streamed_response_wrapper( + categories.assets, + ) + self.get_category_personas = async_to_streamed_response_wrapper( + categories.get_category_personas, + ) self.create_prompts = async_to_streamed_response_wrapper( categories.create_prompts, ) @@ -1020,9 +1117,3 @@ def __init__(self, categories: AsyncCategoriesResource) -> None: self.update_prompt_status = async_to_streamed_response_wrapper( categories.update_prompt_status, ) - self.assets = async_to_streamed_response_wrapper( - categories.assets, - ) - self.get_category_personas = async_to_streamed_response_wrapper( - categories.get_category_personas, - ) diff --git a/src/resources/organizations/organizations.py b/src/profound/resources/organizations/organizations.py similarity index 83% rename from src/resources/organizations/organizations.py rename to src/profound/resources/organizations/organizations.py index 9996bf8b..18bc3eab 100644 --- a/src/resources/organizations/organizations.py +++ b/src/profound/resources/organizations/organizations.py @@ -4,10 +4,11 @@ import httpx -from typing import Iterable, Optional +from typing import Optional +from ..._types import SequenceNotStr from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from ..._utils import path_template, maybe_transform, async_maybe_transform +from ..._utils import maybe_transform, async_maybe_transform from ..._compat import cached_property from ..._resource import SyncAPIResource, AsyncAPIResource from ..._response import ( @@ -25,22 +26,23 @@ CategoriesResourceWithStreamingResponse, AsyncCategoriesResourceWithStreamingResponse, ) -from ...types.organization_list_response import OrganizationListResponse from ...types.organization_regions_response import OrganizationRegionsResponse -from ...types import organization_regions_params +from ...types import ( + organization_regions_params, + organization_domains_params, + organization_list_assets_params, + organization_get_personas_params, +) from ...types.organization_models_response import OrganizationModelsResponse -from ...types.organization_domains_response import OrganizationDomainsResponse, DomainWithOrganization -from ...types import organization_domains_params -from ...types.organization_list_assets_response import OrganizationListAssetsResponse, CategoryAssetWithCategory -from ...types import organization_list_assets_params -from ...types.organization_get_personas_response import OrganizationGetPersonasResponse, OrganizationPersonasWithCategory -from ...types import organization_get_personas_params +from ...types.organization_domains_response import OrganizationDomainsResponse +from ...types.organization_list_assets_response import OrganizationListAssetsResponse +from ...types.organization_get_personas_response import OrganizationGetPersonasResponse +from ...types.organization_list_response import OrganizationListResponse __all__ = ["OrganizationsResource", "AsyncOrganizationsResource"] class OrganizationsResource(SyncAPIResource): - @cached_property def categories(self) -> CategoriesResource: return CategoriesResource(self._client) @@ -53,43 +55,10 @@ def with_raw_response(self) -> OrganizationsResourceWithRawResponse: def with_streaming_response(self) -> OrganizationsResourceWithStreamingResponse: return OrganizationsResourceWithStreamingResponse(self) - def list( - self, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> OrganizationListResponse: - """ - Return every organization the caller's API key grants access to. Use this to discover organization IDs before calling endpoints that accept an `organization_id` filter. - - Args: - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - OrganizationListResponse: Successful Response - - Example: - ```python - organization = client.organizations.list() - ``` - """ - return self._get( - "/v1/org", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=OrganizationListResponse, - ) - def regions( self, *, - organization_ids: Optional[Iterable[str]] | Omit = omit, + organization_ids: Optional[SequenceNotStr[str]] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -99,17 +68,17 @@ def regions( ) -> OrganizationRegionsResponse: """ Get the organization regions. - + Args: organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: OrganizationRegionsResponse: Successful Response - + Example: ```python organization = client.organizations.regions() @@ -117,7 +86,15 @@ def regions( """ return self._get( "/v1/org/regions", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"organization_ids": organization_ids}, organization_regions_params.OrganizationRegionsParams)), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=maybe_transform( + {"organization_ids": organization_ids}, organization_regions_params.OrganizationRegionsParams + ), + ), cast_to=OrganizationRegionsResponse, ) @@ -133,16 +110,16 @@ def models( ) -> OrganizationModelsResponse: """ Get the organization models. - + Args: extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: OrganizationModelsResponse: Successful Response - + Example: ```python organization = client.organizations.models() @@ -150,14 +127,16 @@ def models( """ return self._get( "/v1/org/models", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=OrganizationModelsResponse, ) def domains( self, *, - organization_ids: Optional[Iterable[str]] | Omit = omit, + organization_ids: Optional[SequenceNotStr[str]] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -167,17 +146,17 @@ def domains( ) -> OrganizationDomainsResponse: """ Get the organization domains. - + Args: organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: OrganizationDomainsResponse: Successful Response - + Example: ```python organization = client.organizations.domains() @@ -185,14 +164,22 @@ def domains( """ return self._get( "/v1/org/domains", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"organization_ids": organization_ids}, organization_domains_params.OrganizationDomainsParams)), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=maybe_transform( + {"organization_ids": organization_ids}, organization_domains_params.OrganizationDomainsParams + ), + ), cast_to=OrganizationDomainsResponse, ) def list_assets( self, *, - organization_ids: Optional[Iterable[str]] | Omit = omit, + organization_ids: Optional[SequenceNotStr[str]] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -202,20 +189,20 @@ def list_assets( ) -> OrganizationListAssetsResponse: """ Get the organization assets, one row per (asset, organization) pair. - + An asset's category can belong to multiple organizations; one asset row is emitted per owning org so no association is silently dropped. - + Args: organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: OrganizationListAssetsResponse: Successful Response - + Example: ```python organization = client.organizations.list_assets() @@ -223,14 +210,22 @@ def list_assets( """ return self._get( "/v1/org/assets", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"organization_ids": organization_ids}, organization_list_assets_params.OrganizationListAssetsParams)), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=maybe_transform( + {"organization_ids": organization_ids}, organization_list_assets_params.OrganizationListAssetsParams + ), + ), cast_to=OrganizationListAssetsResponse, ) def get_personas( self, *, - organization_ids: Optional[Iterable[str]] | Omit = omit, + organization_ids: Optional[SequenceNotStr[str]] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -240,21 +235,21 @@ def get_personas( ) -> OrganizationGetPersonasResponse: """ Get the organization personas, one row per (persona, organization) pair. - + Same (item, org) fan-out as ``get_assets``: a persona's category can be owned by multiple orgs, and each owning org gets its own row so no association is silently dropped. - + Args: organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: OrganizationGetPersonasResponse: Successful Response - + Example: ```python organization = client.organizations.get_personas() @@ -262,26 +257,20 @@ def get_personas( """ return self._get( "/v1/org/personas", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"organization_ids": organization_ids}, organization_get_personas_params.OrganizationGetPersonasParams)), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=maybe_transform( + {"organization_ids": organization_ids}, + organization_get_personas_params.OrganizationGetPersonasParams, + ), + ), cast_to=OrganizationGetPersonasResponse, ) - -class AsyncOrganizationsResource(AsyncAPIResource): - - @cached_property - def categories(self) -> AsyncCategoriesResource: - return AsyncCategoriesResource(self._client) - - @cached_property - def with_raw_response(self) -> AsyncOrganizationsResourceWithRawResponse: - return AsyncOrganizationsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncOrganizationsResourceWithStreamingResponse: - return AsyncOrganizationsResourceWithStreamingResponse(self) - - async def list( + def list( self, *, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -293,31 +282,47 @@ async def list( ) -> OrganizationListResponse: """ Return every organization the caller's API key grants access to. Use this to discover organization IDs before calling endpoints that accept an `organization_id` filter. - + Args: extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: OrganizationListResponse: Successful Response - + Example: ```python - organization = await client.organizations.list() + organization = client.organizations.list() ``` """ - return await self._get( + return self._get( "/v1/org", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=OrganizationListResponse, ) + +class AsyncOrganizationsResource(AsyncAPIResource): + @cached_property + def categories(self) -> AsyncCategoriesResource: + return AsyncCategoriesResource(self._client) + + @cached_property + def with_raw_response(self) -> AsyncOrganizationsResourceWithRawResponse: + return AsyncOrganizationsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncOrganizationsResourceWithStreamingResponse: + return AsyncOrganizationsResourceWithStreamingResponse(self) + async def regions( self, *, - organization_ids: Optional[Iterable[str]] | Omit = omit, + organization_ids: Optional[SequenceNotStr[str]] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -327,17 +332,17 @@ async def regions( ) -> OrganizationRegionsResponse: """ Get the organization regions. - + Args: organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: OrganizationRegionsResponse: Successful Response - + Example: ```python organization = await client.organizations.regions() @@ -345,7 +350,15 @@ async def regions( """ return await self._get( "/v1/org/regions", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"organization_ids": organization_ids}, organization_regions_params.OrganizationRegionsParams)), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=await async_maybe_transform( + {"organization_ids": organization_ids}, organization_regions_params.OrganizationRegionsParams + ), + ), cast_to=OrganizationRegionsResponse, ) @@ -361,16 +374,16 @@ async def models( ) -> OrganizationModelsResponse: """ Get the organization models. - + Args: extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: OrganizationModelsResponse: Successful Response - + Example: ```python organization = await client.organizations.models() @@ -378,14 +391,16 @@ async def models( """ return await self._get( "/v1/org/models", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=OrganizationModelsResponse, ) async def domains( self, *, - organization_ids: Optional[Iterable[str]] | Omit = omit, + organization_ids: Optional[SequenceNotStr[str]] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -395,17 +410,17 @@ async def domains( ) -> OrganizationDomainsResponse: """ Get the organization domains. - + Args: organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: OrganizationDomainsResponse: Successful Response - + Example: ```python organization = await client.organizations.domains() @@ -413,14 +428,22 @@ async def domains( """ return await self._get( "/v1/org/domains", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"organization_ids": organization_ids}, organization_domains_params.OrganizationDomainsParams)), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=await async_maybe_transform( + {"organization_ids": organization_ids}, organization_domains_params.OrganizationDomainsParams + ), + ), cast_to=OrganizationDomainsResponse, ) async def list_assets( self, *, - organization_ids: Optional[Iterable[str]] | Omit = omit, + organization_ids: Optional[SequenceNotStr[str]] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -430,20 +453,20 @@ async def list_assets( ) -> OrganizationListAssetsResponse: """ Get the organization assets, one row per (asset, organization) pair. - + An asset's category can belong to multiple organizations; one asset row is emitted per owning org so no association is silently dropped. - + Args: organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: OrganizationListAssetsResponse: Successful Response - + Example: ```python organization = await client.organizations.list_assets() @@ -451,14 +474,22 @@ async def list_assets( """ return await self._get( "/v1/org/assets", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"organization_ids": organization_ids}, organization_list_assets_params.OrganizationListAssetsParams)), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=await async_maybe_transform( + {"organization_ids": organization_ids}, organization_list_assets_params.OrganizationListAssetsParams + ), + ), cast_to=OrganizationListAssetsResponse, ) async def get_personas( self, *, - organization_ids: Optional[Iterable[str]] | Omit = omit, + organization_ids: Optional[SequenceNotStr[str]] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -468,21 +499,21 @@ async def get_personas( ) -> OrganizationGetPersonasResponse: """ Get the organization personas, one row per (persona, organization) pair. - + Same (item, org) fan-out as ``get_assets``: a persona's category can be owned by multiple orgs, and each owning org gets its own row so no association is silently dropped. - + Args: organization_ids: Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to. extra_headers: Send extra headers with the request. extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: OrganizationGetPersonasResponse: Successful Response - + Example: ```python organization = await client.organizations.get_personas() @@ -490,18 +521,59 @@ async def get_personas( """ return await self._get( "/v1/org/personas", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"organization_ids": organization_ids}, organization_get_personas_params.OrganizationGetPersonasParams)), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=await async_maybe_transform( + {"organization_ids": organization_ids}, + organization_get_personas_params.OrganizationGetPersonasParams, + ), + ), cast_to=OrganizationGetPersonasResponse, ) + async def list( + self, + *, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> OrganizationListResponse: + """ + Return every organization the caller's API key grants access to. Use this to discover organization IDs before calling endpoints that accept an `organization_id` filter. + + Args: + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + OrganizationListResponse: Successful Response + + Example: + ```python + organization = await client.organizations.list() + ``` + """ + return await self._get( + "/v1/org", + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=OrganizationListResponse, + ) + class OrganizationsResourceWithRawResponse: def __init__(self, organizations: OrganizationsResource) -> None: self._organizations = organizations - self.list = to_raw_response_wrapper( - organizations.list, - ) self.regions = to_raw_response_wrapper( organizations.regions, ) @@ -517,6 +589,9 @@ def __init__(self, organizations: OrganizationsResource) -> None: self.get_personas = to_raw_response_wrapper( organizations.get_personas, ) + self.list = to_raw_response_wrapper( + organizations.list, + ) @cached_property def categories(self) -> CategoriesResourceWithRawResponse: @@ -527,9 +602,6 @@ class AsyncOrganizationsResourceWithRawResponse: def __init__(self, organizations: AsyncOrganizationsResource) -> None: self._organizations = organizations - self.list = async_to_raw_response_wrapper( - organizations.list, - ) self.regions = async_to_raw_response_wrapper( organizations.regions, ) @@ -545,6 +617,9 @@ def __init__(self, organizations: AsyncOrganizationsResource) -> None: self.get_personas = async_to_raw_response_wrapper( organizations.get_personas, ) + self.list = async_to_raw_response_wrapper( + organizations.list, + ) @cached_property def categories(self) -> AsyncCategoriesResourceWithRawResponse: @@ -555,9 +630,6 @@ class OrganizationsResourceWithStreamingResponse: def __init__(self, organizations: OrganizationsResource) -> None: self._organizations = organizations - self.list = to_streamed_response_wrapper( - organizations.list, - ) self.regions = to_streamed_response_wrapper( organizations.regions, ) @@ -573,6 +645,9 @@ def __init__(self, organizations: OrganizationsResource) -> None: self.get_personas = to_streamed_response_wrapper( organizations.get_personas, ) + self.list = to_streamed_response_wrapper( + organizations.list, + ) @cached_property def categories(self) -> CategoriesResourceWithStreamingResponse: @@ -583,9 +658,6 @@ class AsyncOrganizationsResourceWithStreamingResponse: def __init__(self, organizations: AsyncOrganizationsResource) -> None: self._organizations = organizations - self.list = async_to_streamed_response_wrapper( - organizations.list, - ) self.regions = async_to_streamed_response_wrapper( organizations.regions, ) @@ -601,6 +673,9 @@ def __init__(self, organizations: AsyncOrganizationsResource) -> None: self.get_personas = async_to_streamed_response_wrapper( organizations.get_personas, ) + self.list = async_to_streamed_response_wrapper( + organizations.list, + ) @cached_property def categories(self) -> AsyncCategoriesResourceWithStreamingResponse: diff --git a/src/profound/resources/prompts.py b/src/profound/resources/prompts.py new file mode 100644 index 00000000..7928a69b --- /dev/null +++ b/src/profound/resources/prompts.py @@ -0,0 +1,205 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +import httpx + +from typing import Iterable, Union +from datetime import datetime + +from .._types import Body, Omit, Query, Headers, NotGiven, omit, not_given +from .._utils import maybe_transform, async_maybe_transform +from .._compat import cached_property +from .._resource import SyncAPIResource, AsyncAPIResource +from .._response import ( + to_raw_response_wrapper, + to_streamed_response_wrapper, + async_to_raw_response_wrapper, + async_to_streamed_response_wrapper, +) +from .._base_client import make_request_options +from ..types.prompt_answers_response import PromptAnswersResponse +from ..types.shared_params.pagination import Pagination +from ..types import prompt_answers_params + +__all__ = ["PromptsResource", "AsyncPromptsResource"] + + +class PromptsResource(SyncAPIResource): + @cached_property + def with_raw_response(self) -> PromptsResourceWithRawResponse: + return PromptsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> PromptsResourceWithStreamingResponse: + return PromptsResourceWithStreamingResponse(self) + + def answers( + self, + *, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + pagination: Pagination | Omit = omit, + filters: Iterable[prompt_answers_params.Filter] | Omit = omit, + include: prompt_answers_params.Include | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> PromptAnswersResponse: + """ + Get Answers + + Args: + category_id: Body parameter. + start_date: Body parameter. + end_date: Body parameter. + pagination: Pagination parameters for the results. Default is 10,000 rows with no offset. + filters: List of filters to apply to the answers report. + include: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + PromptAnswersResponse: Successful Response + + Example: + ```python + prompt = client.prompts.answers( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", + ) + ``` + """ + return self._post( + "/v1/prompts/answers", + body=maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "pagination": pagination, + "filters": filters, + "include": include, + }, + prompt_answers_params.PromptAnswersParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=PromptAnswersResponse, + ) + + +class AsyncPromptsResource(AsyncAPIResource): + @cached_property + def with_raw_response(self) -> AsyncPromptsResourceWithRawResponse: + return AsyncPromptsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncPromptsResourceWithStreamingResponse: + return AsyncPromptsResourceWithStreamingResponse(self) + + async def answers( + self, + *, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + pagination: Pagination | Omit = omit, + filters: Iterable[prompt_answers_params.Filter] | Omit = omit, + include: prompt_answers_params.Include | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> PromptAnswersResponse: + """ + Get Answers + + Args: + category_id: Body parameter. + start_date: Body parameter. + end_date: Body parameter. + pagination: Pagination parameters for the results. Default is 10,000 rows with no offset. + filters: List of filters to apply to the answers report. + include: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + PromptAnswersResponse: Successful Response + + Example: + ```python + prompt = await client.prompts.answers( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", + ) + ``` + """ + return await self._post( + "/v1/prompts/answers", + body=await async_maybe_transform( + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "pagination": pagination, + "filters": filters, + "include": include, + }, + prompt_answers_params.PromptAnswersParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=PromptAnswersResponse, + ) + + +class PromptsResourceWithRawResponse: + def __init__(self, prompts: PromptsResource) -> None: + self._prompts = prompts + + self.answers = to_raw_response_wrapper( + prompts.answers, + ) + + +class AsyncPromptsResourceWithRawResponse: + def __init__(self, prompts: AsyncPromptsResource) -> None: + self._prompts = prompts + + self.answers = async_to_raw_response_wrapper( + prompts.answers, + ) + + +class PromptsResourceWithStreamingResponse: + def __init__(self, prompts: PromptsResource) -> None: + self._prompts = prompts + + self.answers = to_streamed_response_wrapper( + prompts.answers, + ) + + +class AsyncPromptsResourceWithStreamingResponse: + def __init__(self, prompts: AsyncPromptsResource) -> None: + self._prompts = prompts + + self.answers = async_to_streamed_response_wrapper( + prompts.answers, + ) diff --git a/src/profound/resources/reports/__init__.py b/src/profound/resources/reports/__init__.py new file mode 100644 index 00000000..c4c600eb --- /dev/null +++ b/src/profound/resources/reports/__init__.py @@ -0,0 +1,47 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from .reports import ( + ReportsResource, + AsyncReportsResource, + ReportsResourceWithRawResponse, + AsyncReportsResourceWithRawResponse, + ReportsResourceWithStreamingResponse, + AsyncReportsResourceWithStreamingResponse, +) +from .web_search_results import ( + WebSearchResultsResource, + AsyncWebSearchResultsResource, + WebSearchResultsResourceWithRawResponse, + AsyncWebSearchResultsResourceWithRawResponse, + WebSearchResultsResourceWithStreamingResponse, + AsyncWebSearchResultsResourceWithStreamingResponse, +) +from .shopping import ( + ShoppingResource, + AsyncShoppingResource, + ShoppingResourceWithRawResponse, + AsyncShoppingResourceWithRawResponse, + ShoppingResourceWithStreamingResponse, + AsyncShoppingResourceWithStreamingResponse, +) + +__all__ = [ + "ReportsResource", + "AsyncReportsResource", + "ReportsResourceWithRawResponse", + "AsyncReportsResourceWithRawResponse", + "ReportsResourceWithStreamingResponse", + "AsyncReportsResourceWithStreamingResponse", + "WebSearchResultsResource", + "AsyncWebSearchResultsResource", + "WebSearchResultsResourceWithRawResponse", + "AsyncWebSearchResultsResourceWithRawResponse", + "WebSearchResultsResourceWithStreamingResponse", + "AsyncWebSearchResultsResourceWithStreamingResponse", + "ShoppingResource", + "AsyncShoppingResource", + "ShoppingResourceWithRawResponse", + "AsyncShoppingResourceWithRawResponse", + "ShoppingResourceWithStreamingResponse", + "AsyncShoppingResourceWithStreamingResponse", +] diff --git a/src/profound/resources/reports/reports.py b/src/profound/resources/reports/reports.py new file mode 100644 index 00000000..e7d96de5 --- /dev/null +++ b/src/profound/resources/reports/reports.py @@ -0,0 +1,2310 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +import httpx + +from typing import Dict, Iterable, List, Optional, Union +from datetime import datetime +from typing_extensions import Literal +from ..._types import SequenceNotStr + +from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given +from ..._utils import maybe_transform, async_maybe_transform +from ..._compat import cached_property +from ..._resource import SyncAPIResource, AsyncAPIResource +from ..._response import ( + to_raw_response_wrapper, + to_streamed_response_wrapper, + async_to_raw_response_wrapper, + async_to_streamed_response_wrapper, +) +from ..._base_client import make_request_options +from ..._streaming import Stream, AsyncStream +from .web_search_results import ( + WebSearchResultsResource, + AsyncWebSearchResultsResource, + WebSearchResultsResourceWithRawResponse, + AsyncWebSearchResultsResourceWithRawResponse, + WebSearchResultsResourceWithStreamingResponse, + AsyncWebSearchResultsResourceWithStreamingResponse, +) +from .shopping import ( + ShoppingResource, + AsyncShoppingResource, + ShoppingResourceWithRawResponse, + AsyncShoppingResourceWithRawResponse, + ShoppingResourceWithStreamingResponse, + AsyncShoppingResourceWithStreamingResponse, +) +from ...types.report_citations_response import ReportCitationsResponse +from ...types.shared_params.pagination import Pagination +from ...types import ( + report_citations_params, + report_visibility_params, + report_sentiment_params, + report_get_referrals_report_params, + report_get_bots_report_params, + report_get_referrals_report_v2_params, + report_get_bots_report_v2_params, + report_query_fanouts_params, + report_stream_citations_params, + report_stream_visibility_params, + report_stream_sentiment_params, +) +from ...types.report_response import ReportResponse +from ...types.report_stream_citations_response import ReportStreamCitationsResponse +from ...types.report_stream_visibility_response import ReportStreamVisibilityResponse +from ...types.report_stream_sentiment_response import ReportStreamSentimentResponse + +__all__ = ["ReportsResource", "AsyncReportsResource"] + + +class ReportsResource(SyncAPIResource): + @cached_property + def web_search_results(self) -> WebSearchResultsResource: + return WebSearchResultsResource(self._client) + + @cached_property + def shopping(self) -> ShoppingResource: + return ShoppingResource(self._client) + + @cached_property + def with_raw_response(self) -> ReportsResourceWithRawResponse: + return ReportsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> ReportsResourceWithStreamingResponse: + return ReportsResourceWithStreamingResponse(self) + + def citations( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: List[ + Literal[ + "hostname", + "path", + "date", + "region", + "topic", + "topic_id", + "model", + "tag", + "prompt", + "prompt_id", + "url", + "root_domain", + "persona", + "citation_category", + ] + ] + | Omit = omit, + metrics: List[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[report_citations_params.Filter] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportCitationsResponse: + """ + Get citations for a given category. + + The ``mentioned`` filter supports ``is true`` and ``is false``. It uses the + latest page analysis available at or before ``end_date``; pages without an + analysis by then are excluded from both values. ``citation_share`` keeps all + otherwise eligible citations in its denominator when this filter is used. + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the citations report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportCitationsResponse: Successful Response + + Example: + ```python + report = client.reports.citations( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", + ) + ``` + """ + return self._post( + "/v1/reports/citations", + body=maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + report_citations_params.ReportCitationsParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ReportCitationsResponse, + ) + + def visibility( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: List[ + Literal[ + "date", + "region", + "topic", + "topic_id", + "model", + "asset_id", + "asset_name", + "prompt", + "prompt_id", + "tag", + "persona", + ] + ] + | Omit = omit, + metrics: List[ + Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"] + ], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[report_visibility_params.Filter] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Query visibility report. + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the visibility report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + report = client.reports.visibility( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", + ) + ``` + """ + return self._post( + "/v1/reports/visibility", + body=maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + report_visibility_params.ReportVisibilityParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ReportResponse, + ) + + def sentiment( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: List[ + Literal[ + "theme", + "date", + "region", + "topic", + "topic_id", + "model", + "asset_id", + "asset_name", + "tag", + "prompt", + "prompt_id", + "sentiment_type", + "persona", + ] + ] + | Omit = omit, + metrics: List[Literal["positive", "negative", "occurrences"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[report_sentiment_params.Filter] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Get citations for a given category. + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the sentiment report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + report = client.reports.sentiment( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", + ) + ``` + """ + return self._post( + "/v1/reports/sentiment", + body=maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + report_sentiment_params.ReportSentimentParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ReportResponse, + ) + + def get_referrals_report( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "year", "relative_week"] | Omit = omit, + dimensions: List[Literal["date", "host", "path", "referral_source"]] | Omit = omit, + metrics: List[Literal["visits", "last_visit"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + domain: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime] | Omit = omit, + organization_id: Optional[str] | Omit = omit, + metric_filters: Iterable[report_get_referrals_report_params.MetricFilter] | Omit = omit, + filters: Iterable[report_get_referrals_report_params.Filter] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Get referral traffic report from the daily aggregated materialized view. + + This endpoint queries pre-aggregated daily referral data, making it efficient + for large date ranges and high-traffic sites. + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + domain: Domain to query logs for. + start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp. + end_date: End date for logs. Accepts same formats as start_date. Defaults to now if omitted. + organization_id: Body parameter. + metric_filters: Numeric filters applied after report metrics are calculated. + filters: Filters for referrals report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + report = client.reports.get_referrals_report( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + domain="", + start_date="2024-01-01T00:00:00.000Z", + ) + ``` + """ + return self._post( + "/v1/reports/referrals", + body=maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "domain": domain, + "start_date": start_date, + "end_date": end_date, + "organization_id": organization_id, + "metric_filters": metric_filters, + "filters": filters, + }, + report_get_referrals_report_params.ReportGetReferralsReportParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ReportResponse, + ) + + def get_bots_report( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "year", "relative_week"] | Omit = omit, + dimensions: List[Literal["date", "host", "path", "bot_name", "bot_provider"]] | Omit = omit, + metrics: List[Literal["count", "citations", "indexing", "training", "last_visit"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + domain: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime] | Omit = omit, + organization_id: Optional[str] | Omit = omit, + metric_filters: Iterable[report_get_bots_report_params.MetricFilter] | Omit = omit, + filters: Iterable[report_get_bots_report_params.Filter] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Get bot traffic report from the daily aggregated materialized view. + + This endpoint queries pre-aggregated daily bot data, making it efficient + for large date ranges and high-traffic sites. + + Metrics: + - count: unique bot visits + - citations: unique citation events + - indexing: unique indexing events + - training: unique training events + - last_visit: most recent visit timestamp + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + domain: Domain to query logs for. + start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp. + end_date: End date for logs. Accepts same formats as start_date. Defaults to now if omitted. + organization_id: Body parameter. + metric_filters: Numeric filters applied after report metrics are calculated. + filters: Filters for bots report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + report = client.reports.get_bots_report( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + domain="", + start_date="2024-01-01T00:00:00.000Z", + ) + ``` + """ + return self._post( + "/v1/reports/bots", + body=maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "domain": domain, + "start_date": start_date, + "end_date": end_date, + "organization_id": organization_id, + "metric_filters": metric_filters, + "filters": filters, + }, + report_get_bots_report_params.ReportGetBotsReportParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ReportResponse, + ) + + def get_referrals_report_v2( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: List[Literal["date", "hour", "host", "path", "referral_source", "referral_type"]] | Omit = omit, + metrics: List[Literal["visits", "last_visit"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + domain: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime] | Omit = omit, + organization_id: Optional[str] | Omit = omit, + timezone: str | Omit = omit, + metric_filters: Iterable[report_get_referrals_report_v2_params.MetricFilter] | Omit = omit, + filters: Iterable[report_get_referrals_report_v2_params.Filter] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Get referral traffic report from the hourly aggregated materialized view (UTC-based). + + Supports date_interval="hour", calendar intervals through "year", "quarter", and "relative_week". + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + domain: Domain to query logs for. + start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp. + end_date: End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted. + organization_id: Body parameter. + timezone: IANA timezone name for date bucketing and filter boundaries. + metric_filters: Numeric filters applied after report metrics are calculated. + filters: Filters for referrals report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + report = client.reports.get_referrals_report_v2( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + domain="", + start_date="2024-01-01T00:00:00.000Z", + timezone="UTC", + ) + ``` + """ + return self._post( + "/v2/reports/referrals", + body=maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "domain": domain, + "start_date": start_date, + "end_date": end_date, + "organization_id": organization_id, + "timezone": timezone, + "metric_filters": metric_filters, + "filters": filters, + }, + report_get_referrals_report_v2_params.ReportGetReferralsReportV2Params, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ReportResponse, + ) + + def get_bots_report_v2( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: List[Literal["date", "hour", "host", "path", "bot_name", "bot_provider", "bot_type"]] | Omit = omit, + metrics: List[Literal["count", "citations", "indexing", "training", "last_visit", "agents"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + domain: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime] | Omit = omit, + organization_id: Optional[str] | Omit = omit, + timezone: str | Omit = omit, + metric_filters: Iterable[report_get_bots_report_v2_params.MetricFilter] | Omit = omit, + filters: Iterable[report_get_bots_report_v2_params.Filter] | Omit = omit, + domain_id: Optional[str] | Omit = omit, + tags: SequenceNotStr[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Get bot traffic report from the hourly aggregated materialized view (UTC-based). + + Supports date_interval="hour", calendar intervals through "year", "quarter", and "relative_week". + + Metrics: + - count: unique bot visits + - citations: unique citation events (ai_assistant bot type) + - indexing: unique indexing events (index bot type) + - training: unique training events (ai_training bot type) + - last_visit: most recent visit timestamp + + Dimensions: + - date, path, bot_name, bot_provider, bot_type + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + domain: Domain to query logs for. + start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp. + end_date: End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted. + organization_id: Body parameter. + timezone: IANA timezone name for date bucketing and filter boundaries. + metric_filters: Numeric filters applied after report metrics are calculated. + filters: Filters for bots report. + domain_id: Domain UUID used for tag lookups. + tags: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + report = client.reports.get_bots_report_v2( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + domain="", + start_date="2024-01-01T00:00:00.000Z", + timezone="UTC", + ) + ``` + """ + return self._post( + "/v2/reports/bots", + body=maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "domain": domain, + "start_date": start_date, + "end_date": end_date, + "organization_id": organization_id, + "timezone": timezone, + "metric_filters": metric_filters, + "filters": filters, + "domain_id": domain_id, + "tags": tags, + }, + report_get_bots_report_v2_params.ReportGetBotsReportV2Params, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ReportResponse, + ) + + def query_fanouts( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: List[Literal["prompt", "query", "model", "region", "date"]] | Omit = omit, + metrics: List[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[report_query_fanouts_params.Filter] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Query Fanouts + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Metrics to return for each row. + order_by: Custom ordering. Keys must be a requested metric or the ``date`` dimension. Values are ``asc`` or ``desc``. Defaults to first metric descending. + pagination: Pagination settings for the report results. + category_id: Body parameter. + start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + end_date: End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + filters: Filters to apply to the query fanout report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + report = client.reports.query_fanouts( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", + ) + ``` + """ + return self._post( + "/v1/reports/query-fanouts", + body=maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + report_query_fanouts_params.ReportQueryFanoutsParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ReportResponse, + ) + + def stream_citations( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: List[ + Literal[ + "hostname", + "path", + "date", + "region", + "topic", + "topic_id", + "model", + "tag", + "prompt", + "prompt_id", + "url", + "root_domain", + "persona", + "citation_category", + ] + ] + | Omit = omit, + metrics: List[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[report_stream_citations_params.Filter] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Stream[ReportStreamCitationsResponse]: + """ + Stream citations with the same filter semantics as the non-streaming route. + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead. + order_by: Custom ordering of the report results. + pagination: Body parameter. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the citations report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + Stream[ReportStreamCitationsResponse]: Server-sent events stream. Emits a `summary` event first, then one `row` event per streamed row. + + Example: + ```python + stream = client.reports.stream_citations( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", + ) + + for event in stream: + print(event) + ``` + """ + extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} + return self._post( + "/v1/reports/citations/stream", + body=maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + report_stream_citations_params.ReportStreamCitationsParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ReportStreamCitationsResponse, + stream=True, + stream_cls=Stream[ReportStreamCitationsResponse], + ) + + def stream_visibility( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: List[ + Literal[ + "date", + "region", + "topic", + "topic_id", + "model", + "asset_id", + "asset_name", + "prompt", + "prompt_id", + "tag", + "persona", + ] + ] + | Omit = omit, + metrics: List[ + Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"] + ], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[report_stream_visibility_params.Filter] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Stream[ReportStreamVisibilityResponse]: + """ + Stream Visibility + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Body parameter. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the visibility report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + Stream[ReportStreamVisibilityResponse]: Server-sent events stream. Emits a `summary` event first, then one `row` event per streamed row. + + Example: + ```python + stream = client.reports.stream_visibility( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", + ) + + for event in stream: + print(event) + ``` + """ + extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} + return self._post( + "/v1/reports/visibility/stream", + body=maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + report_stream_visibility_params.ReportStreamVisibilityParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ReportStreamVisibilityResponse, + stream=True, + stream_cls=Stream[ReportStreamVisibilityResponse], + ) + + def stream_sentiment( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: List[ + Literal[ + "theme", + "date", + "region", + "topic", + "topic_id", + "model", + "asset_id", + "asset_name", + "tag", + "prompt", + "prompt_id", + "sentiment_type", + "persona", + ] + ] + | Omit = omit, + metrics: List[Literal["positive", "negative", "occurrences"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[report_stream_sentiment_params.Filter] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Stream[ReportStreamSentimentResponse]: + """ + Stream Sentiment + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Body parameter. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the sentiment report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + Stream[ReportStreamSentimentResponse]: Server-sent events stream. Emits a `summary` event first, then one `row` event per streamed row. + + Example: + ```python + stream = client.reports.stream_sentiment( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", + ) + + for event in stream: + print(event) + ``` + """ + extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} + return self._post( + "/v1/reports/sentiment/stream", + body=maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + report_stream_sentiment_params.ReportStreamSentimentParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ReportStreamSentimentResponse, + stream=True, + stream_cls=Stream[ReportStreamSentimentResponse], + ) + + +class AsyncReportsResource(AsyncAPIResource): + @cached_property + def web_search_results(self) -> AsyncWebSearchResultsResource: + return AsyncWebSearchResultsResource(self._client) + + @cached_property + def shopping(self) -> AsyncShoppingResource: + return AsyncShoppingResource(self._client) + + @cached_property + def with_raw_response(self) -> AsyncReportsResourceWithRawResponse: + return AsyncReportsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncReportsResourceWithStreamingResponse: + return AsyncReportsResourceWithStreamingResponse(self) + + async def citations( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: List[ + Literal[ + "hostname", + "path", + "date", + "region", + "topic", + "topic_id", + "model", + "tag", + "prompt", + "prompt_id", + "url", + "root_domain", + "persona", + "citation_category", + ] + ] + | Omit = omit, + metrics: List[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[report_citations_params.Filter] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportCitationsResponse: + """ + Get citations for a given category. + + The ``mentioned`` filter supports ``is true`` and ``is false``. It uses the + latest page analysis available at or before ``end_date``; pages without an + analysis by then are excluded from both values. ``citation_share`` keeps all + otherwise eligible citations in its denominator when this filter is used. + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the citations report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportCitationsResponse: Successful Response + + Example: + ```python + report = await client.reports.citations( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", + ) + ``` + """ + return await self._post( + "/v1/reports/citations", + body=await async_maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + report_citations_params.ReportCitationsParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ReportCitationsResponse, + ) + + async def visibility( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: List[ + Literal[ + "date", + "region", + "topic", + "topic_id", + "model", + "asset_id", + "asset_name", + "prompt", + "prompt_id", + "tag", + "persona", + ] + ] + | Omit = omit, + metrics: List[ + Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"] + ], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[report_visibility_params.Filter] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Query visibility report. + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the visibility report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + report = await client.reports.visibility( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", + ) + ``` + """ + return await self._post( + "/v1/reports/visibility", + body=await async_maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + report_visibility_params.ReportVisibilityParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ReportResponse, + ) + + async def sentiment( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: List[ + Literal[ + "theme", + "date", + "region", + "topic", + "topic_id", + "model", + "asset_id", + "asset_name", + "tag", + "prompt", + "prompt_id", + "sentiment_type", + "persona", + ] + ] + | Omit = omit, + metrics: List[Literal["positive", "negative", "occurrences"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[report_sentiment_params.Filter] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Get citations for a given category. + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the sentiment report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + report = await client.reports.sentiment( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", + ) + ``` + """ + return await self._post( + "/v1/reports/sentiment", + body=await async_maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + report_sentiment_params.ReportSentimentParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ReportResponse, + ) + + async def get_referrals_report( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "year", "relative_week"] | Omit = omit, + dimensions: List[Literal["date", "host", "path", "referral_source"]] | Omit = omit, + metrics: List[Literal["visits", "last_visit"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + domain: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime] | Omit = omit, + organization_id: Optional[str] | Omit = omit, + metric_filters: Iterable[report_get_referrals_report_params.MetricFilter] | Omit = omit, + filters: Iterable[report_get_referrals_report_params.Filter] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Get referral traffic report from the daily aggregated materialized view. + + This endpoint queries pre-aggregated daily referral data, making it efficient + for large date ranges and high-traffic sites. + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + domain: Domain to query logs for. + start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp. + end_date: End date for logs. Accepts same formats as start_date. Defaults to now if omitted. + organization_id: Body parameter. + metric_filters: Numeric filters applied after report metrics are calculated. + filters: Filters for referrals report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + report = await client.reports.get_referrals_report( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + domain="", + start_date="2024-01-01T00:00:00.000Z", + ) + ``` + """ + return await self._post( + "/v1/reports/referrals", + body=await async_maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "domain": domain, + "start_date": start_date, + "end_date": end_date, + "organization_id": organization_id, + "metric_filters": metric_filters, + "filters": filters, + }, + report_get_referrals_report_params.ReportGetReferralsReportParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ReportResponse, + ) + + async def get_bots_report( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "year", "relative_week"] | Omit = omit, + dimensions: List[Literal["date", "host", "path", "bot_name", "bot_provider"]] | Omit = omit, + metrics: List[Literal["count", "citations", "indexing", "training", "last_visit"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + domain: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime] | Omit = omit, + organization_id: Optional[str] | Omit = omit, + metric_filters: Iterable[report_get_bots_report_params.MetricFilter] | Omit = omit, + filters: Iterable[report_get_bots_report_params.Filter] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Get bot traffic report from the daily aggregated materialized view. + + This endpoint queries pre-aggregated daily bot data, making it efficient + for large date ranges and high-traffic sites. + + Metrics: + - count: unique bot visits + - citations: unique citation events + - indexing: unique indexing events + - training: unique training events + - last_visit: most recent visit timestamp + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + domain: Domain to query logs for. + start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp. + end_date: End date for logs. Accepts same formats as start_date. Defaults to now if omitted. + organization_id: Body parameter. + metric_filters: Numeric filters applied after report metrics are calculated. + filters: Filters for bots report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + report = await client.reports.get_bots_report( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + domain="", + start_date="2024-01-01T00:00:00.000Z", + ) + ``` + """ + return await self._post( + "/v1/reports/bots", + body=await async_maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "domain": domain, + "start_date": start_date, + "end_date": end_date, + "organization_id": organization_id, + "metric_filters": metric_filters, + "filters": filters, + }, + report_get_bots_report_params.ReportGetBotsReportParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ReportResponse, + ) + + async def get_referrals_report_v2( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: List[Literal["date", "hour", "host", "path", "referral_source", "referral_type"]] | Omit = omit, + metrics: List[Literal["visits", "last_visit"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + domain: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime] | Omit = omit, + organization_id: Optional[str] | Omit = omit, + timezone: str | Omit = omit, + metric_filters: Iterable[report_get_referrals_report_v2_params.MetricFilter] | Omit = omit, + filters: Iterable[report_get_referrals_report_v2_params.Filter] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Get referral traffic report from the hourly aggregated materialized view (UTC-based). + + Supports date_interval="hour", calendar intervals through "year", "quarter", and "relative_week". + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + domain: Domain to query logs for. + start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp. + end_date: End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted. + organization_id: Body parameter. + timezone: IANA timezone name for date bucketing and filter boundaries. + metric_filters: Numeric filters applied after report metrics are calculated. + filters: Filters for referrals report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + report = await client.reports.get_referrals_report_v2( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + domain="", + start_date="2024-01-01T00:00:00.000Z", + timezone="UTC", + ) + ``` + """ + return await self._post( + "/v2/reports/referrals", + body=await async_maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "domain": domain, + "start_date": start_date, + "end_date": end_date, + "organization_id": organization_id, + "timezone": timezone, + "metric_filters": metric_filters, + "filters": filters, + }, + report_get_referrals_report_v2_params.ReportGetReferralsReportV2Params, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ReportResponse, + ) + + async def get_bots_report_v2( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: List[Literal["date", "hour", "host", "path", "bot_name", "bot_provider", "bot_type"]] | Omit = omit, + metrics: List[Literal["count", "citations", "indexing", "training", "last_visit", "agents"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + domain: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime] | Omit = omit, + organization_id: Optional[str] | Omit = omit, + timezone: str | Omit = omit, + metric_filters: Iterable[report_get_bots_report_v2_params.MetricFilter] | Omit = omit, + filters: Iterable[report_get_bots_report_v2_params.Filter] | Omit = omit, + domain_id: Optional[str] | Omit = omit, + tags: SequenceNotStr[str] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Get bot traffic report from the hourly aggregated materialized view (UTC-based). + + Supports date_interval="hour", calendar intervals through "year", "quarter", and "relative_week". + + Metrics: + - count: unique bot visits + - citations: unique citation events (ai_assistant bot type) + - indexing: unique indexing events (index bot type) + - training: unique training events (ai_training bot type) + - last_visit: most recent visit timestamp + + Dimensions: + - date, path, bot_name, bot_provider, bot_type + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Pagination settings for the report results. + domain: Domain to query logs for. + start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp. + end_date: End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted. + organization_id: Body parameter. + timezone: IANA timezone name for date bucketing and filter boundaries. + metric_filters: Numeric filters applied after report metrics are calculated. + filters: Filters for bots report. + domain_id: Domain UUID used for tag lookups. + tags: Body parameter. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + report = await client.reports.get_bots_report_v2( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + domain="", + start_date="2024-01-01T00:00:00.000Z", + timezone="UTC", + ) + ``` + """ + return await self._post( + "/v2/reports/bots", + body=await async_maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "domain": domain, + "start_date": start_date, + "end_date": end_date, + "organization_id": organization_id, + "timezone": timezone, + "metric_filters": metric_filters, + "filters": filters, + "domain_id": domain_id, + "tags": tags, + }, + report_get_bots_report_v2_params.ReportGetBotsReportV2Params, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ReportResponse, + ) + + async def query_fanouts( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: List[Literal["prompt", "query", "model", "region", "date"]] | Omit = omit, + metrics: List[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Pagination | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[report_query_fanouts_params.Filter] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> ReportResponse: + """ + Query Fanouts + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Metrics to return for each row. + order_by: Custom ordering. Keys must be a requested metric or the ``date`` dimension. Values are ``asc`` or ``desc``. Defaults to first metric descending. + pagination: Pagination settings for the report results. + category_id: Body parameter. + start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + end_date: End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. + filters: Filters to apply to the query fanout report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + ReportResponse: Successful Response + + Example: + ```python + report = await client.reports.query_fanouts( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", + ) + ``` + """ + return await self._post( + "/v1/reports/query-fanouts", + body=await async_maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + report_query_fanouts_params.ReportQueryFanoutsParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ReportResponse, + ) + + async def stream_citations( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: List[ + Literal[ + "hostname", + "path", + "date", + "region", + "topic", + "topic_id", + "model", + "tag", + "prompt", + "prompt_id", + "url", + "root_domain", + "persona", + "citation_category", + ] + ] + | Omit = omit, + metrics: List[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[report_stream_citations_params.Filter] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AsyncStream[ReportStreamCitationsResponse]: + """ + Stream citations with the same filter semantics as the non-streaming route. + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead. + order_by: Custom ordering of the report results. + pagination: Body parameter. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the citations report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AsyncStream[ReportStreamCitationsResponse]: Server-sent events stream. Emits a `summary` event first, then one `row` event per streamed row. + + Example: + ```python + stream = await client.reports.stream_citations( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", + ) + + async for event in stream: + print(event) + ``` + """ + extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} + return await self._post( + "/v1/reports/citations/stream", + body=await async_maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + report_stream_citations_params.ReportStreamCitationsParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ReportStreamCitationsResponse, + stream=True, + stream_cls=AsyncStream[ReportStreamCitationsResponse], + ) + + async def stream_visibility( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: List[ + Literal[ + "date", + "region", + "topic", + "topic_id", + "model", + "asset_id", + "asset_name", + "prompt", + "prompt_id", + "tag", + "persona", + ] + ] + | Omit = omit, + metrics: List[ + Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"] + ], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[report_stream_visibility_params.Filter] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AsyncStream[ReportStreamVisibilityResponse]: + """ + Stream Visibility + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Body parameter. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the visibility report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AsyncStream[ReportStreamVisibilityResponse]: Server-sent events stream. Emits a `summary` event first, then one `row` event per streamed row. + + Example: + ```python + stream = await client.reports.stream_visibility( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", + ) + + async for event in stream: + print(event) + ``` + """ + extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} + return await self._post( + "/v1/reports/visibility/stream", + body=await async_maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + report_stream_visibility_params.ReportStreamVisibilityParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ReportStreamVisibilityResponse, + stream=True, + stream_cls=AsyncStream[ReportStreamVisibilityResponse], + ) + + async def stream_sentiment( + self, + *, + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, + dimensions: List[ + Literal[ + "theme", + "date", + "region", + "topic", + "topic_id", + "model", + "asset_id", + "asset_name", + "tag", + "prompt", + "prompt_id", + "sentiment_type", + "persona", + ] + ] + | Omit = omit, + metrics: List[Literal["positive", "negative", "occurrences"]], + order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, + pagination: Optional[Pagination] | Omit = omit, + category_id: str, + start_date: Union[str, datetime], + end_date: Union[str, datetime], + filters: Iterable[report_stream_sentiment_params.Filter] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> AsyncStream[ReportStreamSentimentResponse]: + """ + Stream Sentiment + + Args: + date_interval: Date interval for the report. (only used with date dimension) + dimensions: Dimensions to group the report by. + metrics: Body parameter. + order_by: Custom ordering of the report results. + pagination: Body parameter. + category_id: Body parameter. + start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. + filters: List of filters to apply to the sentiment report. + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + AsyncStream[ReportStreamSentimentResponse]: Server-sent events stream. Emits a `summary` event first, then one `row` event per streamed row. + + Example: + ```python + stream = await client.reports.stream_sentiment( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", + ) + + async for event in stream: + print(event) + ``` + """ + extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} + return await self._post( + "/v1/reports/sentiment/stream", + body=await async_maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + report_stream_sentiment_params.ReportStreamSentimentParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ReportStreamSentimentResponse, + stream=True, + stream_cls=AsyncStream[ReportStreamSentimentResponse], + ) + + +class ReportsResourceWithRawResponse: + def __init__(self, reports: ReportsResource) -> None: + self._reports = reports + + self.citations = to_raw_response_wrapper( + reports.citations, + ) + self.visibility = to_raw_response_wrapper( + reports.visibility, + ) + self.sentiment = to_raw_response_wrapper( + reports.sentiment, + ) + self.get_referrals_report = to_raw_response_wrapper( + reports.get_referrals_report, + ) + self.get_bots_report = to_raw_response_wrapper( + reports.get_bots_report, + ) + self.get_referrals_report_v2 = to_raw_response_wrapper( + reports.get_referrals_report_v2, + ) + self.get_bots_report_v2 = to_raw_response_wrapper( + reports.get_bots_report_v2, + ) + self.query_fanouts = to_raw_response_wrapper( + reports.query_fanouts, + ) + self.stream_citations = to_raw_response_wrapper( + reports.stream_citations, + ) + self.stream_visibility = to_raw_response_wrapper( + reports.stream_visibility, + ) + self.stream_sentiment = to_raw_response_wrapper( + reports.stream_sentiment, + ) + + @cached_property + def web_search_results(self) -> WebSearchResultsResourceWithRawResponse: + return WebSearchResultsResourceWithRawResponse(self._reports.web_search_results) + + @cached_property + def shopping(self) -> ShoppingResourceWithRawResponse: + return ShoppingResourceWithRawResponse(self._reports.shopping) + + +class AsyncReportsResourceWithRawResponse: + def __init__(self, reports: AsyncReportsResource) -> None: + self._reports = reports + + self.citations = async_to_raw_response_wrapper( + reports.citations, + ) + self.visibility = async_to_raw_response_wrapper( + reports.visibility, + ) + self.sentiment = async_to_raw_response_wrapper( + reports.sentiment, + ) + self.get_referrals_report = async_to_raw_response_wrapper( + reports.get_referrals_report, + ) + self.get_bots_report = async_to_raw_response_wrapper( + reports.get_bots_report, + ) + self.get_referrals_report_v2 = async_to_raw_response_wrapper( + reports.get_referrals_report_v2, + ) + self.get_bots_report_v2 = async_to_raw_response_wrapper( + reports.get_bots_report_v2, + ) + self.query_fanouts = async_to_raw_response_wrapper( + reports.query_fanouts, + ) + self.stream_citations = async_to_raw_response_wrapper( + reports.stream_citations, + ) + self.stream_visibility = async_to_raw_response_wrapper( + reports.stream_visibility, + ) + self.stream_sentiment = async_to_raw_response_wrapper( + reports.stream_sentiment, + ) + + @cached_property + def web_search_results(self) -> AsyncWebSearchResultsResourceWithRawResponse: + return AsyncWebSearchResultsResourceWithRawResponse(self._reports.web_search_results) + + @cached_property + def shopping(self) -> AsyncShoppingResourceWithRawResponse: + return AsyncShoppingResourceWithRawResponse(self._reports.shopping) + + +class ReportsResourceWithStreamingResponse: + def __init__(self, reports: ReportsResource) -> None: + self._reports = reports + + self.citations = to_streamed_response_wrapper( + reports.citations, + ) + self.visibility = to_streamed_response_wrapper( + reports.visibility, + ) + self.sentiment = to_streamed_response_wrapper( + reports.sentiment, + ) + self.get_referrals_report = to_streamed_response_wrapper( + reports.get_referrals_report, + ) + self.get_bots_report = to_streamed_response_wrapper( + reports.get_bots_report, + ) + self.get_referrals_report_v2 = to_streamed_response_wrapper( + reports.get_referrals_report_v2, + ) + self.get_bots_report_v2 = to_streamed_response_wrapper( + reports.get_bots_report_v2, + ) + self.query_fanouts = to_streamed_response_wrapper( + reports.query_fanouts, + ) + self.stream_citations = to_streamed_response_wrapper( + reports.stream_citations, + ) + self.stream_visibility = to_streamed_response_wrapper( + reports.stream_visibility, + ) + self.stream_sentiment = to_streamed_response_wrapper( + reports.stream_sentiment, + ) + + @cached_property + def web_search_results(self) -> WebSearchResultsResourceWithStreamingResponse: + return WebSearchResultsResourceWithStreamingResponse(self._reports.web_search_results) + + @cached_property + def shopping(self) -> ShoppingResourceWithStreamingResponse: + return ShoppingResourceWithStreamingResponse(self._reports.shopping) + + +class AsyncReportsResourceWithStreamingResponse: + def __init__(self, reports: AsyncReportsResource) -> None: + self._reports = reports + + self.citations = async_to_streamed_response_wrapper( + reports.citations, + ) + self.visibility = async_to_streamed_response_wrapper( + reports.visibility, + ) + self.sentiment = async_to_streamed_response_wrapper( + reports.sentiment, + ) + self.get_referrals_report = async_to_streamed_response_wrapper( + reports.get_referrals_report, + ) + self.get_bots_report = async_to_streamed_response_wrapper( + reports.get_bots_report, + ) + self.get_referrals_report_v2 = async_to_streamed_response_wrapper( + reports.get_referrals_report_v2, + ) + self.get_bots_report_v2 = async_to_streamed_response_wrapper( + reports.get_bots_report_v2, + ) + self.query_fanouts = async_to_streamed_response_wrapper( + reports.query_fanouts, + ) + self.stream_citations = async_to_streamed_response_wrapper( + reports.stream_citations, + ) + self.stream_visibility = async_to_streamed_response_wrapper( + reports.stream_visibility, + ) + self.stream_sentiment = async_to_streamed_response_wrapper( + reports.stream_sentiment, + ) + + @cached_property + def web_search_results(self) -> AsyncWebSearchResultsResourceWithStreamingResponse: + return AsyncWebSearchResultsResourceWithStreamingResponse(self._reports.web_search_results) + + @cached_property + def shopping(self) -> AsyncShoppingResourceWithStreamingResponse: + return AsyncShoppingResourceWithStreamingResponse(self._reports.shopping) diff --git a/src/resources/reports/shopping.py b/src/profound/resources/reports/shopping.py similarity index 65% rename from src/resources/reports/shopping.py rename to src/profound/resources/reports/shopping.py index 5865a7e0..83837a9f 100644 --- a/src/resources/reports/shopping.py +++ b/src/profound/resources/reports/shopping.py @@ -4,13 +4,13 @@ import httpx -from typing import Dict, Iterable, Optional, Union +from typing import Dict, Iterable, List, Optional, Union from datetime import datetime from typing_extensions import Literal from ..._types import SequenceNotStr from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from ..._utils import path_template, maybe_transform, async_maybe_transform +from ..._utils import maybe_transform, async_maybe_transform from ..._compat import cached_property from ..._resource import SyncAPIResource, AsyncAPIResource from ..._response import ( @@ -20,122 +20,34 @@ async_to_streamed_response_wrapper, ) from ..._base_client import make_request_options -from ...types.reports.shopping_visibility_response import ShoppingVisibilityResponse, Data -from ...types.region_id_filter import RegionIdFilter -from ...types.model_id_filter import ModelIdFilter -from ...types.topic_id_filter import TopicIdFilter -from ...types.tag_id_filter import TagIdFilter -from ...types.prompt_id_filter import PromptIdFilter -from ...types.persona_id_filter import PersonaIdFilter -from ...types.reports.brand_name_filter import BrandNameFilter -from ...types.reports.merchant_name_filter import MerchantNameFilter -from ...types.reports.product_name_filter import ProductNameFilter -from ...types.pagination import Pagination -from ...types.reports import shopping_visibility_params -from ...types.reports.shopping_item_visibility_response import ShoppingItemVisibilityResponse, Data -from ...types.region_id_filter import RegionIdFilter -from ...types.model_id_filter import ModelIdFilter -from ...types.topic_id_filter import TopicIdFilter -from ...types.tag_id_filter import TagIdFilter -from ...types.prompt_id_filter import PromptIdFilter -from ...types.persona_id_filter import PersonaIdFilter -from ...types.reports.brand_name_filter import BrandNameFilter -from ...types.reports.merchant_name_filter import MerchantNameFilter -from ...types.reports.product_name_filter import ProductNameFilter -from ...types.pagination import Pagination -from ...types.reports import shopping_item_visibility_params -from ...types.reports.shopping_merchant_distribution_response import ShoppingMerchantDistributionResponse, Data -from ...types.region_id_filter import RegionIdFilter -from ...types.model_id_filter import ModelIdFilter -from ...types.topic_id_filter import TopicIdFilter -from ...types.tag_id_filter import TagIdFilter -from ...types.prompt_id_filter import PromptIdFilter -from ...types.persona_id_filter import PersonaIdFilter -from ...types.reports.brand_name_filter import BrandNameFilter -from ...types.reports.merchant_name_filter import MerchantNameFilter -from ...types.reports.product_name_filter import ProductNameFilter -from ...types.pagination import Pagination -from ...types.reports import shopping_merchant_distribution_params -from ...types.reports.shopping_merchant_visibility_by_brand_response import ShoppingMerchantVisibilityByBrandResponse, Data -from ...types.region_id_filter import RegionIdFilter -from ...types.model_id_filter import ModelIdFilter -from ...types.topic_id_filter import TopicIdFilter -from ...types.tag_id_filter import TagIdFilter -from ...types.prompt_id_filter import PromptIdFilter -from ...types.persona_id_filter import PersonaIdFilter -from ...types.reports.brand_name_filter import BrandNameFilter -from ...types.reports.merchant_name_filter import MerchantNameFilter -from ...types.reports.product_name_filter import ProductNameFilter -from ...types.pagination import Pagination -from ...types.reports import shopping_merchant_visibility_by_brand_params -from ...types.reports.shopping_merchant_by_items_response import ShoppingMerchantByItemsResponse, Data -from ...types.region_id_filter import RegionIdFilter -from ...types.model_id_filter import ModelIdFilter -from ...types.topic_id_filter import TopicIdFilter -from ...types.tag_id_filter import TagIdFilter -from ...types.prompt_id_filter import PromptIdFilter -from ...types.persona_id_filter import PersonaIdFilter -from ...types.reports.brand_name_filter import BrandNameFilter -from ...types.reports.merchant_name_filter import MerchantNameFilter -from ...types.reports.product_name_filter import ProductNameFilter -from ...types.pagination import Pagination -from ...types.reports import shopping_merchant_by_items_params -from ...types.reports.shopping_all_items_with_merchants_response import ShoppingAllItemsWithMerchantsResponse, Data -from ...types.region_id_filter import RegionIdFilter -from ...types.model_id_filter import ModelIdFilter -from ...types.topic_id_filter import TopicIdFilter -from ...types.tag_id_filter import TagIdFilter -from ...types.prompt_id_filter import PromptIdFilter -from ...types.persona_id_filter import PersonaIdFilter -from ...types.reports.brand_name_filter import BrandNameFilter -from ...types.reports.merchant_name_filter import MerchantNameFilter -from ...types.reports.product_name_filter import ProductNameFilter -from ...types.pagination import Pagination -from ...types.reports import shopping_all_items_with_merchants_params -from ...types.reports.shopping_trigger_rate_response import ShoppingTriggerRateResponse, Data -from ...types.region_id_filter import RegionIdFilter -from ...types.model_id_filter import ModelIdFilter -from ...types.topic_id_filter import TopicIdFilter -from ...types.tag_id_filter import TagIdFilter -from ...types.prompt_id_filter import PromptIdFilter -from ...types.persona_id_filter import PersonaIdFilter -from ...types.reports.brand_name_filter import BrandNameFilter -from ...types.reports.merchant_name_filter import MerchantNameFilter -from ...types.reports.product_name_filter import ProductNameFilter -from ...types.pagination import Pagination -from ...types.reports import shopping_trigger_rate_params -from ...types.reports.shopping_merchant_share_response import ShoppingMerchantShareResponse, Data -from ...types.region_id_filter import RegionIdFilter -from ...types.model_id_filter import ModelIdFilter -from ...types.topic_id_filter import TopicIdFilter -from ...types.tag_id_filter import TagIdFilter -from ...types.prompt_id_filter import PromptIdFilter -from ...types.persona_id_filter import PersonaIdFilter -from ...types.reports.brand_name_filter import BrandNameFilter -from ...types.reports.merchant_name_filter import MerchantNameFilter -from ...types.reports.product_name_filter import ProductNameFilter -from ...types.pagination import Pagination -from ...types.reports import shopping_merchant_share_params -from ...types.reports.shopping_product_merchant_urls_response import ShoppingProductMerchantUrlsResponse, Data -from ...types.reports import shopping_product_merchant_urls_params -from ...types.reports.shopping_executions_response import ShoppingExecutionsResponse, Data -from ...types.region_id_filter import RegionIdFilter -from ...types.model_id_filter import ModelIdFilter -from ...types.topic_id_filter import TopicIdFilter -from ...types.tag_id_filter import TagIdFilter -from ...types.prompt_id_filter import PromptIdFilter -from ...types.persona_id_filter import PersonaIdFilter -from ...types.reports.brand_name_filter import BrandNameFilter -from ...types.reports.merchant_name_filter import MerchantNameFilter -from ...types.reports.product_name_filter import ProductNameFilter -from ...types.pagination import Pagination -from ...types.reports import shopping_executions_params +from ...types.reports.shopping_visibility_response import ShoppingVisibilityResponse +from ...types.shared_params.pagination import Pagination +from ...types.reports import ( + shopping_visibility_params, + shopping_item_visibility_params, + shopping_merchant_distribution_params, + shopping_merchant_visibility_by_brand_params, + shopping_merchant_by_items_params, + shopping_all_items_with_merchants_params, + shopping_trigger_rate_params, + shopping_merchant_share_params, + shopping_product_merchant_urls_params, + shopping_executions_params, +) +from ...types.reports.shopping_item_visibility_response import ShoppingItemVisibilityResponse +from ...types.reports.shopping_merchant_distribution_response import ShoppingMerchantDistributionResponse +from ...types.reports.shopping_merchant_visibility_by_brand_response import ShoppingMerchantVisibilityByBrandResponse +from ...types.reports.shopping_merchant_by_items_response import ShoppingMerchantByItemsResponse +from ...types.reports.shopping_all_items_with_merchants_response import ShoppingAllItemsWithMerchantsResponse +from ...types.reports.shopping_trigger_rate_response import ShoppingTriggerRateResponse +from ...types.reports.shopping_merchant_share_response import ShoppingMerchantShareResponse +from ...types.reports.shopping_product_merchant_urls_response import ShoppingProductMerchantURLsResponse +from ...types.reports.shopping_executions_response import ShoppingExecutionsResponse __all__ = ["ShoppingResource", "AsyncShoppingResource"] class ShoppingResource(SyncAPIResource): - @cached_property def with_raw_response(self) -> ShoppingResourceWithRawResponse: return ShoppingResourceWithRawResponse(self) @@ -153,15 +65,32 @@ def visibility( comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - filters: Iterable[object] | Omit = omit, + filters: Iterable[shopping_visibility_params.Filter] | Omit = omit, order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, pagination: Optional[Pagination] | Omit = omit, include_count: bool | Omit = omit, tag_filter_type: Literal["any", "all"] | Omit = omit, include_no_tag: bool | Omit = omit, exclude_topic_ids: bool | Omit = omit, - dimensions: Iterable[Literal["period", "asset_name", "date", "model_id", "topic_id", "region_id", "prompt_id", "prompt"]] | Omit = omit, - metrics: Iterable[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "average_position_rank", "position1_percentage", "position2_percentage", "position3_percentage", "position_above3_percentage", "total_count"]] | Omit = omit, + dimensions: List[ + Literal["period", "asset_name", "date", "model_id", "topic_id", "region_id", "prompt_id", "prompt"] + ] + | Omit = omit, + metrics: List[ + Literal[ + "visibility_score", + "share_of_voice", + "average_position", + "visibility_rank", + "average_position_rank", + "position1_percentage", + "position2_percentage", + "position3_percentage", + "position_above3_percentage", + "total_count", + ] + ] + | Omit = omit, owned_asset_names: SequenceNotStr[str] | Omit = omit, search_asset: Optional[str] | Omit = omit, include_asset: Optional[str] | Omit = omit, @@ -178,7 +107,7 @@ def visibility( ) -> ShoppingVisibilityResponse: """ Shopping Visibility - + Args: category_id: Body parameter. start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. @@ -206,16 +135,16 @@ def visibility( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: ShoppingVisibilityResponse: Successful Response - + Example: ```python shopping = client.reports.shopping.visibility( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -230,33 +159,35 @@ def visibility( return self._post( "/v1/reports/shopping/visibility", body=maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "date_interval": date_interval, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - "include_count": include_count, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "exclude_topic_ids": exclude_topic_ids, - "dimensions": dimensions, - "metrics": metrics, - "owned_asset_names": owned_asset_names, - "search_asset": search_asset, - "include_asset": include_asset, - "include_asset_only": include_asset_only, - "include_assets_only": include_assets_only, - "rank_by": rank_by, - "include_position_frequency": include_position_frequency, - }, - shopping_visibility_params.ShoppingVisibilityParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "owned_asset_names": owned_asset_names, + "search_asset": search_asset, + "include_asset": include_asset, + "include_asset_only": include_asset_only, + "include_assets_only": include_assets_only, + "rank_by": rank_by, + "include_position_frequency": include_position_frequency, + }, + shopping_visibility_params.ShoppingVisibilityParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=ShoppingVisibilityResponse, ) @@ -269,15 +200,45 @@ def item_visibility( comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - filters: Iterable[object] | Omit = omit, + filters: Iterable[shopping_item_visibility_params.Filter] | Omit = omit, order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, pagination: Optional[Pagination] | Omit = omit, include_count: bool | Omit = omit, tag_filter_type: Literal["any", "all"] | Omit = omit, include_no_tag: bool | Omit = omit, exclude_topic_ids: bool | Omit = omit, - dimensions: Iterable[Literal["period", "product_name", "brand_name", "date", "topic_id", "prompt_id", "prompt", "product_url", "product_image_urls", "product_price"]] | Omit = omit, - metrics: Iterable[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "position1_percentage", "position2_percentage", "position3_percentage", "position_above3_percentage", "product_rating", "product_num_reviews", "total_count"]] | Omit = omit, + dimensions: List[ + Literal[ + "period", + "product_key", + "product_name", + "brand_name", + "date", + "topic_id", + "prompt_id", + "prompt", + "product_url", + "product_image_urls", + "product_price", + ] + ] + | Omit = omit, + metrics: List[ + Literal[ + "visibility_score", + "share_of_voice", + "average_position", + "visibility_rank", + "position1_percentage", + "position2_percentage", + "position3_percentage", + "position_above3_percentage", + "product_rating", + "product_num_reviews", + "total_count", + ] + ] + | Omit = omit, owned_asset_names: SequenceNotStr[str] | Omit = omit, include_items: SequenceNotStr[str] | Omit = omit, search_item: Optional[str] | Omit = omit, @@ -295,7 +256,7 @@ def item_visibility( ) -> ShoppingItemVisibilityResponse: """ Shopping Item Visibility - + Args: category_id: Body parameter. start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. @@ -324,16 +285,16 @@ def item_visibility( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: ShoppingItemVisibilityResponse: Successful Response - + Example: ```python shopping = client.reports.shopping.item_visibility( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -349,34 +310,36 @@ def item_visibility( return self._post( "/v1/reports/shopping/item-visibility", body=maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "date_interval": date_interval, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - "include_count": include_count, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "exclude_topic_ids": exclude_topic_ids, - "dimensions": dimensions, - "metrics": metrics, - "owned_asset_names": owned_asset_names, - "include_items": include_items, - "search_item": search_item, - "merchant_filter_type": merchant_filter_type, - "include_competitors": include_competitors, - "target_product": target_product, - "competitor_limit": competitor_limit, - "include_position_frequency": include_position_frequency, - }, - shopping_item_visibility_params.ShoppingItemVisibilityParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "owned_asset_names": owned_asset_names, + "include_items": include_items, + "search_item": search_item, + "merchant_filter_type": merchant_filter_type, + "include_competitors": include_competitors, + "target_product": target_product, + "competitor_limit": competitor_limit, + "include_position_frequency": include_position_frequency, + }, + shopping_item_visibility_params.ShoppingItemVisibilityParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=ShoppingItemVisibilityResponse, ) @@ -389,15 +352,18 @@ def merchant_distribution( comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - filters: Iterable[object] | Omit = omit, + filters: Iterable[shopping_merchant_distribution_params.Filter] | Omit = omit, order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, pagination: Optional[Pagination] | Omit = omit, include_count: bool | Omit = omit, tag_filter_type: Literal["any", "all"] | Omit = omit, include_no_tag: bool | Omit = omit, exclude_topic_ids: bool | Omit = omit, - dimensions: Iterable[Literal["period", "merchant_name", "date", "owned_asset_name"]] | Omit = omit, - metrics: Iterable[Literal["offer_count", "product_count", "average_rank", "share_of_offers", "visibility_rank", "total_count"]] | Omit = omit, + dimensions: List[Literal["period", "merchant_name", "date", "owned_asset_name"]] | Omit = omit, + metrics: List[ + Literal["offer_count", "product_count", "average_rank", "share_of_offers", "visibility_rank", "total_count"] + ] + | Omit = omit, owned_asset_names: SequenceNotStr[str] | Omit = omit, search_merchant: Optional[str] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -409,7 +375,7 @@ def merchant_distribution( ) -> ShoppingMerchantDistributionResponse: """ Shopping Merchant Distribution - + Args: category_id: Body parameter. start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. @@ -432,16 +398,16 @@ def merchant_distribution( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: ShoppingMerchantDistributionResponse: Successful Response - + Example: ```python shopping = client.reports.shopping.merchant_distribution( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -453,28 +419,30 @@ def merchant_distribution( return self._post( "/v1/reports/shopping/merchant-distribution", body=maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "date_interval": date_interval, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - "include_count": include_count, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "exclude_topic_ids": exclude_topic_ids, - "dimensions": dimensions, - "metrics": metrics, - "owned_asset_names": owned_asset_names, - "search_merchant": search_merchant, - }, - shopping_merchant_distribution_params.ShoppingMerchantDistributionParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "owned_asset_names": owned_asset_names, + "search_merchant": search_merchant, + }, + shopping_merchant_distribution_params.ShoppingMerchantDistributionParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=ShoppingMerchantDistributionResponse, ) @@ -487,15 +455,18 @@ def merchant_visibility_by_brand( comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - filters: Iterable[object] | Omit = omit, + filters: Iterable[shopping_merchant_visibility_by_brand_params.Filter] | Omit = omit, order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, pagination: Optional[Pagination] | Omit = omit, include_count: bool | Omit = omit, tag_filter_type: Literal["any", "all"] | Omit = omit, include_no_tag: bool | Omit = omit, exclude_topic_ids: bool | Omit = omit, - dimensions: Iterable[Literal["period", "merchant_name", "brand_name"]] | Omit = omit, - metrics: Iterable[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "total_count"]] | Omit = omit, + dimensions: List[Literal["period", "merchant_name", "brand_name"]] | Omit = omit, + metrics: List[ + Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "total_count"] + ] + | Omit = omit, owned_asset_names: SequenceNotStr[str] | Omit = omit, search_brand: Optional[str] | Omit = omit, include_brand: Optional[str] | Omit = omit, @@ -509,7 +480,7 @@ def merchant_visibility_by_brand( ) -> ShoppingMerchantVisibilityByBrandResponse: """ Shopping Merchant Visibility By Brand - + Args: category_id: Body parameter. start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. @@ -534,16 +505,16 @@ def merchant_visibility_by_brand( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: ShoppingMerchantVisibilityByBrandResponse: Successful Response - + Example: ```python shopping = client.reports.shopping.merchant_visibility_by_brand( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -556,30 +527,32 @@ def merchant_visibility_by_brand( return self._post( "/v1/reports/shopping/merchant-visibility-by-brand", body=maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "date_interval": date_interval, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - "include_count": include_count, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "exclude_topic_ids": exclude_topic_ids, - "dimensions": dimensions, - "metrics": metrics, - "owned_asset_names": owned_asset_names, - "search_brand": search_brand, - "include_brand": include_brand, - "include_brand_only": include_brand_only, - }, - shopping_merchant_visibility_by_brand_params.ShoppingMerchantVisibilityByBrandParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "owned_asset_names": owned_asset_names, + "search_brand": search_brand, + "include_brand": include_brand, + "include_brand_only": include_brand_only, + }, + shopping_merchant_visibility_by_brand_params.ShoppingMerchantVisibilityByBrandParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=ShoppingMerchantVisibilityByBrandResponse, ) @@ -592,15 +565,32 @@ def merchant_by_items( comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - filters: Iterable[object] | Omit = omit, + filters: Iterable[shopping_merchant_by_items_params.Filter] | Omit = omit, order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, pagination: Optional[Pagination] | Omit = omit, include_count: bool | Omit = omit, tag_filter_type: Literal["any", "all"] | Omit = omit, include_no_tag: bool | Omit = omit, exclude_topic_ids: bool | Omit = omit, - dimensions: Iterable[Literal["period", "merchant_name", "product_name", "brand_name", "product_image_urls", "product_price", "merchant_prices", "has_instant_checkout", "delivery_options", "merchant_url"]] | Omit = omit, - metrics: Iterable[Literal["merchant_visibility", "product_visibility", "product_rank", "avg_position", "total_count"]] | Omit = omit, + dimensions: List[ + Literal[ + "period", + "merchant_name", + "product_name", + "brand_name", + "product_image_urls", + "product_price", + "merchant_prices", + "has_instant_checkout", + "delivery_options", + "merchant_url", + ] + ] + | Omit = omit, + metrics: List[ + Literal["merchant_visibility", "product_visibility", "product_rank", "avg_position", "total_count"] + ] + | Omit = omit, product_name: Optional[str] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -611,7 +601,7 @@ def merchant_by_items( ) -> ShoppingMerchantByItemsResponse: """ Shopping Merchant By Items - + Args: category_id: Body parameter. start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. @@ -633,16 +623,16 @@ def merchant_by_items( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: ShoppingMerchantByItemsResponse: Successful Response - + Example: ```python shopping = client.reports.shopping.merchant_by_items( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -654,27 +644,29 @@ def merchant_by_items( return self._post( "/v1/reports/shopping/merchant-by-items", body=maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "date_interval": date_interval, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - "include_count": include_count, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "exclude_topic_ids": exclude_topic_ids, - "dimensions": dimensions, - "metrics": metrics, - "product_name": product_name, - }, - shopping_merchant_by_items_params.ShoppingMerchantByItemsParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "product_name": product_name, + }, + shopping_merchant_by_items_params.ShoppingMerchantByItemsParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=ShoppingMerchantByItemsResponse, ) @@ -687,15 +679,38 @@ def all_items_with_merchants( comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - filters: Iterable[object] | Omit = omit, + filters: Iterable[shopping_all_items_with_merchants_params.Filter] | Omit = omit, order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, pagination: Optional[Pagination] | Omit = omit, include_count: bool | Omit = omit, tag_filter_type: Literal["any", "all"] | Omit = omit, include_no_tag: bool | Omit = omit, exclude_topic_ids: bool | Omit = omit, - dimensions: Iterable[Literal["period", "product_name", "brand_name", "product_url", "product_image_urls", "product_price", "merchant_names", "merchant_prices"]] | Omit = omit, - metrics: Iterable[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "product_rating", "product_num_reviews", "total_count"]] | Omit = omit, + dimensions: List[ + Literal[ + "period", + "product_name", + "brand_name", + "product_url", + "product_image_urls", + "product_price", + "merchant_names", + "merchant_prices", + ] + ] + | Omit = omit, + metrics: List[ + Literal[ + "visibility_score", + "share_of_voice", + "average_position", + "visibility_rank", + "product_rating", + "product_num_reviews", + "total_count", + ] + ] + | Omit = omit, owned_asset_names: SequenceNotStr[str] | Omit = omit, include_items: SequenceNotStr[str] | Omit = omit, search_item: Optional[str] | Omit = omit, @@ -711,7 +726,7 @@ def all_items_with_merchants( ) -> ShoppingAllItemsWithMerchantsResponse: """ Shopping All Items With Merchants - + Args: category_id: Body parameter. start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. @@ -738,16 +753,16 @@ def all_items_with_merchants( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: ShoppingAllItemsWithMerchantsResponse: Successful Response - + Example: ```python shopping = client.reports.shopping.all_items_with_merchants( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -762,32 +777,34 @@ def all_items_with_merchants( return self._post( "/v1/reports/shopping/all-items-with-merchants", body=maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "date_interval": date_interval, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - "include_count": include_count, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "exclude_topic_ids": exclude_topic_ids, - "dimensions": dimensions, - "metrics": metrics, - "owned_asset_names": owned_asset_names, - "include_items": include_items, - "search_item": search_item, - "merchant_filter_type": merchant_filter_type, - "rank_by": rank_by, - "sort_order": sort_order, - }, - shopping_all_items_with_merchants_params.ShoppingAllItemsWithMerchantsParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "owned_asset_names": owned_asset_names, + "include_items": include_items, + "search_item": search_item, + "merchant_filter_type": merchant_filter_type, + "rank_by": rank_by, + "sort_order": sort_order, + }, + shopping_all_items_with_merchants_params.ShoppingAllItemsWithMerchantsParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=ShoppingAllItemsWithMerchantsResponse, ) @@ -800,15 +817,18 @@ def trigger_rate( comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - filters: Iterable[object] | Omit = omit, + filters: Iterable[shopping_trigger_rate_params.Filter] | Omit = omit, order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, pagination: Optional[Pagination] | Omit = omit, include_count: bool | Omit = omit, tag_filter_type: Literal["any", "all"] | Omit = omit, include_no_tag: bool | Omit = omit, exclude_topic_ids: bool | Omit = omit, - dimensions: Iterable[Literal["period", "date", "model_id", "topic_id", "region_id", "persona_id", "prompt_id", "prompt"]] | Omit = omit, - metrics: Iterable[Literal["total_runs", "shopping_triggered_runs", "trigger_rate_percentage"]] | Omit = omit, + dimensions: List[ + Literal["period", "date", "model_id", "topic_id", "region_id", "persona_id", "prompt_id", "prompt"] + ] + | Omit = omit, + metrics: List[Literal["total_runs", "shopping_triggered_runs", "trigger_rate_percentage"]] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -818,7 +838,7 @@ def trigger_rate( ) -> ShoppingTriggerRateResponse: """ Shopping Trigger Rate - + Args: category_id: Body parameter. start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. @@ -839,16 +859,16 @@ def trigger_rate( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: ShoppingTriggerRateResponse: Successful Response - + Example: ```python shopping = client.reports.shopping.trigger_rate( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -860,26 +880,28 @@ def trigger_rate( return self._post( "/v1/reports/shopping/trigger-rate", body=maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "date_interval": date_interval, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - "include_count": include_count, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "exclude_topic_ids": exclude_topic_ids, - "dimensions": dimensions, - "metrics": metrics, - }, - shopping_trigger_rate_params.ShoppingTriggerRateParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + }, + shopping_trigger_rate_params.ShoppingTriggerRateParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=ShoppingTriggerRateResponse, ) @@ -892,15 +914,15 @@ def merchant_share( comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - filters: Iterable[object] | Omit = omit, + filters: Iterable[shopping_merchant_share_params.Filter] | Omit = omit, order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, pagination: Optional[Pagination] | Omit = omit, include_count: bool | Omit = omit, tag_filter_type: Literal["any", "all"] | Omit = omit, include_no_tag: bool | Omit = omit, exclude_topic_ids: bool | Omit = omit, - dimensions: Iterable[Literal["period", "topic_id", "prompt_id"]] | Omit = omit, - metrics: Iterable[Literal["merchant_share"]] | Omit = omit, + dimensions: List[Literal["period", "topic_id", "prompt_id"]] | Omit = omit, + metrics: List[Literal["merchant_share"]] | Omit = omit, target_asset_names: SequenceNotStr[str] | Omit = omit, owned_asset_names: SequenceNotStr[str] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -912,7 +934,7 @@ def merchant_share( ) -> ShoppingMerchantShareResponse: """ Shopping Merchant Share - + Args: category_id: Body parameter. start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. @@ -935,16 +957,16 @@ def merchant_share( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: ShoppingMerchantShareResponse: Successful Response - + Example: ```python shopping = client.reports.shopping.merchant_share( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -956,28 +978,30 @@ def merchant_share( return self._post( "/v1/reports/shopping/merchant-share", body=maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "date_interval": date_interval, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - "include_count": include_count, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "exclude_topic_ids": exclude_topic_ids, - "dimensions": dimensions, - "metrics": metrics, - "target_asset_names": target_asset_names, - "owned_asset_names": owned_asset_names, - }, - shopping_merchant_share_params.ShoppingMerchantShareParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "target_asset_names": target_asset_names, + "owned_asset_names": owned_asset_names, + }, + shopping_merchant_share_params.ShoppingMerchantShareParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=ShoppingMerchantShareResponse, ) @@ -994,10 +1018,10 @@ def product_merchant_urls( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ShoppingProductMerchantUrlsResponse: + ) -> ShoppingProductMerchantURLsResponse: """ Shopping Product Merchant Urls - + Args: category_id: Body parameter. product_names: Body parameter. @@ -1007,33 +1031,35 @@ def product_merchant_urls( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: - ShoppingProductMerchantUrlsResponse: Successful Response - + ShoppingProductMerchantURLsResponse: Successful Response + Example: ```python shopping = client.reports.shopping.product_merchant_urls( - category_id="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", product_names=[], - start_date="", - end_date="", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", ) ``` """ return self._post( "/v1/reports/shopping/product-merchant-urls", body=maybe_transform( - { - "category_id": category_id, - "product_names": product_names, - "start_date": start_date, - "end_date": end_date, - }, - shopping_product_merchant_urls_params.ShoppingProductMerchantUrlsParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=ShoppingProductMerchantUrlsResponse, + { + "category_id": category_id, + "product_names": product_names, + "start_date": start_date, + "end_date": end_date, + }, + shopping_product_merchant_urls_params.ShoppingProductMerchantURLsParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ShoppingProductMerchantURLsResponse, ) def executions( @@ -1045,14 +1071,14 @@ def executions( comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - filters: Iterable[object] | Omit = omit, + filters: Iterable[shopping_executions_params.Filter] | Omit = omit, order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, pagination: Optional[Pagination] | Omit = omit, include_count: bool | Omit = omit, tag_filter_type: Literal["any", "all"] | Omit = omit, include_no_tag: bool | Omit = omit, exclude_topic_ids: bool | Omit = omit, - analysis_types: Iterable[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]] | Omit = omit, + analysis_types: List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]] | Omit = omit, analysis_filter_type: Literal["any", "all"] | Omit = omit, owned_asset_names: SequenceNotStr[str] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -1064,7 +1090,7 @@ def executions( ) -> ShoppingExecutionsResponse: """ Shopping Executions - + Args: category_id: Body parameter. start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. @@ -1086,16 +1112,16 @@ def executions( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: ShoppingExecutionsResponse: Successful Response - + Example: ```python shopping = client.reports.shopping.executions( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -1108,33 +1134,34 @@ def executions( return self._post( "/v1/reports/shopping/executions", body=maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "date_interval": date_interval, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - "include_count": include_count, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "exclude_topic_ids": exclude_topic_ids, - "analysis_types": analysis_types, - "analysis_filter_type": analysis_filter_type, - "owned_asset_names": owned_asset_names, - }, - shopping_executions_params.ShoppingExecutionsParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "analysis_types": analysis_types, + "analysis_filter_type": analysis_filter_type, + "owned_asset_names": owned_asset_names, + }, + shopping_executions_params.ShoppingExecutionsParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=ShoppingExecutionsResponse, ) class AsyncShoppingResource(AsyncAPIResource): - @cached_property def with_raw_response(self) -> AsyncShoppingResourceWithRawResponse: return AsyncShoppingResourceWithRawResponse(self) @@ -1152,15 +1179,32 @@ async def visibility( comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - filters: Iterable[object] | Omit = omit, + filters: Iterable[shopping_visibility_params.Filter] | Omit = omit, order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, pagination: Optional[Pagination] | Omit = omit, include_count: bool | Omit = omit, tag_filter_type: Literal["any", "all"] | Omit = omit, include_no_tag: bool | Omit = omit, exclude_topic_ids: bool | Omit = omit, - dimensions: Iterable[Literal["period", "asset_name", "date", "model_id", "topic_id", "region_id", "prompt_id", "prompt"]] | Omit = omit, - metrics: Iterable[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "average_position_rank", "position1_percentage", "position2_percentage", "position3_percentage", "position_above3_percentage", "total_count"]] | Omit = omit, + dimensions: List[ + Literal["period", "asset_name", "date", "model_id", "topic_id", "region_id", "prompt_id", "prompt"] + ] + | Omit = omit, + metrics: List[ + Literal[ + "visibility_score", + "share_of_voice", + "average_position", + "visibility_rank", + "average_position_rank", + "position1_percentage", + "position2_percentage", + "position3_percentage", + "position_above3_percentage", + "total_count", + ] + ] + | Omit = omit, owned_asset_names: SequenceNotStr[str] | Omit = omit, search_asset: Optional[str] | Omit = omit, include_asset: Optional[str] | Omit = omit, @@ -1177,7 +1221,7 @@ async def visibility( ) -> ShoppingVisibilityResponse: """ Shopping Visibility - + Args: category_id: Body parameter. start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. @@ -1205,16 +1249,16 @@ async def visibility( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: ShoppingVisibilityResponse: Successful Response - + Example: ```python shopping = await client.reports.shopping.visibility( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -1229,33 +1273,35 @@ async def visibility( return await self._post( "/v1/reports/shopping/visibility", body=await async_maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "date_interval": date_interval, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - "include_count": include_count, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "exclude_topic_ids": exclude_topic_ids, - "dimensions": dimensions, - "metrics": metrics, - "owned_asset_names": owned_asset_names, - "search_asset": search_asset, - "include_asset": include_asset, - "include_asset_only": include_asset_only, - "include_assets_only": include_assets_only, - "rank_by": rank_by, - "include_position_frequency": include_position_frequency, - }, - shopping_visibility_params.ShoppingVisibilityParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "owned_asset_names": owned_asset_names, + "search_asset": search_asset, + "include_asset": include_asset, + "include_asset_only": include_asset_only, + "include_assets_only": include_assets_only, + "rank_by": rank_by, + "include_position_frequency": include_position_frequency, + }, + shopping_visibility_params.ShoppingVisibilityParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=ShoppingVisibilityResponse, ) @@ -1268,15 +1314,45 @@ async def item_visibility( comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - filters: Iterable[object] | Omit = omit, + filters: Iterable[shopping_item_visibility_params.Filter] | Omit = omit, order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, pagination: Optional[Pagination] | Omit = omit, include_count: bool | Omit = omit, tag_filter_type: Literal["any", "all"] | Omit = omit, include_no_tag: bool | Omit = omit, exclude_topic_ids: bool | Omit = omit, - dimensions: Iterable[Literal["period", "product_name", "brand_name", "date", "topic_id", "prompt_id", "prompt", "product_url", "product_image_urls", "product_price"]] | Omit = omit, - metrics: Iterable[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "position1_percentage", "position2_percentage", "position3_percentage", "position_above3_percentage", "product_rating", "product_num_reviews", "total_count"]] | Omit = omit, + dimensions: List[ + Literal[ + "period", + "product_key", + "product_name", + "brand_name", + "date", + "topic_id", + "prompt_id", + "prompt", + "product_url", + "product_image_urls", + "product_price", + ] + ] + | Omit = omit, + metrics: List[ + Literal[ + "visibility_score", + "share_of_voice", + "average_position", + "visibility_rank", + "position1_percentage", + "position2_percentage", + "position3_percentage", + "position_above3_percentage", + "product_rating", + "product_num_reviews", + "total_count", + ] + ] + | Omit = omit, owned_asset_names: SequenceNotStr[str] | Omit = omit, include_items: SequenceNotStr[str] | Omit = omit, search_item: Optional[str] | Omit = omit, @@ -1294,7 +1370,7 @@ async def item_visibility( ) -> ShoppingItemVisibilityResponse: """ Shopping Item Visibility - + Args: category_id: Body parameter. start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. @@ -1323,16 +1399,16 @@ async def item_visibility( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: ShoppingItemVisibilityResponse: Successful Response - + Example: ```python shopping = await client.reports.shopping.item_visibility( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -1348,34 +1424,36 @@ async def item_visibility( return await self._post( "/v1/reports/shopping/item-visibility", body=await async_maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "date_interval": date_interval, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - "include_count": include_count, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "exclude_topic_ids": exclude_topic_ids, - "dimensions": dimensions, - "metrics": metrics, - "owned_asset_names": owned_asset_names, - "include_items": include_items, - "search_item": search_item, - "merchant_filter_type": merchant_filter_type, - "include_competitors": include_competitors, - "target_product": target_product, - "competitor_limit": competitor_limit, - "include_position_frequency": include_position_frequency, - }, - shopping_item_visibility_params.ShoppingItemVisibilityParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "owned_asset_names": owned_asset_names, + "include_items": include_items, + "search_item": search_item, + "merchant_filter_type": merchant_filter_type, + "include_competitors": include_competitors, + "target_product": target_product, + "competitor_limit": competitor_limit, + "include_position_frequency": include_position_frequency, + }, + shopping_item_visibility_params.ShoppingItemVisibilityParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=ShoppingItemVisibilityResponse, ) @@ -1388,15 +1466,18 @@ async def merchant_distribution( comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - filters: Iterable[object] | Omit = omit, + filters: Iterable[shopping_merchant_distribution_params.Filter] | Omit = omit, order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, pagination: Optional[Pagination] | Omit = omit, include_count: bool | Omit = omit, tag_filter_type: Literal["any", "all"] | Omit = omit, include_no_tag: bool | Omit = omit, exclude_topic_ids: bool | Omit = omit, - dimensions: Iterable[Literal["period", "merchant_name", "date", "owned_asset_name"]] | Omit = omit, - metrics: Iterable[Literal["offer_count", "product_count", "average_rank", "share_of_offers", "visibility_rank", "total_count"]] | Omit = omit, + dimensions: List[Literal["period", "merchant_name", "date", "owned_asset_name"]] | Omit = omit, + metrics: List[ + Literal["offer_count", "product_count", "average_rank", "share_of_offers", "visibility_rank", "total_count"] + ] + | Omit = omit, owned_asset_names: SequenceNotStr[str] | Omit = omit, search_merchant: Optional[str] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -1408,7 +1489,7 @@ async def merchant_distribution( ) -> ShoppingMerchantDistributionResponse: """ Shopping Merchant Distribution - + Args: category_id: Body parameter. start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. @@ -1431,16 +1512,16 @@ async def merchant_distribution( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: ShoppingMerchantDistributionResponse: Successful Response - + Example: ```python shopping = await client.reports.shopping.merchant_distribution( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -1452,28 +1533,30 @@ async def merchant_distribution( return await self._post( "/v1/reports/shopping/merchant-distribution", body=await async_maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "date_interval": date_interval, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - "include_count": include_count, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "exclude_topic_ids": exclude_topic_ids, - "dimensions": dimensions, - "metrics": metrics, - "owned_asset_names": owned_asset_names, - "search_merchant": search_merchant, - }, - shopping_merchant_distribution_params.ShoppingMerchantDistributionParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "owned_asset_names": owned_asset_names, + "search_merchant": search_merchant, + }, + shopping_merchant_distribution_params.ShoppingMerchantDistributionParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=ShoppingMerchantDistributionResponse, ) @@ -1486,15 +1569,18 @@ async def merchant_visibility_by_brand( comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - filters: Iterable[object] | Omit = omit, + filters: Iterable[shopping_merchant_visibility_by_brand_params.Filter] | Omit = omit, order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, pagination: Optional[Pagination] | Omit = omit, include_count: bool | Omit = omit, tag_filter_type: Literal["any", "all"] | Omit = omit, include_no_tag: bool | Omit = omit, exclude_topic_ids: bool | Omit = omit, - dimensions: Iterable[Literal["period", "merchant_name", "brand_name"]] | Omit = omit, - metrics: Iterable[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "total_count"]] | Omit = omit, + dimensions: List[Literal["period", "merchant_name", "brand_name"]] | Omit = omit, + metrics: List[ + Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "total_count"] + ] + | Omit = omit, owned_asset_names: SequenceNotStr[str] | Omit = omit, search_brand: Optional[str] | Omit = omit, include_brand: Optional[str] | Omit = omit, @@ -1508,7 +1594,7 @@ async def merchant_visibility_by_brand( ) -> ShoppingMerchantVisibilityByBrandResponse: """ Shopping Merchant Visibility By Brand - + Args: category_id: Body parameter. start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. @@ -1533,16 +1619,16 @@ async def merchant_visibility_by_brand( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: ShoppingMerchantVisibilityByBrandResponse: Successful Response - + Example: ```python shopping = await client.reports.shopping.merchant_visibility_by_brand( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -1555,30 +1641,32 @@ async def merchant_visibility_by_brand( return await self._post( "/v1/reports/shopping/merchant-visibility-by-brand", body=await async_maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "date_interval": date_interval, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - "include_count": include_count, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "exclude_topic_ids": exclude_topic_ids, - "dimensions": dimensions, - "metrics": metrics, - "owned_asset_names": owned_asset_names, - "search_brand": search_brand, - "include_brand": include_brand, - "include_brand_only": include_brand_only, - }, - shopping_merchant_visibility_by_brand_params.ShoppingMerchantVisibilityByBrandParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "owned_asset_names": owned_asset_names, + "search_brand": search_brand, + "include_brand": include_brand, + "include_brand_only": include_brand_only, + }, + shopping_merchant_visibility_by_brand_params.ShoppingMerchantVisibilityByBrandParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=ShoppingMerchantVisibilityByBrandResponse, ) @@ -1591,15 +1679,32 @@ async def merchant_by_items( comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - filters: Iterable[object] | Omit = omit, + filters: Iterable[shopping_merchant_by_items_params.Filter] | Omit = omit, order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, pagination: Optional[Pagination] | Omit = omit, include_count: bool | Omit = omit, tag_filter_type: Literal["any", "all"] | Omit = omit, include_no_tag: bool | Omit = omit, exclude_topic_ids: bool | Omit = omit, - dimensions: Iterable[Literal["period", "merchant_name", "product_name", "brand_name", "product_image_urls", "product_price", "merchant_prices", "has_instant_checkout", "delivery_options", "merchant_url"]] | Omit = omit, - metrics: Iterable[Literal["merchant_visibility", "product_visibility", "product_rank", "avg_position", "total_count"]] | Omit = omit, + dimensions: List[ + Literal[ + "period", + "merchant_name", + "product_name", + "brand_name", + "product_image_urls", + "product_price", + "merchant_prices", + "has_instant_checkout", + "delivery_options", + "merchant_url", + ] + ] + | Omit = omit, + metrics: List[ + Literal["merchant_visibility", "product_visibility", "product_rank", "avg_position", "total_count"] + ] + | Omit = omit, product_name: Optional[str] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -1610,7 +1715,7 @@ async def merchant_by_items( ) -> ShoppingMerchantByItemsResponse: """ Shopping Merchant By Items - + Args: category_id: Body parameter. start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. @@ -1632,16 +1737,16 @@ async def merchant_by_items( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: ShoppingMerchantByItemsResponse: Successful Response - + Example: ```python shopping = await client.reports.shopping.merchant_by_items( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -1653,27 +1758,29 @@ async def merchant_by_items( return await self._post( "/v1/reports/shopping/merchant-by-items", body=await async_maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "date_interval": date_interval, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - "include_count": include_count, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "exclude_topic_ids": exclude_topic_ids, - "dimensions": dimensions, - "metrics": metrics, - "product_name": product_name, - }, - shopping_merchant_by_items_params.ShoppingMerchantByItemsParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "product_name": product_name, + }, + shopping_merchant_by_items_params.ShoppingMerchantByItemsParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=ShoppingMerchantByItemsResponse, ) @@ -1686,15 +1793,38 @@ async def all_items_with_merchants( comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - filters: Iterable[object] | Omit = omit, + filters: Iterable[shopping_all_items_with_merchants_params.Filter] | Omit = omit, order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, pagination: Optional[Pagination] | Omit = omit, include_count: bool | Omit = omit, tag_filter_type: Literal["any", "all"] | Omit = omit, include_no_tag: bool | Omit = omit, exclude_topic_ids: bool | Omit = omit, - dimensions: Iterable[Literal["period", "product_name", "brand_name", "product_url", "product_image_urls", "product_price", "merchant_names", "merchant_prices"]] | Omit = omit, - metrics: Iterable[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "product_rating", "product_num_reviews", "total_count"]] | Omit = omit, + dimensions: List[ + Literal[ + "period", + "product_name", + "brand_name", + "product_url", + "product_image_urls", + "product_price", + "merchant_names", + "merchant_prices", + ] + ] + | Omit = omit, + metrics: List[ + Literal[ + "visibility_score", + "share_of_voice", + "average_position", + "visibility_rank", + "product_rating", + "product_num_reviews", + "total_count", + ] + ] + | Omit = omit, owned_asset_names: SequenceNotStr[str] | Omit = omit, include_items: SequenceNotStr[str] | Omit = omit, search_item: Optional[str] | Omit = omit, @@ -1710,7 +1840,7 @@ async def all_items_with_merchants( ) -> ShoppingAllItemsWithMerchantsResponse: """ Shopping All Items With Merchants - + Args: category_id: Body parameter. start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. @@ -1737,16 +1867,16 @@ async def all_items_with_merchants( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: ShoppingAllItemsWithMerchantsResponse: Successful Response - + Example: ```python shopping = await client.reports.shopping.all_items_with_merchants( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -1761,32 +1891,34 @@ async def all_items_with_merchants( return await self._post( "/v1/reports/shopping/all-items-with-merchants", body=await async_maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "date_interval": date_interval, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - "include_count": include_count, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "exclude_topic_ids": exclude_topic_ids, - "dimensions": dimensions, - "metrics": metrics, - "owned_asset_names": owned_asset_names, - "include_items": include_items, - "search_item": search_item, - "merchant_filter_type": merchant_filter_type, - "rank_by": rank_by, - "sort_order": sort_order, - }, - shopping_all_items_with_merchants_params.ShoppingAllItemsWithMerchantsParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "owned_asset_names": owned_asset_names, + "include_items": include_items, + "search_item": search_item, + "merchant_filter_type": merchant_filter_type, + "rank_by": rank_by, + "sort_order": sort_order, + }, + shopping_all_items_with_merchants_params.ShoppingAllItemsWithMerchantsParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=ShoppingAllItemsWithMerchantsResponse, ) @@ -1799,15 +1931,18 @@ async def trigger_rate( comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - filters: Iterable[object] | Omit = omit, + filters: Iterable[shopping_trigger_rate_params.Filter] | Omit = omit, order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, pagination: Optional[Pagination] | Omit = omit, include_count: bool | Omit = omit, tag_filter_type: Literal["any", "all"] | Omit = omit, include_no_tag: bool | Omit = omit, exclude_topic_ids: bool | Omit = omit, - dimensions: Iterable[Literal["period", "date", "model_id", "topic_id", "region_id", "persona_id", "prompt_id", "prompt"]] | Omit = omit, - metrics: Iterable[Literal["total_runs", "shopping_triggered_runs", "trigger_rate_percentage"]] | Omit = omit, + dimensions: List[ + Literal["period", "date", "model_id", "topic_id", "region_id", "persona_id", "prompt_id", "prompt"] + ] + | Omit = omit, + metrics: List[Literal["total_runs", "shopping_triggered_runs", "trigger_rate_percentage"]] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -1817,7 +1952,7 @@ async def trigger_rate( ) -> ShoppingTriggerRateResponse: """ Shopping Trigger Rate - + Args: category_id: Body parameter. start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. @@ -1838,16 +1973,16 @@ async def trigger_rate( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: ShoppingTriggerRateResponse: Successful Response - + Example: ```python shopping = await client.reports.shopping.trigger_rate( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -1859,26 +1994,28 @@ async def trigger_rate( return await self._post( "/v1/reports/shopping/trigger-rate", body=await async_maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "date_interval": date_interval, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - "include_count": include_count, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "exclude_topic_ids": exclude_topic_ids, - "dimensions": dimensions, - "metrics": metrics, - }, - shopping_trigger_rate_params.ShoppingTriggerRateParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + }, + shopping_trigger_rate_params.ShoppingTriggerRateParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=ShoppingTriggerRateResponse, ) @@ -1891,15 +2028,15 @@ async def merchant_share( comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - filters: Iterable[object] | Omit = omit, + filters: Iterable[shopping_merchant_share_params.Filter] | Omit = omit, order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, pagination: Optional[Pagination] | Omit = omit, include_count: bool | Omit = omit, tag_filter_type: Literal["any", "all"] | Omit = omit, include_no_tag: bool | Omit = omit, exclude_topic_ids: bool | Omit = omit, - dimensions: Iterable[Literal["period", "topic_id", "prompt_id"]] | Omit = omit, - metrics: Iterable[Literal["merchant_share"]] | Omit = omit, + dimensions: List[Literal["period", "topic_id", "prompt_id"]] | Omit = omit, + metrics: List[Literal["merchant_share"]] | Omit = omit, target_asset_names: SequenceNotStr[str] | Omit = omit, owned_asset_names: SequenceNotStr[str] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -1911,7 +2048,7 @@ async def merchant_share( ) -> ShoppingMerchantShareResponse: """ Shopping Merchant Share - + Args: category_id: Body parameter. start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. @@ -1934,16 +2071,16 @@ async def merchant_share( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: ShoppingMerchantShareResponse: Successful Response - + Example: ```python shopping = await client.reports.shopping.merchant_share( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -1955,28 +2092,30 @@ async def merchant_share( return await self._post( "/v1/reports/shopping/merchant-share", body=await async_maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "date_interval": date_interval, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - "include_count": include_count, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "exclude_topic_ids": exclude_topic_ids, - "dimensions": dimensions, - "metrics": metrics, - "target_asset_names": target_asset_names, - "owned_asset_names": owned_asset_names, - }, - shopping_merchant_share_params.ShoppingMerchantShareParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "dimensions": dimensions, + "metrics": metrics, + "target_asset_names": target_asset_names, + "owned_asset_names": owned_asset_names, + }, + shopping_merchant_share_params.ShoppingMerchantShareParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=ShoppingMerchantShareResponse, ) @@ -1993,10 +2132,10 @@ async def product_merchant_urls( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ShoppingProductMerchantUrlsResponse: + ) -> ShoppingProductMerchantURLsResponse: """ Shopping Product Merchant Urls - + Args: category_id: Body parameter. product_names: Body parameter. @@ -2006,33 +2145,35 @@ async def product_merchant_urls( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: - ShoppingProductMerchantUrlsResponse: Successful Response - + ShoppingProductMerchantURLsResponse: Successful Response + Example: ```python shopping = await client.reports.shopping.product_merchant_urls( - category_id="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", product_names=[], - start_date="", - end_date="", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", ) ``` """ return await self._post( "/v1/reports/shopping/product-merchant-urls", body=await async_maybe_transform( - { - "category_id": category_id, - "product_names": product_names, - "start_date": start_date, - "end_date": end_date, - }, - shopping_product_merchant_urls_params.ShoppingProductMerchantUrlsParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=ShoppingProductMerchantUrlsResponse, + { + "category_id": category_id, + "product_names": product_names, + "start_date": start_date, + "end_date": end_date, + }, + shopping_product_merchant_urls_params.ShoppingProductMerchantURLsParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ShoppingProductMerchantURLsResponse, ) async def executions( @@ -2044,14 +2185,14 @@ async def executions( comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - filters: Iterable[object] | Omit = omit, + filters: Iterable[shopping_executions_params.Filter] | Omit = omit, order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, pagination: Optional[Pagination] | Omit = omit, include_count: bool | Omit = omit, tag_filter_type: Literal["any", "all"] | Omit = omit, include_no_tag: bool | Omit = omit, exclude_topic_ids: bool | Omit = omit, - analysis_types: Iterable[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]] | Omit = omit, + analysis_types: List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]] | Omit = omit, analysis_filter_type: Literal["any", "all"] | Omit = omit, owned_asset_names: SequenceNotStr[str] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -2063,7 +2204,7 @@ async def executions( ) -> ShoppingExecutionsResponse: """ Shopping Executions - + Args: category_id: Body parameter. start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. @@ -2085,16 +2226,16 @@ async def executions( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: ShoppingExecutionsResponse: Successful Response - + Example: ```python shopping = await client.reports.shopping.executions( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -2107,27 +2248,29 @@ async def executions( return await self._post( "/v1/reports/shopping/executions", body=await async_maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "date_interval": date_interval, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - "include_count": include_count, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "exclude_topic_ids": exclude_topic_ids, - "analysis_types": analysis_types, - "analysis_filter_type": analysis_filter_type, - "owned_asset_names": owned_asset_names, - }, - shopping_executions_params.ShoppingExecutionsParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + { + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "comparison_start_date": comparison_start_date, + "comparison_end_date": comparison_end_date, + "date_interval": date_interval, + "filters": filters, + "order_by": order_by, + "pagination": pagination, + "include_count": include_count, + "tag_filter_type": tag_filter_type, + "include_no_tag": include_no_tag, + "exclude_topic_ids": exclude_topic_ids, + "analysis_types": analysis_types, + "analysis_filter_type": analysis_filter_type, + "owned_asset_names": owned_asset_names, + }, + shopping_executions_params.ShoppingExecutionsParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=ShoppingExecutionsResponse, ) diff --git a/src/resources/reports/web_search_results.py b/src/profound/resources/reports/web_search_results.py similarity index 68% rename from src/resources/reports/web_search_results.py rename to src/profound/resources/reports/web_search_results.py index 4cb9f771..2780a0b6 100644 --- a/src/resources/reports/web_search_results.py +++ b/src/profound/resources/reports/web_search_results.py @@ -4,12 +4,12 @@ import httpx -from typing import Dict, Iterable, Optional, Union +from typing import Dict, Iterable, List, Optional, Union from datetime import datetime from typing_extensions import Literal from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from ..._utils import path_template, maybe_transform, async_maybe_transform +from ..._utils import maybe_transform, async_maybe_transform from ..._compat import cached_property from ..._resource import SyncAPIResource, AsyncAPIResource from ..._response import ( @@ -20,40 +20,15 @@ ) from ..._base_client import make_request_options from ..._streaming import Stream, AsyncStream -from ...types.reports.web_search_result_query_response import WebSearchResultQueryResponse, WebSearchResultsResult -from ...types.pagination import Pagination -from ...types.hostname_filter import HostnameFilter -from ...types.path_filter import PathFilter -from ...types.region_id_filter import RegionIdFilter -from ...types.topic_id_filter import TopicIdFilter -from ...types.model_id_filter import ModelIdFilter -from ...types.tag_id_filter import TagIdFilter -from ...types.url_filter import UrlFilter -from ...types.root_domain_filter import RootDomainFilter -from ...types.persona_id_filter import PersonaIdFilter -from ...types.prompt_filter import PromptFilter -from ...types.prompt_id_filter import PromptIdFilter -from ...types.reports import web_search_result_query_params -from ...types.reports.web_search_result_stream_response import WebSearchResultStreamResponse, Query, WebSearchResultStreamResponse2 -from ...types.pagination import Pagination -from ...types.hostname_filter import HostnameFilter -from ...types.path_filter import PathFilter -from ...types.region_id_filter import RegionIdFilter -from ...types.topic_id_filter import TopicIdFilter -from ...types.model_id_filter import ModelIdFilter -from ...types.tag_id_filter import TagIdFilter -from ...types.url_filter import UrlFilter -from ...types.root_domain_filter import RootDomainFilter -from ...types.persona_id_filter import PersonaIdFilter -from ...types.prompt_filter import PromptFilter -from ...types.prompt_id_filter import PromptIdFilter -from ...types.reports import web_search_result_stream_params +from ...types.reports.web_search_result_query_response import WebSearchResultQueryResponse +from ...types.shared_params.pagination import Pagination +from ...types.reports import web_search_result_query_params, web_search_result_stream_params +from ...types.reports.web_search_result_stream_response import WebSearchResultStreamResponse __all__ = ["WebSearchResultsResource", "AsyncWebSearchResultsResource"] class WebSearchResultsResource(SyncAPIResource): - @cached_property def with_raw_response(self) -> WebSearchResultsResourceWithRawResponse: return WebSearchResultsResourceWithRawResponse(self) @@ -66,14 +41,32 @@ def query( self, *, date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["hostname", "path", "url", "root_domain", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "persona", "search_query"]] | Omit = omit, - metrics: Iterable[Literal["count", "search_share"]], + dimensions: List[ + Literal[ + "hostname", + "path", + "url", + "root_domain", + "date", + "region", + "topic", + "topic_id", + "model", + "tag", + "prompt", + "prompt_id", + "persona", + "search_query", + ] + ] + | Omit = omit, + metrics: List[Literal["count", "search_share"]], order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, pagination: Pagination | Omit = omit, category_id: str, start_date: Union[str, datetime], end_date: Union[str, datetime], - filters: Iterable[object] | Omit = omit, + filters: Iterable[web_search_result_query_params.Filter] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -83,7 +76,7 @@ def query( ) -> WebSearchResultQueryResponse: """ Get web search results for a given category. - + Args: date_interval: Date interval for the report. (only used with date dimension) dimensions: Dimensions to group the report by. @@ -98,10 +91,10 @@ def query( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: WebSearchResultQueryResponse: Successful Response - + Example: ```python web_search_result = client.reports.web_search_results.query( @@ -109,29 +102,31 @@ def query( dimensions=[], metrics=[], order_by={}, - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", ) ``` """ return self._post( "/v1/reports/web-search-results", body=maybe_transform( - { - "date_interval": date_interval, - "dimensions": dimensions, - "metrics": metrics, - "order_by": order_by, - "pagination": pagination, - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "filters": filters, - }, - web_search_result_query_params.WebSearchResultQueryParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + web_search_result_query_params.WebSearchResultQueryParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=WebSearchResultQueryResponse, ) @@ -139,14 +134,32 @@ def stream( self, *, date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["hostname", "path", "url", "root_domain", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "persona", "search_query"]] | Omit = omit, - metrics: Iterable[Literal["count", "search_share"]], + dimensions: List[ + Literal[ + "hostname", + "path", + "url", + "root_domain", + "date", + "region", + "topic", + "topic_id", + "model", + "tag", + "prompt", + "prompt_id", + "persona", + "search_query", + ] + ] + | Omit = omit, + metrics: List[Literal["count", "search_share"]], order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, pagination: Optional[Pagination] | Omit = omit, category_id: str, start_date: Union[str, datetime], end_date: Union[str, datetime], - filters: Iterable[object] | Omit = omit, + filters: Iterable[web_search_result_stream_params.Filter] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -156,7 +169,7 @@ def stream( ) -> Stream[WebSearchResultStreamResponse]: """ Stream Web Search Results - + Args: date_interval: Date interval for the report. (only used with date dimension) dimensions: Dimensions to group the report by. @@ -171,10 +184,10 @@ def stream( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: Stream[WebSearchResultStreamResponse]: Server-sent events stream. Emits a `summary` event first, then one `row` event per streamed row. - + Example: ```python stream = client.reports.web_search_results.stream( @@ -182,10 +195,11 @@ def stream( dimensions=[], metrics=[], order_by={}, - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", ) + for event in stream: print(event) ``` @@ -193,7 +207,23 @@ def stream( extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} return self._post( "/v1/reports/web-search-results/stream", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + body=maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + web_search_result_stream_params.WebSearchResultStreamParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=WebSearchResultStreamResponse, stream=True, stream_cls=Stream[WebSearchResultStreamResponse], @@ -201,7 +231,6 @@ def stream( class AsyncWebSearchResultsResource(AsyncAPIResource): - @cached_property def with_raw_response(self) -> AsyncWebSearchResultsResourceWithRawResponse: return AsyncWebSearchResultsResourceWithRawResponse(self) @@ -214,14 +243,32 @@ async def query( self, *, date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["hostname", "path", "url", "root_domain", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "persona", "search_query"]] | Omit = omit, - metrics: Iterable[Literal["count", "search_share"]], + dimensions: List[ + Literal[ + "hostname", + "path", + "url", + "root_domain", + "date", + "region", + "topic", + "topic_id", + "model", + "tag", + "prompt", + "prompt_id", + "persona", + "search_query", + ] + ] + | Omit = omit, + metrics: List[Literal["count", "search_share"]], order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, pagination: Pagination | Omit = omit, category_id: str, start_date: Union[str, datetime], end_date: Union[str, datetime], - filters: Iterable[object] | Omit = omit, + filters: Iterable[web_search_result_query_params.Filter] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -231,7 +278,7 @@ async def query( ) -> WebSearchResultQueryResponse: """ Get web search results for a given category. - + Args: date_interval: Date interval for the report. (only used with date dimension) dimensions: Dimensions to group the report by. @@ -246,10 +293,10 @@ async def query( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: WebSearchResultQueryResponse: Successful Response - + Example: ```python web_search_result = await client.reports.web_search_results.query( @@ -257,29 +304,31 @@ async def query( dimensions=[], metrics=[], order_by={}, - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", ) ``` """ return await self._post( "/v1/reports/web-search-results", body=await async_maybe_transform( - { - "date_interval": date_interval, - "dimensions": dimensions, - "metrics": metrics, - "order_by": order_by, - "pagination": pagination, - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "filters": filters, - }, - web_search_result_query_params.WebSearchResultQueryParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + web_search_result_query_params.WebSearchResultQueryParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=WebSearchResultQueryResponse, ) @@ -287,14 +336,32 @@ async def stream( self, *, date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["hostname", "path", "url", "root_domain", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "persona", "search_query"]] | Omit = omit, - metrics: Iterable[Literal["count", "search_share"]], + dimensions: List[ + Literal[ + "hostname", + "path", + "url", + "root_domain", + "date", + "region", + "topic", + "topic_id", + "model", + "tag", + "prompt", + "prompt_id", + "persona", + "search_query", + ] + ] + | Omit = omit, + metrics: List[Literal["count", "search_share"]], order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, pagination: Optional[Pagination] | Omit = omit, category_id: str, start_date: Union[str, datetime], end_date: Union[str, datetime], - filters: Iterable[object] | Omit = omit, + filters: Iterable[web_search_result_stream_params.Filter] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -304,7 +371,7 @@ async def stream( ) -> AsyncStream[WebSearchResultStreamResponse]: """ Stream Web Search Results - + Args: date_interval: Date interval for the report. (only used with date dimension) dimensions: Dimensions to group the report by. @@ -319,10 +386,10 @@ async def stream( extra_query: Send extra query parameters with the request. extra_body: Send extra JSON properties with the request. timeout: Override the client-level default timeout for this request, in seconds. - + Returns: AsyncStream[WebSearchResultStreamResponse]: Server-sent events stream. Emits a `summary` event first, then one `row` event per streamed row. - + Example: ```python stream = await client.reports.web_search_results.stream( @@ -330,10 +397,11 @@ async def stream( dimensions=[], metrics=[], order_by={}, - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", ) + async for event in stream: print(event) ``` @@ -341,7 +409,23 @@ async def stream( extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} return await self._post( "/v1/reports/web-search-results/stream", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), + body=await async_maybe_transform( + { + "date_interval": date_interval, + "dimensions": dimensions, + "metrics": metrics, + "order_by": order_by, + "pagination": pagination, + "category_id": category_id, + "start_date": start_date, + "end_date": end_date, + "filters": filters, + }, + web_search_result_stream_params.WebSearchResultStreamParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), cast_to=WebSearchResultStreamResponse, stream=True, stream_cls=AsyncStream[WebSearchResultStreamResponse], diff --git a/src/profound/types/__init__.py b/src/profound/types/__init__.py new file mode 100644 index 00000000..95bb202f --- /dev/null +++ b/src/profound/types/__init__.py @@ -0,0 +1,70 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from .category import Category as Category +from .report_info import ReportInfo as ReportInfo +from .named_resource import NamedResource as NamedResource +from .organization import Organization as Organization +from .persona_profile import PersonaProfile as PersonaProfile +from .persona_profile_behavior import PersonaProfileBehavior as PersonaProfileBehavior +from .persona_profile_demographics import PersonaProfileDemographics as PersonaProfileDemographics +from .persona_profile_employment import PersonaProfileEmployment as PersonaProfileEmployment +from .report_response import ReportResponse as ReportResponse +from .report_result import ReportResult as ReportResult +from .prompt_id_filter_param import PromptIDFilterParam as PromptIDFilterParam +from .hostname_filter_param import HostnameFilterParam as HostnameFilterParam +from .topic_name_filter_param import TopicNameFilterParam as TopicNameFilterParam +from .tag_name_filter_param import TagNameFilterParam as TagNameFilterParam +from .url_filter_param import URLFilterParam as URLFilterParam +from .root_domain_filter_param import RootDomainFilterParam as RootDomainFilterParam +from .organization_regions_response import OrganizationRegionsResponse as OrganizationRegionsResponse +from .organization_regions_params import OrganizationRegionsParams as OrganizationRegionsParams +from .organization_models_response import OrganizationModelsResponse as OrganizationModelsResponse +from .organization_domains_response import OrganizationDomainsResponse as OrganizationDomainsResponse +from .organization_domains_params import OrganizationDomainsParams as OrganizationDomainsParams +from .organization_list_assets_response import OrganizationListAssetsResponse as OrganizationListAssetsResponse +from .organization_list_assets_params import OrganizationListAssetsParams as OrganizationListAssetsParams +from .organization_get_personas_response import OrganizationGetPersonasResponse as OrganizationGetPersonasResponse +from .organization_get_personas_params import OrganizationGetPersonasParams as OrganizationGetPersonasParams +from .organization_list_response import OrganizationListResponse as OrganizationListResponse +from .prompt_answers_response import PromptAnswersResponse as PromptAnswersResponse +from .prompt_answers_params import PromptAnswersParams as PromptAnswersParams +from .report_citations_response import ReportCitationsResponse as ReportCitationsResponse +from .report_citations_params import ReportCitationsParams as ReportCitationsParams +from .report_visibility_params import ReportVisibilityParams as ReportVisibilityParams +from .report_sentiment_params import ReportSentimentParams as ReportSentimentParams +from .report_get_referrals_report_params import ReportGetReferralsReportParams as ReportGetReferralsReportParams +from .report_get_bots_report_params import ReportGetBotsReportParams as ReportGetBotsReportParams +from .report_get_referrals_report_v2_params import ReportGetReferralsReportV2Params as ReportGetReferralsReportV2Params +from .report_get_bots_report_v2_params import ReportGetBotsReportV2Params as ReportGetBotsReportV2Params +from .report_query_fanouts_params import ReportQueryFanoutsParams as ReportQueryFanoutsParams +from .report_stream_citations_response import ReportStreamCitationsResponse as ReportStreamCitationsResponse +from .report_stream_citations_params import ReportStreamCitationsParams as ReportStreamCitationsParams +from .report_stream_visibility_response import ReportStreamVisibilityResponse as ReportStreamVisibilityResponse +from .report_stream_visibility_params import ReportStreamVisibilityParams as ReportStreamVisibilityParams +from .report_stream_sentiment_response import ReportStreamSentimentResponse as ReportStreamSentimentResponse +from .report_stream_sentiment_params import ReportStreamSentimentParams as ReportStreamSentimentParams +from .agent_list_response import AgentListResponse as AgentListResponse +from .agent_list_params import AgentListParams as AgentListParams +from .agent_retrieve_response import AgentRetrieveResponse as AgentRetrieveResponse +from .agent_retrieve_params import AgentRetrieveParams as AgentRetrieveParams +from .knowledge_base_list_response import KnowledgeBaseListResponse as KnowledgeBaseListResponse +from .knowledge_base_list_params import KnowledgeBaseListParams as KnowledgeBaseListParams +from .knowledge_base_search_response import KnowledgeBaseSearchResponse as KnowledgeBaseSearchResponse +from .knowledge_base_search_params import KnowledgeBaseSearchParams as KnowledgeBaseSearchParams +from .shared.analysis_type_filter import AnalysisTypeFilter as AnalysisTypeFilter +from .shared.asset_id_filter import AssetIDFilter as AssetIDFilter +from .shared.bot_name_filter import BotNameFilter as BotNameFilter +from .shared.bot_provider_filter import BotProviderFilter as BotProviderFilter +from .shared.cursor_pagination import CursorPagination as CursorPagination +from .shared.model_id_filter import ModelIDFilter as ModelIDFilter +from .shared.pagination import Pagination as Pagination +from .shared.path_filter import PathFilter as PathFilter +from .shared.persona_id_filter import PersonaIDFilter as PersonaIDFilter +from .shared.prompt_filter import PromptFilter as PromptFilter +from .shared.prompt_type_filter import PromptTypeFilter as PromptTypeFilter +from .shared.region_id_filter import RegionIDFilter as RegionIDFilter +from .shared.region_name_filter import RegionNameFilter as RegionNameFilter +from .shared.tag_id_filter import TagIDFilter as TagIDFilter +from .shared.topic_id_filter import TopicIDFilter as TopicIDFilter diff --git a/src/types/agent_list_params.py b/src/profound/types/agent_list_params.py similarity index 82% rename from src/types/agent_list_params.py rename to src/profound/types/agent_list_params.py index a8ead13c..618989d4 100644 --- a/src/types/agent_list_params.py +++ b/src/profound/types/agent_list_params.py @@ -2,15 +2,14 @@ from __future__ import annotations -from typing import Iterable, Optional +from typing import List, Optional from typing_extensions import Literal, TypedDict __all__ = ["AgentListParams"] class AgentListParams(TypedDict, total=False): - - statuses: Optional[Iterable[Literal["published", "draft"]]] + statuses: Optional[List[Literal["published", "draft"]]] """Optional status filter. Use `published` to list agents that have a live published version, or `draft` to list agents that have not been published yet. Defaults to `published`.""" limit: int diff --git a/src/types/agent_list_response.py b/src/profound/types/agent_list_response.py similarity index 85% rename from src/types/agent_list_response.py rename to src/profound/types/agent_list_response.py index 26aa5b33..9ce0e096 100644 --- a/src/types/agent_list_response.py +++ b/src/profound/types/agent_list_response.py @@ -5,13 +5,13 @@ from typing_extensions import Literal from .._models import BaseModel -from .cursor_pagination import CursorPagination -__all__ = ["AgentListResponse", "Agent"] +from .shared.cursor_pagination import CursorPagination +__all__ = ["AgentListResponse", "Data"] -class Agent(BaseModel): +class Data(BaseModel): id: str """Unique ID for the agent.""" @@ -31,10 +31,8 @@ class Agent(BaseModel): """Short description of the agent, if provided.""" - class AgentListResponse(BaseModel): - - data: List[Agent] + data: List[Data] """Agents returned for this page.""" pagination: Optional[CursorPagination] = None diff --git a/src/types/agent_retrieve_params.py b/src/profound/types/agent_retrieve_params.py similarity index 99% rename from src/types/agent_retrieve_params.py rename to src/profound/types/agent_retrieve_params.py index 8feaed6b..2f9331d2 100644 --- a/src/types/agent_retrieve_params.py +++ b/src/profound/types/agent_retrieve_params.py @@ -8,6 +8,5 @@ class AgentRetrieveParams(TypedDict, total=False): - version: Literal["published", "draft"] """Version of the agent to retrieve. Use `published` for the live version, or `draft` for the latest unpublished changes for the same agent. Defaults to `published`.""" diff --git a/src/types/agent_retrieve_response.py b/src/profound/types/agent_retrieve_response.py similarity index 80% rename from src/types/agent_retrieve_response.py rename to src/profound/types/agent_retrieve_response.py index 76927dee..3cbe37c9 100644 --- a/src/types/agent_retrieve_response.py +++ b/src/profound/types/agent_retrieve_response.py @@ -2,17 +2,18 @@ from __future__ import annotations -from typing import List, Optional +from typing import Dict, List, Optional from datetime import datetime from typing_extensions import Literal -from .._models import BaseModel +from pydantic import Field as FieldInfo -__all__ = ["AgentRetrieveResponse", "AgentSchema", "Input", "Output", "AgentValidation", "AgentValidationIssue"] +from .._models import BaseModel +__all__ = ["AgentRetrieveResponse", "Schema", "Validation", "ValidationIssue"] -class AgentValidationIssue(BaseModel): +class ValidationIssue(BaseModel): code: str """Stable machine-readable identifier for the kind of issue.""" @@ -34,32 +35,24 @@ class AgentValidationIssue(BaseModel): violation: Optional[str] = None """The specific constraint that was violated, if available.""" -class AgentValidation(BaseModel): +class Validation(BaseModel): valid: bool """Whether the agent's graph is valid and ready to publish.""" - issues: Optional[List[AgentValidationIssue]] = None + issues: Optional[List[ValidationIssue]] = None """Problems found while validating the graph. Empty when `valid` is true.""" -class Output(BaseModel): - pass - -class Input(BaseModel): - pass -class AgentSchema(BaseModel): - - input: Input +class Schema(BaseModel): + input: Dict[str, object] """JSON Schema for the agent's `inputs` object. Use the top-level property keys as input field names when starting a run.""" - output: Output + output: Dict[str, object] """JSON Schema for the `outputs` object returned by `GET /v1/agents/{agent_id}/runs/{run_id}`.""" - class AgentRetrieveResponse(BaseModel): - id: str """Unique ID for the agent.""" @@ -78,8 +71,8 @@ class AgentRetrieveResponse(BaseModel): description: Optional[str] = None """Short description of the agent, if provided.""" - schema: Optional[AgentSchema] = None + schema_: Optional[Schema] = FieldInfo(alias="schema", default=None) """Input and output schemas for this agent. Omitted while the agent's graph cannot be previewed (e.g. an empty or structurally-invalid draft); check `validation` to see what needs fixing.""" - validation: Optional[AgentValidation] = None + validation: Optional[Validation] = None """Validation report for the agent's graph, when available. Use `validation.valid` to check the agent is publishable.""" diff --git a/src/profound/types/agents/__init__.py b/src/profound/types/agents/__init__.py new file mode 100644 index 00000000..2d9e56cd --- /dev/null +++ b/src/profound/types/agents/__init__.py @@ -0,0 +1,8 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from .run_create_response import RunCreateResponse as RunCreateResponse +from .run_create_params import RunCreateParams as RunCreateParams +from .run_retrieve_response import RunRetrieveResponse as RunRetrieveResponse +from .run_retrieve_params import RunRetrieveParams as RunRetrieveParams diff --git a/src/types/agents/run_create_params.py b/src/profound/types/agents/run_create_params.py similarity index 76% rename from src/types/agents/run_create_params.py rename to src/profound/types/agents/run_create_params.py index ecb164d6..74419c0e 100644 --- a/src/types/agents/run_create_params.py +++ b/src/profound/types/agents/run_create_params.py @@ -2,17 +2,12 @@ from __future__ import annotations +from typing import Dict from typing_extensions import TypedDict -__all__ = ["RunCreateParams", "Inputs"] +__all__ = ["RunCreateParams"] class RunCreateParams(TypedDict, total=False): - - inputs: Inputs + inputs: Dict[str, object] """Input values for the run. Keys should match the property names defined in `schema.input`. Omit the request body when the agent does not require inputs.""" - - -class Inputs(TypedDict, total=False): - pass - diff --git a/src/types/agents/run_create_response.py b/src/profound/types/agents/run_create_response.py similarity index 99% rename from src/types/agents/run_create_response.py rename to src/profound/types/agents/run_create_response.py index d3751e19..ae692306 100644 --- a/src/types/agents/run_create_response.py +++ b/src/profound/types/agents/run_create_response.py @@ -10,7 +10,6 @@ class RunCreateResponse(BaseModel): - id: str """Unique ID for the accepted run.""" diff --git a/src/profound/types/agents/run_retrieve_params.py b/src/profound/types/agents/run_retrieve_params.py new file mode 100644 index 00000000..6ce72a78 --- /dev/null +++ b/src/profound/types/agents/run_retrieve_params.py @@ -0,0 +1,15 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing_extensions import Required, TypedDict + +__all__ = ["RunRetrieveParams"] + + +class RunRetrieveParams(TypedDict, total=False): + agent_id: Required[str] + """The ID of the agent that owns the run.""" + + verbose: bool + """Include each step's raw `outputs` payload in the execution trace.""" diff --git a/src/profound/types/agents/run_retrieve_response.py b/src/profound/types/agents/run_retrieve_response.py new file mode 100644 index 00000000..ad3b94dd --- /dev/null +++ b/src/profound/types/agents/run_retrieve_response.py @@ -0,0 +1,61 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, List, Optional +from datetime import datetime +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["RunRetrieveResponse", "Step"] + + +class Step(BaseModel): + node_id: str + """ID of the node that ran, within its agent graph.""" + + node_type: str + """Kind of node, e.g. "profound_visibility", "llm", "conditional".""" + + title: str + """Human-readable title of the node.""" + + status: str + """Terminal status of this node execution.""" + + elapsed_time: Optional[float] = None + """Wall-clock seconds the node took, if recorded.""" + + finished_at: Optional[datetime] = None + """When the node finished, if it has.""" + + error_message: Optional[str] = None + """Failure detail for this node, when it failed.""" + + outputs: Optional[Dict[str, object]] = None + """Raw output payload this node produced. Included only when the request asks for `verbose`.""" + + +class RunRetrieveResponse(BaseModel): + id: str + """Unique ID for the run.""" + + agent_id: str + """Unique ID of the agent for this run.""" + + status: Literal["queued", "running", "succeeded", "failed", "cancelled", "skipped", "unknown"] + """Current status of the run.""" + + started_at: Optional[datetime] = None + """When the run started, if it has started.""" + + finished_at: Optional[datetime] = None + """When the run finished, if it has completed.""" + + error: Optional[Dict[str, object]] = None + """Error details, when the run fails and error information is available.""" + + outputs: Optional[Dict[str, object]] = None + """Output values returned by the run, keyed by variable ID. This object conforms to `schema.output` from the agent detail response and is empty when no outputs are available.""" + + steps: Optional[List[Step]] = None + """Ordered step-by-step execution trace — one entry per node that ran, in execution order. Always present once the run has executed a node; per-node `outputs` inside each step are included only when the request asks for `verbose`.""" diff --git a/src/types/category.py b/src/profound/types/category.py similarity index 73% rename from src/types/category.py rename to src/profound/types/category.py index 2e3ea0bb..43e192b6 100644 --- a/src/types/category.py +++ b/src/profound/types/category.py @@ -1,5 +1,6 @@ # File generated from our OpenAPI spec by Scalar. See README.md for details. +from typing import Optional from .._models import BaseModel @@ -7,7 +8,8 @@ class Category(BaseModel): - id: str name: str + + internal_name: Optional[str] = None diff --git a/src/types/content/__init__.py b/src/profound/types/content/__init__.py similarity index 100% rename from src/types/content/__init__.py rename to src/profound/types/content/__init__.py diff --git a/src/types/content/optimization_list_params.py b/src/profound/types/content/optimization_list_params.py similarity index 99% rename from src/types/content/optimization_list_params.py rename to src/profound/types/content/optimization_list_params.py index ef156e42..f213aaf7 100644 --- a/src/types/content/optimization_list_params.py +++ b/src/profound/types/content/optimization_list_params.py @@ -8,7 +8,6 @@ class OptimizationListParams(TypedDict, total=False): - limit: int """Maximum number of results to return""" diff --git a/src/types/content/optimization_list_response.py b/src/profound/types/content/optimization_list_response.py similarity index 62% rename from src/types/content/optimization_list_response.py rename to src/profound/types/content/optimization_list_response.py index 1ec91a67..49ac99c4 100644 --- a/src/types/content/optimization_list_response.py +++ b/src/profound/types/content/optimization_list_response.py @@ -7,13 +7,13 @@ from typing_extensions import Literal from ..._models import BaseModel -from ..pagination import Pagination -__all__ = ["OptimizationListResponse", "ContentOptimizationResponseInfo", "OptimizationQuery", "ContentOptimization"] +from ..shared.pagination import Pagination +__all__ = ["OptimizationListResponse", "Info", "InfoQuery", "Data"] -class ContentOptimization(BaseModel): +class Data(BaseModel): id: str title: str @@ -26,23 +26,21 @@ class ContentOptimization(BaseModel): status: str -class OptimizationQuery(BaseModel): +class InfoQuery(BaseModel): asset_id: str pagination: Optional[Pagination] = None """Pagination parameters for the results. Default is 10,000 rows with no offset.""" -class ContentOptimizationResponseInfo(BaseModel): +class Info(BaseModel): total_rows: int - query: OptimizationQuery - + query: InfoQuery class OptimizationListResponse(BaseModel): + info: Info - info: ContentOptimizationResponseInfo - - data: List[ContentOptimization] + data: List[Data] diff --git a/src/profound/types/content/optimization_retrieve_response.py b/src/profound/types/content/optimization_retrieve_response.py new file mode 100644 index 00000000..da400377 --- /dev/null +++ b/src/profound/types/content/optimization_retrieve_response.py @@ -0,0 +1,123 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, List, Optional, Union +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = [ + "OptimizationRetrieveResponse", + "Data", + "DataContent", + "DataAeoContentScore", + "DataAeoContentScoreTargetZone", + "DataAnalysis", + "DataAnalysisBreakdown", + "DataRecommendation", + "DataRecommendationImpact", + "DataRecommendationSuggestion", + "DataInputs", + "DataInputsTopic", + "DataInputsPrompt", + "DataInputsUser", +] + + +class DataInputsUser(BaseModel): + type: Literal["file", "text", "url"] + + value: str + + metadata: Dict[str, Union[int, str]] + + +class DataInputsPrompt(BaseModel): + id: str + + name: str + + +class DataInputsTopic(BaseModel): + id: str + + name: str + + +class DataInputs(BaseModel): + topic: Optional[DataInputsTopic] = None + + prompt: Optional[DataInputsPrompt] = None + + top_citations: List[str] + + user: DataInputsUser + + +class DataRecommendationSuggestion(BaseModel): + text: str + + rationale: str + + +class DataRecommendationImpact(BaseModel): + section: str + + score: float + + +class DataRecommendation(BaseModel): + title: str + + status: Literal["done", "pending"] + + impact: Optional[DataRecommendationImpact] = None + + suggestion: DataRecommendationSuggestion + + +class DataAnalysisBreakdown(BaseModel): + title: str + + weight: float + + score: float + + +class DataAnalysis(BaseModel): + breakdown: List[DataAnalysisBreakdown] + + +class DataAeoContentScoreTargetZone(BaseModel): + low: float + + high: float + + +class DataAeoContentScore(BaseModel): + target_zone: DataAeoContentScoreTargetZone + + value: float + + +class DataContent(BaseModel): + format: Literal["markdown", "html"] + + value: str + + +class Data(BaseModel): + content: DataContent + + aeo_content_score: Optional[DataAeoContentScore] = None + + analysis: DataAnalysis + + recommendations: List[DataRecommendation] + + inputs: DataInputs + + +class OptimizationRetrieveResponse(BaseModel): + data: Data diff --git a/src/profound/types/hostname_filter_param.py b/src/profound/types/hostname_filter_param.py new file mode 100644 index 00000000..55c4029c --- /dev/null +++ b/src/profound/types/hostname_filter_param.py @@ -0,0 +1,29 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Union +from typing_extensions import Literal, Required, TypedDict +from .._types import SequenceNotStr + +__all__ = ["HostnameFilterParam"] + + +class HostnameFilterParam(TypedDict, total=False): + field: Required[Literal["hostname"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/types/knowledge_base_list_params.py b/src/profound/types/knowledge_base_list_params.py similarity index 99% rename from src/types/knowledge_base_list_params.py rename to src/profound/types/knowledge_base_list_params.py index 4c269180..7ab73adf 100644 --- a/src/types/knowledge_base_list_params.py +++ b/src/profound/types/knowledge_base_list_params.py @@ -9,6 +9,5 @@ class KnowledgeBaseListParams(TypedDict, total=False): - organization_id: Optional[str] """Organization scope for API keys that can access multiple organizations.""" diff --git a/src/types/knowledge_base_list_response.py b/src/profound/types/knowledge_base_list_response.py similarity index 78% rename from src/types/knowledge_base_list_response.py rename to src/profound/types/knowledge_base_list_response.py index 89649247..9ffaa81c 100644 --- a/src/types/knowledge_base_list_response.py +++ b/src/profound/types/knowledge_base_list_response.py @@ -4,13 +4,13 @@ from datetime import datetime from .._models import BaseModel -from .cursor_pagination import CursorPagination -__all__ = ["KnowledgeBaseListResponse", "KnowledgeBaseItem"] +from .shared.cursor_pagination import CursorPagination +__all__ = ["KnowledgeBaseListResponse", "Data"] -class KnowledgeBaseItem(BaseModel): +class Data(BaseModel): id: str """Unique knowledge base ID.""" @@ -27,10 +27,8 @@ class KnowledgeBaseItem(BaseModel): """Creation timestamp.""" - class KnowledgeBaseListResponse(BaseModel): - - data: List[KnowledgeBaseItem] + data: List[Data] """Knowledge bases accessible to the API key.""" pagination: Optional[CursorPagination] = None diff --git a/src/types/knowledge_base_search_params.py b/src/profound/types/knowledge_base_search_params.py similarity index 83% rename from src/types/knowledge_base_search_params.py rename to src/profound/types/knowledge_base_search_params.py index 7c476c97..b90b2a02 100644 --- a/src/types/knowledge_base_search_params.py +++ b/src/profound/types/knowledge_base_search_params.py @@ -6,11 +6,10 @@ from typing_extensions import Required, TypedDict from .._types import SequenceNotStr -__all__ = ["KnowledgeBaseSearchParams", "SearchKnowledgeBaseFilters"] +__all__ = ["KnowledgeBaseSearchParams", "Filters"] class KnowledgeBaseSearchParams(TypedDict, total=False): - query: Required[str] """Search query.""" @@ -20,18 +19,16 @@ class KnowledgeBaseSearchParams(TypedDict, total=False): return_full_page: bool """Return full page content instead of snippets.""" - filters: Optional[SearchKnowledgeBaseFilters] + filters: Optional[Filters] """Optional search filters.""" organization_id: Optional[str] """Organization scope for API keys that can access multiple organizations.""" -class SearchKnowledgeBaseFilters(TypedDict, total=False): - +class Filters(TypedDict, total=False): tags: Optional[SequenceNotStr[str]] """Optional tags to match. Documents with any matching tag are included.""" folders: Optional[SequenceNotStr[str]] """Optional folder paths to search within. Currently limited to one folder.""" - diff --git a/src/types/knowledge_base_search_response.py b/src/profound/types/knowledge_base_search_response.py similarity index 57% rename from src/types/knowledge_base_search_response.py rename to src/profound/types/knowledge_base_search_response.py index 4d9ba362..7d646296 100644 --- a/src/types/knowledge_base_search_response.py +++ b/src/profound/types/knowledge_base_search_response.py @@ -1,37 +1,30 @@ # File generated from our OpenAPI spec by Scalar. See README.md for details. -from __future__ import annotations - -from typing import List, Optional +from typing import Dict, List, Optional from .._models import BaseModel -from .cursor_pagination import CursorPagination - -__all__ = ["KnowledgeBaseSearchResponse", "KnowledgeBaseSearchResult", "Metadata"] +from .shared.cursor_pagination import CursorPagination -class Metadata(BaseModel): - pass +__all__ = ["KnowledgeBaseSearchResponse", "Data"] -class KnowledgeBaseSearchResult(BaseModel): +class Data(BaseModel): id: str """Document or chunk path.""" score: float """Relevance score.""" - metadata: Metadata + metadata: Dict[str, object] """Result metadata, including folder path.""" content: str """Matched content.""" - class KnowledgeBaseSearchResponse(BaseModel): - - data: List[KnowledgeBaseSearchResult] + data: List[Data] """Knowledge base search results.""" pagination: Optional[CursorPagination] = None diff --git a/src/types/knowledge_bases/__init__.py b/src/profound/types/knowledge_bases/__init__.py similarity index 80% rename from src/types/knowledge_bases/__init__.py rename to src/profound/types/knowledge_bases/__init__.py index 67d84450..490d09a8 100644 --- a/src/types/knowledge_bases/__init__.py +++ b/src/profound/types/knowledge_bases/__init__.py @@ -2,9 +2,6 @@ from __future__ import annotations -from .add_folder_request import AddFolderRequest as AddFolderRequest -from .delete_document_request import DeleteDocumentRequest as DeleteDocumentRequest -from .delete_folder_request import DeleteFolderRequest as DeleteFolderRequest from .document_create_response import DocumentCreateResponse as DocumentCreateResponse from .document_create_params import DocumentCreateParams as DocumentCreateParams from .document_update_response import DocumentUpdateResponse as DocumentUpdateResponse diff --git a/src/types/knowledge_bases/document_create_params.py b/src/profound/types/knowledge_bases/document_create_params.py similarity index 99% rename from src/types/knowledge_bases/document_create_params.py rename to src/profound/types/knowledge_bases/document_create_params.py index f672605c..50ed9439 100644 --- a/src/types/knowledge_bases/document_create_params.py +++ b/src/profound/types/knowledge_bases/document_create_params.py @@ -9,7 +9,6 @@ class DocumentCreateParams(TypedDict, total=False): - name: Required[str] """Unique document name.""" diff --git a/src/types/knowledge_bases/document_create_response.py b/src/profound/types/knowledge_bases/document_create_response.py similarity index 99% rename from src/types/knowledge_bases/document_create_response.py rename to src/profound/types/knowledge_bases/document_create_response.py index 31092ba1..9b9ab8ec 100644 --- a/src/types/knowledge_bases/document_create_response.py +++ b/src/profound/types/knowledge_bases/document_create_response.py @@ -8,7 +8,6 @@ class DocumentCreateResponse(BaseModel): - message: str """Operation result message.""" diff --git a/src/types/knowledge_bases/document_delete_params.py b/src/profound/types/knowledge_bases/document_delete_params.py similarity index 99% rename from src/types/knowledge_bases/document_delete_params.py rename to src/profound/types/knowledge_bases/document_delete_params.py index ce34c1b4..de3c6caf 100644 --- a/src/types/knowledge_bases/document_delete_params.py +++ b/src/profound/types/knowledge_bases/document_delete_params.py @@ -9,7 +9,6 @@ class DocumentDeleteParams(TypedDict, total=False): - name: Required[str] """Document path to delete.""" diff --git a/src/types/knowledge_bases/document_delete_response.py b/src/profound/types/knowledge_bases/document_delete_response.py similarity index 99% rename from src/types/knowledge_bases/document_delete_response.py rename to src/profound/types/knowledge_bases/document_delete_response.py index 4263f971..5cffeb57 100644 --- a/src/types/knowledge_bases/document_delete_response.py +++ b/src/profound/types/knowledge_bases/document_delete_response.py @@ -8,7 +8,6 @@ class DocumentDeleteResponse(BaseModel): - message: str """Operation result message.""" diff --git a/src/types/knowledge_bases/document_update_params.py b/src/profound/types/knowledge_bases/document_update_params.py similarity index 99% rename from src/types/knowledge_bases/document_update_params.py rename to src/profound/types/knowledge_bases/document_update_params.py index 22e9c34a..65c8c962 100644 --- a/src/types/knowledge_bases/document_update_params.py +++ b/src/profound/types/knowledge_bases/document_update_params.py @@ -9,7 +9,6 @@ class DocumentUpdateParams(TypedDict, total=False): - name: Required[str] """Document name or path to update.""" diff --git a/src/types/knowledge_bases/document_update_response.py b/src/profound/types/knowledge_bases/document_update_response.py similarity index 99% rename from src/types/knowledge_bases/document_update_response.py rename to src/profound/types/knowledge_bases/document_update_response.py index 57709d33..66cfeea6 100644 --- a/src/types/knowledge_bases/document_update_response.py +++ b/src/profound/types/knowledge_bases/document_update_response.py @@ -8,7 +8,6 @@ class DocumentUpdateResponse(BaseModel): - message: str """Operation result message.""" diff --git a/src/types/knowledge_bases/folder_create_params.py b/src/profound/types/knowledge_bases/folder_create_params.py similarity index 99% rename from src/types/knowledge_bases/folder_create_params.py rename to src/profound/types/knowledge_bases/folder_create_params.py index fba6a80c..1be3d73d 100644 --- a/src/types/knowledge_bases/folder_create_params.py +++ b/src/profound/types/knowledge_bases/folder_create_params.py @@ -9,7 +9,6 @@ class FolderCreateParams(TypedDict, total=False): - path: Required[str] """Folder path to create.""" diff --git a/src/types/knowledge_bases/folder_create_response.py b/src/profound/types/knowledge_bases/folder_create_response.py similarity index 99% rename from src/types/knowledge_bases/folder_create_response.py rename to src/profound/types/knowledge_bases/folder_create_response.py index 45332ddb..a74f1c3c 100644 --- a/src/types/knowledge_bases/folder_create_response.py +++ b/src/profound/types/knowledge_bases/folder_create_response.py @@ -1,13 +1,11 @@ # File generated from our OpenAPI spec by Scalar. See README.md for details. - from ..._models import BaseModel __all__ = ["FolderCreateResponse"] class FolderCreateResponse(BaseModel): - message: str """Operation result message.""" diff --git a/src/types/knowledge_bases/folder_delete_params.py b/src/profound/types/knowledge_bases/folder_delete_params.py similarity index 99% rename from src/types/knowledge_bases/folder_delete_params.py rename to src/profound/types/knowledge_bases/folder_delete_params.py index a142839b..4ad2baa6 100644 --- a/src/types/knowledge_bases/folder_delete_params.py +++ b/src/profound/types/knowledge_bases/folder_delete_params.py @@ -9,7 +9,6 @@ class FolderDeleteParams(TypedDict, total=False): - path: Required[str] """Folder path to delete.""" diff --git a/src/types/knowledge_bases/folder_delete_response.py b/src/profound/types/knowledge_bases/folder_delete_response.py similarity index 99% rename from src/types/knowledge_bases/folder_delete_response.py rename to src/profound/types/knowledge_bases/folder_delete_response.py index c981394c..12624c10 100644 --- a/src/types/knowledge_bases/folder_delete_response.py +++ b/src/profound/types/knowledge_bases/folder_delete_response.py @@ -1,13 +1,11 @@ # File generated from our OpenAPI spec by Scalar. See README.md for details. - from ..._models import BaseModel __all__ = ["FolderDeleteResponse"] class FolderDeleteResponse(BaseModel): - message: str """Operation result message.""" diff --git a/src/types/named_resource.py b/src/profound/types/named_resource.py similarity index 99% rename from src/types/named_resource.py rename to src/profound/types/named_resource.py index 5de536ef..5c3f8fe7 100644 --- a/src/types/named_resource.py +++ b/src/profound/types/named_resource.py @@ -1,6 +1,5 @@ # File generated from our OpenAPI spec by Scalar. See README.md for details. - from .._models import BaseModel __all__ = ["NamedResource"] diff --git a/src/types/organization.py b/src/profound/types/organization.py similarity index 99% rename from src/types/organization.py rename to src/profound/types/organization.py index 5559f637..09502933 100644 --- a/src/types/organization.py +++ b/src/profound/types/organization.py @@ -8,7 +8,6 @@ class Organization(BaseModel): - id: str name: Optional[str] = None diff --git a/src/types/organization_domains_params.py b/src/profound/types/organization_domains_params.py similarity index 81% rename from src/types/organization_domains_params.py rename to src/profound/types/organization_domains_params.py index e95c17d2..9c08c432 100644 --- a/src/types/organization_domains_params.py +++ b/src/profound/types/organization_domains_params.py @@ -2,13 +2,13 @@ from __future__ import annotations -from typing import Iterable, Optional +from typing import Optional from typing_extensions import TypedDict +from .._types import SequenceNotStr __all__ = ["OrganizationDomainsParams"] class OrganizationDomainsParams(TypedDict, total=False): - - organization_ids: Optional[Iterable[str]] + organization_ids: Optional[SequenceNotStr[str]] """Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to.""" diff --git a/src/types/organization_domains_response.py b/src/profound/types/organization_domains_response.py similarity index 61% rename from src/types/organization_domains_response.py rename to src/profound/types/organization_domains_response.py index eb62b234..22b05231 100644 --- a/src/types/organization_domains_response.py +++ b/src/profound/types/organization_domains_response.py @@ -3,13 +3,15 @@ from typing import List from datetime import datetime from typing_extensions import TypeAlias + from .._models import BaseModel + from .organization import Organization -__all__ = ["OrganizationDomainsResponse", "DomainWithOrganization"] +__all__ = ["OrganizationDomainsResponse", "OrganizationDomainsResponseItem"] -class DomainWithOrganization(BaseModel): +class OrganizationDomainsResponseItem(BaseModel): created_at: datetime id: str @@ -19,5 +21,4 @@ class DomainWithOrganization(BaseModel): organization: Organization - -OrganizationDomainsResponse: TypeAlias = List[DomainWithOrganization] +OrganizationDomainsResponse: TypeAlias = List[OrganizationDomainsResponseItem] diff --git a/src/types/organization_get_personas_params.py b/src/profound/types/organization_get_personas_params.py similarity index 81% rename from src/types/organization_get_personas_params.py rename to src/profound/types/organization_get_personas_params.py index 94d12aac..bdf02b73 100644 --- a/src/types/organization_get_personas_params.py +++ b/src/profound/types/organization_get_personas_params.py @@ -2,13 +2,13 @@ from __future__ import annotations -from typing import Iterable, Optional +from typing import Optional from typing_extensions import TypedDict +from .._types import SequenceNotStr __all__ = ["OrganizationGetPersonasParams"] class OrganizationGetPersonasParams(TypedDict, total=False): - - organization_ids: Optional[Iterable[str]] + organization_ids: Optional[SequenceNotStr[str]] """Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to.""" diff --git a/src/types/organization_get_personas_response.py b/src/profound/types/organization_get_personas_response.py similarity index 69% rename from src/types/organization_get_personas_response.py rename to src/profound/types/organization_get_personas_response.py index fb46c521..aefe629f 100644 --- a/src/types/organization_get_personas_response.py +++ b/src/profound/types/organization_get_personas_response.py @@ -3,15 +3,15 @@ from typing import List from .._models import BaseModel + from .persona_profile import PersonaProfile from .category import Category from .organization import Organization -__all__ = ["OrganizationGetPersonasResponse", "OrganizationPersonasWithCategory"] - +__all__ = ["OrganizationGetPersonasResponse", "Data"] -class OrganizationPersonasWithCategory(BaseModel): +class Data(BaseModel): id: str name: str @@ -23,7 +23,5 @@ class OrganizationPersonasWithCategory(BaseModel): organization: Organization - class OrganizationGetPersonasResponse(BaseModel): - - data: List[OrganizationPersonasWithCategory] + data: List[Data] diff --git a/src/types/organization_list_assets_params.py b/src/profound/types/organization_list_assets_params.py similarity index 81% rename from src/types/organization_list_assets_params.py rename to src/profound/types/organization_list_assets_params.py index 230e8df1..238073e9 100644 --- a/src/types/organization_list_assets_params.py +++ b/src/profound/types/organization_list_assets_params.py @@ -2,13 +2,13 @@ from __future__ import annotations -from typing import Iterable, Optional +from typing import Optional from typing_extensions import TypedDict +from .._types import SequenceNotStr __all__ = ["OrganizationListAssetsParams"] class OrganizationListAssetsParams(TypedDict, total=False): - - organization_ids: Optional[Iterable[str]] + organization_ids: Optional[SequenceNotStr[str]] """Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to.""" diff --git a/src/types/organization_list_assets_response.py b/src/profound/types/organization_list_assets_response.py similarity index 76% rename from src/types/organization_list_assets_response.py rename to src/profound/types/organization_list_assets_response.py index 2bd7d176..4adcdf89 100644 --- a/src/types/organization_list_assets_response.py +++ b/src/profound/types/organization_list_assets_response.py @@ -4,14 +4,14 @@ from datetime import datetime from .._models import BaseModel + from .category import Category from .organization import Organization -__all__ = ["OrganizationListAssetsResponse", "CategoryAssetWithCategory"] - +__all__ = ["OrganizationListAssetsResponse", "Data"] -class CategoryAssetWithCategory(BaseModel): +class Data(BaseModel): id: str name: str @@ -31,7 +31,5 @@ class CategoryAssetWithCategory(BaseModel): organization: Organization - class OrganizationListAssetsResponse(BaseModel): - - data: List[CategoryAssetWithCategory] + data: List[Data] diff --git a/src/types/organization_list_response.py b/src/profound/types/organization_list_response.py similarity index 99% rename from src/types/organization_list_response.py rename to src/profound/types/organization_list_response.py index e4025734..3ed8dbb0 100644 --- a/src/types/organization_list_response.py +++ b/src/profound/types/organization_list_response.py @@ -2,6 +2,7 @@ from typing import List from typing_extensions import TypeAlias + from .organization import Organization __all__ = ["OrganizationListResponse"] diff --git a/src/types/organization_models_response.py b/src/profound/types/organization_models_response.py similarity index 99% rename from src/types/organization_models_response.py rename to src/profound/types/organization_models_response.py index 238dc6fa..39b428b2 100644 --- a/src/types/organization_models_response.py +++ b/src/profound/types/organization_models_response.py @@ -2,6 +2,7 @@ from typing import List from typing_extensions import TypeAlias + from .named_resource import NamedResource __all__ = ["OrganizationModelsResponse"] diff --git a/src/types/organization_regions_params.py b/src/profound/types/organization_regions_params.py similarity index 81% rename from src/types/organization_regions_params.py rename to src/profound/types/organization_regions_params.py index 4a3233c5..d9ddfad5 100644 --- a/src/types/organization_regions_params.py +++ b/src/profound/types/organization_regions_params.py @@ -2,13 +2,13 @@ from __future__ import annotations -from typing import Iterable, Optional +from typing import Optional from typing_extensions import TypedDict +from .._types import SequenceNotStr __all__ = ["OrganizationRegionsParams"] class OrganizationRegionsParams(TypedDict, total=False): - - organization_ids: Optional[Iterable[str]] + organization_ids: Optional[SequenceNotStr[str]] """Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to.""" diff --git a/src/types/organization_regions_response.py b/src/profound/types/organization_regions_response.py similarity index 99% rename from src/types/organization_regions_response.py rename to src/profound/types/organization_regions_response.py index 57685c73..a5678a9d 100644 --- a/src/types/organization_regions_response.py +++ b/src/profound/types/organization_regions_response.py @@ -2,6 +2,7 @@ from typing import List from typing_extensions import TypeAlias + from .named_resource import NamedResource __all__ = ["OrganizationRegionsResponse"] diff --git a/src/types/organizations/__init__.py b/src/profound/types/organizations/__init__.py similarity index 75% rename from src/types/organizations/__init__.py rename to src/profound/types/organizations/__init__.py index 231452ac..1772946c 100644 --- a/src/types/organizations/__init__.py +++ b/src/profound/types/organizations/__init__.py @@ -2,22 +2,24 @@ from __future__ import annotations -from .create_prompts_body import CreatePromptsBody as CreatePromptsBody from .field_diff import FieldDiff as FieldDiff -from .id_or_name import IdOrName as IdOrName from .named_resource_diff_list import NamedResourceDiffList as NamedResourceDiffList -from .update_prompts_body import UpdatePromptsBody as UpdatePromptsBody +from .id_or_name_param import IDOrNameParam as IDOrNameParam from .category_list_response import CategoryListResponse as CategoryListResponse from .category_list_params import CategoryListParams as CategoryListParams from .category_topics_response import CategoryTopicsResponse as CategoryTopicsResponse from .category_tags_response import CategoryTagsResponse as CategoryTagsResponse from .category_prompts_response import CategoryPromptsResponse as CategoryPromptsResponse from .category_prompts_params import CategoryPromptsParams as CategoryPromptsParams +from .category_assets_response import CategoryAssetsResponse as CategoryAssetsResponse +from .category_get_category_personas_response import ( + CategoryGetCategoryPersonasResponse as CategoryGetCategoryPersonasResponse, +) from .category_create_prompts_response import CategoryCreatePromptsResponse as CategoryCreatePromptsResponse from .category_create_prompts_params import CategoryCreatePromptsParams as CategoryCreatePromptsParams from .category_update_prompts_response import CategoryUpdatePromptsResponse as CategoryUpdatePromptsResponse from .category_update_prompts_params import CategoryUpdatePromptsParams as CategoryUpdatePromptsParams -from .category_update_prompt_status_response import CategoryUpdatePromptStatusResponse as CategoryUpdatePromptStatusResponse +from .category_update_prompt_status_response import ( + CategoryUpdatePromptStatusResponse as CategoryUpdatePromptStatusResponse, +) from .category_update_prompt_status_params import CategoryUpdatePromptStatusParams as CategoryUpdatePromptStatusParams -from .category_assets_response import CategoryAssetsResponse as CategoryAssetsResponse -from .category_get_category_personas_response import CategoryGetCategoryPersonasResponse as CategoryGetCategoryPersonasResponse diff --git a/src/types/organizations/category_assets_response.py b/src/profound/types/organizations/category_assets_response.py similarity index 67% rename from src/types/organizations/category_assets_response.py rename to src/profound/types/organizations/category_assets_response.py index a095681f..53d6c424 100644 --- a/src/types/organizations/category_assets_response.py +++ b/src/profound/types/organizations/category_assets_response.py @@ -3,12 +3,13 @@ from typing import List, Optional from datetime import datetime from typing_extensions import TypeAlias + from ..._models import BaseModel -__all__ = ["CategoryAssetsResponse", "CategoryAsset"] +__all__ = ["CategoryAssetsResponse", "CategoryAssetsResponseItem"] -class CategoryAsset(BaseModel): +class CategoryAssetsResponseItem(BaseModel): id: str name: str @@ -24,5 +25,4 @@ class CategoryAsset(BaseModel): logo_url: str - -CategoryAssetsResponse: TypeAlias = List[CategoryAsset] +CategoryAssetsResponse: TypeAlias = List[CategoryAssetsResponseItem] diff --git a/src/types/organizations/category_create_prompts_params.py b/src/profound/types/organizations/category_create_prompts_params.py similarity index 57% rename from src/types/organizations/category_create_prompts_params.py rename to src/profound/types/organizations/category_create_prompts_params.py index 40e2daa3..06abe4c5 100644 --- a/src/types/organizations/category_create_prompts_params.py +++ b/src/profound/types/organizations/category_create_prompts_params.py @@ -2,50 +2,54 @@ from __future__ import annotations -from typing import Iterable, Optional +from typing import Iterable, List, Optional from typing_extensions import Literal, Required, TypedDict -__all__ = ["CategoryCreatePromptsParams", "CreatePromptInput"] +from .id_or_name_param import IDOrNameParam +__all__ = ["CategoryCreatePromptsParams", "Prompt"] -class CategoryCreatePromptsParams(TypedDict, total=False): - prompts: Required[Iterable[CreatePromptInput]] +class CategoryCreatePromptsParams(TypedDict, total=False): + prompts: Required[Iterable[Prompt]] """List of prompts to create.""" dry_run: bool """When true, validate and preview changes without persisting them.""" -class CreatePromptInput(TypedDict, total=False): +class Prompt(TypedDict, total=False): + """A single prompt to create within a category.""" + + id: Optional[str] + """Optional client-generated UUID for the prompt. When provided, creation is idempotent: retrying a request with the same id will not create a duplicate prompt. Omit to have the server generate one (non-idempotent).""" prompt: Required[str] """The prompt text to be sent to AI platforms.""" - topic: Required[object] + topic: Required[IDOrNameParam] """Topic to assign. A new topic is created if the name doesn't exist.""" language: Required[str] """Language code (e.g. 'en-US')""" - tags: Iterable[object] + tags: Iterable[IDOrNameParam] """Tags to assign. New tags are created if names don't exist.""" - regions: Required[Iterable[object]] + regions: Required[Iterable[IDOrNameParam]] """Regions where the prompt will be collected.""" - platforms: Required[Iterable[object]] + platforms: Required[Iterable[IDOrNameParam]] """AI platforms where the prompt will be collected.""" - personas: Iterable[object] + personas: Iterable[IDOrNameParam] """Personas to use when collecting. Omit for default (no persona).""" - analysis_types: Optional[Iterable[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]]] + analysis_types: Optional[List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]]] """Analysis types: 'visibility', 'sentiment', 'accuracy'. Defaults to ['visibility'].""" prompt_type: Optional[str] """Deprecated. Use analysis_types instead. 'Visibility' or 'Sentiment'.""" - asset: Optional[object] + asset: Optional[IDOrNameParam] """Required for Sentiment prompts. The brand asset to evaluate.""" - diff --git a/src/types/organizations/category_create_prompts_response.py b/src/profound/types/organizations/category_create_prompts_response.py similarity index 90% rename from src/types/organizations/category_create_prompts_response.py rename to src/profound/types/organizations/category_create_prompts_response.py index 7eaa159f..d6dae07a 100644 --- a/src/types/organizations/category_create_prompts_response.py +++ b/src/profound/types/organizations/category_create_prompts_response.py @@ -4,13 +4,13 @@ from typing_extensions import Literal from ..._models import BaseModel -from ..named_resource import NamedResource -__all__ = ["CategoryCreatePromptsResponse", "PromptPreview"] +from ..named_resource import NamedResource +__all__ = ["CategoryCreatePromptsResponse", "Prompt"] -class PromptPreview(BaseModel): +class Prompt(BaseModel): id: str """Generated prompt ID.""" @@ -42,9 +42,7 @@ class PromptPreview(BaseModel): """Resolved asset, if applicable.""" - class CategoryCreatePromptsResponse(BaseModel): - dry_run: bool """Whether this was a dry run (no changes persisted).""" @@ -57,5 +55,5 @@ class CategoryCreatePromptsResponse(BaseModel): tags_created: Optional[int] = None """Number of new tags created.""" - prompts: Optional[List[PromptPreview]] = None + prompts: Optional[List[Prompt]] = None """List of created (or previewed) prompts with resolved references.""" diff --git a/src/types/organizations/category_get_category_personas_response.py b/src/profound/types/organizations/category_get_category_personas_response.py similarity index 68% rename from src/types/organizations/category_get_category_personas_response.py rename to src/profound/types/organizations/category_get_category_personas_response.py index feed8a9b..dc85fad6 100644 --- a/src/types/organizations/category_get_category_personas_response.py +++ b/src/profound/types/organizations/category_get_category_personas_response.py @@ -3,13 +3,13 @@ from typing import List from ..._models import BaseModel -from ..persona_profile import PersonaProfile -__all__ = ["CategoryGetCategoryPersonasResponse", "CategoryPersona"] +from ..persona_profile import PersonaProfile +__all__ = ["CategoryGetCategoryPersonasResponse", "Data"] -class CategoryPersona(BaseModel): +class Data(BaseModel): id: str name: str @@ -17,7 +17,5 @@ class CategoryPersona(BaseModel): persona: PersonaProfile - class CategoryGetCategoryPersonasResponse(BaseModel): - - data: List[CategoryPersona] + data: List[Data] diff --git a/src/types/organizations/category_list_params.py b/src/profound/types/organizations/category_list_params.py similarity index 80% rename from src/types/organizations/category_list_params.py rename to src/profound/types/organizations/category_list_params.py index b6978533..a577f519 100644 --- a/src/types/organizations/category_list_params.py +++ b/src/profound/types/organizations/category_list_params.py @@ -2,13 +2,13 @@ from __future__ import annotations -from typing import Iterable, Optional +from typing import Optional from typing_extensions import TypedDict +from ..._types import SequenceNotStr __all__ = ["CategoryListParams"] class CategoryListParams(TypedDict, total=False): - - organization_ids: Optional[Iterable[str]] + organization_ids: Optional[SequenceNotStr[str]] """Restrict results to one or more organizations the caller belongs to. Repeat the parameter to target multiple orgs (e.g. `?organization_ids=&organization_ids=`). Omit to return data from every organization the caller has access to.""" diff --git a/src/types/organizations/category_list_response.py b/src/profound/types/organizations/category_list_response.py similarity index 51% rename from src/types/organizations/category_list_response.py rename to src/profound/types/organizations/category_list_response.py index 46e85803..6575ce29 100644 --- a/src/types/organizations/category_list_response.py +++ b/src/profound/types/organizations/category_list_response.py @@ -1,20 +1,23 @@ # File generated from our OpenAPI spec by Scalar. See README.md for details. -from typing import List +from typing import List, Optional from typing_extensions import TypeAlias + from ..._models import BaseModel + from ..organization import Organization -__all__ = ["CategoryListResponse", "CategoryWithOrganization"] +__all__ = ["CategoryListResponse", "CategoryListResponseItem"] -class CategoryWithOrganization(BaseModel): +class CategoryListResponseItem(BaseModel): id: str name: str - organization: Organization + internal_name: Optional[str] = None + organization: Organization -CategoryListResponse: TypeAlias = List[CategoryWithOrganization] +CategoryListResponse: TypeAlias = List[CategoryListResponseItem] diff --git a/src/types/organizations/category_prompts_params.py b/src/profound/types/organizations/category_prompts_params.py similarity index 57% rename from src/types/organizations/category_prompts_params.py rename to src/profound/types/organizations/category_prompts_params.py index 4e91ae98..0fa5309e 100644 --- a/src/types/organizations/category_prompts_params.py +++ b/src/profound/types/organizations/category_prompts_params.py @@ -2,43 +2,46 @@ from __future__ import annotations -from typing import Iterable, Optional +from typing import List, Optional from typing_extensions import Literal, TypedDict +from ..._types import SequenceNotStr __all__ = ["CategoryPromptsParams"] class CategoryPromptsParams(TypedDict, total=False): - limit: int """Maximum number of prompts to return.""" cursor: Optional[str] """Pagination cursor from a previous response.""" + order_by: Literal["created_at", "prompt"] + """Field used to order prompts.""" + order_dir: Literal["asc", "desc"] - """Sort direction by creation date.""" + """Sort direction for the selected order field.""" - analysis_type: Iterable[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]] + analysis_type: List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]] """Filter by analysis type (visibility, sentiment, accuracy).""" - prompt_type: Iterable[Literal["visibility", "sentiment"]] + prompt_type: List[Literal["visibility", "sentiment"]] """Deprecated. Use analysis_type instead.""" - status: Iterable[Literal["active", "disabled"]] + status: List[Literal["active", "disabled"]] """Filter by prompt status. Defaults to `active` only.""" - topic_id: Iterable[str] + topic_id: SequenceNotStr[str] """Filter by topic IDs.""" - tag_id: Iterable[str] + tag_id: SequenceNotStr[str] """Filter by tag IDs.""" - region_id: Iterable[str] + region_id: SequenceNotStr[str] """Filter by region IDs.""" - platform_id: Iterable[str] + platform_id: SequenceNotStr[str] """Filter by platform IDs.""" - persona_id: Iterable[str] + persona_id: SequenceNotStr[str] """Filter by persona IDs.""" diff --git a/src/types/organizations/category_prompts_response.py b/src/profound/types/organizations/category_prompts_response.py similarity index 84% rename from src/types/organizations/category_prompts_response.py rename to src/profound/types/organizations/category_prompts_response.py index 448c9cec..77c27366 100644 --- a/src/types/organizations/category_prompts_response.py +++ b/src/profound/types/organizations/category_prompts_response.py @@ -5,13 +5,13 @@ from typing_extensions import Literal from ..._models import BaseModel -from ..named_resource import NamedResource -__all__ = ["CategoryPromptsResponse", "PaginationInfo", "Prompt"] +from ..named_resource import NamedResource +__all__ = ["CategoryPromptsResponse", "Info", "Data"] -class Prompt(BaseModel): +class Data(BaseModel): id: str analysis_types: Optional[List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]]] = None @@ -39,8 +39,8 @@ class Prompt(BaseModel): updated_at: datetime -class PaginationInfo(BaseModel): +class Info(BaseModel): total_rows: int limit: int @@ -48,9 +48,7 @@ class PaginationInfo(BaseModel): next_cursor: Optional[str] = None - class CategoryPromptsResponse(BaseModel): + info: Info - info: PaginationInfo - - data: List[Prompt] + data: List[Data] diff --git a/src/types/organizations/category_tags_response.py b/src/profound/types/organizations/category_tags_response.py similarity index 54% rename from src/types/organizations/category_tags_response.py rename to src/profound/types/organizations/category_tags_response.py index 1d10331f..3806eb16 100644 --- a/src/types/organizations/category_tags_response.py +++ b/src/profound/types/organizations/category_tags_response.py @@ -2,16 +2,16 @@ from typing import List from typing_extensions import TypeAlias + from ..._models import BaseModel -__all__ = ["CategoryTagsResponse", "Tag"] +__all__ = ["CategoryTagsResponse", "CategoryTagsResponseItem"] -class Tag(BaseModel): +class CategoryTagsResponseItem(BaseModel): id: str name: str - -CategoryTagsResponse: TypeAlias = List[Tag] +CategoryTagsResponse: TypeAlias = List[CategoryTagsResponseItem] diff --git a/src/types/organizations/category_topics_response.py b/src/profound/types/organizations/category_topics_response.py similarity index 58% rename from src/types/organizations/category_topics_response.py rename to src/profound/types/organizations/category_topics_response.py index dda5c3bd..da6ffe53 100644 --- a/src/types/organizations/category_topics_response.py +++ b/src/profound/types/organizations/category_topics_response.py @@ -2,12 +2,13 @@ from typing import List from typing_extensions import Literal, TypeAlias + from ..._models import BaseModel -__all__ = ["CategoryTopicsResponse", "Topic"] +__all__ = ["CategoryTopicsResponse", "CategoryTopicsResponseItem"] -class Topic(BaseModel): +class CategoryTopicsResponseItem(BaseModel): id: str name: str @@ -15,5 +16,4 @@ class Topic(BaseModel): status: Literal["active", "disabled"] - -CategoryTopicsResponse: TypeAlias = List[Topic] +CategoryTopicsResponse: TypeAlias = List[CategoryTopicsResponseItem] diff --git a/src/types/organizations/category_update_prompt_status_params.py b/src/profound/types/organizations/category_update_prompt_status_params.py similarity index 86% rename from src/types/organizations/category_update_prompt_status_params.py rename to src/profound/types/organizations/category_update_prompt_status_params.py index 7ac9c8ba..3c95ced6 100644 --- a/src/types/organizations/category_update_prompt_status_params.py +++ b/src/profound/types/organizations/category_update_prompt_status_params.py @@ -2,15 +2,14 @@ from __future__ import annotations -from typing import Iterable from typing_extensions import Literal, Required, TypedDict +from ..._types import SequenceNotStr __all__ = ["CategoryUpdatePromptStatusParams"] class CategoryUpdatePromptStatusParams(TypedDict, total=False): - - prompt_ids: Required[Iterable[str]] + prompt_ids: Required[SequenceNotStr[str]] """IDs of the prompts to update.""" status: Required[Literal["active", "disabled", "deleted"]] diff --git a/src/types/organizations/category_update_prompt_status_response.py b/src/profound/types/organizations/category_update_prompt_status_response.py similarity index 99% rename from src/types/organizations/category_update_prompt_status_response.py rename to src/profound/types/organizations/category_update_prompt_status_response.py index 0d62603f..1266a5d8 100644 --- a/src/types/organizations/category_update_prompt_status_response.py +++ b/src/profound/types/organizations/category_update_prompt_status_response.py @@ -8,7 +8,6 @@ class CategoryUpdatePromptStatusResponse(BaseModel): - dry_run: bool """Whether this was a dry run (no changes persisted).""" diff --git a/src/types/organizations/category_update_prompts_params.py b/src/profound/types/organizations/category_update_prompts_params.py similarity index 63% rename from src/types/organizations/category_update_prompts_params.py rename to src/profound/types/organizations/category_update_prompts_params.py index 6a1564e5..dcbd5b8e 100644 --- a/src/types/organizations/category_update_prompts_params.py +++ b/src/profound/types/organizations/category_update_prompts_params.py @@ -2,22 +2,24 @@ from __future__ import annotations -from typing import Iterable, Optional +from typing import Iterable, List, Optional from typing_extensions import Literal, Required, TypedDict -__all__ = ["CategoryUpdatePromptsParams", "UpdatePromptInput"] +from .id_or_name_param import IDOrNameParam +__all__ = ["CategoryUpdatePromptsParams", "Prompt"] -class CategoryUpdatePromptsParams(TypedDict, total=False): - prompts: Required[Iterable[UpdatePromptInput]] +class CategoryUpdatePromptsParams(TypedDict, total=False): + prompts: Required[Iterable[Prompt]] """List of prompt updates. Each entry must include an `id` and at least one field to change.""" dry_run: bool """When true, validate and preview changes without persisting them.""" -class UpdatePromptInput(TypedDict, total=False): +class Prompt(TypedDict, total=False): + """Fields to update on an existing prompt. Only provided fields are changed; omitted fields are left unchanged.""" id: Required[str] """ID of the prompt to update.""" @@ -25,30 +27,29 @@ class UpdatePromptInput(TypedDict, total=False): prompt: Optional[str] """New prompt text.""" - topic: Optional[object] + topic: Optional[IDOrNameParam] """New topic. A new topic is created if the name doesn't exist.""" language: Optional[str] """New language code. Must be enabled for the organization.""" - tags: Optional[Iterable[object]] + tags: Optional[Iterable[IDOrNameParam]] """New tag set. Replaces all existing tags on the prompt.""" - regions: Optional[Iterable[object]] + regions: Optional[Iterable[IDOrNameParam]] """New region set. Replaces all existing regions.""" - platforms: Optional[Iterable[object]] + platforms: Optional[Iterable[IDOrNameParam]] """New platform set. Replaces all existing platforms.""" - personas: Optional[Iterable[object]] + personas: Optional[Iterable[IDOrNameParam]] """New persona set. Replaces all existing personas.""" - analysis_types: Optional[Iterable[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]]] + analysis_types: Optional[List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]]] """New analysis types. Replaces all existing analysis types on the prompt.""" prompt_type: Optional[str] """Deprecated. Use analysis_types instead.""" - asset: Optional[object] + asset: Optional[IDOrNameParam] """Asset reference. Required when analysis_types includes 'sentiment'.""" - diff --git a/src/types/organizations/category_update_prompts_response.py b/src/profound/types/organizations/category_update_prompts_response.py similarity index 89% rename from src/types/organizations/category_update_prompts_response.py rename to src/profound/types/organizations/category_update_prompts_response.py index 31bd7566..4250203b 100644 --- a/src/types/organizations/category_update_prompts_response.py +++ b/src/profound/types/organizations/category_update_prompts_response.py @@ -3,14 +3,14 @@ from typing import List, Optional from ..._models import BaseModel + from .field_diff import FieldDiff from .named_resource_diff_list import NamedResourceDiffList -__all__ = ["CategoryUpdatePromptsResponse", "PromptUpdatePreview"] - +__all__ = ["CategoryUpdatePromptsResponse", "Prompt"] -class PromptUpdatePreview(BaseModel): +class Prompt(BaseModel): id: str """ID of the updated prompt.""" @@ -42,9 +42,7 @@ class PromptUpdatePreview(BaseModel): """Asset diff.""" - class CategoryUpdatePromptsResponse(BaseModel): - dry_run: bool """Whether this was a dry run (no changes persisted).""" @@ -57,5 +55,5 @@ class CategoryUpdatePromptsResponse(BaseModel): tags_created: Optional[int] = None """Number of new tags created.""" - prompts: Optional[List[PromptUpdatePreview]] = None + prompts: Optional[List[Prompt]] = None """List of prompts with their change diffs.""" diff --git a/src/types/organizations/field_diff.py b/src/profound/types/organizations/field_diff.py similarity index 82% rename from src/types/organizations/field_diff.py rename to src/profound/types/organizations/field_diff.py index daa283b4..4926ce2b 100644 --- a/src/types/organizations/field_diff.py +++ b/src/profound/types/organizations/field_diff.py @@ -10,8 +10,8 @@ class FieldDiff(BaseModel): """Shows the old and new value for a changed field.""" - old: Optional[str] = None + old: Optional[object] = None """Previous value.""" - new: Optional[str] = None + new: Optional[object] = None """New value.""" diff --git a/src/profound/types/organizations/id_or_name_param.py b/src/profound/types/organizations/id_or_name_param.py new file mode 100644 index 00000000..e9f85e57 --- /dev/null +++ b/src/profound/types/organizations/id_or_name_param.py @@ -0,0 +1,16 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Optional +from typing_extensions import TypedDict + +__all__ = ["IDOrNameParam"] + + +class IDOrNameParam(TypedDict, total=False): + id: Optional[str] + """UUID of the resource.""" + + name: Optional[str] + """Display name of the resource.""" diff --git a/src/types/organizations/named_resource_diff_list.py b/src/profound/types/organizations/named_resource_diff_list.py similarity index 99% rename from src/types/organizations/named_resource_diff_list.py rename to src/profound/types/organizations/named_resource_diff_list.py index 8b075823..19d1a211 100644 --- a/src/types/organizations/named_resource_diff_list.py +++ b/src/profound/types/organizations/named_resource_diff_list.py @@ -3,6 +3,7 @@ from typing import List, Optional from ..._models import BaseModel + from ..named_resource import NamedResource __all__ = ["NamedResourceDiffList"] diff --git a/src/types/persona_profile.py b/src/profound/types/persona_profile.py similarity index 99% rename from src/types/persona_profile.py rename to src/profound/types/persona_profile.py index 899d5d3d..03beb13e 100644 --- a/src/types/persona_profile.py +++ b/src/profound/types/persona_profile.py @@ -1,7 +1,7 @@ # File generated from our OpenAPI spec by Scalar. See README.md for details. - from .._models import BaseModel + from .persona_profile_behavior import PersonaProfileBehavior from .persona_profile_employment import PersonaProfileEmployment from .persona_profile_demographics import PersonaProfileDemographics @@ -10,7 +10,6 @@ class PersonaProfile(BaseModel): - behavior: PersonaProfileBehavior employment: PersonaProfileEmployment diff --git a/src/types/persona_profile_behavior.py b/src/profound/types/persona_profile_behavior.py similarity index 99% rename from src/types/persona_profile_behavior.py rename to src/profound/types/persona_profile_behavior.py index 3398aed2..2a2bd1b7 100644 --- a/src/types/persona_profile_behavior.py +++ b/src/profound/types/persona_profile_behavior.py @@ -10,7 +10,6 @@ class PersonaProfileBehavior(BaseModel): - pain_points: Optional[str] = FieldInfo(alias="painPoints", default=None) motivations: Optional[str] = None diff --git a/src/types/persona_profile_demographics.py b/src/profound/types/persona_profile_demographics.py similarity index 99% rename from src/types/persona_profile_demographics.py rename to src/profound/types/persona_profile_demographics.py index 2b62e78e..d4645ad9 100644 --- a/src/types/persona_profile_demographics.py +++ b/src/profound/types/persona_profile_demographics.py @@ -10,5 +10,4 @@ class PersonaProfileDemographics(BaseModel): - age_range: Optional[List[str]] = FieldInfo(alias="ageRange", default=None) diff --git a/src/types/persona_profile_employment.py b/src/profound/types/persona_profile_employment.py similarity index 99% rename from src/types/persona_profile_employment.py rename to src/profound/types/persona_profile_employment.py index 882b6dba..6bf07bdb 100644 --- a/src/types/persona_profile_employment.py +++ b/src/profound/types/persona_profile_employment.py @@ -10,7 +10,6 @@ class PersonaProfileEmployment(BaseModel): - industry: Optional[List[str]] = None job_title: Optional[List[str]] = FieldInfo(alias="jobTitle", default=None) diff --git a/src/profound/types/prompt_answers_params.py b/src/profound/types/prompt_answers_params.py new file mode 100644 index 00000000..0a143fff --- /dev/null +++ b/src/profound/types/prompt_answers_params.py @@ -0,0 +1,134 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Iterable, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypeAlias, TypedDict +from .._types import SequenceNotStr + +from .._utils import PropertyInfo + +from .shared_params.pagination import Pagination +from .shared_params.region_id_filter import RegionIDFilter +from .shared_params.region_name_filter import RegionNameFilter +from .shared_params.model_id_filter import ModelIDFilter +from .shared_params.tag_id_filter import TagIDFilter +from .shared_params.analysis_type_filter import AnalysisTypeFilter +from .shared_params.prompt_type_filter import PromptTypeFilter +from .shared_params.prompt_filter import PromptFilter +from .prompt_id_filter_param import PromptIDFilterParam +from .shared_params.persona_id_filter import PersonaIDFilter +from .shared_params.topic_id_filter import TopicIDFilter +from .shared_params.asset_id_filter import AssetIDFilter + +__all__ = ["PromptAnswersParams", "Filter", "FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter", "Include"] + + +class PromptAnswersParams(TypedDict, total=False): + category_id: Required[str] + + start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + + end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + + pagination: Pagination + """Pagination parameters for the results. Default is 10,000 rows with no offset.""" + + filters: Iterable[Filter] + """List of filters to apply to the answers report.""" + + include: Include + + +class Include(TypedDict, total=False): + run_id: bool + + created_at: bool + + prompt: bool + + prompt_id: bool + + mentions: bool + + analysis_types: bool + + prompt_type: bool + + response: bool + + citations: bool + + citation_details: bool + + web_search_results: bool + + search_triggered: bool + + themes: bool + """Use 'sentiment_themes' instead""" + + sentiment_themes: bool + """Uses legacy sentiment data.""" + + topic: bool + + topic_id: bool + + region: bool + + model: bool + + model_id: bool + + asset: bool + + asset_id: bool + + tags: bool + + search_queries: bool + + persona: bool + + +class FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter(TypedDict, total=False): + """Filter by asset name""" + + field: Required[Literal["asset_name"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] + + +Filter: TypeAlias = Annotated[ + Union[ + RegionIDFilter, + RegionNameFilter, + ModelIDFilter, + TagIDFilter, + AnalysisTypeFilter, + PromptTypeFilter, + PromptFilter, + PromptIDFilterParam, + PersonaIDFilter, + TopicIDFilter, + AssetIDFilter, + FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter, + ], + PropertyInfo(discriminator="field"), +] diff --git a/src/types/prompts/answer_create_v1_prompts_post_response.py b/src/profound/types/prompt_answers_response.py similarity index 63% rename from src/types/prompts/answer_create_v1_prompts_post_response.py rename to src/profound/types/prompt_answers_response.py index 6582c518..325b15a4 100644 --- a/src/types/prompts/answer_create_v1_prompts_post_response.py +++ b/src/profound/types/prompt_answers_response.py @@ -2,29 +2,37 @@ from __future__ import annotations -from typing import List, Optional, Union +from typing import List, Optional from datetime import datetime from typing_extensions import Literal -from ..._models import BaseModel +from pydantic import Field as FieldInfo -__all__ = ["AnswerCreateV1PromptsPostResponse", "AnswersResponseInfo", "AnswersRawData", "CitationDetail", "CitationDetailGroup", "SentimentTheme"] +from .._models import BaseModel +__all__ = [ + "PromptAnswersResponse", + "Info", + "Data", + "DataCitationDetail", + "DataCitationDetailGroup", + "DataSentimentTheme", +] -class SentimentTheme(BaseModel): - type: Union[Literal["positive"], Literal["negative"]] +class DataSentimentTheme(BaseModel): + type: Literal["positive", "negative"] name: str -class CitationDetailGroup(BaseModel): +class DataCitationDetailGroup(BaseModel): group_id: int group_position: int -class CitationDetail(BaseModel): +class DataCitationDetail(BaseModel): url: str clean_url: str @@ -41,12 +49,12 @@ class CitationDetail(BaseModel): positions: Optional[List[int]] = None - groups: Optional[List[CitationDetailGroup]] = None + groups: Optional[List[DataCitationDetailGroup]] = None citation_category: Optional[str] = None -class AnswersRawData(BaseModel): +class Data(BaseModel): run_id: Optional[str] = None created_at: Optional[datetime] = None @@ -65,7 +73,7 @@ class AnswersRawData(BaseModel): citations: Optional[List[str]] = None - citation_details: Optional[List[CitationDetail]] = None + citation_details: Optional[List[DataCitationDetail]] = None web_search_results: Optional[List[str]] = None @@ -73,7 +81,7 @@ class AnswersRawData(BaseModel): themes: Optional[List[str]] = None - sentiment_themes: Optional[List[SentimentTheme]] = None + sentiment_themes: Optional[List[DataSentimentTheme]] = None """Uses legacy sentiment data.""" search_queries: Optional[List[str]] = None @@ -86,7 +94,7 @@ class AnswersRawData(BaseModel): model: Optional[str] = None - model_id: Optional[str] = None + api_model_id: Optional[str] = FieldInfo(alias="model_id", default=None) asset: Optional[str] = None @@ -96,14 +104,12 @@ class AnswersRawData(BaseModel): persona: Optional[str] = None -class AnswersResponseInfo(BaseModel): +class Info(BaseModel): total_rows: int +class PromptAnswersResponse(BaseModel): + info: Info -class AnswerCreateV1PromptsPostResponse(BaseModel): - - info: AnswersResponseInfo - - data: List[AnswersRawData] + data: List[Data] diff --git a/src/profound/types/prompt_id_filter_param.py b/src/profound/types/prompt_id_filter_param.py new file mode 100644 index 00000000..c63454b9 --- /dev/null +++ b/src/profound/types/prompt_id_filter_param.py @@ -0,0 +1,17 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Union +from typing_extensions import Literal, Required, TypedDict +from .._types import SequenceNotStr + +__all__ = ["PromptIDFilterParam"] + + +class PromptIDFilterParam(TypedDict, total=False): + field: Required[Literal["prompt_id"]] + + operator: Required[Literal["is", "not_is", "in", "not_in"]] + + value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/report_citations_params.py b/src/profound/types/report_citations_params.py new file mode 100644 index 00000000..7c4dba36 --- /dev/null +++ b/src/profound/types/report_citations_params.py @@ -0,0 +1,141 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, List, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypeAlias, TypedDict +from .._types import SequenceNotStr + +from .._utils import PropertyInfo + +from .shared_params.pagination import Pagination +from .hostname_filter_param import HostnameFilterParam +from .shared_params.path_filter import PathFilter +from .shared_params.region_id_filter import RegionIDFilter +from .shared_params.region_name_filter import RegionNameFilter +from .shared_params.topic_id_filter import TopicIDFilter +from .topic_name_filter_param import TopicNameFilterParam +from .shared_params.model_id_filter import ModelIDFilter +from .shared_params.tag_id_filter import TagIDFilter +from .tag_name_filter_param import TagNameFilterParam +from .url_filter_param import URLFilterParam +from .root_domain_filter_param import RootDomainFilterParam +from .shared_params.analysis_type_filter import AnalysisTypeFilter +from .shared_params.prompt_type_filter import PromptTypeFilter +from .shared_params.persona_id_filter import PersonaIDFilter +from .shared_params.prompt_filter import PromptFilter +from .prompt_id_filter_param import PromptIDFilterParam + +__all__ = ["ReportCitationsParams", "Filter", "FilterCitationCategoryFilter", "FilterMentionedFilter"] + + +class ReportCitationsParams(TypedDict, total=False): + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + """Date interval for the report. (only used with date dimension)""" + + dimensions: List[ + Literal[ + "hostname", + "path", + "date", + "region", + "topic", + "topic_id", + "model", + "tag", + "prompt", + "prompt_id", + "url", + "root_domain", + "persona", + "citation_category", + ] + ] + """Dimensions to group the report by.""" + + metrics: Required[List[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]]] + """Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead.""" + + order_by: Dict[str, Literal["asc", "desc"]] + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - `key` is the field to order by, which can be a metric or dimension + - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Pagination + """Pagination settings for the report results.""" + + category_id: Required[str] + + start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + filters: Iterable[Filter] + """List of filters to apply to the citations report.""" + + +class FilterMentionedFilter(TypedDict, total=False): + """Filter citation pages by whether they mention an owned category asset.""" + + field: Required[Literal["mentioned"]] + + operator: Required[Literal["is"]] + + value: Required[Union[bool, Iterable[bool]]] + + +class FilterCitationCategoryFilter(TypedDict, total=False): + """Filter by citation category""" + + field: Required[Literal["citation_category"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] + + +Filter: TypeAlias = Annotated[ + Union[ + HostnameFilterParam, + PathFilter, + RegionIDFilter, + RegionNameFilter, + TopicIDFilter, + TopicNameFilterParam, + ModelIDFilter, + TagIDFilter, + TagNameFilterParam, + URLFilterParam, + RootDomainFilterParam, + AnalysisTypeFilter, + PromptTypeFilter, + PersonaIDFilter, + FilterCitationCategoryFilter, + PromptFilter, + PromptIDFilterParam, + FilterMentionedFilter, + ], + PropertyInfo(discriminator="field"), +] diff --git a/src/profound/types/report_citations_response.py b/src/profound/types/report_citations_response.py new file mode 100644 index 00000000..b8bcd30e --- /dev/null +++ b/src/profound/types/report_citations_response.py @@ -0,0 +1,22 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Optional, Union + +from .._models import BaseModel + +from .report_info import ReportInfo + +__all__ = ["ReportCitationsResponse", "Data"] + + +class Data(BaseModel): + metrics: List[Optional[Union[float, str]]] + + dimensions: List[str] + + +class ReportCitationsResponse(BaseModel): + info: ReportInfo + """Base model for report information.""" + + data: List[Data] diff --git a/src/types/reports/bot_create_report_v1_v1_reports_post_params.py b/src/profound/types/report_get_bots_report_params.py similarity index 57% rename from src/types/reports/bot_create_report_v1_v1_reports_post_params.py rename to src/profound/types/report_get_bots_report_params.py index 7558fd90..0ba38cf0 100644 --- a/src/types/reports/bot_create_report_v1_v1_reports_post_params.py +++ b/src/profound/types/report_get_bots_report_params.py @@ -2,27 +2,28 @@ from __future__ import annotations -from typing import Dict, Iterable, Optional, Union +from typing import Dict, Iterable, List, Optional, Union from datetime import datetime -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..pagination import Pagination -from ..path_filter import PathFilter -from ..bot_name_filter import BotNameFilter -from ..bot_provider_filter import BotProviderFilter -from ..._utils import PropertyInfo +from typing_extensions import Annotated, Literal, Required, TypeAlias, TypedDict -__all__ = ["BotCreateReportV1V1ReportsPostParams", "NumericMetricFilter"] +from .._utils import PropertyInfo +from .shared_params.pagination import Pagination +from .shared_params.path_filter import PathFilter +from .shared_params.bot_name_filter import BotNameFilter +from .shared_params.bot_provider_filter import BotProviderFilter -class BotCreateReportV1V1ReportsPostParams(TypedDict, total=False): +__all__ = ["ReportGetBotsReportParams", "MetricFilter", "Filter"] + +class ReportGetBotsReportParams(TypedDict, total=False): date_interval: Literal["hour", "day", "week", "month", "year", "relative_week"] """Date interval for the report. (only used with date dimension)""" - dimensions: Iterable[Literal["date", "path", "bot_name", "bot_provider"]] + dimensions: List[Literal["date", "host", "path", "bot_name", "bot_provider"]] """Dimensions to group the report by.""" - metrics: Required[Iterable[Literal["count", "citations", "indexing", "training", "last_visit"]]] + metrics: Required[List[Literal["count", "citations", "indexing", "training", "last_visit"]]] order_by: Dict[str, Literal["asc", "desc"]] """ @@ -42,26 +43,27 @@ class BotCreateReportV1V1ReportsPostParams(TypedDict, total=False): domain: Required[str] """Domain to query logs for.""" - start_date: Required[Union[str, datetime]] + start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] """Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp.""" - end_date: Union[str, datetime] + end_date: Annotated[Union[str, datetime], PropertyInfo(format="iso8601")] """End date for logs. Accepts same formats as start_date. Defaults to now if omitted.""" organization_id: Optional[str] - metric_filters: Iterable[NumericMetricFilter] + metric_filters: Iterable[MetricFilter] """Numeric filters applied after report metrics are calculated.""" - filters: Iterable[Annotated[Union[PathFilter, BotNameFilter, BotProviderFilter], PropertyInfo(discriminator="field")]] + filters: Iterable[Filter] """Filters for bots report.""" -class NumericMetricFilter(TypedDict, total=False): +Filter: TypeAlias = Annotated[Union[PathFilter, BotNameFilter, BotProviderFilter], PropertyInfo(discriminator="field")] + +class MetricFilter(TypedDict, total=False): field: Required[str] operator: Required[Literal[">", ">=", "<", "<=", "=", "==", "!="]] - value: Required[Union[int, float]] - + value: Required[float] diff --git a/src/profound/types/report_get_bots_report_v2_params.py b/src/profound/types/report_get_bots_report_v2_params.py new file mode 100644 index 00000000..8ca0657f --- /dev/null +++ b/src/profound/types/report_get_bots_report_v2_params.py @@ -0,0 +1,107 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypeAlias, TypedDict +from .._types import SequenceNotStr + +from .._utils import PropertyInfo + +from .shared_params.pagination import Pagination +from .shared_params.path_filter import PathFilter +from .shared_params.bot_name_filter import BotNameFilter +from .shared_params.bot_provider_filter import BotProviderFilter + +__all__ = ["ReportGetBotsReportV2Params", "MetricFilter", "Filter", "FilterBotTypeFilter"] + + +class ReportGetBotsReportV2Params(TypedDict, total=False): + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + """Date interval for the report. (only used with date dimension)""" + + dimensions: List[Literal["date", "hour", "host", "path", "bot_name", "bot_provider", "bot_type"]] + """Dimensions to group the report by.""" + + metrics: Required[List[Literal["count", "citations", "indexing", "training", "last_visit", "agents"]]] + + order_by: Dict[str, Literal["asc", "desc"]] + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - key is the field to order by, which can be a metric or dimension + - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Pagination + """Pagination settings for the report results.""" + + domain: Required[str] + """Domain to query logs for.""" + + start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp.""" + + end_date: Annotated[Union[str, datetime], PropertyInfo(format="iso8601")] + """End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted.""" + + organization_id: Optional[str] + + timezone: str + """IANA timezone name for date bucketing and filter boundaries.""" + + metric_filters: Iterable[MetricFilter] + """Numeric filters applied after report metrics are calculated.""" + + filters: Iterable[Filter] + """Filters for bots report.""" + + domain_id: Optional[str] + """Domain UUID used for tag lookups.""" + + tags: SequenceNotStr[str] + + +class FilterBotTypeFilter(TypedDict, total=False): + """Filter by bot_type column (v2 hourly table only)""" + + field: Required[Literal["bot_type"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[ + Union[ + Literal["ai_assistant", "ai_training", "index", "ai_agent"], + List[Literal["ai_assistant", "ai_training", "index", "ai_agent"]], + ] + ] + + +Filter: TypeAlias = Annotated[ + Union[PathFilter, BotNameFilter, BotProviderFilter, FilterBotTypeFilter], PropertyInfo(discriminator="field") +] + + +class MetricFilter(TypedDict, total=False): + field: Required[str] + + operator: Required[Literal[">", ">=", "<", "<=", "=", "==", "!="]] + + value: Required[float] diff --git a/src/profound/types/report_get_referrals_report_params.py b/src/profound/types/report_get_referrals_report_params.py new file mode 100644 index 00000000..93738702 --- /dev/null +++ b/src/profound/types/report_get_referrals_report_params.py @@ -0,0 +1,93 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypeAlias, TypedDict +from .._types import SequenceNotStr + +from .._utils import PropertyInfo + +from .shared_params.pagination import Pagination +from .shared_params.path_filter import PathFilter + +__all__ = ["ReportGetReferralsReportParams", "MetricFilter", "Filter", "FilterReferralSourceFilter"] + + +class ReportGetReferralsReportParams(TypedDict, total=False): + date_interval: Literal["hour", "day", "week", "month", "year", "relative_week"] + """Date interval for the report. (only used with date dimension)""" + + dimensions: List[Literal["date", "host", "path", "referral_source"]] + """Dimensions to group the report by.""" + + metrics: Required[List[Literal["visits", "last_visit"]]] + + order_by: Dict[str, Literal["asc", "desc"]] + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - key is the field to order by, which can be a metric or dimension + - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Pagination + """Pagination settings for the report results.""" + + domain: Required[str] + """Domain to query logs for.""" + + start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp.""" + + end_date: Annotated[Union[str, datetime], PropertyInfo(format="iso8601")] + """End date for logs. Accepts same formats as start_date. Defaults to now if omitted.""" + + organization_id: Optional[str] + + metric_filters: Iterable[MetricFilter] + """Numeric filters applied after report metrics are calculated.""" + + filters: Iterable[Filter] + """Filters for referrals report.""" + + +class FilterReferralSourceFilter(TypedDict, total=False): + """ + Filter by referral source. Values are not enum-constrained so the platform's shared + provider filter can pass through IDs that have bot data but no referral data. + """ + + field: Required[Literal["referral_source"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] + + +Filter: TypeAlias = Annotated[Union[PathFilter, FilterReferralSourceFilter], PropertyInfo(discriminator="field")] + + +class MetricFilter(TypedDict, total=False): + field: Required[str] + + operator: Required[Literal[">", ">=", "<", "<=", "=", "==", "!="]] + + value: Required[float] diff --git a/src/profound/types/report_get_referrals_report_v2_params.py b/src/profound/types/report_get_referrals_report_v2_params.py new file mode 100644 index 00000000..f6d5ca1c --- /dev/null +++ b/src/profound/types/report_get_referrals_report_v2_params.py @@ -0,0 +1,128 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypeAlias, TypedDict +from .._types import SequenceNotStr + +from .._utils import PropertyInfo + +from .shared_params.pagination import Pagination +from .shared_params.path_filter import PathFilter + +__all__ = [ + "ReportGetReferralsReportV2Params", + "MetricFilter", + "Filter", + "FilterReferralSourceFilter", + "FilterReferralTypeFilter", +] + + +class ReportGetReferralsReportV2Params(TypedDict, total=False): + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + """Date interval for the report. (only used with date dimension)""" + + dimensions: List[Literal["date", "hour", "host", "path", "referral_source", "referral_type"]] + """Dimensions to group the report by.""" + + metrics: Required[List[Literal["visits", "last_visit"]]] + + order_by: Dict[str, Literal["asc", "desc"]] + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - key is the field to order by, which can be a metric or dimension + - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Pagination + """Pagination settings for the report results.""" + + domain: Required[str] + """Domain to query logs for.""" + + start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp.""" + + end_date: Annotated[Union[str, datetime], PropertyInfo(format="iso8601")] + """End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted.""" + + organization_id: Optional[str] + + timezone: str + """IANA timezone name for date bucketing and filter boundaries.""" + + metric_filters: Iterable[MetricFilter] + """Numeric filters applied after report metrics are calculated.""" + + filters: Iterable[Filter] + """Filters for referrals report.""" + + +class FilterReferralTypeFilter(TypedDict, total=False): + """Filter by referral type""" + + field: Required[Literal["referral_type"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[ + Union[Literal["internal", "referer", "utm", "none"], List[Literal["internal", "referer", "utm", "none"]]] + ] + + +class FilterReferralSourceFilter(TypedDict, total=False): + """ + Filter by referral source. Values are not enum-constrained so the platform's shared + provider filter can pass through IDs that have bot data but no referral data. + """ + + field: Required[Literal["referral_source"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] + + +Filter: TypeAlias = Annotated[ + Union[PathFilter, FilterReferralSourceFilter, FilterReferralTypeFilter], PropertyInfo(discriminator="field") +] + + +class MetricFilter(TypedDict, total=False): + field: Required[str] + + operator: Required[Literal[">", ">=", "<", "<=", "=", "==", "!="]] + + value: Required[float] diff --git a/src/types/report_info.py b/src/profound/types/report_info.py similarity index 61% rename from src/types/report_info.py rename to src/profound/types/report_info.py index 7d39dae6..1407d43b 100644 --- a/src/types/report_info.py +++ b/src/profound/types/report_info.py @@ -1,15 +1,10 @@ # File generated from our OpenAPI spec by Scalar. See README.md for details. -from typing import Optional +from typing import Dict, Optional from .._models import BaseModel -__all__ = ["ReportInfo", "Query"] - - -class Query(BaseModel): - pass - +__all__ = ["ReportInfo"] class ReportInfo(BaseModel): @@ -17,4 +12,4 @@ class ReportInfo(BaseModel): total_rows: int - query: Optional[Query] = None + query: Optional[Dict[str, object]] = None diff --git a/src/profound/types/report_query_fanouts_params.py b/src/profound/types/report_query_fanouts_params.py new file mode 100644 index 00000000..6f074500 --- /dev/null +++ b/src/profound/types/report_query_fanouts_params.py @@ -0,0 +1,66 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, List, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypeAlias, TypedDict + +from .._utils import PropertyInfo + +from .shared_params.pagination import Pagination +from .shared_params.region_id_filter import RegionIDFilter +from .shared_params.region_name_filter import RegionNameFilter +from .shared_params.model_id_filter import ModelIDFilter +from .shared_params.topic_id_filter import TopicIDFilter +from .shared_params.tag_id_filter import TagIDFilter +from .prompt_id_filter_param import PromptIDFilterParam +from .shared_params.persona_id_filter import PersonaIDFilter +from .shared_params.analysis_type_filter import AnalysisTypeFilter +from .shared_params.prompt_type_filter import PromptTypeFilter + +__all__ = ["ReportQueryFanoutsParams", "Filter"] + + +class ReportQueryFanoutsParams(TypedDict, total=False): + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + """Date interval for the report. (only used with date dimension)""" + + dimensions: List[Literal["prompt", "query", "model", "region", "date"]] + """Dimensions to group the report by.""" + + metrics: Required[List[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]]] + """Metrics to return for each row.""" + + order_by: Dict[str, Literal["asc", "desc"]] + """Custom ordering. Keys must be a requested metric or the ``date`` dimension. Values are ``asc`` or ``desc``. Defaults to first metric descending.""" + + pagination: Pagination + """Pagination settings for the report results.""" + + category_id: Required[str] + + start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + filters: Iterable[Filter] + """Filters to apply to the query fanout report.""" + + +Filter: TypeAlias = Annotated[ + Union[ + RegionIDFilter, + RegionNameFilter, + ModelIDFilter, + TopicIDFilter, + TagIDFilter, + PromptIDFilterParam, + PersonaIDFilter, + AnalysisTypeFilter, + PromptTypeFilter, + ], + PropertyInfo(discriminator="field"), +] diff --git a/src/types/report_response.py b/src/profound/types/report_response.py similarity index 99% rename from src/types/report_response.py rename to src/profound/types/report_response.py index 82ddeb92..d881cbad 100644 --- a/src/types/report_response.py +++ b/src/profound/types/report_response.py @@ -3,6 +3,7 @@ from typing import List from .._models import BaseModel + from .report_info import ReportInfo from .report_result import ReportResult diff --git a/src/types/report_result.py b/src/profound/types/report_result.py similarity index 88% rename from src/types/report_result.py rename to src/profound/types/report_result.py index da30d416..05ced1d2 100644 --- a/src/types/report_result.py +++ b/src/profound/types/report_result.py @@ -10,6 +10,6 @@ class ReportResult(BaseModel): """Base model for report results.""" - metrics: List[Union[int, float]] + metrics: List[Union[float, str]] dimensions: List[str] diff --git a/src/profound/types/report_sentiment_params.py b/src/profound/types/report_sentiment_params.py new file mode 100644 index 00000000..30c5ab87 --- /dev/null +++ b/src/profound/types/report_sentiment_params.py @@ -0,0 +1,144 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, List, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypeAlias, TypedDict +from .._types import SequenceNotStr + +from .._utils import PropertyInfo + +from .shared_params.pagination import Pagination +from .shared_params.asset_id_filter import AssetIDFilter +from .shared_params.region_id_filter import RegionIDFilter +from .shared_params.region_name_filter import RegionNameFilter +from .shared_params.topic_id_filter import TopicIDFilter +from .topic_name_filter_param import TopicNameFilterParam +from .shared_params.model_id_filter import ModelIDFilter +from .shared_params.tag_id_filter import TagIDFilter +from .tag_name_filter_param import TagNameFilterParam +from .shared_params.prompt_filter import PromptFilter +from .shared_params.persona_id_filter import PersonaIDFilter + +__all__ = [ + "ReportSentimentParams", + "Filter", + "FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter", + "FilterThemeFilter", +] + + +class ReportSentimentParams(TypedDict, total=False): + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + """Date interval for the report. (only used with date dimension)""" + + dimensions: List[ + Literal[ + "theme", + "date", + "region", + "topic", + "topic_id", + "model", + "asset_id", + "asset_name", + "tag", + "prompt", + "prompt_id", + "sentiment_type", + "persona", + ] + ] + """Dimensions to group the report by.""" + + metrics: Required[List[Literal["positive", "negative", "occurrences"]]] + + order_by: Dict[str, Literal["asc", "desc"]] + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - key is the field to order by, which can be a metric or dimension + - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Pagination + """Pagination settings for the report results.""" + + category_id: Required[str] + + start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + filters: Iterable[Filter] + """List of filters to apply to the sentiment report.""" + + +class FilterThemeFilter(TypedDict, total=False): + """Filter by theme""" + + field: Required[Literal["theme"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] + + +class FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter(TypedDict, total=False): + """Filter by asset name""" + + field: Required[Literal["asset_name"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] + + +Filter: TypeAlias = Annotated[ + Union[ + AssetIDFilter, + FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter, + FilterThemeFilter, + RegionIDFilter, + RegionNameFilter, + TopicIDFilter, + TopicNameFilterParam, + ModelIDFilter, + TagIDFilter, + TagNameFilterParam, + PromptFilter, + PersonaIDFilter, + ], + PropertyInfo(discriminator="field"), +] diff --git a/src/profound/types/report_stream_citations_params.py b/src/profound/types/report_stream_citations_params.py new file mode 100644 index 00000000..e797c227 --- /dev/null +++ b/src/profound/types/report_stream_citations_params.py @@ -0,0 +1,141 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypeAlias, TypedDict +from .._types import SequenceNotStr + +from .._utils import PropertyInfo + +from .shared_params.pagination import Pagination +from .hostname_filter_param import HostnameFilterParam +from .shared_params.path_filter import PathFilter +from .shared_params.region_id_filter import RegionIDFilter +from .shared_params.region_name_filter import RegionNameFilter +from .shared_params.topic_id_filter import TopicIDFilter +from .topic_name_filter_param import TopicNameFilterParam +from .shared_params.model_id_filter import ModelIDFilter +from .shared_params.tag_id_filter import TagIDFilter +from .tag_name_filter_param import TagNameFilterParam +from .url_filter_param import URLFilterParam +from .root_domain_filter_param import RootDomainFilterParam +from .shared_params.analysis_type_filter import AnalysisTypeFilter +from .shared_params.prompt_type_filter import PromptTypeFilter +from .shared_params.persona_id_filter import PersonaIDFilter +from .shared_params.prompt_filter import PromptFilter +from .prompt_id_filter_param import PromptIDFilterParam + +__all__ = ["ReportStreamCitationsParams", "Filter", "FilterCitationCategoryFilter", "FilterMentionedFilter"] + + +class ReportStreamCitationsParams(TypedDict, total=False): + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + """Date interval for the report. (only used with date dimension)""" + + dimensions: List[ + Literal[ + "hostname", + "path", + "date", + "region", + "topic", + "topic_id", + "model", + "tag", + "prompt", + "prompt_id", + "url", + "root_domain", + "persona", + "citation_category", + ] + ] + """Dimensions to group the report by.""" + + metrics: Required[List[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]]] + """Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead.""" + + order_by: Dict[str, Literal["asc", "desc"]] + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - `key` is the field to order by, which can be a metric or dimension + - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Optional[Pagination] + """Offset-based pagination parameters.""" + + category_id: Required[str] + + start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + filters: Iterable[Filter] + """List of filters to apply to the citations report.""" + + +class FilterMentionedFilter(TypedDict, total=False): + """Filter citation pages by whether they mention an owned category asset.""" + + field: Required[Literal["mentioned"]] + + operator: Required[Literal["is"]] + + value: Required[Union[bool, Iterable[bool]]] + + +class FilterCitationCategoryFilter(TypedDict, total=False): + """Filter by citation category""" + + field: Required[Literal["citation_category"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] + + +Filter: TypeAlias = Annotated[ + Union[ + HostnameFilterParam, + PathFilter, + RegionIDFilter, + RegionNameFilter, + TopicIDFilter, + TopicNameFilterParam, + ModelIDFilter, + TagIDFilter, + TagNameFilterParam, + URLFilterParam, + RootDomainFilterParam, + AnalysisTypeFilter, + PromptTypeFilter, + PersonaIDFilter, + FilterCitationCategoryFilter, + PromptFilter, + PromptIDFilterParam, + FilterMentionedFilter, + ], + PropertyInfo(discriminator="field"), +] diff --git a/src/profound/types/report_stream_citations_response.py b/src/profound/types/report_stream_citations_response.py new file mode 100644 index 00000000..39c72af5 --- /dev/null +++ b/src/profound/types/report_stream_citations_response.py @@ -0,0 +1,19 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, Union +from typing_extensions import TypeAlias + +from .._models import BaseModel + +__all__ = ["ReportStreamCitationsResponse", "SseSummaryEventData"] + + +class SseSummaryEventData(BaseModel): + query: Dict[str, object] + """The normalized query used to build the stream.""" + + total_rows: int + """Total number of rows available before pagination is applied.""" + + +ReportStreamCitationsResponse: TypeAlias = Union[SseSummaryEventData, Dict[str, object]] diff --git a/src/profound/types/report_stream_sentiment_params.py b/src/profound/types/report_stream_sentiment_params.py new file mode 100644 index 00000000..b2c07446 --- /dev/null +++ b/src/profound/types/report_stream_sentiment_params.py @@ -0,0 +1,144 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypeAlias, TypedDict +from .._types import SequenceNotStr + +from .._utils import PropertyInfo + +from .shared_params.pagination import Pagination +from .shared_params.asset_id_filter import AssetIDFilter +from .shared_params.region_id_filter import RegionIDFilter +from .shared_params.region_name_filter import RegionNameFilter +from .shared_params.topic_id_filter import TopicIDFilter +from .topic_name_filter_param import TopicNameFilterParam +from .shared_params.model_id_filter import ModelIDFilter +from .shared_params.tag_id_filter import TagIDFilter +from .tag_name_filter_param import TagNameFilterParam +from .shared_params.prompt_filter import PromptFilter +from .shared_params.persona_id_filter import PersonaIDFilter + +__all__ = [ + "ReportStreamSentimentParams", + "Filter", + "FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter", + "FilterThemeFilter", +] + + +class ReportStreamSentimentParams(TypedDict, total=False): + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + """Date interval for the report. (only used with date dimension)""" + + dimensions: List[ + Literal[ + "theme", + "date", + "region", + "topic", + "topic_id", + "model", + "asset_id", + "asset_name", + "tag", + "prompt", + "prompt_id", + "sentiment_type", + "persona", + ] + ] + """Dimensions to group the report by.""" + + metrics: Required[List[Literal["positive", "negative", "occurrences"]]] + + order_by: Dict[str, Literal["asc", "desc"]] + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - key is the field to order by, which can be a metric or dimension + - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Optional[Pagination] + """Offset-based pagination parameters.""" + + category_id: Required[str] + + start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + filters: Iterable[Filter] + """List of filters to apply to the sentiment report.""" + + +class FilterThemeFilter(TypedDict, total=False): + """Filter by theme""" + + field: Required[Literal["theme"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] + + +class FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter(TypedDict, total=False): + """Filter by asset name""" + + field: Required[Literal["asset_name"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] + + +Filter: TypeAlias = Annotated[ + Union[ + AssetIDFilter, + FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter, + FilterThemeFilter, + RegionIDFilter, + RegionNameFilter, + TopicIDFilter, + TopicNameFilterParam, + ModelIDFilter, + TagIDFilter, + TagNameFilterParam, + PromptFilter, + PersonaIDFilter, + ], + PropertyInfo(discriminator="field"), +] diff --git a/src/profound/types/report_stream_sentiment_response.py b/src/profound/types/report_stream_sentiment_response.py new file mode 100644 index 00000000..fbe5b8c9 --- /dev/null +++ b/src/profound/types/report_stream_sentiment_response.py @@ -0,0 +1,19 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, Union +from typing_extensions import TypeAlias + +from .._models import BaseModel + +__all__ = ["ReportStreamSentimentResponse", "SseSummaryEventData"] + + +class SseSummaryEventData(BaseModel): + query: Dict[str, object] + """The normalized query used to build the stream.""" + + total_rows: int + """Total number of rows available before pagination is applied.""" + + +ReportStreamSentimentResponse: TypeAlias = Union[SseSummaryEventData, Dict[str, object]] diff --git a/src/profound/types/report_stream_visibility_params.py b/src/profound/types/report_stream_visibility_params.py new file mode 100644 index 00000000..848e0d07 --- /dev/null +++ b/src/profound/types/report_stream_visibility_params.py @@ -0,0 +1,116 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypeAlias, TypedDict +from .._types import SequenceNotStr + +from .._utils import PropertyInfo + +from .shared_params.pagination import Pagination +from .shared_params.region_id_filter import RegionIDFilter +from .shared_params.region_name_filter import RegionNameFilter +from .shared_params.model_id_filter import ModelIDFilter +from .shared_params.topic_id_filter import TopicIDFilter +from .topic_name_filter_param import TopicNameFilterParam +from .shared_params.tag_id_filter import TagIDFilter +from .tag_name_filter_param import TagNameFilterParam +from .prompt_id_filter_param import PromptIDFilterParam +from .shared_params.prompt_filter import PromptFilter +from .shared_params.persona_id_filter import PersonaIDFilter + +__all__ = ["ReportStreamVisibilityParams", "Filter", "FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter"] + + +class ReportStreamVisibilityParams(TypedDict, total=False): + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + """Date interval for the report. (only used with date dimension)""" + + dimensions: List[ + Literal[ + "date", + "region", + "topic", + "topic_id", + "model", + "asset_id", + "asset_name", + "prompt", + "prompt_id", + "tag", + "persona", + ] + ] + """Dimensions to group the report by.""" + + metrics: Required[ + List[Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"]] + ] + + order_by: Dict[str, Literal["asc", "desc"]] + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - key is the field to order by, which can be a metric or dimension + - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Optional[Pagination] + """Offset-based pagination parameters.""" + + category_id: Required[str] + + start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + filters: Iterable[Filter] + """List of filters to apply to the visibility report.""" + + +class FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter(TypedDict, total=False): + """Filter by asset name""" + + field: Required[Literal["asset_name"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] + + +Filter: TypeAlias = Annotated[ + Union[ + RegionIDFilter, + RegionNameFilter, + ModelIDFilter, + TopicIDFilter, + TopicNameFilterParam, + FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter, + TagIDFilter, + TagNameFilterParam, + PromptIDFilterParam, + PromptFilter, + PersonaIDFilter, + ], + PropertyInfo(discriminator="field"), +] diff --git a/src/profound/types/report_stream_visibility_response.py b/src/profound/types/report_stream_visibility_response.py new file mode 100644 index 00000000..aaba7c2f --- /dev/null +++ b/src/profound/types/report_stream_visibility_response.py @@ -0,0 +1,19 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, Union +from typing_extensions import TypeAlias + +from .._models import BaseModel + +__all__ = ["ReportStreamVisibilityResponse", "SseSummaryEventData"] + + +class SseSummaryEventData(BaseModel): + query: Dict[str, object] + """The normalized query used to build the stream.""" + + total_rows: int + """Total number of rows available before pagination is applied.""" + + +ReportStreamVisibilityResponse: TypeAlias = Union[SseSummaryEventData, Dict[str, object]] diff --git a/src/profound/types/report_visibility_params.py b/src/profound/types/report_visibility_params.py new file mode 100644 index 00000000..ea62f9e6 --- /dev/null +++ b/src/profound/types/report_visibility_params.py @@ -0,0 +1,116 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, List, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypeAlias, TypedDict +from .._types import SequenceNotStr + +from .._utils import PropertyInfo + +from .shared_params.pagination import Pagination +from .shared_params.region_id_filter import RegionIDFilter +from .shared_params.region_name_filter import RegionNameFilter +from .shared_params.model_id_filter import ModelIDFilter +from .shared_params.topic_id_filter import TopicIDFilter +from .topic_name_filter_param import TopicNameFilterParam +from .shared_params.tag_id_filter import TagIDFilter +from .tag_name_filter_param import TagNameFilterParam +from .prompt_id_filter_param import PromptIDFilterParam +from .shared_params.prompt_filter import PromptFilter +from .shared_params.persona_id_filter import PersonaIDFilter + +__all__ = ["ReportVisibilityParams", "Filter", "FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter"] + + +class ReportVisibilityParams(TypedDict, total=False): + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + """Date interval for the report. (only used with date dimension)""" + + dimensions: List[ + Literal[ + "date", + "region", + "topic", + "topic_id", + "model", + "asset_id", + "asset_name", + "prompt", + "prompt_id", + "tag", + "persona", + ] + ] + """Dimensions to group the report by.""" + + metrics: Required[ + List[Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"]] + ] + + order_by: Dict[str, Literal["asc", "desc"]] + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - key is the field to order by, which can be a metric or dimension + - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Pagination + """Pagination settings for the report results.""" + + category_id: Required[str] + + start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + filters: Iterable[Filter] + """List of filters to apply to the visibility report.""" + + +class FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter(TypedDict, total=False): + """Filter by asset name""" + + field: Required[Literal["asset_name"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] + + +Filter: TypeAlias = Annotated[ + Union[ + RegionIDFilter, + RegionNameFilter, + ModelIDFilter, + TopicIDFilter, + TopicNameFilterParam, + FilterProfoundAnswerEngineInsightsFiltersAssetNameFilter, + TagIDFilter, + TagNameFilterParam, + PromptIDFilterParam, + PromptFilter, + PersonaIDFilter, + ], + PropertyInfo(discriminator="field"), +] diff --git a/src/profound/types/reports/__init__.py b/src/profound/types/reports/__init__.py new file mode 100644 index 00000000..b7704ddc --- /dev/null +++ b/src/profound/types/reports/__init__.py @@ -0,0 +1,47 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from .brand_name_filter_param import BrandNameFilterParam as BrandNameFilterParam +from .merchant_name_filter_param import MerchantNameFilterParam as MerchantNameFilterParam +from .product_name_filter_param import ProductNameFilterParam as ProductNameFilterParam +from .web_search_result_query_response import WebSearchResultQueryResponse as WebSearchResultQueryResponse +from .web_search_result_query_params import WebSearchResultQueryParams as WebSearchResultQueryParams +from .web_search_result_stream_response import WebSearchResultStreamResponse as WebSearchResultStreamResponse +from .web_search_result_stream_params import WebSearchResultStreamParams as WebSearchResultStreamParams +from .shopping_visibility_response import ShoppingVisibilityResponse as ShoppingVisibilityResponse +from .shopping_visibility_params import ShoppingVisibilityParams as ShoppingVisibilityParams +from .shopping_item_visibility_response import ShoppingItemVisibilityResponse as ShoppingItemVisibilityResponse +from .shopping_item_visibility_params import ShoppingItemVisibilityParams as ShoppingItemVisibilityParams +from .shopping_merchant_distribution_response import ( + ShoppingMerchantDistributionResponse as ShoppingMerchantDistributionResponse, +) +from .shopping_merchant_distribution_params import ( + ShoppingMerchantDistributionParams as ShoppingMerchantDistributionParams, +) +from .shopping_merchant_visibility_by_brand_response import ( + ShoppingMerchantVisibilityByBrandResponse as ShoppingMerchantVisibilityByBrandResponse, +) +from .shopping_merchant_visibility_by_brand_params import ( + ShoppingMerchantVisibilityByBrandParams as ShoppingMerchantVisibilityByBrandParams, +) +from .shopping_merchant_by_items_response import ShoppingMerchantByItemsResponse as ShoppingMerchantByItemsResponse +from .shopping_merchant_by_items_params import ShoppingMerchantByItemsParams as ShoppingMerchantByItemsParams +from .shopping_all_items_with_merchants_response import ( + ShoppingAllItemsWithMerchantsResponse as ShoppingAllItemsWithMerchantsResponse, +) +from .shopping_all_items_with_merchants_params import ( + ShoppingAllItemsWithMerchantsParams as ShoppingAllItemsWithMerchantsParams, +) +from .shopping_trigger_rate_response import ShoppingTriggerRateResponse as ShoppingTriggerRateResponse +from .shopping_trigger_rate_params import ShoppingTriggerRateParams as ShoppingTriggerRateParams +from .shopping_merchant_share_response import ShoppingMerchantShareResponse as ShoppingMerchantShareResponse +from .shopping_merchant_share_params import ShoppingMerchantShareParams as ShoppingMerchantShareParams +from .shopping_product_merchant_urls_response import ( + ShoppingProductMerchantURLsResponse as ShoppingProductMerchantURLsResponse, +) +from .shopping_product_merchant_urls_params import ( + ShoppingProductMerchantURLsParams as ShoppingProductMerchantURLsParams, +) +from .shopping_executions_response import ShoppingExecutionsResponse as ShoppingExecutionsResponse +from .shopping_executions_params import ShoppingExecutionsParams as ShoppingExecutionsParams diff --git a/src/profound/types/reports/brand_name_filter_param.py b/src/profound/types/reports/brand_name_filter_param.py new file mode 100644 index 00000000..a6884b1b --- /dev/null +++ b/src/profound/types/reports/brand_name_filter_param.py @@ -0,0 +1,29 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Union +from typing_extensions import Literal, Required, TypedDict +from ..._types import SequenceNotStr + +__all__ = ["BrandNameFilterParam"] + + +class BrandNameFilterParam(TypedDict, total=False): + field: Required[Literal["brand_name"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/reports/merchant_name_filter_param.py b/src/profound/types/reports/merchant_name_filter_param.py new file mode 100644 index 00000000..c3bf61f4 --- /dev/null +++ b/src/profound/types/reports/merchant_name_filter_param.py @@ -0,0 +1,29 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Union +from typing_extensions import Literal, Required, TypedDict +from ..._types import SequenceNotStr + +__all__ = ["MerchantNameFilterParam"] + + +class MerchantNameFilterParam(TypedDict, total=False): + field: Required[Literal["merchant_name"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/reports/product_name_filter_param.py b/src/profound/types/reports/product_name_filter_param.py new file mode 100644 index 00000000..8c091bf0 --- /dev/null +++ b/src/profound/types/reports/product_name_filter_param.py @@ -0,0 +1,29 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Union +from typing_extensions import Literal, Required, TypedDict +from ..._types import SequenceNotStr + +__all__ = ["ProductNameFilterParam"] + + +class ProductNameFilterParam(TypedDict, total=False): + field: Required[Literal["product_name"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/reports/shopping_all_items_with_merchants_params.py b/src/profound/types/reports/shopping_all_items_with_merchants_params.py new file mode 100644 index 00000000..c91ceb99 --- /dev/null +++ b/src/profound/types/reports/shopping_all_items_with_merchants_params.py @@ -0,0 +1,128 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypeAlias, TypedDict +from ..._types import SequenceNotStr + +from ..._utils import PropertyInfo + +from ..shared_params.region_id_filter import RegionIDFilter +from ..shared_params.model_id_filter import ModelIDFilter +from ..shared_params.topic_id_filter import TopicIDFilter +from ..shared_params.tag_id_filter import TagIDFilter +from ..prompt_id_filter_param import PromptIDFilterParam +from ..shared_params.persona_id_filter import PersonaIDFilter +from .brand_name_filter_param import BrandNameFilterParam +from .merchant_name_filter_param import MerchantNameFilterParam +from .product_name_filter_param import ProductNameFilterParam +from ..shared_params.pagination import Pagination + +__all__ = ["ShoppingAllItemsWithMerchantsParams", "Filter", "FilterProfoundShoppingAPIAssetNameFilter"] + + +class ShoppingAllItemsWithMerchantsParams(TypedDict, total=False): + category_id: Required[str] + + start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + comparison_start_date: Annotated[Optional[Union[str, datetime]], PropertyInfo(format="iso8601")] + + comparison_end_date: Annotated[Optional[Union[str, datetime]], PropertyInfo(format="iso8601")] + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + + filters: Iterable[Filter] + + order_by: Dict[str, Literal["asc", "desc"]] + + pagination: Optional[Pagination] + """Offset-based pagination parameters.""" + + include_count: bool + + tag_filter_type: Literal["any", "all"] + + include_no_tag: bool + + exclude_topic_ids: bool + + dimensions: List[ + Literal[ + "period", + "product_name", + "brand_name", + "product_url", + "product_image_urls", + "product_price", + "merchant_names", + "merchant_prices", + ] + ] + + metrics: List[ + Literal[ + "visibility_score", + "share_of_voice", + "average_position", + "visibility_rank", + "product_rating", + "product_num_reviews", + "total_count", + ] + ] + + owned_asset_names: SequenceNotStr[str] + + include_items: SequenceNotStr[str] + + search_item: Optional[str] + + merchant_filter_type: Literal["any", "all"] + + rank_by: Literal["visibility", "average_position", "name"] + + sort_order: Literal["asc", "desc"] + + +class FilterProfoundShoppingAPIAssetNameFilter(TypedDict, total=False): + field: Required[Literal["asset_name"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] + + +Filter: TypeAlias = Annotated[ + Union[ + RegionIDFilter, + ModelIDFilter, + TopicIDFilter, + TagIDFilter, + PromptIDFilterParam, + PersonaIDFilter, + BrandNameFilterParam, + MerchantNameFilterParam, + ProductNameFilterParam, + FilterProfoundShoppingAPIAssetNameFilter, + ], + PropertyInfo(discriminator="field"), +] diff --git a/src/types/reports/shopping_all_items_with_merchants_response.py b/src/profound/types/reports/shopping_all_items_with_merchants_response.py similarity index 66% rename from src/types/reports/shopping_all_items_with_merchants_response.py rename to src/profound/types/reports/shopping_all_items_with_merchants_response.py index 640eb7de..1f021049 100644 --- a/src/types/reports/shopping_all_items_with_merchants_response.py +++ b/src/profound/types/reports/shopping_all_items_with_merchants_response.py @@ -1,21 +1,16 @@ # File generated from our OpenAPI spec by Scalar. See README.md for details. -from typing import List +from typing import Dict, List from ..._models import BaseModel -from ..report_info import ReportInfo - -__all__ = ["ShoppingAllItemsWithMerchantsResponse", "Data"] - -class Data(BaseModel): - pass +from ..report_info import ReportInfo +__all__ = ["ShoppingAllItemsWithMerchantsResponse"] class ShoppingAllItemsWithMerchantsResponse(BaseModel): - info: ReportInfo """Base model for report information.""" - data: List[Data] + data: List[Dict[str, object]] diff --git a/src/profound/types/reports/shopping_executions_params.py b/src/profound/types/reports/shopping_executions_params.py new file mode 100644 index 00000000..03b0984f --- /dev/null +++ b/src/profound/types/reports/shopping_executions_params.py @@ -0,0 +1,97 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypeAlias, TypedDict +from ..._types import SequenceNotStr + +from ..._utils import PropertyInfo + +from ..shared_params.region_id_filter import RegionIDFilter +from ..shared_params.model_id_filter import ModelIDFilter +from ..shared_params.topic_id_filter import TopicIDFilter +from ..shared_params.tag_id_filter import TagIDFilter +from ..prompt_id_filter_param import PromptIDFilterParam +from ..shared_params.persona_id_filter import PersonaIDFilter +from .brand_name_filter_param import BrandNameFilterParam +from .merchant_name_filter_param import MerchantNameFilterParam +from .product_name_filter_param import ProductNameFilterParam +from ..shared_params.pagination import Pagination + +__all__ = ["ShoppingExecutionsParams", "Filter", "FilterProfoundShoppingAPIAssetNameFilter"] + + +class ShoppingExecutionsParams(TypedDict, total=False): + category_id: Required[str] + + start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + comparison_start_date: Annotated[Optional[Union[str, datetime]], PropertyInfo(format="iso8601")] + + comparison_end_date: Annotated[Optional[Union[str, datetime]], PropertyInfo(format="iso8601")] + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + + filters: Iterable[Filter] + + order_by: Dict[str, Literal["asc", "desc"]] + + pagination: Optional[Pagination] + """Offset-based pagination parameters.""" + + include_count: bool + + tag_filter_type: Literal["any", "all"] + + include_no_tag: bool + + exclude_topic_ids: bool + + analysis_types: List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]] + + analysis_filter_type: Literal["any", "all"] + + owned_asset_names: SequenceNotStr[str] + + +class FilterProfoundShoppingAPIAssetNameFilter(TypedDict, total=False): + field: Required[Literal["asset_name"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] + + +Filter: TypeAlias = Annotated[ + Union[ + RegionIDFilter, + ModelIDFilter, + TopicIDFilter, + TagIDFilter, + PromptIDFilterParam, + PersonaIDFilter, + BrandNameFilterParam, + MerchantNameFilterParam, + ProductNameFilterParam, + FilterProfoundShoppingAPIAssetNameFilter, + ], + PropertyInfo(discriminator="field"), +] diff --git a/src/types/reports/shopping_executions_response.py b/src/profound/types/reports/shopping_executions_response.py similarity index 67% rename from src/types/reports/shopping_executions_response.py rename to src/profound/types/reports/shopping_executions_response.py index 82384bf9..99c00b1a 100644 --- a/src/types/reports/shopping_executions_response.py +++ b/src/profound/types/reports/shopping_executions_response.py @@ -1,21 +1,16 @@ # File generated from our OpenAPI spec by Scalar. See README.md for details. -from typing import List +from typing import Dict, List from ..._models import BaseModel -from ..report_info import ReportInfo - -__all__ = ["ShoppingExecutionsResponse", "Data"] - -class Data(BaseModel): - pass +from ..report_info import ReportInfo +__all__ = ["ShoppingExecutionsResponse"] class ShoppingExecutionsResponse(BaseModel): - info: ReportInfo """Base model for report information.""" - data: List[Data] + data: List[Dict[str, object]] diff --git a/src/profound/types/reports/shopping_item_visibility_params.py b/src/profound/types/reports/shopping_item_visibility_params.py new file mode 100644 index 00000000..7d4d959d --- /dev/null +++ b/src/profound/types/reports/shopping_item_visibility_params.py @@ -0,0 +1,139 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypeAlias, TypedDict +from ..._types import SequenceNotStr + +from ..._utils import PropertyInfo + +from ..shared_params.region_id_filter import RegionIDFilter +from ..shared_params.model_id_filter import ModelIDFilter +from ..shared_params.topic_id_filter import TopicIDFilter +from ..shared_params.tag_id_filter import TagIDFilter +from ..prompt_id_filter_param import PromptIDFilterParam +from ..shared_params.persona_id_filter import PersonaIDFilter +from .brand_name_filter_param import BrandNameFilterParam +from .merchant_name_filter_param import MerchantNameFilterParam +from .product_name_filter_param import ProductNameFilterParam +from ..shared_params.pagination import Pagination + +__all__ = ["ShoppingItemVisibilityParams", "Filter", "FilterProfoundShoppingAPIAssetNameFilter"] + + +class ShoppingItemVisibilityParams(TypedDict, total=False): + category_id: Required[str] + + start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + comparison_start_date: Annotated[Optional[Union[str, datetime]], PropertyInfo(format="iso8601")] + + comparison_end_date: Annotated[Optional[Union[str, datetime]], PropertyInfo(format="iso8601")] + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + + filters: Iterable[Filter] + + order_by: Dict[str, Literal["asc", "desc"]] + + pagination: Optional[Pagination] + """Offset-based pagination parameters.""" + + include_count: bool + + tag_filter_type: Literal["any", "all"] + + include_no_tag: bool + + exclude_topic_ids: bool + + dimensions: List[ + Literal[ + "period", + "product_key", + "product_name", + "brand_name", + "date", + "topic_id", + "prompt_id", + "prompt", + "product_url", + "product_image_urls", + "product_price", + ] + ] + + metrics: List[ + Literal[ + "visibility_score", + "share_of_voice", + "average_position", + "visibility_rank", + "position1_percentage", + "position2_percentage", + "position3_percentage", + "position_above3_percentage", + "product_rating", + "product_num_reviews", + "total_count", + ] + ] + + owned_asset_names: SequenceNotStr[str] + + include_items: SequenceNotStr[str] + + search_item: Optional[str] + + merchant_filter_type: Literal["any", "all"] + + include_competitors: bool + + target_product: Optional[str] + + competitor_limit: int + + include_position_frequency: bool + + +class FilterProfoundShoppingAPIAssetNameFilter(TypedDict, total=False): + field: Required[Literal["asset_name"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] + + +Filter: TypeAlias = Annotated[ + Union[ + RegionIDFilter, + ModelIDFilter, + TopicIDFilter, + TagIDFilter, + PromptIDFilterParam, + PersonaIDFilter, + BrandNameFilterParam, + MerchantNameFilterParam, + ProductNameFilterParam, + FilterProfoundShoppingAPIAssetNameFilter, + ], + PropertyInfo(discriminator="field"), +] diff --git a/src/types/reports/shopping_item_visibility_response.py b/src/profound/types/reports/shopping_item_visibility_response.py similarity index 66% rename from src/types/reports/shopping_item_visibility_response.py rename to src/profound/types/reports/shopping_item_visibility_response.py index 0c581a84..4e2d71f3 100644 --- a/src/types/reports/shopping_item_visibility_response.py +++ b/src/profound/types/reports/shopping_item_visibility_response.py @@ -1,21 +1,16 @@ # File generated from our OpenAPI spec by Scalar. See README.md for details. -from typing import List +from typing import Dict, List from ..._models import BaseModel -from ..report_info import ReportInfo - -__all__ = ["ShoppingItemVisibilityResponse", "Data"] - -class Data(BaseModel): - pass +from ..report_info import ReportInfo +__all__ = ["ShoppingItemVisibilityResponse"] class ShoppingItemVisibilityResponse(BaseModel): - info: ReportInfo """Base model for report information.""" - data: List[Data] + data: List[Dict[str, object]] diff --git a/src/profound/types/reports/shopping_merchant_by_items_params.py b/src/profound/types/reports/shopping_merchant_by_items_params.py new file mode 100644 index 00000000..3d248b01 --- /dev/null +++ b/src/profound/types/reports/shopping_merchant_by_items_params.py @@ -0,0 +1,110 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypeAlias, TypedDict +from ..._types import SequenceNotStr + +from ..._utils import PropertyInfo + +from ..shared_params.region_id_filter import RegionIDFilter +from ..shared_params.model_id_filter import ModelIDFilter +from ..shared_params.topic_id_filter import TopicIDFilter +from ..shared_params.tag_id_filter import TagIDFilter +from ..prompt_id_filter_param import PromptIDFilterParam +from ..shared_params.persona_id_filter import PersonaIDFilter +from .brand_name_filter_param import BrandNameFilterParam +from .merchant_name_filter_param import MerchantNameFilterParam +from .product_name_filter_param import ProductNameFilterParam +from ..shared_params.pagination import Pagination + +__all__ = ["ShoppingMerchantByItemsParams", "Filter", "FilterProfoundShoppingAPIAssetNameFilter"] + + +class ShoppingMerchantByItemsParams(TypedDict, total=False): + category_id: Required[str] + + start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + comparison_start_date: Annotated[Optional[Union[str, datetime]], PropertyInfo(format="iso8601")] + + comparison_end_date: Annotated[Optional[Union[str, datetime]], PropertyInfo(format="iso8601")] + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + + filters: Iterable[Filter] + + order_by: Dict[str, Literal["asc", "desc"]] + + pagination: Optional[Pagination] + """Offset-based pagination parameters.""" + + include_count: bool + + tag_filter_type: Literal["any", "all"] + + include_no_tag: bool + + exclude_topic_ids: bool + + dimensions: List[ + Literal[ + "period", + "merchant_name", + "product_name", + "brand_name", + "product_image_urls", + "product_price", + "merchant_prices", + "has_instant_checkout", + "delivery_options", + "merchant_url", + ] + ] + + metrics: List[Literal["merchant_visibility", "product_visibility", "product_rank", "avg_position", "total_count"]] + + product_name: Optional[str] + + +class FilterProfoundShoppingAPIAssetNameFilter(TypedDict, total=False): + field: Required[Literal["asset_name"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] + + +Filter: TypeAlias = Annotated[ + Union[ + RegionIDFilter, + ModelIDFilter, + TopicIDFilter, + TagIDFilter, + PromptIDFilterParam, + PersonaIDFilter, + BrandNameFilterParam, + MerchantNameFilterParam, + ProductNameFilterParam, + FilterProfoundShoppingAPIAssetNameFilter, + ], + PropertyInfo(discriminator="field"), +] diff --git a/src/types/reports/shopping_merchant_by_items_response.py b/src/profound/types/reports/shopping_merchant_by_items_response.py similarity index 66% rename from src/types/reports/shopping_merchant_by_items_response.py rename to src/profound/types/reports/shopping_merchant_by_items_response.py index c6899aa4..27f6cf28 100644 --- a/src/types/reports/shopping_merchant_by_items_response.py +++ b/src/profound/types/reports/shopping_merchant_by_items_response.py @@ -1,21 +1,16 @@ # File generated from our OpenAPI spec by Scalar. See README.md for details. -from typing import List +from typing import Dict, List from ..._models import BaseModel -from ..report_info import ReportInfo - -__all__ = ["ShoppingMerchantByItemsResponse", "Data"] - -class Data(BaseModel): - pass +from ..report_info import ReportInfo +__all__ = ["ShoppingMerchantByItemsResponse"] class ShoppingMerchantByItemsResponse(BaseModel): - info: ReportInfo """Base model for report information.""" - data: List[Data] + data: List[Dict[str, object]] diff --git a/src/profound/types/reports/shopping_merchant_distribution_params.py b/src/profound/types/reports/shopping_merchant_distribution_params.py new file mode 100644 index 00000000..0605e215 --- /dev/null +++ b/src/profound/types/reports/shopping_merchant_distribution_params.py @@ -0,0 +1,101 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypeAlias, TypedDict +from ..._types import SequenceNotStr + +from ..._utils import PropertyInfo + +from ..shared_params.region_id_filter import RegionIDFilter +from ..shared_params.model_id_filter import ModelIDFilter +from ..shared_params.topic_id_filter import TopicIDFilter +from ..shared_params.tag_id_filter import TagIDFilter +from ..prompt_id_filter_param import PromptIDFilterParam +from ..shared_params.persona_id_filter import PersonaIDFilter +from .brand_name_filter_param import BrandNameFilterParam +from .merchant_name_filter_param import MerchantNameFilterParam +from .product_name_filter_param import ProductNameFilterParam +from ..shared_params.pagination import Pagination + +__all__ = ["ShoppingMerchantDistributionParams", "Filter", "FilterProfoundShoppingAPIAssetNameFilter"] + + +class ShoppingMerchantDistributionParams(TypedDict, total=False): + category_id: Required[str] + + start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + comparison_start_date: Annotated[Optional[Union[str, datetime]], PropertyInfo(format="iso8601")] + + comparison_end_date: Annotated[Optional[Union[str, datetime]], PropertyInfo(format="iso8601")] + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + + filters: Iterable[Filter] + + order_by: Dict[str, Literal["asc", "desc"]] + + pagination: Optional[Pagination] + """Offset-based pagination parameters.""" + + include_count: bool + + tag_filter_type: Literal["any", "all"] + + include_no_tag: bool + + exclude_topic_ids: bool + + dimensions: List[Literal["period", "merchant_name", "date", "owned_asset_name"]] + + metrics: List[ + Literal["offer_count", "product_count", "average_rank", "share_of_offers", "visibility_rank", "total_count"] + ] + + owned_asset_names: SequenceNotStr[str] + + search_merchant: Optional[str] + + +class FilterProfoundShoppingAPIAssetNameFilter(TypedDict, total=False): + field: Required[Literal["asset_name"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] + + +Filter: TypeAlias = Annotated[ + Union[ + RegionIDFilter, + ModelIDFilter, + TopicIDFilter, + TagIDFilter, + PromptIDFilterParam, + PersonaIDFilter, + BrandNameFilterParam, + MerchantNameFilterParam, + ProductNameFilterParam, + FilterProfoundShoppingAPIAssetNameFilter, + ], + PropertyInfo(discriminator="field"), +] diff --git a/src/types/reports/shopping_merchant_distribution_response.py b/src/profound/types/reports/shopping_merchant_distribution_response.py similarity index 66% rename from src/types/reports/shopping_merchant_distribution_response.py rename to src/profound/types/reports/shopping_merchant_distribution_response.py index 8800f6b8..0008aa41 100644 --- a/src/types/reports/shopping_merchant_distribution_response.py +++ b/src/profound/types/reports/shopping_merchant_distribution_response.py @@ -1,21 +1,16 @@ # File generated from our OpenAPI spec by Scalar. See README.md for details. -from typing import List +from typing import Dict, List from ..._models import BaseModel -from ..report_info import ReportInfo - -__all__ = ["ShoppingMerchantDistributionResponse", "Data"] - -class Data(BaseModel): - pass +from ..report_info import ReportInfo +__all__ = ["ShoppingMerchantDistributionResponse"] class ShoppingMerchantDistributionResponse(BaseModel): - info: ReportInfo """Base model for report information.""" - data: List[Data] + data: List[Dict[str, object]] diff --git a/src/profound/types/reports/shopping_merchant_share_params.py b/src/profound/types/reports/shopping_merchant_share_params.py new file mode 100644 index 00000000..a5cbbdaf --- /dev/null +++ b/src/profound/types/reports/shopping_merchant_share_params.py @@ -0,0 +1,99 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypeAlias, TypedDict +from ..._types import SequenceNotStr + +from ..._utils import PropertyInfo + +from ..shared_params.region_id_filter import RegionIDFilter +from ..shared_params.model_id_filter import ModelIDFilter +from ..shared_params.topic_id_filter import TopicIDFilter +from ..shared_params.tag_id_filter import TagIDFilter +from ..prompt_id_filter_param import PromptIDFilterParam +from ..shared_params.persona_id_filter import PersonaIDFilter +from .brand_name_filter_param import BrandNameFilterParam +from .merchant_name_filter_param import MerchantNameFilterParam +from .product_name_filter_param import ProductNameFilterParam +from ..shared_params.pagination import Pagination + +__all__ = ["ShoppingMerchantShareParams", "Filter", "FilterProfoundShoppingAPIAssetNameFilter"] + + +class ShoppingMerchantShareParams(TypedDict, total=False): + category_id: Required[str] + + start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + comparison_start_date: Annotated[Optional[Union[str, datetime]], PropertyInfo(format="iso8601")] + + comparison_end_date: Annotated[Optional[Union[str, datetime]], PropertyInfo(format="iso8601")] + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + + filters: Iterable[Filter] + + order_by: Dict[str, Literal["asc", "desc"]] + + pagination: Optional[Pagination] + """Offset-based pagination parameters.""" + + include_count: bool + + tag_filter_type: Literal["any", "all"] + + include_no_tag: bool + + exclude_topic_ids: bool + + dimensions: List[Literal["period", "topic_id", "prompt_id"]] + + metrics: List[Literal["merchant_share"]] + + target_asset_names: SequenceNotStr[str] + + owned_asset_names: SequenceNotStr[str] + + +class FilterProfoundShoppingAPIAssetNameFilter(TypedDict, total=False): + field: Required[Literal["asset_name"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] + + +Filter: TypeAlias = Annotated[ + Union[ + RegionIDFilter, + ModelIDFilter, + TopicIDFilter, + TagIDFilter, + PromptIDFilterParam, + PersonaIDFilter, + BrandNameFilterParam, + MerchantNameFilterParam, + ProductNameFilterParam, + FilterProfoundShoppingAPIAssetNameFilter, + ], + PropertyInfo(discriminator="field"), +] diff --git a/src/types/reports/shopping_merchant_share_response.py b/src/profound/types/reports/shopping_merchant_share_response.py similarity index 67% rename from src/types/reports/shopping_merchant_share_response.py rename to src/profound/types/reports/shopping_merchant_share_response.py index 4ea76897..537ccb80 100644 --- a/src/types/reports/shopping_merchant_share_response.py +++ b/src/profound/types/reports/shopping_merchant_share_response.py @@ -1,21 +1,16 @@ # File generated from our OpenAPI spec by Scalar. See README.md for details. -from typing import List +from typing import Dict, List from ..._models import BaseModel -from ..report_info import ReportInfo - -__all__ = ["ShoppingMerchantShareResponse", "Data"] - -class Data(BaseModel): - pass +from ..report_info import ReportInfo +__all__ = ["ShoppingMerchantShareResponse"] class ShoppingMerchantShareResponse(BaseModel): - info: ReportInfo """Base model for report information.""" - data: List[Data] + data: List[Dict[str, object]] diff --git a/src/profound/types/reports/shopping_merchant_visibility_by_brand_params.py b/src/profound/types/reports/shopping_merchant_visibility_by_brand_params.py new file mode 100644 index 00000000..8a7b1c06 --- /dev/null +++ b/src/profound/types/reports/shopping_merchant_visibility_by_brand_params.py @@ -0,0 +1,103 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypeAlias, TypedDict +from ..._types import SequenceNotStr + +from ..._utils import PropertyInfo + +from ..shared_params.region_id_filter import RegionIDFilter +from ..shared_params.model_id_filter import ModelIDFilter +from ..shared_params.topic_id_filter import TopicIDFilter +from ..shared_params.tag_id_filter import TagIDFilter +from ..prompt_id_filter_param import PromptIDFilterParam +from ..shared_params.persona_id_filter import PersonaIDFilter +from .brand_name_filter_param import BrandNameFilterParam +from .merchant_name_filter_param import MerchantNameFilterParam +from .product_name_filter_param import ProductNameFilterParam +from ..shared_params.pagination import Pagination + +__all__ = ["ShoppingMerchantVisibilityByBrandParams", "Filter", "FilterProfoundShoppingAPIAssetNameFilter"] + + +class ShoppingMerchantVisibilityByBrandParams(TypedDict, total=False): + category_id: Required[str] + + start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + comparison_start_date: Annotated[Optional[Union[str, datetime]], PropertyInfo(format="iso8601")] + + comparison_end_date: Annotated[Optional[Union[str, datetime]], PropertyInfo(format="iso8601")] + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + + filters: Iterable[Filter] + + order_by: Dict[str, Literal["asc", "desc"]] + + pagination: Optional[Pagination] + """Offset-based pagination parameters.""" + + include_count: bool + + tag_filter_type: Literal["any", "all"] + + include_no_tag: bool + + exclude_topic_ids: bool + + dimensions: List[Literal["period", "merchant_name", "brand_name"]] + + metrics: List[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "total_count"]] + + owned_asset_names: SequenceNotStr[str] + + search_brand: Optional[str] + + include_brand: Optional[str] + + include_brand_only: bool + + +class FilterProfoundShoppingAPIAssetNameFilter(TypedDict, total=False): + field: Required[Literal["asset_name"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] + + +Filter: TypeAlias = Annotated[ + Union[ + RegionIDFilter, + ModelIDFilter, + TopicIDFilter, + TagIDFilter, + PromptIDFilterParam, + PersonaIDFilter, + BrandNameFilterParam, + MerchantNameFilterParam, + ProductNameFilterParam, + FilterProfoundShoppingAPIAssetNameFilter, + ], + PropertyInfo(discriminator="field"), +] diff --git a/src/types/reports/shopping_merchant_visibility_by_brand_response.py b/src/profound/types/reports/shopping_merchant_visibility_by_brand_response.py similarity index 66% rename from src/types/reports/shopping_merchant_visibility_by_brand_response.py rename to src/profound/types/reports/shopping_merchant_visibility_by_brand_response.py index 6060d1c1..e9e59ccb 100644 --- a/src/types/reports/shopping_merchant_visibility_by_brand_response.py +++ b/src/profound/types/reports/shopping_merchant_visibility_by_brand_response.py @@ -1,21 +1,16 @@ # File generated from our OpenAPI spec by Scalar. See README.md for details. -from typing import List +from typing import Dict, List from ..._models import BaseModel -from ..report_info import ReportInfo - -__all__ = ["ShoppingMerchantVisibilityByBrandResponse", "Data"] - -class Data(BaseModel): - pass +from ..report_info import ReportInfo +__all__ = ["ShoppingMerchantVisibilityByBrandResponse"] class ShoppingMerchantVisibilityByBrandResponse(BaseModel): - info: ReportInfo """Base model for report information.""" - data: List[Data] + data: List[Dict[str, object]] diff --git a/src/profound/types/reports/shopping_product_merchant_urls_params.py b/src/profound/types/reports/shopping_product_merchant_urls_params.py new file mode 100644 index 00000000..9008258a --- /dev/null +++ b/src/profound/types/reports/shopping_product_merchant_urls_params.py @@ -0,0 +1,22 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Union +from datetime import datetime +from typing_extensions import Annotated, Required, TypedDict +from ..._types import SequenceNotStr + +from ..._utils import PropertyInfo + +__all__ = ["ShoppingProductMerchantURLsParams"] + + +class ShoppingProductMerchantURLsParams(TypedDict, total=False): + category_id: Required[str] + + product_names: Required[SequenceNotStr[str]] + + start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + + end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] diff --git a/src/profound/types/reports/shopping_product_merchant_urls_response.py b/src/profound/types/reports/shopping_product_merchant_urls_response.py new file mode 100644 index 00000000..9476be0f --- /dev/null +++ b/src/profound/types/reports/shopping_product_merchant_urls_response.py @@ -0,0 +1,16 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, List + +from ..._models import BaseModel + +from ..report_info import ReportInfo + +__all__ = ["ShoppingProductMerchantURLsResponse"] + + +class ShoppingProductMerchantURLsResponse(BaseModel): + info: ReportInfo + """Base model for report information.""" + + data: List[Dict[str, object]] diff --git a/src/profound/types/reports/shopping_trigger_rate_params.py b/src/profound/types/reports/shopping_trigger_rate_params.py new file mode 100644 index 00000000..9a4e9bb7 --- /dev/null +++ b/src/profound/types/reports/shopping_trigger_rate_params.py @@ -0,0 +1,97 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypeAlias, TypedDict +from ..._types import SequenceNotStr + +from ..._utils import PropertyInfo + +from ..shared_params.region_id_filter import RegionIDFilter +from ..shared_params.model_id_filter import ModelIDFilter +from ..shared_params.topic_id_filter import TopicIDFilter +from ..shared_params.tag_id_filter import TagIDFilter +from ..prompt_id_filter_param import PromptIDFilterParam +from ..shared_params.persona_id_filter import PersonaIDFilter +from .brand_name_filter_param import BrandNameFilterParam +from .merchant_name_filter_param import MerchantNameFilterParam +from .product_name_filter_param import ProductNameFilterParam +from ..shared_params.pagination import Pagination + +__all__ = ["ShoppingTriggerRateParams", "Filter", "FilterProfoundShoppingAPIAssetNameFilter"] + + +class ShoppingTriggerRateParams(TypedDict, total=False): + category_id: Required[str] + + start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + comparison_start_date: Annotated[Optional[Union[str, datetime]], PropertyInfo(format="iso8601")] + + comparison_end_date: Annotated[Optional[Union[str, datetime]], PropertyInfo(format="iso8601")] + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + + filters: Iterable[Filter] + + order_by: Dict[str, Literal["asc", "desc"]] + + pagination: Optional[Pagination] + """Offset-based pagination parameters.""" + + include_count: bool + + tag_filter_type: Literal["any", "all"] + + include_no_tag: bool + + exclude_topic_ids: bool + + dimensions: List[ + Literal["period", "date", "model_id", "topic_id", "region_id", "persona_id", "prompt_id", "prompt"] + ] + + metrics: List[Literal["total_runs", "shopping_triggered_runs", "trigger_rate_percentage"]] + + +class FilterProfoundShoppingAPIAssetNameFilter(TypedDict, total=False): + field: Required[Literal["asset_name"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] + + +Filter: TypeAlias = Annotated[ + Union[ + RegionIDFilter, + ModelIDFilter, + TopicIDFilter, + TagIDFilter, + PromptIDFilterParam, + PersonaIDFilter, + BrandNameFilterParam, + MerchantNameFilterParam, + ProductNameFilterParam, + FilterProfoundShoppingAPIAssetNameFilter, + ], + PropertyInfo(discriminator="field"), +] diff --git a/src/types/reports/shopping_trigger_rate_response.py b/src/profound/types/reports/shopping_trigger_rate_response.py similarity index 67% rename from src/types/reports/shopping_trigger_rate_response.py rename to src/profound/types/reports/shopping_trigger_rate_response.py index 99989ae5..bfeb2bae 100644 --- a/src/types/reports/shopping_trigger_rate_response.py +++ b/src/profound/types/reports/shopping_trigger_rate_response.py @@ -1,21 +1,16 @@ # File generated from our OpenAPI spec by Scalar. See README.md for details. -from typing import List +from typing import Dict, List from ..._models import BaseModel -from ..report_info import ReportInfo - -__all__ = ["ShoppingTriggerRateResponse", "Data"] - -class Data(BaseModel): - pass +from ..report_info import ReportInfo +__all__ = ["ShoppingTriggerRateResponse"] class ShoppingTriggerRateResponse(BaseModel): - info: ReportInfo """Base model for report information.""" - data: List[Data] + data: List[Dict[str, object]] diff --git a/src/profound/types/reports/shopping_visibility_params.py b/src/profound/types/reports/shopping_visibility_params.py new file mode 100644 index 00000000..38e3d2c8 --- /dev/null +++ b/src/profound/types/reports/shopping_visibility_params.py @@ -0,0 +1,124 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypeAlias, TypedDict +from ..._types import SequenceNotStr + +from ..._utils import PropertyInfo + +from ..shared_params.region_id_filter import RegionIDFilter +from ..shared_params.model_id_filter import ModelIDFilter +from ..shared_params.topic_id_filter import TopicIDFilter +from ..shared_params.tag_id_filter import TagIDFilter +from ..prompt_id_filter_param import PromptIDFilterParam +from ..shared_params.persona_id_filter import PersonaIDFilter +from .brand_name_filter_param import BrandNameFilterParam +from .merchant_name_filter_param import MerchantNameFilterParam +from .product_name_filter_param import ProductNameFilterParam +from ..shared_params.pagination import Pagination + +__all__ = ["ShoppingVisibilityParams", "Filter", "FilterProfoundShoppingAPIAssetNameFilter"] + + +class ShoppingVisibilityParams(TypedDict, total=False): + category_id: Required[str] + + start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" + + comparison_start_date: Annotated[Optional[Union[str, datetime]], PropertyInfo(format="iso8601")] + + comparison_end_date: Annotated[Optional[Union[str, datetime]], PropertyInfo(format="iso8601")] + + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + + filters: Iterable[Filter] + + order_by: Dict[str, Literal["asc", "desc"]] + + pagination: Optional[Pagination] + """Offset-based pagination parameters.""" + + include_count: bool + + tag_filter_type: Literal["any", "all"] + + include_no_tag: bool + + exclude_topic_ids: bool + + dimensions: List[ + Literal["period", "asset_name", "date", "model_id", "topic_id", "region_id", "prompt_id", "prompt"] + ] + + metrics: List[ + Literal[ + "visibility_score", + "share_of_voice", + "average_position", + "visibility_rank", + "average_position_rank", + "position1_percentage", + "position2_percentage", + "position3_percentage", + "position_above3_percentage", + "total_count", + ] + ] + + owned_asset_names: SequenceNotStr[str] + + search_asset: Optional[str] + + include_asset: Optional[str] + + include_asset_only: bool + + include_assets_only: SequenceNotStr[str] + + rank_by: Literal["visibility_score", "average_position"] + + include_position_frequency: bool + + +class FilterProfoundShoppingAPIAssetNameFilter(TypedDict, total=False): + field: Required[Literal["asset_name"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] + + +Filter: TypeAlias = Annotated[ + Union[ + RegionIDFilter, + ModelIDFilter, + TopicIDFilter, + TagIDFilter, + PromptIDFilterParam, + PersonaIDFilter, + BrandNameFilterParam, + MerchantNameFilterParam, + ProductNameFilterParam, + FilterProfoundShoppingAPIAssetNameFilter, + ], + PropertyInfo(discriminator="field"), +] diff --git a/src/types/reports/shopping_visibility_response.py b/src/profound/types/reports/shopping_visibility_response.py similarity index 67% rename from src/types/reports/shopping_visibility_response.py rename to src/profound/types/reports/shopping_visibility_response.py index 485d2a86..6c9f650e 100644 --- a/src/types/reports/shopping_visibility_response.py +++ b/src/profound/types/reports/shopping_visibility_response.py @@ -1,21 +1,16 @@ # File generated from our OpenAPI spec by Scalar. See README.md for details. -from typing import List +from typing import Dict, List from ..._models import BaseModel -from ..report_info import ReportInfo - -__all__ = ["ShoppingVisibilityResponse", "Data"] - -class Data(BaseModel): - pass +from ..report_info import ReportInfo +__all__ = ["ShoppingVisibilityResponse"] class ShoppingVisibilityResponse(BaseModel): - info: ReportInfo """Base model for report information.""" - data: List[Data] + data: List[Dict[str, object]] diff --git a/src/profound/types/reports/web_search_result_query_params.py b/src/profound/types/reports/web_search_result_query_params.py new file mode 100644 index 00000000..35da4759 --- /dev/null +++ b/src/profound/types/reports/web_search_result_query_params.py @@ -0,0 +1,120 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, List, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypeAlias, TypedDict +from ..._types import SequenceNotStr + +from ..._utils import PropertyInfo + +from ..shared_params.pagination import Pagination +from ..hostname_filter_param import HostnameFilterParam +from ..shared_params.path_filter import PathFilter +from ..shared_params.region_id_filter import RegionIDFilter +from ..shared_params.topic_id_filter import TopicIDFilter +from ..shared_params.model_id_filter import ModelIDFilter +from ..shared_params.tag_id_filter import TagIDFilter +from ..url_filter_param import URLFilterParam +from ..root_domain_filter_param import RootDomainFilterParam +from ..shared_params.persona_id_filter import PersonaIDFilter +from ..shared_params.prompt_filter import PromptFilter +from ..prompt_id_filter_param import PromptIDFilterParam + +__all__ = ["WebSearchResultQueryParams", "Filter", "FilterSearchQueryFilter"] + + +class WebSearchResultQueryParams(TypedDict, total=False): + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + """Date interval for the report. (only used with date dimension)""" + + dimensions: List[ + Literal[ + "hostname", + "path", + "url", + "root_domain", + "date", + "region", + "topic", + "topic_id", + "model", + "tag", + "prompt", + "prompt_id", + "persona", + "search_query", + ] + ] + """Dimensions to group the report by.""" + + metrics: Required[List[Literal["count", "search_share"]]] + """Metrics to include. `search_share` is the per-prompt occurrence rate.""" + + order_by: Dict[str, Literal["asc", "desc"]] + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - `key` is the field to order by, which can be a metric or dimension + - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Pagination + """Pagination settings for the report results.""" + + category_id: Required[str] + + start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + filters: Iterable[Filter] + """List of filters to apply to the web search results report.""" + + +class FilterSearchQueryFilter(TypedDict, total=False): + """Filter by web-search query string.""" + + field: Required[Literal["search_query"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] + + +Filter: TypeAlias = Annotated[ + Union[ + HostnameFilterParam, + PathFilter, + RegionIDFilter, + TopicIDFilter, + ModelIDFilter, + TagIDFilter, + URLFilterParam, + RootDomainFilterParam, + PersonaIDFilter, + PromptFilter, + PromptIDFilterParam, + FilterSearchQueryFilter, + ], + PropertyInfo(discriminator="field"), +] diff --git a/src/types/reports/web_search_result_query_response.py b/src/profound/types/reports/web_search_result_query_response.py similarity index 64% rename from src/types/reports/web_search_result_query_response.py rename to src/profound/types/reports/web_search_result_query_response.py index a6d7f0a3..8af6b775 100644 --- a/src/types/reports/web_search_result_query_response.py +++ b/src/profound/types/reports/web_search_result_query_response.py @@ -3,22 +3,20 @@ from typing import List, Optional, Union from ..._models import BaseModel -from ..report_info import ReportInfo -__all__ = ["WebSearchResultQueryResponse", "WebSearchResultsResult"] +from ..report_info import ReportInfo +__all__ = ["WebSearchResultQueryResponse", "Data"] -class WebSearchResultsResult(BaseModel): - metrics: List[Union[int, float]] +class Data(BaseModel): + metrics: List[Union[float, str]] dimensions: List[Optional[str]] - class WebSearchResultQueryResponse(BaseModel): - info: ReportInfo """Base model for report information.""" - data: List[WebSearchResultsResult] + data: List[Data] diff --git a/src/profound/types/reports/web_search_result_stream_params.py b/src/profound/types/reports/web_search_result_stream_params.py new file mode 100644 index 00000000..81fde227 --- /dev/null +++ b/src/profound/types/reports/web_search_result_stream_params.py @@ -0,0 +1,120 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable, List, Optional, Union +from datetime import datetime +from typing_extensions import Annotated, Literal, Required, TypeAlias, TypedDict +from ..._types import SequenceNotStr + +from ..._utils import PropertyInfo + +from ..shared_params.pagination import Pagination +from ..hostname_filter_param import HostnameFilterParam +from ..shared_params.path_filter import PathFilter +from ..shared_params.region_id_filter import RegionIDFilter +from ..shared_params.topic_id_filter import TopicIDFilter +from ..shared_params.model_id_filter import ModelIDFilter +from ..shared_params.tag_id_filter import TagIDFilter +from ..url_filter_param import URLFilterParam +from ..root_domain_filter_param import RootDomainFilterParam +from ..shared_params.persona_id_filter import PersonaIDFilter +from ..shared_params.prompt_filter import PromptFilter +from ..prompt_id_filter_param import PromptIDFilterParam + +__all__ = ["WebSearchResultStreamParams", "Filter", "FilterSearchQueryFilter"] + + +class WebSearchResultStreamParams(TypedDict, total=False): + date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] + """Date interval for the report. (only used with date dimension)""" + + dimensions: List[ + Literal[ + "hostname", + "path", + "url", + "root_domain", + "date", + "region", + "topic", + "topic_id", + "model", + "tag", + "prompt", + "prompt_id", + "persona", + "search_query", + ] + ] + """Dimensions to group the report by.""" + + metrics: Required[List[Literal["count", "search_share"]]] + """Metrics to include. `search_share` is the per-prompt occurrence rate.""" + + order_by: Dict[str, Literal["asc", "desc"]] + """ + + Custom ordering of the report results. + + The order is a record of key-value pairs where: + - `key` is the field to order by, which can be a metric or dimension + - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. + + When not specified, the default order is the first metric in the query descending. + """ + + pagination: Optional[Pagination] + """Offset-based pagination parameters.""" + + category_id: Required[str] + + start_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + end_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] + """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" + + filters: Iterable[Filter] + """List of filters to apply to the web search results report.""" + + +class FilterSearchQueryFilter(TypedDict, total=False): + """Filter by web-search query string.""" + + field: Required[Literal["search_query"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] + + +Filter: TypeAlias = Annotated[ + Union[ + HostnameFilterParam, + PathFilter, + RegionIDFilter, + TopicIDFilter, + ModelIDFilter, + TagIDFilter, + URLFilterParam, + RootDomainFilterParam, + PersonaIDFilter, + PromptFilter, + PromptIDFilterParam, + FilterSearchQueryFilter, + ], + PropertyInfo(discriminator="field"), +] diff --git a/src/profound/types/reports/web_search_result_stream_response.py b/src/profound/types/reports/web_search_result_stream_response.py new file mode 100644 index 00000000..6904045b --- /dev/null +++ b/src/profound/types/reports/web_search_result_stream_response.py @@ -0,0 +1,19 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import Dict, Union +from typing_extensions import TypeAlias + +from ..._models import BaseModel + +__all__ = ["WebSearchResultStreamResponse", "SseSummaryEventData"] + + +class SseSummaryEventData(BaseModel): + query: Dict[str, object] + """The normalized query used to build the stream.""" + + total_rows: int + """Total number of rows available before pagination is applied.""" + + +WebSearchResultStreamResponse: TypeAlias = Union[SseSummaryEventData, Dict[str, object]] diff --git a/src/profound/types/root_domain_filter_param.py b/src/profound/types/root_domain_filter_param.py new file mode 100644 index 00000000..21a14968 --- /dev/null +++ b/src/profound/types/root_domain_filter_param.py @@ -0,0 +1,29 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Union +from typing_extensions import Literal, Required, TypedDict +from .._types import SequenceNotStr + +__all__ = ["RootDomainFilterParam"] + + +class RootDomainFilterParam(TypedDict, total=False): + field: Required[Literal["root_domain"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/shared/__init__.py b/src/profound/types/shared/__init__.py new file mode 100644 index 00000000..5b45f45b --- /dev/null +++ b/src/profound/types/shared/__init__.py @@ -0,0 +1,19 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from .analysis_type_filter import AnalysisTypeFilter as AnalysisTypeFilter +from .asset_id_filter import AssetIDFilter as AssetIDFilter +from .bot_name_filter import BotNameFilter as BotNameFilter +from .bot_provider_filter import BotProviderFilter as BotProviderFilter +from .cursor_pagination import CursorPagination as CursorPagination +from .model_id_filter import ModelIDFilter as ModelIDFilter +from .pagination import Pagination as Pagination +from .path_filter import PathFilter as PathFilter +from .persona_id_filter import PersonaIDFilter as PersonaIDFilter +from .prompt_filter import PromptFilter as PromptFilter +from .prompt_type_filter import PromptTypeFilter as PromptTypeFilter +from .region_id_filter import RegionIDFilter as RegionIDFilter +from .region_name_filter import RegionNameFilter as RegionNameFilter +from .tag_id_filter import TagIDFilter as TagIDFilter +from .topic_id_filter import TopicIDFilter as TopicIDFilter diff --git a/src/profound/types/shared/analysis_type_filter.py b/src/profound/types/shared/analysis_type_filter.py new file mode 100644 index 00000000..0510af51 --- /dev/null +++ b/src/profound/types/shared/analysis_type_filter.py @@ -0,0 +1,31 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Union +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["AnalysisTypeFilter"] + + +class AnalysisTypeFilter(BaseModel): + """Filter by analysis type (visibility, sentiment, or accuracy).""" + + field: Literal["analysis_type"] + + operator: Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + + value: Union[ + Literal["visibility", "sentiment", "sentiment_v2", "accuracy"], + List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]], + ] diff --git a/src/types/asset_id_filter.py b/src/profound/types/shared/asset_id_filter.py similarity index 74% rename from src/types/asset_id_filter.py rename to src/profound/types/shared/asset_id_filter.py index c24b3a15..5abf34a4 100644 --- a/src/types/asset_id_filter.py +++ b/src/profound/types/shared/asset_id_filter.py @@ -3,13 +3,12 @@ from typing import List, Union from typing_extensions import Literal -from .._models import BaseModel +from ..._models import BaseModel -__all__ = ["AssetIdFilter"] +__all__ = ["AssetIDFilter"] -class AssetIdFilter(BaseModel): - +class AssetIDFilter(BaseModel): field: Literal["asset_id"] operator: Literal["is", "not_is", "in", "not_in"] diff --git a/src/profound/types/shared/bot_name_filter.py b/src/profound/types/shared/bot_name_filter.py new file mode 100644 index 00000000..d77b6d97 --- /dev/null +++ b/src/profound/types/shared/bot_name_filter.py @@ -0,0 +1,31 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Union +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["BotNameFilter"] + + +class BotNameFilter(BaseModel): + """ + Filter by bot name (user agent). Values come from analytics data and should + not be enum-constrained because web-v2 may send newly cataloged user-agent names. + """ + + field: Literal["bot_name"] + + operator: Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + + value: Union[str, List[str]] diff --git a/src/profound/types/shared/bot_provider_filter.py b/src/profound/types/shared/bot_provider_filter.py new file mode 100644 index 00000000..7107d9db --- /dev/null +++ b/src/profound/types/shared/bot_provider_filter.py @@ -0,0 +1,83 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from typing import List, Union +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["BotProviderFilter"] + + +class BotProviderFilter(BaseModel): + """Filter by bot provider""" + + field: Literal["bot_provider"] + + operator: Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + + value: Union[ + Literal[ + "openai", + "anthropic", + "chatgpt", + "deepseek", + "google", + "microsoft", + "perplexity", + "apple", + "bytedance", + "amazon", + "meta", + "duckduckgo", + "you", + "you.com", + "xai", + "grok", + "gemini", + "mistral", + "huawei", + "yandex", + "baidu", + "yahoo", + "commoncrawl", + "openclaw", + ], + List[ + Literal[ + "openai", + "anthropic", + "chatgpt", + "deepseek", + "google", + "microsoft", + "perplexity", + "apple", + "bytedance", + "amazon", + "meta", + "duckduckgo", + "you", + "you.com", + "xai", + "grok", + "gemini", + "mistral", + "huawei", + "yandex", + "baidu", + "yahoo", + "commoncrawl", + "openclaw", + ] + ], + ] diff --git a/src/types/cursor_pagination.py b/src/profound/types/shared/cursor_pagination.py similarity index 93% rename from src/types/cursor_pagination.py rename to src/profound/types/shared/cursor_pagination.py index 02d8b491..e558ffef 100644 --- a/src/types/cursor_pagination.py +++ b/src/profound/types/shared/cursor_pagination.py @@ -2,7 +2,7 @@ from typing import Optional -from .._models import BaseModel +from ..._models import BaseModel __all__ = ["CursorPagination"] diff --git a/src/types/model_id_filter.py b/src/profound/types/shared/model_id_filter.py similarity index 65% rename from src/types/model_id_filter.py rename to src/profound/types/shared/model_id_filter.py index 1dfe272b..f9722bdf 100644 --- a/src/types/model_id_filter.py +++ b/src/profound/types/shared/model_id_filter.py @@ -3,15 +3,15 @@ from typing import List, Union from typing_extensions import Literal -from .._models import BaseModel +from ..._models import BaseModel -__all__ = ["ModelIdFilter"] +__all__ = ["ModelIDFilter"] -class ModelIdFilter(BaseModel): +class ModelIDFilter(BaseModel): """Filter by AI model/platform UUID.""" - field: Union[Literal["model_id"], Literal["model"]] + field: Literal["model_id", "model"] operator: Literal["is", "not_is", "in", "not_in"] diff --git a/src/types/pagination.py b/src/profound/types/shared/pagination.py similarity index 92% rename from src/types/pagination.py rename to src/profound/types/shared/pagination.py index 62ef56d0..13fc5fbd 100644 --- a/src/types/pagination.py +++ b/src/profound/types/shared/pagination.py @@ -2,7 +2,7 @@ from typing import Optional -from .._models import BaseModel +from ..._models import BaseModel __all__ = ["Pagination"] diff --git a/src/types/path_filter.py b/src/profound/types/shared/path_filter.py similarity index 52% rename from src/types/path_filter.py rename to src/profound/types/shared/path_filter.py index 57b7065b..ac240795 100644 --- a/src/types/path_filter.py +++ b/src/profound/types/shared/path_filter.py @@ -3,7 +3,7 @@ from typing import List, Union from typing_extensions import Literal -from .._models import BaseModel +from ..._models import BaseModel __all__ = ["PathFilter"] @@ -13,6 +13,16 @@ class PathFilter(BaseModel): field: Literal["path"] - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + operator: Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] value: Union[str, List[str]] diff --git a/src/types/persona_id_filter.py b/src/profound/types/shared/persona_id_filter.py similarity index 76% rename from src/types/persona_id_filter.py rename to src/profound/types/shared/persona_id_filter.py index b55e7288..dcba8a09 100644 --- a/src/types/persona_id_filter.py +++ b/src/profound/types/shared/persona_id_filter.py @@ -3,12 +3,12 @@ from typing import List, Union from typing_extensions import Literal -from .._models import BaseModel +from ..._models import BaseModel -__all__ = ["PersonaIdFilter"] +__all__ = ["PersonaIDFilter"] -class PersonaIdFilter(BaseModel): +class PersonaIDFilter(BaseModel): """Filter by persona UUID.""" field: Literal["persona_id"] diff --git a/src/types/prompt_filter.py b/src/profound/types/shared/prompt_filter.py similarity index 53% rename from src/types/prompt_filter.py rename to src/profound/types/shared/prompt_filter.py index 60f72ba6..91490227 100644 --- a/src/types/prompt_filter.py +++ b/src/profound/types/shared/prompt_filter.py @@ -3,7 +3,7 @@ from typing import List, Union from typing_extensions import Literal -from .._models import BaseModel +from ..._models import BaseModel __all__ = ["PromptFilter"] @@ -13,6 +13,16 @@ class PromptFilter(BaseModel): field: Literal["prompt"] - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + operator: Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] value: Union[str, List[str]] diff --git a/src/types/prompt_type_filter.py b/src/profound/types/shared/prompt_type_filter.py similarity index 67% rename from src/types/prompt_type_filter.py rename to src/profound/types/shared/prompt_type_filter.py index 9cad4d15..fae033c8 100644 --- a/src/types/prompt_type_filter.py +++ b/src/profound/types/shared/prompt_type_filter.py @@ -3,7 +3,7 @@ from typing import List, Union from typing_extensions import Literal -from .._models import BaseModel +from ..._models import BaseModel __all__ = ["PromptTypeFilter"] @@ -11,7 +11,7 @@ class PromptTypeFilter(BaseModel): """ Filter by prompt type (visibility or sentiment). - + .. deprecated:: Use :class:`AnalysisTypeFilter` instead. ``prompt_type`` is normalised to ``analysis_type`` at parse time. @@ -19,6 +19,16 @@ class PromptTypeFilter(BaseModel): field: Literal["prompt_type"] - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + operator: Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] value: Union[Literal["visibility", "sentiment"], List[Literal["visibility", "sentiment"]]] diff --git a/src/types/region_id_filter.py b/src/profound/types/shared/region_id_filter.py similarity index 64% rename from src/types/region_id_filter.py rename to src/profound/types/shared/region_id_filter.py index da8f6377..fed0ea8d 100644 --- a/src/types/region_id_filter.py +++ b/src/profound/types/shared/region_id_filter.py @@ -3,15 +3,15 @@ from typing import List, Union from typing_extensions import Literal -from .._models import BaseModel +from ..._models import BaseModel -__all__ = ["RegionIdFilter"] +__all__ = ["RegionIDFilter"] -class RegionIdFilter(BaseModel): +class RegionIDFilter(BaseModel): """Filter by region UUID.""" - field: Union[Literal["region_id"], Literal["region"]] + field: Literal["region_id", "region"] operator: Literal["is", "not_is", "in", "not_in"] diff --git a/src/types/region_name_filter.py b/src/profound/types/shared/region_name_filter.py similarity index 54% rename from src/types/region_name_filter.py rename to src/profound/types/shared/region_name_filter.py index 671adf93..627470c3 100644 --- a/src/types/region_name_filter.py +++ b/src/profound/types/shared/region_name_filter.py @@ -3,7 +3,7 @@ from typing import List, Union from typing_extensions import Literal -from .._models import BaseModel +from ..._models import BaseModel __all__ = ["RegionNameFilter"] @@ -13,6 +13,16 @@ class RegionNameFilter(BaseModel): field: Literal["region_name"] - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] + operator: Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] value: Union[str, List[str]] diff --git a/src/types/tag_id_filter.py b/src/profound/types/shared/tag_id_filter.py similarity index 67% rename from src/types/tag_id_filter.py rename to src/profound/types/shared/tag_id_filter.py index a02099e3..5c6fc8bc 100644 --- a/src/types/tag_id_filter.py +++ b/src/profound/types/shared/tag_id_filter.py @@ -3,15 +3,15 @@ from typing import List, Union from typing_extensions import Literal -from .._models import BaseModel +from ..._models import BaseModel -__all__ = ["TagIdFilter"] +__all__ = ["TagIDFilter"] -class TagIdFilter(BaseModel): +class TagIDFilter(BaseModel): """Filter by tag (prompt group) UUID.""" - field: Union[Literal["tag_id"], Literal["tag"]] + field: Literal["tag_id", "tag"] operator: Literal["is", "not_is", "in", "not_in"] diff --git a/src/types/topic_id_filter.py b/src/profound/types/shared/topic_id_filter.py similarity index 64% rename from src/types/topic_id_filter.py rename to src/profound/types/shared/topic_id_filter.py index 79ecbf77..ef3b56b0 100644 --- a/src/types/topic_id_filter.py +++ b/src/profound/types/shared/topic_id_filter.py @@ -3,15 +3,15 @@ from typing import List, Union from typing_extensions import Literal -from .._models import BaseModel +from ..._models import BaseModel -__all__ = ["TopicIdFilter"] +__all__ = ["TopicIDFilter"] -class TopicIdFilter(BaseModel): +class TopicIDFilter(BaseModel): """Filter by topic UUID.""" - field: Union[Literal["topic_id"], Literal["topic"]] + field: Literal["topic_id", "topic"] operator: Literal["is", "not_is", "in", "not_in"] diff --git a/src/profound/types/shared_params/__init__.py b/src/profound/types/shared_params/__init__.py new file mode 100644 index 00000000..92fb39fe --- /dev/null +++ b/src/profound/types/shared_params/__init__.py @@ -0,0 +1,18 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from .pagination import Pagination as Pagination +from .region_id_filter import RegionIDFilter as RegionIDFilter +from .region_name_filter import RegionNameFilter as RegionNameFilter +from .model_id_filter import ModelIDFilter as ModelIDFilter +from .tag_id_filter import TagIDFilter as TagIDFilter +from .analysis_type_filter import AnalysisTypeFilter as AnalysisTypeFilter +from .prompt_type_filter import PromptTypeFilter as PromptTypeFilter +from .prompt_filter import PromptFilter as PromptFilter +from .persona_id_filter import PersonaIDFilter as PersonaIDFilter +from .topic_id_filter import TopicIDFilter as TopicIDFilter +from .asset_id_filter import AssetIDFilter as AssetIDFilter +from .path_filter import PathFilter as PathFilter +from .bot_name_filter import BotNameFilter as BotNameFilter +from .bot_provider_filter import BotProviderFilter as BotProviderFilter diff --git a/src/profound/types/shared_params/analysis_type_filter.py b/src/profound/types/shared_params/analysis_type_filter.py new file mode 100644 index 00000000..fd5d28ae --- /dev/null +++ b/src/profound/types/shared_params/analysis_type_filter.py @@ -0,0 +1,33 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import List, Union +from typing_extensions import Literal, Required, TypedDict + +__all__ = ["AnalysisTypeFilter"] + + +class AnalysisTypeFilter(TypedDict, total=False): + field: Required[Literal["analysis_type"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[ + Union[ + Literal["visibility", "sentiment", "sentiment_v2", "accuracy"], + List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]], + ] + ] diff --git a/src/profound/types/shared_params/asset_id_filter.py b/src/profound/types/shared_params/asset_id_filter.py new file mode 100644 index 00000000..4b0c55ac --- /dev/null +++ b/src/profound/types/shared_params/asset_id_filter.py @@ -0,0 +1,17 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Union +from typing_extensions import Literal, Required, TypedDict +from ..._types import SequenceNotStr + +__all__ = ["AssetIDFilter"] + + +class AssetIDFilter(TypedDict, total=False): + field: Required[Literal["asset_id"]] + + operator: Required[Literal["is", "not_is", "in", "not_in"]] + + value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/shared_params/bot_name_filter.py b/src/profound/types/shared_params/bot_name_filter.py new file mode 100644 index 00000000..b522a6f9 --- /dev/null +++ b/src/profound/types/shared_params/bot_name_filter.py @@ -0,0 +1,29 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Union +from typing_extensions import Literal, Required, TypedDict +from ..._types import SequenceNotStr + +__all__ = ["BotNameFilter"] + + +class BotNameFilter(TypedDict, total=False): + field: Required[Literal["bot_name"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/shared_params/bot_provider_filter.py b/src/profound/types/shared_params/bot_provider_filter.py new file mode 100644 index 00000000..effa6760 --- /dev/null +++ b/src/profound/types/shared_params/bot_provider_filter.py @@ -0,0 +1,85 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import List, Union +from typing_extensions import Literal, Required, TypedDict + +__all__ = ["BotProviderFilter"] + + +class BotProviderFilter(TypedDict, total=False): + field: Required[Literal["bot_provider"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[ + Union[ + Literal[ + "openai", + "anthropic", + "chatgpt", + "deepseek", + "google", + "microsoft", + "perplexity", + "apple", + "bytedance", + "amazon", + "meta", + "duckduckgo", + "you", + "you.com", + "xai", + "grok", + "gemini", + "mistral", + "huawei", + "yandex", + "baidu", + "yahoo", + "commoncrawl", + "openclaw", + ], + List[ + Literal[ + "openai", + "anthropic", + "chatgpt", + "deepseek", + "google", + "microsoft", + "perplexity", + "apple", + "bytedance", + "amazon", + "meta", + "duckduckgo", + "you", + "you.com", + "xai", + "grok", + "gemini", + "mistral", + "huawei", + "yandex", + "baidu", + "yahoo", + "commoncrawl", + "openclaw", + ] + ], + ] + ] diff --git a/src/profound/types/shared_params/model_id_filter.py b/src/profound/types/shared_params/model_id_filter.py new file mode 100644 index 00000000..314e5385 --- /dev/null +++ b/src/profound/types/shared_params/model_id_filter.py @@ -0,0 +1,17 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Union +from typing_extensions import Literal, Required, TypedDict +from ..._types import SequenceNotStr + +__all__ = ["ModelIDFilter"] + + +class ModelIDFilter(TypedDict, total=False): + field: Required[Literal["model_id", "model"]] + + operator: Required[Literal["is", "not_is", "in", "not_in"]] + + value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/shared_params/pagination.py b/src/profound/types/shared_params/pagination.py new file mode 100644 index 00000000..3d30412c --- /dev/null +++ b/src/profound/types/shared_params/pagination.py @@ -0,0 +1,15 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing_extensions import TypedDict + +__all__ = ["Pagination"] + + +class Pagination(TypedDict, total=False): + limit: int + """Maximum number of results to return. Default is 10,000, maximum is 50,000.""" + + offset: int + """Offset for the results. Used for pagination.""" diff --git a/src/profound/types/shared_params/path_filter.py b/src/profound/types/shared_params/path_filter.py new file mode 100644 index 00000000..aa7bb58a --- /dev/null +++ b/src/profound/types/shared_params/path_filter.py @@ -0,0 +1,29 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Union +from typing_extensions import Literal, Required, TypedDict +from ..._types import SequenceNotStr + +__all__ = ["PathFilter"] + + +class PathFilter(TypedDict, total=False): + field: Required[Literal["path"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/shared_params/persona_id_filter.py b/src/profound/types/shared_params/persona_id_filter.py new file mode 100644 index 00000000..ca7636b6 --- /dev/null +++ b/src/profound/types/shared_params/persona_id_filter.py @@ -0,0 +1,17 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Union +from typing_extensions import Literal, Required, TypedDict +from ..._types import SequenceNotStr + +__all__ = ["PersonaIDFilter"] + + +class PersonaIDFilter(TypedDict, total=False): + field: Required[Literal["persona_id"]] + + operator: Required[Literal["is", "not_is", "in", "not_in"]] + + value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/shared_params/prompt_filter.py b/src/profound/types/shared_params/prompt_filter.py new file mode 100644 index 00000000..02c63dbd --- /dev/null +++ b/src/profound/types/shared_params/prompt_filter.py @@ -0,0 +1,29 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Union +from typing_extensions import Literal, Required, TypedDict +from ..._types import SequenceNotStr + +__all__ = ["PromptFilter"] + + +class PromptFilter(TypedDict, total=False): + field: Required[Literal["prompt"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/shared_params/prompt_type_filter.py b/src/profound/types/shared_params/prompt_type_filter.py new file mode 100644 index 00000000..cc537a3c --- /dev/null +++ b/src/profound/types/shared_params/prompt_type_filter.py @@ -0,0 +1,28 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import List, Union +from typing_extensions import Literal, Required, TypedDict + +__all__ = ["PromptTypeFilter"] + + +class PromptTypeFilter(TypedDict, total=False): + field: Required[Literal["prompt_type"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[Literal["visibility", "sentiment"], List[Literal["visibility", "sentiment"]]]] diff --git a/src/profound/types/shared_params/region_id_filter.py b/src/profound/types/shared_params/region_id_filter.py new file mode 100644 index 00000000..ca745ff4 --- /dev/null +++ b/src/profound/types/shared_params/region_id_filter.py @@ -0,0 +1,17 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Union +from typing_extensions import Literal, Required, TypedDict +from ..._types import SequenceNotStr + +__all__ = ["RegionIDFilter"] + + +class RegionIDFilter(TypedDict, total=False): + field: Required[Literal["region_id", "region"]] + + operator: Required[Literal["is", "not_is", "in", "not_in"]] + + value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/shared_params/region_name_filter.py b/src/profound/types/shared_params/region_name_filter.py new file mode 100644 index 00000000..144cd391 --- /dev/null +++ b/src/profound/types/shared_params/region_name_filter.py @@ -0,0 +1,29 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Union +from typing_extensions import Literal, Required, TypedDict +from ..._types import SequenceNotStr + +__all__ = ["RegionNameFilter"] + + +class RegionNameFilter(TypedDict, total=False): + field: Required[Literal["region_name"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/shared_params/tag_id_filter.py b/src/profound/types/shared_params/tag_id_filter.py new file mode 100644 index 00000000..29df3e8b --- /dev/null +++ b/src/profound/types/shared_params/tag_id_filter.py @@ -0,0 +1,17 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Union +from typing_extensions import Literal, Required, TypedDict +from ..._types import SequenceNotStr + +__all__ = ["TagIDFilter"] + + +class TagIDFilter(TypedDict, total=False): + field: Required[Literal["tag_id", "tag"]] + + operator: Required[Literal["is", "not_is", "in", "not_in"]] + + value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/shared_params/topic_id_filter.py b/src/profound/types/shared_params/topic_id_filter.py new file mode 100644 index 00000000..990a8984 --- /dev/null +++ b/src/profound/types/shared_params/topic_id_filter.py @@ -0,0 +1,17 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Union +from typing_extensions import Literal, Required, TypedDict +from ..._types import SequenceNotStr + +__all__ = ["TopicIDFilter"] + + +class TopicIDFilter(TypedDict, total=False): + field: Required[Literal["topic_id", "topic"]] + + operator: Required[Literal["is", "not_is", "in", "not_in"]] + + value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/tag_name_filter_param.py b/src/profound/types/tag_name_filter_param.py new file mode 100644 index 00000000..dbd5f561 --- /dev/null +++ b/src/profound/types/tag_name_filter_param.py @@ -0,0 +1,29 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Union +from typing_extensions import Literal, Required, TypedDict +from .._types import SequenceNotStr + +__all__ = ["TagNameFilterParam"] + + +class TagNameFilterParam(TypedDict, total=False): + field: Required[Literal["tag_name"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/topic_name_filter_param.py b/src/profound/types/topic_name_filter_param.py new file mode 100644 index 00000000..eab08bec --- /dev/null +++ b/src/profound/types/topic_name_filter_param.py @@ -0,0 +1,29 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Union +from typing_extensions import Literal, Required, TypedDict +from .._types import SequenceNotStr + +__all__ = ["TopicNameFilterParam"] + + +class TopicNameFilterParam(TypedDict, total=False): + field: Required[Literal["topic_name"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/profound/types/url_filter_param.py b/src/profound/types/url_filter_param.py new file mode 100644 index 00000000..93cc4ae0 --- /dev/null +++ b/src/profound/types/url_filter_param.py @@ -0,0 +1,29 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import Union +from typing_extensions import Literal, Required, TypedDict +from .._types import SequenceNotStr + +__all__ = ["URLFilterParam"] + + +class URLFilterParam(TypedDict, total=False): + field: Required[Literal["url"]] + + operator: Required[ + Literal[ + "is", + "not_is", + "in", + "not_in", + "contains", + "not_contains", + "matches", + "contains_case_insensitive", + "not_contains_case_insensitive", + ] + ] + + value: Required[Union[str, SequenceNotStr[str]]] diff --git a/src/resources/agents/agents.py b/src/resources/agents/agents.py deleted file mode 100644 index 68ae62cc..00000000 --- a/src/resources/agents/agents.py +++ /dev/null @@ -1,789 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -import httpx - -from typing import Iterable, Optional -from typing_extensions import Literal - -from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from ..._utils import path_template, maybe_transform, async_maybe_transform -from ..._compat import cached_property -from ..._resource import SyncAPIResource, AsyncAPIResource -from ..._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from ..._base_client import make_request_options -from .node_types import ( - NodeTypesResource, - AsyncNodeTypesResource, - NodeTypesResourceWithRawResponse, - AsyncNodeTypesResourceWithRawResponse, - NodeTypesResourceWithStreamingResponse, - AsyncNodeTypesResourceWithStreamingResponse, -) -from .runs import ( - RunsResource, - AsyncRunsResource, - RunsResourceWithRawResponse, - AsyncRunsResourceWithRawResponse, - RunsResourceWithStreamingResponse, - AsyncRunsResourceWithStreamingResponse, -) -from ...types.agent_list_response import AgentListResponse, Agent -from ...types import agent_list_params -from ...types.agent_create_v1_post_response import AgentCreateV1PostResponse -from ...types import agent_create_v1_post_params -from ...types.agent_publish_v1_id_publish_post_response import AgentPublishV1IdPublishPostResponse -from ...types.agent_retrieve_response import AgentRetrieveResponse, AgentSchema, Input, Output, AgentValidation, AgentValidationIssue -from ...types import agent_retrieve_params -from ...types.agent_update_v1_id_patch_response import AgentUpdateV1IdPatchResponse, AgentSchema, Input, Output, AgentValidation, AgentValidationIssue -from ...types import agent_update_v1_id_patch_params -from ...types.agent_list_graph_v1_graph_get_response import AgentListGraphV1GraphGetResponse, Graph -from ...types import agent_list_graph_v1_graph_get_params - -__all__ = ["AgentsResource", "AsyncAgentsResource"] - - -class AgentsResource(SyncAPIResource): - - @cached_property - def node_types(self) -> NodeTypesResource: - return NodeTypesResource(self._client) - - @cached_property - def runs(self) -> RunsResource: - return RunsResource(self._client) - - @cached_property - def with_raw_response(self) -> AgentsResourceWithRawResponse: - return AgentsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AgentsResourceWithStreamingResponse: - return AgentsResourceWithStreamingResponse(self) - - def list( - self, - *, - statuses: Optional[Iterable[Literal["published", "draft"]]] | Omit = omit, - limit: int | Omit = omit, - next_cursor: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AgentListResponse: - """ - List agents available to your organization. - - Agent status reflects whether an agent has ever been published. `published` - agents have a live published version. `draft` agents have not been - published yet. - - Args: - statuses: Optional status filter. Use `published` to list agents that have a live published version, or `draft` to list agents that have not been published yet. Defaults to `published`. - limit: Query parameter. - next_cursor: Query parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AgentListResponse: Successful Response - - Example: - ```python - agent = client.agents.list( - limit=100, - ) - ``` - """ - return self._get( - "/v1/agents", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"statuses": statuses, "limit": limit, "next_cursor": next_cursor}, agent_list_params.AgentListParams)), - cast_to=AgentListResponse, - ) - - def create_v1_post( - self, - *, - organization_id: str, - name: str, - description: Optional[str] | Omit = omit, - graph: Optional[agent_create_v1_post_params.Graph] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AgentCreateV1PostResponse: - """ - Create a new draft agent owned by the given organization. - - `organization_id` is required and you must be a member of it. The agent is created - as a `draft`; publish it with `POST /v1/agents/{agent_id}/publish` once its graph - is ready. - - Args: - organization_id: ID of the organization that will own the agent. Required — Profound API keys are user-scoped, so the owning organization must be chosen explicitly. The caller must be a member of this organization. - name: Display name for the agent. Must be non-empty. - description: Short description of the agent. - graph: Initial workflow graph for the agent's draft version. Optional — an agent can be created empty and have its graph filled in later. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AgentCreateV1PostResponse: Successful Response - - Example: - ```python - agent = client.agents.create_v1_post( - organization_id="", - name="", - ) - ``` - """ - return self._post( - "/v1/agents", - body=maybe_transform( - { - "organization_id": organization_id, - "name": name, - "description": description, - "graph": graph, - }, - agent_create_v1_post_params.AgentCreateV1PostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AgentCreateV1PostResponse, - ) - - def publish_v1_id_publish_post( - self, - agent_id: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AgentPublishV1IdPublishPostResponse: - """ - Publish an agent's latest draft as its live published version. - - You must be a member of the agent's organization. Publishing promotes the current - draft graph to a new published version. A draft that cannot produce its declared - input/output contract is rejected with `422` and is not published. - - Args: - agent_id: The ID of the agent to publish. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AgentPublishV1IdPublishPostResponse: Successful Response - - Example: - ```python - agent = client.agents.publish_v1_id_publish_post( - agent_id="agentId", - ) - ``` - """ - if agent_id is None or (isinstance(agent_id, str) and not agent_id): - raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") - return self._post( - path_template("/v1/agents/{agent_id}/publish", **{"agent_id": agent_id}), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AgentPublishV1IdPublishPostResponse, - ) - - def retrieve( - self, - agent_id: str, - *, - version: Literal["published", "draft"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AgentRetrieveResponse: - """ - Retrieve an agent and its schema details. - - Agents can have both a live published version and a draft version with newer - unpublished changes. Use the `version` parameter to choose which state to return. - - Args: - agent_id: The ID of the agent to retrieve. - version: Version of the agent to retrieve. Use `published` for the live version, or `draft` for the latest unpublished changes for the same agent. Defaults to `published`. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AgentRetrieveResponse: Successful Response - - Example: - ```python - agent = client.agents.retrieve( - agent_id="agentId", - ) - ``` - """ - if agent_id is None or (isinstance(agent_id, str) and not agent_id): - raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") - return self._get( - path_template("/v1/agents/{agent_id}", **{"agent_id": agent_id}), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"version": version}, agent_retrieve_params.AgentRetrieveParams)), - cast_to=AgentRetrieveResponse, - ) - - def update_v1_id_patch( - self, - agent_id: str, - *, - graph: agent_update_v1_id_patch_params.Graph, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AgentUpdateV1IdPatchResponse: - """ - Update an agent's draft graph in place. - - You must be a member of the agent's organization. The agent's draft is replaced with the - supplied graph and re-validated, so you can iterate one draft — create, then update per - fix — instead of creating a new agent on every change. The response carries the updated - `validation`; publish with `POST /v1/agents/{agent_id}/publish` once `validation.valid`. - - Args: - agent_id: The ID of the agent to update. - graph: New workflow graph for the agent's draft version. Replaces the current draft graph; the agent is iterated in place rather than re-created, so its ID is stable. Required — a null graph is rejected as a 422 here rather than as a relayed upstream error. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AgentUpdateV1IdPatchResponse: Successful Response - - Example: - ```python - agent = client.agents.update_v1_id_patch( - agent_id="agentId", - graph={}, - ) - ``` - """ - if agent_id is None or (isinstance(agent_id, str) and not agent_id): - raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") - return self._patch( - path_template("/v1/agents/{agent_id}", **{"agent_id": agent_id}), - body=maybe_transform( - {"graph": graph}, - agent_update_v1_id_patch_params.AgentUpdateV1IdPatchParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AgentUpdateV1IdPatchResponse, - ) - - def list_graph_v1_graph_get( - self, - agent_id: str, - *, - version: Literal["published", "draft"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AgentListGraphV1GraphGetResponse: - """ - Retrieve an agent's full workflow graph (`{nodes, edges}`). - - The graph is returned verbatim in the canonical dialect — the same shape `POST /v1/agents` - and `PATCH /v1/agents/{agent_id}` accept — so a known-good agent can be read back, copied, - and edited. Tool-backed nodes appear in their lowered `tool` form rather than the friendly - v1 node types. A `draft` is visible only to its creator; the `published` version is visible - across its organization. - - Args: - agent_id: The ID of the agent whose graph to retrieve. - version: Version of the agent whose graph to retrieve. Use `published` for the live version, or `draft` for the latest unpublished changes. Defaults to `published`. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AgentListGraphV1GraphGetResponse: Successful Response - - Example: - ```python - agent = client.agents.list_graph_v1_graph_get( - agent_id="agentId", - ) - ``` - """ - if agent_id is None or (isinstance(agent_id, str) and not agent_id): - raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") - return self._get( - path_template("/v1/agents/{agent_id}/graph", **{"agent_id": agent_id}), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=maybe_transform({"version": version}, agent_list_graph_v1_graph_get_params.AgentListGraphV1GraphGetParams)), - cast_to=AgentListGraphV1GraphGetResponse, - ) - - -class AsyncAgentsResource(AsyncAPIResource): - - @cached_property - def node_types(self) -> AsyncNodeTypesResource: - return AsyncNodeTypesResource(self._client) - - @cached_property - def runs(self) -> AsyncRunsResource: - return AsyncRunsResource(self._client) - - @cached_property - def with_raw_response(self) -> AsyncAgentsResourceWithRawResponse: - return AsyncAgentsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncAgentsResourceWithStreamingResponse: - return AsyncAgentsResourceWithStreamingResponse(self) - - async def list( - self, - *, - statuses: Optional[Iterable[Literal["published", "draft"]]] | Omit = omit, - limit: int | Omit = omit, - next_cursor: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AgentListResponse: - """ - List agents available to your organization. - - Agent status reflects whether an agent has ever been published. `published` - agents have a live published version. `draft` agents have not been - published yet. - - Args: - statuses: Optional status filter. Use `published` to list agents that have a live published version, or `draft` to list agents that have not been published yet. Defaults to `published`. - limit: Query parameter. - next_cursor: Query parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AgentListResponse: Successful Response - - Example: - ```python - agent = await client.agents.list( - limit=100, - ) - ``` - """ - return await self._get( - "/v1/agents", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"statuses": statuses, "limit": limit, "next_cursor": next_cursor}, agent_list_params.AgentListParams)), - cast_to=AgentListResponse, - ) - - async def create_v1_post( - self, - *, - organization_id: str, - name: str, - description: Optional[str] | Omit = omit, - graph: Optional[agent_create_v1_post_params.Graph] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AgentCreateV1PostResponse: - """ - Create a new draft agent owned by the given organization. - - `organization_id` is required and you must be a member of it. The agent is created - as a `draft`; publish it with `POST /v1/agents/{agent_id}/publish` once its graph - is ready. - - Args: - organization_id: ID of the organization that will own the agent. Required — Profound API keys are user-scoped, so the owning organization must be chosen explicitly. The caller must be a member of this organization. - name: Display name for the agent. Must be non-empty. - description: Short description of the agent. - graph: Initial workflow graph for the agent's draft version. Optional — an agent can be created empty and have its graph filled in later. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AgentCreateV1PostResponse: Successful Response - - Example: - ```python - agent = await client.agents.create_v1_post( - organization_id="", - name="", - ) - ``` - """ - return await self._post( - "/v1/agents", - body=await async_maybe_transform( - { - "organization_id": organization_id, - "name": name, - "description": description, - "graph": graph, - }, - agent_create_v1_post_params.AgentCreateV1PostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AgentCreateV1PostResponse, - ) - - async def publish_v1_id_publish_post( - self, - agent_id: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AgentPublishV1IdPublishPostResponse: - """ - Publish an agent's latest draft as its live published version. - - You must be a member of the agent's organization. Publishing promotes the current - draft graph to a new published version. A draft that cannot produce its declared - input/output contract is rejected with `422` and is not published. - - Args: - agent_id: The ID of the agent to publish. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AgentPublishV1IdPublishPostResponse: Successful Response - - Example: - ```python - agent = await client.agents.publish_v1_id_publish_post( - agent_id="agentId", - ) - ``` - """ - if agent_id is None or (isinstance(agent_id, str) and not agent_id): - raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") - return await self._post( - path_template("/v1/agents/{agent_id}/publish", **{"agent_id": agent_id}), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AgentPublishV1IdPublishPostResponse, - ) - - async def retrieve( - self, - agent_id: str, - *, - version: Literal["published", "draft"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AgentRetrieveResponse: - """ - Retrieve an agent and its schema details. - - Agents can have both a live published version and a draft version with newer - unpublished changes. Use the `version` parameter to choose which state to return. - - Args: - agent_id: The ID of the agent to retrieve. - version: Version of the agent to retrieve. Use `published` for the live version, or `draft` for the latest unpublished changes for the same agent. Defaults to `published`. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AgentRetrieveResponse: Successful Response - - Example: - ```python - agent = await client.agents.retrieve( - agent_id="agentId", - ) - ``` - """ - if agent_id is None or (isinstance(agent_id, str) and not agent_id): - raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") - return await self._get( - path_template("/v1/agents/{agent_id}", **{"agent_id": agent_id}), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"version": version}, agent_retrieve_params.AgentRetrieveParams)), - cast_to=AgentRetrieveResponse, - ) - - async def update_v1_id_patch( - self, - agent_id: str, - *, - graph: agent_update_v1_id_patch_params.Graph, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AgentUpdateV1IdPatchResponse: - """ - Update an agent's draft graph in place. - - You must be a member of the agent's organization. The agent's draft is replaced with the - supplied graph and re-validated, so you can iterate one draft — create, then update per - fix — instead of creating a new agent on every change. The response carries the updated - `validation`; publish with `POST /v1/agents/{agent_id}/publish` once `validation.valid`. - - Args: - agent_id: The ID of the agent to update. - graph: New workflow graph for the agent's draft version. Replaces the current draft graph; the agent is iterated in place rather than re-created, so its ID is stable. Required — a null graph is rejected as a 422 here rather than as a relayed upstream error. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AgentUpdateV1IdPatchResponse: Successful Response - - Example: - ```python - agent = await client.agents.update_v1_id_patch( - agent_id="agentId", - graph={}, - ) - ``` - """ - if agent_id is None or (isinstance(agent_id, str) and not agent_id): - raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") - return await self._patch( - path_template("/v1/agents/{agent_id}", **{"agent_id": agent_id}), - body=await async_maybe_transform( - {"graph": graph}, - agent_update_v1_id_patch_params.AgentUpdateV1IdPatchParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AgentUpdateV1IdPatchResponse, - ) - - async def list_graph_v1_graph_get( - self, - agent_id: str, - *, - version: Literal["published", "draft"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AgentListGraphV1GraphGetResponse: - """ - Retrieve an agent's full workflow graph (`{nodes, edges}`). - - The graph is returned verbatim in the canonical dialect — the same shape `POST /v1/agents` - and `PATCH /v1/agents/{agent_id}` accept — so a known-good agent can be read back, copied, - and edited. Tool-backed nodes appear in their lowered `tool` form rather than the friendly - v1 node types. A `draft` is visible only to its creator; the `published` version is visible - across its organization. - - Args: - agent_id: The ID of the agent whose graph to retrieve. - version: Version of the agent whose graph to retrieve. Use `published` for the live version, or `draft` for the latest unpublished changes. Defaults to `published`. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AgentListGraphV1GraphGetResponse: Successful Response - - Example: - ```python - agent = await client.agents.list_graph_v1_graph_get( - agent_id="agentId", - ) - ``` - """ - if agent_id is None or (isinstance(agent_id, str) and not agent_id): - raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}") - return await self._get( - path_template("/v1/agents/{agent_id}/graph", **{"agent_id": agent_id}), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, query=await async_maybe_transform({"version": version}, agent_list_graph_v1_graph_get_params.AgentListGraphV1GraphGetParams)), - cast_to=AgentListGraphV1GraphGetResponse, - ) - - -class AgentsResourceWithRawResponse: - def __init__(self, agents: AgentsResource) -> None: - self._agents = agents - - self.list = to_raw_response_wrapper( - agents.list, - ) - self.create_v1_post = to_raw_response_wrapper( - agents.create_v1_post, - ) - self.publish_v1_id_publish_post = to_raw_response_wrapper( - agents.publish_v1_id_publish_post, - ) - self.retrieve = to_raw_response_wrapper( - agents.retrieve, - ) - self.update_v1_id_patch = to_raw_response_wrapper( - agents.update_v1_id_patch, - ) - self.list_graph_v1_graph_get = to_raw_response_wrapper( - agents.list_graph_v1_graph_get, - ) - - @cached_property - def node_types(self) -> NodeTypesResourceWithRawResponse: - return NodeTypesResourceWithRawResponse(self._agents.node_types) - - @cached_property - def runs(self) -> RunsResourceWithRawResponse: - return RunsResourceWithRawResponse(self._agents.runs) - - -class AsyncAgentsResourceWithRawResponse: - def __init__(self, agents: AsyncAgentsResource) -> None: - self._agents = agents - - self.list = async_to_raw_response_wrapper( - agents.list, - ) - self.create_v1_post = async_to_raw_response_wrapper( - agents.create_v1_post, - ) - self.publish_v1_id_publish_post = async_to_raw_response_wrapper( - agents.publish_v1_id_publish_post, - ) - self.retrieve = async_to_raw_response_wrapper( - agents.retrieve, - ) - self.update_v1_id_patch = async_to_raw_response_wrapper( - agents.update_v1_id_patch, - ) - self.list_graph_v1_graph_get = async_to_raw_response_wrapper( - agents.list_graph_v1_graph_get, - ) - - @cached_property - def node_types(self) -> AsyncNodeTypesResourceWithRawResponse: - return AsyncNodeTypesResourceWithRawResponse(self._agents.node_types) - - @cached_property - def runs(self) -> AsyncRunsResourceWithRawResponse: - return AsyncRunsResourceWithRawResponse(self._agents.runs) - - -class AgentsResourceWithStreamingResponse: - def __init__(self, agents: AgentsResource) -> None: - self._agents = agents - - self.list = to_streamed_response_wrapper( - agents.list, - ) - self.create_v1_post = to_streamed_response_wrapper( - agents.create_v1_post, - ) - self.publish_v1_id_publish_post = to_streamed_response_wrapper( - agents.publish_v1_id_publish_post, - ) - self.retrieve = to_streamed_response_wrapper( - agents.retrieve, - ) - self.update_v1_id_patch = to_streamed_response_wrapper( - agents.update_v1_id_patch, - ) - self.list_graph_v1_graph_get = to_streamed_response_wrapper( - agents.list_graph_v1_graph_get, - ) - - @cached_property - def node_types(self) -> NodeTypesResourceWithStreamingResponse: - return NodeTypesResourceWithStreamingResponse(self._agents.node_types) - - @cached_property - def runs(self) -> RunsResourceWithStreamingResponse: - return RunsResourceWithStreamingResponse(self._agents.runs) - - -class AsyncAgentsResourceWithStreamingResponse: - def __init__(self, agents: AsyncAgentsResource) -> None: - self._agents = agents - - self.list = async_to_streamed_response_wrapper( - agents.list, - ) - self.create_v1_post = async_to_streamed_response_wrapper( - agents.create_v1_post, - ) - self.publish_v1_id_publish_post = async_to_streamed_response_wrapper( - agents.publish_v1_id_publish_post, - ) - self.retrieve = async_to_streamed_response_wrapper( - agents.retrieve, - ) - self.update_v1_id_patch = async_to_streamed_response_wrapper( - agents.update_v1_id_patch, - ) - self.list_graph_v1_graph_get = async_to_streamed_response_wrapper( - agents.list_graph_v1_graph_get, - ) - - @cached_property - def node_types(self) -> AsyncNodeTypesResourceWithStreamingResponse: - return AsyncNodeTypesResourceWithStreamingResponse(self._agents.node_types) - - @cached_property - def runs(self) -> AsyncRunsResourceWithStreamingResponse: - return AsyncRunsResourceWithStreamingResponse(self._agents.runs) diff --git a/src/resources/agents/node_types.py b/src/resources/agents/node_types.py deleted file mode 100644 index 52dec50d..00000000 --- a/src/resources/agents/node_types.py +++ /dev/null @@ -1,249 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -import httpx - -from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from ..._utils import path_template, maybe_transform, async_maybe_transform -from ..._compat import cached_property -from ..._resource import SyncAPIResource, AsyncAPIResource -from ..._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from ..._base_client import make_request_options -from ...types.agents.node_type_list_v1_agents_get_response import NodeTypeListV1AgentsGetResponse, NodeTypeSummary -from ...types.agents.node_type_list_schema_v1_agents_schema_get_response import NodeTypeListSchemaV1AgentsSchemaGetResponse, Schema, Example, Documentation - -__all__ = ["NodeTypesResource", "AsyncNodeTypesResource"] - - -class NodeTypesResource(SyncAPIResource): - - @cached_property - def with_raw_response(self) -> NodeTypesResourceWithRawResponse: - return NodeTypesResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> NodeTypesResourceWithStreamingResponse: - return NodeTypesResourceWithStreamingResponse(self) - - def list_v1_agents_get( - self, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> NodeTypeListV1AgentsGetResponse: - """ - List the node types available for building agents. - - The set is deterministic and does not depend on the caller, so the response - is safe to cache across sessions. Integration-dependent and dynamic-schema - node types are intentionally excluded in v1. - - Args: - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - NodeTypeListV1AgentsGetResponse: Successful Response - - Example: - ```python - node_type = client.agents.node_types.list_v1_agents_get() - ``` - """ - return self._get( - "/v1/agents/node-types", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=NodeTypeListV1AgentsGetResponse, - ) - - def list_schema_v1_agents_schema_get( - self, - node_type: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> NodeTypeListSchemaV1AgentsSchemaGetResponse: - """ - Retrieve the JSON schema and worked examples for a single node type. - - The `schema` field is an opaque JSON Schema for the node's configuration. - Use `schema_version` as a cache key — it bumps whenever the schema changes. - - Args: - node_type: The node type to fetch the schema for, e.g. `llm`. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - NodeTypeListSchemaV1AgentsSchemaGetResponse: Successful Response - - Example: - ```python - node_type = client.agents.node_types.list_schema_v1_agents_schema_get( - node_type="nodeType", - ) - ``` - """ - if node_type is None or (isinstance(node_type, str) and not node_type): - raise ValueError(f"Expected a non-empty value for `node_type` but received {node_type!r}") - return self._get( - path_template("/v1/agents/node-types/{node_type}/schema", **{"node_type": node_type}), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=NodeTypeListSchemaV1AgentsSchemaGetResponse, - ) - - -class AsyncNodeTypesResource(AsyncAPIResource): - - @cached_property - def with_raw_response(self) -> AsyncNodeTypesResourceWithRawResponse: - return AsyncNodeTypesResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncNodeTypesResourceWithStreamingResponse: - return AsyncNodeTypesResourceWithStreamingResponse(self) - - async def list_v1_agents_get( - self, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> NodeTypeListV1AgentsGetResponse: - """ - List the node types available for building agents. - - The set is deterministic and does not depend on the caller, so the response - is safe to cache across sessions. Integration-dependent and dynamic-schema - node types are intentionally excluded in v1. - - Args: - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - NodeTypeListV1AgentsGetResponse: Successful Response - - Example: - ```python - node_type = await client.agents.node_types.list_v1_agents_get() - ``` - """ - return await self._get( - "/v1/agents/node-types", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=NodeTypeListV1AgentsGetResponse, - ) - - async def list_schema_v1_agents_schema_get( - self, - node_type: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> NodeTypeListSchemaV1AgentsSchemaGetResponse: - """ - Retrieve the JSON schema and worked examples for a single node type. - - The `schema` field is an opaque JSON Schema for the node's configuration. - Use `schema_version` as a cache key — it bumps whenever the schema changes. - - Args: - node_type: The node type to fetch the schema for, e.g. `llm`. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - NodeTypeListSchemaV1AgentsSchemaGetResponse: Successful Response - - Example: - ```python - node_type = await client.agents.node_types.list_schema_v1_agents_schema_get( - node_type="nodeType", - ) - ``` - """ - if node_type is None or (isinstance(node_type, str) and not node_type): - raise ValueError(f"Expected a non-empty value for `node_type` but received {node_type!r}") - return await self._get( - path_template("/v1/agents/node-types/{node_type}/schema", **{"node_type": node_type}), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=NodeTypeListSchemaV1AgentsSchemaGetResponse, - ) - - -class NodeTypesResourceWithRawResponse: - def __init__(self, node_types: NodeTypesResource) -> None: - self._node_types = node_types - - self.list_v1_agents_get = to_raw_response_wrapper( - node_types.list_v1_agents_get, - ) - self.list_schema_v1_agents_schema_get = to_raw_response_wrapper( - node_types.list_schema_v1_agents_schema_get, - ) - - -class AsyncNodeTypesResourceWithRawResponse: - def __init__(self, node_types: AsyncNodeTypesResource) -> None: - self._node_types = node_types - - self.list_v1_agents_get = async_to_raw_response_wrapper( - node_types.list_v1_agents_get, - ) - self.list_schema_v1_agents_schema_get = async_to_raw_response_wrapper( - node_types.list_schema_v1_agents_schema_get, - ) - - -class NodeTypesResourceWithStreamingResponse: - def __init__(self, node_types: NodeTypesResource) -> None: - self._node_types = node_types - - self.list_v1_agents_get = to_streamed_response_wrapper( - node_types.list_v1_agents_get, - ) - self.list_schema_v1_agents_schema_get = to_streamed_response_wrapper( - node_types.list_schema_v1_agents_schema_get, - ) - - -class AsyncNodeTypesResourceWithStreamingResponse: - def __init__(self, node_types: AsyncNodeTypesResource) -> None: - self._node_types = node_types - - self.list_v1_agents_get = async_to_streamed_response_wrapper( - node_types.list_v1_agents_get, - ) - self.list_schema_v1_agents_schema_get = async_to_streamed_response_wrapper( - node_types.list_schema_v1_agents_schema_get, - ) diff --git a/src/resources/organization.py b/src/resources/organization.py deleted file mode 100644 index a17c16eb..00000000 --- a/src/resources/organization.py +++ /dev/null @@ -1,156 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -import httpx - -from .._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from .._utils import path_template, maybe_transform, async_maybe_transform -from .._compat import cached_property -from .._resource import SyncAPIResource, AsyncAPIResource -from .._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from .._base_client import make_request_options -from ..types.organization_list_category_regions_v1_org_categories_category_regions_get_response import OrganizationListCategoryRegionsV1OrgCategoriesCategoryRegionsGetResponse - -__all__ = ["OrganizationResource", "AsyncOrganizationResource"] - - -class OrganizationResource(SyncAPIResource): - - @cached_property - def with_raw_response(self) -> OrganizationResourceWithRawResponse: - return OrganizationResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> OrganizationResourceWithStreamingResponse: - return OrganizationResourceWithStreamingResponse(self) - - def list_category_regions_v1_org_categories_category_regions_get( - self, - category_id: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> OrganizationListCategoryRegionsV1OrgCategoriesCategoryRegionsGetResponse: - """ - Get the regions for a specific category. - - Args: - category_id: Path parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - OrganizationListCategoryRegionsV1OrgCategoriesCategoryRegionsGetResponse: Successful Response - - Example: - ```python - organization = client.organization.list_category_regions_v1_org_categories_category_regions_get( - category_id="categoryId", - ) - ``` - """ - if category_id is None or (isinstance(category_id, str) and not category_id): - raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return self._get( - path_template("/v1/org/categories/{category_id}/regions", **{"category_id": category_id}), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=OrganizationListCategoryRegionsV1OrgCategoriesCategoryRegionsGetResponse, - ) - - -class AsyncOrganizationResource(AsyncAPIResource): - - @cached_property - def with_raw_response(self) -> AsyncOrganizationResourceWithRawResponse: - return AsyncOrganizationResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncOrganizationResourceWithStreamingResponse: - return AsyncOrganizationResourceWithStreamingResponse(self) - - async def list_category_regions_v1_org_categories_category_regions_get( - self, - category_id: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> OrganizationListCategoryRegionsV1OrgCategoriesCategoryRegionsGetResponse: - """ - Get the regions for a specific category. - - Args: - category_id: Path parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - OrganizationListCategoryRegionsV1OrgCategoriesCategoryRegionsGetResponse: Successful Response - - Example: - ```python - organization = await client.organization.list_category_regions_v1_org_categories_category_regions_get( - category_id="categoryId", - ) - ``` - """ - if category_id is None or (isinstance(category_id, str) and not category_id): - raise ValueError(f"Expected a non-empty value for `category_id` but received {category_id!r}") - return await self._get( - path_template("/v1/org/categories/{category_id}/regions", **{"category_id": category_id}), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=OrganizationListCategoryRegionsV1OrgCategoriesCategoryRegionsGetResponse, - ) - - -class OrganizationResourceWithRawResponse: - def __init__(self, organization: OrganizationResource) -> None: - self._organization = organization - - self.list_category_regions_v1_org_categories_category_regions_get = to_raw_response_wrapper( - organization.list_category_regions_v1_org_categories_category_regions_get, - ) - - -class AsyncOrganizationResourceWithRawResponse: - def __init__(self, organization: AsyncOrganizationResource) -> None: - self._organization = organization - - self.list_category_regions_v1_org_categories_category_regions_get = async_to_raw_response_wrapper( - organization.list_category_regions_v1_org_categories_category_regions_get, - ) - - -class OrganizationResourceWithStreamingResponse: - def __init__(self, organization: OrganizationResource) -> None: - self._organization = organization - - self.list_category_regions_v1_org_categories_category_regions_get = to_streamed_response_wrapper( - organization.list_category_regions_v1_org_categories_category_regions_get, - ) - - -class AsyncOrganizationResourceWithStreamingResponse: - def __init__(self, organization: AsyncOrganizationResource) -> None: - self._organization = organization - - self.list_category_regions_v1_org_categories_category_regions_get = async_to_streamed_response_wrapper( - organization.list_category_regions_v1_org_categories_category_regions_get, - ) diff --git a/src/resources/prompts/__init__.py b/src/resources/prompts/__init__.py deleted file mode 100644 index c7f30219..00000000 --- a/src/resources/prompts/__init__.py +++ /dev/null @@ -1,33 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from .prompts import ( - PromptsResource, - AsyncPromptsResource, - PromptsResourceWithRawResponse, - AsyncPromptsResourceWithRawResponse, - PromptsResourceWithStreamingResponse, - AsyncPromptsResourceWithStreamingResponse, -) -from .answers import ( - AnswersResource, - AsyncAnswersResource, - AnswersResourceWithRawResponse, - AsyncAnswersResourceWithRawResponse, - AnswersResourceWithStreamingResponse, - AsyncAnswersResourceWithStreamingResponse, -) - -__all__ = [ - "PromptsResource", - "AsyncPromptsResource", - "PromptsResourceWithRawResponse", - "AsyncPromptsResourceWithRawResponse", - "PromptsResourceWithStreamingResponse", - "AsyncPromptsResourceWithStreamingResponse", - "AnswersResource", - "AsyncAnswersResource", - "AnswersResourceWithRawResponse", - "AsyncAnswersResourceWithRawResponse", - "AnswersResourceWithStreamingResponse", - "AsyncAnswersResourceWithStreamingResponse", -] diff --git a/src/resources/prompts/answers.py b/src/resources/prompts/answers.py deleted file mode 100644 index c9d41b78..00000000 --- a/src/resources/prompts/answers.py +++ /dev/null @@ -1,490 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -import httpx - -from typing import Iterable, Optional, Union -from datetime import datetime -from typing_extensions import Literal - -from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from ..._utils import path_template, maybe_transform, async_maybe_transform -from ..._compat import cached_property -from ..._resource import SyncAPIResource, AsyncAPIResource -from ..._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from ..._base_client import make_request_options -from ..._streaming import Stream, AsyncStream -from ...types.prompts.answer_create_v1_prompts_post_response import AnswerCreateV1PromptsPostResponse, AnswersResponseInfo, AnswersRawData, CitationDetail, CitationDetailGroup, SentimentTheme -from ...types.pagination import Pagination -from ...types.region_id_filter import RegionIdFilter -from ...types.region_name_filter import RegionNameFilter -from ...types.model_id_filter import ModelIdFilter -from ...types.tag_id_filter import TagIdFilter -from ...types.analysis_type_filter import AnalysisTypeFilter -from ...types.prompt_type_filter import PromptTypeFilter -from ...types.prompt_filter import PromptFilter -from ...types.persona_id_filter import PersonaIdFilter -from ...types.topic_id_filter import TopicIdFilter -from ...types.asset_id_filter import AssetIdFilter -from ...types.prompts import answer_create_v1_prompts_post_params -from ...types.prompts.answer_query_v2_v2_prompts_post_response import AnswerQueryV2V2PromptsPostResponse -from ...types.prompts import answer_query_v2_v2_prompts_post_params -from ...types.prompts import answer_stream_v2_v2_prompts_stream_post_params - -__all__ = ["AnswersResource", "AsyncAnswersResource"] - - -class AnswersResource(SyncAPIResource): - - @cached_property - def with_raw_response(self) -> AnswersResourceWithRawResponse: - return AnswersResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AnswersResourceWithStreamingResponse: - return AnswersResourceWithStreamingResponse(self) - - def create_v1_prompts_post( - self, - *, - category_id: str, - start_date: Union[str, datetime], - end_date: Union[str, datetime], - pagination: Pagination | Omit = omit, - filters: Iterable[object] | Omit = omit, - include: answer_create_v1_prompts_post_params.Include | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AnswerCreateV1PromptsPostResponse: - """ - Get Answers - - Args: - category_id: Body parameter. - start_date: Body parameter. - end_date: Body parameter. - pagination: Pagination parameters for the results. Default is 10,000 rows with no offset. - filters: List of filters to apply to the answers report. - include: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AnswerCreateV1PromptsPostResponse: Successful Response - - Example: - ```python - answer = client.prompts.answers.create_v1_prompts_post( - category_id="", - start_date="", - end_date="", - ) - ``` - """ - return self._post( - "/v1/prompts/answers", - body=maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "pagination": pagination, - "filters": filters, - "include": include, - }, - answer_create_v1_prompts_post_params.AnswerCreateV1PromptsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AnswerCreateV1PromptsPostResponse, - ) - - def query_v2_v2_prompts_post( - self, - *, - category_id: str, - start_date: str, - end_date: str, - include: Optional[Iterable[Literal["run_id", "date", "model", "topic", "topic_id", "persona", "region", "tags", "prompt", "prompt_id", "response", "mentions", "citations", "search_queries", "analysis_types", "sentiment_claims"]]] | Omit = omit, - filter: Optional[answer_query_v2_v2_prompts_post_params.Filter] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - cursor: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AnswerQueryV2V2PromptsPostResponse: - """ - Query Answers V2 - - Args: - category_id: Body parameter. - start_date: YYYY-MM-DD, ET, inclusive - end_date: YYYY-MM-DD, ET, inclusive - include: Which row fields to return: `run_id`, `date`, `model`, `topic`, `topic_id`, `region`, `persona`, `tags`, `prompt`, `prompt_id`, `response`, `mentions`, `citations`, `search_queries`, `analysis_types`, `sentiment_claims`. Omit for all of them. - filter: and/or/not tree over `model`, `topic`, `region`, `persona`, `prompt`, `tag`, `analysis_type` (visibility/sentiment/factcheck); plus top-level `and` leaves `domain` or `page` (`is` one value, or `in` a list). Substring-search the prompt with `{"field": "prompt", "op": "contains", "value": "…"}`. - limit: Page size; default 10, max 50. - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - cursor: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AnswerQueryV2V2PromptsPostResponse: Successful Response - - Example: - ```python - answer = client.prompts.answers.query_v2_v2_prompts_post( - category_id="", - start_date="", - end_date="", - ) - ``` - """ - return self._post( - "/v2/prompts/answers", - body=maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "include": include, - "filter": filter, - "limit": limit, - "max_results": max_results, - "cursor": cursor, - }, - answer_query_v2_v2_prompts_post_params.AnswerQueryV2V2PromptsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AnswerQueryV2V2PromptsPostResponse, - ) - - def stream_v2_v2_prompts_stream_post( - self, - *, - category_id: str, - start_date: str, - end_date: str, - include: Optional[Iterable[Literal["run_id", "date", "model", "topic", "topic_id", "persona", "region", "tags", "prompt", "prompt_id", "response", "mentions", "citations", "search_queries", "analysis_types", "sentiment_claims"]]] | Omit = omit, - filter: Optional[answer_stream_v2_v2_prompts_stream_post_params.Filter] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - cursor: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Stream[str]: - """ - Stream Answers V2 - - Args: - category_id: Body parameter. - start_date: YYYY-MM-DD, ET, inclusive - end_date: YYYY-MM-DD, ET, inclusive - include: Which row fields to return: `run_id`, `date`, `model`, `topic`, `topic_id`, `region`, `persona`, `tags`, `prompt`, `prompt_id`, `response`, `mentions`, `citations`, `search_queries`, `analysis_types`, `sentiment_claims`. Omit for all of them. - filter: and/or/not tree over `model`, `topic`, `region`, `persona`, `prompt`, `tag`, `analysis_type` (visibility/sentiment/factcheck); plus top-level `and` leaves `domain` or `page` (`is` one value, or `in` a list). Substring-search the prompt with `{"field": "prompt", "op": "contains", "value": "…"}`. - limit: Page size; default 10, max 50. - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - cursor: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - Stream[str]: Successful Response - - Example: - ```python - stream = client.prompts.answers.stream_v2_v2_prompts_stream_post( - category_id="", - start_date="", - end_date="", - ) - for event in stream: - print(event) - ``` - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return self._post( - "/v2/prompts/answers/stream", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=str, - stream=True, - stream_cls=Stream[str], - ) - - -class AsyncAnswersResource(AsyncAPIResource): - - @cached_property - def with_raw_response(self) -> AsyncAnswersResourceWithRawResponse: - return AsyncAnswersResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncAnswersResourceWithStreamingResponse: - return AsyncAnswersResourceWithStreamingResponse(self) - - async def create_v1_prompts_post( - self, - *, - category_id: str, - start_date: Union[str, datetime], - end_date: Union[str, datetime], - pagination: Pagination | Omit = omit, - filters: Iterable[object] | Omit = omit, - include: answer_create_v1_prompts_post_params.Include | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AnswerCreateV1PromptsPostResponse: - """ - Get Answers - - Args: - category_id: Body parameter. - start_date: Body parameter. - end_date: Body parameter. - pagination: Pagination parameters for the results. Default is 10,000 rows with no offset. - filters: List of filters to apply to the answers report. - include: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AnswerCreateV1PromptsPostResponse: Successful Response - - Example: - ```python - answer = await client.prompts.answers.create_v1_prompts_post( - category_id="", - start_date="", - end_date="", - ) - ``` - """ - return await self._post( - "/v1/prompts/answers", - body=await async_maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "pagination": pagination, - "filters": filters, - "include": include, - }, - answer_create_v1_prompts_post_params.AnswerCreateV1PromptsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AnswerCreateV1PromptsPostResponse, - ) - - async def query_v2_v2_prompts_post( - self, - *, - category_id: str, - start_date: str, - end_date: str, - include: Optional[Iterable[Literal["run_id", "date", "model", "topic", "topic_id", "persona", "region", "tags", "prompt", "prompt_id", "response", "mentions", "citations", "search_queries", "analysis_types", "sentiment_claims"]]] | Omit = omit, - filter: Optional[answer_query_v2_v2_prompts_post_params.Filter] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - cursor: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AnswerQueryV2V2PromptsPostResponse: - """ - Query Answers V2 - - Args: - category_id: Body parameter. - start_date: YYYY-MM-DD, ET, inclusive - end_date: YYYY-MM-DD, ET, inclusive - include: Which row fields to return: `run_id`, `date`, `model`, `topic`, `topic_id`, `region`, `persona`, `tags`, `prompt`, `prompt_id`, `response`, `mentions`, `citations`, `search_queries`, `analysis_types`, `sentiment_claims`. Omit for all of them. - filter: and/or/not tree over `model`, `topic`, `region`, `persona`, `prompt`, `tag`, `analysis_type` (visibility/sentiment/factcheck); plus top-level `and` leaves `domain` or `page` (`is` one value, or `in` a list). Substring-search the prompt with `{"field": "prompt", "op": "contains", "value": "…"}`. - limit: Page size; default 10, max 50. - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - cursor: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AnswerQueryV2V2PromptsPostResponse: Successful Response - - Example: - ```python - answer = await client.prompts.answers.query_v2_v2_prompts_post( - category_id="", - start_date="", - end_date="", - ) - ``` - """ - return await self._post( - "/v2/prompts/answers", - body=await async_maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "include": include, - "filter": filter, - "limit": limit, - "max_results": max_results, - "cursor": cursor, - }, - answer_query_v2_v2_prompts_post_params.AnswerQueryV2V2PromptsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AnswerQueryV2V2PromptsPostResponse, - ) - - async def stream_v2_v2_prompts_stream_post( - self, - *, - category_id: str, - start_date: str, - end_date: str, - include: Optional[Iterable[Literal["run_id", "date", "model", "topic", "topic_id", "persona", "region", "tags", "prompt", "prompt_id", "response", "mentions", "citations", "search_queries", "analysis_types", "sentiment_claims"]]] | Omit = omit, - filter: Optional[answer_stream_v2_v2_prompts_stream_post_params.Filter] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - cursor: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncStream[str]: - """ - Stream Answers V2 - - Args: - category_id: Body parameter. - start_date: YYYY-MM-DD, ET, inclusive - end_date: YYYY-MM-DD, ET, inclusive - include: Which row fields to return: `run_id`, `date`, `model`, `topic`, `topic_id`, `region`, `persona`, `tags`, `prompt`, `prompt_id`, `response`, `mentions`, `citations`, `search_queries`, `analysis_types`, `sentiment_claims`. Omit for all of them. - filter: and/or/not tree over `model`, `topic`, `region`, `persona`, `prompt`, `tag`, `analysis_type` (visibility/sentiment/factcheck); plus top-level `and` leaves `domain` or `page` (`is` one value, or `in` a list). Substring-search the prompt with `{"field": "prompt", "op": "contains", "value": "…"}`. - limit: Page size; default 10, max 50. - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - cursor: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AsyncStream[str]: Successful Response - - Example: - ```python - stream = await client.prompts.answers.stream_v2_v2_prompts_stream_post( - category_id="", - start_date="", - end_date="", - ) - async for event in stream: - print(event) - ``` - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return await self._post( - "/v2/prompts/answers/stream", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=str, - stream=True, - stream_cls=AsyncStream[str], - ) - - -class AnswersResourceWithRawResponse: - def __init__(self, answers: AnswersResource) -> None: - self._answers = answers - - self.create_v1_prompts_post = to_raw_response_wrapper( - answers.create_v1_prompts_post, - ) - self.query_v2_v2_prompts_post = to_raw_response_wrapper( - answers.query_v2_v2_prompts_post, - ) - self.stream_v2_v2_prompts_stream_post = to_raw_response_wrapper( - answers.stream_v2_v2_prompts_stream_post, - ) - - -class AsyncAnswersResourceWithRawResponse: - def __init__(self, answers: AsyncAnswersResource) -> None: - self._answers = answers - - self.create_v1_prompts_post = async_to_raw_response_wrapper( - answers.create_v1_prompts_post, - ) - self.query_v2_v2_prompts_post = async_to_raw_response_wrapper( - answers.query_v2_v2_prompts_post, - ) - self.stream_v2_v2_prompts_stream_post = async_to_raw_response_wrapper( - answers.stream_v2_v2_prompts_stream_post, - ) - - -class AnswersResourceWithStreamingResponse: - def __init__(self, answers: AnswersResource) -> None: - self._answers = answers - - self.create_v1_prompts_post = to_streamed_response_wrapper( - answers.create_v1_prompts_post, - ) - self.query_v2_v2_prompts_post = to_streamed_response_wrapper( - answers.query_v2_v2_prompts_post, - ) - self.stream_v2_v2_prompts_stream_post = to_streamed_response_wrapper( - answers.stream_v2_v2_prompts_stream_post, - ) - - -class AsyncAnswersResourceWithStreamingResponse: - def __init__(self, answers: AsyncAnswersResource) -> None: - self._answers = answers - - self.create_v1_prompts_post = async_to_streamed_response_wrapper( - answers.create_v1_prompts_post, - ) - self.query_v2_v2_prompts_post = async_to_streamed_response_wrapper( - answers.query_v2_v2_prompts_post, - ) - self.stream_v2_v2_prompts_stream_post = async_to_streamed_response_wrapper( - answers.stream_v2_v2_prompts_stream_post, - ) diff --git a/src/resources/prompts/prompts.py b/src/resources/prompts/prompts.py deleted file mode 100644 index 75247298..00000000 --- a/src/resources/prompts/prompts.py +++ /dev/null @@ -1,97 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -import httpx - -from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from ..._utils import path_template, maybe_transform, async_maybe_transform -from ..._compat import cached_property -from ..._resource import SyncAPIResource, AsyncAPIResource -from ..._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from ..._base_client import make_request_options -from .answers import ( - AnswersResource, - AsyncAnswersResource, - AnswersResourceWithRawResponse, - AsyncAnswersResourceWithRawResponse, - AnswersResourceWithStreamingResponse, - AsyncAnswersResourceWithStreamingResponse, -) - -__all__ = ["PromptsResource", "AsyncPromptsResource"] - - -class PromptsResource(SyncAPIResource): - - @cached_property - def answers(self) -> AnswersResource: - return AnswersResource(self._client) - - @cached_property - def with_raw_response(self) -> PromptsResourceWithRawResponse: - return PromptsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> PromptsResourceWithStreamingResponse: - return PromptsResourceWithStreamingResponse(self) - - -class AsyncPromptsResource(AsyncAPIResource): - - @cached_property - def answers(self) -> AsyncAnswersResource: - return AsyncAnswersResource(self._client) - - @cached_property - def with_raw_response(self) -> AsyncPromptsResourceWithRawResponse: - return AsyncPromptsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncPromptsResourceWithStreamingResponse: - return AsyncPromptsResourceWithStreamingResponse(self) - - -class PromptsResourceWithRawResponse: - def __init__(self, prompts: PromptsResource) -> None: - self._prompts = prompts - - - @cached_property - def answers(self) -> AnswersResourceWithRawResponse: - return AnswersResourceWithRawResponse(self._prompts.answers) - - -class AsyncPromptsResourceWithRawResponse: - def __init__(self, prompts: AsyncPromptsResource) -> None: - self._prompts = prompts - - - @cached_property - def answers(self) -> AsyncAnswersResourceWithRawResponse: - return AsyncAnswersResourceWithRawResponse(self._prompts.answers) - - -class PromptsResourceWithStreamingResponse: - def __init__(self, prompts: PromptsResource) -> None: - self._prompts = prompts - - - @cached_property - def answers(self) -> AnswersResourceWithStreamingResponse: - return AnswersResourceWithStreamingResponse(self._prompts.answers) - - -class AsyncPromptsResourceWithStreamingResponse: - def __init__(self, prompts: AsyncPromptsResource) -> None: - self._prompts = prompts - - - @cached_property - def answers(self) -> AsyncAnswersResourceWithStreamingResponse: - return AsyncAnswersResourceWithStreamingResponse(self._prompts.answers) diff --git a/src/resources/reports/__init__.py b/src/resources/reports/__init__.py deleted file mode 100644 index 2c6c7c40..00000000 --- a/src/resources/reports/__init__.py +++ /dev/null @@ -1,145 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from .reports import ( - ReportsResource, - AsyncReportsResource, - ReportsResourceWithRawResponse, - AsyncReportsResourceWithRawResponse, - ReportsResourceWithStreamingResponse, - AsyncReportsResourceWithStreamingResponse, -) -from .citations import ( - CitationsResource, - AsyncCitationsResource, - CitationsResourceWithRawResponse, - AsyncCitationsResourceWithRawResponse, - CitationsResourceWithStreamingResponse, - AsyncCitationsResourceWithStreamingResponse, -) -from .visibility import ( - VisibilityResource, - AsyncVisibilityResource, - VisibilityResourceWithRawResponse, - AsyncVisibilityResourceWithRawResponse, - VisibilityResourceWithStreamingResponse, - AsyncVisibilityResourceWithStreamingResponse, -) -from .sentiment import ( - SentimentResource, - AsyncSentimentResource, - SentimentResourceWithRawResponse, - AsyncSentimentResourceWithRawResponse, - SentimentResourceWithStreamingResponse, - AsyncSentimentResourceWithStreamingResponse, -) -from .web_search_results import ( - WebSearchResultsResource, - AsyncWebSearchResultsResource, - WebSearchResultsResourceWithRawResponse, - AsyncWebSearchResultsResourceWithRawResponse, - WebSearchResultsResourceWithStreamingResponse, - AsyncWebSearchResultsResourceWithStreamingResponse, -) -from .referrals import ( - ReferralsResource, - AsyncReferralsResource, - ReferralsResourceWithRawResponse, - AsyncReferralsResourceWithRawResponse, - ReferralsResourceWithStreamingResponse, - AsyncReferralsResourceWithStreamingResponse, -) -from .bots import ( - BotsResource, - AsyncBotsResource, - BotsResourceWithRawResponse, - AsyncBotsResourceWithRawResponse, - BotsResourceWithStreamingResponse, - AsyncBotsResourceWithStreamingResponse, -) -from .query_fanouts import ( - QueryFanoutsResource, - AsyncQueryFanoutsResource, - QueryFanoutsResourceWithRawResponse, - AsyncQueryFanoutsResourceWithRawResponse, - QueryFanoutsResourceWithStreamingResponse, - AsyncQueryFanoutsResourceWithStreamingResponse, -) -from .shopping import ( - ShoppingResource, - AsyncShoppingResource, - ShoppingResourceWithRawResponse, - AsyncShoppingResourceWithRawResponse, - ShoppingResourceWithStreamingResponse, - AsyncShoppingResourceWithStreamingResponse, -) -from .accuracy import ( - AccuracyResource, - AsyncAccuracyResource, - AccuracyResourceWithRawResponse, - AsyncAccuracyResourceWithRawResponse, - AccuracyResourceWithStreamingResponse, - AsyncAccuracyResourceWithStreamingResponse, -) - -__all__ = [ - "ReportsResource", - "AsyncReportsResource", - "ReportsResourceWithRawResponse", - "AsyncReportsResourceWithRawResponse", - "ReportsResourceWithStreamingResponse", - "AsyncReportsResourceWithStreamingResponse", - "CitationsResource", - "AsyncCitationsResource", - "CitationsResourceWithRawResponse", - "AsyncCitationsResourceWithRawResponse", - "CitationsResourceWithStreamingResponse", - "AsyncCitationsResourceWithStreamingResponse", - "VisibilityResource", - "AsyncVisibilityResource", - "VisibilityResourceWithRawResponse", - "AsyncVisibilityResourceWithRawResponse", - "VisibilityResourceWithStreamingResponse", - "AsyncVisibilityResourceWithStreamingResponse", - "SentimentResource", - "AsyncSentimentResource", - "SentimentResourceWithRawResponse", - "AsyncSentimentResourceWithRawResponse", - "SentimentResourceWithStreamingResponse", - "AsyncSentimentResourceWithStreamingResponse", - "WebSearchResultsResource", - "AsyncWebSearchResultsResource", - "WebSearchResultsResourceWithRawResponse", - "AsyncWebSearchResultsResourceWithRawResponse", - "WebSearchResultsResourceWithStreamingResponse", - "AsyncWebSearchResultsResourceWithStreamingResponse", - "ReferralsResource", - "AsyncReferralsResource", - "ReferralsResourceWithRawResponse", - "AsyncReferralsResourceWithRawResponse", - "ReferralsResourceWithStreamingResponse", - "AsyncReferralsResourceWithStreamingResponse", - "BotsResource", - "AsyncBotsResource", - "BotsResourceWithRawResponse", - "AsyncBotsResourceWithRawResponse", - "BotsResourceWithStreamingResponse", - "AsyncBotsResourceWithStreamingResponse", - "QueryFanoutsResource", - "AsyncQueryFanoutsResource", - "QueryFanoutsResourceWithRawResponse", - "AsyncQueryFanoutsResourceWithRawResponse", - "QueryFanoutsResourceWithStreamingResponse", - "AsyncQueryFanoutsResourceWithStreamingResponse", - "ShoppingResource", - "AsyncShoppingResource", - "ShoppingResourceWithRawResponse", - "AsyncShoppingResourceWithRawResponse", - "ShoppingResourceWithStreamingResponse", - "AsyncShoppingResourceWithStreamingResponse", - "AccuracyResource", - "AsyncAccuracyResource", - "AccuracyResourceWithRawResponse", - "AsyncAccuracyResourceWithRawResponse", - "AccuracyResourceWithStreamingResponse", - "AsyncAccuracyResourceWithStreamingResponse", -] diff --git a/src/resources/reports/accuracy.py b/src/resources/reports/accuracy.py deleted file mode 100644 index b836411f..00000000 --- a/src/resources/reports/accuracy.py +++ /dev/null @@ -1,2459 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -import httpx - -from typing import Iterable, Optional -from typing_extensions import Literal -from ..._types import SequenceNotStr - -from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from ..._utils import path_template, maybe_transform, async_maybe_transform -from ..._compat import cached_property -from ..._resource import SyncAPIResource, AsyncAPIResource -from ..._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from ..._base_client import make_request_options -from ...types.reports.accuracy_overview_v1_reports_overview_post_response import AccuracyOverviewV1ReportsOverviewPostResponse, AccuracyTrendPoint, AccuracyScoreBreakdown, AccuracyThemeTrendSeries, AccuracyThemeTrendPoint, AccuracyTrendSeriesMeta -from ...types.reports import accuracy_overview_v1_reports_overview_post_params -from ...types.reports.accuracy_breakdown_v1_reports_breakdown_post_response import AccuracyBreakdownV1ReportsBreakdownPostResponse, AccuracyBreakdownRow -from ...types.reports import accuracy_breakdown_v1_reports_breakdown_post_params -from ...types.reports.accuracy_citation_analysis_v1_reports_citation_analysis_post_response import AccuracyCitationAnalysisV1ReportsCitationAnalysisPostResponse, AccuracyCitationClaim, AccuracyCitationEvidence -from ...types.reports import accuracy_citation_analysis_v1_reports_citation_analysis_post_params -from ...types.reports.accuracy_topic_ids_v1_reports_topic_ids_post_response import AccuracyTopicIdsV1ReportsTopicIdsPostResponse -from ...types.reports import accuracy_topic_ids_v1_reports_topic_ids_post_params -from ...types.reports.accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_response import AccuracyInaccurateThemesV1ReportsInaccurateThemesPostResponse, InaccurateThemeRow -from ...types.reports import accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_params -from ...types.reports.accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_response import AccuracyInaccurateClustersV1ReportsInaccurateClustersPostResponse, InaccurateClusterRow -from ...types.reports import accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_params -from ...types.reports.accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_response import AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostResponse, InaccuracyDriverRow -from ...types.reports import accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_params -from ...types.reports.accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_response import AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostResponse, TopInaccurateClaimRow -from ...types.reports import accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_params -from ...types.reports.accuracy_claim_breakdown_v1_reports_claim_breakdown_post_response import AccuracyClaimBreakdownV1ReportsClaimBreakdownPostResponse, ClaimBreakdownRow, ClaimPromptBreakdownRow -from ...types.reports import accuracy_claim_breakdown_v1_reports_claim_breakdown_post_params -from ...types.reports.accuracy_claim_citations_v1_reports_claim_citations_post_response import AccuracyClaimCitationsV1ReportsClaimCitationsPostResponse, ClaimCitationRow -from ...types.reports import accuracy_claim_citations_v1_reports_claim_citations_post_params -from ...types.reports.accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_response import AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostResponse, ClusterExampleRun -from ...types.reports import accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_params -from ...types.reports.accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_response import AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostResponse, ClusterVerificationPair -from ...types.reports import accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_params -from ...types.reports.accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_response import AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostResponse -from ...types.reports import accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_params - -__all__ = ["AccuracyResource", "AsyncAccuracyResource"] - - -class AccuracyResource(SyncAPIResource): - - @cached_property - def with_raw_response(self) -> AccuracyResourceWithRawResponse: - return AccuracyResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AccuracyResourceWithStreamingResponse: - return AccuracyResourceWithStreamingResponse(self) - - def overview_v1_reports_overview_post( - self, - *, - start_date: str, - end_date: str, - comparison_start_date: Optional[str] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - category_id: str, - topic_ids: Optional[Iterable[str]] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - tag_ids: Optional[Iterable[str]] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - include_no_tag: bool | Omit = omit, - region_ids: Optional[Iterable[str]] | Omit = omit, - platform_ids: Optional[Iterable[str]] | Omit = omit, - persona_ids: Optional[Iterable[str]] | Omit = omit, - include_no_persona: bool | Omit = omit, - prompt_ids: Optional[Iterable[str]] | Omit = omit, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - date_bucket: Optional[str] | Omit = omit, - group_by: Literal["period", "theme"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyOverviewV1ReportsOverviewPostResponse: - """ - Accuracy Overview - - Args: - start_date: Body parameter. - end_date: Body parameter. - comparison_start_date: Body parameter. - comparison_end_date: Body parameter. - category_id: Body parameter. - topic_ids: Body parameter. - exclude_topic_ids: Body parameter. - tag_ids: Body parameter. - tag_filter_type: Body parameter. - include_no_tag: Body parameter. - region_ids: Body parameter. - platform_ids: Body parameter. - persona_ids: Body parameter. - include_no_persona: Body parameter. - prompt_ids: Body parameter. - citation_categories: Body parameter. - date_bucket: Body parameter. - group_by: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AccuracyOverviewV1ReportsOverviewPostResponse: Successful Response - - Example: - ```python - accuracy = client.reports.accuracy.overview_v1_reports_overview_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - group_by="period", - ) - ``` - """ - return self._post( - "/v1/reports/accuracy/overview", - body=maybe_transform( - { - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "category_id": category_id, - "topic_ids": topic_ids, - "exclude_topic_ids": exclude_topic_ids, - "tag_ids": tag_ids, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "region_ids": region_ids, - "platform_ids": platform_ids, - "persona_ids": persona_ids, - "include_no_persona": include_no_persona, - "prompt_ids": prompt_ids, - "citation_categories": citation_categories, - "date_bucket": date_bucket, - "group_by": group_by, - }, - accuracy_overview_v1_reports_overview_post_params.AccuracyOverviewV1ReportsOverviewPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AccuracyOverviewV1ReportsOverviewPostResponse, - ) - - def breakdown_v1_reports_breakdown_post( - self, - *, - start_date: str, - end_date: str, - comparison_start_date: Optional[str] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - category_id: str, - topic_ids: Optional[Iterable[str]] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - tag_ids: Optional[Iterable[str]] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - include_no_tag: bool | Omit = omit, - region_ids: Optional[Iterable[str]] | Omit = omit, - platform_ids: Optional[Iterable[str]] | Omit = omit, - persona_ids: Optional[Iterable[str]] | Omit = omit, - include_no_persona: bool | Omit = omit, - prompt_ids: Optional[Iterable[str]] | Omit = omit, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - breakdown_by: Literal["citation", "platform", "topic", "prompt", "tag", "region", "persona"] | Omit = omit, - limit: int | Omit = omit, - offset: int | Omit = omit, - search_query: Optional[str] | Omit = omit, - sort_by: Literal["citationShare", "accuracy"] | Omit = omit, - sort_order: Literal["asc", "desc"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyBreakdownV1ReportsBreakdownPostResponse: - """ - Accuracy Breakdown - - Args: - start_date: Body parameter. - end_date: Body parameter. - comparison_start_date: Body parameter. - comparison_end_date: Body parameter. - category_id: Body parameter. - topic_ids: Body parameter. - exclude_topic_ids: Body parameter. - tag_ids: Body parameter. - tag_filter_type: Body parameter. - include_no_tag: Body parameter. - region_ids: Body parameter. - platform_ids: Body parameter. - persona_ids: Body parameter. - include_no_persona: Body parameter. - prompt_ids: Body parameter. - citation_categories: Body parameter. - breakdown_by: Body parameter. - limit: Body parameter. - offset: Body parameter. - search_query: Body parameter. - sort_by: Body parameter. - sort_order: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AccuracyBreakdownV1ReportsBreakdownPostResponse: Successful Response - - Example: - ```python - accuracy = client.reports.accuracy.breakdown_v1_reports_breakdown_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - breakdown_by="citation", - limit=10, - offset=0, - sort_by="citationShare", - sort_order="desc", - ) - ``` - """ - return self._post( - "/v1/reports/accuracy/breakdown", - body=maybe_transform( - { - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "category_id": category_id, - "topic_ids": topic_ids, - "exclude_topic_ids": exclude_topic_ids, - "tag_ids": tag_ids, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "region_ids": region_ids, - "platform_ids": platform_ids, - "persona_ids": persona_ids, - "include_no_persona": include_no_persona, - "prompt_ids": prompt_ids, - "citation_categories": citation_categories, - "breakdown_by": breakdown_by, - "limit": limit, - "offset": offset, - "search_query": search_query, - "sort_by": sort_by, - "sort_order": sort_order, - }, - accuracy_breakdown_v1_reports_breakdown_post_params.AccuracyBreakdownV1ReportsBreakdownPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AccuracyBreakdownV1ReportsBreakdownPostResponse, - ) - - def citation_analysis_v1_reports_citation_analysis_post( - self, - *, - category_id: str, - clean_href: str, - start_date: str, - end_date: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCitationAnalysisV1ReportsCitationAnalysisPostResponse: - """ - Accuracy Citation Analysis - - Args: - category_id: Body parameter. - clean_href: Body parameter. - start_date: Body parameter. - end_date: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AccuracyCitationAnalysisV1ReportsCitationAnalysisPostResponse: Successful Response - - Example: - ```python - accuracy = client.reports.accuracy.citation_analysis_v1_reports_citation_analysis_post( - category_id="", - clean_href="", - start_date="", - end_date="", - ) - ``` - """ - return self._post( - "/v1/reports/accuracy/citation-analysis", - body=maybe_transform( - { - "category_id": category_id, - "clean_href": clean_href, - "start_date": start_date, - "end_date": end_date, - }, - accuracy_citation_analysis_v1_reports_citation_analysis_post_params.AccuracyCitationAnalysisV1ReportsCitationAnalysisPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AccuracyCitationAnalysisV1ReportsCitationAnalysisPostResponse, - ) - - def topic_ids_v1_reports_topic_ids_post( - self, - *, - category_id: str, - start_date: str, - end_date: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyTopicIdsV1ReportsTopicIdsPostResponse: - """ - Accuracy Topic Ids - - Args: - category_id: Body parameter. - start_date: Body parameter. - end_date: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AccuracyTopicIdsV1ReportsTopicIdsPostResponse: Successful Response - - Example: - ```python - accuracy = client.reports.accuracy.topic_ids_v1_reports_topic_ids_post( - category_id="", - start_date="", - end_date="", - ) - ``` - """ - return self._post( - "/v1/reports/accuracy/topic-ids", - body=maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - }, - accuracy_topic_ids_v1_reports_topic_ids_post_params.AccuracyTopicIdsV1ReportsTopicIdsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AccuracyTopicIdsV1ReportsTopicIdsPostResponse, - ) - - def inaccurate_themes_v1_reports_inaccurate_themes_post( - self, - *, - start_date: str, - end_date: str, - comparison_start_date: Optional[str] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - category_id: str, - topic_ids: Optional[Iterable[str]] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - tag_ids: Optional[Iterable[str]] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - include_no_tag: bool | Omit = omit, - region_ids: Optional[Iterable[str]] | Omit = omit, - platform_ids: Optional[Iterable[str]] | Omit = omit, - persona_ids: Optional[Iterable[str]] | Omit = omit, - include_no_persona: bool | Omit = omit, - prompt_ids: Optional[Iterable[str]] | Omit = omit, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - limit: int | Omit = omit, - offset: int | Omit = omit, - sort_by: Literal["response_share"] | Omit = omit, - sort_order: Literal["asc", "desc"] | Omit = omit, - search_query: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyInaccurateThemesV1ReportsInaccurateThemesPostResponse: - """ - Accuracy Inaccurate Themes - - Args: - start_date: Body parameter. - end_date: Body parameter. - comparison_start_date: Body parameter. - comparison_end_date: Body parameter. - category_id: Body parameter. - topic_ids: Body parameter. - exclude_topic_ids: Body parameter. - tag_ids: Body parameter. - tag_filter_type: Body parameter. - include_no_tag: Body parameter. - region_ids: Body parameter. - platform_ids: Body parameter. - persona_ids: Body parameter. - include_no_persona: Body parameter. - prompt_ids: Body parameter. - citation_categories: Body parameter. - limit: Body parameter. - offset: Body parameter. - sort_by: Body parameter. - sort_order: Body parameter. - search_query: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AccuracyInaccurateThemesV1ReportsInaccurateThemesPostResponse: Successful Response - - Example: - ```python - accuracy = client.reports.accuracy.inaccurate_themes_v1_reports_inaccurate_themes_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - limit=10, - offset=0, - sort_by="response_share", - sort_order="desc", - ) - ``` - """ - return self._post( - "/v1/reports/accuracy/inaccurate-themes", - body=maybe_transform( - { - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "category_id": category_id, - "topic_ids": topic_ids, - "exclude_topic_ids": exclude_topic_ids, - "tag_ids": tag_ids, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "region_ids": region_ids, - "platform_ids": platform_ids, - "persona_ids": persona_ids, - "include_no_persona": include_no_persona, - "prompt_ids": prompt_ids, - "citation_categories": citation_categories, - "limit": limit, - "offset": offset, - "sort_by": sort_by, - "sort_order": sort_order, - "search_query": search_query, - }, - accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_params.AccuracyInaccurateThemesV1ReportsInaccurateThemesPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AccuracyInaccurateThemesV1ReportsInaccurateThemesPostResponse, - ) - - def inaccurate_clusters_v1_reports_inaccurate_clusters_post( - self, - *, - start_date: str, - end_date: str, - comparison_start_date: Optional[str] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - category_id: str, - topic_ids: Optional[Iterable[str]] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - tag_ids: Optional[Iterable[str]] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - include_no_tag: bool | Omit = omit, - region_ids: Optional[Iterable[str]] | Omit = omit, - platform_ids: Optional[Iterable[str]] | Omit = omit, - persona_ids: Optional[Iterable[str]] | Omit = omit, - include_no_persona: bool | Omit = omit, - prompt_ids: Optional[Iterable[str]] | Omit = omit, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - theme_id: str, - limit: int | Omit = omit, - offset: int | Omit = omit, - search_query: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyInaccurateClustersV1ReportsInaccurateClustersPostResponse: - """ - Accuracy Inaccurate Clusters - - Args: - start_date: Body parameter. - end_date: Body parameter. - comparison_start_date: Body parameter. - comparison_end_date: Body parameter. - category_id: Body parameter. - topic_ids: Body parameter. - exclude_topic_ids: Body parameter. - tag_ids: Body parameter. - tag_filter_type: Body parameter. - include_no_tag: Body parameter. - region_ids: Body parameter. - platform_ids: Body parameter. - persona_ids: Body parameter. - include_no_persona: Body parameter. - prompt_ids: Body parameter. - citation_categories: Body parameter. - theme_id: Body parameter. - limit: Body parameter. - offset: Body parameter. - search_query: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AccuracyInaccurateClustersV1ReportsInaccurateClustersPostResponse: Successful Response - - Example: - ```python - accuracy = client.reports.accuracy.inaccurate_clusters_v1_reports_inaccurate_clusters_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - theme_id="", - limit=5000, - offset=0, - ) - ``` - """ - return self._post( - "/v1/reports/accuracy/inaccurate-clusters", - body=maybe_transform( - { - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "category_id": category_id, - "topic_ids": topic_ids, - "exclude_topic_ids": exclude_topic_ids, - "tag_ids": tag_ids, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "region_ids": region_ids, - "platform_ids": platform_ids, - "persona_ids": persona_ids, - "include_no_persona": include_no_persona, - "prompt_ids": prompt_ids, - "citation_categories": citation_categories, - "theme_id": theme_id, - "limit": limit, - "offset": offset, - "search_query": search_query, - }, - accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_params.AccuracyInaccurateClustersV1ReportsInaccurateClustersPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AccuracyInaccurateClustersV1ReportsInaccurateClustersPostResponse, - ) - - def inaccuracy_drivers_v1_reports_inaccuracy_drivers_post( - self, - *, - start_date: str, - end_date: str, - comparison_start_date: Optional[str] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - category_id: str, - topic_ids: Optional[Iterable[str]] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - tag_ids: Optional[Iterable[str]] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - include_no_tag: bool | Omit = omit, - region_ids: Optional[Iterable[str]] | Omit = omit, - platform_ids: Optional[Iterable[str]] | Omit = omit, - persona_ids: Optional[Iterable[str]] | Omit = omit, - include_no_persona: bool | Omit = omit, - prompt_ids: Optional[Iterable[str]] | Omit = omit, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - limit: int | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostResponse: - """ - Accuracy Inaccuracy Drivers - - Args: - start_date: Body parameter. - end_date: Body parameter. - comparison_start_date: Body parameter. - comparison_end_date: Body parameter. - category_id: Body parameter. - topic_ids: Body parameter. - exclude_topic_ids: Body parameter. - tag_ids: Body parameter. - tag_filter_type: Body parameter. - include_no_tag: Body parameter. - region_ids: Body parameter. - platform_ids: Body parameter. - persona_ids: Body parameter. - include_no_persona: Body parameter. - prompt_ids: Body parameter. - citation_categories: Body parameter. - limit: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostResponse: Successful Response - - Example: - ```python - accuracy = client.reports.accuracy.inaccuracy_drivers_v1_reports_inaccuracy_drivers_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - limit=5, - ) - ``` - """ - return self._post( - "/v1/reports/accuracy/inaccuracy-drivers", - body=maybe_transform( - { - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "category_id": category_id, - "topic_ids": topic_ids, - "exclude_topic_ids": exclude_topic_ids, - "tag_ids": tag_ids, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "region_ids": region_ids, - "platform_ids": platform_ids, - "persona_ids": persona_ids, - "include_no_persona": include_no_persona, - "prompt_ids": prompt_ids, - "citation_categories": citation_categories, - "limit": limit, - }, - accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_params.AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostResponse, - ) - - def top_inaccurate_claims_v1_reports_top_inaccurate_claims_post( - self, - *, - start_date: str, - end_date: str, - comparison_start_date: Optional[str] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - category_id: str, - topic_ids: Optional[Iterable[str]] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - tag_ids: Optional[Iterable[str]] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - include_no_tag: bool | Omit = omit, - region_ids: Optional[Iterable[str]] | Omit = omit, - platform_ids: Optional[Iterable[str]] | Omit = omit, - persona_ids: Optional[Iterable[str]] | Omit = omit, - include_no_persona: bool | Omit = omit, - prompt_ids: Optional[Iterable[str]] | Omit = omit, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - limit: int | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostResponse: - """ - Accuracy Top Inaccurate Claims - - Args: - start_date: Body parameter. - end_date: Body parameter. - comparison_start_date: Body parameter. - comparison_end_date: Body parameter. - category_id: Body parameter. - topic_ids: Body parameter. - exclude_topic_ids: Body parameter. - tag_ids: Body parameter. - tag_filter_type: Body parameter. - include_no_tag: Body parameter. - region_ids: Body parameter. - platform_ids: Body parameter. - persona_ids: Body parameter. - include_no_persona: Body parameter. - prompt_ids: Body parameter. - citation_categories: Body parameter. - limit: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostResponse: Successful Response - - Example: - ```python - accuracy = client.reports.accuracy.top_inaccurate_claims_v1_reports_top_inaccurate_claims_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - limit=5, - ) - ``` - """ - return self._post( - "/v1/reports/accuracy/top-inaccurate-claims", - body=maybe_transform( - { - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "category_id": category_id, - "topic_ids": topic_ids, - "exclude_topic_ids": exclude_topic_ids, - "tag_ids": tag_ids, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "region_ids": region_ids, - "platform_ids": platform_ids, - "persona_ids": persona_ids, - "include_no_persona": include_no_persona, - "prompt_ids": prompt_ids, - "citation_categories": citation_categories, - "limit": limit, - }, - accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_params.AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostResponse, - ) - - def claim_breakdown_v1_reports_claim_breakdown_post( - self, - *, - start_date: str, - end_date: str, - comparison_start_date: Optional[str] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - category_id: str, - topic_ids: Optional[Iterable[str]] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - tag_ids: Optional[Iterable[str]] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - include_no_tag: bool | Omit = omit, - region_ids: Optional[Iterable[str]] | Omit = omit, - platform_ids: Optional[Iterable[str]] | Omit = omit, - persona_ids: Optional[Iterable[str]] | Omit = omit, - include_no_persona: bool | Omit = omit, - prompt_ids: Optional[Iterable[str]] | Omit = omit, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - cluster_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyClaimBreakdownV1ReportsClaimBreakdownPostResponse: - """ - Accuracy Claim Breakdown - - Args: - start_date: Body parameter. - end_date: Body parameter. - comparison_start_date: Body parameter. - comparison_end_date: Body parameter. - category_id: Body parameter. - topic_ids: Body parameter. - exclude_topic_ids: Body parameter. - tag_ids: Body parameter. - tag_filter_type: Body parameter. - include_no_tag: Body parameter. - region_ids: Body parameter. - platform_ids: Body parameter. - persona_ids: Body parameter. - include_no_persona: Body parameter. - prompt_ids: Body parameter. - citation_categories: Body parameter. - cluster_id: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AccuracyClaimBreakdownV1ReportsClaimBreakdownPostResponse: Successful Response - - Example: - ```python - accuracy = client.reports.accuracy.claim_breakdown_v1_reports_claim_breakdown_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - cluster_id="", - ) - ``` - """ - return self._post( - "/v1/reports/accuracy/claim-breakdown", - body=maybe_transform( - { - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "category_id": category_id, - "topic_ids": topic_ids, - "exclude_topic_ids": exclude_topic_ids, - "tag_ids": tag_ids, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "region_ids": region_ids, - "platform_ids": platform_ids, - "persona_ids": persona_ids, - "include_no_persona": include_no_persona, - "prompt_ids": prompt_ids, - "citation_categories": citation_categories, - "cluster_id": cluster_id, - }, - accuracy_claim_breakdown_v1_reports_claim_breakdown_post_params.AccuracyClaimBreakdownV1ReportsClaimBreakdownPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AccuracyClaimBreakdownV1ReportsClaimBreakdownPostResponse, - ) - - def claim_citations_v1_reports_claim_citations_post( - self, - *, - start_date: str, - end_date: str, - comparison_start_date: Optional[str] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - category_id: str, - topic_ids: Optional[Iterable[str]] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - tag_ids: Optional[Iterable[str]] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - include_no_tag: bool | Omit = omit, - region_ids: Optional[Iterable[str]] | Omit = omit, - platform_ids: Optional[Iterable[str]] | Omit = omit, - persona_ids: Optional[Iterable[str]] | Omit = omit, - include_no_persona: bool | Omit = omit, - prompt_ids: Optional[Iterable[str]] | Omit = omit, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - cluster_id: str, - limit: int | Omit = omit, - offset: int | Omit = omit, - search_query: Optional[str] | Omit = omit, - sort_order: Literal["asc", "desc"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyClaimCitationsV1ReportsClaimCitationsPostResponse: - """ - Accuracy Claim Citations - - Args: - start_date: Body parameter. - end_date: Body parameter. - comparison_start_date: Body parameter. - comparison_end_date: Body parameter. - category_id: Body parameter. - topic_ids: Body parameter. - exclude_topic_ids: Body parameter. - tag_ids: Body parameter. - tag_filter_type: Body parameter. - include_no_tag: Body parameter. - region_ids: Body parameter. - platform_ids: Body parameter. - persona_ids: Body parameter. - include_no_persona: Body parameter. - prompt_ids: Body parameter. - citation_categories: Body parameter. - cluster_id: Body parameter. - limit: Body parameter. - offset: Body parameter. - search_query: Body parameter. - sort_order: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AccuracyClaimCitationsV1ReportsClaimCitationsPostResponse: Successful Response - - Example: - ```python - accuracy = client.reports.accuracy.claim_citations_v1_reports_claim_citations_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - cluster_id="", - limit=10, - offset=0, - sort_order="desc", - ) - ``` - """ - return self._post( - "/v1/reports/accuracy/claim-citations", - body=maybe_transform( - { - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "category_id": category_id, - "topic_ids": topic_ids, - "exclude_topic_ids": exclude_topic_ids, - "tag_ids": tag_ids, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "region_ids": region_ids, - "platform_ids": platform_ids, - "persona_ids": persona_ids, - "include_no_persona": include_no_persona, - "prompt_ids": prompt_ids, - "citation_categories": citation_categories, - "cluster_id": cluster_id, - "limit": limit, - "offset": offset, - "search_query": search_query, - "sort_order": sort_order, - }, - accuracy_claim_citations_v1_reports_claim_citations_post_params.AccuracyClaimCitationsV1ReportsClaimCitationsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AccuracyClaimCitationsV1ReportsClaimCitationsPostResponse, - ) - - def cluster_example_runs_v1_reports_cluster_example_runs_post( - self, - *, - category_id: str, - cluster_id: str, - start_date: str, - end_date: str, - limit: int | Omit = omit, - offset: int | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostResponse: - """ - Accuracy Cluster Example Runs - - Args: - category_id: Body parameter. - cluster_id: Body parameter. - start_date: Body parameter. - end_date: Body parameter. - limit: Body parameter. - offset: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostResponse: Successful Response - - Example: - ```python - accuracy = client.reports.accuracy.cluster_example_runs_v1_reports_cluster_example_runs_post( - category_id="", - cluster_id="", - start_date="", - end_date="", - limit=20, - offset=0, - ) - ``` - """ - return self._post( - "/v1/reports/accuracy/cluster-example-runs", - body=maybe_transform( - { - "category_id": category_id, - "cluster_id": cluster_id, - "start_date": start_date, - "end_date": end_date, - "limit": limit, - "offset": offset, - }, - accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_params.AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostResponse, - ) - - def cluster_verification_pairs_v1_reports_cluster_verification_pairs_post( - self, - *, - category_id: str, - cluster_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostResponse: - """ - Accuracy Cluster Verification Pairs - - Args: - category_id: Body parameter. - cluster_id: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostResponse: Successful Response - - Example: - ```python - accuracy = client.reports.accuracy.cluster_verification_pairs_v1_reports_cluster_verification_pairs_post( - category_id="", - cluster_id="", - ) - ``` - """ - return self._post( - "/v1/reports/accuracy/cluster-verification-pairs", - body=maybe_transform( - { - "category_id": category_id, - "cluster_id": cluster_id, - }, - accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_params.AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostResponse, - ) - - def factcheck_setup_status_v1_reports_factcheck_setup_status_post( - self, - *, - category_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostResponse: - """ - Accuracy Factcheck Setup Status - - Args: - category_id: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostResponse: Successful Response - - Example: - ```python - accuracy = client.reports.accuracy.factcheck_setup_status_v1_reports_factcheck_setup_status_post( - category_id="", - ) - ``` - """ - return self._post( - "/v1/reports/accuracy/factcheck-setup-status", - body=maybe_transform( - {"category_id": category_id}, - accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_params.AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostResponse, - ) - - -class AsyncAccuracyResource(AsyncAPIResource): - - @cached_property - def with_raw_response(self) -> AsyncAccuracyResourceWithRawResponse: - return AsyncAccuracyResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncAccuracyResourceWithStreamingResponse: - return AsyncAccuracyResourceWithStreamingResponse(self) - - async def overview_v1_reports_overview_post( - self, - *, - start_date: str, - end_date: str, - comparison_start_date: Optional[str] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - category_id: str, - topic_ids: Optional[Iterable[str]] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - tag_ids: Optional[Iterable[str]] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - include_no_tag: bool | Omit = omit, - region_ids: Optional[Iterable[str]] | Omit = omit, - platform_ids: Optional[Iterable[str]] | Omit = omit, - persona_ids: Optional[Iterable[str]] | Omit = omit, - include_no_persona: bool | Omit = omit, - prompt_ids: Optional[Iterable[str]] | Omit = omit, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - date_bucket: Optional[str] | Omit = omit, - group_by: Literal["period", "theme"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyOverviewV1ReportsOverviewPostResponse: - """ - Accuracy Overview - - Args: - start_date: Body parameter. - end_date: Body parameter. - comparison_start_date: Body parameter. - comparison_end_date: Body parameter. - category_id: Body parameter. - topic_ids: Body parameter. - exclude_topic_ids: Body parameter. - tag_ids: Body parameter. - tag_filter_type: Body parameter. - include_no_tag: Body parameter. - region_ids: Body parameter. - platform_ids: Body parameter. - persona_ids: Body parameter. - include_no_persona: Body parameter. - prompt_ids: Body parameter. - citation_categories: Body parameter. - date_bucket: Body parameter. - group_by: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AccuracyOverviewV1ReportsOverviewPostResponse: Successful Response - - Example: - ```python - accuracy = await client.reports.accuracy.overview_v1_reports_overview_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - group_by="period", - ) - ``` - """ - return await self._post( - "/v1/reports/accuracy/overview", - body=await async_maybe_transform( - { - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "category_id": category_id, - "topic_ids": topic_ids, - "exclude_topic_ids": exclude_topic_ids, - "tag_ids": tag_ids, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "region_ids": region_ids, - "platform_ids": platform_ids, - "persona_ids": persona_ids, - "include_no_persona": include_no_persona, - "prompt_ids": prompt_ids, - "citation_categories": citation_categories, - "date_bucket": date_bucket, - "group_by": group_by, - }, - accuracy_overview_v1_reports_overview_post_params.AccuracyOverviewV1ReportsOverviewPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AccuracyOverviewV1ReportsOverviewPostResponse, - ) - - async def breakdown_v1_reports_breakdown_post( - self, - *, - start_date: str, - end_date: str, - comparison_start_date: Optional[str] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - category_id: str, - topic_ids: Optional[Iterable[str]] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - tag_ids: Optional[Iterable[str]] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - include_no_tag: bool | Omit = omit, - region_ids: Optional[Iterable[str]] | Omit = omit, - platform_ids: Optional[Iterable[str]] | Omit = omit, - persona_ids: Optional[Iterable[str]] | Omit = omit, - include_no_persona: bool | Omit = omit, - prompt_ids: Optional[Iterable[str]] | Omit = omit, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - breakdown_by: Literal["citation", "platform", "topic", "prompt", "tag", "region", "persona"] | Omit = omit, - limit: int | Omit = omit, - offset: int | Omit = omit, - search_query: Optional[str] | Omit = omit, - sort_by: Literal["citationShare", "accuracy"] | Omit = omit, - sort_order: Literal["asc", "desc"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyBreakdownV1ReportsBreakdownPostResponse: - """ - Accuracy Breakdown - - Args: - start_date: Body parameter. - end_date: Body parameter. - comparison_start_date: Body parameter. - comparison_end_date: Body parameter. - category_id: Body parameter. - topic_ids: Body parameter. - exclude_topic_ids: Body parameter. - tag_ids: Body parameter. - tag_filter_type: Body parameter. - include_no_tag: Body parameter. - region_ids: Body parameter. - platform_ids: Body parameter. - persona_ids: Body parameter. - include_no_persona: Body parameter. - prompt_ids: Body parameter. - citation_categories: Body parameter. - breakdown_by: Body parameter. - limit: Body parameter. - offset: Body parameter. - search_query: Body parameter. - sort_by: Body parameter. - sort_order: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AccuracyBreakdownV1ReportsBreakdownPostResponse: Successful Response - - Example: - ```python - accuracy = await client.reports.accuracy.breakdown_v1_reports_breakdown_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - breakdown_by="citation", - limit=10, - offset=0, - sort_by="citationShare", - sort_order="desc", - ) - ``` - """ - return await self._post( - "/v1/reports/accuracy/breakdown", - body=await async_maybe_transform( - { - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "category_id": category_id, - "topic_ids": topic_ids, - "exclude_topic_ids": exclude_topic_ids, - "tag_ids": tag_ids, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "region_ids": region_ids, - "platform_ids": platform_ids, - "persona_ids": persona_ids, - "include_no_persona": include_no_persona, - "prompt_ids": prompt_ids, - "citation_categories": citation_categories, - "breakdown_by": breakdown_by, - "limit": limit, - "offset": offset, - "search_query": search_query, - "sort_by": sort_by, - "sort_order": sort_order, - }, - accuracy_breakdown_v1_reports_breakdown_post_params.AccuracyBreakdownV1ReportsBreakdownPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AccuracyBreakdownV1ReportsBreakdownPostResponse, - ) - - async def citation_analysis_v1_reports_citation_analysis_post( - self, - *, - category_id: str, - clean_href: str, - start_date: str, - end_date: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyCitationAnalysisV1ReportsCitationAnalysisPostResponse: - """ - Accuracy Citation Analysis - - Args: - category_id: Body parameter. - clean_href: Body parameter. - start_date: Body parameter. - end_date: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AccuracyCitationAnalysisV1ReportsCitationAnalysisPostResponse: Successful Response - - Example: - ```python - accuracy = await client.reports.accuracy.citation_analysis_v1_reports_citation_analysis_post( - category_id="", - clean_href="", - start_date="", - end_date="", - ) - ``` - """ - return await self._post( - "/v1/reports/accuracy/citation-analysis", - body=await async_maybe_transform( - { - "category_id": category_id, - "clean_href": clean_href, - "start_date": start_date, - "end_date": end_date, - }, - accuracy_citation_analysis_v1_reports_citation_analysis_post_params.AccuracyCitationAnalysisV1ReportsCitationAnalysisPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AccuracyCitationAnalysisV1ReportsCitationAnalysisPostResponse, - ) - - async def topic_ids_v1_reports_topic_ids_post( - self, - *, - category_id: str, - start_date: str, - end_date: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyTopicIdsV1ReportsTopicIdsPostResponse: - """ - Accuracy Topic Ids - - Args: - category_id: Body parameter. - start_date: Body parameter. - end_date: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AccuracyTopicIdsV1ReportsTopicIdsPostResponse: Successful Response - - Example: - ```python - accuracy = await client.reports.accuracy.topic_ids_v1_reports_topic_ids_post( - category_id="", - start_date="", - end_date="", - ) - ``` - """ - return await self._post( - "/v1/reports/accuracy/topic-ids", - body=await async_maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - }, - accuracy_topic_ids_v1_reports_topic_ids_post_params.AccuracyTopicIdsV1ReportsTopicIdsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AccuracyTopicIdsV1ReportsTopicIdsPostResponse, - ) - - async def inaccurate_themes_v1_reports_inaccurate_themes_post( - self, - *, - start_date: str, - end_date: str, - comparison_start_date: Optional[str] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - category_id: str, - topic_ids: Optional[Iterable[str]] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - tag_ids: Optional[Iterable[str]] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - include_no_tag: bool | Omit = omit, - region_ids: Optional[Iterable[str]] | Omit = omit, - platform_ids: Optional[Iterable[str]] | Omit = omit, - persona_ids: Optional[Iterable[str]] | Omit = omit, - include_no_persona: bool | Omit = omit, - prompt_ids: Optional[Iterable[str]] | Omit = omit, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - limit: int | Omit = omit, - offset: int | Omit = omit, - sort_by: Literal["response_share"] | Omit = omit, - sort_order: Literal["asc", "desc"] | Omit = omit, - search_query: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyInaccurateThemesV1ReportsInaccurateThemesPostResponse: - """ - Accuracy Inaccurate Themes - - Args: - start_date: Body parameter. - end_date: Body parameter. - comparison_start_date: Body parameter. - comparison_end_date: Body parameter. - category_id: Body parameter. - topic_ids: Body parameter. - exclude_topic_ids: Body parameter. - tag_ids: Body parameter. - tag_filter_type: Body parameter. - include_no_tag: Body parameter. - region_ids: Body parameter. - platform_ids: Body parameter. - persona_ids: Body parameter. - include_no_persona: Body parameter. - prompt_ids: Body parameter. - citation_categories: Body parameter. - limit: Body parameter. - offset: Body parameter. - sort_by: Body parameter. - sort_order: Body parameter. - search_query: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AccuracyInaccurateThemesV1ReportsInaccurateThemesPostResponse: Successful Response - - Example: - ```python - accuracy = await client.reports.accuracy.inaccurate_themes_v1_reports_inaccurate_themes_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - limit=10, - offset=0, - sort_by="response_share", - sort_order="desc", - ) - ``` - """ - return await self._post( - "/v1/reports/accuracy/inaccurate-themes", - body=await async_maybe_transform( - { - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "category_id": category_id, - "topic_ids": topic_ids, - "exclude_topic_ids": exclude_topic_ids, - "tag_ids": tag_ids, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "region_ids": region_ids, - "platform_ids": platform_ids, - "persona_ids": persona_ids, - "include_no_persona": include_no_persona, - "prompt_ids": prompt_ids, - "citation_categories": citation_categories, - "limit": limit, - "offset": offset, - "sort_by": sort_by, - "sort_order": sort_order, - "search_query": search_query, - }, - accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_params.AccuracyInaccurateThemesV1ReportsInaccurateThemesPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AccuracyInaccurateThemesV1ReportsInaccurateThemesPostResponse, - ) - - async def inaccurate_clusters_v1_reports_inaccurate_clusters_post( - self, - *, - start_date: str, - end_date: str, - comparison_start_date: Optional[str] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - category_id: str, - topic_ids: Optional[Iterable[str]] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - tag_ids: Optional[Iterable[str]] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - include_no_tag: bool | Omit = omit, - region_ids: Optional[Iterable[str]] | Omit = omit, - platform_ids: Optional[Iterable[str]] | Omit = omit, - persona_ids: Optional[Iterable[str]] | Omit = omit, - include_no_persona: bool | Omit = omit, - prompt_ids: Optional[Iterable[str]] | Omit = omit, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - theme_id: str, - limit: int | Omit = omit, - offset: int | Omit = omit, - search_query: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyInaccurateClustersV1ReportsInaccurateClustersPostResponse: - """ - Accuracy Inaccurate Clusters - - Args: - start_date: Body parameter. - end_date: Body parameter. - comparison_start_date: Body parameter. - comparison_end_date: Body parameter. - category_id: Body parameter. - topic_ids: Body parameter. - exclude_topic_ids: Body parameter. - tag_ids: Body parameter. - tag_filter_type: Body parameter. - include_no_tag: Body parameter. - region_ids: Body parameter. - platform_ids: Body parameter. - persona_ids: Body parameter. - include_no_persona: Body parameter. - prompt_ids: Body parameter. - citation_categories: Body parameter. - theme_id: Body parameter. - limit: Body parameter. - offset: Body parameter. - search_query: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AccuracyInaccurateClustersV1ReportsInaccurateClustersPostResponse: Successful Response - - Example: - ```python - accuracy = await client.reports.accuracy.inaccurate_clusters_v1_reports_inaccurate_clusters_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - theme_id="", - limit=5000, - offset=0, - ) - ``` - """ - return await self._post( - "/v1/reports/accuracy/inaccurate-clusters", - body=await async_maybe_transform( - { - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "category_id": category_id, - "topic_ids": topic_ids, - "exclude_topic_ids": exclude_topic_ids, - "tag_ids": tag_ids, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "region_ids": region_ids, - "platform_ids": platform_ids, - "persona_ids": persona_ids, - "include_no_persona": include_no_persona, - "prompt_ids": prompt_ids, - "citation_categories": citation_categories, - "theme_id": theme_id, - "limit": limit, - "offset": offset, - "search_query": search_query, - }, - accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_params.AccuracyInaccurateClustersV1ReportsInaccurateClustersPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AccuracyInaccurateClustersV1ReportsInaccurateClustersPostResponse, - ) - - async def inaccuracy_drivers_v1_reports_inaccuracy_drivers_post( - self, - *, - start_date: str, - end_date: str, - comparison_start_date: Optional[str] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - category_id: str, - topic_ids: Optional[Iterable[str]] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - tag_ids: Optional[Iterable[str]] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - include_no_tag: bool | Omit = omit, - region_ids: Optional[Iterable[str]] | Omit = omit, - platform_ids: Optional[Iterable[str]] | Omit = omit, - persona_ids: Optional[Iterable[str]] | Omit = omit, - include_no_persona: bool | Omit = omit, - prompt_ids: Optional[Iterable[str]] | Omit = omit, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - limit: int | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostResponse: - """ - Accuracy Inaccuracy Drivers - - Args: - start_date: Body parameter. - end_date: Body parameter. - comparison_start_date: Body parameter. - comparison_end_date: Body parameter. - category_id: Body parameter. - topic_ids: Body parameter. - exclude_topic_ids: Body parameter. - tag_ids: Body parameter. - tag_filter_type: Body parameter. - include_no_tag: Body parameter. - region_ids: Body parameter. - platform_ids: Body parameter. - persona_ids: Body parameter. - include_no_persona: Body parameter. - prompt_ids: Body parameter. - citation_categories: Body parameter. - limit: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostResponse: Successful Response - - Example: - ```python - accuracy = await client.reports.accuracy.inaccuracy_drivers_v1_reports_inaccuracy_drivers_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - limit=5, - ) - ``` - """ - return await self._post( - "/v1/reports/accuracy/inaccuracy-drivers", - body=await async_maybe_transform( - { - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "category_id": category_id, - "topic_ids": topic_ids, - "exclude_topic_ids": exclude_topic_ids, - "tag_ids": tag_ids, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "region_ids": region_ids, - "platform_ids": platform_ids, - "persona_ids": persona_ids, - "include_no_persona": include_no_persona, - "prompt_ids": prompt_ids, - "citation_categories": citation_categories, - "limit": limit, - }, - accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_params.AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostResponse, - ) - - async def top_inaccurate_claims_v1_reports_top_inaccurate_claims_post( - self, - *, - start_date: str, - end_date: str, - comparison_start_date: Optional[str] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - category_id: str, - topic_ids: Optional[Iterable[str]] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - tag_ids: Optional[Iterable[str]] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - include_no_tag: bool | Omit = omit, - region_ids: Optional[Iterable[str]] | Omit = omit, - platform_ids: Optional[Iterable[str]] | Omit = omit, - persona_ids: Optional[Iterable[str]] | Omit = omit, - include_no_persona: bool | Omit = omit, - prompt_ids: Optional[Iterable[str]] | Omit = omit, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - limit: int | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostResponse: - """ - Accuracy Top Inaccurate Claims - - Args: - start_date: Body parameter. - end_date: Body parameter. - comparison_start_date: Body parameter. - comparison_end_date: Body parameter. - category_id: Body parameter. - topic_ids: Body parameter. - exclude_topic_ids: Body parameter. - tag_ids: Body parameter. - tag_filter_type: Body parameter. - include_no_tag: Body parameter. - region_ids: Body parameter. - platform_ids: Body parameter. - persona_ids: Body parameter. - include_no_persona: Body parameter. - prompt_ids: Body parameter. - citation_categories: Body parameter. - limit: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostResponse: Successful Response - - Example: - ```python - accuracy = await client.reports.accuracy.top_inaccurate_claims_v1_reports_top_inaccurate_claims_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - limit=5, - ) - ``` - """ - return await self._post( - "/v1/reports/accuracy/top-inaccurate-claims", - body=await async_maybe_transform( - { - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "category_id": category_id, - "topic_ids": topic_ids, - "exclude_topic_ids": exclude_topic_ids, - "tag_ids": tag_ids, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "region_ids": region_ids, - "platform_ids": platform_ids, - "persona_ids": persona_ids, - "include_no_persona": include_no_persona, - "prompt_ids": prompt_ids, - "citation_categories": citation_categories, - "limit": limit, - }, - accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_params.AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostResponse, - ) - - async def claim_breakdown_v1_reports_claim_breakdown_post( - self, - *, - start_date: str, - end_date: str, - comparison_start_date: Optional[str] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - category_id: str, - topic_ids: Optional[Iterable[str]] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - tag_ids: Optional[Iterable[str]] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - include_no_tag: bool | Omit = omit, - region_ids: Optional[Iterable[str]] | Omit = omit, - platform_ids: Optional[Iterable[str]] | Omit = omit, - persona_ids: Optional[Iterable[str]] | Omit = omit, - include_no_persona: bool | Omit = omit, - prompt_ids: Optional[Iterable[str]] | Omit = omit, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - cluster_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyClaimBreakdownV1ReportsClaimBreakdownPostResponse: - """ - Accuracy Claim Breakdown - - Args: - start_date: Body parameter. - end_date: Body parameter. - comparison_start_date: Body parameter. - comparison_end_date: Body parameter. - category_id: Body parameter. - topic_ids: Body parameter. - exclude_topic_ids: Body parameter. - tag_ids: Body parameter. - tag_filter_type: Body parameter. - include_no_tag: Body parameter. - region_ids: Body parameter. - platform_ids: Body parameter. - persona_ids: Body parameter. - include_no_persona: Body parameter. - prompt_ids: Body parameter. - citation_categories: Body parameter. - cluster_id: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AccuracyClaimBreakdownV1ReportsClaimBreakdownPostResponse: Successful Response - - Example: - ```python - accuracy = await client.reports.accuracy.claim_breakdown_v1_reports_claim_breakdown_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - cluster_id="", - ) - ``` - """ - return await self._post( - "/v1/reports/accuracy/claim-breakdown", - body=await async_maybe_transform( - { - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "category_id": category_id, - "topic_ids": topic_ids, - "exclude_topic_ids": exclude_topic_ids, - "tag_ids": tag_ids, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "region_ids": region_ids, - "platform_ids": platform_ids, - "persona_ids": persona_ids, - "include_no_persona": include_no_persona, - "prompt_ids": prompt_ids, - "citation_categories": citation_categories, - "cluster_id": cluster_id, - }, - accuracy_claim_breakdown_v1_reports_claim_breakdown_post_params.AccuracyClaimBreakdownV1ReportsClaimBreakdownPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AccuracyClaimBreakdownV1ReportsClaimBreakdownPostResponse, - ) - - async def claim_citations_v1_reports_claim_citations_post( - self, - *, - start_date: str, - end_date: str, - comparison_start_date: Optional[str] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - category_id: str, - topic_ids: Optional[Iterable[str]] | Omit = omit, - exclude_topic_ids: bool | Omit = omit, - tag_ids: Optional[Iterable[str]] | Omit = omit, - tag_filter_type: Literal["all", "any"] | Omit = omit, - include_no_tag: bool | Omit = omit, - region_ids: Optional[Iterable[str]] | Omit = omit, - platform_ids: Optional[Iterable[str]] | Omit = omit, - persona_ids: Optional[Iterable[str]] | Omit = omit, - include_no_persona: bool | Omit = omit, - prompt_ids: Optional[Iterable[str]] | Omit = omit, - citation_categories: Optional[SequenceNotStr[str]] | Omit = omit, - cluster_id: str, - limit: int | Omit = omit, - offset: int | Omit = omit, - search_query: Optional[str] | Omit = omit, - sort_order: Literal["asc", "desc"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyClaimCitationsV1ReportsClaimCitationsPostResponse: - """ - Accuracy Claim Citations - - Args: - start_date: Body parameter. - end_date: Body parameter. - comparison_start_date: Body parameter. - comparison_end_date: Body parameter. - category_id: Body parameter. - topic_ids: Body parameter. - exclude_topic_ids: Body parameter. - tag_ids: Body parameter. - tag_filter_type: Body parameter. - include_no_tag: Body parameter. - region_ids: Body parameter. - platform_ids: Body parameter. - persona_ids: Body parameter. - include_no_persona: Body parameter. - prompt_ids: Body parameter. - citation_categories: Body parameter. - cluster_id: Body parameter. - limit: Body parameter. - offset: Body parameter. - search_query: Body parameter. - sort_order: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AccuracyClaimCitationsV1ReportsClaimCitationsPostResponse: Successful Response - - Example: - ```python - accuracy = await client.reports.accuracy.claim_citations_v1_reports_claim_citations_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - cluster_id="", - limit=10, - offset=0, - sort_order="desc", - ) - ``` - """ - return await self._post( - "/v1/reports/accuracy/claim-citations", - body=await async_maybe_transform( - { - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "category_id": category_id, - "topic_ids": topic_ids, - "exclude_topic_ids": exclude_topic_ids, - "tag_ids": tag_ids, - "tag_filter_type": tag_filter_type, - "include_no_tag": include_no_tag, - "region_ids": region_ids, - "platform_ids": platform_ids, - "persona_ids": persona_ids, - "include_no_persona": include_no_persona, - "prompt_ids": prompt_ids, - "citation_categories": citation_categories, - "cluster_id": cluster_id, - "limit": limit, - "offset": offset, - "search_query": search_query, - "sort_order": sort_order, - }, - accuracy_claim_citations_v1_reports_claim_citations_post_params.AccuracyClaimCitationsV1ReportsClaimCitationsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AccuracyClaimCitationsV1ReportsClaimCitationsPostResponse, - ) - - async def cluster_example_runs_v1_reports_cluster_example_runs_post( - self, - *, - category_id: str, - cluster_id: str, - start_date: str, - end_date: str, - limit: int | Omit = omit, - offset: int | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostResponse: - """ - Accuracy Cluster Example Runs - - Args: - category_id: Body parameter. - cluster_id: Body parameter. - start_date: Body parameter. - end_date: Body parameter. - limit: Body parameter. - offset: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostResponse: Successful Response - - Example: - ```python - accuracy = await client.reports.accuracy.cluster_example_runs_v1_reports_cluster_example_runs_post( - category_id="", - cluster_id="", - start_date="", - end_date="", - limit=20, - offset=0, - ) - ``` - """ - return await self._post( - "/v1/reports/accuracy/cluster-example-runs", - body=await async_maybe_transform( - { - "category_id": category_id, - "cluster_id": cluster_id, - "start_date": start_date, - "end_date": end_date, - "limit": limit, - "offset": offset, - }, - accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_params.AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostResponse, - ) - - async def cluster_verification_pairs_v1_reports_cluster_verification_pairs_post( - self, - *, - category_id: str, - cluster_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostResponse: - """ - Accuracy Cluster Verification Pairs - - Args: - category_id: Body parameter. - cluster_id: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostResponse: Successful Response - - Example: - ```python - accuracy = await client.reports.accuracy.cluster_verification_pairs_v1_reports_cluster_verification_pairs_post( - category_id="", - cluster_id="", - ) - ``` - """ - return await self._post( - "/v1/reports/accuracy/cluster-verification-pairs", - body=await async_maybe_transform( - { - "category_id": category_id, - "cluster_id": cluster_id, - }, - accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_params.AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostResponse, - ) - - async def factcheck_setup_status_v1_reports_factcheck_setup_status_post( - self, - *, - category_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostResponse: - """ - Accuracy Factcheck Setup Status - - Args: - category_id: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostResponse: Successful Response - - Example: - ```python - accuracy = await client.reports.accuracy.factcheck_setup_status_v1_reports_factcheck_setup_status_post( - category_id="", - ) - ``` - """ - return await self._post( - "/v1/reports/accuracy/factcheck-setup-status", - body=await async_maybe_transform( - {"category_id": category_id}, - accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_params.AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostResponse, - ) - - -class AccuracyResourceWithRawResponse: - def __init__(self, accuracy: AccuracyResource) -> None: - self._accuracy = accuracy - - self.overview_v1_reports_overview_post = to_raw_response_wrapper( - accuracy.overview_v1_reports_overview_post, - ) - self.breakdown_v1_reports_breakdown_post = to_raw_response_wrapper( - accuracy.breakdown_v1_reports_breakdown_post, - ) - self.citation_analysis_v1_reports_citation_analysis_post = to_raw_response_wrapper( - accuracy.citation_analysis_v1_reports_citation_analysis_post, - ) - self.topic_ids_v1_reports_topic_ids_post = to_raw_response_wrapper( - accuracy.topic_ids_v1_reports_topic_ids_post, - ) - self.inaccurate_themes_v1_reports_inaccurate_themes_post = to_raw_response_wrapper( - accuracy.inaccurate_themes_v1_reports_inaccurate_themes_post, - ) - self.inaccurate_clusters_v1_reports_inaccurate_clusters_post = to_raw_response_wrapper( - accuracy.inaccurate_clusters_v1_reports_inaccurate_clusters_post, - ) - self.inaccuracy_drivers_v1_reports_inaccuracy_drivers_post = to_raw_response_wrapper( - accuracy.inaccuracy_drivers_v1_reports_inaccuracy_drivers_post, - ) - self.top_inaccurate_claims_v1_reports_top_inaccurate_claims_post = to_raw_response_wrapper( - accuracy.top_inaccurate_claims_v1_reports_top_inaccurate_claims_post, - ) - self.claim_breakdown_v1_reports_claim_breakdown_post = to_raw_response_wrapper( - accuracy.claim_breakdown_v1_reports_claim_breakdown_post, - ) - self.claim_citations_v1_reports_claim_citations_post = to_raw_response_wrapper( - accuracy.claim_citations_v1_reports_claim_citations_post, - ) - self.cluster_example_runs_v1_reports_cluster_example_runs_post = to_raw_response_wrapper( - accuracy.cluster_example_runs_v1_reports_cluster_example_runs_post, - ) - self.cluster_verification_pairs_v1_reports_cluster_verification_pairs_post = to_raw_response_wrapper( - accuracy.cluster_verification_pairs_v1_reports_cluster_verification_pairs_post, - ) - self.factcheck_setup_status_v1_reports_factcheck_setup_status_post = to_raw_response_wrapper( - accuracy.factcheck_setup_status_v1_reports_factcheck_setup_status_post, - ) - - -class AsyncAccuracyResourceWithRawResponse: - def __init__(self, accuracy: AsyncAccuracyResource) -> None: - self._accuracy = accuracy - - self.overview_v1_reports_overview_post = async_to_raw_response_wrapper( - accuracy.overview_v1_reports_overview_post, - ) - self.breakdown_v1_reports_breakdown_post = async_to_raw_response_wrapper( - accuracy.breakdown_v1_reports_breakdown_post, - ) - self.citation_analysis_v1_reports_citation_analysis_post = async_to_raw_response_wrapper( - accuracy.citation_analysis_v1_reports_citation_analysis_post, - ) - self.topic_ids_v1_reports_topic_ids_post = async_to_raw_response_wrapper( - accuracy.topic_ids_v1_reports_topic_ids_post, - ) - self.inaccurate_themes_v1_reports_inaccurate_themes_post = async_to_raw_response_wrapper( - accuracy.inaccurate_themes_v1_reports_inaccurate_themes_post, - ) - self.inaccurate_clusters_v1_reports_inaccurate_clusters_post = async_to_raw_response_wrapper( - accuracy.inaccurate_clusters_v1_reports_inaccurate_clusters_post, - ) - self.inaccuracy_drivers_v1_reports_inaccuracy_drivers_post = async_to_raw_response_wrapper( - accuracy.inaccuracy_drivers_v1_reports_inaccuracy_drivers_post, - ) - self.top_inaccurate_claims_v1_reports_top_inaccurate_claims_post = async_to_raw_response_wrapper( - accuracy.top_inaccurate_claims_v1_reports_top_inaccurate_claims_post, - ) - self.claim_breakdown_v1_reports_claim_breakdown_post = async_to_raw_response_wrapper( - accuracy.claim_breakdown_v1_reports_claim_breakdown_post, - ) - self.claim_citations_v1_reports_claim_citations_post = async_to_raw_response_wrapper( - accuracy.claim_citations_v1_reports_claim_citations_post, - ) - self.cluster_example_runs_v1_reports_cluster_example_runs_post = async_to_raw_response_wrapper( - accuracy.cluster_example_runs_v1_reports_cluster_example_runs_post, - ) - self.cluster_verification_pairs_v1_reports_cluster_verification_pairs_post = async_to_raw_response_wrapper( - accuracy.cluster_verification_pairs_v1_reports_cluster_verification_pairs_post, - ) - self.factcheck_setup_status_v1_reports_factcheck_setup_status_post = async_to_raw_response_wrapper( - accuracy.factcheck_setup_status_v1_reports_factcheck_setup_status_post, - ) - - -class AccuracyResourceWithStreamingResponse: - def __init__(self, accuracy: AccuracyResource) -> None: - self._accuracy = accuracy - - self.overview_v1_reports_overview_post = to_streamed_response_wrapper( - accuracy.overview_v1_reports_overview_post, - ) - self.breakdown_v1_reports_breakdown_post = to_streamed_response_wrapper( - accuracy.breakdown_v1_reports_breakdown_post, - ) - self.citation_analysis_v1_reports_citation_analysis_post = to_streamed_response_wrapper( - accuracy.citation_analysis_v1_reports_citation_analysis_post, - ) - self.topic_ids_v1_reports_topic_ids_post = to_streamed_response_wrapper( - accuracy.topic_ids_v1_reports_topic_ids_post, - ) - self.inaccurate_themes_v1_reports_inaccurate_themes_post = to_streamed_response_wrapper( - accuracy.inaccurate_themes_v1_reports_inaccurate_themes_post, - ) - self.inaccurate_clusters_v1_reports_inaccurate_clusters_post = to_streamed_response_wrapper( - accuracy.inaccurate_clusters_v1_reports_inaccurate_clusters_post, - ) - self.inaccuracy_drivers_v1_reports_inaccuracy_drivers_post = to_streamed_response_wrapper( - accuracy.inaccuracy_drivers_v1_reports_inaccuracy_drivers_post, - ) - self.top_inaccurate_claims_v1_reports_top_inaccurate_claims_post = to_streamed_response_wrapper( - accuracy.top_inaccurate_claims_v1_reports_top_inaccurate_claims_post, - ) - self.claim_breakdown_v1_reports_claim_breakdown_post = to_streamed_response_wrapper( - accuracy.claim_breakdown_v1_reports_claim_breakdown_post, - ) - self.claim_citations_v1_reports_claim_citations_post = to_streamed_response_wrapper( - accuracy.claim_citations_v1_reports_claim_citations_post, - ) - self.cluster_example_runs_v1_reports_cluster_example_runs_post = to_streamed_response_wrapper( - accuracy.cluster_example_runs_v1_reports_cluster_example_runs_post, - ) - self.cluster_verification_pairs_v1_reports_cluster_verification_pairs_post = to_streamed_response_wrapper( - accuracy.cluster_verification_pairs_v1_reports_cluster_verification_pairs_post, - ) - self.factcheck_setup_status_v1_reports_factcheck_setup_status_post = to_streamed_response_wrapper( - accuracy.factcheck_setup_status_v1_reports_factcheck_setup_status_post, - ) - - -class AsyncAccuracyResourceWithStreamingResponse: - def __init__(self, accuracy: AsyncAccuracyResource) -> None: - self._accuracy = accuracy - - self.overview_v1_reports_overview_post = async_to_streamed_response_wrapper( - accuracy.overview_v1_reports_overview_post, - ) - self.breakdown_v1_reports_breakdown_post = async_to_streamed_response_wrapper( - accuracy.breakdown_v1_reports_breakdown_post, - ) - self.citation_analysis_v1_reports_citation_analysis_post = async_to_streamed_response_wrapper( - accuracy.citation_analysis_v1_reports_citation_analysis_post, - ) - self.topic_ids_v1_reports_topic_ids_post = async_to_streamed_response_wrapper( - accuracy.topic_ids_v1_reports_topic_ids_post, - ) - self.inaccurate_themes_v1_reports_inaccurate_themes_post = async_to_streamed_response_wrapper( - accuracy.inaccurate_themes_v1_reports_inaccurate_themes_post, - ) - self.inaccurate_clusters_v1_reports_inaccurate_clusters_post = async_to_streamed_response_wrapper( - accuracy.inaccurate_clusters_v1_reports_inaccurate_clusters_post, - ) - self.inaccuracy_drivers_v1_reports_inaccuracy_drivers_post = async_to_streamed_response_wrapper( - accuracy.inaccuracy_drivers_v1_reports_inaccuracy_drivers_post, - ) - self.top_inaccurate_claims_v1_reports_top_inaccurate_claims_post = async_to_streamed_response_wrapper( - accuracy.top_inaccurate_claims_v1_reports_top_inaccurate_claims_post, - ) - self.claim_breakdown_v1_reports_claim_breakdown_post = async_to_streamed_response_wrapper( - accuracy.claim_breakdown_v1_reports_claim_breakdown_post, - ) - self.claim_citations_v1_reports_claim_citations_post = async_to_streamed_response_wrapper( - accuracy.claim_citations_v1_reports_claim_citations_post, - ) - self.cluster_example_runs_v1_reports_cluster_example_runs_post = async_to_streamed_response_wrapper( - accuracy.cluster_example_runs_v1_reports_cluster_example_runs_post, - ) - self.cluster_verification_pairs_v1_reports_cluster_verification_pairs_post = async_to_streamed_response_wrapper( - accuracy.cluster_verification_pairs_v1_reports_cluster_verification_pairs_post, - ) - self.factcheck_setup_status_v1_reports_factcheck_setup_status_post = async_to_streamed_response_wrapper( - accuracy.factcheck_setup_status_v1_reports_factcheck_setup_status_post, - ) diff --git a/src/resources/reports/bots.py b/src/resources/reports/bots.py deleted file mode 100644 index b4f2bc52..00000000 --- a/src/resources/reports/bots.py +++ /dev/null @@ -1,461 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -import httpx - -from typing import Dict, Iterable, Optional, Union -from datetime import datetime -from typing_extensions import Literal - -from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from ..._utils import path_template, maybe_transform, async_maybe_transform -from ..._compat import cached_property -from ..._resource import SyncAPIResource, AsyncAPIResource -from ..._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from ..._base_client import make_request_options -from ...types.report_response import ReportResponse -from ...types.pagination import Pagination -from ...types.path_filter import PathFilter -from ...types.bot_name_filter import BotNameFilter -from ...types.bot_provider_filter import BotProviderFilter -from ...types.reports import bot_create_report_v1_v1_reports_post_params -from ...types.report_response import ReportResponse -from ...types.pagination import Pagination -from ...types.path_filter import PathFilter -from ...types.bot_name_filter import BotNameFilter -from ...types.bot_provider_filter import BotProviderFilter -from ...types.reports import bot_create_report_v2_v2_reports_post_params - -__all__ = ["BotsResource", "AsyncBotsResource"] - - -class BotsResource(SyncAPIResource): - - @cached_property - def with_raw_response(self) -> BotsResourceWithRawResponse: - return BotsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> BotsResourceWithStreamingResponse: - return BotsResourceWithStreamingResponse(self) - - def create_report_v1_v1_reports_post( - self, - *, - date_interval: Literal["hour", "day", "week", "month", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["date", "path", "bot_name", "bot_provider"]] | Omit = omit, - metrics: Iterable[Literal["count", "citations", "indexing", "training", "last_visit"]], - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - domain: str, - start_date: Union[str, datetime], - end_date: Union[str, datetime] | Omit = omit, - organization_id: Optional[str] | Omit = omit, - metric_filters: Iterable[bot_create_report_v1_v1_reports_post_params.MetricFilter] | Omit = omit, - filters: Iterable[object] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """ - Get bot traffic report from the daily aggregated materialized view. - - This endpoint queries pre-aggregated daily bot data, making it efficient - for large date ranges and high-traffic sites. - - Metrics: - - count: unique bot visits - - citations: unique citation events - - indexing: unique indexing events - - training: unique training events - - last_visit: most recent visit timestamp - - Args: - date_interval: Date interval for the report. (only used with date dimension) - dimensions: Dimensions to group the report by. - metrics: Body parameter. - order_by: Custom ordering of the report results. - pagination: Pagination settings for the report results. - domain: Domain to query logs for. - start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp. - end_date: End date for logs. Accepts same formats as start_date. Defaults to now if omitted. - organization_id: Body parameter. - metric_filters: Numeric filters applied after report metrics are calculated. - filters: Filters for bots report. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - ReportResponse: Successful Response - - Example: - ```python - bot = client.reports.bots.create_report_v1_v1_reports_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - domain="", - start_date="", - ) - ``` - """ - return self._post( - "/v1/reports/bots", - body=maybe_transform( - { - "date_interval": date_interval, - "dimensions": dimensions, - "metrics": metrics, - "order_by": order_by, - "pagination": pagination, - "domain": domain, - "start_date": start_date, - "end_date": end_date, - "organization_id": organization_id, - "metric_filters": metric_filters, - "filters": filters, - }, - bot_create_report_v1_v1_reports_post_params.BotCreateReportV1V1ReportsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=ReportResponse, - ) - - def create_report_v2_v2_reports_post( - self, - *, - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["date", "hour", "path", "bot_name", "bot_provider", "bot_type"]] | Omit = omit, - metrics: Iterable[Literal["count", "citations", "indexing", "training", "last_visit"]], - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - domain: str, - start_date: Union[str, datetime], - end_date: Union[str, datetime] | Omit = omit, - organization_id: Optional[str] | Omit = omit, - metric_filters: Iterable[bot_create_report_v2_v2_reports_post_params.MetricFilter] | Omit = omit, - filters: Iterable[object] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """ - Get bot traffic report from the hourly aggregated materialized view (UTC-based). - - Supports date_interval="hour", calendar intervals through "year", "quarter", and "relative_week". - - Metrics: - - count: unique bot visits - - citations: unique citation events (ai_assistant bot type) - - indexing: unique indexing events (index bot type) - - training: unique training events (ai_training bot type) - - last_visit: most recent visit timestamp - - Dimensions: - - date, path, bot_name, bot_provider, bot_type - - Args: - date_interval: Date interval for the report. (only used with date dimension) - dimensions: Dimensions to group the report by. - metrics: Body parameter. - order_by: Custom ordering of the report results. - pagination: Pagination settings for the report results. - domain: Domain to query logs for. - start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp. - end_date: End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted. - organization_id: Body parameter. - metric_filters: Numeric filters applied after report metrics are calculated. - filters: Filters for bots report. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - ReportResponse: Successful Response - - Example: - ```python - bot = client.reports.bots.create_report_v2_v2_reports_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - domain="", - start_date="", - ) - ``` - """ - return self._post( - "/v2/reports/bots", - body=maybe_transform( - { - "date_interval": date_interval, - "dimensions": dimensions, - "metrics": metrics, - "order_by": order_by, - "pagination": pagination, - "domain": domain, - "start_date": start_date, - "end_date": end_date, - "organization_id": organization_id, - "metric_filters": metric_filters, - "filters": filters, - }, - bot_create_report_v2_v2_reports_post_params.BotCreateReportV2V2ReportsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=ReportResponse, - ) - - -class AsyncBotsResource(AsyncAPIResource): - - @cached_property - def with_raw_response(self) -> AsyncBotsResourceWithRawResponse: - return AsyncBotsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncBotsResourceWithStreamingResponse: - return AsyncBotsResourceWithStreamingResponse(self) - - async def create_report_v1_v1_reports_post( - self, - *, - date_interval: Literal["hour", "day", "week", "month", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["date", "path", "bot_name", "bot_provider"]] | Omit = omit, - metrics: Iterable[Literal["count", "citations", "indexing", "training", "last_visit"]], - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - domain: str, - start_date: Union[str, datetime], - end_date: Union[str, datetime] | Omit = omit, - organization_id: Optional[str] | Omit = omit, - metric_filters: Iterable[bot_create_report_v1_v1_reports_post_params.MetricFilter] | Omit = omit, - filters: Iterable[object] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """ - Get bot traffic report from the daily aggregated materialized view. - - This endpoint queries pre-aggregated daily bot data, making it efficient - for large date ranges and high-traffic sites. - - Metrics: - - count: unique bot visits - - citations: unique citation events - - indexing: unique indexing events - - training: unique training events - - last_visit: most recent visit timestamp - - Args: - date_interval: Date interval for the report. (only used with date dimension) - dimensions: Dimensions to group the report by. - metrics: Body parameter. - order_by: Custom ordering of the report results. - pagination: Pagination settings for the report results. - domain: Domain to query logs for. - start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp. - end_date: End date for logs. Accepts same formats as start_date. Defaults to now if omitted. - organization_id: Body parameter. - metric_filters: Numeric filters applied after report metrics are calculated. - filters: Filters for bots report. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - ReportResponse: Successful Response - - Example: - ```python - bot = await client.reports.bots.create_report_v1_v1_reports_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - domain="", - start_date="", - ) - ``` - """ - return await self._post( - "/v1/reports/bots", - body=await async_maybe_transform( - { - "date_interval": date_interval, - "dimensions": dimensions, - "metrics": metrics, - "order_by": order_by, - "pagination": pagination, - "domain": domain, - "start_date": start_date, - "end_date": end_date, - "organization_id": organization_id, - "metric_filters": metric_filters, - "filters": filters, - }, - bot_create_report_v1_v1_reports_post_params.BotCreateReportV1V1ReportsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=ReportResponse, - ) - - async def create_report_v2_v2_reports_post( - self, - *, - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["date", "hour", "path", "bot_name", "bot_provider", "bot_type"]] | Omit = omit, - metrics: Iterable[Literal["count", "citations", "indexing", "training", "last_visit"]], - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - domain: str, - start_date: Union[str, datetime], - end_date: Union[str, datetime] | Omit = omit, - organization_id: Optional[str] | Omit = omit, - metric_filters: Iterable[bot_create_report_v2_v2_reports_post_params.MetricFilter] | Omit = omit, - filters: Iterable[object] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """ - Get bot traffic report from the hourly aggregated materialized view (UTC-based). - - Supports date_interval="hour", calendar intervals through "year", "quarter", and "relative_week". - - Metrics: - - count: unique bot visits - - citations: unique citation events (ai_assistant bot type) - - indexing: unique indexing events (index bot type) - - training: unique training events (ai_training bot type) - - last_visit: most recent visit timestamp - - Dimensions: - - date, path, bot_name, bot_provider, bot_type - - Args: - date_interval: Date interval for the report. (only used with date dimension) - dimensions: Dimensions to group the report by. - metrics: Body parameter. - order_by: Custom ordering of the report results. - pagination: Pagination settings for the report results. - domain: Domain to query logs for. - start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp. - end_date: End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted. - organization_id: Body parameter. - metric_filters: Numeric filters applied after report metrics are calculated. - filters: Filters for bots report. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - ReportResponse: Successful Response - - Example: - ```python - bot = await client.reports.bots.create_report_v2_v2_reports_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - domain="", - start_date="", - ) - ``` - """ - return await self._post( - "/v2/reports/bots", - body=await async_maybe_transform( - { - "date_interval": date_interval, - "dimensions": dimensions, - "metrics": metrics, - "order_by": order_by, - "pagination": pagination, - "domain": domain, - "start_date": start_date, - "end_date": end_date, - "organization_id": organization_id, - "metric_filters": metric_filters, - "filters": filters, - }, - bot_create_report_v2_v2_reports_post_params.BotCreateReportV2V2ReportsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=ReportResponse, - ) - - -class BotsResourceWithRawResponse: - def __init__(self, bots: BotsResource) -> None: - self._bots = bots - - self.create_report_v1_v1_reports_post = to_raw_response_wrapper( - bots.create_report_v1_v1_reports_post, - ) - self.create_report_v2_v2_reports_post = to_raw_response_wrapper( - bots.create_report_v2_v2_reports_post, - ) - - -class AsyncBotsResourceWithRawResponse: - def __init__(self, bots: AsyncBotsResource) -> None: - self._bots = bots - - self.create_report_v1_v1_reports_post = async_to_raw_response_wrapper( - bots.create_report_v1_v1_reports_post, - ) - self.create_report_v2_v2_reports_post = async_to_raw_response_wrapper( - bots.create_report_v2_v2_reports_post, - ) - - -class BotsResourceWithStreamingResponse: - def __init__(self, bots: BotsResource) -> None: - self._bots = bots - - self.create_report_v1_v1_reports_post = to_streamed_response_wrapper( - bots.create_report_v1_v1_reports_post, - ) - self.create_report_v2_v2_reports_post = to_streamed_response_wrapper( - bots.create_report_v2_v2_reports_post, - ) - - -class AsyncBotsResourceWithStreamingResponse: - def __init__(self, bots: AsyncBotsResource) -> None: - self._bots = bots - - self.create_report_v1_v1_reports_post = async_to_streamed_response_wrapper( - bots.create_report_v1_v1_reports_post, - ) - self.create_report_v2_v2_reports_post = async_to_streamed_response_wrapper( - bots.create_report_v2_v2_reports_post, - ) diff --git a/src/resources/reports/citations.py b/src/resources/reports/citations.py deleted file mode 100644 index 1a2339cf..00000000 --- a/src/resources/reports/citations.py +++ /dev/null @@ -1,719 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -import httpx - -from typing import Dict, Iterable, Optional, Union -from datetime import datetime -from typing_extensions import Literal - -from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from ..._utils import path_template, maybe_transform, async_maybe_transform -from ..._compat import cached_property -from ..._resource import SyncAPIResource, AsyncAPIResource -from ..._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from ..._base_client import make_request_options -from ..._streaming import Stream, AsyncStream -from ...types.reports.citation_query_v1_reports_post_response import CitationQueryV1ReportsPostResponse, CitationsResult -from ...types.pagination import Pagination -from ...types.hostname_filter import HostnameFilter -from ...types.path_filter import PathFilter -from ...types.region_id_filter import RegionIdFilter -from ...types.region_name_filter import RegionNameFilter -from ...types.topic_id_filter import TopicIdFilter -from ...types.topic_name_filter import TopicNameFilter -from ...types.model_id_filter import ModelIdFilter -from ...types.tag_id_filter import TagIdFilter -from ...types.tag_name_filter import TagNameFilter -from ...types.url_filter import UrlFilter -from ...types.root_domain_filter import RootDomainFilter -from ...types.analysis_type_filter import AnalysisTypeFilter -from ...types.prompt_type_filter import PromptTypeFilter -from ...types.persona_id_filter import PersonaIdFilter -from ...types.prompt_filter import PromptFilter -from ...types.prompt_id_filter import PromptIdFilter -from ...types.reports import citation_query_v1_reports_post_params -from ...types.reports.citation_stream_v1_reports_stream_post_response import CitationStreamV1ReportsStreamPostResponse, Query, CitationStreamV1ReportsStreamPostResponse2 -from ...types.pagination import Pagination -from ...types.hostname_filter import HostnameFilter -from ...types.path_filter import PathFilter -from ...types.region_id_filter import RegionIdFilter -from ...types.region_name_filter import RegionNameFilter -from ...types.topic_id_filter import TopicIdFilter -from ...types.topic_name_filter import TopicNameFilter -from ...types.model_id_filter import ModelIdFilter -from ...types.tag_id_filter import TagIdFilter -from ...types.tag_name_filter import TagNameFilter -from ...types.url_filter import UrlFilter -from ...types.root_domain_filter import RootDomainFilter -from ...types.analysis_type_filter import AnalysisTypeFilter -from ...types.prompt_type_filter import PromptTypeFilter -from ...types.persona_id_filter import PersonaIdFilter -from ...types.prompt_filter import PromptFilter -from ...types.prompt_id_filter import PromptIdFilter -from ...types.reports import citation_stream_v1_reports_stream_post_params -from ...types.reports.citation_query_v2_v2_reports_post_response import CitationQueryV2V2ReportsPostResponse -from ...types.reports import citation_query_v2_v2_reports_post_params -from ...types.reports import citation_stream_v2_v2_reports_stream_post_params - -__all__ = ["CitationsResource", "AsyncCitationsResource"] - - -class CitationsResource(SyncAPIResource): - - @cached_property - def with_raw_response(self) -> CitationsResourceWithRawResponse: - return CitationsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> CitationsResourceWithStreamingResponse: - return CitationsResourceWithStreamingResponse(self) - - def query_v1_reports_post( - self, - *, - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["hostname", "path", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "url", "root_domain", "persona", "citation_category"]] | Omit = omit, - metrics: Iterable[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]], - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - category_id: str, - start_date: Union[str, datetime], - end_date: Union[str, datetime], - filters: Iterable[object] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CitationQueryV1ReportsPostResponse: - """ - Get citations for a given category. - - Args: - date_interval: Date interval for the report. (only used with date dimension) - dimensions: Dimensions to group the report by. - metrics: Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead. - order_by: Custom ordering of the report results. - pagination: Pagination settings for the report results. - category_id: Body parameter. - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - filters: List of filters to apply to the citations report. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - CitationQueryV1ReportsPostResponse: Successful Response - - Example: - ```python - citation = client.reports.citations.query_v1_reports_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - category_id="", - start_date="", - end_date="", - ) - ``` - """ - return self._post( - "/v1/reports/citations", - body=maybe_transform( - { - "date_interval": date_interval, - "dimensions": dimensions, - "metrics": metrics, - "order_by": order_by, - "pagination": pagination, - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "filters": filters, - }, - citation_query_v1_reports_post_params.CitationQueryV1ReportsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=CitationQueryV1ReportsPostResponse, - ) - - def stream_v1_reports_stream_post( - self, - *, - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["hostname", "path", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "url", "root_domain", "persona", "citation_category"]] | Omit = omit, - metrics: Iterable[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]], - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Optional[Pagination] | Omit = omit, - category_id: str, - start_date: Union[str, datetime], - end_date: Union[str, datetime], - filters: Iterable[object] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Stream[CitationStreamV1ReportsStreamPostResponse]: - """ - Stream Citations - - Args: - date_interval: Date interval for the report. (only used with date dimension) - dimensions: Dimensions to group the report by. - metrics: Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead. - order_by: Custom ordering of the report results. - pagination: Body parameter. - category_id: Body parameter. - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - filters: List of filters to apply to the citations report. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - Stream[CitationStreamV1ReportsStreamPostResponse]: Server-sent events stream. Emits a `summary` event first, then one `row` event per streamed row. - - Example: - ```python - stream = client.reports.citations.stream_v1_reports_stream_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - category_id="", - start_date="", - end_date="", - ) - for event in stream: - print(event) - ``` - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return self._post( - "/v1/reports/citations/stream", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=CitationStreamV1ReportsStreamPostResponse, - stream=True, - stream_cls=Stream[CitationStreamV1ReportsStreamPostResponse], - ) - - def query_v2_v2_reports_post( - self, - *, - category_id: str, - start_date: str, - end_date: str, - group_by: Iterable[Literal["page", "date", "model", "topic", "region", "persona", "prompt"]] | Omit = omit, - metrics: Optional[Iterable[Literal["count", "citation_share", "rank", "first_cited_at"]]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - scope: Literal["all", "owned"] | Omit = omit, - filter: Optional[citation_query_v2_v2_reports_post_params.Filter] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - cursor: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CitationQueryV2V2ReportsPostResponse: - """ - Query Citations V2 - - Args: - category_id: Body parameter. - start_date: YYYY-MM-DD, ET, inclusive - end_date: YYYY-MM-DD, ET, inclusive - group_by: Body parameter. - metrics: Body parameter. - interval: Body parameter. - scope: `all` (every cited domain) or `owned` (only your owned domains, for easy client-side totals). - filter: Body parameter. - limit: Page size; default 10, max 50. - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - cursor: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - CitationQueryV2V2ReportsPostResponse: Successful Response - - Example: - ```python - citation = client.reports.citations.query_v2_v2_reports_post( - category_id="", - start_date="", - end_date="", - interval="day", - scope="all", - ) - ``` - """ - return self._post( - "/v2/reports/citations", - body=maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "group_by": group_by, - "metrics": metrics, - "interval": interval, - "scope": scope, - "filter": filter, - "limit": limit, - "max_results": max_results, - "cursor": cursor, - }, - citation_query_v2_v2_reports_post_params.CitationQueryV2V2ReportsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=CitationQueryV2V2ReportsPostResponse, - ) - - def stream_v2_v2_reports_stream_post( - self, - *, - category_id: str, - start_date: str, - end_date: str, - group_by: Iterable[Literal["page", "date", "model", "topic", "region", "persona", "prompt"]] | Omit = omit, - metrics: Optional[Iterable[Literal["count", "citation_share", "rank", "first_cited_at"]]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - scope: Literal["all", "owned"] | Omit = omit, - filter: Optional[citation_stream_v2_v2_reports_stream_post_params.Filter] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - cursor: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Stream[str]: - """ - Stream Citations V2 - - Args: - category_id: Body parameter. - start_date: YYYY-MM-DD, ET, inclusive - end_date: YYYY-MM-DD, ET, inclusive - group_by: Body parameter. - metrics: Body parameter. - interval: Body parameter. - scope: `all` (every cited domain) or `owned` (only your owned domains, for easy client-side totals). - filter: Body parameter. - limit: Page size; default 10, max 50. - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - cursor: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - Stream[str]: Successful Response - - Example: - ```python - stream = client.reports.citations.stream_v2_v2_reports_stream_post( - category_id="", - start_date="", - end_date="", - interval="day", - scope="all", - ) - for event in stream: - print(event) - ``` - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return self._post( - "/v2/reports/citations/stream", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=str, - stream=True, - stream_cls=Stream[str], - ) - - -class AsyncCitationsResource(AsyncAPIResource): - - @cached_property - def with_raw_response(self) -> AsyncCitationsResourceWithRawResponse: - return AsyncCitationsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncCitationsResourceWithStreamingResponse: - return AsyncCitationsResourceWithStreamingResponse(self) - - async def query_v1_reports_post( - self, - *, - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["hostname", "path", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "url", "root_domain", "persona", "citation_category"]] | Omit = omit, - metrics: Iterable[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]], - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - category_id: str, - start_date: Union[str, datetime], - end_date: Union[str, datetime], - filters: Iterable[object] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CitationQueryV1ReportsPostResponse: - """ - Get citations for a given category. - - Args: - date_interval: Date interval for the report. (only used with date dimension) - dimensions: Dimensions to group the report by. - metrics: Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead. - order_by: Custom ordering of the report results. - pagination: Pagination settings for the report results. - category_id: Body parameter. - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - filters: List of filters to apply to the citations report. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - CitationQueryV1ReportsPostResponse: Successful Response - - Example: - ```python - citation = await client.reports.citations.query_v1_reports_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - category_id="", - start_date="", - end_date="", - ) - ``` - """ - return await self._post( - "/v1/reports/citations", - body=await async_maybe_transform( - { - "date_interval": date_interval, - "dimensions": dimensions, - "metrics": metrics, - "order_by": order_by, - "pagination": pagination, - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "filters": filters, - }, - citation_query_v1_reports_post_params.CitationQueryV1ReportsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=CitationQueryV1ReportsPostResponse, - ) - - async def stream_v1_reports_stream_post( - self, - *, - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["hostname", "path", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "url", "root_domain", "persona", "citation_category"]] | Omit = omit, - metrics: Iterable[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]], - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Optional[Pagination] | Omit = omit, - category_id: str, - start_date: Union[str, datetime], - end_date: Union[str, datetime], - filters: Iterable[object] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncStream[CitationStreamV1ReportsStreamPostResponse]: - """ - Stream Citations - - Args: - date_interval: Date interval for the report. (only used with date dimension) - dimensions: Dimensions to group the report by. - metrics: Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead. - order_by: Custom ordering of the report results. - pagination: Body parameter. - category_id: Body parameter. - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - filters: List of filters to apply to the citations report. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AsyncStream[CitationStreamV1ReportsStreamPostResponse]: Server-sent events stream. Emits a `summary` event first, then one `row` event per streamed row. - - Example: - ```python - stream = await client.reports.citations.stream_v1_reports_stream_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - category_id="", - start_date="", - end_date="", - ) - async for event in stream: - print(event) - ``` - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return await self._post( - "/v1/reports/citations/stream", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=CitationStreamV1ReportsStreamPostResponse, - stream=True, - stream_cls=AsyncStream[CitationStreamV1ReportsStreamPostResponse], - ) - - async def query_v2_v2_reports_post( - self, - *, - category_id: str, - start_date: str, - end_date: str, - group_by: Iterable[Literal["page", "date", "model", "topic", "region", "persona", "prompt"]] | Omit = omit, - metrics: Optional[Iterable[Literal["count", "citation_share", "rank", "first_cited_at"]]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - scope: Literal["all", "owned"] | Omit = omit, - filter: Optional[citation_query_v2_v2_reports_post_params.Filter] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - cursor: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> CitationQueryV2V2ReportsPostResponse: - """ - Query Citations V2 - - Args: - category_id: Body parameter. - start_date: YYYY-MM-DD, ET, inclusive - end_date: YYYY-MM-DD, ET, inclusive - group_by: Body parameter. - metrics: Body parameter. - interval: Body parameter. - scope: `all` (every cited domain) or `owned` (only your owned domains, for easy client-side totals). - filter: Body parameter. - limit: Page size; default 10, max 50. - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - cursor: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - CitationQueryV2V2ReportsPostResponse: Successful Response - - Example: - ```python - citation = await client.reports.citations.query_v2_v2_reports_post( - category_id="", - start_date="", - end_date="", - interval="day", - scope="all", - ) - ``` - """ - return await self._post( - "/v2/reports/citations", - body=await async_maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "group_by": group_by, - "metrics": metrics, - "interval": interval, - "scope": scope, - "filter": filter, - "limit": limit, - "max_results": max_results, - "cursor": cursor, - }, - citation_query_v2_v2_reports_post_params.CitationQueryV2V2ReportsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=CitationQueryV2V2ReportsPostResponse, - ) - - async def stream_v2_v2_reports_stream_post( - self, - *, - category_id: str, - start_date: str, - end_date: str, - group_by: Iterable[Literal["page", "date", "model", "topic", "region", "persona", "prompt"]] | Omit = omit, - metrics: Optional[Iterable[Literal["count", "citation_share", "rank", "first_cited_at"]]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - scope: Literal["all", "owned"] | Omit = omit, - filter: Optional[citation_stream_v2_v2_reports_stream_post_params.Filter] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - cursor: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncStream[str]: - """ - Stream Citations V2 - - Args: - category_id: Body parameter. - start_date: YYYY-MM-DD, ET, inclusive - end_date: YYYY-MM-DD, ET, inclusive - group_by: Body parameter. - metrics: Body parameter. - interval: Body parameter. - scope: `all` (every cited domain) or `owned` (only your owned domains, for easy client-side totals). - filter: Body parameter. - limit: Page size; default 10, max 50. - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - cursor: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AsyncStream[str]: Successful Response - - Example: - ```python - stream = await client.reports.citations.stream_v2_v2_reports_stream_post( - category_id="", - start_date="", - end_date="", - interval="day", - scope="all", - ) - async for event in stream: - print(event) - ``` - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return await self._post( - "/v2/reports/citations/stream", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=str, - stream=True, - stream_cls=AsyncStream[str], - ) - - -class CitationsResourceWithRawResponse: - def __init__(self, citations: CitationsResource) -> None: - self._citations = citations - - self.query_v1_reports_post = to_raw_response_wrapper( - citations.query_v1_reports_post, - ) - self.stream_v1_reports_stream_post = to_raw_response_wrapper( - citations.stream_v1_reports_stream_post, - ) - self.query_v2_v2_reports_post = to_raw_response_wrapper( - citations.query_v2_v2_reports_post, - ) - self.stream_v2_v2_reports_stream_post = to_raw_response_wrapper( - citations.stream_v2_v2_reports_stream_post, - ) - - -class AsyncCitationsResourceWithRawResponse: - def __init__(self, citations: AsyncCitationsResource) -> None: - self._citations = citations - - self.query_v1_reports_post = async_to_raw_response_wrapper( - citations.query_v1_reports_post, - ) - self.stream_v1_reports_stream_post = async_to_raw_response_wrapper( - citations.stream_v1_reports_stream_post, - ) - self.query_v2_v2_reports_post = async_to_raw_response_wrapper( - citations.query_v2_v2_reports_post, - ) - self.stream_v2_v2_reports_stream_post = async_to_raw_response_wrapper( - citations.stream_v2_v2_reports_stream_post, - ) - - -class CitationsResourceWithStreamingResponse: - def __init__(self, citations: CitationsResource) -> None: - self._citations = citations - - self.query_v1_reports_post = to_streamed_response_wrapper( - citations.query_v1_reports_post, - ) - self.stream_v1_reports_stream_post = to_streamed_response_wrapper( - citations.stream_v1_reports_stream_post, - ) - self.query_v2_v2_reports_post = to_streamed_response_wrapper( - citations.query_v2_v2_reports_post, - ) - self.stream_v2_v2_reports_stream_post = to_streamed_response_wrapper( - citations.stream_v2_v2_reports_stream_post, - ) - - -class AsyncCitationsResourceWithStreamingResponse: - def __init__(self, citations: AsyncCitationsResource) -> None: - self._citations = citations - - self.query_v1_reports_post = async_to_streamed_response_wrapper( - citations.query_v1_reports_post, - ) - self.stream_v1_reports_stream_post = async_to_streamed_response_wrapper( - citations.stream_v1_reports_stream_post, - ) - self.query_v2_v2_reports_post = async_to_streamed_response_wrapper( - citations.query_v2_v2_reports_post, - ) - self.stream_v2_v2_reports_stream_post = async_to_streamed_response_wrapper( - citations.stream_v2_v2_reports_stream_post, - ) diff --git a/src/resources/reports/query_fanouts.py b/src/resources/reports/query_fanouts.py deleted file mode 100644 index 92a8af6f..00000000 --- a/src/resources/reports/query_fanouts.py +++ /dev/null @@ -1,549 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -import httpx - -from typing import Dict, Iterable, Optional, Union -from datetime import datetime -from typing_extensions import Literal - -from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from ..._utils import path_template, maybe_transform, async_maybe_transform -from ..._compat import cached_property -from ..._resource import SyncAPIResource, AsyncAPIResource -from ..._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from ..._base_client import make_request_options -from ..._streaming import Stream, AsyncStream -from ...types.report_response import ReportResponse -from ...types.pagination import Pagination -from ...types.region_id_filter import RegionIdFilter -from ...types.region_name_filter import RegionNameFilter -from ...types.model_id_filter import ModelIdFilter -from ...types.topic_id_filter import TopicIdFilter -from ...types.tag_id_filter import TagIdFilter -from ...types.prompt_id_filter import PromptIdFilter -from ...types.persona_id_filter import PersonaIdFilter -from ...types.analysis_type_filter import AnalysisTypeFilter -from ...types.prompt_type_filter import PromptTypeFilter -from ...types.reports import query_fanout_v1_reports_post_params -from ...types.reports.query_fanout_v2_v2_reports_post_response import QueryFanoutV2V2ReportsPostResponse -from ...types.reports import query_fanout_v2_v2_reports_post_params -from ...types.reports import query_fanout_stream_v2_v2_reports_stream_post_params - -__all__ = ["QueryFanoutsResource", "AsyncQueryFanoutsResource"] - - -class QueryFanoutsResource(SyncAPIResource): - - @cached_property - def with_raw_response(self) -> QueryFanoutsResourceWithRawResponse: - return QueryFanoutsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> QueryFanoutsResourceWithStreamingResponse: - return QueryFanoutsResourceWithStreamingResponse(self) - - def v1_reports_post( - self, - *, - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["prompt", "query", "model", "region", "date"]] | Omit = omit, - metrics: Iterable[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]], - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - category_id: str, - start_date: Union[str, datetime], - end_date: Union[str, datetime], - filters: Iterable[object] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """ - Query Fanouts - - Args: - date_interval: Date interval for the report. (only used with date dimension) - dimensions: Dimensions to group the report by. - metrics: Body parameter. - order_by: Custom ordering. Keys must be a requested metric or the ``date`` dimension. Values are ``asc`` or ``desc``. Defaults to first metric descending. - pagination: Pagination settings for the report results. - category_id: Body parameter. - start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. - end_date: End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. - filters: Filters to apply to the query fanout report. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - ReportResponse: Successful Response - - Example: - ```python - query_fanout = client.reports.query_fanouts.v1_reports_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - category_id="", - start_date="", - end_date="", - ) - ``` - """ - return self._post( - "/v1/reports/query-fanouts", - body=maybe_transform( - { - "date_interval": date_interval, - "dimensions": dimensions, - "metrics": metrics, - "order_by": order_by, - "pagination": pagination, - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "filters": filters, - }, - query_fanout_v1_reports_post_params.QueryFanoutV1ReportsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=ReportResponse, - ) - - def v2_v2_reports_post( - self, - *, - category_id: str, - start_date: str, - end_date: str, - group_by: Iterable[Literal["date", "model", "region", "prompt", "query"]] | Omit = omit, - metrics: Optional[Iterable[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - filter: Optional[query_fanout_v2_v2_reports_post_params.Filter] | Omit = omit, - sort: Optional[query_fanout_v2_v2_reports_post_params.Sort] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - cursor: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> QueryFanoutV2V2ReportsPostResponse: - """ - Query Fanouts V2 - - Args: - category_id: Body parameter. - start_date: YYYY-MM-DD, ET, inclusive - end_date: YYYY-MM-DD, ET, inclusive - group_by: Body parameter. - metrics: Body parameter. - interval: Body parameter. - filter: Body parameter. - sort: Body parameter. - limit: Page size; default 10, max 50. - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - cursor: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - QueryFanoutV2V2ReportsPostResponse: Successful Response - - Example: - ```python - query_fanout = client.reports.query_fanouts.v2_v2_reports_post( - category_id="", - start_date="", - end_date="", - interval="day", - ) - ``` - """ - return self._post( - "/v2/reports/query-fanouts", - body=maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "group_by": group_by, - "metrics": metrics, - "interval": interval, - "filter": filter, - "sort": sort, - "limit": limit, - "max_results": max_results, - "cursor": cursor, - }, - query_fanout_v2_v2_reports_post_params.QueryFanoutV2V2ReportsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=QueryFanoutV2V2ReportsPostResponse, - ) - - def stream_v2_v2_reports_stream_post( - self, - *, - category_id: str, - start_date: str, - end_date: str, - group_by: Iterable[Literal["date", "model", "region", "prompt", "query"]] | Omit = omit, - metrics: Optional[Iterable[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - filter: Optional[query_fanout_stream_v2_v2_reports_stream_post_params.Filter] | Omit = omit, - sort: Optional[query_fanout_stream_v2_v2_reports_stream_post_params.Sort] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - cursor: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Stream[str]: - """ - Stream Query Fanouts V2 - - Args: - category_id: Body parameter. - start_date: YYYY-MM-DD, ET, inclusive - end_date: YYYY-MM-DD, ET, inclusive - group_by: Body parameter. - metrics: Body parameter. - interval: Body parameter. - filter: Body parameter. - sort: Body parameter. - limit: Page size; default 10, max 50. - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - cursor: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - Stream[str]: Successful Response - - Example: - ```python - stream = client.reports.query_fanouts.stream_v2_v2_reports_stream_post( - category_id="", - start_date="", - end_date="", - interval="day", - ) - for event in stream: - print(event) - ``` - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return self._post( - "/v2/reports/query-fanouts/stream", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=str, - stream=True, - stream_cls=Stream[str], - ) - - -class AsyncQueryFanoutsResource(AsyncAPIResource): - - @cached_property - def with_raw_response(self) -> AsyncQueryFanoutsResourceWithRawResponse: - return AsyncQueryFanoutsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncQueryFanoutsResourceWithStreamingResponse: - return AsyncQueryFanoutsResourceWithStreamingResponse(self) - - async def v1_reports_post( - self, - *, - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["prompt", "query", "model", "region", "date"]] | Omit = omit, - metrics: Iterable[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]], - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - category_id: str, - start_date: Union[str, datetime], - end_date: Union[str, datetime], - filters: Iterable[object] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """ - Query Fanouts - - Args: - date_interval: Date interval for the report. (only used with date dimension) - dimensions: Dimensions to group the report by. - metrics: Body parameter. - order_by: Custom ordering. Keys must be a requested metric or the ``date`` dimension. Values are ``asc`` or ``desc``. Defaults to first metric descending. - pagination: Pagination settings for the report results. - category_id: Body parameter. - start_date: Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. - end_date: End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp. - filters: Filters to apply to the query fanout report. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - ReportResponse: Successful Response - - Example: - ```python - query_fanout = await client.reports.query_fanouts.v1_reports_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - category_id="", - start_date="", - end_date="", - ) - ``` - """ - return await self._post( - "/v1/reports/query-fanouts", - body=await async_maybe_transform( - { - "date_interval": date_interval, - "dimensions": dimensions, - "metrics": metrics, - "order_by": order_by, - "pagination": pagination, - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "filters": filters, - }, - query_fanout_v1_reports_post_params.QueryFanoutV1ReportsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=ReportResponse, - ) - - async def v2_v2_reports_post( - self, - *, - category_id: str, - start_date: str, - end_date: str, - group_by: Iterable[Literal["date", "model", "region", "prompt", "query"]] | Omit = omit, - metrics: Optional[Iterable[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - filter: Optional[query_fanout_v2_v2_reports_post_params.Filter] | Omit = omit, - sort: Optional[query_fanout_v2_v2_reports_post_params.Sort] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - cursor: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> QueryFanoutV2V2ReportsPostResponse: - """ - Query Fanouts V2 - - Args: - category_id: Body parameter. - start_date: YYYY-MM-DD, ET, inclusive - end_date: YYYY-MM-DD, ET, inclusive - group_by: Body parameter. - metrics: Body parameter. - interval: Body parameter. - filter: Body parameter. - sort: Body parameter. - limit: Page size; default 10, max 50. - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - cursor: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - QueryFanoutV2V2ReportsPostResponse: Successful Response - - Example: - ```python - query_fanout = await client.reports.query_fanouts.v2_v2_reports_post( - category_id="", - start_date="", - end_date="", - interval="day", - ) - ``` - """ - return await self._post( - "/v2/reports/query-fanouts", - body=await async_maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "group_by": group_by, - "metrics": metrics, - "interval": interval, - "filter": filter, - "sort": sort, - "limit": limit, - "max_results": max_results, - "cursor": cursor, - }, - query_fanout_v2_v2_reports_post_params.QueryFanoutV2V2ReportsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=QueryFanoutV2V2ReportsPostResponse, - ) - - async def stream_v2_v2_reports_stream_post( - self, - *, - category_id: str, - start_date: str, - end_date: str, - group_by: Iterable[Literal["date", "model", "region", "prompt", "query"]] | Omit = omit, - metrics: Optional[Iterable[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - filter: Optional[query_fanout_stream_v2_v2_reports_stream_post_params.Filter] | Omit = omit, - sort: Optional[query_fanout_stream_v2_v2_reports_stream_post_params.Sort] | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - cursor: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncStream[str]: - """ - Stream Query Fanouts V2 - - Args: - category_id: Body parameter. - start_date: YYYY-MM-DD, ET, inclusive - end_date: YYYY-MM-DD, ET, inclusive - group_by: Body parameter. - metrics: Body parameter. - interval: Body parameter. - filter: Body parameter. - sort: Body parameter. - limit: Page size; default 10, max 50. - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - cursor: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AsyncStream[str]: Successful Response - - Example: - ```python - stream = await client.reports.query_fanouts.stream_v2_v2_reports_stream_post( - category_id="", - start_date="", - end_date="", - interval="day", - ) - async for event in stream: - print(event) - ``` - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return await self._post( - "/v2/reports/query-fanouts/stream", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=str, - stream=True, - stream_cls=AsyncStream[str], - ) - - -class QueryFanoutsResourceWithRawResponse: - def __init__(self, query_fanouts: QueryFanoutsResource) -> None: - self._query_fanouts = query_fanouts - - self.v1_reports_post = to_raw_response_wrapper( - query_fanouts.v1_reports_post, - ) - self.v2_v2_reports_post = to_raw_response_wrapper( - query_fanouts.v2_v2_reports_post, - ) - self.stream_v2_v2_reports_stream_post = to_raw_response_wrapper( - query_fanouts.stream_v2_v2_reports_stream_post, - ) - - -class AsyncQueryFanoutsResourceWithRawResponse: - def __init__(self, query_fanouts: AsyncQueryFanoutsResource) -> None: - self._query_fanouts = query_fanouts - - self.v1_reports_post = async_to_raw_response_wrapper( - query_fanouts.v1_reports_post, - ) - self.v2_v2_reports_post = async_to_raw_response_wrapper( - query_fanouts.v2_v2_reports_post, - ) - self.stream_v2_v2_reports_stream_post = async_to_raw_response_wrapper( - query_fanouts.stream_v2_v2_reports_stream_post, - ) - - -class QueryFanoutsResourceWithStreamingResponse: - def __init__(self, query_fanouts: QueryFanoutsResource) -> None: - self._query_fanouts = query_fanouts - - self.v1_reports_post = to_streamed_response_wrapper( - query_fanouts.v1_reports_post, - ) - self.v2_v2_reports_post = to_streamed_response_wrapper( - query_fanouts.v2_v2_reports_post, - ) - self.stream_v2_v2_reports_stream_post = to_streamed_response_wrapper( - query_fanouts.stream_v2_v2_reports_stream_post, - ) - - -class AsyncQueryFanoutsResourceWithStreamingResponse: - def __init__(self, query_fanouts: AsyncQueryFanoutsResource) -> None: - self._query_fanouts = query_fanouts - - self.v1_reports_post = async_to_streamed_response_wrapper( - query_fanouts.v1_reports_post, - ) - self.v2_v2_reports_post = async_to_streamed_response_wrapper( - query_fanouts.v2_v2_reports_post, - ) - self.stream_v2_v2_reports_stream_post = async_to_streamed_response_wrapper( - query_fanouts.stream_v2_v2_reports_stream_post, - ) diff --git a/src/resources/reports/referrals.py b/src/resources/reports/referrals.py deleted file mode 100644 index b1b7e678..00000000 --- a/src/resources/reports/referrals.py +++ /dev/null @@ -1,423 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -import httpx - -from typing import Dict, Iterable, Optional, Union -from datetime import datetime -from typing_extensions import Literal - -from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from ..._utils import path_template, maybe_transform, async_maybe_transform -from ..._compat import cached_property -from ..._resource import SyncAPIResource, AsyncAPIResource -from ..._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from ..._base_client import make_request_options -from ...types.report_response import ReportResponse -from ...types.pagination import Pagination -from ...types.path_filter import PathFilter -from ...types.reports import referral_create_report_v1_v1_reports_post_params -from ...types.report_response import ReportResponse -from ...types.pagination import Pagination -from ...types.path_filter import PathFilter -from ...types.reports import referral_create_report_v2_v2_reports_post_params - -__all__ = ["ReferralsResource", "AsyncReferralsResource"] - - -class ReferralsResource(SyncAPIResource): - - @cached_property - def with_raw_response(self) -> ReferralsResourceWithRawResponse: - return ReferralsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> ReferralsResourceWithStreamingResponse: - return ReferralsResourceWithStreamingResponse(self) - - def create_report_v1_v1_reports_post( - self, - *, - date_interval: Literal["hour", "day", "week", "month", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["date", "path", "referral_source"]] | Omit = omit, - metrics: Iterable[Literal["visits", "last_visit"]], - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - domain: str, - start_date: Union[str, datetime], - end_date: Union[str, datetime] | Omit = omit, - organization_id: Optional[str] | Omit = omit, - metric_filters: Iterable[referral_create_report_v1_v1_reports_post_params.MetricFilter] | Omit = omit, - filters: Iterable[object] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """ - Get referral traffic report from the daily aggregated materialized view. - - This endpoint queries pre-aggregated daily referral data, making it efficient - for large date ranges and high-traffic sites. - - Args: - date_interval: Date interval for the report. (only used with date dimension) - dimensions: Dimensions to group the report by. - metrics: Body parameter. - order_by: Custom ordering of the report results. - pagination: Pagination settings for the report results. - domain: Domain to query logs for. - start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp. - end_date: End date for logs. Accepts same formats as start_date. Defaults to now if omitted. - organization_id: Body parameter. - metric_filters: Numeric filters applied after report metrics are calculated. - filters: Filters for referrals report. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - ReportResponse: Successful Response - - Example: - ```python - referral = client.reports.referrals.create_report_v1_v1_reports_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - domain="", - start_date="", - ) - ``` - """ - return self._post( - "/v1/reports/referrals", - body=maybe_transform( - { - "date_interval": date_interval, - "dimensions": dimensions, - "metrics": metrics, - "order_by": order_by, - "pagination": pagination, - "domain": domain, - "start_date": start_date, - "end_date": end_date, - "organization_id": organization_id, - "metric_filters": metric_filters, - "filters": filters, - }, - referral_create_report_v1_v1_reports_post_params.ReferralCreateReportV1V1ReportsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=ReportResponse, - ) - - def create_report_v2_v2_reports_post( - self, - *, - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["date", "hour", "path", "referral_source", "referral_type"]] | Omit = omit, - metrics: Iterable[Literal["visits", "last_visit"]], - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - domain: str, - start_date: Union[str, datetime], - end_date: Union[str, datetime] | Omit = omit, - organization_id: Optional[str] | Omit = omit, - metric_filters: Iterable[referral_create_report_v2_v2_reports_post_params.MetricFilter] | Omit = omit, - filters: Iterable[object] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """ - Get referral traffic report from the hourly aggregated materialized view (UTC-based). - - Supports date_interval="hour", calendar intervals through "year", "quarter", and "relative_week". - - Args: - date_interval: Date interval for the report. (only used with date dimension) - dimensions: Dimensions to group the report by. - metrics: Body parameter. - order_by: Custom ordering of the report results. - pagination: Pagination settings for the report results. - domain: Domain to query logs for. - start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp. - end_date: End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted. - organization_id: Body parameter. - metric_filters: Numeric filters applied after report metrics are calculated. - filters: Filters for referrals report. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - ReportResponse: Successful Response - - Example: - ```python - referral = client.reports.referrals.create_report_v2_v2_reports_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - domain="", - start_date="", - ) - ``` - """ - return self._post( - "/v2/reports/referrals", - body=maybe_transform( - { - "date_interval": date_interval, - "dimensions": dimensions, - "metrics": metrics, - "order_by": order_by, - "pagination": pagination, - "domain": domain, - "start_date": start_date, - "end_date": end_date, - "organization_id": organization_id, - "metric_filters": metric_filters, - "filters": filters, - }, - referral_create_report_v2_v2_reports_post_params.ReferralCreateReportV2V2ReportsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=ReportResponse, - ) - - -class AsyncReferralsResource(AsyncAPIResource): - - @cached_property - def with_raw_response(self) -> AsyncReferralsResourceWithRawResponse: - return AsyncReferralsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncReferralsResourceWithStreamingResponse: - return AsyncReferralsResourceWithStreamingResponse(self) - - async def create_report_v1_v1_reports_post( - self, - *, - date_interval: Literal["hour", "day", "week", "month", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["date", "path", "referral_source"]] | Omit = omit, - metrics: Iterable[Literal["visits", "last_visit"]], - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - domain: str, - start_date: Union[str, datetime], - end_date: Union[str, datetime] | Omit = omit, - organization_id: Optional[str] | Omit = omit, - metric_filters: Iterable[referral_create_report_v1_v1_reports_post_params.MetricFilter] | Omit = omit, - filters: Iterable[object] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """ - Get referral traffic report from the daily aggregated materialized view. - - This endpoint queries pre-aggregated daily referral data, making it efficient - for large date ranges and high-traffic sites. - - Args: - date_interval: Date interval for the report. (only used with date dimension) - dimensions: Dimensions to group the report by. - metrics: Body parameter. - order_by: Custom ordering of the report results. - pagination: Pagination settings for the report results. - domain: Domain to query logs for. - start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp. - end_date: End date for logs. Accepts same formats as start_date. Defaults to now if omitted. - organization_id: Body parameter. - metric_filters: Numeric filters applied after report metrics are calculated. - filters: Filters for referrals report. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - ReportResponse: Successful Response - - Example: - ```python - referral = await client.reports.referrals.create_report_v1_v1_reports_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - domain="", - start_date="", - ) - ``` - """ - return await self._post( - "/v1/reports/referrals", - body=await async_maybe_transform( - { - "date_interval": date_interval, - "dimensions": dimensions, - "metrics": metrics, - "order_by": order_by, - "pagination": pagination, - "domain": domain, - "start_date": start_date, - "end_date": end_date, - "organization_id": organization_id, - "metric_filters": metric_filters, - "filters": filters, - }, - referral_create_report_v1_v1_reports_post_params.ReferralCreateReportV1V1ReportsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=ReportResponse, - ) - - async def create_report_v2_v2_reports_post( - self, - *, - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["date", "hour", "path", "referral_source", "referral_type"]] | Omit = omit, - metrics: Iterable[Literal["visits", "last_visit"]], - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - domain: str, - start_date: Union[str, datetime], - end_date: Union[str, datetime] | Omit = omit, - organization_id: Optional[str] | Omit = omit, - metric_filters: Iterable[referral_create_report_v2_v2_reports_post_params.MetricFilter] | Omit = omit, - filters: Iterable[object] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """ - Get referral traffic report from the hourly aggregated materialized view (UTC-based). - - Supports date_interval="hour", calendar intervals through "year", "quarter", and "relative_week". - - Args: - date_interval: Date interval for the report. (only used with date dimension) - dimensions: Dimensions to group the report by. - metrics: Body parameter. - order_by: Custom ordering of the report results. - pagination: Pagination settings for the report results. - domain: Domain to query logs for. - start_date: Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp. - end_date: End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted. - organization_id: Body parameter. - metric_filters: Numeric filters applied after report metrics are calculated. - filters: Filters for referrals report. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - ReportResponse: Successful Response - - Example: - ```python - referral = await client.reports.referrals.create_report_v2_v2_reports_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - domain="", - start_date="", - ) - ``` - """ - return await self._post( - "/v2/reports/referrals", - body=await async_maybe_transform( - { - "date_interval": date_interval, - "dimensions": dimensions, - "metrics": metrics, - "order_by": order_by, - "pagination": pagination, - "domain": domain, - "start_date": start_date, - "end_date": end_date, - "organization_id": organization_id, - "metric_filters": metric_filters, - "filters": filters, - }, - referral_create_report_v2_v2_reports_post_params.ReferralCreateReportV2V2ReportsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=ReportResponse, - ) - - -class ReferralsResourceWithRawResponse: - def __init__(self, referrals: ReferralsResource) -> None: - self._referrals = referrals - - self.create_report_v1_v1_reports_post = to_raw_response_wrapper( - referrals.create_report_v1_v1_reports_post, - ) - self.create_report_v2_v2_reports_post = to_raw_response_wrapper( - referrals.create_report_v2_v2_reports_post, - ) - - -class AsyncReferralsResourceWithRawResponse: - def __init__(self, referrals: AsyncReferralsResource) -> None: - self._referrals = referrals - - self.create_report_v1_v1_reports_post = async_to_raw_response_wrapper( - referrals.create_report_v1_v1_reports_post, - ) - self.create_report_v2_v2_reports_post = async_to_raw_response_wrapper( - referrals.create_report_v2_v2_reports_post, - ) - - -class ReferralsResourceWithStreamingResponse: - def __init__(self, referrals: ReferralsResource) -> None: - self._referrals = referrals - - self.create_report_v1_v1_reports_post = to_streamed_response_wrapper( - referrals.create_report_v1_v1_reports_post, - ) - self.create_report_v2_v2_reports_post = to_streamed_response_wrapper( - referrals.create_report_v2_v2_reports_post, - ) - - -class AsyncReferralsResourceWithStreamingResponse: - def __init__(self, referrals: AsyncReferralsResource) -> None: - self._referrals = referrals - - self.create_report_v1_v1_reports_post = async_to_streamed_response_wrapper( - referrals.create_report_v1_v1_reports_post, - ) - self.create_report_v2_v2_reports_post = async_to_streamed_response_wrapper( - referrals.create_report_v2_v2_reports_post, - ) diff --git a/src/resources/reports/reports.py b/src/resources/reports/reports.py deleted file mode 100644 index d748c8ee..00000000 --- a/src/resources/reports/reports.py +++ /dev/null @@ -1,534 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -import httpx - -from typing import Dict, Iterable, Optional, Union -from datetime import datetime -from typing_extensions import Literal - -from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from ..._utils import path_template, maybe_transform, async_maybe_transform -from ..._compat import cached_property -from ..._resource import SyncAPIResource, AsyncAPIResource -from ..._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from ..._base_client import make_request_options -from .citations import ( - CitationsResource, - AsyncCitationsResource, - CitationsResourceWithRawResponse, - AsyncCitationsResourceWithRawResponse, - CitationsResourceWithStreamingResponse, - AsyncCitationsResourceWithStreamingResponse, -) -from .visibility import ( - VisibilityResource, - AsyncVisibilityResource, - VisibilityResourceWithRawResponse, - AsyncVisibilityResourceWithRawResponse, - VisibilityResourceWithStreamingResponse, - AsyncVisibilityResourceWithStreamingResponse, -) -from .sentiment import ( - SentimentResource, - AsyncSentimentResource, - SentimentResourceWithRawResponse, - AsyncSentimentResourceWithRawResponse, - SentimentResourceWithStreamingResponse, - AsyncSentimentResourceWithStreamingResponse, -) -from .web_search_results import ( - WebSearchResultsResource, - AsyncWebSearchResultsResource, - WebSearchResultsResourceWithRawResponse, - AsyncWebSearchResultsResourceWithRawResponse, - WebSearchResultsResourceWithStreamingResponse, - AsyncWebSearchResultsResourceWithStreamingResponse, -) -from .referrals import ( - ReferralsResource, - AsyncReferralsResource, - ReferralsResourceWithRawResponse, - AsyncReferralsResourceWithRawResponse, - ReferralsResourceWithStreamingResponse, - AsyncReferralsResourceWithStreamingResponse, -) -from .bots import ( - BotsResource, - AsyncBotsResource, - BotsResourceWithRawResponse, - AsyncBotsResourceWithRawResponse, - BotsResourceWithStreamingResponse, - AsyncBotsResourceWithStreamingResponse, -) -from .query_fanouts import ( - QueryFanoutsResource, - AsyncQueryFanoutsResource, - QueryFanoutsResourceWithRawResponse, - AsyncQueryFanoutsResourceWithRawResponse, - QueryFanoutsResourceWithStreamingResponse, - AsyncQueryFanoutsResourceWithStreamingResponse, -) -from .shopping import ( - ShoppingResource, - AsyncShoppingResource, - ShoppingResourceWithRawResponse, - AsyncShoppingResourceWithRawResponse, - ShoppingResourceWithStreamingResponse, - AsyncShoppingResourceWithStreamingResponse, -) -from .accuracy import ( - AccuracyResource, - AsyncAccuracyResource, - AccuracyResourceWithRawResponse, - AsyncAccuracyResourceWithRawResponse, - AccuracyResourceWithStreamingResponse, - AsyncAccuracyResourceWithStreamingResponse, -) -from ...types.report_query_sentiment_v2_v1_sentiment_v2_post_response import ReportQuerySentimentV2V1SentimentV2PostResponse, SentimentV2ReportInfo, Query, SentimentDataPoint, SentimentPeriodScores, SentimentScores, SentimentGroupMetadata -from ...types.pagination import Pagination -from ...types import report_query_sentiment_v2_v1_sentiment_v2_post_params - -__all__ = ["ReportsResource", "AsyncReportsResource"] - - -class ReportsResource(SyncAPIResource): - - @cached_property - def citations(self) -> CitationsResource: - return CitationsResource(self._client) - - @cached_property - def visibility(self) -> VisibilityResource: - return VisibilityResource(self._client) - - @cached_property - def sentiment(self) -> SentimentResource: - return SentimentResource(self._client) - - @cached_property - def web_search_results(self) -> WebSearchResultsResource: - return WebSearchResultsResource(self._client) - - @cached_property - def referrals(self) -> ReferralsResource: - return ReferralsResource(self._client) - - @cached_property - def bots(self) -> BotsResource: - return BotsResource(self._client) - - @cached_property - def query_fanouts(self) -> QueryFanoutsResource: - return QueryFanoutsResource(self._client) - - @cached_property - def shopping(self) -> ShoppingResource: - return ShoppingResource(self._client) - - @cached_property - def accuracy(self) -> AccuracyResource: - return AccuracyResource(self._client) - - @cached_property - def with_raw_response(self) -> ReportsResourceWithRawResponse: - return ReportsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> ReportsResourceWithStreamingResponse: - return ReportsResourceWithStreamingResponse(self) - - def query_sentiment_v2_v1_sentiment_v2_post( - self, - *, - category_id: str, - asset_name: str, - start_date: Union[str, datetime], - end_date: Union[str, datetime], - comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, - comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["date", "topic", "region", "model", "prompt", "persona", "tag", "theme", "claim", "run", "asset_name"]] | Omit = omit, - metrics: Iterable[Literal["sentiment", "occurrence"]], - filters: Iterable[object] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportQuerySentimentV2V1SentimentV2PostResponse: - """ - Query Sentiment V2 - - Args: - category_id: Body parameter. - asset_name: Body parameter. - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - comparison_start_date: Start of the previous period for delta computation. - comparison_end_date: End of the previous period for delta computation. - date_interval: Date interval for the report. Only used when dimensions includes date. - dimensions: Dimensions to group the report by. - metrics: Body parameter. - filters: List of filters to apply to the sentiment-v2 report. - order_by: Custom ordering of report results. Dimension keys must also be present in dimensions. The sentiment metric orders by positive_sentiment. - pagination: Pagination settings for the report results. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - ReportQuerySentimentV2V1SentimentV2PostResponse: Successful Response - - Example: - ```python - report = client.reports.query_sentiment_v2_v1_sentiment_v2_post( - category_id="", - asset_name="", - start_date="", - end_date="", - date_interval="day", - metrics=[], - ) - ``` - """ - return self._post( - "/v1/reports/sentiment-v2", - body=maybe_transform( - { - "category_id": category_id, - "asset_name": asset_name, - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "date_interval": date_interval, - "dimensions": dimensions, - "metrics": metrics, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - }, - report_query_sentiment_v2_v1_sentiment_v2_post_params.ReportQuerySentimentV2V1SentimentV2PostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=ReportQuerySentimentV2V1SentimentV2PostResponse, - ) - - -class AsyncReportsResource(AsyncAPIResource): - - @cached_property - def citations(self) -> AsyncCitationsResource: - return AsyncCitationsResource(self._client) - - @cached_property - def visibility(self) -> AsyncVisibilityResource: - return AsyncVisibilityResource(self._client) - - @cached_property - def sentiment(self) -> AsyncSentimentResource: - return AsyncSentimentResource(self._client) - - @cached_property - def web_search_results(self) -> AsyncWebSearchResultsResource: - return AsyncWebSearchResultsResource(self._client) - - @cached_property - def referrals(self) -> AsyncReferralsResource: - return AsyncReferralsResource(self._client) - - @cached_property - def bots(self) -> AsyncBotsResource: - return AsyncBotsResource(self._client) - - @cached_property - def query_fanouts(self) -> AsyncQueryFanoutsResource: - return AsyncQueryFanoutsResource(self._client) - - @cached_property - def shopping(self) -> AsyncShoppingResource: - return AsyncShoppingResource(self._client) - - @cached_property - def accuracy(self) -> AsyncAccuracyResource: - return AsyncAccuracyResource(self._client) - - @cached_property - def with_raw_response(self) -> AsyncReportsResourceWithRawResponse: - return AsyncReportsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncReportsResourceWithStreamingResponse: - return AsyncReportsResourceWithStreamingResponse(self) - - async def query_sentiment_v2_v1_sentiment_v2_post( - self, - *, - category_id: str, - asset_name: str, - start_date: Union[str, datetime], - end_date: Union[str, datetime], - comparison_start_date: Optional[Union[str, datetime]] | Omit = omit, - comparison_end_date: Optional[Union[str, datetime]] | Omit = omit, - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["date", "topic", "region", "model", "prompt", "persona", "tag", "theme", "claim", "run", "asset_name"]] | Omit = omit, - metrics: Iterable[Literal["sentiment", "occurrence"]], - filters: Iterable[object] | Omit = omit, - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportQuerySentimentV2V1SentimentV2PostResponse: - """ - Query Sentiment V2 - - Args: - category_id: Body parameter. - asset_name: Body parameter. - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - comparison_start_date: Start of the previous period for delta computation. - comparison_end_date: End of the previous period for delta computation. - date_interval: Date interval for the report. Only used when dimensions includes date. - dimensions: Dimensions to group the report by. - metrics: Body parameter. - filters: List of filters to apply to the sentiment-v2 report. - order_by: Custom ordering of report results. Dimension keys must also be present in dimensions. The sentiment metric orders by positive_sentiment. - pagination: Pagination settings for the report results. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - ReportQuerySentimentV2V1SentimentV2PostResponse: Successful Response - - Example: - ```python - report = await client.reports.query_sentiment_v2_v1_sentiment_v2_post( - category_id="", - asset_name="", - start_date="", - end_date="", - date_interval="day", - metrics=[], - ) - ``` - """ - return await self._post( - "/v1/reports/sentiment-v2", - body=await async_maybe_transform( - { - "category_id": category_id, - "asset_name": asset_name, - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "date_interval": date_interval, - "dimensions": dimensions, - "metrics": metrics, - "filters": filters, - "order_by": order_by, - "pagination": pagination, - }, - report_query_sentiment_v2_v1_sentiment_v2_post_params.ReportQuerySentimentV2V1SentimentV2PostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=ReportQuerySentimentV2V1SentimentV2PostResponse, - ) - - -class ReportsResourceWithRawResponse: - def __init__(self, reports: ReportsResource) -> None: - self._reports = reports - - self.query_sentiment_v2_v1_sentiment_v2_post = to_raw_response_wrapper( - reports.query_sentiment_v2_v1_sentiment_v2_post, - ) - - @cached_property - def citations(self) -> CitationsResourceWithRawResponse: - return CitationsResourceWithRawResponse(self._reports.citations) - - @cached_property - def visibility(self) -> VisibilityResourceWithRawResponse: - return VisibilityResourceWithRawResponse(self._reports.visibility) - - @cached_property - def sentiment(self) -> SentimentResourceWithRawResponse: - return SentimentResourceWithRawResponse(self._reports.sentiment) - - @cached_property - def web_search_results(self) -> WebSearchResultsResourceWithRawResponse: - return WebSearchResultsResourceWithRawResponse(self._reports.web_search_results) - - @cached_property - def referrals(self) -> ReferralsResourceWithRawResponse: - return ReferralsResourceWithRawResponse(self._reports.referrals) - - @cached_property - def bots(self) -> BotsResourceWithRawResponse: - return BotsResourceWithRawResponse(self._reports.bots) - - @cached_property - def query_fanouts(self) -> QueryFanoutsResourceWithRawResponse: - return QueryFanoutsResourceWithRawResponse(self._reports.query_fanouts) - - @cached_property - def shopping(self) -> ShoppingResourceWithRawResponse: - return ShoppingResourceWithRawResponse(self._reports.shopping) - - @cached_property - def accuracy(self) -> AccuracyResourceWithRawResponse: - return AccuracyResourceWithRawResponse(self._reports.accuracy) - - -class AsyncReportsResourceWithRawResponse: - def __init__(self, reports: AsyncReportsResource) -> None: - self._reports = reports - - self.query_sentiment_v2_v1_sentiment_v2_post = async_to_raw_response_wrapper( - reports.query_sentiment_v2_v1_sentiment_v2_post, - ) - - @cached_property - def citations(self) -> AsyncCitationsResourceWithRawResponse: - return AsyncCitationsResourceWithRawResponse(self._reports.citations) - - @cached_property - def visibility(self) -> AsyncVisibilityResourceWithRawResponse: - return AsyncVisibilityResourceWithRawResponse(self._reports.visibility) - - @cached_property - def sentiment(self) -> AsyncSentimentResourceWithRawResponse: - return AsyncSentimentResourceWithRawResponse(self._reports.sentiment) - - @cached_property - def web_search_results(self) -> AsyncWebSearchResultsResourceWithRawResponse: - return AsyncWebSearchResultsResourceWithRawResponse(self._reports.web_search_results) - - @cached_property - def referrals(self) -> AsyncReferralsResourceWithRawResponse: - return AsyncReferralsResourceWithRawResponse(self._reports.referrals) - - @cached_property - def bots(self) -> AsyncBotsResourceWithRawResponse: - return AsyncBotsResourceWithRawResponse(self._reports.bots) - - @cached_property - def query_fanouts(self) -> AsyncQueryFanoutsResourceWithRawResponse: - return AsyncQueryFanoutsResourceWithRawResponse(self._reports.query_fanouts) - - @cached_property - def shopping(self) -> AsyncShoppingResourceWithRawResponse: - return AsyncShoppingResourceWithRawResponse(self._reports.shopping) - - @cached_property - def accuracy(self) -> AsyncAccuracyResourceWithRawResponse: - return AsyncAccuracyResourceWithRawResponse(self._reports.accuracy) - - -class ReportsResourceWithStreamingResponse: - def __init__(self, reports: ReportsResource) -> None: - self._reports = reports - - self.query_sentiment_v2_v1_sentiment_v2_post = to_streamed_response_wrapper( - reports.query_sentiment_v2_v1_sentiment_v2_post, - ) - - @cached_property - def citations(self) -> CitationsResourceWithStreamingResponse: - return CitationsResourceWithStreamingResponse(self._reports.citations) - - @cached_property - def visibility(self) -> VisibilityResourceWithStreamingResponse: - return VisibilityResourceWithStreamingResponse(self._reports.visibility) - - @cached_property - def sentiment(self) -> SentimentResourceWithStreamingResponse: - return SentimentResourceWithStreamingResponse(self._reports.sentiment) - - @cached_property - def web_search_results(self) -> WebSearchResultsResourceWithStreamingResponse: - return WebSearchResultsResourceWithStreamingResponse(self._reports.web_search_results) - - @cached_property - def referrals(self) -> ReferralsResourceWithStreamingResponse: - return ReferralsResourceWithStreamingResponse(self._reports.referrals) - - @cached_property - def bots(self) -> BotsResourceWithStreamingResponse: - return BotsResourceWithStreamingResponse(self._reports.bots) - - @cached_property - def query_fanouts(self) -> QueryFanoutsResourceWithStreamingResponse: - return QueryFanoutsResourceWithStreamingResponse(self._reports.query_fanouts) - - @cached_property - def shopping(self) -> ShoppingResourceWithStreamingResponse: - return ShoppingResourceWithStreamingResponse(self._reports.shopping) - - @cached_property - def accuracy(self) -> AccuracyResourceWithStreamingResponse: - return AccuracyResourceWithStreamingResponse(self._reports.accuracy) - - -class AsyncReportsResourceWithStreamingResponse: - def __init__(self, reports: AsyncReportsResource) -> None: - self._reports = reports - - self.query_sentiment_v2_v1_sentiment_v2_post = async_to_streamed_response_wrapper( - reports.query_sentiment_v2_v1_sentiment_v2_post, - ) - - @cached_property - def citations(self) -> AsyncCitationsResourceWithStreamingResponse: - return AsyncCitationsResourceWithStreamingResponse(self._reports.citations) - - @cached_property - def visibility(self) -> AsyncVisibilityResourceWithStreamingResponse: - return AsyncVisibilityResourceWithStreamingResponse(self._reports.visibility) - - @cached_property - def sentiment(self) -> AsyncSentimentResourceWithStreamingResponse: - return AsyncSentimentResourceWithStreamingResponse(self._reports.sentiment) - - @cached_property - def web_search_results(self) -> AsyncWebSearchResultsResourceWithStreamingResponse: - return AsyncWebSearchResultsResourceWithStreamingResponse(self._reports.web_search_results) - - @cached_property - def referrals(self) -> AsyncReferralsResourceWithStreamingResponse: - return AsyncReferralsResourceWithStreamingResponse(self._reports.referrals) - - @cached_property - def bots(self) -> AsyncBotsResourceWithStreamingResponse: - return AsyncBotsResourceWithStreamingResponse(self._reports.bots) - - @cached_property - def query_fanouts(self) -> AsyncQueryFanoutsResourceWithStreamingResponse: - return AsyncQueryFanoutsResourceWithStreamingResponse(self._reports.query_fanouts) - - @cached_property - def shopping(self) -> AsyncShoppingResourceWithStreamingResponse: - return AsyncShoppingResourceWithStreamingResponse(self._reports.shopping) - - @cached_property - def accuracy(self) -> AsyncAccuracyResourceWithStreamingResponse: - return AsyncAccuracyResourceWithStreamingResponse(self._reports.accuracy) diff --git a/src/resources/reports/sentiment.py b/src/resources/reports/sentiment.py deleted file mode 100644 index 2e3bbbeb..00000000 --- a/src/resources/reports/sentiment.py +++ /dev/null @@ -1,751 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -import httpx - -from typing import Dict, Iterable, Optional, Union -from datetime import datetime -from typing_extensions import Literal - -from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from ..._utils import path_template, maybe_transform, async_maybe_transform -from ..._compat import cached_property -from ..._resource import SyncAPIResource, AsyncAPIResource -from ..._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from ..._base_client import make_request_options -from ..._streaming import Stream, AsyncStream -from ...types.report_response import ReportResponse -from ...types.pagination import Pagination -from ...types.asset_id_filter import AssetIdFilter -from ...types.region_id_filter import RegionIdFilter -from ...types.region_name_filter import RegionNameFilter -from ...types.topic_id_filter import TopicIdFilter -from ...types.topic_name_filter import TopicNameFilter -from ...types.model_id_filter import ModelIdFilter -from ...types.tag_id_filter import TagIdFilter -from ...types.tag_name_filter import TagNameFilter -from ...types.prompt_filter import PromptFilter -from ...types.persona_id_filter import PersonaIdFilter -from ...types.reports import sentiment_query_v1_reports_post_params -from ...types.reports.sentiment_stream_v1_reports_stream_post_response import SentimentStreamV1ReportsStreamPostResponse, Query, SentimentStreamV1ReportsStreamPostResponse2 -from ...types.pagination import Pagination -from ...types.asset_id_filter import AssetIdFilter -from ...types.region_id_filter import RegionIdFilter -from ...types.region_name_filter import RegionNameFilter -from ...types.topic_id_filter import TopicIdFilter -from ...types.topic_name_filter import TopicNameFilter -from ...types.model_id_filter import ModelIdFilter -from ...types.tag_id_filter import TagIdFilter -from ...types.tag_name_filter import TagNameFilter -from ...types.prompt_filter import PromptFilter -from ...types.persona_id_filter import PersonaIdFilter -from ...types.reports import sentiment_stream_v1_reports_stream_post_params -from ...types.reports.sentiment_query_v2_v2_reports_post_response import SentimentQueryV2V2ReportsPostResponse -from ...types.reports import sentiment_query_v2_v2_reports_post_params -from ...types.reports import sentiment_stream_v2_v2_reports_stream_post_params - -__all__ = ["SentimentResource", "AsyncSentimentResource"] - - -class SentimentResource(SyncAPIResource): - - @cached_property - def with_raw_response(self) -> SentimentResourceWithRawResponse: - return SentimentResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> SentimentResourceWithStreamingResponse: - return SentimentResourceWithStreamingResponse(self) - - def query_v1_reports_post( - self, - *, - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["theme", "date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "tag", "prompt", "prompt_id", "sentiment_type", "persona"]] | Omit = omit, - metrics: Iterable[Literal["positive", "negative", "occurrences"]], - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - category_id: str, - start_date: Union[str, datetime], - end_date: Union[str, datetime], - filters: Iterable[object] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """ - Get citations for a given category. - - Args: - date_interval: Date interval for the report. (only used with date dimension) - dimensions: Dimensions to group the report by. - metrics: Body parameter. - order_by: Custom ordering of the report results. - pagination: Pagination settings for the report results. - category_id: Body parameter. - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - filters: List of filters to apply to the sentiment report. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - ReportResponse: Successful Response - - Example: - ```python - sentiment = client.reports.sentiment.query_v1_reports_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - category_id="", - start_date="", - end_date="", - ) - ``` - """ - return self._post( - "/v1/reports/sentiment", - body=maybe_transform( - { - "date_interval": date_interval, - "dimensions": dimensions, - "metrics": metrics, - "order_by": order_by, - "pagination": pagination, - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "filters": filters, - }, - sentiment_query_v1_reports_post_params.SentimentQueryV1ReportsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=ReportResponse, - ) - - def stream_v1_reports_stream_post( - self, - *, - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["theme", "date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "tag", "prompt", "prompt_id", "sentiment_type", "persona"]] | Omit = omit, - metrics: Iterable[Literal["positive", "negative", "occurrences"]], - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Optional[Pagination] | Omit = omit, - category_id: str, - start_date: Union[str, datetime], - end_date: Union[str, datetime], - filters: Iterable[object] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Stream[SentimentStreamV1ReportsStreamPostResponse]: - """ - Stream Sentiment - - Args: - date_interval: Date interval for the report. (only used with date dimension) - dimensions: Dimensions to group the report by. - metrics: Body parameter. - order_by: Custom ordering of the report results. - pagination: Body parameter. - category_id: Body parameter. - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - filters: List of filters to apply to the sentiment report. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - Stream[SentimentStreamV1ReportsStreamPostResponse]: Server-sent events stream. Emits a `summary` event first, then one `row` event per streamed row. - - Example: - ```python - stream = client.reports.sentiment.stream_v1_reports_stream_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - category_id="", - start_date="", - end_date="", - ) - for event in stream: - print(event) - ``` - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return self._post( - "/v1/reports/sentiment/stream", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=SentimentStreamV1ReportsStreamPostResponse, - stream=True, - stream_cls=Stream[SentimentStreamV1ReportsStreamPostResponse], - ) - - def query_v2_v2_reports_post( - self, - *, - category_id: str, - asset: str, - start_date: str, - end_date: str, - comparison_start_date: Optional[str] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - group_by: Iterable[Literal["date", "model", "topic", "region", "prompt", "persona", "tag", "theme", "claim", "run", "competitor"]] | Omit = omit, - metrics: Optional[Iterable[Literal["positive_sentiment", "negative_sentiment", "occurrence"]]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - filter: Optional[sentiment_query_v2_v2_reports_post_params.Filter] | Omit = omit, - sort: sentiment_query_v2_v2_reports_post_params.Sort | Omit = omit, - include_cited_websites: bool | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - cursor: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> SentimentQueryV2V2ReportsPostResponse: - """ - Query Sentiment V2 - - Args: - category_id: Body parameter. - asset: The brand name to analyze (sentiment is extracted on name, not id). - start_date: YYYY-MM-DD, ET, inclusive - end_date: YYYY-MM-DD, ET, inclusive - comparison_start_date: YYYY-MM-DD, ET, inclusive (with end). - comparison_end_date: YYYY-MM-DD, ET, inclusive (with start). - group_by: Body parameter. - metrics: Body parameter. - interval: Body parameter. - filter: Body parameter. - sort: Body parameter. - include_cited_websites: Return cited websites per row (only when grouping by `theme`/`claim`). - limit: Page size; default 10, max 50. - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - cursor: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - SentimentQueryV2V2ReportsPostResponse: Successful Response - - Example: - ```python - sentiment = client.reports.sentiment.query_v2_v2_reports_post( - category_id="", - asset="", - start_date="", - end_date="", - interval="day", - include_cited_websites=False, - ) - ``` - """ - return self._post( - "/v2/reports/sentiment", - body=maybe_transform( - { - "category_id": category_id, - "asset": asset, - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "group_by": group_by, - "metrics": metrics, - "interval": interval, - "filter": filter, - "sort": sort, - "include_cited_websites": include_cited_websites, - "limit": limit, - "max_results": max_results, - "cursor": cursor, - }, - sentiment_query_v2_v2_reports_post_params.SentimentQueryV2V2ReportsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=SentimentQueryV2V2ReportsPostResponse, - ) - - def stream_v2_v2_reports_stream_post( - self, - *, - category_id: str, - asset: str, - start_date: str, - end_date: str, - comparison_start_date: Optional[str] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - group_by: Iterable[Literal["date", "model", "topic", "region", "prompt", "persona", "tag", "theme", "claim", "run", "competitor"]] | Omit = omit, - metrics: Optional[Iterable[Literal["positive_sentiment", "negative_sentiment", "occurrence"]]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - filter: Optional[sentiment_stream_v2_v2_reports_stream_post_params.Filter] | Omit = omit, - sort: sentiment_stream_v2_v2_reports_stream_post_params.Sort | Omit = omit, - include_cited_websites: bool | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - cursor: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Stream[str]: - """ - Stream Sentiment V2 - - Args: - category_id: Body parameter. - asset: The brand name to analyze (sentiment is extracted on name, not id). - start_date: YYYY-MM-DD, ET, inclusive - end_date: YYYY-MM-DD, ET, inclusive - comparison_start_date: YYYY-MM-DD, ET, inclusive (with end). - comparison_end_date: YYYY-MM-DD, ET, inclusive (with start). - group_by: Body parameter. - metrics: Body parameter. - interval: Body parameter. - filter: Body parameter. - sort: Body parameter. - include_cited_websites: Return cited websites per row (only when grouping by `theme`/`claim`). - limit: Page size; default 10, max 50. - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - cursor: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - Stream[str]: Successful Response - - Example: - ```python - stream = client.reports.sentiment.stream_v2_v2_reports_stream_post( - category_id="", - asset="", - start_date="", - end_date="", - interval="day", - include_cited_websites=False, - ) - for event in stream: - print(event) - ``` - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return self._post( - "/v2/reports/sentiment/stream", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=str, - stream=True, - stream_cls=Stream[str], - ) - - -class AsyncSentimentResource(AsyncAPIResource): - - @cached_property - def with_raw_response(self) -> AsyncSentimentResourceWithRawResponse: - return AsyncSentimentResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncSentimentResourceWithStreamingResponse: - return AsyncSentimentResourceWithStreamingResponse(self) - - async def query_v1_reports_post( - self, - *, - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["theme", "date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "tag", "prompt", "prompt_id", "sentiment_type", "persona"]] | Omit = omit, - metrics: Iterable[Literal["positive", "negative", "occurrences"]], - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - category_id: str, - start_date: Union[str, datetime], - end_date: Union[str, datetime], - filters: Iterable[object] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """ - Get citations for a given category. - - Args: - date_interval: Date interval for the report. (only used with date dimension) - dimensions: Dimensions to group the report by. - metrics: Body parameter. - order_by: Custom ordering of the report results. - pagination: Pagination settings for the report results. - category_id: Body parameter. - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - filters: List of filters to apply to the sentiment report. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - ReportResponse: Successful Response - - Example: - ```python - sentiment = await client.reports.sentiment.query_v1_reports_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - category_id="", - start_date="", - end_date="", - ) - ``` - """ - return await self._post( - "/v1/reports/sentiment", - body=await async_maybe_transform( - { - "date_interval": date_interval, - "dimensions": dimensions, - "metrics": metrics, - "order_by": order_by, - "pagination": pagination, - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "filters": filters, - }, - sentiment_query_v1_reports_post_params.SentimentQueryV1ReportsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=ReportResponse, - ) - - async def stream_v1_reports_stream_post( - self, - *, - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["theme", "date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "tag", "prompt", "prompt_id", "sentiment_type", "persona"]] | Omit = omit, - metrics: Iterable[Literal["positive", "negative", "occurrences"]], - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Optional[Pagination] | Omit = omit, - category_id: str, - start_date: Union[str, datetime], - end_date: Union[str, datetime], - filters: Iterable[object] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncStream[SentimentStreamV1ReportsStreamPostResponse]: - """ - Stream Sentiment - - Args: - date_interval: Date interval for the report. (only used with date dimension) - dimensions: Dimensions to group the report by. - metrics: Body parameter. - order_by: Custom ordering of the report results. - pagination: Body parameter. - category_id: Body parameter. - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - filters: List of filters to apply to the sentiment report. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AsyncStream[SentimentStreamV1ReportsStreamPostResponse]: Server-sent events stream. Emits a `summary` event first, then one `row` event per streamed row. - - Example: - ```python - stream = await client.reports.sentiment.stream_v1_reports_stream_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - category_id="", - start_date="", - end_date="", - ) - async for event in stream: - print(event) - ``` - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return await self._post( - "/v1/reports/sentiment/stream", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=SentimentStreamV1ReportsStreamPostResponse, - stream=True, - stream_cls=AsyncStream[SentimentStreamV1ReportsStreamPostResponse], - ) - - async def query_v2_v2_reports_post( - self, - *, - category_id: str, - asset: str, - start_date: str, - end_date: str, - comparison_start_date: Optional[str] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - group_by: Iterable[Literal["date", "model", "topic", "region", "prompt", "persona", "tag", "theme", "claim", "run", "competitor"]] | Omit = omit, - metrics: Optional[Iterable[Literal["positive_sentiment", "negative_sentiment", "occurrence"]]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - filter: Optional[sentiment_query_v2_v2_reports_post_params.Filter] | Omit = omit, - sort: sentiment_query_v2_v2_reports_post_params.Sort | Omit = omit, - include_cited_websites: bool | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - cursor: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> SentimentQueryV2V2ReportsPostResponse: - """ - Query Sentiment V2 - - Args: - category_id: Body parameter. - asset: The brand name to analyze (sentiment is extracted on name, not id). - start_date: YYYY-MM-DD, ET, inclusive - end_date: YYYY-MM-DD, ET, inclusive - comparison_start_date: YYYY-MM-DD, ET, inclusive (with end). - comparison_end_date: YYYY-MM-DD, ET, inclusive (with start). - group_by: Body parameter. - metrics: Body parameter. - interval: Body parameter. - filter: Body parameter. - sort: Body parameter. - include_cited_websites: Return cited websites per row (only when grouping by `theme`/`claim`). - limit: Page size; default 10, max 50. - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - cursor: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - SentimentQueryV2V2ReportsPostResponse: Successful Response - - Example: - ```python - sentiment = await client.reports.sentiment.query_v2_v2_reports_post( - category_id="", - asset="", - start_date="", - end_date="", - interval="day", - include_cited_websites=False, - ) - ``` - """ - return await self._post( - "/v2/reports/sentiment", - body=await async_maybe_transform( - { - "category_id": category_id, - "asset": asset, - "start_date": start_date, - "end_date": end_date, - "comparison_start_date": comparison_start_date, - "comparison_end_date": comparison_end_date, - "group_by": group_by, - "metrics": metrics, - "interval": interval, - "filter": filter, - "sort": sort, - "include_cited_websites": include_cited_websites, - "limit": limit, - "max_results": max_results, - "cursor": cursor, - }, - sentiment_query_v2_v2_reports_post_params.SentimentQueryV2V2ReportsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=SentimentQueryV2V2ReportsPostResponse, - ) - - async def stream_v2_v2_reports_stream_post( - self, - *, - category_id: str, - asset: str, - start_date: str, - end_date: str, - comparison_start_date: Optional[str] | Omit = omit, - comparison_end_date: Optional[str] | Omit = omit, - group_by: Iterable[Literal["date", "model", "topic", "region", "prompt", "persona", "tag", "theme", "claim", "run", "competitor"]] | Omit = omit, - metrics: Optional[Iterable[Literal["positive_sentiment", "negative_sentiment", "occurrence"]]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - filter: Optional[sentiment_stream_v2_v2_reports_stream_post_params.Filter] | Omit = omit, - sort: sentiment_stream_v2_v2_reports_stream_post_params.Sort | Omit = omit, - include_cited_websites: bool | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - cursor: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncStream[str]: - """ - Stream Sentiment V2 - - Args: - category_id: Body parameter. - asset: The brand name to analyze (sentiment is extracted on name, not id). - start_date: YYYY-MM-DD, ET, inclusive - end_date: YYYY-MM-DD, ET, inclusive - comparison_start_date: YYYY-MM-DD, ET, inclusive (with end). - comparison_end_date: YYYY-MM-DD, ET, inclusive (with start). - group_by: Body parameter. - metrics: Body parameter. - interval: Body parameter. - filter: Body parameter. - sort: Body parameter. - include_cited_websites: Return cited websites per row (only when grouping by `theme`/`claim`). - limit: Page size; default 10, max 50. - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - cursor: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AsyncStream[str]: Successful Response - - Example: - ```python - stream = await client.reports.sentiment.stream_v2_v2_reports_stream_post( - category_id="", - asset="", - start_date="", - end_date="", - interval="day", - include_cited_websites=False, - ) - async for event in stream: - print(event) - ``` - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return await self._post( - "/v2/reports/sentiment/stream", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=str, - stream=True, - stream_cls=AsyncStream[str], - ) - - -class SentimentResourceWithRawResponse: - def __init__(self, sentiment: SentimentResource) -> None: - self._sentiment = sentiment - - self.query_v1_reports_post = to_raw_response_wrapper( - sentiment.query_v1_reports_post, - ) - self.stream_v1_reports_stream_post = to_raw_response_wrapper( - sentiment.stream_v1_reports_stream_post, - ) - self.query_v2_v2_reports_post = to_raw_response_wrapper( - sentiment.query_v2_v2_reports_post, - ) - self.stream_v2_v2_reports_stream_post = to_raw_response_wrapper( - sentiment.stream_v2_v2_reports_stream_post, - ) - - -class AsyncSentimentResourceWithRawResponse: - def __init__(self, sentiment: AsyncSentimentResource) -> None: - self._sentiment = sentiment - - self.query_v1_reports_post = async_to_raw_response_wrapper( - sentiment.query_v1_reports_post, - ) - self.stream_v1_reports_stream_post = async_to_raw_response_wrapper( - sentiment.stream_v1_reports_stream_post, - ) - self.query_v2_v2_reports_post = async_to_raw_response_wrapper( - sentiment.query_v2_v2_reports_post, - ) - self.stream_v2_v2_reports_stream_post = async_to_raw_response_wrapper( - sentiment.stream_v2_v2_reports_stream_post, - ) - - -class SentimentResourceWithStreamingResponse: - def __init__(self, sentiment: SentimentResource) -> None: - self._sentiment = sentiment - - self.query_v1_reports_post = to_streamed_response_wrapper( - sentiment.query_v1_reports_post, - ) - self.stream_v1_reports_stream_post = to_streamed_response_wrapper( - sentiment.stream_v1_reports_stream_post, - ) - self.query_v2_v2_reports_post = to_streamed_response_wrapper( - sentiment.query_v2_v2_reports_post, - ) - self.stream_v2_v2_reports_stream_post = to_streamed_response_wrapper( - sentiment.stream_v2_v2_reports_stream_post, - ) - - -class AsyncSentimentResourceWithStreamingResponse: - def __init__(self, sentiment: AsyncSentimentResource) -> None: - self._sentiment = sentiment - - self.query_v1_reports_post = async_to_streamed_response_wrapper( - sentiment.query_v1_reports_post, - ) - self.stream_v1_reports_stream_post = async_to_streamed_response_wrapper( - sentiment.stream_v1_reports_stream_post, - ) - self.query_v2_v2_reports_post = async_to_streamed_response_wrapper( - sentiment.query_v2_v2_reports_post, - ) - self.stream_v2_v2_reports_stream_post = async_to_streamed_response_wrapper( - sentiment.stream_v2_v2_reports_stream_post, - ) diff --git a/src/resources/reports/visibility.py b/src/resources/reports/visibility.py deleted file mode 100644 index 84b2b2a5..00000000 --- a/src/resources/reports/visibility.py +++ /dev/null @@ -1,728 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -import httpx - -from typing import Dict, Iterable, Optional, Union -from datetime import datetime -from typing_extensions import Literal -from ..._types import SequenceNotStr - -from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from ..._utils import path_template, maybe_transform, async_maybe_transform -from ..._compat import cached_property -from ..._resource import SyncAPIResource, AsyncAPIResource -from ..._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from ..._base_client import make_request_options -from ..._streaming import Stream, AsyncStream -from ...types.report_response import ReportResponse -from ...types.pagination import Pagination -from ...types.region_id_filter import RegionIdFilter -from ...types.region_name_filter import RegionNameFilter -from ...types.model_id_filter import ModelIdFilter -from ...types.topic_id_filter import TopicIdFilter -from ...types.topic_name_filter import TopicNameFilter -from ...types.tag_id_filter import TagIdFilter -from ...types.tag_name_filter import TagNameFilter -from ...types.prompt_id_filter import PromptIdFilter -from ...types.prompt_filter import PromptFilter -from ...types.persona_id_filter import PersonaIdFilter -from ...types.reports import visibility_query_v1_reports_post_params -from ...types.reports.visibility_stream_v1_reports_stream_post_response import VisibilityStreamV1ReportsStreamPostResponse, Query, VisibilityStreamV1ReportsStreamPostResponse2 -from ...types.pagination import Pagination -from ...types.region_id_filter import RegionIdFilter -from ...types.region_name_filter import RegionNameFilter -from ...types.model_id_filter import ModelIdFilter -from ...types.topic_id_filter import TopicIdFilter -from ...types.topic_name_filter import TopicNameFilter -from ...types.tag_id_filter import TagIdFilter -from ...types.tag_name_filter import TagNameFilter -from ...types.prompt_id_filter import PromptIdFilter -from ...types.prompt_filter import PromptFilter -from ...types.persona_id_filter import PersonaIdFilter -from ...types.reports import visibility_stream_v1_reports_stream_post_params -from ...types.reports.visibility_query_v2_v2_reports_post_response import VisibilityQueryV2V2ReportsPostResponse -from ...types.reports import visibility_query_v2_v2_reports_post_params -from ...types.reports import visibility_stream_v2_v2_reports_stream_post_params - -__all__ = ["VisibilityResource", "AsyncVisibilityResource"] - - -class VisibilityResource(SyncAPIResource): - - @cached_property - def with_raw_response(self) -> VisibilityResourceWithRawResponse: - return VisibilityResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> VisibilityResourceWithStreamingResponse: - return VisibilityResourceWithStreamingResponse(self) - - def query_v1_reports_post( - self, - *, - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "prompt", "prompt_id", "tag", "persona"]] | Omit = omit, - metrics: Iterable[Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"]], - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - category_id: str, - start_date: Union[str, datetime], - end_date: Union[str, datetime], - filters: Iterable[object] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """ - Query visibility report. - - Args: - date_interval: Date interval for the report. (only used with date dimension) - dimensions: Dimensions to group the report by. - metrics: Body parameter. - order_by: Custom ordering of the report results. - pagination: Pagination settings for the report results. - category_id: Body parameter. - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - filters: List of filters to apply to the visibility report. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - ReportResponse: Successful Response - - Example: - ```python - visibility = client.reports.visibility.query_v1_reports_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - category_id="", - start_date="", - end_date="", - ) - ``` - """ - return self._post( - "/v1/reports/visibility", - body=maybe_transform( - { - "date_interval": date_interval, - "dimensions": dimensions, - "metrics": metrics, - "order_by": order_by, - "pagination": pagination, - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "filters": filters, - }, - visibility_query_v1_reports_post_params.VisibilityQueryV1ReportsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=ReportResponse, - ) - - def stream_v1_reports_stream_post( - self, - *, - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "prompt", "prompt_id", "tag", "persona"]] | Omit = omit, - metrics: Iterable[Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"]], - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Optional[Pagination] | Omit = omit, - category_id: str, - start_date: Union[str, datetime], - end_date: Union[str, datetime], - filters: Iterable[object] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Stream[VisibilityStreamV1ReportsStreamPostResponse]: - """ - Stream Visibility - - Args: - date_interval: Date interval for the report. (only used with date dimension) - dimensions: Dimensions to group the report by. - metrics: Body parameter. - order_by: Custom ordering of the report results. - pagination: Body parameter. - category_id: Body parameter. - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - filters: List of filters to apply to the visibility report. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - Stream[VisibilityStreamV1ReportsStreamPostResponse]: Server-sent events stream. Emits a `summary` event first, then one `row` event per streamed row. - - Example: - ```python - stream = client.reports.visibility.stream_v1_reports_stream_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - category_id="", - start_date="", - end_date="", - ) - for event in stream: - print(event) - ``` - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return self._post( - "/v1/reports/visibility/stream", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=VisibilityStreamV1ReportsStreamPostResponse, - stream=True, - stream_cls=Stream[VisibilityStreamV1ReportsStreamPostResponse], - ) - - def query_v2_v2_reports_post( - self, - *, - category_id: str, - start_date: str, - end_date: str, - group_by: Iterable[Literal["date", "model", "topic", "region", "prompt", "persona"]] | Omit = omit, - metrics: Optional[Iterable[Literal["visibility_score", "share_of_voice", "average_position"]]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - scope: Literal["owned", "all"] | Omit = omit, - assets: Optional[Union[str, SequenceNotStr[str], object]] | Omit = omit, - filter: Optional[visibility_query_v2_v2_reports_post_params.Filter] | Omit = omit, - sort: visibility_query_v2_v2_reports_post_params.Sort | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - cursor: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> VisibilityQueryV2V2ReportsPostResponse: - """ - Query Visibility V2 - - Args: - category_id: Body parameter. - start_date: YYYY-MM-DD, ET, inclusive - end_date: YYYY-MM-DD, ET, inclusive - group_by: Body parameter. - metrics: Body parameter. - interval: Body parameter. - scope: Body parameter. - assets: A name (`is`), a list (`in`), or {op,value} with op `is`/`in`/`not_in`. - filter: Body parameter. - sort: Body parameter. - limit: Page size; default 10, max 50. - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - cursor: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - VisibilityQueryV2V2ReportsPostResponse: Successful Response - - Example: - ```python - visibility = client.reports.visibility.query_v2_v2_reports_post( - category_id="", - start_date="", - end_date="", - interval="day", - scope="owned", - ) - ``` - """ - return self._post( - "/v2/reports/visibility", - body=maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "group_by": group_by, - "metrics": metrics, - "interval": interval, - "scope": scope, - "assets": assets, - "filter": filter, - "sort": sort, - "limit": limit, - "max_results": max_results, - "cursor": cursor, - }, - visibility_query_v2_v2_reports_post_params.VisibilityQueryV2V2ReportsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=VisibilityQueryV2V2ReportsPostResponse, - ) - - def stream_v2_v2_reports_stream_post( - self, - *, - category_id: str, - start_date: str, - end_date: str, - group_by: Iterable[Literal["date", "model", "topic", "region", "prompt", "persona"]] | Omit = omit, - metrics: Optional[Iterable[Literal["visibility_score", "share_of_voice", "average_position"]]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - scope: Literal["owned", "all"] | Omit = omit, - assets: Optional[Union[str, SequenceNotStr[str], object]] | Omit = omit, - filter: Optional[visibility_stream_v2_v2_reports_stream_post_params.Filter] | Omit = omit, - sort: visibility_stream_v2_v2_reports_stream_post_params.Sort | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - cursor: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Stream[str]: - """ - Stream Visibility V2 - - Args: - category_id: Body parameter. - start_date: YYYY-MM-DD, ET, inclusive - end_date: YYYY-MM-DD, ET, inclusive - group_by: Body parameter. - metrics: Body parameter. - interval: Body parameter. - scope: Body parameter. - assets: A name (`is`), a list (`in`), or {op,value} with op `is`/`in`/`not_in`. - filter: Body parameter. - sort: Body parameter. - limit: Page size; default 10, max 50. - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - cursor: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - Stream[str]: Successful Response - - Example: - ```python - stream = client.reports.visibility.stream_v2_v2_reports_stream_post( - category_id="", - start_date="", - end_date="", - interval="day", - scope="owned", - ) - for event in stream: - print(event) - ``` - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return self._post( - "/v2/reports/visibility/stream", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=str, - stream=True, - stream_cls=Stream[str], - ) - - -class AsyncVisibilityResource(AsyncAPIResource): - - @cached_property - def with_raw_response(self) -> AsyncVisibilityResourceWithRawResponse: - return AsyncVisibilityResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncVisibilityResourceWithStreamingResponse: - return AsyncVisibilityResourceWithStreamingResponse(self) - - async def query_v1_reports_post( - self, - *, - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "prompt", "prompt_id", "tag", "persona"]] | Omit = omit, - metrics: Iterable[Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"]], - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Pagination | Omit = omit, - category_id: str, - start_date: Union[str, datetime], - end_date: Union[str, datetime], - filters: Iterable[object] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReportResponse: - """ - Query visibility report. - - Args: - date_interval: Date interval for the report. (only used with date dimension) - dimensions: Dimensions to group the report by. - metrics: Body parameter. - order_by: Custom ordering of the report results. - pagination: Pagination settings for the report results. - category_id: Body parameter. - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - filters: List of filters to apply to the visibility report. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - ReportResponse: Successful Response - - Example: - ```python - visibility = await client.reports.visibility.query_v1_reports_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - category_id="", - start_date="", - end_date="", - ) - ``` - """ - return await self._post( - "/v1/reports/visibility", - body=await async_maybe_transform( - { - "date_interval": date_interval, - "dimensions": dimensions, - "metrics": metrics, - "order_by": order_by, - "pagination": pagination, - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "filters": filters, - }, - visibility_query_v1_reports_post_params.VisibilityQueryV1ReportsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=ReportResponse, - ) - - async def stream_v1_reports_stream_post( - self, - *, - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] | Omit = omit, - dimensions: Iterable[Literal["date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "prompt", "prompt_id", "tag", "persona"]] | Omit = omit, - metrics: Iterable[Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"]], - order_by: Dict[str, Literal["asc", "desc"]] | Omit = omit, - pagination: Optional[Pagination] | Omit = omit, - category_id: str, - start_date: Union[str, datetime], - end_date: Union[str, datetime], - filters: Iterable[object] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncStream[VisibilityStreamV1ReportsStreamPostResponse]: - """ - Stream Visibility - - Args: - date_interval: Date interval for the report. (only used with date dimension) - dimensions: Dimensions to group the report by. - metrics: Body parameter. - order_by: Custom ordering of the report results. - pagination: Body parameter. - category_id: Body parameter. - start_date: Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - end_date: End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp. - filters: List of filters to apply to the visibility report. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AsyncStream[VisibilityStreamV1ReportsStreamPostResponse]: Server-sent events stream. Emits a `summary` event first, then one `row` event per streamed row. - - Example: - ```python - stream = await client.reports.visibility.stream_v1_reports_stream_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - category_id="", - start_date="", - end_date="", - ) - async for event in stream: - print(event) - ``` - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return await self._post( - "/v1/reports/visibility/stream", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=VisibilityStreamV1ReportsStreamPostResponse, - stream=True, - stream_cls=AsyncStream[VisibilityStreamV1ReportsStreamPostResponse], - ) - - async def query_v2_v2_reports_post( - self, - *, - category_id: str, - start_date: str, - end_date: str, - group_by: Iterable[Literal["date", "model", "topic", "region", "prompt", "persona"]] | Omit = omit, - metrics: Optional[Iterable[Literal["visibility_score", "share_of_voice", "average_position"]]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - scope: Literal["owned", "all"] | Omit = omit, - assets: Optional[Union[str, SequenceNotStr[str], object]] | Omit = omit, - filter: Optional[visibility_query_v2_v2_reports_post_params.Filter] | Omit = omit, - sort: visibility_query_v2_v2_reports_post_params.Sort | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - cursor: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> VisibilityQueryV2V2ReportsPostResponse: - """ - Query Visibility V2 - - Args: - category_id: Body parameter. - start_date: YYYY-MM-DD, ET, inclusive - end_date: YYYY-MM-DD, ET, inclusive - group_by: Body parameter. - metrics: Body parameter. - interval: Body parameter. - scope: Body parameter. - assets: A name (`is`), a list (`in`), or {op,value} with op `is`/`in`/`not_in`. - filter: Body parameter. - sort: Body parameter. - limit: Page size; default 10, max 50. - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - cursor: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - VisibilityQueryV2V2ReportsPostResponse: Successful Response - - Example: - ```python - visibility = await client.reports.visibility.query_v2_v2_reports_post( - category_id="", - start_date="", - end_date="", - interval="day", - scope="owned", - ) - ``` - """ - return await self._post( - "/v2/reports/visibility", - body=await async_maybe_transform( - { - "category_id": category_id, - "start_date": start_date, - "end_date": end_date, - "group_by": group_by, - "metrics": metrics, - "interval": interval, - "scope": scope, - "assets": assets, - "filter": filter, - "sort": sort, - "limit": limit, - "max_results": max_results, - "cursor": cursor, - }, - visibility_query_v2_v2_reports_post_params.VisibilityQueryV2V2ReportsPostParams, - ), - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=VisibilityQueryV2V2ReportsPostResponse, - ) - - async def stream_v2_v2_reports_stream_post( - self, - *, - category_id: str, - start_date: str, - end_date: str, - group_by: Iterable[Literal["date", "model", "topic", "region", "prompt", "persona"]] | Omit = omit, - metrics: Optional[Iterable[Literal["visibility_score", "share_of_voice", "average_position"]]] | Omit = omit, - interval: Literal["day", "week", "month"] | Omit = omit, - scope: Literal["owned", "all"] | Omit = omit, - assets: Optional[Union[str, SequenceNotStr[str], object]] | Omit = omit, - filter: Optional[visibility_stream_v2_v2_reports_stream_post_params.Filter] | Omit = omit, - sort: visibility_stream_v2_v2_reports_stream_post_params.Sort | Omit = omit, - limit: Optional[int] | Omit = omit, - max_results: Optional[int] | Omit = omit, - cursor: Optional[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncStream[str]: - """ - Stream Visibility V2 - - Args: - category_id: Body parameter. - start_date: YYYY-MM-DD, ET, inclusive - end_date: YYYY-MM-DD, ET, inclusive - group_by: Body parameter. - metrics: Body parameter. - interval: Body parameter. - scope: Body parameter. - assets: A name (`is`), a list (`in`), or {op,value} with op `is`/`in`/`not_in`. - filter: Body parameter. - sort: Body parameter. - limit: Page size; default 10, max 50. - max_results: Stream endpoint only: cap the number of streamed rows (default: all). - cursor: Body parameter. - extra_headers: Send extra headers with the request. - extra_query: Send extra query parameters with the request. - extra_body: Send extra JSON properties with the request. - timeout: Override the client-level default timeout for this request, in seconds. - - Returns: - AsyncStream[str]: Successful Response - - Example: - ```python - stream = await client.reports.visibility.stream_v2_v2_reports_stream_post( - category_id="", - start_date="", - end_date="", - interval="day", - scope="owned", - ) - async for event in stream: - print(event) - ``` - """ - extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})} - return await self._post( - "/v2/reports/visibility/stream", - options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout), - cast_to=str, - stream=True, - stream_cls=AsyncStream[str], - ) - - -class VisibilityResourceWithRawResponse: - def __init__(self, visibility: VisibilityResource) -> None: - self._visibility = visibility - - self.query_v1_reports_post = to_raw_response_wrapper( - visibility.query_v1_reports_post, - ) - self.stream_v1_reports_stream_post = to_raw_response_wrapper( - visibility.stream_v1_reports_stream_post, - ) - self.query_v2_v2_reports_post = to_raw_response_wrapper( - visibility.query_v2_v2_reports_post, - ) - self.stream_v2_v2_reports_stream_post = to_raw_response_wrapper( - visibility.stream_v2_v2_reports_stream_post, - ) - - -class AsyncVisibilityResourceWithRawResponse: - def __init__(self, visibility: AsyncVisibilityResource) -> None: - self._visibility = visibility - - self.query_v1_reports_post = async_to_raw_response_wrapper( - visibility.query_v1_reports_post, - ) - self.stream_v1_reports_stream_post = async_to_raw_response_wrapper( - visibility.stream_v1_reports_stream_post, - ) - self.query_v2_v2_reports_post = async_to_raw_response_wrapper( - visibility.query_v2_v2_reports_post, - ) - self.stream_v2_v2_reports_stream_post = async_to_raw_response_wrapper( - visibility.stream_v2_v2_reports_stream_post, - ) - - -class VisibilityResourceWithStreamingResponse: - def __init__(self, visibility: VisibilityResource) -> None: - self._visibility = visibility - - self.query_v1_reports_post = to_streamed_response_wrapper( - visibility.query_v1_reports_post, - ) - self.stream_v1_reports_stream_post = to_streamed_response_wrapper( - visibility.stream_v1_reports_stream_post, - ) - self.query_v2_v2_reports_post = to_streamed_response_wrapper( - visibility.query_v2_v2_reports_post, - ) - self.stream_v2_v2_reports_stream_post = to_streamed_response_wrapper( - visibility.stream_v2_v2_reports_stream_post, - ) - - -class AsyncVisibilityResourceWithStreamingResponse: - def __init__(self, visibility: AsyncVisibilityResource) -> None: - self._visibility = visibility - - self.query_v1_reports_post = async_to_streamed_response_wrapper( - visibility.query_v1_reports_post, - ) - self.stream_v1_reports_stream_post = async_to_streamed_response_wrapper( - visibility.stream_v1_reports_stream_post, - ) - self.query_v2_v2_reports_post = async_to_streamed_response_wrapper( - visibility.query_v2_v2_reports_post, - ) - self.stream_v2_v2_reports_stream_post = async_to_streamed_response_wrapper( - visibility.stream_v2_v2_reports_stream_post, - ) diff --git a/src/types/__init__.py b/src/types/__init__.py deleted file mode 100644 index f9275f2b..00000000 --- a/src/types/__init__.py +++ /dev/null @@ -1,68 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from .analysis_type_filter import AnalysisTypeFilter as AnalysisTypeFilter -from .asset_id_filter import AssetIdFilter as AssetIdFilter -from .bot_name_filter import BotNameFilter as BotNameFilter -from .bot_provider_filter import BotProviderFilter as BotProviderFilter -from .category import Category as Category -from .create_agent_request import CreateAgentRequest as CreateAgentRequest -from .cursor_pagination import CursorPagination as CursorPagination -from .hostname_filter import HostnameFilter as HostnameFilter -from .report_info import ReportInfo as ReportInfo -from .model_id_filter import ModelIdFilter as ModelIdFilter -from .named_resource import NamedResource as NamedResource -from .organization import Organization as Organization -from .pagination import Pagination as Pagination -from .path_filter import PathFilter as PathFilter -from .persona_id_filter import PersonaIdFilter as PersonaIdFilter -from .persona_profile import PersonaProfile as PersonaProfile -from .persona_profile_behavior import PersonaProfileBehavior as PersonaProfileBehavior -from .persona_profile_demographics import PersonaProfileDemographics as PersonaProfileDemographics -from .persona_profile_employment import PersonaProfileEmployment as PersonaProfileEmployment -from .prompt_filter import PromptFilter as PromptFilter -from .prompt_id_filter import PromptIdFilter as PromptIdFilter -from .prompt_type_filter import PromptTypeFilter as PromptTypeFilter -from .region_id_filter import RegionIdFilter as RegionIdFilter -from .region_name_filter import RegionNameFilter as RegionNameFilter -from .report_response import ReportResponse as ReportResponse -from .report_result import ReportResult as ReportResult -from .root_domain_filter import RootDomainFilter as RootDomainFilter -from .search_knowledge_base_request import SearchKnowledgeBaseRequest as SearchKnowledgeBaseRequest -from .sentiment_v2_report_query import SentimentV2ReportQuery as SentimentV2ReportQuery -from .tag_id_filter import TagIdFilter as TagIdFilter -from .tag_name_filter import TagNameFilter as TagNameFilter -from .topic_id_filter import TopicIdFilter as TopicIdFilter -from .topic_name_filter import TopicNameFilter as TopicNameFilter -from .update_agent_request import UpdateAgentRequest as UpdateAgentRequest -from .update_prompt_status_body import UpdatePromptStatusBody as UpdatePromptStatusBody -from .url_filter import UrlFilter as UrlFilter -from .organization_list_category_regions_v1_org_categories_category_regions_get_response import OrganizationListCategoryRegionsV1OrgCategoriesCategoryRegionsGetResponse as OrganizationListCategoryRegionsV1OrgCategoriesCategoryRegionsGetResponse -from .report_query_sentiment_v2_v1_sentiment_v2_post_response import ReportQuerySentimentV2V1SentimentV2PostResponse as ReportQuerySentimentV2V1SentimentV2PostResponse -from .report_query_sentiment_v2_v1_sentiment_v2_post_params import ReportQuerySentimentV2V1SentimentV2PostParams as ReportQuerySentimentV2V1SentimentV2PostParams -from .knowledge_base_list_response import KnowledgeBaseListResponse as KnowledgeBaseListResponse -from .knowledge_base_list_params import KnowledgeBaseListParams as KnowledgeBaseListParams -from .knowledge_base_search_response import KnowledgeBaseSearchResponse as KnowledgeBaseSearchResponse -from .knowledge_base_search_params import KnowledgeBaseSearchParams as KnowledgeBaseSearchParams -from .agent_list_response import AgentListResponse as AgentListResponse -from .agent_list_params import AgentListParams as AgentListParams -from .agent_create_v1_post_response import AgentCreateV1PostResponse as AgentCreateV1PostResponse -from .agent_create_v1_post_params import AgentCreateV1PostParams as AgentCreateV1PostParams -from .agent_publish_v1_id_publish_post_response import AgentPublishV1IdPublishPostResponse as AgentPublishV1IdPublishPostResponse -from .agent_retrieve_response import AgentRetrieveResponse as AgentRetrieveResponse -from .agent_retrieve_params import AgentRetrieveParams as AgentRetrieveParams -from .agent_update_v1_id_patch_response import AgentUpdateV1IdPatchResponse as AgentUpdateV1IdPatchResponse -from .agent_update_v1_id_patch_params import AgentUpdateV1IdPatchParams as AgentUpdateV1IdPatchParams -from .agent_list_graph_v1_graph_get_response import AgentListGraphV1GraphGetResponse as AgentListGraphV1GraphGetResponse -from .agent_list_graph_v1_graph_get_params import AgentListGraphV1GraphGetParams as AgentListGraphV1GraphGetParams -from .organization_list_response import OrganizationListResponse as OrganizationListResponse -from .organization_regions_response import OrganizationRegionsResponse as OrganizationRegionsResponse -from .organization_regions_params import OrganizationRegionsParams as OrganizationRegionsParams -from .organization_models_response import OrganizationModelsResponse as OrganizationModelsResponse -from .organization_domains_response import OrganizationDomainsResponse as OrganizationDomainsResponse -from .organization_domains_params import OrganizationDomainsParams as OrganizationDomainsParams -from .organization_list_assets_response import OrganizationListAssetsResponse as OrganizationListAssetsResponse -from .organization_list_assets_params import OrganizationListAssetsParams as OrganizationListAssetsParams -from .organization_get_personas_response import OrganizationGetPersonasResponse as OrganizationGetPersonasResponse -from .organization_get_personas_params import OrganizationGetPersonasParams as OrganizationGetPersonasParams diff --git a/src/types/agent_create_v1_post_params.py b/src/types/agent_create_v1_post_params.py deleted file mode 100644 index 4fe30f57..00000000 --- a/src/types/agent_create_v1_post_params.py +++ /dev/null @@ -1,28 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import Required, TypedDict - -__all__ = ["AgentCreateV1PostParams", "Graph"] - - -class AgentCreateV1PostParams(TypedDict, total=False): - - organization_id: Required[str] - """ID of the organization that will own the agent. Required — Profound API keys are user-scoped, so the owning organization must be chosen explicitly. The caller must be a member of this organization.""" - - name: Required[str] - """Display name for the agent. Must be non-empty.""" - - description: Optional[str] - """Short description of the agent.""" - - graph: Optional[Graph] - """Initial workflow graph for the agent's draft version. Optional — an agent can be created empty and have its graph filled in later.""" - - -class Graph(TypedDict, total=False): - pass - diff --git a/src/types/agent_create_v1_post_response.py b/src/types/agent_create_v1_post_response.py deleted file mode 100644 index 7c1371fa..00000000 --- a/src/types/agent_create_v1_post_response.py +++ /dev/null @@ -1,30 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Optional -from datetime import datetime -from typing_extensions import Literal - -from .._models import BaseModel - -__all__ = ["AgentCreateV1PostResponse"] - - -class AgentCreateV1PostResponse(BaseModel): - - id: str - """Unique ID for the agent.""" - - organization_id: str - """Unique ID of the organization that owns the agent.""" - - name: str - """Display name of the agent.""" - - status: Literal["draft", "published", "unknown"] - """Current status of the agent.""" - - created_at: datetime - """When the agent was created.""" - - description: Optional[str] = None - """Short description of the agent, if provided.""" diff --git a/src/types/agent_list_graph_v1_graph_get_params.py b/src/types/agent_list_graph_v1_graph_get_params.py deleted file mode 100644 index 6754690c..00000000 --- a/src/types/agent_list_graph_v1_graph_get_params.py +++ /dev/null @@ -1,13 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing_extensions import Literal, TypedDict - -__all__ = ["AgentListGraphV1GraphGetParams"] - - -class AgentListGraphV1GraphGetParams(TypedDict, total=False): - - version: Literal["published", "draft"] - """Version of the agent whose graph to retrieve. Use `published` for the live version, or `draft` for the latest unpublished changes. Defaults to `published`.""" diff --git a/src/types/agent_list_graph_v1_graph_get_response.py b/src/types/agent_list_graph_v1_graph_get_response.py deleted file mode 100644 index b6bf25ff..00000000 --- a/src/types/agent_list_graph_v1_graph_get_response.py +++ /dev/null @@ -1,24 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing_extensions import Literal - -from .._models import BaseModel - -__all__ = ["AgentListGraphV1GraphGetResponse", "Graph"] - - -class Graph(BaseModel): - pass - - - -class AgentListGraphV1GraphGetResponse(BaseModel): - - agent_id: str - """Unique ID of the agent the graph belongs to.""" - - version: Literal["published", "draft"] - """Which version of the agent this graph is — `published` or `draft`.""" - - graph: Graph - """Workflow graph (`{nodes, edges}`) in the canonical dialect — the same shape `create` and `update` accept. Treat it as an opaque object: it is returned verbatim, so tool-backed nodes appear in their lowered `tool` form rather than the friendly v1 node types. Read it back to copy and edit a known-good agent.""" diff --git a/src/types/agent_publish_v1_id_publish_post_response.py b/src/types/agent_publish_v1_id_publish_post_response.py deleted file mode 100644 index 84cf04bb..00000000 --- a/src/types/agent_publish_v1_id_publish_post_response.py +++ /dev/null @@ -1,30 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Optional -from datetime import datetime -from typing_extensions import Literal - -from .._models import BaseModel - -__all__ = ["AgentPublishV1IdPublishPostResponse"] - - -class AgentPublishV1IdPublishPostResponse(BaseModel): - - id: str - """Unique ID for the agent.""" - - organization_id: str - """Unique ID of the organization that owns the agent.""" - - name: str - """Display name of the agent.""" - - status: Literal["draft", "published", "unknown"] - """Current status of the agent.""" - - created_at: datetime - """When the agent was created.""" - - description: Optional[str] = None - """Short description of the agent, if provided.""" diff --git a/src/types/agent_update_v1_id_patch_params.py b/src/types/agent_update_v1_id_patch_params.py deleted file mode 100644 index 0ef0335f..00000000 --- a/src/types/agent_update_v1_id_patch_params.py +++ /dev/null @@ -1,18 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing_extensions import Required, TypedDict - -__all__ = ["AgentUpdateV1IdPatchParams", "Graph"] - - -class AgentUpdateV1IdPatchParams(TypedDict, total=False): - - graph: Required[Graph] - """New workflow graph for the agent's draft version. Replaces the current draft graph; the agent is iterated in place rather than re-created, so its ID is stable. Required — a null graph is rejected as a 422 here rather than as a relayed upstream error.""" - - -class Graph(TypedDict, total=False): - pass - diff --git a/src/types/agent_update_v1_id_patch_response.py b/src/types/agent_update_v1_id_patch_response.py deleted file mode 100644 index 128a4f55..00000000 --- a/src/types/agent_update_v1_id_patch_response.py +++ /dev/null @@ -1,85 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import List, Optional -from datetime import datetime -from typing_extensions import Literal - -from .._models import BaseModel - -__all__ = ["AgentUpdateV1IdPatchResponse", "AgentSchema", "Input", "Output", "AgentValidation", "AgentValidationIssue"] - - -class AgentValidationIssue(BaseModel): - - code: str - """Stable machine-readable identifier for the kind of issue.""" - - message: str - """Human-readable description of the issue.""" - - node_id: Optional[str] = None - """ID of the node the issue applies to, if node-specific.""" - - node_title: Optional[str] = None - """Display title of the affected node, if available.""" - - field: Optional[str] = None - """Name of the offending field on the node, if field-specific.""" - - field_title: Optional[str] = None - """Display title of the affected field, if available.""" - - violation: Optional[str] = None - """The specific constraint that was violated, if available.""" - -class AgentValidation(BaseModel): - - valid: bool - """Whether the agent's graph is valid and ready to publish.""" - - issues: Optional[List[AgentValidationIssue]] = None - """Problems found while validating the graph. Empty when `valid` is true.""" - -class Output(BaseModel): - pass - -class Input(BaseModel): - pass - -class AgentSchema(BaseModel): - - input: Input - """JSON Schema for the agent's `inputs` object. Use the top-level property keys as input field names when starting a run.""" - - output: Output - """JSON Schema for the `outputs` object returned by `GET /v1/agents/{agent_id}/runs/{run_id}`.""" - - - -class AgentUpdateV1IdPatchResponse(BaseModel): - - id: str - """Unique ID for the agent.""" - - organization_id: str - """Unique ID of the organization that owns the agent.""" - - name: str - """Display name of the agent.""" - - status: Literal["draft", "published", "unknown"] - """Current status of the agent.""" - - created_at: datetime - """When the agent was created.""" - - description: Optional[str] = None - """Short description of the agent, if provided.""" - - schema: Optional[AgentSchema] = None - """Input and output schemas for this agent. Omitted while the agent's graph cannot be previewed (e.g. an empty or structurally-invalid draft); check `validation` to see what needs fixing.""" - - validation: Optional[AgentValidation] = None - """Validation report for the agent's graph, when available. Use `validation.valid` to check the agent is publishable.""" diff --git a/src/types/agents/__init__.py b/src/types/agents/__init__.py deleted file mode 100644 index 08d7e4ef..00000000 --- a/src/types/agents/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from .run_agent_request import RunAgentRequest as RunAgentRequest -from .node_type_list_v1_agents_get_response import NodeTypeListV1AgentsGetResponse as NodeTypeListV1AgentsGetResponse -from .node_type_list_schema_v1_agents_schema_get_response import NodeTypeListSchemaV1AgentsSchemaGetResponse as NodeTypeListSchemaV1AgentsSchemaGetResponse -from .run_create_response import RunCreateResponse as RunCreateResponse -from .run_create_params import RunCreateParams as RunCreateParams -from .run_retrieve_response import RunRetrieveResponse as RunRetrieveResponse diff --git a/src/types/agents/node_type_list_schema_v1_agents_schema_get_response.py b/src/types/agents/node_type_list_schema_v1_agents_schema_get_response.py deleted file mode 100644 index caef2e1b..00000000 --- a/src/types/agents/node_type_list_schema_v1_agents_schema_get_response.py +++ /dev/null @@ -1,42 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Optional - -from ..._models import BaseModel - -__all__ = ["NodeTypeListSchemaV1AgentsSchemaGetResponse", "Schema", "Example", "Documentation"] - - -class Documentation(BaseModel): - pass - -class Example(BaseModel): - pass - -class Schema(BaseModel): - pass - - - -class NodeTypeListSchemaV1AgentsSchemaGetResponse(BaseModel): - - node_type: str - """Stable identifier for the node type, e.g. `llm`.""" - - schema: Schema - """Opaque JSON Schema for the node's configuration. Treat this as an arbitrary object; its internal shape can change between `schema_version` bumps.""" - - schema_version: str - """Opaque version string for the node schema. Bumps whenever the underlying schema changes, so it can be used as a client-side cache key.""" - - description: Optional[str] = None - """Short description of what the node type does, if provided.""" - - examples: Optional[List[Example]] = None - """Worked example configurations for the node type, in the canonical graph dialect. These are curated guidance maintained by external-api, versioned by `docs_version` (NOT `schema_version`): they illustrate a valid shape at curation time but are a starting point, not the contract — they may lag the validator. The authoritative contract is `schema`, and the only authoritative check that a graph is valid is publishing it (or the agent-validation endpoint). Do not parse `examples` as the schema.""" - - documentation: Optional[Documentation] = None - """Opaque, human-oriented authoring guidance for the node type — purpose, constraints, enum values, and variable-flow notes that the machine `schema` does not always express (e.g. a conditional's else-branch rule, or an iteration's sub-graph shape). Treat as an arbitrary object; use `docs_version` as its cache key.""" - - docs_version: Optional[str] = None - """Opaque version string for `documentation`/`examples`, independent of `schema_version`. Bumps when the authoring guidance changes even if the underlying machine `schema` did not. When it trails the live `schema_version`, treat `documentation`/`examples` as guidance that may be stale and validate against the live `schema`.""" diff --git a/src/types/agents/node_type_list_v1_agents_get_response.py b/src/types/agents/node_type_list_v1_agents_get_response.py deleted file mode 100644 index 77698bf4..00000000 --- a/src/types/agents/node_type_list_v1_agents_get_response.py +++ /dev/null @@ -1,26 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Optional - -from ..._models import BaseModel - -__all__ = ["NodeTypeListV1AgentsGetResponse", "NodeTypeSummary"] - - -class NodeTypeSummary(BaseModel): - - node_type: str - """Stable identifier for the node type, e.g. `llm`.""" - - display_name: str - """Human-readable name for the node type.""" - - description: Optional[str] = None - """Short description of what the node type does, if provided.""" - - - -class NodeTypeListV1AgentsGetResponse(BaseModel): - - data: List[NodeTypeSummary] - """Allowlisted node types, returned as thin summaries.""" diff --git a/src/types/agents/run_agent_request.py b/src/types/agents/run_agent_request.py deleted file mode 100644 index 662c6d46..00000000 --- a/src/types/agents/run_agent_request.py +++ /dev/null @@ -1,19 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Optional - -from ..._models import BaseModel - -__all__ = ["RunAgentRequest", "Inputs"] - - -class Inputs(BaseModel): - pass - - - -class RunAgentRequest(BaseModel): - """Request body for starting an agent run.""" - - inputs: Optional[Inputs] = None - """Input values for the run. Keys should match the property names defined in `schema.input`. Omit the request body when the agent does not require inputs.""" diff --git a/src/types/agents/run_retrieve_response.py b/src/types/agents/run_retrieve_response.py deleted file mode 100644 index ee3ff8f9..00000000 --- a/src/types/agents/run_retrieve_response.py +++ /dev/null @@ -1,41 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Optional -from datetime import datetime -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["RunRetrieveResponse", "Error", "Outputs"] - - -class Outputs(BaseModel): - pass - -class Error(BaseModel): - pass - - - -class RunRetrieveResponse(BaseModel): - - id: str - """Unique ID for the run.""" - - agent_id: str - """Unique ID of the agent for this run.""" - - status: Literal["queued", "running", "succeeded", "failed", "cancelled", "skipped", "unknown"] - """Current status of the run.""" - - started_at: Optional[datetime] = None - """When the run started, if it has started.""" - - finished_at: Optional[datetime] = None - """When the run finished, if it has completed.""" - - error: Optional[Error] = None - """Error details, when the run fails and error information is available.""" - - outputs: Optional[Outputs] = None - """Output values returned by the run, keyed by variable ID. This object conforms to `schema.output` from the agent detail response and is empty when no outputs are available.""" diff --git a/src/types/analysis_type_filter.py b/src/types/analysis_type_filter.py deleted file mode 100644 index 6eb5bbe5..00000000 --- a/src/types/analysis_type_filter.py +++ /dev/null @@ -1,18 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Union -from typing_extensions import Literal - -from .._models import BaseModel - -__all__ = ["AnalysisTypeFilter"] - - -class AnalysisTypeFilter(BaseModel): - """Filter by analysis type (visibility, sentiment, or accuracy).""" - - field: Literal["analysis_type"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"], List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]]] diff --git a/src/types/bot_name_filter.py b/src/types/bot_name_filter.py deleted file mode 100644 index 115454d6..00000000 --- a/src/types/bot_name_filter.py +++ /dev/null @@ -1,18 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Union -from typing_extensions import Literal - -from .._models import BaseModel - -__all__ = ["BotNameFilter"] - - -class BotNameFilter(BaseModel): - """Filter by bot name (user agent)""" - - field: Literal["bot_name"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[Literal["Amazonbot", "ClaudeBot", "Claude-User", "Claude-SearchBot", "Applebot", "Applebot-Extended", "Bytespider", "DeepSeek", "DuckAssistBot", "DuckDuckBot", "Googlebot", "Googlebot-News", "Googlebot-Video", "Googlebot-Image", "Google-Extended", "Storebot-Google", "Google-CloudVertexBot", "meta-externalfetcher", "meta-externalagent", "bingbot", "MicrosoftPreview", "ChatGPT-User", "GPTBot", "OAI-SearchBot", "OAI-Operator", "PerplexityBot", "Perplexity-User", "Grok-PageBrowser", "YouBot", "OpenClaw", "baiduspider", "CCBot", "ERNIEBot", "Gemini-Fetch", "YandexBot", "PetalBot", "MistralAI-User", "Slurp", "Gemini-Deep-Research"], List[Literal["Amazonbot", "ClaudeBot", "Claude-User", "Claude-SearchBot", "Applebot", "Applebot-Extended", "Bytespider", "DeepSeek", "DuckAssistBot", "DuckDuckBot", "Googlebot", "Googlebot-News", "Googlebot-Video", "Googlebot-Image", "Google-Extended", "Storebot-Google", "Google-CloudVertexBot", "meta-externalfetcher", "meta-externalagent", "bingbot", "MicrosoftPreview", "ChatGPT-User", "GPTBot", "OAI-SearchBot", "OAI-Operator", "PerplexityBot", "Perplexity-User", "Grok-PageBrowser", "YouBot", "OpenClaw", "baiduspider", "CCBot", "ERNIEBot", "Gemini-Fetch", "YandexBot", "PetalBot", "MistralAI-User", "Slurp", "Gemini-Deep-Research"]]] diff --git a/src/types/bot_provider_filter.py b/src/types/bot_provider_filter.py deleted file mode 100644 index 16875854..00000000 --- a/src/types/bot_provider_filter.py +++ /dev/null @@ -1,18 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Union -from typing_extensions import Literal - -from .._models import BaseModel - -__all__ = ["BotProviderFilter"] - - -class BotProviderFilter(BaseModel): - """Filter by bot provider""" - - field: Literal["bot_provider"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[Literal["openai", "anthropic", "chatgpt", "deepseek", "google", "microsoft", "perplexity", "apple", "bytedance", "amazon", "meta", "duckduckgo", "you", "xai", "grok", "gemini", "mistral", "huawei", "yandex", "baidu", "yahoo", "commoncrawl", "openclaw"], List[Literal["openai", "anthropic", "chatgpt", "deepseek", "google", "microsoft", "perplexity", "apple", "bytedance", "amazon", "meta", "duckduckgo", "you", "xai", "grok", "gemini", "mistral", "huawei", "yandex", "baidu", "yahoo", "commoncrawl", "openclaw"]]] diff --git a/src/types/content/optimization_retrieve_response.py b/src/types/content/optimization_retrieve_response.py deleted file mode 100644 index 4b3662ee..00000000 --- a/src/types/content/optimization_retrieve_response.py +++ /dev/null @@ -1,111 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Dict, List, Optional, Union -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["OptimizationRetrieveResponse", "ContentAnalysis", "DocumentContent", "AeoScore", "AeoScoreTargetZone", "AnalysisSummary", "AnalysisBreakdown", "Recommendation", "RecommendationImpact", "RecommendationSuggestion", "AnalysisInputs", "TopicInput", "PromptInput", "UserInput"] - - -class UserInput(BaseModel): - - type: Literal["file", "text", "url"] - - value: str - - metadata: Dict[str, Union[int, str]] - -class PromptInput(BaseModel): - - id: str - - name: str - -class TopicInput(BaseModel): - - id: str - - name: str - -class AnalysisInputs(BaseModel): - - topic: Optional[TopicInput] = None - - prompt: Optional[PromptInput] = None - - top_citations: List[str] - - user: UserInput - -class RecommendationSuggestion(BaseModel): - - text: str - - rationale: str - -class RecommendationImpact(BaseModel): - - section: str - - score: float - -class Recommendation(BaseModel): - - title: str - - status: Literal["done", "pending"] - - impact: Optional[RecommendationImpact] = None - - suggestion: RecommendationSuggestion - -class AnalysisBreakdown(BaseModel): - - title: str - - weight: float - - score: float - -class AnalysisSummary(BaseModel): - - breakdown: List[AnalysisBreakdown] - -class AeoScoreTargetZone(BaseModel): - - low: float - - high: float - -class AeoScore(BaseModel): - - target_zone: AeoScoreTargetZone - - value: float - -class DocumentContent(BaseModel): - - format: Literal["markdown", "html"] - - value: str - -class ContentAnalysis(BaseModel): - - content: DocumentContent - - aeo_content_score: Optional[AeoScore] = None - - analysis: AnalysisSummary - - recommendations: List[Recommendation] - - inputs: AnalysisInputs - - - -class OptimizationRetrieveResponse(BaseModel): - - data: ContentAnalysis diff --git a/src/types/create_agent_request.py b/src/types/create_agent_request.py deleted file mode 100644 index aad541b2..00000000 --- a/src/types/create_agent_request.py +++ /dev/null @@ -1,28 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Optional - -from .._models import BaseModel - -__all__ = ["CreateAgentRequest", "Graph"] - - -class Graph(BaseModel): - pass - - - -class CreateAgentRequest(BaseModel): - """Request body for creating a draft agent.""" - - organization_id: str - """ID of the organization that will own the agent. Required — Profound API keys are user-scoped, so the owning organization must be chosen explicitly. The caller must be a member of this organization.""" - - name: str - """Display name for the agent. Must be non-empty.""" - - description: Optional[str] = None - """Short description of the agent.""" - - graph: Optional[Graph] = None - """Initial workflow graph for the agent's draft version. Optional — an agent can be created empty and have its graph filled in later.""" diff --git a/src/types/hostname_filter.py b/src/types/hostname_filter.py deleted file mode 100644 index 63da0d8f..00000000 --- a/src/types/hostname_filter.py +++ /dev/null @@ -1,18 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Union -from typing_extensions import Literal - -from .._models import BaseModel - -__all__ = ["HostnameFilter"] - - -class HostnameFilter(BaseModel): - """Filter by hostname""" - - field: Literal["hostname"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] diff --git a/src/types/knowledge_bases/add_folder_request.py b/src/types/knowledge_bases/add_folder_request.py deleted file mode 100644 index a4d9cd81..00000000 --- a/src/types/knowledge_bases/add_folder_request.py +++ /dev/null @@ -1,12 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - - -from ..._models import BaseModel - -__all__ = ["AddFolderRequest"] - - -class AddFolderRequest(BaseModel): - - path: str - """Folder path to create.""" diff --git a/src/types/knowledge_bases/delete_document_request.py b/src/types/knowledge_bases/delete_document_request.py deleted file mode 100644 index 9ad0d4c0..00000000 --- a/src/types/knowledge_bases/delete_document_request.py +++ /dev/null @@ -1,12 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - - -from ..._models import BaseModel - -__all__ = ["DeleteDocumentRequest"] - - -class DeleteDocumentRequest(BaseModel): - - name: str - """Document path to delete.""" diff --git a/src/types/knowledge_bases/delete_folder_request.py b/src/types/knowledge_bases/delete_folder_request.py deleted file mode 100644 index 3c4a6a9d..00000000 --- a/src/types/knowledge_bases/delete_folder_request.py +++ /dev/null @@ -1,16 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Optional - -from ..._models import BaseModel - -__all__ = ["DeleteFolderRequest"] - - -class DeleteFolderRequest(BaseModel): - - path: str - """Folder path to delete.""" - - recursive: Optional[bool] = None - """When false, only empty folders are deleted and non-empty folders return a conflict. When true, the folder and all contents are deleted.""" diff --git a/src/types/organization_list_category_regions_v1_org_categories_category_regions_get_response.py b/src/types/organization_list_category_regions_v1_org_categories_category_regions_get_response.py deleted file mode 100644 index d4b02724..00000000 --- a/src/types/organization_list_category_regions_v1_org_categories_category_regions_get_response.py +++ /dev/null @@ -1,9 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List -from typing_extensions import TypeAlias -from .named_resource import NamedResource - -__all__ = ["OrganizationListCategoryRegionsV1OrgCategoriesCategoryRegionsGetResponse"] - -OrganizationListCategoryRegionsV1OrgCategoriesCategoryRegionsGetResponse: TypeAlias = List[NamedResource] diff --git a/src/types/organizations/create_prompts_body.py b/src/types/organizations/create_prompts_body.py deleted file mode 100644 index bf4df106..00000000 --- a/src/types/organizations/create_prompts_body.py +++ /dev/null @@ -1,51 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Optional -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["CreatePromptsBody", "CreatePromptInput"] - - -class CreatePromptInput(BaseModel): - - prompt: str - """The prompt text to be sent to AI platforms.""" - - topic: object - """Topic to assign. A new topic is created if the name doesn't exist.""" - - language: str - """Language code (e.g. 'en-US')""" - - tags: Optional[List[object]] = None - """Tags to assign. New tags are created if names don't exist.""" - - regions: List[object] - """Regions where the prompt will be collected.""" - - platforms: List[object] - """AI platforms where the prompt will be collected.""" - - personas: Optional[List[object]] = None - """Personas to use when collecting. Omit for default (no persona).""" - - analysis_types: Optional[List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]]] = None - """Analysis types: 'visibility', 'sentiment', 'accuracy'. Defaults to ['visibility'].""" - - prompt_type: Optional[str] = None - """Deprecated. Use analysis_types instead. 'Visibility' or 'Sentiment'.""" - - asset: Optional[object] = None - """Required for Sentiment prompts. The brand asset to evaluate.""" - - - -class CreatePromptsBody(BaseModel): - - prompts: List[CreatePromptInput] - """List of prompts to create.""" - - dry_run: Optional[bool] = None - """When true, validate and preview changes without persisting them.""" diff --git a/src/types/organizations/id_or_name.py b/src/types/organizations/id_or_name.py deleted file mode 100644 index c3c974da..00000000 --- a/src/types/organizations/id_or_name.py +++ /dev/null @@ -1,20 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Optional - -from ..._models import BaseModel - -__all__ = ["IdOrName"] - - -class IdOrName(BaseModel): - """ - Reference by id, name, or both. Plain strings work too: - UUIDs become id lookups, other strings become name lookups. - """ - - id: Optional[str] = None - """UUID of the resource.""" - - name: Optional[str] = None - """Display name of the resource.""" diff --git a/src/types/organizations/update_prompts_body.py b/src/types/organizations/update_prompts_body.py deleted file mode 100644 index 2c368419..00000000 --- a/src/types/organizations/update_prompts_body.py +++ /dev/null @@ -1,54 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Optional -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["UpdatePromptsBody", "UpdatePromptInput"] - - -class UpdatePromptInput(BaseModel): - - id: str - """ID of the prompt to update.""" - - prompt: Optional[str] = None - """New prompt text.""" - - topic: Optional[object] = None - """New topic. A new topic is created if the name doesn't exist.""" - - language: Optional[str] = None - """New language code. Must be enabled for the organization.""" - - tags: Optional[List[object]] = None - """New tag set. Replaces all existing tags on the prompt.""" - - regions: Optional[List[object]] = None - """New region set. Replaces all existing regions.""" - - platforms: Optional[List[object]] = None - """New platform set. Replaces all existing platforms.""" - - personas: Optional[List[object]] = None - """New persona set. Replaces all existing personas.""" - - analysis_types: Optional[List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]]] = None - """New analysis types. Replaces all existing analysis types on the prompt.""" - - prompt_type: Optional[str] = None - """Deprecated. Use analysis_types instead.""" - - asset: Optional[object] = None - """Asset reference. Required when analysis_types includes 'sentiment'.""" - - - -class UpdatePromptsBody(BaseModel): - - prompts: List[UpdatePromptInput] - """List of prompt updates. Each entry must include an `id` and at least one field to change.""" - - dry_run: Optional[bool] = None - """When true, validate and preview changes without persisting them.""" diff --git a/src/types/prompt_id_filter.py b/src/types/prompt_id_filter.py deleted file mode 100644 index 68bd453e..00000000 --- a/src/types/prompt_id_filter.py +++ /dev/null @@ -1,18 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Union -from typing_extensions import Literal - -from .._models import BaseModel - -__all__ = ["PromptIdFilter"] - - -class PromptIdFilter(BaseModel): - """Filter by prompt UUID.""" - - field: Literal["prompt_id"] - - operator: Literal["is", "not_is", "in", "not_in"] - - value: Union[str, List[str]] diff --git a/src/types/prompts/__init__.py b/src/types/prompts/__init__.py deleted file mode 100644 index 4a8129c3..00000000 --- a/src/types/prompts/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from .answers_query import AnswersQuery as AnswersQuery -from .answers_v2_query import AnswersV2Query as AnswersV2Query -from .answer_create_v1_prompts_post_response import AnswerCreateV1PromptsPostResponse as AnswerCreateV1PromptsPostResponse -from .answer_create_v1_prompts_post_params import AnswerCreateV1PromptsPostParams as AnswerCreateV1PromptsPostParams -from .answer_query_v2_v2_prompts_post_response import AnswerQueryV2V2PromptsPostResponse as AnswerQueryV2V2PromptsPostResponse -from .answer_query_v2_v2_prompts_post_params import AnswerQueryV2V2PromptsPostParams as AnswerQueryV2V2PromptsPostParams -from .answer_stream_v2_v2_prompts_stream_post_response import AnswerStreamV2V2PromptsStreamPostResponse as AnswerStreamV2V2PromptsStreamPostResponse -from .answer_stream_v2_v2_prompts_stream_post_params import AnswerStreamV2V2PromptsStreamPostParams as AnswerStreamV2V2PromptsStreamPostParams diff --git a/src/types/prompts/answer_create_v1_prompts_post_params.py b/src/types/prompts/answer_create_v1_prompts_post_params.py deleted file mode 100644 index e86fc8b8..00000000 --- a/src/types/prompts/answer_create_v1_prompts_post_params.py +++ /dev/null @@ -1,101 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Iterable, Union -from datetime import datetime -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._types import SequenceNotStr -from ..pagination import Pagination -from ..region_id_filter import RegionIdFilter -from ..region_name_filter import RegionNameFilter -from ..model_id_filter import ModelIdFilter -from ..tag_id_filter import TagIdFilter -from ..analysis_type_filter import AnalysisTypeFilter -from ..prompt_type_filter import PromptTypeFilter -from ..prompt_filter import PromptFilter -from ..persona_id_filter import PersonaIdFilter -from ..topic_id_filter import TopicIdFilter -from ..asset_id_filter import AssetIdFilter -from ..._utils import PropertyInfo - -__all__ = ["AnswerCreateV1PromptsPostParams", "ProfoundAnswerEngineInsightsFiltersAssetNameFilter", "EnabledFieldsResponse"] - - -class AnswerCreateV1PromptsPostParams(TypedDict, total=False): - - category_id: Required[str] - - start_date: Required[Union[str, datetime]] - - end_date: Required[Union[str, datetime]] - - pagination: Pagination - """Pagination parameters for the results. Default is 10,000 rows with no offset.""" - - filters: Iterable[Annotated[Union[RegionIdFilter, RegionNameFilter, ModelIdFilter, TagIdFilter, AnalysisTypeFilter, PromptTypeFilter, PromptFilter, PersonaIdFilter, TopicIdFilter, AssetIdFilter, ProfoundAnswerEngineInsightsFiltersAssetNameFilter], PropertyInfo(discriminator="field")]] - """List of filters to apply to the answers report.""" - - include: EnabledFieldsResponse - - -class EnabledFieldsResponse(TypedDict, total=False): - - run_id: bool - - created_at: bool - - prompt: bool - - prompt_id: bool - - mentions: bool - - analysis_types: bool - - prompt_type: bool - - response: bool - - citations: bool - - citation_details: bool - - web_search_results: bool - - search_triggered: bool - - themes: bool - """Use 'sentiment_themes' instead""" - - sentiment_themes: bool - """Uses legacy sentiment data.""" - - topic: bool - - topic_id: bool - - region: bool - - model: bool - - model_id: bool - - asset: bool - - asset_id: bool - - tags: bool - - search_queries: bool - - persona: bool - -class ProfoundAnswerEngineInsightsFiltersAssetNameFilter(TypedDict, total=False): - - field: Required[Literal["asset_name"]] - - operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[str, SequenceNotStr[str]]] - diff --git a/src/types/prompts/answer_query_v2_v2_prompts_post_params.py b/src/types/prompts/answer_query_v2_v2_prompts_post_params.py deleted file mode 100644 index d5293571..00000000 --- a/src/types/prompts/answer_query_v2_v2_prompts_post_params.py +++ /dev/null @@ -1,50 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Iterable, Optional -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._utils import PropertyInfo - -__all__ = ["AnswerQueryV2V2PromptsPostParams", "FilterNode"] - - -class AnswerQueryV2V2PromptsPostParams(TypedDict, total=False): - - category_id: Required[str] - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - include: Optional[Iterable[Literal["run_id", "date", "model", "topic", "topic_id", "persona", "region", "tags", "prompt", "prompt_id", "response", "mentions", "citations", "search_queries", "analysis_types", "sentiment_claims"]]] - """Which row fields to return: `run_id`, `date`, `model`, `topic`, `topic_id`, `region`, `persona`, `tags`, `prompt`, `prompt_id`, `response`, `mentions`, `citations`, `search_queries`, `analysis_types`, `sentiment_claims`. Omit for all of them.""" - - filter: Optional[FilterNode] - """and/or/not tree over `model`, `topic`, `region`, `persona`, `prompt`, `tag`, `analysis_type` (visibility/sentiment/factcheck); plus top-level `and` leaves `domain` or `page` (`is` one value, or `in` a list). Substring-search the prompt with `{"field": "prompt", "op": "contains", "value": "…"}`.""" - - limit: Optional[int] - """Page size; default 10, max 50.""" - - max_results: Optional[int] - """Stream endpoint only: cap the number of streamed rows (default: all).""" - - cursor: Optional[str] - - -class FilterNode(TypedDict, total=False): - - and_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="and")] - - or_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="or")] - - not_: Annotated[Optional[FilterNode], PropertyInfo(alias="not")] - - field: Optional[str] - - op: Optional[str] - - value: str - diff --git a/src/types/prompts/answer_query_v2_v2_prompts_post_response.py b/src/types/prompts/answer_query_v2_v2_prompts_post_response.py deleted file mode 100644 index 7ea19dc4..00000000 --- a/src/types/prompts/answer_query_v2_v2_prompts_post_response.py +++ /dev/null @@ -1,13 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing_extensions import TypeAlias -from ..._models import BaseModel - -__all__ = ["AnswerQueryV2V2PromptsPostResponse", "AnswerQueryV2V2PromptsPostResponse"] - -class AnswerQueryV2V2PromptsPostResponse(BaseModel): - pass - - - -AnswerQueryV2V2PromptsPostResponse: TypeAlias = AnswerQueryV2V2PromptsPostResponse diff --git a/src/types/prompts/answer_stream_v2_v2_prompts_stream_post_params.py b/src/types/prompts/answer_stream_v2_v2_prompts_stream_post_params.py deleted file mode 100644 index 85b1b04d..00000000 --- a/src/types/prompts/answer_stream_v2_v2_prompts_stream_post_params.py +++ /dev/null @@ -1,50 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Iterable, Optional -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._utils import PropertyInfo - -__all__ = ["AnswerStreamV2V2PromptsStreamPostParams", "FilterNode"] - - -class AnswerStreamV2V2PromptsStreamPostParams(TypedDict, total=False): - - category_id: Required[str] - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - include: Optional[Iterable[Literal["run_id", "date", "model", "topic", "topic_id", "persona", "region", "tags", "prompt", "prompt_id", "response", "mentions", "citations", "search_queries", "analysis_types", "sentiment_claims"]]] - """Which row fields to return: `run_id`, `date`, `model`, `topic`, `topic_id`, `region`, `persona`, `tags`, `prompt`, `prompt_id`, `response`, `mentions`, `citations`, `search_queries`, `analysis_types`, `sentiment_claims`. Omit for all of them.""" - - filter: Optional[FilterNode] - """and/or/not tree over `model`, `topic`, `region`, `persona`, `prompt`, `tag`, `analysis_type` (visibility/sentiment/factcheck); plus top-level `and` leaves `domain` or `page` (`is` one value, or `in` a list). Substring-search the prompt with `{"field": "prompt", "op": "contains", "value": "…"}`.""" - - limit: Optional[int] - """Page size; default 10, max 50.""" - - max_results: Optional[int] - """Stream endpoint only: cap the number of streamed rows (default: all).""" - - cursor: Optional[str] - - -class FilterNode(TypedDict, total=False): - - and_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="and")] - - or_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="or")] - - not_: Annotated[Optional[FilterNode], PropertyInfo(alias="not")] - - field: Optional[str] - - op: Optional[str] - - value: str - diff --git a/src/types/prompts/answer_stream_v2_v2_prompts_stream_post_response.py b/src/types/prompts/answer_stream_v2_v2_prompts_stream_post_response.py deleted file mode 100644 index b29e0a2d..00000000 --- a/src/types/prompts/answer_stream_v2_v2_prompts_stream_post_response.py +++ /dev/null @@ -1,7 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing_extensions import TypeAlias - -__all__ = ["AnswerStreamV2V2PromptsStreamPostResponse"] - -AnswerStreamV2V2PromptsStreamPostResponse: TypeAlias = str diff --git a/src/types/prompts/answers_query.py b/src/types/prompts/answers_query.py deleted file mode 100644 index 921f52a7..00000000 --- a/src/types/prompts/answers_query.py +++ /dev/null @@ -1,101 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal -from ..._utils import PropertyInfo - -from ..._models import BaseModel -from ..pagination import Pagination -from ..region_id_filter import RegionIdFilter -from ..region_name_filter import RegionNameFilter -from ..model_id_filter import ModelIdFilter -from ..tag_id_filter import TagIdFilter -from ..analysis_type_filter import AnalysisTypeFilter -from ..prompt_type_filter import PromptTypeFilter -from ..prompt_filter import PromptFilter -from ..persona_id_filter import PersonaIdFilter -from ..topic_id_filter import TopicIdFilter -from ..asset_id_filter import AssetIdFilter - -__all__ = ["AnswersQuery", "ProfoundAnswerEngineInsightsFiltersAssetNameFilter", "EnabledFieldsResponse"] - - -class EnabledFieldsResponse(BaseModel): - - run_id: Optional[bool] = None - - created_at: Optional[bool] = None - - prompt: Optional[bool] = None - - prompt_id: Optional[bool] = None - - mentions: Optional[bool] = None - - analysis_types: Optional[bool] = None - - prompt_type: Optional[bool] = None - - response: Optional[bool] = None - - citations: Optional[bool] = None - - citation_details: Optional[bool] = None - - web_search_results: Optional[bool] = None - - search_triggered: Optional[bool] = None - - themes: Optional[bool] = None - """Use 'sentiment_themes' instead""" - - sentiment_themes: Optional[bool] = None - """Uses legacy sentiment data.""" - - topic: Optional[bool] = None - - topic_id: Optional[bool] = None - - region: Optional[bool] = None - - model: Optional[bool] = None - - model_id: Optional[bool] = None - - asset: Optional[bool] = None - - asset_id: Optional[bool] = None - - tags: Optional[bool] = None - - search_queries: Optional[bool] = None - - persona: Optional[bool] = None - -class ProfoundAnswerEngineInsightsFiltersAssetNameFilter(BaseModel): - - field: Literal["asset_name"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] - - - -class AnswersQuery(BaseModel): - """Body for the answers endpoint.""" - - category_id: str - - start_date: datetime - - end_date: datetime - - pagination: Optional[Pagination] = None - """Pagination parameters for the results. Default is 10,000 rows with no offset.""" - - filters: Optional[List[Annotated[Union[RegionIdFilter, RegionNameFilter, ModelIdFilter, TagIdFilter, AnalysisTypeFilter, PromptTypeFilter, PromptFilter, PersonaIdFilter, TopicIdFilter, AssetIdFilter, ProfoundAnswerEngineInsightsFiltersAssetNameFilter], PropertyInfo(discriminator="field")]]] = None - """List of filters to apply to the answers report.""" - - include: Optional[EnabledFieldsResponse] = None diff --git a/src/types/prompts/answers_v2_query.py b/src/types/prompts/answers_v2_query.py deleted file mode 100644 index 1dbe3d92..00000000 --- a/src/types/prompts/answers_v2_query.py +++ /dev/null @@ -1,53 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import List, Optional -from typing_extensions import Literal - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["AnswersV2Query", "FilterNode"] - - -class FilterNode(BaseModel): - - and_: Optional[List[FilterNode]] = FieldInfo(alias="and", default=None) - - or_: Optional[List[FilterNode]] = FieldInfo(alias="or", default=None) - - not_: Optional[FilterNode] = FieldInfo(alias="not", default=None) - - field: Optional[str] = None - - op: Optional[str] = None - - value: Optional[str] = None - - - -class AnswersV2Query(BaseModel): - - category_id: str - - start_date: str - """YYYY-MM-DD, ET, inclusive""" - - end_date: str - """YYYY-MM-DD, ET, inclusive""" - - include: Optional[List[Literal["run_id", "date", "model", "topic", "topic_id", "persona", "region", "tags", "prompt", "prompt_id", "response", "mentions", "citations", "search_queries", "analysis_types", "sentiment_claims"]]] = None - """Which row fields to return: `run_id`, `date`, `model`, `topic`, `topic_id`, `region`, `persona`, `tags`, `prompt`, `prompt_id`, `response`, `mentions`, `citations`, `search_queries`, `analysis_types`, `sentiment_claims`. Omit for all of them.""" - - filter: Optional[FilterNode] = None - """and/or/not tree over `model`, `topic`, `region`, `persona`, `prompt`, `tag`, `analysis_type` (visibility/sentiment/factcheck); plus top-level `and` leaves `domain` or `page` (`is` one value, or `in` a list). Substring-search the prompt with `{"field": "prompt", "op": "contains", "value": "…"}`.""" - - limit: Optional[int] = None - """Page size; default 10, max 50.""" - - max_results: Optional[int] = None - """Stream endpoint only: cap the number of streamed rows (default: all).""" - - cursor: Optional[str] = None diff --git a/src/types/report_query_sentiment_v2_v1_sentiment_v2_post_params.py b/src/types/report_query_sentiment_v2_v1_sentiment_v2_post_params.py deleted file mode 100644 index 39c9bfdc..00000000 --- a/src/types/report_query_sentiment_v2_v1_sentiment_v2_post_params.py +++ /dev/null @@ -1,146 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Dict, Iterable, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal, Required, TypedDict -from .._types import SequenceNotStr -from .pagination import Pagination -from .._utils import PropertyInfo - -__all__ = ["ReportQuerySentimentV2V1SentimentV2PostParams", "SentimentV2ModelIdFilter", "SentimentV2RegionIdFilter", "SentimentV2TopicIdFilter", "SentimentV2PromptIdFilter", "SentimentV2PersonaIdFilter", "SentimentV2TagIdFilter", "SentimentV2RunIdFilter", "SentimentV2ThemeIdFilter", "SentimentV2ThemeFilter", "SentimentV2ClaimIdFilter", "SentimentV2ClaimFilter", "SentimentV2SentimentFilter"] - - -class ReportQuerySentimentV2V1SentimentV2PostParams(TypedDict, total=False): - - category_id: Required[str] - - asset_name: Required[str] - - start_date: Required[Union[str, datetime]] - """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - end_date: Required[Union[str, datetime]] - """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - comparison_start_date: Optional[Union[str, datetime]] - """Start of the previous period for delta computation.""" - - comparison_end_date: Optional[Union[str, datetime]] - """End of the previous period for delta computation.""" - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - """Date interval for the report. Only used when dimensions includes date.""" - - dimensions: Iterable[Literal["date", "topic", "region", "model", "prompt", "persona", "tag", "theme", "claim", "run", "asset_name"]] - """Dimensions to group the report by.""" - - metrics: Required[Iterable[Literal["sentiment", "occurrence"]]] - - filters: Iterable[Annotated[Union[SentimentV2ModelIdFilter, SentimentV2RegionIdFilter, SentimentV2TopicIdFilter, SentimentV2PromptIdFilter, SentimentV2PersonaIdFilter, SentimentV2TagIdFilter, SentimentV2RunIdFilter, SentimentV2ThemeIdFilter, SentimentV2ThemeFilter, SentimentV2ClaimIdFilter, SentimentV2ClaimFilter, SentimentV2SentimentFilter], PropertyInfo(discriminator="field")]] - """List of filters to apply to the sentiment-v2 report.""" - - order_by: Dict[str, Literal["asc", "desc"]] - """Custom ordering of report results. Dimension keys must also be present in dimensions. The sentiment metric orders by positive_sentiment.""" - - pagination: Pagination - """Pagination settings for the report results.""" - - -class SentimentV2SentimentFilter(TypedDict, total=False): - - field: Required[Literal["sentiment"]] - - operator: Required[Literal["is", "not_is", "in", "not_in"]] - - value: Required[Union[Literal["positive", "negative"], Iterable[Literal["positive", "negative"]]]] - -class SentimentV2ClaimFilter(TypedDict, total=False): - - field: Required[Literal["claim"]] - - operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[str, SequenceNotStr[str]]] - -class SentimentV2ClaimIdFilter(TypedDict, total=False): - - field: Required[Literal["claim_id"]] - - operator: Required[Literal["is", "not_is", "in", "not_in"]] - - value: Required[Union[str, Iterable[str]]] - -class SentimentV2ThemeFilter(TypedDict, total=False): - - field: Required[Literal["theme"]] - - operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[str, SequenceNotStr[str]]] - -class SentimentV2ThemeIdFilter(TypedDict, total=False): - - field: Required[Literal["theme_id"]] - - operator: Required[Literal["is", "not_is", "in", "not_in"]] - - value: Required[Union[str, Iterable[str]]] - -class SentimentV2RunIdFilter(TypedDict, total=False): - - field: Required[Literal["run_id"]] - - operator: Required[Literal["is", "not_is", "in", "not_in"]] - - value: Required[Union[str, Iterable[str]]] - -class SentimentV2TagIdFilter(TypedDict, total=False): - - field: Required[Literal["tag_id"]] - - operator: Required[Literal["is", "not_is", "in", "not_in"]] - - value: Required[Union[str, Iterable[str]]] - -class SentimentV2PersonaIdFilter(TypedDict, total=False): - - field: Required[Literal["persona_id"]] - - operator: Required[Literal["is", "not_is", "in", "not_in"]] - - value: Required[Union[str, Iterable[str]]] - -class SentimentV2PromptIdFilter(TypedDict, total=False): - - field: Required[Literal["prompt_id"]] - - operator: Required[Literal["is", "not_is", "in", "not_in"]] - - value: Required[Union[str, Iterable[str]]] - -class SentimentV2TopicIdFilter(TypedDict, total=False): - - field: Required[Literal["topic_id"]] - - operator: Required[Literal["is", "not_is", "in", "not_in"]] - - value: Required[Union[str, Iterable[str]]] - -class SentimentV2RegionIdFilter(TypedDict, total=False): - - field: Required[Literal["region_id"]] - - operator: Required[Literal["is", "not_is", "in", "not_in"]] - - value: Required[Union[str, Iterable[str]]] - -class SentimentV2ModelIdFilter(TypedDict, total=False): - - field: Required[Literal["model_id"]] - - operator: Required[Literal["is", "not_is", "in", "not_in"]] - - value: Required[Union[str, Iterable[str]]] - diff --git a/src/types/report_query_sentiment_v2_v1_sentiment_v2_post_response.py b/src/types/report_query_sentiment_v2_v1_sentiment_v2_post_response.py deleted file mode 100644 index cd1adbcf..00000000 --- a/src/types/report_query_sentiment_v2_v1_sentiment_v2_post_response.py +++ /dev/null @@ -1,104 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Dict, List, Optional -from typing_extensions import Literal - -from .._models import BaseModel - -__all__ = ["ReportQuerySentimentV2V1SentimentV2PostResponse", "SentimentV2ReportInfo", "Query", "SentimentDataPoint", "SentimentPeriodScores", "SentimentScores", "SentimentGroupMetadata"] - - -class SentimentGroupMetadata(BaseModel): - - theme_id: Optional[str] = None - - theme: Optional[str] = None - - claim_id: Optional[str] = None - - claim: Optional[str] = None - - sentiment: Optional[Literal["positive", "negative"]] = None - - prompt_id: Optional[str] = None - - prompt_text: Optional[str] = None - - topic_id: Optional[str] = None - - run_id: Optional[str] = None - - created_at: Optional[str] = None - - model_id: Optional[str] = None - - region_id: Optional[str] = None - - persona_id: Optional[str] = None - - asset_name: Optional[str] = None - - child_count_total: Optional[int] = None - - child_count_matching: Optional[int] = None - - parent_matches_search: Optional[bool] = None - - child_matches_search: Optional[bool] = None - -class SentimentScores(BaseModel): - - positive_sentiment: float - - negative_sentiment: float - - assessment_count: int - - occurrence: Optional[float] = None - - response_count: Optional[int] = None - - total_response_count: Optional[int] = None - -class SentimentPeriodScores(BaseModel): - - current: Optional[SentimentScores] = None - - previous: Optional[SentimentScores] = None - -class SentimentDataPoint(BaseModel): - - scores: SentimentPeriodScores - - date: Optional[str] = None - - prev_date: Optional[str] = None - - group_ids: Optional[Dict[str, str]] = None - - group_names: Optional[Dict[str, str]] = None - - group_metadata: Optional[SentimentGroupMetadata] = None - - cited_website_hrefs: Optional[List[str]] = None - - total_count: Optional[int] = None - -class Query(BaseModel): - pass - -class SentimentV2ReportInfo(BaseModel): - - query: Query - - total_rows: int - - - -class ReportQuerySentimentV2V1SentimentV2PostResponse(BaseModel): - - info: SentimentV2ReportInfo - - data: Optional[List[SentimentDataPoint]] = None diff --git a/src/types/reports/__init__.py b/src/types/reports/__init__.py deleted file mode 100644 index 9407ab75..00000000 --- a/src/types/reports/__init__.py +++ /dev/null @@ -1,128 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from .accuracy_breakdown_query import AccuracyBreakdownQuery as AccuracyBreakdownQuery -from .accuracy_citation_analysis_query import AccuracyCitationAnalysisQuery as AccuracyCitationAnalysisQuery -from .accuracy_overview_query import AccuracyOverviewQuery as AccuracyOverviewQuery -from .accuracy_topic_ids_query import AccuracyTopicIdsQuery as AccuracyTopicIdsQuery -from .bots_report_query import BotsReportQuery as BotsReportQuery -from .bots_report_query_v2 import BotsReportQueryV2 as BotsReportQueryV2 -from .brand_name_filter import BrandNameFilter as BrandNameFilter -from .citations_query import CitationsQuery as CitationsQuery -from .citations_v2_query import CitationsV2Query as CitationsV2Query -from .claim_breakdown_query import ClaimBreakdownQuery as ClaimBreakdownQuery -from .claim_citations_query import ClaimCitationsQuery as ClaimCitationsQuery -from .cluster_example_runs_query import ClusterExampleRunsQuery as ClusterExampleRunsQuery -from .cluster_verification_pairs_query import ClusterVerificationPairsQuery as ClusterVerificationPairsQuery -from .fact_check_setup_status_query import FactCheckSetupStatusQuery as FactCheckSetupStatusQuery -from .inaccuracy_drivers_query import InaccuracyDriversQuery as InaccuracyDriversQuery -from .inaccurate_clusters_query import InaccurateClustersQuery as InaccurateClustersQuery -from .inaccurate_themes_query import InaccurateThemesQuery as InaccurateThemesQuery -from .merchant_name_filter import MerchantNameFilter as MerchantNameFilter -from .product_name_filter import ProductNameFilter as ProductNameFilter -from .query_fanouts_query import QueryFanoutsQuery as QueryFanoutsQuery -from .query_fanouts_v2_query import QueryFanoutsV2Query as QueryFanoutsV2Query -from .referrals_query import ReferralsQuery as ReferralsQuery -from .referrals_query_v2 import ReferralsQueryV2 as ReferralsQueryV2 -from .sentiment_query import SentimentQuery as SentimentQuery -from .sentiment_v2_query import SentimentV2Query as SentimentV2Query -from .shopping_all_items_with_merchants_query import ShoppingAllItemsWithMerchantsQuery as ShoppingAllItemsWithMerchantsQuery -from .shopping_executions_query import ShoppingExecutionsQuery as ShoppingExecutionsQuery -from .shopping_item_visibility_query import ShoppingItemVisibilityQuery as ShoppingItemVisibilityQuery -from .shopping_merchant_by_items_query import ShoppingMerchantByItemsQuery as ShoppingMerchantByItemsQuery -from .shopping_merchant_distribution_query import ShoppingMerchantDistributionQuery as ShoppingMerchantDistributionQuery -from .shopping_merchant_share_query import ShoppingMerchantShareQuery as ShoppingMerchantShareQuery -from .shopping_merchant_visibility_by_brand_query import ShoppingMerchantVisibilityByBrandQuery as ShoppingMerchantVisibilityByBrandQuery -from .shopping_product_merchant_urls_query import ShoppingProductMerchantUrlsQuery as ShoppingProductMerchantUrlsQuery -from .shopping_trigger_rate_query import ShoppingTriggerRateQuery as ShoppingTriggerRateQuery -from .shopping_visibility_query import ShoppingVisibilityQuery as ShoppingVisibilityQuery -from .stream_citations_query import StreamCitationsQuery as StreamCitationsQuery -from .stream_sentiment_query import StreamSentimentQuery as StreamSentimentQuery -from .stream_visibility_query import StreamVisibilityQuery as StreamVisibilityQuery -from .stream_web_search_results_query import StreamWebSearchResultsQuery as StreamWebSearchResultsQuery -from .top_inaccurate_claims_query import TopInaccurateClaimsQuery as TopInaccurateClaimsQuery -from .visibility_query import VisibilityQuery as VisibilityQuery -from .visibility_v2_query import VisibilityV2Query as VisibilityV2Query -from .web_search_results_query import WebSearchResultsQuery as WebSearchResultsQuery -from .citation_query_v1_reports_post_response import CitationQueryV1ReportsPostResponse as CitationQueryV1ReportsPostResponse -from .citation_query_v1_reports_post_params import CitationQueryV1ReportsPostParams as CitationQueryV1ReportsPostParams -from .citation_stream_v1_reports_stream_post_response import CitationStreamV1ReportsStreamPostResponse as CitationStreamV1ReportsStreamPostResponse -from .citation_stream_v1_reports_stream_post_params import CitationStreamV1ReportsStreamPostParams as CitationStreamV1ReportsStreamPostParams -from .citation_query_v2_v2_reports_post_response import CitationQueryV2V2ReportsPostResponse as CitationQueryV2V2ReportsPostResponse -from .citation_query_v2_v2_reports_post_params import CitationQueryV2V2ReportsPostParams as CitationQueryV2V2ReportsPostParams -from .citation_stream_v2_v2_reports_stream_post_response import CitationStreamV2V2ReportsStreamPostResponse as CitationStreamV2V2ReportsStreamPostResponse -from .citation_stream_v2_v2_reports_stream_post_params import CitationStreamV2V2ReportsStreamPostParams as CitationStreamV2V2ReportsStreamPostParams -from .visibility_query_v1_reports_post_params import VisibilityQueryV1ReportsPostParams as VisibilityQueryV1ReportsPostParams -from .visibility_stream_v1_reports_stream_post_response import VisibilityStreamV1ReportsStreamPostResponse as VisibilityStreamV1ReportsStreamPostResponse -from .visibility_stream_v1_reports_stream_post_params import VisibilityStreamV1ReportsStreamPostParams as VisibilityStreamV1ReportsStreamPostParams -from .visibility_query_v2_v2_reports_post_response import VisibilityQueryV2V2ReportsPostResponse as VisibilityQueryV2V2ReportsPostResponse -from .visibility_query_v2_v2_reports_post_params import VisibilityQueryV2V2ReportsPostParams as VisibilityQueryV2V2ReportsPostParams -from .visibility_stream_v2_v2_reports_stream_post_response import VisibilityStreamV2V2ReportsStreamPostResponse as VisibilityStreamV2V2ReportsStreamPostResponse -from .visibility_stream_v2_v2_reports_stream_post_params import VisibilityStreamV2V2ReportsStreamPostParams as VisibilityStreamV2V2ReportsStreamPostParams -from .sentiment_query_v1_reports_post_params import SentimentQueryV1ReportsPostParams as SentimentQueryV1ReportsPostParams -from .sentiment_stream_v1_reports_stream_post_response import SentimentStreamV1ReportsStreamPostResponse as SentimentStreamV1ReportsStreamPostResponse -from .sentiment_stream_v1_reports_stream_post_params import SentimentStreamV1ReportsStreamPostParams as SentimentStreamV1ReportsStreamPostParams -from .sentiment_query_v2_v2_reports_post_response import SentimentQueryV2V2ReportsPostResponse as SentimentQueryV2V2ReportsPostResponse -from .sentiment_query_v2_v2_reports_post_params import SentimentQueryV2V2ReportsPostParams as SentimentQueryV2V2ReportsPostParams -from .sentiment_stream_v2_v2_reports_stream_post_response import SentimentStreamV2V2ReportsStreamPostResponse as SentimentStreamV2V2ReportsStreamPostResponse -from .sentiment_stream_v2_v2_reports_stream_post_params import SentimentStreamV2V2ReportsStreamPostParams as SentimentStreamV2V2ReportsStreamPostParams -from .web_search_result_query_response import WebSearchResultQueryResponse as WebSearchResultQueryResponse -from .web_search_result_query_params import WebSearchResultQueryParams as WebSearchResultQueryParams -from .web_search_result_stream_response import WebSearchResultStreamResponse as WebSearchResultStreamResponse -from .web_search_result_stream_params import WebSearchResultStreamParams as WebSearchResultStreamParams -from .referral_create_report_v1_v1_reports_post_params import ReferralCreateReportV1V1ReportsPostParams as ReferralCreateReportV1V1ReportsPostParams -from .referral_create_report_v2_v2_reports_post_params import ReferralCreateReportV2V2ReportsPostParams as ReferralCreateReportV2V2ReportsPostParams -from .bot_create_report_v1_v1_reports_post_params import BotCreateReportV1V1ReportsPostParams as BotCreateReportV1V1ReportsPostParams -from .bot_create_report_v2_v2_reports_post_params import BotCreateReportV2V2ReportsPostParams as BotCreateReportV2V2ReportsPostParams -from .query_fanout_v1_reports_post_params import QueryFanoutV1ReportsPostParams as QueryFanoutV1ReportsPostParams -from .query_fanout_v2_v2_reports_post_response import QueryFanoutV2V2ReportsPostResponse as QueryFanoutV2V2ReportsPostResponse -from .query_fanout_v2_v2_reports_post_params import QueryFanoutV2V2ReportsPostParams as QueryFanoutV2V2ReportsPostParams -from .query_fanout_stream_v2_v2_reports_stream_post_response import QueryFanoutStreamV2V2ReportsStreamPostResponse as QueryFanoutStreamV2V2ReportsStreamPostResponse -from .query_fanout_stream_v2_v2_reports_stream_post_params import QueryFanoutStreamV2V2ReportsStreamPostParams as QueryFanoutStreamV2V2ReportsStreamPostParams -from .shopping_visibility_response import ShoppingVisibilityResponse as ShoppingVisibilityResponse -from .shopping_visibility_params import ShoppingVisibilityParams as ShoppingVisibilityParams -from .shopping_item_visibility_response import ShoppingItemVisibilityResponse as ShoppingItemVisibilityResponse -from .shopping_item_visibility_params import ShoppingItemVisibilityParams as ShoppingItemVisibilityParams -from .shopping_merchant_distribution_response import ShoppingMerchantDistributionResponse as ShoppingMerchantDistributionResponse -from .shopping_merchant_distribution_params import ShoppingMerchantDistributionParams as ShoppingMerchantDistributionParams -from .shopping_merchant_visibility_by_brand_response import ShoppingMerchantVisibilityByBrandResponse as ShoppingMerchantVisibilityByBrandResponse -from .shopping_merchant_visibility_by_brand_params import ShoppingMerchantVisibilityByBrandParams as ShoppingMerchantVisibilityByBrandParams -from .shopping_merchant_by_items_response import ShoppingMerchantByItemsResponse as ShoppingMerchantByItemsResponse -from .shopping_merchant_by_items_params import ShoppingMerchantByItemsParams as ShoppingMerchantByItemsParams -from .shopping_all_items_with_merchants_response import ShoppingAllItemsWithMerchantsResponse as ShoppingAllItemsWithMerchantsResponse -from .shopping_all_items_with_merchants_params import ShoppingAllItemsWithMerchantsParams as ShoppingAllItemsWithMerchantsParams -from .shopping_trigger_rate_response import ShoppingTriggerRateResponse as ShoppingTriggerRateResponse -from .shopping_trigger_rate_params import ShoppingTriggerRateParams as ShoppingTriggerRateParams -from .shopping_merchant_share_response import ShoppingMerchantShareResponse as ShoppingMerchantShareResponse -from .shopping_merchant_share_params import ShoppingMerchantShareParams as ShoppingMerchantShareParams -from .shopping_product_merchant_urls_response import ShoppingProductMerchantUrlsResponse as ShoppingProductMerchantUrlsResponse -from .shopping_product_merchant_urls_params import ShoppingProductMerchantUrlsParams as ShoppingProductMerchantUrlsParams -from .shopping_executions_response import ShoppingExecutionsResponse as ShoppingExecutionsResponse -from .shopping_executions_params import ShoppingExecutionsParams as ShoppingExecutionsParams -from .accuracy_overview_v1_reports_overview_post_response import AccuracyOverviewV1ReportsOverviewPostResponse as AccuracyOverviewV1ReportsOverviewPostResponse -from .accuracy_overview_v1_reports_overview_post_params import AccuracyOverviewV1ReportsOverviewPostParams as AccuracyOverviewV1ReportsOverviewPostParams -from .accuracy_breakdown_v1_reports_breakdown_post_response import AccuracyBreakdownV1ReportsBreakdownPostResponse as AccuracyBreakdownV1ReportsBreakdownPostResponse -from .accuracy_breakdown_v1_reports_breakdown_post_params import AccuracyBreakdownV1ReportsBreakdownPostParams as AccuracyBreakdownV1ReportsBreakdownPostParams -from .accuracy_citation_analysis_v1_reports_citation_analysis_post_response import AccuracyCitationAnalysisV1ReportsCitationAnalysisPostResponse as AccuracyCitationAnalysisV1ReportsCitationAnalysisPostResponse -from .accuracy_citation_analysis_v1_reports_citation_analysis_post_params import AccuracyCitationAnalysisV1ReportsCitationAnalysisPostParams as AccuracyCitationAnalysisV1ReportsCitationAnalysisPostParams -from .accuracy_topic_ids_v1_reports_topic_ids_post_response import AccuracyTopicIdsV1ReportsTopicIdsPostResponse as AccuracyTopicIdsV1ReportsTopicIdsPostResponse -from .accuracy_topic_ids_v1_reports_topic_ids_post_params import AccuracyTopicIdsV1ReportsTopicIdsPostParams as AccuracyTopicIdsV1ReportsTopicIdsPostParams -from .accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_response import AccuracyInaccurateThemesV1ReportsInaccurateThemesPostResponse as AccuracyInaccurateThemesV1ReportsInaccurateThemesPostResponse -from .accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_params import AccuracyInaccurateThemesV1ReportsInaccurateThemesPostParams as AccuracyInaccurateThemesV1ReportsInaccurateThemesPostParams -from .accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_response import AccuracyInaccurateClustersV1ReportsInaccurateClustersPostResponse as AccuracyInaccurateClustersV1ReportsInaccurateClustersPostResponse -from .accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_params import AccuracyInaccurateClustersV1ReportsInaccurateClustersPostParams as AccuracyInaccurateClustersV1ReportsInaccurateClustersPostParams -from .accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_response import AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostResponse as AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostResponse -from .accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_params import AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostParams as AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostParams -from .accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_response import AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostResponse as AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostResponse -from .accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_params import AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostParams as AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostParams -from .accuracy_claim_breakdown_v1_reports_claim_breakdown_post_response import AccuracyClaimBreakdownV1ReportsClaimBreakdownPostResponse as AccuracyClaimBreakdownV1ReportsClaimBreakdownPostResponse -from .accuracy_claim_breakdown_v1_reports_claim_breakdown_post_params import AccuracyClaimBreakdownV1ReportsClaimBreakdownPostParams as AccuracyClaimBreakdownV1ReportsClaimBreakdownPostParams -from .accuracy_claim_citations_v1_reports_claim_citations_post_response import AccuracyClaimCitationsV1ReportsClaimCitationsPostResponse as AccuracyClaimCitationsV1ReportsClaimCitationsPostResponse -from .accuracy_claim_citations_v1_reports_claim_citations_post_params import AccuracyClaimCitationsV1ReportsClaimCitationsPostParams as AccuracyClaimCitationsV1ReportsClaimCitationsPostParams -from .accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_response import AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostResponse as AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostResponse -from .accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_params import AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostParams as AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostParams -from .accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_response import AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostResponse as AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostResponse -from .accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_params import AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostParams as AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostParams -from .accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_response import AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostResponse as AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostResponse -from .accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_params import AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostParams as AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostParams diff --git a/src/types/reports/accuracy_breakdown_query.py b/src/types/reports/accuracy_breakdown_query.py deleted file mode 100644 index c3fd68fc..00000000 --- a/src/types/reports/accuracy_breakdown_query.py +++ /dev/null @@ -1,55 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Optional -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["AccuracyBreakdownQuery"] - - -class AccuracyBreakdownQuery(BaseModel): - - start_date: str - - end_date: str - - comparison_start_date: Optional[str] = None - - comparison_end_date: Optional[str] = None - - category_id: str - - topic_ids: Optional[List[str]] = None - - exclude_topic_ids: Optional[bool] = None - - tag_ids: Optional[List[str]] = None - - tag_filter_type: Optional[Literal["all", "any"]] = None - - include_no_tag: Optional[bool] = None - - region_ids: Optional[List[str]] = None - - platform_ids: Optional[List[str]] = None - - persona_ids: Optional[List[str]] = None - - include_no_persona: Optional[bool] = None - - prompt_ids: Optional[List[str]] = None - - citation_categories: Optional[List[str]] = None - - breakdown_by: Optional[Literal["citation", "platform", "topic", "prompt", "tag", "region", "persona"]] = None - - limit: Optional[int] = None - - offset: Optional[int] = None - - search_query: Optional[str] = None - - sort_by: Optional[Literal["citationShare", "accuracy"]] = None - - sort_order: Optional[Literal["asc", "desc"]] = None diff --git a/src/types/reports/accuracy_breakdown_v1_reports_breakdown_post_params.py b/src/types/reports/accuracy_breakdown_v1_reports_breakdown_post_params.py deleted file mode 100644 index 0892754f..00000000 --- a/src/types/reports/accuracy_breakdown_v1_reports_breakdown_post_params.py +++ /dev/null @@ -1,56 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Iterable, Optional -from typing_extensions import Literal, Required, TypedDict -from ..._types import SequenceNotStr - -__all__ = ["AccuracyBreakdownV1ReportsBreakdownPostParams"] - - -class AccuracyBreakdownV1ReportsBreakdownPostParams(TypedDict, total=False): - - start_date: Required[str] - - end_date: Required[str] - - comparison_start_date: Optional[str] - - comparison_end_date: Optional[str] - - category_id: Required[str] - - topic_ids: Optional[Iterable[str]] - - exclude_topic_ids: bool - - tag_ids: Optional[Iterable[str]] - - tag_filter_type: Literal["all", "any"] - - include_no_tag: bool - - region_ids: Optional[Iterable[str]] - - platform_ids: Optional[Iterable[str]] - - persona_ids: Optional[Iterable[str]] - - include_no_persona: bool - - prompt_ids: Optional[Iterable[str]] - - citation_categories: Optional[SequenceNotStr[str]] - - breakdown_by: Literal["citation", "platform", "topic", "prompt", "tag", "region", "persona"] - - limit: int - - offset: int - - search_query: Optional[str] - - sort_by: Literal["citationShare", "accuracy"] - - sort_order: Literal["asc", "desc"] diff --git a/src/types/reports/accuracy_breakdown_v1_reports_breakdown_post_response.py b/src/types/reports/accuracy_breakdown_v1_reports_breakdown_post_response.py deleted file mode 100644 index a51cfc7f..00000000 --- a/src/types/reports/accuracy_breakdown_v1_reports_breakdown_post_response.py +++ /dev/null @@ -1,40 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Optional - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["AccuracyBreakdownV1ReportsBreakdownPostResponse", "AccuracyBreakdownRow"] - - -class AccuracyBreakdownRow(BaseModel): - - id: str - - name: str - - share: float - - shareChange: Optional[float] = None - - responseAccuracy: float - - accuracyChange: Optional[float] = None - - inaccurateCount: int - - inaccurateCountChange: Optional[int] = None - - promptCount: Optional[int] = None - - citationCategory: Optional[str] = None - - - -class AccuracyBreakdownV1ReportsBreakdownPostResponse(BaseModel): - - data: List[AccuracyBreakdownRow] - - total_count: int = FieldInfo(alias="totalCount") diff --git a/src/types/reports/accuracy_citation_analysis_query.py b/src/types/reports/accuracy_citation_analysis_query.py deleted file mode 100644 index 6b522d3d..00000000 --- a/src/types/reports/accuracy_citation_analysis_query.py +++ /dev/null @@ -1,17 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - - -from ..._models import BaseModel - -__all__ = ["AccuracyCitationAnalysisQuery"] - - -class AccuracyCitationAnalysisQuery(BaseModel): - - category_id: str - - clean_href: str - - start_date: str - - end_date: str diff --git a/src/types/reports/accuracy_citation_analysis_v1_reports_citation_analysis_post_params.py b/src/types/reports/accuracy_citation_analysis_v1_reports_citation_analysis_post_params.py deleted file mode 100644 index f61c3696..00000000 --- a/src/types/reports/accuracy_citation_analysis_v1_reports_citation_analysis_post_params.py +++ /dev/null @@ -1,18 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing_extensions import Required, TypedDict - -__all__ = ["AccuracyCitationAnalysisV1ReportsCitationAnalysisPostParams"] - - -class AccuracyCitationAnalysisV1ReportsCitationAnalysisPostParams(TypedDict, total=False): - - category_id: Required[str] - - clean_href: Required[str] - - start_date: Required[str] - - end_date: Required[str] diff --git a/src/types/reports/accuracy_citation_analysis_v1_reports_citation_analysis_post_response.py b/src/types/reports/accuracy_citation_analysis_v1_reports_citation_analysis_post_response.py deleted file mode 100644 index 2af156fe..00000000 --- a/src/types/reports/accuracy_citation_analysis_v1_reports_citation_analysis_post_response.py +++ /dev/null @@ -1,61 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import List, Optional -from typing_extensions import Literal - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["AccuracyCitationAnalysisV1ReportsCitationAnalysisPostResponse", "AccuracyCitationClaim", "AccuracyCitationEvidence"] - - -class AccuracyCitationEvidence(BaseModel): - - kbName: Optional[str] = None - - kbPath: Optional[str] = None - - kbSnippet: Optional[str] = None - -class AccuracyCitationClaim(BaseModel): - - claimId: str - - claim: str - - attributeId: str - - attribute: str - - neutralThemeId: str - - neutralTheme: str - - snippet: str - - polarity: Optional[Literal["positive", "negative"]] = None - - kbPath: Optional[str] = None - - kbSnippet: Optional[str] = None - - reasoning: Optional[str] = None - - evidence: Optional[List[AccuracyCitationEvidence]] = None - - - -class AccuracyCitationAnalysisV1ReportsCitationAnalysisPostResponse(BaseModel): - - href: str - - domain: str - - page_title: str = FieldInfo(alias="pageTitle") - - markdown_content: str = FieldInfo(alias="markdownContent") - - claims: Optional[List[AccuracyCitationClaim]] = None diff --git a/src/types/reports/accuracy_claim_breakdown_v1_reports_claim_breakdown_post_params.py b/src/types/reports/accuracy_claim_breakdown_v1_reports_claim_breakdown_post_params.py deleted file mode 100644 index 30e6d0ef..00000000 --- a/src/types/reports/accuracy_claim_breakdown_v1_reports_claim_breakdown_post_params.py +++ /dev/null @@ -1,46 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Iterable, Optional -from typing_extensions import Literal, Required, TypedDict -from ..._types import SequenceNotStr - -__all__ = ["AccuracyClaimBreakdownV1ReportsClaimBreakdownPostParams"] - - -class AccuracyClaimBreakdownV1ReportsClaimBreakdownPostParams(TypedDict, total=False): - - start_date: Required[str] - - end_date: Required[str] - - comparison_start_date: Optional[str] - - comparison_end_date: Optional[str] - - category_id: Required[str] - - topic_ids: Optional[Iterable[str]] - - exclude_topic_ids: bool - - tag_ids: Optional[Iterable[str]] - - tag_filter_type: Literal["all", "any"] - - include_no_tag: bool - - region_ids: Optional[Iterable[str]] - - platform_ids: Optional[Iterable[str]] - - persona_ids: Optional[Iterable[str]] - - include_no_persona: bool - - prompt_ids: Optional[Iterable[str]] - - citation_categories: Optional[SequenceNotStr[str]] - - cluster_id: Required[str] diff --git a/src/types/reports/accuracy_claim_breakdown_v1_reports_claim_breakdown_post_response.py b/src/types/reports/accuracy_claim_breakdown_v1_reports_claim_breakdown_post_response.py deleted file mode 100644 index ff8812dd..00000000 --- a/src/types/reports/accuracy_claim_breakdown_v1_reports_claim_breakdown_post_response.py +++ /dev/null @@ -1,60 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Optional - -from ..._models import BaseModel - -__all__ = ["AccuracyClaimBreakdownV1ReportsClaimBreakdownPostResponse", "ClaimBreakdownRow", "ClaimPromptBreakdownRow"] - - -class ClaimPromptBreakdownRow(BaseModel): - - id: str - - label: str - - responseCount: int - - totalResponseCount: int - - responseShare: float - - responseShareDelta: Optional[float] = None - - prevResponseCount: int - - prevTotalResponseCount: int - - promptId: str - - promptText: str - - topicId: str - - hasCurrent: bool - -class ClaimBreakdownRow(BaseModel): - - id: str - - label: str - - responseCount: int - - totalResponseCount: int - - responseShare: float - - responseShareDelta: Optional[float] = None - - prevResponseCount: int - - prevTotalResponseCount: int - - - -class AccuracyClaimBreakdownV1ReportsClaimBreakdownPostResponse(BaseModel): - - platform: List[ClaimBreakdownRow] - - prompt: List[ClaimPromptBreakdownRow] diff --git a/src/types/reports/accuracy_claim_citations_v1_reports_claim_citations_post_params.py b/src/types/reports/accuracy_claim_citations_v1_reports_claim_citations_post_params.py deleted file mode 100644 index 24dea6a8..00000000 --- a/src/types/reports/accuracy_claim_citations_v1_reports_claim_citations_post_params.py +++ /dev/null @@ -1,54 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Iterable, Optional -from typing_extensions import Literal, Required, TypedDict -from ..._types import SequenceNotStr - -__all__ = ["AccuracyClaimCitationsV1ReportsClaimCitationsPostParams"] - - -class AccuracyClaimCitationsV1ReportsClaimCitationsPostParams(TypedDict, total=False): - - start_date: Required[str] - - end_date: Required[str] - - comparison_start_date: Optional[str] - - comparison_end_date: Optional[str] - - category_id: Required[str] - - topic_ids: Optional[Iterable[str]] - - exclude_topic_ids: bool - - tag_ids: Optional[Iterable[str]] - - tag_filter_type: Literal["all", "any"] - - include_no_tag: bool - - region_ids: Optional[Iterable[str]] - - platform_ids: Optional[Iterable[str]] - - persona_ids: Optional[Iterable[str]] - - include_no_persona: bool - - prompt_ids: Optional[Iterable[str]] - - citation_categories: Optional[SequenceNotStr[str]] - - cluster_id: Required[str] - - limit: int - - offset: int - - search_query: Optional[str] - - sort_order: Literal["asc", "desc"] diff --git a/src/types/reports/accuracy_claim_citations_v1_reports_claim_citations_post_response.py b/src/types/reports/accuracy_claim_citations_v1_reports_claim_citations_post_response.py deleted file mode 100644 index afc94255..00000000 --- a/src/types/reports/accuracy_claim_citations_v1_reports_claim_citations_post_response.py +++ /dev/null @@ -1,38 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Optional - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["AccuracyClaimCitationsV1ReportsClaimCitationsPostResponse", "ClaimCitationRow"] - - -class ClaimCitationRow(BaseModel): - - href: str - - hostname: str - - path: str - - citationCategory: str - - domainCategory: str - - snippet: str - - citationCount: float - - citationShare: float - - citationShareDelta: Optional[float] = None - - - -class AccuracyClaimCitationsV1ReportsClaimCitationsPostResponse(BaseModel): - - data: List[ClaimCitationRow] - - total_count: int = FieldInfo(alias="totalCount") diff --git a/src/types/reports/accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_params.py b/src/types/reports/accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_params.py deleted file mode 100644 index 84e99da7..00000000 --- a/src/types/reports/accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_params.py +++ /dev/null @@ -1,22 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing_extensions import Required, TypedDict - -__all__ = ["AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostParams"] - - -class AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostParams(TypedDict, total=False): - - category_id: Required[str] - - cluster_id: Required[str] - - start_date: Required[str] - - end_date: Required[str] - - limit: int - - offset: int diff --git a/src/types/reports/accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_response.py b/src/types/reports/accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_response.py deleted file mode 100644 index f9372da2..00000000 --- a/src/types/reports/accuracy_cluster_example_runs_v1_reports_cluster_example_runs_post_response.py +++ /dev/null @@ -1,32 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostResponse", "ClusterExampleRun"] - - -class ClusterExampleRun(BaseModel): - - runId: str - - claim: str - - responseSnippet: str - - modelId: str - - regionId: str - - createdAt: str - - - -class AccuracyClusterExampleRunsV1ReportsClusterExampleRunsPostResponse(BaseModel): - - data: List[ClusterExampleRun] - - total_count: int = FieldInfo(alias="totalCount") diff --git a/src/types/reports/accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_params.py b/src/types/reports/accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_params.py deleted file mode 100644 index 42a8874c..00000000 --- a/src/types/reports/accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_params.py +++ /dev/null @@ -1,14 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing_extensions import Required, TypedDict - -__all__ = ["AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostParams"] - - -class AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostParams(TypedDict, total=False): - - category_id: Required[str] - - cluster_id: Required[str] diff --git a/src/types/reports/accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_response.py b/src/types/reports/accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_response.py deleted file mode 100644 index bde17c6a..00000000 --- a/src/types/reports/accuracy_cluster_verification_pairs_v1_reports_cluster_verification_pairs_post_response.py +++ /dev/null @@ -1,32 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Optional - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostResponse", "ClusterVerificationPair"] - - -class ClusterVerificationPair(BaseModel): - - pairId: str - - snippetIdx: int - - kbPath: str - - quote: str - - reasoning: str - - sourceUpdatedAt: Optional[str] = None - - - -class AccuracyClusterVerificationPairsV1ReportsClusterVerificationPairsPostResponse(BaseModel): - - data: List[ClusterVerificationPair] - - cluster_reasoning: Optional[str] = FieldInfo(alias="clusterReasoning", default=None) diff --git a/src/types/reports/accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_params.py b/src/types/reports/accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_params.py deleted file mode 100644 index d23c53df..00000000 --- a/src/types/reports/accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_params.py +++ /dev/null @@ -1,12 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing_extensions import Required, TypedDict - -__all__ = ["AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostParams"] - - -class AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostParams(TypedDict, total=False): - - category_id: Required[str] diff --git a/src/types/reports/accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_response.py b/src/types/reports/accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_response.py deleted file mode 100644 index eb7a4637..00000000 --- a/src/types/reports/accuracy_factcheck_setup_status_v1_reports_factcheck_setup_status_post_response.py +++ /dev/null @@ -1,22 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Optional - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostResponse"] - - -class AccuracyFactcheckSetupStatusV1ReportsFactcheckSetupStatusPostResponse(BaseModel): - - active_accuracy_prompt_count: int = FieldInfo(alias="activeAccuracyPromptCount") - - has_verification_data: bool = FieldInfo(alias="hasVerificationData") - - is_setup_complete: bool = FieldInfo(alias="isSetupComplete") - - setup_created_at: Optional[str] = FieldInfo(alias="setupCreatedAt", default=None) - - setup_knowledge_base_id: Optional[str] = FieldInfo(alias="setupKnowledgeBaseId", default=None) diff --git a/src/types/reports/accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_params.py b/src/types/reports/accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_params.py deleted file mode 100644 index 76cbe0c8..00000000 --- a/src/types/reports/accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_params.py +++ /dev/null @@ -1,46 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Iterable, Optional -from typing_extensions import Literal, Required, TypedDict -from ..._types import SequenceNotStr - -__all__ = ["AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostParams"] - - -class AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostParams(TypedDict, total=False): - - start_date: Required[str] - - end_date: Required[str] - - comparison_start_date: Optional[str] - - comparison_end_date: Optional[str] - - category_id: Required[str] - - topic_ids: Optional[Iterable[str]] - - exclude_topic_ids: bool - - tag_ids: Optional[Iterable[str]] - - tag_filter_type: Literal["all", "any"] - - include_no_tag: bool - - region_ids: Optional[Iterable[str]] - - platform_ids: Optional[Iterable[str]] - - persona_ids: Optional[Iterable[str]] - - include_no_persona: bool - - prompt_ids: Optional[Iterable[str]] - - citation_categories: Optional[SequenceNotStr[str]] - - limit: int diff --git a/src/types/reports/accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_response.py b/src/types/reports/accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_response.py deleted file mode 100644 index 39dfff92..00000000 --- a/src/types/reports/accuracy_inaccuracy_drivers_v1_reports_inaccuracy_drivers_post_response.py +++ /dev/null @@ -1,38 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Optional - -from ..._models import BaseModel - -__all__ = ["AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostResponse", "InaccuracyDriverRow"] - - -class InaccuracyDriverRow(BaseModel): - - rowId: str - - clusterId: str - - canonicalClaim: str - - snippet: str - - snippetClaimId: str - - claimOccurrence: float - - claimOccurrenceDelta: Optional[float] = None - - href: str - - citationCategory: str - - domainCategory: str - - citationCount: int - - - -class AccuracyInaccuracyDriversV1ReportsInaccuracyDriversPostResponse(BaseModel): - - data: List[InaccuracyDriverRow] diff --git a/src/types/reports/accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_params.py b/src/types/reports/accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_params.py deleted file mode 100644 index 9b3faee4..00000000 --- a/src/types/reports/accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_params.py +++ /dev/null @@ -1,52 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Iterable, Optional -from typing_extensions import Literal, Required, TypedDict -from ..._types import SequenceNotStr - -__all__ = ["AccuracyInaccurateClustersV1ReportsInaccurateClustersPostParams"] - - -class AccuracyInaccurateClustersV1ReportsInaccurateClustersPostParams(TypedDict, total=False): - - start_date: Required[str] - - end_date: Required[str] - - comparison_start_date: Optional[str] - - comparison_end_date: Optional[str] - - category_id: Required[str] - - topic_ids: Optional[Iterable[str]] - - exclude_topic_ids: bool - - tag_ids: Optional[Iterable[str]] - - tag_filter_type: Literal["all", "any"] - - include_no_tag: bool - - region_ids: Optional[Iterable[str]] - - platform_ids: Optional[Iterable[str]] - - persona_ids: Optional[Iterable[str]] - - include_no_persona: bool - - prompt_ids: Optional[Iterable[str]] - - citation_categories: Optional[SequenceNotStr[str]] - - theme_id: Required[str] - - limit: int - - offset: int - - search_query: Optional[str] diff --git a/src/types/reports/accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_response.py b/src/types/reports/accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_response.py deleted file mode 100644 index ddff6031..00000000 --- a/src/types/reports/accuracy_inaccurate_clusters_v1_reports_inaccurate_clusters_post_response.py +++ /dev/null @@ -1,44 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Optional - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["AccuracyInaccurateClustersV1ReportsInaccurateClustersPostResponse", "InaccurateClusterRow"] - - -class InaccurateClusterRow(BaseModel): - - clusterId: str - - canonicalClaim: str - - description: Optional[str] = None - - kbPath: str - - kbSnippet: str - - reasoning: str - - claimCount: int - - responseCount: int - - totalResponseCount: int - - responseShare: float - - responseShareDelta: Optional[float] = None - - citationHostnames: List[str] - - - -class AccuracyInaccurateClustersV1ReportsInaccurateClustersPostResponse(BaseModel): - - data: List[InaccurateClusterRow] - - total_count: int = FieldInfo(alias="totalCount") diff --git a/src/types/reports/accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_params.py b/src/types/reports/accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_params.py deleted file mode 100644 index 36e6c494..00000000 --- a/src/types/reports/accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_params.py +++ /dev/null @@ -1,54 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Iterable, Optional -from typing_extensions import Literal, Required, TypedDict -from ..._types import SequenceNotStr - -__all__ = ["AccuracyInaccurateThemesV1ReportsInaccurateThemesPostParams"] - - -class AccuracyInaccurateThemesV1ReportsInaccurateThemesPostParams(TypedDict, total=False): - - start_date: Required[str] - - end_date: Required[str] - - comparison_start_date: Optional[str] - - comparison_end_date: Optional[str] - - category_id: Required[str] - - topic_ids: Optional[Iterable[str]] - - exclude_topic_ids: bool - - tag_ids: Optional[Iterable[str]] - - tag_filter_type: Literal["all", "any"] - - include_no_tag: bool - - region_ids: Optional[Iterable[str]] - - platform_ids: Optional[Iterable[str]] - - persona_ids: Optional[Iterable[str]] - - include_no_persona: bool - - prompt_ids: Optional[Iterable[str]] - - citation_categories: Optional[SequenceNotStr[str]] - - limit: int - - offset: int - - sort_by: Literal["response_share"] - - sort_order: Literal["asc", "desc"] - - search_query: Optional[str] diff --git a/src/types/reports/accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_response.py b/src/types/reports/accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_response.py deleted file mode 100644 index 593d812b..00000000 --- a/src/types/reports/accuracy_inaccurate_themes_v1_reports_inaccurate_themes_post_response.py +++ /dev/null @@ -1,42 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Optional - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["AccuracyInaccurateThemesV1ReportsInaccurateThemesPostResponse", "InaccurateThemeRow"] - - -class InaccurateThemeRow(BaseModel): - - themeId: str - - neutralTheme: str - - description: Optional[str] = None - - inaccurateClaimCount: int - - inaccurateClusterCount: int - - totalClaimCount: int - - totalClusterCount: int - - responseCount: int - - totalResponseCount: int - - responseShare: float - - responseShareDelta: Optional[float] = None - - - -class AccuracyInaccurateThemesV1ReportsInaccurateThemesPostResponse(BaseModel): - - data: List[InaccurateThemeRow] - - total_count: int = FieldInfo(alias="totalCount") diff --git a/src/types/reports/accuracy_overview_query.py b/src/types/reports/accuracy_overview_query.py deleted file mode 100644 index 5df1e864..00000000 --- a/src/types/reports/accuracy_overview_query.py +++ /dev/null @@ -1,47 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Optional -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["AccuracyOverviewQuery"] - - -class AccuracyOverviewQuery(BaseModel): - - start_date: str - - end_date: str - - comparison_start_date: Optional[str] = None - - comparison_end_date: Optional[str] = None - - category_id: str - - topic_ids: Optional[List[str]] = None - - exclude_topic_ids: Optional[bool] = None - - tag_ids: Optional[List[str]] = None - - tag_filter_type: Optional[Literal["all", "any"]] = None - - include_no_tag: Optional[bool] = None - - region_ids: Optional[List[str]] = None - - platform_ids: Optional[List[str]] = None - - persona_ids: Optional[List[str]] = None - - include_no_persona: Optional[bool] = None - - prompt_ids: Optional[List[str]] = None - - citation_categories: Optional[List[str]] = None - - date_bucket: Optional[str] = None - - group_by: Optional[Literal["period", "theme"]] = None diff --git a/src/types/reports/accuracy_overview_v1_reports_overview_post_params.py b/src/types/reports/accuracy_overview_v1_reports_overview_post_params.py deleted file mode 100644 index dace8a7b..00000000 --- a/src/types/reports/accuracy_overview_v1_reports_overview_post_params.py +++ /dev/null @@ -1,48 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Iterable, Optional -from typing_extensions import Literal, Required, TypedDict -from ..._types import SequenceNotStr - -__all__ = ["AccuracyOverviewV1ReportsOverviewPostParams"] - - -class AccuracyOverviewV1ReportsOverviewPostParams(TypedDict, total=False): - - start_date: Required[str] - - end_date: Required[str] - - comparison_start_date: Optional[str] - - comparison_end_date: Optional[str] - - category_id: Required[str] - - topic_ids: Optional[Iterable[str]] - - exclude_topic_ids: bool - - tag_ids: Optional[Iterable[str]] - - tag_filter_type: Literal["all", "any"] - - include_no_tag: bool - - region_ids: Optional[Iterable[str]] - - platform_ids: Optional[Iterable[str]] - - persona_ids: Optional[Iterable[str]] - - include_no_persona: bool - - prompt_ids: Optional[Iterable[str]] - - citation_categories: Optional[SequenceNotStr[str]] - - date_bucket: Optional[str] - - group_by: Literal["period", "theme"] diff --git a/src/types/reports/accuracy_overview_v1_reports_overview_post_response.py b/src/types/reports/accuracy_overview_v1_reports_overview_post_response.py deleted file mode 100644 index d78d4db0..00000000 --- a/src/types/reports/accuracy_overview_v1_reports_overview_post_response.py +++ /dev/null @@ -1,78 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import List, Optional - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["AccuracyOverviewV1ReportsOverviewPostResponse", "AccuracyTrendPoint", "AccuracyScoreBreakdown", "AccuracyThemeTrendSeries", "AccuracyThemeTrendPoint", "AccuracyTrendSeriesMeta"] - - -class AccuracyTrendSeriesMeta(BaseModel): - - id: str - - label: str - - total: int - -class AccuracyThemeTrendPoint(BaseModel): - - date: str - - total: int - - accurate: int - - ratio: float - -class AccuracyThemeTrendSeries(BaseModel): - - id: str - - label: str - - data: List[AccuracyThemeTrendPoint] - -class AccuracyScoreBreakdown(BaseModel): - - status: str - - count: int - - share: float - - countChange: Optional[int] = None - - shareChange: Optional[float] = None - -class AccuracyTrendPoint(BaseModel): - - date: str - - total: int - - accurate: int - - ratio: float - - prevPeriodData: Optional[AccuracyTrendPoint] = None - - - -class AccuracyOverviewV1ReportsOverviewPostResponse(BaseModel): - - trend_by_period: List[AccuracyTrendPoint] = FieldInfo(alias="trendByPeriod") - - overall_accuracy: float = FieldInfo(alias="overallAccuracy") - - accuracy_change: Optional[float] = FieldInfo(alias="accuracyChange", default=None) - - score_breakdown: List[AccuracyScoreBreakdown] = FieldInfo(alias="scoreBreakdown") - - theme_trend: Optional[List[AccuracyThemeTrendSeries]] = FieldInfo(alias="themeTrend", default=None) - - available_series: Optional[List[AccuracyTrendSeriesMeta]] = FieldInfo(alias="availableSeries", default=None) diff --git a/src/types/reports/accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_params.py b/src/types/reports/accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_params.py deleted file mode 100644 index 9718e08d..00000000 --- a/src/types/reports/accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_params.py +++ /dev/null @@ -1,46 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Iterable, Optional -from typing_extensions import Literal, Required, TypedDict -from ..._types import SequenceNotStr - -__all__ = ["AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostParams"] - - -class AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostParams(TypedDict, total=False): - - start_date: Required[str] - - end_date: Required[str] - - comparison_start_date: Optional[str] - - comparison_end_date: Optional[str] - - category_id: Required[str] - - topic_ids: Optional[Iterable[str]] - - exclude_topic_ids: bool - - tag_ids: Optional[Iterable[str]] - - tag_filter_type: Literal["all", "any"] - - include_no_tag: bool - - region_ids: Optional[Iterable[str]] - - platform_ids: Optional[Iterable[str]] - - persona_ids: Optional[Iterable[str]] - - include_no_persona: bool - - prompt_ids: Optional[Iterable[str]] - - citation_categories: Optional[SequenceNotStr[str]] - - limit: int diff --git a/src/types/reports/accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_response.py b/src/types/reports/accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_response.py deleted file mode 100644 index b4d577b0..00000000 --- a/src/types/reports/accuracy_top_inaccurate_claims_v1_reports_top_inaccurate_claims_post_response.py +++ /dev/null @@ -1,24 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Optional - -from ..._models import BaseModel - -__all__ = ["AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostResponse", "TopInaccurateClaimRow"] - - -class TopInaccurateClaimRow(BaseModel): - - clusterId: str - - canonicalClaim: str - - claimOccurrence: float - - claimOccurrenceDelta: Optional[float] = None - - - -class AccuracyTopInaccurateClaimsV1ReportsTopInaccurateClaimsPostResponse(BaseModel): - - data: List[TopInaccurateClaimRow] diff --git a/src/types/reports/accuracy_topic_ids_query.py b/src/types/reports/accuracy_topic_ids_query.py deleted file mode 100644 index bbb3d90b..00000000 --- a/src/types/reports/accuracy_topic_ids_query.py +++ /dev/null @@ -1,15 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - - -from ..._models import BaseModel - -__all__ = ["AccuracyTopicIdsQuery"] - - -class AccuracyTopicIdsQuery(BaseModel): - - category_id: str - - start_date: str - - end_date: str diff --git a/src/types/reports/accuracy_topic_ids_v1_reports_topic_ids_post_params.py b/src/types/reports/accuracy_topic_ids_v1_reports_topic_ids_post_params.py deleted file mode 100644 index 3d25ca7c..00000000 --- a/src/types/reports/accuracy_topic_ids_v1_reports_topic_ids_post_params.py +++ /dev/null @@ -1,16 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing_extensions import Required, TypedDict - -__all__ = ["AccuracyTopicIdsV1ReportsTopicIdsPostParams"] - - -class AccuracyTopicIdsV1ReportsTopicIdsPostParams(TypedDict, total=False): - - category_id: Required[str] - - start_date: Required[str] - - end_date: Required[str] diff --git a/src/types/reports/accuracy_topic_ids_v1_reports_topic_ids_post_response.py b/src/types/reports/accuracy_topic_ids_v1_reports_topic_ids_post_response.py deleted file mode 100644 index 85bfa955..00000000 --- a/src/types/reports/accuracy_topic_ids_v1_reports_topic_ids_post_response.py +++ /dev/null @@ -1,8 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List -from typing_extensions import TypeAlias - -__all__ = ["AccuracyTopicIdsV1ReportsTopicIdsPostResponse"] - -AccuracyTopicIdsV1ReportsTopicIdsPostResponse: TypeAlias = List[str] diff --git a/src/types/reports/bot_create_report_v2_v2_reports_post_params.py b/src/types/reports/bot_create_report_v2_v2_reports_post_params.py deleted file mode 100644 index c7e30a05..00000000 --- a/src/types/reports/bot_create_report_v2_v2_reports_post_params.py +++ /dev/null @@ -1,75 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Dict, Iterable, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..pagination import Pagination -from ..path_filter import PathFilter -from ..bot_name_filter import BotNameFilter -from ..bot_provider_filter import BotProviderFilter -from ..._utils import PropertyInfo - -__all__ = ["BotCreateReportV2V2ReportsPostParams", "NumericMetricFilter", "BotTypeFilter"] - - -class BotCreateReportV2V2ReportsPostParams(TypedDict, total=False): - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - """Date interval for the report. (only used with date dimension)""" - - dimensions: Iterable[Literal["date", "hour", "path", "bot_name", "bot_provider", "bot_type"]] - """Dimensions to group the report by.""" - - metrics: Required[Iterable[Literal["count", "citations", "indexing", "training", "last_visit"]]] - - order_by: Dict[str, Literal["asc", "desc"]] - """ - - Custom ordering of the report results. - - The order is a record of key-value pairs where: - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. - - When not specified, the default order is the first metric in the query descending. - """ - - pagination: Pagination - """Pagination settings for the report results.""" - - domain: Required[str] - """Domain to query logs for.""" - - start_date: Required[Union[str, datetime]] - """Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp.""" - - end_date: Union[str, datetime] - """End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted.""" - - organization_id: Optional[str] - - metric_filters: Iterable[NumericMetricFilter] - """Numeric filters applied after report metrics are calculated.""" - - filters: Iterable[Annotated[Union[PathFilter, BotNameFilter, BotProviderFilter, BotTypeFilter], PropertyInfo(discriminator="field")]] - """Filters for bots report.""" - - -class BotTypeFilter(TypedDict, total=False): - - field: Required[Literal["bot_type"]] - - operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[Literal["ai_assistant", "ai_training", "index", "ai_agent"], Iterable[Literal["ai_assistant", "ai_training", "index", "ai_agent"]]]] - -class NumericMetricFilter(TypedDict, total=False): - - field: Required[str] - - operator: Required[Literal[">", ">=", "<", "<=", "=", "==", "!="]] - - value: Required[Union[int, float]] - diff --git a/src/types/reports/bots_report_query.py b/src/types/reports/bots_report_query.py deleted file mode 100644 index 5c5959ca..00000000 --- a/src/types/reports/bots_report_query.py +++ /dev/null @@ -1,67 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Dict, List, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal -from ..._utils import PropertyInfo - -from ..._models import BaseModel -from ..pagination import Pagination -from ..path_filter import PathFilter -from ..bot_name_filter import BotNameFilter -from ..bot_provider_filter import BotProviderFilter - -__all__ = ["BotsReportQuery", "NumericMetricFilter"] - - -class NumericMetricFilter(BaseModel): - - field: str - - operator: Literal[">", ">=", "<", "<=", "=", "==", "!="] - - value: Union[int, float] - - - -class BotsReportQuery(BaseModel): - - date_interval: Optional[Literal["hour", "day", "week", "month", "year", "relative_week"]] = None - """Date interval for the report. (only used with date dimension)""" - - dimensions: Optional[List[Literal["date", "path", "bot_name", "bot_provider"]]] = None - """Dimensions to group the report by.""" - - metrics: List[Literal["count", "citations", "indexing", "training", "last_visit"]] - - order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None - """ - - Custom ordering of the report results. - - The order is a record of key-value pairs where: - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. - - When not specified, the default order is the first metric in the query descending. - """ - - pagination: Optional[Pagination] = None - """Pagination settings for the report results.""" - - domain: str - """Domain to query logs for.""" - - start_date: datetime - """Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp.""" - - end_date: Optional[datetime] = None - """End date for logs. Accepts same formats as start_date. Defaults to now if omitted.""" - - organization_id: Optional[str] = None - - metric_filters: Optional[List[NumericMetricFilter]] = None - """Numeric filters applied after report metrics are calculated.""" - - filters: Optional[List[Annotated[Union[PathFilter, BotNameFilter, BotProviderFilter], PropertyInfo(discriminator="field")]]] = None - """Filters for bots report.""" diff --git a/src/types/reports/bots_report_query_v2.py b/src/types/reports/bots_report_query_v2.py deleted file mode 100644 index 9a85770f..00000000 --- a/src/types/reports/bots_report_query_v2.py +++ /dev/null @@ -1,75 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Dict, List, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal -from ..._utils import PropertyInfo - -from ..._models import BaseModel -from ..pagination import Pagination -from ..path_filter import PathFilter -from ..bot_name_filter import BotNameFilter -from ..bot_provider_filter import BotProviderFilter - -__all__ = ["BotsReportQueryV2", "NumericMetricFilter", "BotTypeFilter"] - - -class BotTypeFilter(BaseModel): - - field: Literal["bot_type"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[Literal["ai_assistant", "ai_training", "index", "ai_agent"], List[Literal["ai_assistant", "ai_training", "index", "ai_agent"]]] - -class NumericMetricFilter(BaseModel): - - field: str - - operator: Literal[">", ">=", "<", "<=", "=", "==", "!="] - - value: Union[int, float] - - - -class BotsReportQueryV2(BaseModel): - - date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None - """Date interval for the report. (only used with date dimension)""" - - dimensions: Optional[List[Literal["date", "hour", "path", "bot_name", "bot_provider", "bot_type"]]] = None - """Dimensions to group the report by.""" - - metrics: List[Literal["count", "citations", "indexing", "training", "last_visit"]] - - order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None - """ - - Custom ordering of the report results. - - The order is a record of key-value pairs where: - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. - - When not specified, the default order is the first metric in the query descending. - """ - - pagination: Optional[Pagination] = None - """Pagination settings for the report results.""" - - domain: str - """Domain to query logs for.""" - - start_date: datetime - """Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp.""" - - end_date: Optional[datetime] = None - """End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted.""" - - organization_id: Optional[str] = None - - metric_filters: Optional[List[NumericMetricFilter]] = None - """Numeric filters applied after report metrics are calculated.""" - - filters: Optional[List[Annotated[Union[PathFilter, BotNameFilter, BotProviderFilter, BotTypeFilter], PropertyInfo(discriminator="field")]]] = None - """Filters for bots report.""" diff --git a/src/types/reports/brand_name_filter.py b/src/types/reports/brand_name_filter.py deleted file mode 100644 index 4974eb61..00000000 --- a/src/types/reports/brand_name_filter.py +++ /dev/null @@ -1,17 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Union -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["BrandNameFilter"] - - -class BrandNameFilter(BaseModel): - - field: Literal["brand_name"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] diff --git a/src/types/reports/citation_query_v1_reports_post_params.py b/src/types/reports/citation_query_v1_reports_post_params.py deleted file mode 100644 index 9e218208..00000000 --- a/src/types/reports/citation_query_v1_reports_post_params.py +++ /dev/null @@ -1,76 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Dict, Iterable, Union -from datetime import datetime -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._types import SequenceNotStr -from ..pagination import Pagination -from ..hostname_filter import HostnameFilter -from ..path_filter import PathFilter -from ..region_id_filter import RegionIdFilter -from ..region_name_filter import RegionNameFilter -from ..topic_id_filter import TopicIdFilter -from ..topic_name_filter import TopicNameFilter -from ..model_id_filter import ModelIdFilter -from ..tag_id_filter import TagIdFilter -from ..tag_name_filter import TagNameFilter -from ..url_filter import UrlFilter -from ..root_domain_filter import RootDomainFilter -from ..analysis_type_filter import AnalysisTypeFilter -from ..prompt_type_filter import PromptTypeFilter -from ..persona_id_filter import PersonaIdFilter -from ..prompt_filter import PromptFilter -from ..prompt_id_filter import PromptIdFilter -from ..._utils import PropertyInfo - -__all__ = ["CitationQueryV1ReportsPostParams", "CitationCategoryFilter"] - - -class CitationQueryV1ReportsPostParams(TypedDict, total=False): - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - """Date interval for the report. (only used with date dimension)""" - - dimensions: Iterable[Literal["hostname", "path", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "url", "root_domain", "persona", "citation_category"]] - """Dimensions to group the report by.""" - - metrics: Required[Iterable[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]]] - """Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead.""" - - order_by: Dict[str, Literal["asc", "desc"]] - """ - - Custom ordering of the report results. - - The order is a record of key-value pairs where: - - `key` is the field to order by, which can be a metric or dimension - - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. - - When not specified, the default order is the first metric in the query descending. - """ - - pagination: Pagination - """Pagination settings for the report results.""" - - category_id: Required[str] - - start_date: Required[Union[str, datetime]] - """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - end_date: Required[Union[str, datetime]] - """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - filters: Iterable[Annotated[Union[HostnameFilter, PathFilter, RegionIdFilter, RegionNameFilter, TopicIdFilter, TopicNameFilter, ModelIdFilter, TagIdFilter, TagNameFilter, UrlFilter, RootDomainFilter, AnalysisTypeFilter, PromptTypeFilter, PersonaIdFilter, CitationCategoryFilter, PromptFilter, PromptIdFilter], PropertyInfo(discriminator="field")]] - """List of filters to apply to the citations report.""" - - -class CitationCategoryFilter(TypedDict, total=False): - - field: Required[Literal["citation_category"]] - - operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[str, SequenceNotStr[str]]] - diff --git a/src/types/reports/citation_query_v1_reports_post_response.py b/src/types/reports/citation_query_v1_reports_post_response.py deleted file mode 100644 index 3a960a45..00000000 --- a/src/types/reports/citation_query_v1_reports_post_response.py +++ /dev/null @@ -1,24 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Optional, Union - -from ..._models import BaseModel -from ..report_info import ReportInfo - -__all__ = ["CitationQueryV1ReportsPostResponse", "CitationsResult"] - - -class CitationsResult(BaseModel): - - metrics: List[Optional[Union[int, float, str]]] - - dimensions: List[str] - - - -class CitationQueryV1ReportsPostResponse(BaseModel): - - info: ReportInfo - """Base model for report information.""" - - data: List[CitationsResult] diff --git a/src/types/reports/citation_query_v2_v2_reports_post_params.py b/src/types/reports/citation_query_v2_v2_reports_post_params.py deleted file mode 100644 index af65b4a2..00000000 --- a/src/types/reports/citation_query_v2_v2_reports_post_params.py +++ /dev/null @@ -1,55 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Iterable, Optional -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._utils import PropertyInfo - -__all__ = ["CitationQueryV2V2ReportsPostParams", "FilterNode"] - - -class CitationQueryV2V2ReportsPostParams(TypedDict, total=False): - - category_id: Required[str] - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - group_by: Iterable[Literal["page", "date", "model", "topic", "region", "persona", "prompt"]] - - metrics: Optional[Iterable[Literal["count", "citation_share", "rank", "first_cited_at"]]] - - interval: Literal["day", "week", "month"] - - scope: Literal["all", "owned"] - """`all` (every cited domain) or `owned` (only your owned domains, for easy client-side totals).""" - - filter: Optional[FilterNode] - - limit: Optional[int] - """Page size; default 10, max 50.""" - - max_results: Optional[int] - """Stream endpoint only: cap the number of streamed rows (default: all).""" - - cursor: Optional[str] - - -class FilterNode(TypedDict, total=False): - - and_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="and")] - - or_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="or")] - - not_: Annotated[Optional[FilterNode], PropertyInfo(alias="not")] - - field: Optional[str] - - op: Optional[str] - - value: str - diff --git a/src/types/reports/citation_query_v2_v2_reports_post_response.py b/src/types/reports/citation_query_v2_v2_reports_post_response.py deleted file mode 100644 index 9d417b0e..00000000 --- a/src/types/reports/citation_query_v2_v2_reports_post_response.py +++ /dev/null @@ -1,13 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing_extensions import TypeAlias -from ..._models import BaseModel - -__all__ = ["CitationQueryV2V2ReportsPostResponse", "CitationQueryV2V2ReportsPostResponse"] - -class CitationQueryV2V2ReportsPostResponse(BaseModel): - pass - - - -CitationQueryV2V2ReportsPostResponse: TypeAlias = CitationQueryV2V2ReportsPostResponse diff --git a/src/types/reports/citation_stream_v1_reports_stream_post_params.py b/src/types/reports/citation_stream_v1_reports_stream_post_params.py deleted file mode 100644 index 4bc1967d..00000000 --- a/src/types/reports/citation_stream_v1_reports_stream_post_params.py +++ /dev/null @@ -1,75 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Dict, Iterable, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._types import SequenceNotStr -from ..pagination import Pagination -from ..hostname_filter import HostnameFilter -from ..path_filter import PathFilter -from ..region_id_filter import RegionIdFilter -from ..region_name_filter import RegionNameFilter -from ..topic_id_filter import TopicIdFilter -from ..topic_name_filter import TopicNameFilter -from ..model_id_filter import ModelIdFilter -from ..tag_id_filter import TagIdFilter -from ..tag_name_filter import TagNameFilter -from ..url_filter import UrlFilter -from ..root_domain_filter import RootDomainFilter -from ..analysis_type_filter import AnalysisTypeFilter -from ..prompt_type_filter import PromptTypeFilter -from ..persona_id_filter import PersonaIdFilter -from ..prompt_filter import PromptFilter -from ..prompt_id_filter import PromptIdFilter -from ..._utils import PropertyInfo - -__all__ = ["CitationStreamV1ReportsStreamPostParams", "CitationCategoryFilter"] - - -class CitationStreamV1ReportsStreamPostParams(TypedDict, total=False): - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - """Date interval for the report. (only used with date dimension)""" - - dimensions: Iterable[Literal["hostname", "path", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "url", "root_domain", "persona", "citation_category"]] - """Dimensions to group the report by.""" - - metrics: Required[Iterable[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]]] - """Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead.""" - - order_by: Dict[str, Literal["asc", "desc"]] - """ - - Custom ordering of the report results. - - The order is a record of key-value pairs where: - - `key` is the field to order by, which can be a metric or dimension - - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. - - When not specified, the default order is the first metric in the query descending. - """ - - pagination: Optional[Pagination] - - category_id: Required[str] - - start_date: Required[Union[str, datetime]] - """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - end_date: Required[Union[str, datetime]] - """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - filters: Iterable[Annotated[Union[HostnameFilter, PathFilter, RegionIdFilter, RegionNameFilter, TopicIdFilter, TopicNameFilter, ModelIdFilter, TagIdFilter, TagNameFilter, UrlFilter, RootDomainFilter, AnalysisTypeFilter, PromptTypeFilter, PersonaIdFilter, CitationCategoryFilter, PromptFilter, PromptIdFilter], PropertyInfo(discriminator="field")]] - """List of filters to apply to the citations report.""" - - -class CitationCategoryFilter(TypedDict, total=False): - - field: Required[Literal["citation_category"]] - - operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[str, SequenceNotStr[str]]] - diff --git a/src/types/reports/citation_stream_v1_reports_stream_post_response.py b/src/types/reports/citation_stream_v1_reports_stream_post_response.py deleted file mode 100644 index 15c75420..00000000 --- a/src/types/reports/citation_stream_v1_reports_stream_post_response.py +++ /dev/null @@ -1,27 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Union -from typing_extensions import TypeAlias -from ..._models import BaseModel - -__all__ = ["CitationStreamV1ReportsStreamPostResponse", "CitationStreamV1ReportsStreamPostResponse", "Query", "CitationStreamV1ReportsStreamPostResponse2"] - -class CitationStreamV1ReportsStreamPostResponse2(BaseModel): - pass - -class Query(BaseModel): - pass - -class CitationStreamV1ReportsStreamPostResponse(BaseModel): - - query: Query - """The normalized query used to build the stream.""" - - total_rows: int - """Total number of rows available before pagination is applied.""" - - - -CitationStreamV1ReportsStreamPostResponse: TypeAlias = Union[CitationStreamV1ReportsStreamPostResponse, CitationStreamV1ReportsStreamPostResponse2] diff --git a/src/types/reports/citation_stream_v2_v2_reports_stream_post_params.py b/src/types/reports/citation_stream_v2_v2_reports_stream_post_params.py deleted file mode 100644 index a58dd2f5..00000000 --- a/src/types/reports/citation_stream_v2_v2_reports_stream_post_params.py +++ /dev/null @@ -1,55 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Iterable, Optional -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._utils import PropertyInfo - -__all__ = ["CitationStreamV2V2ReportsStreamPostParams", "FilterNode"] - - -class CitationStreamV2V2ReportsStreamPostParams(TypedDict, total=False): - - category_id: Required[str] - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - group_by: Iterable[Literal["page", "date", "model", "topic", "region", "persona", "prompt"]] - - metrics: Optional[Iterable[Literal["count", "citation_share", "rank", "first_cited_at"]]] - - interval: Literal["day", "week", "month"] - - scope: Literal["all", "owned"] - """`all` (every cited domain) or `owned` (only your owned domains, for easy client-side totals).""" - - filter: Optional[FilterNode] - - limit: Optional[int] - """Page size; default 10, max 50.""" - - max_results: Optional[int] - """Stream endpoint only: cap the number of streamed rows (default: all).""" - - cursor: Optional[str] - - -class FilterNode(TypedDict, total=False): - - and_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="and")] - - or_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="or")] - - not_: Annotated[Optional[FilterNode], PropertyInfo(alias="not")] - - field: Optional[str] - - op: Optional[str] - - value: str - diff --git a/src/types/reports/citation_stream_v2_v2_reports_stream_post_response.py b/src/types/reports/citation_stream_v2_v2_reports_stream_post_response.py deleted file mode 100644 index e12ac8f5..00000000 --- a/src/types/reports/citation_stream_v2_v2_reports_stream_post_response.py +++ /dev/null @@ -1,7 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing_extensions import TypeAlias - -__all__ = ["CitationStreamV2V2ReportsStreamPostResponse"] - -CitationStreamV2V2ReportsStreamPostResponse: TypeAlias = str diff --git a/src/types/reports/citations_query.py b/src/types/reports/citations_query.py deleted file mode 100644 index 3ba3eb12..00000000 --- a/src/types/reports/citations_query.py +++ /dev/null @@ -1,75 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Dict, List, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal -from ..._utils import PropertyInfo - -from ..._models import BaseModel -from ..pagination import Pagination -from ..hostname_filter import HostnameFilter -from ..path_filter import PathFilter -from ..region_id_filter import RegionIdFilter -from ..region_name_filter import RegionNameFilter -from ..topic_id_filter import TopicIdFilter -from ..topic_name_filter import TopicNameFilter -from ..model_id_filter import ModelIdFilter -from ..tag_id_filter import TagIdFilter -from ..tag_name_filter import TagNameFilter -from ..url_filter import UrlFilter -from ..root_domain_filter import RootDomainFilter -from ..analysis_type_filter import AnalysisTypeFilter -from ..prompt_type_filter import PromptTypeFilter -from ..persona_id_filter import PersonaIdFilter -from ..prompt_filter import PromptFilter -from ..prompt_id_filter import PromptIdFilter - -__all__ = ["CitationsQuery", "CitationCategoryFilter"] - - -class CitationCategoryFilter(BaseModel): - - field: Literal["citation_category"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] - - - -class CitationsQuery(BaseModel): - - date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None - """Date interval for the report. (only used with date dimension)""" - - dimensions: Optional[List[Literal["hostname", "path", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "url", "root_domain", "persona", "citation_category"]]] = None - """Dimensions to group the report by.""" - - metrics: List[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]] - """Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead.""" - - order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None - """ - - Custom ordering of the report results. - - The order is a record of key-value pairs where: - - `key` is the field to order by, which can be a metric or dimension - - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. - - When not specified, the default order is the first metric in the query descending. - """ - - pagination: Optional[Pagination] = None - """Pagination settings for the report results.""" - - category_id: str - - start_date: datetime - """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - end_date: datetime - """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - filters: Optional[List[Annotated[Union[HostnameFilter, PathFilter, RegionIdFilter, RegionNameFilter, TopicIdFilter, TopicNameFilter, ModelIdFilter, TagIdFilter, TagNameFilter, UrlFilter, RootDomainFilter, AnalysisTypeFilter, PromptTypeFilter, PersonaIdFilter, CitationCategoryFilter, PromptFilter, PromptIdFilter], PropertyInfo(discriminator="field")]]] = None - """List of filters to apply to the citations report.""" diff --git a/src/types/reports/citations_v2_query.py b/src/types/reports/citations_v2_query.py deleted file mode 100644 index 99280931..00000000 --- a/src/types/reports/citations_v2_query.py +++ /dev/null @@ -1,58 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import List, Optional -from typing_extensions import Literal - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["CitationsV2Query", "FilterNode"] - - -class FilterNode(BaseModel): - - and_: Optional[List[FilterNode]] = FieldInfo(alias="and", default=None) - - or_: Optional[List[FilterNode]] = FieldInfo(alias="or", default=None) - - not_: Optional[FilterNode] = FieldInfo(alias="not", default=None) - - field: Optional[str] = None - - op: Optional[str] = None - - value: Optional[str] = None - - - -class CitationsV2Query(BaseModel): - - category_id: str - - start_date: str - """YYYY-MM-DD, ET, inclusive""" - - end_date: str - """YYYY-MM-DD, ET, inclusive""" - - group_by: Optional[List[Literal["page", "date", "model", "topic", "region", "persona", "prompt"]]] = None - - metrics: Optional[List[Literal["count", "citation_share", "rank", "first_cited_at"]]] = None - - interval: Optional[Literal["day", "week", "month"]] = None - - scope: Optional[Literal["all", "owned"]] = None - """`all` (every cited domain) or `owned` (only your owned domains, for easy client-side totals).""" - - filter: Optional[FilterNode] = None - - limit: Optional[int] = None - """Page size; default 10, max 50.""" - - max_results: Optional[int] = None - """Stream endpoint only: cap the number of streamed rows (default: all).""" - - cursor: Optional[str] = None diff --git a/src/types/reports/claim_breakdown_query.py b/src/types/reports/claim_breakdown_query.py deleted file mode 100644 index e64c564b..00000000 --- a/src/types/reports/claim_breakdown_query.py +++ /dev/null @@ -1,45 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Optional -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["ClaimBreakdownQuery"] - - -class ClaimBreakdownQuery(BaseModel): - - start_date: str - - end_date: str - - comparison_start_date: Optional[str] = None - - comparison_end_date: Optional[str] = None - - category_id: str - - topic_ids: Optional[List[str]] = None - - exclude_topic_ids: Optional[bool] = None - - tag_ids: Optional[List[str]] = None - - tag_filter_type: Optional[Literal["all", "any"]] = None - - include_no_tag: Optional[bool] = None - - region_ids: Optional[List[str]] = None - - platform_ids: Optional[List[str]] = None - - persona_ids: Optional[List[str]] = None - - include_no_persona: Optional[bool] = None - - prompt_ids: Optional[List[str]] = None - - citation_categories: Optional[List[str]] = None - - cluster_id: str diff --git a/src/types/reports/claim_citations_query.py b/src/types/reports/claim_citations_query.py deleted file mode 100644 index 9125adde..00000000 --- a/src/types/reports/claim_citations_query.py +++ /dev/null @@ -1,53 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Optional -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["ClaimCitationsQuery"] - - -class ClaimCitationsQuery(BaseModel): - - start_date: str - - end_date: str - - comparison_start_date: Optional[str] = None - - comparison_end_date: Optional[str] = None - - category_id: str - - topic_ids: Optional[List[str]] = None - - exclude_topic_ids: Optional[bool] = None - - tag_ids: Optional[List[str]] = None - - tag_filter_type: Optional[Literal["all", "any"]] = None - - include_no_tag: Optional[bool] = None - - region_ids: Optional[List[str]] = None - - platform_ids: Optional[List[str]] = None - - persona_ids: Optional[List[str]] = None - - include_no_persona: Optional[bool] = None - - prompt_ids: Optional[List[str]] = None - - citation_categories: Optional[List[str]] = None - - cluster_id: str - - limit: Optional[int] = None - - offset: Optional[int] = None - - search_query: Optional[str] = None - - sort_order: Optional[Literal["asc", "desc"]] = None diff --git a/src/types/reports/cluster_example_runs_query.py b/src/types/reports/cluster_example_runs_query.py deleted file mode 100644 index a0998b71..00000000 --- a/src/types/reports/cluster_example_runs_query.py +++ /dev/null @@ -1,22 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Optional - -from ..._models import BaseModel - -__all__ = ["ClusterExampleRunsQuery"] - - -class ClusterExampleRunsQuery(BaseModel): - - category_id: str - - cluster_id: str - - start_date: str - - end_date: str - - limit: Optional[int] = None - - offset: Optional[int] = None diff --git a/src/types/reports/cluster_verification_pairs_query.py b/src/types/reports/cluster_verification_pairs_query.py deleted file mode 100644 index 0a7f2b4d..00000000 --- a/src/types/reports/cluster_verification_pairs_query.py +++ /dev/null @@ -1,13 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - - -from ..._models import BaseModel - -__all__ = ["ClusterVerificationPairsQuery"] - - -class ClusterVerificationPairsQuery(BaseModel): - - category_id: str - - cluster_id: str diff --git a/src/types/reports/fact_check_setup_status_query.py b/src/types/reports/fact_check_setup_status_query.py deleted file mode 100644 index 60b38657..00000000 --- a/src/types/reports/fact_check_setup_status_query.py +++ /dev/null @@ -1,11 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - - -from ..._models import BaseModel - -__all__ = ["FactCheckSetupStatusQuery"] - - -class FactCheckSetupStatusQuery(BaseModel): - - category_id: str diff --git a/src/types/reports/inaccuracy_drivers_query.py b/src/types/reports/inaccuracy_drivers_query.py deleted file mode 100644 index ddb47218..00000000 --- a/src/types/reports/inaccuracy_drivers_query.py +++ /dev/null @@ -1,45 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Optional -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["InaccuracyDriversQuery"] - - -class InaccuracyDriversQuery(BaseModel): - - start_date: str - - end_date: str - - comparison_start_date: Optional[str] = None - - comparison_end_date: Optional[str] = None - - category_id: str - - topic_ids: Optional[List[str]] = None - - exclude_topic_ids: Optional[bool] = None - - tag_ids: Optional[List[str]] = None - - tag_filter_type: Optional[Literal["all", "any"]] = None - - include_no_tag: Optional[bool] = None - - region_ids: Optional[List[str]] = None - - platform_ids: Optional[List[str]] = None - - persona_ids: Optional[List[str]] = None - - include_no_persona: Optional[bool] = None - - prompt_ids: Optional[List[str]] = None - - citation_categories: Optional[List[str]] = None - - limit: Optional[int] = None diff --git a/src/types/reports/inaccurate_clusters_query.py b/src/types/reports/inaccurate_clusters_query.py deleted file mode 100644 index 1c18eb5d..00000000 --- a/src/types/reports/inaccurate_clusters_query.py +++ /dev/null @@ -1,51 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Optional -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["InaccurateClustersQuery"] - - -class InaccurateClustersQuery(BaseModel): - - start_date: str - - end_date: str - - comparison_start_date: Optional[str] = None - - comparison_end_date: Optional[str] = None - - category_id: str - - topic_ids: Optional[List[str]] = None - - exclude_topic_ids: Optional[bool] = None - - tag_ids: Optional[List[str]] = None - - tag_filter_type: Optional[Literal["all", "any"]] = None - - include_no_tag: Optional[bool] = None - - region_ids: Optional[List[str]] = None - - platform_ids: Optional[List[str]] = None - - persona_ids: Optional[List[str]] = None - - include_no_persona: Optional[bool] = None - - prompt_ids: Optional[List[str]] = None - - citation_categories: Optional[List[str]] = None - - theme_id: str - - limit: Optional[int] = None - - offset: Optional[int] = None - - search_query: Optional[str] = None diff --git a/src/types/reports/inaccurate_themes_query.py b/src/types/reports/inaccurate_themes_query.py deleted file mode 100644 index f28e386c..00000000 --- a/src/types/reports/inaccurate_themes_query.py +++ /dev/null @@ -1,53 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Optional -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["InaccurateThemesQuery"] - - -class InaccurateThemesQuery(BaseModel): - - start_date: str - - end_date: str - - comparison_start_date: Optional[str] = None - - comparison_end_date: Optional[str] = None - - category_id: str - - topic_ids: Optional[List[str]] = None - - exclude_topic_ids: Optional[bool] = None - - tag_ids: Optional[List[str]] = None - - tag_filter_type: Optional[Literal["all", "any"]] = None - - include_no_tag: Optional[bool] = None - - region_ids: Optional[List[str]] = None - - platform_ids: Optional[List[str]] = None - - persona_ids: Optional[List[str]] = None - - include_no_persona: Optional[bool] = None - - prompt_ids: Optional[List[str]] = None - - citation_categories: Optional[List[str]] = None - - limit: Optional[int] = None - - offset: Optional[int] = None - - sort_by: Optional[Literal["response_share"]] = None - - sort_order: Optional[Literal["asc", "desc"]] = None - - search_query: Optional[str] = None diff --git a/src/types/reports/merchant_name_filter.py b/src/types/reports/merchant_name_filter.py deleted file mode 100644 index 9266886a..00000000 --- a/src/types/reports/merchant_name_filter.py +++ /dev/null @@ -1,17 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Union -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["MerchantNameFilter"] - - -class MerchantNameFilter(BaseModel): - - field: Literal["merchant_name"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] diff --git a/src/types/reports/product_name_filter.py b/src/types/reports/product_name_filter.py deleted file mode 100644 index 74593035..00000000 --- a/src/types/reports/product_name_filter.py +++ /dev/null @@ -1,17 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Union -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["ProductNameFilter"] - - -class ProductNameFilter(BaseModel): - - field: Literal["product_name"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] diff --git a/src/types/reports/query_fanout_stream_v2_v2_reports_stream_post_params.py b/src/types/reports/query_fanout_stream_v2_v2_reports_stream_post_params.py deleted file mode 100644 index 4095f894..00000000 --- a/src/types/reports/query_fanout_stream_v2_v2_reports_stream_post_params.py +++ /dev/null @@ -1,60 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Iterable, Optional -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._utils import PropertyInfo - -__all__ = ["QueryFanoutStreamV2V2ReportsStreamPostParams", "FilterNode", "AppRoutesV2AnswerEngineInsightsReportsQueryFanoutsSortSpec"] - - -class QueryFanoutStreamV2V2ReportsStreamPostParams(TypedDict, total=False): - - category_id: Required[str] - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - group_by: Iterable[Literal["date", "model", "region", "prompt", "query"]] - - metrics: Optional[Iterable[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]]] - - interval: Literal["day", "week", "month"] - - filter: Optional[FilterNode] - - sort: Optional[AppRoutesV2AnswerEngineInsightsReportsQueryFanoutsSortSpec] - - limit: Optional[int] - """Page size; default 10, max 50.""" - - max_results: Optional[int] - """Stream endpoint only: cap the number of streamed rows (default: all).""" - - cursor: Optional[str] - - -class AppRoutesV2AnswerEngineInsightsReportsQueryFanoutsSortSpec(TypedDict, total=False): - - field: Required[str] - - dir: Literal["asc", "desc"] - -class FilterNode(TypedDict, total=False): - - and_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="and")] - - or_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="or")] - - not_: Annotated[Optional[FilterNode], PropertyInfo(alias="not")] - - field: Optional[str] - - op: Optional[str] - - value: str - diff --git a/src/types/reports/query_fanout_stream_v2_v2_reports_stream_post_response.py b/src/types/reports/query_fanout_stream_v2_v2_reports_stream_post_response.py deleted file mode 100644 index 55fffb89..00000000 --- a/src/types/reports/query_fanout_stream_v2_v2_reports_stream_post_response.py +++ /dev/null @@ -1,7 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing_extensions import TypeAlias - -__all__ = ["QueryFanoutStreamV2V2ReportsStreamPostResponse"] - -QueryFanoutStreamV2V2ReportsStreamPostResponse: TypeAlias = str diff --git a/src/types/reports/query_fanout_v1_reports_post_params.py b/src/types/reports/query_fanout_v1_reports_post_params.py deleted file mode 100644 index 406c5e1c..00000000 --- a/src/types/reports/query_fanout_v1_reports_post_params.py +++ /dev/null @@ -1,48 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Dict, Iterable, Union -from datetime import datetime -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..pagination import Pagination -from ..region_id_filter import RegionIdFilter -from ..region_name_filter import RegionNameFilter -from ..model_id_filter import ModelIdFilter -from ..topic_id_filter import TopicIdFilter -from ..tag_id_filter import TagIdFilter -from ..prompt_id_filter import PromptIdFilter -from ..persona_id_filter import PersonaIdFilter -from ..analysis_type_filter import AnalysisTypeFilter -from ..prompt_type_filter import PromptTypeFilter -from ..._utils import PropertyInfo - -__all__ = ["QueryFanoutV1ReportsPostParams"] - - -class QueryFanoutV1ReportsPostParams(TypedDict, total=False): - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - """Date interval for the report. (only used with date dimension)""" - - dimensions: Iterable[Literal["prompt", "query", "model", "region", "date"]] - """Dimensions to group the report by.""" - - metrics: Required[Iterable[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]]] - - order_by: Dict[str, Literal["asc", "desc"]] - """Custom ordering. Keys must be a requested metric or the ``date`` dimension. Values are ``asc`` or ``desc``. Defaults to first metric descending.""" - - pagination: Pagination - """Pagination settings for the report results.""" - - category_id: Required[str] - - start_date: Required[Union[str, datetime]] - """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - end_date: Required[Union[str, datetime]] - """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - filters: Iterable[Annotated[Union[RegionIdFilter, RegionNameFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, AnalysisTypeFilter, PromptTypeFilter], PropertyInfo(discriminator="field")]] - """Filters to apply to the query fanout report.""" diff --git a/src/types/reports/query_fanout_v2_v2_reports_post_params.py b/src/types/reports/query_fanout_v2_v2_reports_post_params.py deleted file mode 100644 index c78632fb..00000000 --- a/src/types/reports/query_fanout_v2_v2_reports_post_params.py +++ /dev/null @@ -1,60 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Iterable, Optional -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._utils import PropertyInfo - -__all__ = ["QueryFanoutV2V2ReportsPostParams", "FilterNode", "AppRoutesV2AnswerEngineInsightsReportsQueryFanoutsSortSpec"] - - -class QueryFanoutV2V2ReportsPostParams(TypedDict, total=False): - - category_id: Required[str] - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - group_by: Iterable[Literal["date", "model", "region", "prompt", "query"]] - - metrics: Optional[Iterable[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]]] - - interval: Literal["day", "week", "month"] - - filter: Optional[FilterNode] - - sort: Optional[AppRoutesV2AnswerEngineInsightsReportsQueryFanoutsSortSpec] - - limit: Optional[int] - """Page size; default 10, max 50.""" - - max_results: Optional[int] - """Stream endpoint only: cap the number of streamed rows (default: all).""" - - cursor: Optional[str] - - -class AppRoutesV2AnswerEngineInsightsReportsQueryFanoutsSortSpec(TypedDict, total=False): - - field: Required[str] - - dir: Literal["asc", "desc"] - -class FilterNode(TypedDict, total=False): - - and_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="and")] - - or_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="or")] - - not_: Annotated[Optional[FilterNode], PropertyInfo(alias="not")] - - field: Optional[str] - - op: Optional[str] - - value: str - diff --git a/src/types/reports/query_fanout_v2_v2_reports_post_response.py b/src/types/reports/query_fanout_v2_v2_reports_post_response.py deleted file mode 100644 index 22c554b6..00000000 --- a/src/types/reports/query_fanout_v2_v2_reports_post_response.py +++ /dev/null @@ -1,13 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing_extensions import TypeAlias -from ..._models import BaseModel - -__all__ = ["QueryFanoutV2V2ReportsPostResponse", "QueryFanoutV2V2ReportsPostResponse"] - -class QueryFanoutV2V2ReportsPostResponse(BaseModel): - pass - - - -QueryFanoutV2V2ReportsPostResponse: TypeAlias = QueryFanoutV2V2ReportsPostResponse diff --git a/src/types/reports/query_fanouts_query.py b/src/types/reports/query_fanouts_query.py deleted file mode 100644 index 9a4c6393..00000000 --- a/src/types/reports/query_fanouts_query.py +++ /dev/null @@ -1,48 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Dict, List, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal -from ..._utils import PropertyInfo - -from ..._models import BaseModel -from ..pagination import Pagination -from ..region_id_filter import RegionIdFilter -from ..region_name_filter import RegionNameFilter -from ..model_id_filter import ModelIdFilter -from ..topic_id_filter import TopicIdFilter -from ..tag_id_filter import TagIdFilter -from ..prompt_id_filter import PromptIdFilter -from ..persona_id_filter import PersonaIdFilter -from ..analysis_type_filter import AnalysisTypeFilter -from ..prompt_type_filter import PromptTypeFilter - -__all__ = ["QueryFanoutsQuery"] - - -class QueryFanoutsQuery(BaseModel): - - date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None - """Date interval for the report. (only used with date dimension)""" - - dimensions: Optional[List[Literal["prompt", "query", "model", "region", "date"]]] = None - """Dimensions to group the report by.""" - - metrics: List[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]] - - order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None - """Custom ordering. Keys must be a requested metric or the ``date`` dimension. Values are ``asc`` or ``desc``. Defaults to first metric descending.""" - - pagination: Optional[Pagination] = None - """Pagination settings for the report results.""" - - category_id: str - - start_date: datetime - """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - end_date: datetime - """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - filters: Optional[List[Annotated[Union[RegionIdFilter, RegionNameFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, AnalysisTypeFilter, PromptTypeFilter], PropertyInfo(discriminator="field")]]] = None - """Filters to apply to the query fanout report.""" diff --git a/src/types/reports/query_fanouts_v2_query.py b/src/types/reports/query_fanouts_v2_query.py deleted file mode 100644 index 2dc560ca..00000000 --- a/src/types/reports/query_fanouts_v2_query.py +++ /dev/null @@ -1,63 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import List, Optional -from typing_extensions import Literal - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["QueryFanoutsV2Query", "FilterNode", "AppRoutesV2AnswerEngineInsightsReportsQueryFanoutsSortSpec"] - - -class AppRoutesV2AnswerEngineInsightsReportsQueryFanoutsSortSpec(BaseModel): - - field: str - - dir: Optional[Literal["asc", "desc"]] = None - -class FilterNode(BaseModel): - - and_: Optional[List[FilterNode]] = FieldInfo(alias="and", default=None) - - or_: Optional[List[FilterNode]] = FieldInfo(alias="or", default=None) - - not_: Optional[FilterNode] = FieldInfo(alias="not", default=None) - - field: Optional[str] = None - - op: Optional[str] = None - - value: Optional[str] = None - - - -class QueryFanoutsV2Query(BaseModel): - - category_id: str - - start_date: str - """YYYY-MM-DD, ET, inclusive""" - - end_date: str - """YYYY-MM-DD, ET, inclusive""" - - group_by: Optional[List[Literal["date", "model", "region", "prompt", "query"]]] = None - - metrics: Optional[List[Literal["fanouts_per_execution", "total_fanouts", "share", "query_variations"]]] = None - - interval: Optional[Literal["day", "week", "month"]] = None - - filter: Optional[FilterNode] = None - - sort: Optional[AppRoutesV2AnswerEngineInsightsReportsQueryFanoutsSortSpec] = None - - limit: Optional[int] = None - """Page size; default 10, max 50.""" - - max_results: Optional[int] = None - """Stream endpoint only: cap the number of streamed rows (default: all).""" - - cursor: Optional[str] = None diff --git a/src/types/reports/referral_create_report_v1_v1_reports_post_params.py b/src/types/reports/referral_create_report_v1_v1_reports_post_params.py deleted file mode 100644 index c463ad46..00000000 --- a/src/types/reports/referral_create_report_v1_v1_reports_post_params.py +++ /dev/null @@ -1,73 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Dict, Iterable, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..pagination import Pagination -from ..path_filter import PathFilter -from ..._utils import PropertyInfo - -__all__ = ["ReferralCreateReportV1V1ReportsPostParams", "NumericMetricFilter", "ReferralSourceFilter"] - - -class ReferralCreateReportV1V1ReportsPostParams(TypedDict, total=False): - - date_interval: Literal["hour", "day", "week", "month", "year", "relative_week"] - """Date interval for the report. (only used with date dimension)""" - - dimensions: Iterable[Literal["date", "path", "referral_source"]] - """Dimensions to group the report by.""" - - metrics: Required[Iterable[Literal["visits", "last_visit"]]] - - order_by: Dict[str, Literal["asc", "desc"]] - """ - - Custom ordering of the report results. - - The order is a record of key-value pairs where: - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. - - When not specified, the default order is the first metric in the query descending. - """ - - pagination: Pagination - """Pagination settings for the report results.""" - - domain: Required[str] - """Domain to query logs for.""" - - start_date: Required[Union[str, datetime]] - """Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp.""" - - end_date: Union[str, datetime] - """End date for logs. Accepts same formats as start_date. Defaults to now if omitted.""" - - organization_id: Optional[str] - - metric_filters: Iterable[NumericMetricFilter] - """Numeric filters applied after report metrics are calculated.""" - - filters: Iterable[Annotated[Union[PathFilter, ReferralSourceFilter], PropertyInfo(discriminator="field")]] - """Filters for referrals report.""" - - -class ReferralSourceFilter(TypedDict, total=False): - - field: Required[Literal["referral_source"]] - - operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[Literal["openai", "none", "anthropic", "deepseek", "perplexity", "you", "grok", "microsoft", "gemini", "internal", "other"], Iterable[Literal["openai", "none", "anthropic", "deepseek", "perplexity", "you", "grok", "microsoft", "gemini", "internal", "other"]]]] - -class NumericMetricFilter(TypedDict, total=False): - - field: Required[str] - - operator: Required[Literal[">", ">=", "<", "<=", "=", "==", "!="]] - - value: Required[Union[int, float]] - diff --git a/src/types/reports/referral_create_report_v2_v2_reports_post_params.py b/src/types/reports/referral_create_report_v2_v2_reports_post_params.py deleted file mode 100644 index ebbbd0b5..00000000 --- a/src/types/reports/referral_create_report_v2_v2_reports_post_params.py +++ /dev/null @@ -1,81 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Dict, Iterable, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..pagination import Pagination -from ..path_filter import PathFilter -from ..._utils import PropertyInfo - -__all__ = ["ReferralCreateReportV2V2ReportsPostParams", "NumericMetricFilter", "ReferralSourceFilter", "ReferralTypeFilter"] - - -class ReferralCreateReportV2V2ReportsPostParams(TypedDict, total=False): - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - """Date interval for the report. (only used with date dimension)""" - - dimensions: Iterable[Literal["date", "hour", "path", "referral_source", "referral_type"]] - """Dimensions to group the report by.""" - - metrics: Required[Iterable[Literal["visits", "last_visit"]]] - - order_by: Dict[str, Literal["asc", "desc"]] - """ - - Custom ordering of the report results. - - The order is a record of key-value pairs where: - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. - - When not specified, the default order is the first metric in the query descending. - """ - - pagination: Pagination - """Pagination settings for the report results.""" - - domain: Required[str] - """Domain to query logs for.""" - - start_date: Required[Union[str, datetime]] - """Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp.""" - - end_date: Union[str, datetime] - """End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted.""" - - organization_id: Optional[str] - - metric_filters: Iterable[NumericMetricFilter] - """Numeric filters applied after report metrics are calculated.""" - - filters: Iterable[Annotated[Union[PathFilter, ReferralSourceFilter, ReferralTypeFilter], PropertyInfo(discriminator="field")]] - """Filters for referrals report.""" - - -class ReferralTypeFilter(TypedDict, total=False): - - field: Required[Literal["referral_type"]] - - operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[Literal["internal", "referer", "utm", "none"], Iterable[Literal["internal", "referer", "utm", "none"]]]] - -class ReferralSourceFilter(TypedDict, total=False): - - field: Required[Literal["referral_source"]] - - operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[Literal["openai", "none", "anthropic", "deepseek", "perplexity", "you", "grok", "microsoft", "gemini", "internal", "other"], Iterable[Literal["openai", "none", "anthropic", "deepseek", "perplexity", "you", "grok", "microsoft", "gemini", "internal", "other"]]]] - -class NumericMetricFilter(TypedDict, total=False): - - field: Required[str] - - operator: Required[Literal[">", ">=", "<", "<=", "=", "==", "!="]] - - value: Required[Union[int, float]] - diff --git a/src/types/reports/referrals_query.py b/src/types/reports/referrals_query.py deleted file mode 100644 index 94cc11d5..00000000 --- a/src/types/reports/referrals_query.py +++ /dev/null @@ -1,73 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Dict, List, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal -from ..._utils import PropertyInfo - -from ..._models import BaseModel -from ..pagination import Pagination -from ..path_filter import PathFilter - -__all__ = ["ReferralsQuery", "NumericMetricFilter", "ReferralSourceFilter"] - - -class ReferralSourceFilter(BaseModel): - - field: Literal["referral_source"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[Literal["openai", "none", "anthropic", "deepseek", "perplexity", "you", "grok", "microsoft", "gemini", "internal", "other"], List[Literal["openai", "none", "anthropic", "deepseek", "perplexity", "you", "grok", "microsoft", "gemini", "internal", "other"]]] - -class NumericMetricFilter(BaseModel): - - field: str - - operator: Literal[">", ">=", "<", "<=", "=", "==", "!="] - - value: Union[int, float] - - - -class ReferralsQuery(BaseModel): - - date_interval: Optional[Literal["hour", "day", "week", "month", "year", "relative_week"]] = None - """Date interval for the report. (only used with date dimension)""" - - dimensions: Optional[List[Literal["date", "path", "referral_source"]]] = None - """Dimensions to group the report by.""" - - metrics: List[Literal["visits", "last_visit"]] - - order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None - """ - - Custom ordering of the report results. - - The order is a record of key-value pairs where: - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. - - When not specified, the default order is the first metric in the query descending. - """ - - pagination: Optional[Pagination] = None - """Pagination settings for the report results.""" - - domain: str - """Domain to query logs for.""" - - start_date: datetime - """Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp.""" - - end_date: Optional[datetime] = None - """End date for logs. Accepts same formats as start_date. Defaults to now if omitted.""" - - organization_id: Optional[str] = None - - metric_filters: Optional[List[NumericMetricFilter]] = None - """Numeric filters applied after report metrics are calculated.""" - - filters: Optional[List[Annotated[Union[PathFilter, ReferralSourceFilter], PropertyInfo(discriminator="field")]]] = None - """Filters for referrals report.""" diff --git a/src/types/reports/referrals_query_v2.py b/src/types/reports/referrals_query_v2.py deleted file mode 100644 index 613b3162..00000000 --- a/src/types/reports/referrals_query_v2.py +++ /dev/null @@ -1,81 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Dict, List, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal -from ..._utils import PropertyInfo - -from ..._models import BaseModel -from ..pagination import Pagination -from ..path_filter import PathFilter - -__all__ = ["ReferralsQueryV2", "NumericMetricFilter", "ReferralSourceFilter", "ReferralTypeFilter"] - - -class ReferralTypeFilter(BaseModel): - - field: Literal["referral_type"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[Literal["internal", "referer", "utm", "none"], List[Literal["internal", "referer", "utm", "none"]]] - -class ReferralSourceFilter(BaseModel): - - field: Literal["referral_source"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[Literal["openai", "none", "anthropic", "deepseek", "perplexity", "you", "grok", "microsoft", "gemini", "internal", "other"], List[Literal["openai", "none", "anthropic", "deepseek", "perplexity", "you", "grok", "microsoft", "gemini", "internal", "other"]]] - -class NumericMetricFilter(BaseModel): - - field: str - - operator: Literal[">", ">=", "<", "<=", "=", "==", "!="] - - value: Union[int, float] - - - -class ReferralsQueryV2(BaseModel): - - date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None - """Date interval for the report. (only used with date dimension)""" - - dimensions: Optional[List[Literal["date", "hour", "path", "referral_source", "referral_type"]]] = None - """Dimensions to group the report by.""" - - metrics: List[Literal["visits", "last_visit"]] - - order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None - """ - - Custom ordering of the report results. - - The order is a record of key-value pairs where: - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. - - When not specified, the default order is the first metric in the query descending. - """ - - pagination: Optional[Pagination] = None - """Pagination settings for the report results.""" - - domain: str - """Domain to query logs for.""" - - start_date: datetime - """Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp.""" - - end_date: Optional[datetime] = None - """End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted.""" - - organization_id: Optional[str] = None - - metric_filters: Optional[List[NumericMetricFilter]] = None - """Numeric filters applied after report metrics are calculated.""" - - filters: Optional[List[Annotated[Union[PathFilter, ReferralSourceFilter, ReferralTypeFilter], PropertyInfo(discriminator="field")]]] = None - """Filters for referrals report.""" diff --git a/src/types/reports/sentiment_query.py b/src/types/reports/sentiment_query.py deleted file mode 100644 index bcad80c7..00000000 --- a/src/types/reports/sentiment_query.py +++ /dev/null @@ -1,76 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Dict, List, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal -from ..._utils import PropertyInfo - -from ..._models import BaseModel -from ..pagination import Pagination -from ..asset_id_filter import AssetIdFilter -from ..region_id_filter import RegionIdFilter -from ..region_name_filter import RegionNameFilter -from ..topic_id_filter import TopicIdFilter -from ..topic_name_filter import TopicNameFilter -from ..model_id_filter import ModelIdFilter -from ..tag_id_filter import TagIdFilter -from ..tag_name_filter import TagNameFilter -from ..prompt_filter import PromptFilter -from ..persona_id_filter import PersonaIdFilter - -__all__ = ["SentimentQuery", "ProfoundAnswerEngineInsightsFiltersAssetNameFilter", "ThemeFilter"] - - -class ThemeFilter(BaseModel): - - field: Literal["theme"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] - -class ProfoundAnswerEngineInsightsFiltersAssetNameFilter(BaseModel): - - field: Literal["asset_name"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] - - - -class SentimentQuery(BaseModel): - - date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None - """Date interval for the report. (only used with date dimension)""" - - dimensions: Optional[List[Literal["theme", "date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "tag", "prompt", "prompt_id", "sentiment_type", "persona"]]] = None - """Dimensions to group the report by.""" - - metrics: List[Literal["positive", "negative", "occurrences"]] - - order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None - """ - - Custom ordering of the report results. - - The order is a record of key-value pairs where: - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. - - When not specified, the default order is the first metric in the query descending. - """ - - pagination: Optional[Pagination] = None - """Pagination settings for the report results.""" - - category_id: str - - start_date: datetime - """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - end_date: datetime - """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - filters: Optional[List[Annotated[Union[AssetIdFilter, ProfoundAnswerEngineInsightsFiltersAssetNameFilter, ThemeFilter, RegionIdFilter, RegionNameFilter, TopicIdFilter, TopicNameFilter, ModelIdFilter, TagIdFilter, TagNameFilter, PromptFilter, PersonaIdFilter], PropertyInfo(discriminator="field")]]] = None - """List of filters to apply to the sentiment report.""" diff --git a/src/types/reports/sentiment_query_v1_reports_post_params.py b/src/types/reports/sentiment_query_v1_reports_post_params.py deleted file mode 100644 index 1bf79f5c..00000000 --- a/src/types/reports/sentiment_query_v1_reports_post_params.py +++ /dev/null @@ -1,77 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Dict, Iterable, Union -from datetime import datetime -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._types import SequenceNotStr -from ..pagination import Pagination -from ..asset_id_filter import AssetIdFilter -from ..region_id_filter import RegionIdFilter -from ..region_name_filter import RegionNameFilter -from ..topic_id_filter import TopicIdFilter -from ..topic_name_filter import TopicNameFilter -from ..model_id_filter import ModelIdFilter -from ..tag_id_filter import TagIdFilter -from ..tag_name_filter import TagNameFilter -from ..prompt_filter import PromptFilter -from ..persona_id_filter import PersonaIdFilter -from ..._utils import PropertyInfo - -__all__ = ["SentimentQueryV1ReportsPostParams", "ProfoundAnswerEngineInsightsFiltersAssetNameFilter", "ThemeFilter"] - - -class SentimentQueryV1ReportsPostParams(TypedDict, total=False): - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - """Date interval for the report. (only used with date dimension)""" - - dimensions: Iterable[Literal["theme", "date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "tag", "prompt", "prompt_id", "sentiment_type", "persona"]] - """Dimensions to group the report by.""" - - metrics: Required[Iterable[Literal["positive", "negative", "occurrences"]]] - - order_by: Dict[str, Literal["asc", "desc"]] - """ - - Custom ordering of the report results. - - The order is a record of key-value pairs where: - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. - - When not specified, the default order is the first metric in the query descending. - """ - - pagination: Pagination - """Pagination settings for the report results.""" - - category_id: Required[str] - - start_date: Required[Union[str, datetime]] - """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - end_date: Required[Union[str, datetime]] - """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - filters: Iterable[Annotated[Union[AssetIdFilter, ProfoundAnswerEngineInsightsFiltersAssetNameFilter, ThemeFilter, RegionIdFilter, RegionNameFilter, TopicIdFilter, TopicNameFilter, ModelIdFilter, TagIdFilter, TagNameFilter, PromptFilter, PersonaIdFilter], PropertyInfo(discriminator="field")]] - """List of filters to apply to the sentiment report.""" - - -class ThemeFilter(TypedDict, total=False): - - field: Required[Literal["theme"]] - - operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[str, SequenceNotStr[str]]] - -class ProfoundAnswerEngineInsightsFiltersAssetNameFilter(TypedDict, total=False): - - field: Required[Literal["asset_name"]] - - operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[str, SequenceNotStr[str]]] - diff --git a/src/types/reports/sentiment_query_v2_v2_reports_post_params.py b/src/types/reports/sentiment_query_v2_v2_reports_post_params.py deleted file mode 100644 index 9b1a55aa..00000000 --- a/src/types/reports/sentiment_query_v2_v2_reports_post_params.py +++ /dev/null @@ -1,72 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Iterable, Optional -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._utils import PropertyInfo - -__all__ = ["SentimentQueryV2V2ReportsPostParams", "FilterNode", "AppRoutesV2AnswerEngineInsightsReportsSentimentSortSpec"] - - -class SentimentQueryV2V2ReportsPostParams(TypedDict, total=False): - - category_id: Required[str] - - asset: Required[str] - """The brand name to analyze (sentiment is extracted on name, not id).""" - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - comparison_start_date: Optional[str] - """YYYY-MM-DD, ET, inclusive (with end).""" - - comparison_end_date: Optional[str] - """YYYY-MM-DD, ET, inclusive (with start).""" - - group_by: Iterable[Literal["date", "model", "topic", "region", "prompt", "persona", "tag", "theme", "claim", "run", "competitor"]] - - metrics: Optional[Iterable[Literal["positive_sentiment", "negative_sentiment", "occurrence"]]] - - interval: Literal["day", "week", "month"] - - filter: Optional[FilterNode] - - sort: AppRoutesV2AnswerEngineInsightsReportsSentimentSortSpec - - include_cited_websites: bool - """Return cited websites per row (only when grouping by `theme`/`claim`).""" - - limit: Optional[int] - """Page size; default 10, max 50.""" - - max_results: Optional[int] - """Stream endpoint only: cap the number of streamed rows (default: all).""" - - cursor: Optional[str] - - -class AppRoutesV2AnswerEngineInsightsReportsSentimentSortSpec(TypedDict, total=False): - - field: Literal["occurrence", "positive_sentiment", "negative_sentiment"] - - dir: Literal["asc", "desc"] - -class FilterNode(TypedDict, total=False): - - and_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="and")] - - or_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="or")] - - not_: Annotated[Optional[FilterNode], PropertyInfo(alias="not")] - - field: Optional[str] - - op: Optional[str] - - value: str - diff --git a/src/types/reports/sentiment_query_v2_v2_reports_post_response.py b/src/types/reports/sentiment_query_v2_v2_reports_post_response.py deleted file mode 100644 index bf885959..00000000 --- a/src/types/reports/sentiment_query_v2_v2_reports_post_response.py +++ /dev/null @@ -1,13 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing_extensions import TypeAlias -from ..._models import BaseModel - -__all__ = ["SentimentQueryV2V2ReportsPostResponse", "SentimentQueryV2V2ReportsPostResponse"] - -class SentimentQueryV2V2ReportsPostResponse(BaseModel): - pass - - - -SentimentQueryV2V2ReportsPostResponse: TypeAlias = SentimentQueryV2V2ReportsPostResponse diff --git a/src/types/reports/sentiment_stream_v1_reports_stream_post_params.py b/src/types/reports/sentiment_stream_v1_reports_stream_post_params.py deleted file mode 100644 index 16651e0b..00000000 --- a/src/types/reports/sentiment_stream_v1_reports_stream_post_params.py +++ /dev/null @@ -1,76 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Dict, Iterable, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._types import SequenceNotStr -from ..pagination import Pagination -from ..asset_id_filter import AssetIdFilter -from ..region_id_filter import RegionIdFilter -from ..region_name_filter import RegionNameFilter -from ..topic_id_filter import TopicIdFilter -from ..topic_name_filter import TopicNameFilter -from ..model_id_filter import ModelIdFilter -from ..tag_id_filter import TagIdFilter -from ..tag_name_filter import TagNameFilter -from ..prompt_filter import PromptFilter -from ..persona_id_filter import PersonaIdFilter -from ..._utils import PropertyInfo - -__all__ = ["SentimentStreamV1ReportsStreamPostParams", "ProfoundAnswerEngineInsightsFiltersAssetNameFilter", "ThemeFilter"] - - -class SentimentStreamV1ReportsStreamPostParams(TypedDict, total=False): - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - """Date interval for the report. (only used with date dimension)""" - - dimensions: Iterable[Literal["theme", "date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "tag", "prompt", "prompt_id", "sentiment_type", "persona"]] - """Dimensions to group the report by.""" - - metrics: Required[Iterable[Literal["positive", "negative", "occurrences"]]] - - order_by: Dict[str, Literal["asc", "desc"]] - """ - - Custom ordering of the report results. - - The order is a record of key-value pairs where: - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. - - When not specified, the default order is the first metric in the query descending. - """ - - pagination: Optional[Pagination] - - category_id: Required[str] - - start_date: Required[Union[str, datetime]] - """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - end_date: Required[Union[str, datetime]] - """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - filters: Iterable[Annotated[Union[AssetIdFilter, ProfoundAnswerEngineInsightsFiltersAssetNameFilter, ThemeFilter, RegionIdFilter, RegionNameFilter, TopicIdFilter, TopicNameFilter, ModelIdFilter, TagIdFilter, TagNameFilter, PromptFilter, PersonaIdFilter], PropertyInfo(discriminator="field")]] - """List of filters to apply to the sentiment report.""" - - -class ThemeFilter(TypedDict, total=False): - - field: Required[Literal["theme"]] - - operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[str, SequenceNotStr[str]]] - -class ProfoundAnswerEngineInsightsFiltersAssetNameFilter(TypedDict, total=False): - - field: Required[Literal["asset_name"]] - - operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[str, SequenceNotStr[str]]] - diff --git a/src/types/reports/sentiment_stream_v1_reports_stream_post_response.py b/src/types/reports/sentiment_stream_v1_reports_stream_post_response.py deleted file mode 100644 index f2758c9b..00000000 --- a/src/types/reports/sentiment_stream_v1_reports_stream_post_response.py +++ /dev/null @@ -1,27 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Union -from typing_extensions import TypeAlias -from ..._models import BaseModel - -__all__ = ["SentimentStreamV1ReportsStreamPostResponse", "SentimentStreamV1ReportsStreamPostResponse", "Query", "SentimentStreamV1ReportsStreamPostResponse2"] - -class SentimentStreamV1ReportsStreamPostResponse2(BaseModel): - pass - -class Query(BaseModel): - pass - -class SentimentStreamV1ReportsStreamPostResponse(BaseModel): - - query: Query - """The normalized query used to build the stream.""" - - total_rows: int - """Total number of rows available before pagination is applied.""" - - - -SentimentStreamV1ReportsStreamPostResponse: TypeAlias = Union[SentimentStreamV1ReportsStreamPostResponse, SentimentStreamV1ReportsStreamPostResponse2] diff --git a/src/types/reports/sentiment_stream_v2_v2_reports_stream_post_params.py b/src/types/reports/sentiment_stream_v2_v2_reports_stream_post_params.py deleted file mode 100644 index 44fed363..00000000 --- a/src/types/reports/sentiment_stream_v2_v2_reports_stream_post_params.py +++ /dev/null @@ -1,72 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Iterable, Optional -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._utils import PropertyInfo - -__all__ = ["SentimentStreamV2V2ReportsStreamPostParams", "FilterNode", "AppRoutesV2AnswerEngineInsightsReportsSentimentSortSpec"] - - -class SentimentStreamV2V2ReportsStreamPostParams(TypedDict, total=False): - - category_id: Required[str] - - asset: Required[str] - """The brand name to analyze (sentiment is extracted on name, not id).""" - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - comparison_start_date: Optional[str] - """YYYY-MM-DD, ET, inclusive (with end).""" - - comparison_end_date: Optional[str] - """YYYY-MM-DD, ET, inclusive (with start).""" - - group_by: Iterable[Literal["date", "model", "topic", "region", "prompt", "persona", "tag", "theme", "claim", "run", "competitor"]] - - metrics: Optional[Iterable[Literal["positive_sentiment", "negative_sentiment", "occurrence"]]] - - interval: Literal["day", "week", "month"] - - filter: Optional[FilterNode] - - sort: AppRoutesV2AnswerEngineInsightsReportsSentimentSortSpec - - include_cited_websites: bool - """Return cited websites per row (only when grouping by `theme`/`claim`).""" - - limit: Optional[int] - """Page size; default 10, max 50.""" - - max_results: Optional[int] - """Stream endpoint only: cap the number of streamed rows (default: all).""" - - cursor: Optional[str] - - -class AppRoutesV2AnswerEngineInsightsReportsSentimentSortSpec(TypedDict, total=False): - - field: Literal["occurrence", "positive_sentiment", "negative_sentiment"] - - dir: Literal["asc", "desc"] - -class FilterNode(TypedDict, total=False): - - and_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="and")] - - or_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="or")] - - not_: Annotated[Optional[FilterNode], PropertyInfo(alias="not")] - - field: Optional[str] - - op: Optional[str] - - value: str - diff --git a/src/types/reports/sentiment_stream_v2_v2_reports_stream_post_response.py b/src/types/reports/sentiment_stream_v2_v2_reports_stream_post_response.py deleted file mode 100644 index dedd4a40..00000000 --- a/src/types/reports/sentiment_stream_v2_v2_reports_stream_post_response.py +++ /dev/null @@ -1,7 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing_extensions import TypeAlias - -__all__ = ["SentimentStreamV2V2ReportsStreamPostResponse"] - -SentimentStreamV2V2ReportsStreamPostResponse: TypeAlias = str diff --git a/src/types/reports/sentiment_v2_query.py b/src/types/reports/sentiment_v2_query.py deleted file mode 100644 index 0c3ae057..00000000 --- a/src/types/reports/sentiment_v2_query.py +++ /dev/null @@ -1,75 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import List, Optional -from typing_extensions import Literal - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["SentimentV2Query", "FilterNode", "AppRoutesV2AnswerEngineInsightsReportsSentimentSortSpec"] - - -class AppRoutesV2AnswerEngineInsightsReportsSentimentSortSpec(BaseModel): - - field: Optional[Literal["occurrence", "positive_sentiment", "negative_sentiment"]] = None - - dir: Optional[Literal["asc", "desc"]] = None - -class FilterNode(BaseModel): - - and_: Optional[List[FilterNode]] = FieldInfo(alias="and", default=None) - - or_: Optional[List[FilterNode]] = FieldInfo(alias="or", default=None) - - not_: Optional[FilterNode] = FieldInfo(alias="not", default=None) - - field: Optional[str] = None - - op: Optional[str] = None - - value: Optional[str] = None - - - -class SentimentV2Query(BaseModel): - - category_id: str - - asset: str - """The brand name to analyze (sentiment is extracted on name, not id).""" - - start_date: str - """YYYY-MM-DD, ET, inclusive""" - - end_date: str - """YYYY-MM-DD, ET, inclusive""" - - comparison_start_date: Optional[str] = None - """YYYY-MM-DD, ET, inclusive (with end).""" - - comparison_end_date: Optional[str] = None - """YYYY-MM-DD, ET, inclusive (with start).""" - - group_by: Optional[List[Literal["date", "model", "topic", "region", "prompt", "persona", "tag", "theme", "claim", "run", "competitor"]]] = None - - metrics: Optional[List[Literal["positive_sentiment", "negative_sentiment", "occurrence"]]] = None - - interval: Optional[Literal["day", "week", "month"]] = None - - filter: Optional[FilterNode] = None - - sort: Optional[AppRoutesV2AnswerEngineInsightsReportsSentimentSortSpec] = None - - include_cited_websites: Optional[bool] = None - """Return cited websites per row (only when grouping by `theme`/`claim`).""" - - limit: Optional[int] = None - """Page size; default 10, max 50.""" - - max_results: Optional[int] = None - """Stream endpoint only: cap the number of streamed rows (default: all).""" - - cursor: Optional[str] = None diff --git a/src/types/reports/shopping_all_items_with_merchants_params.py b/src/types/reports/shopping_all_items_with_merchants_params.py deleted file mode 100644 index 6339c2d8..00000000 --- a/src/types/reports/shopping_all_items_with_merchants_params.py +++ /dev/null @@ -1,78 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Dict, Iterable, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._types import SequenceNotStr -from ..region_id_filter import RegionIdFilter -from ..model_id_filter import ModelIdFilter -from ..topic_id_filter import TopicIdFilter -from ..tag_id_filter import TagIdFilter -from ..prompt_id_filter import PromptIdFilter -from ..persona_id_filter import PersonaIdFilter -from .brand_name_filter import BrandNameFilter -from .merchant_name_filter import MerchantNameFilter -from .product_name_filter import ProductNameFilter -from ..pagination import Pagination -from ..._utils import PropertyInfo - -__all__ = ["ShoppingAllItemsWithMerchantsParams", "ProfoundShoppingApiAssetNameFilter"] - - -class ShoppingAllItemsWithMerchantsParams(TypedDict, total=False): - - category_id: Required[str] - - start_date: Required[Union[str, datetime]] - """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - end_date: Required[Union[str, datetime]] - """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - comparison_start_date: Optional[Union[str, datetime]] - - comparison_end_date: Optional[Union[str, datetime]] - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - - filters: Iterable[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]] - - order_by: Dict[str, Literal["asc", "desc"]] - - pagination: Optional[Pagination] - - include_count: bool - - tag_filter_type: Literal["any", "all"] - - include_no_tag: bool - - exclude_topic_ids: bool - - dimensions: Iterable[Literal["period", "product_name", "brand_name", "product_url", "product_image_urls", "product_price", "merchant_names", "merchant_prices"]] - - metrics: Iterable[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "product_rating", "product_num_reviews", "total_count"]] - - owned_asset_names: SequenceNotStr[str] - - include_items: SequenceNotStr[str] - - search_item: Optional[str] - - merchant_filter_type: Literal["any", "all"] - - rank_by: Literal["visibility", "average_position", "name"] - - sort_order: Literal["asc", "desc"] - - -class ProfoundShoppingApiAssetNameFilter(TypedDict, total=False): - - field: Required[Literal["asset_name"]] - - operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[str, SequenceNotStr[str]]] - diff --git a/src/types/reports/shopping_all_items_with_merchants_query.py b/src/types/reports/shopping_all_items_with_merchants_query.py deleted file mode 100644 index 7d60944c..00000000 --- a/src/types/reports/shopping_all_items_with_merchants_query.py +++ /dev/null @@ -1,77 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Dict, List, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal -from ..._utils import PropertyInfo - -from ..._models import BaseModel -from ..region_id_filter import RegionIdFilter -from ..model_id_filter import ModelIdFilter -from ..topic_id_filter import TopicIdFilter -from ..tag_id_filter import TagIdFilter -from ..prompt_id_filter import PromptIdFilter -from ..persona_id_filter import PersonaIdFilter -from .brand_name_filter import BrandNameFilter -from .merchant_name_filter import MerchantNameFilter -from .product_name_filter import ProductNameFilter -from ..pagination import Pagination - -__all__ = ["ShoppingAllItemsWithMerchantsQuery", "ProfoundShoppingApiAssetNameFilter"] - - -class ProfoundShoppingApiAssetNameFilter(BaseModel): - - field: Literal["asset_name"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] - - - -class ShoppingAllItemsWithMerchantsQuery(BaseModel): - - category_id: str - - start_date: datetime - """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - end_date: datetime - """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - comparison_start_date: Optional[datetime] = None - - comparison_end_date: Optional[datetime] = None - - date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None - - filters: Optional[List[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]]] = None - - order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None - - pagination: Optional[Pagination] = None - - include_count: Optional[bool] = None - - tag_filter_type: Optional[Literal["any", "all"]] = None - - include_no_tag: Optional[bool] = None - - exclude_topic_ids: Optional[bool] = None - - dimensions: Optional[List[Literal["period", "product_name", "brand_name", "product_url", "product_image_urls", "product_price", "merchant_names", "merchant_prices"]]] = None - - metrics: Optional[List[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "product_rating", "product_num_reviews", "total_count"]]] = None - - owned_asset_names: Optional[List[str]] = None - - include_items: Optional[List[str]] = None - - search_item: Optional[str] = None - - merchant_filter_type: Optional[Literal["any", "all"]] = None - - rank_by: Optional[Literal["visibility", "average_position", "name"]] = None - - sort_order: Optional[Literal["asc", "desc"]] = None diff --git a/src/types/reports/shopping_executions_params.py b/src/types/reports/shopping_executions_params.py deleted file mode 100644 index b5bc9928..00000000 --- a/src/types/reports/shopping_executions_params.py +++ /dev/null @@ -1,68 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Dict, Iterable, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._types import SequenceNotStr -from ..region_id_filter import RegionIdFilter -from ..model_id_filter import ModelIdFilter -from ..topic_id_filter import TopicIdFilter -from ..tag_id_filter import TagIdFilter -from ..prompt_id_filter import PromptIdFilter -from ..persona_id_filter import PersonaIdFilter -from .brand_name_filter import BrandNameFilter -from .merchant_name_filter import MerchantNameFilter -from .product_name_filter import ProductNameFilter -from ..pagination import Pagination -from ..._utils import PropertyInfo - -__all__ = ["ShoppingExecutionsParams", "ProfoundShoppingApiAssetNameFilter"] - - -class ShoppingExecutionsParams(TypedDict, total=False): - - category_id: Required[str] - - start_date: Required[Union[str, datetime]] - """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - end_date: Required[Union[str, datetime]] - """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - comparison_start_date: Optional[Union[str, datetime]] - - comparison_end_date: Optional[Union[str, datetime]] - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - - filters: Iterable[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]] - - order_by: Dict[str, Literal["asc", "desc"]] - - pagination: Optional[Pagination] - - include_count: bool - - tag_filter_type: Literal["any", "all"] - - include_no_tag: bool - - exclude_topic_ids: bool - - analysis_types: Iterable[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]] - - analysis_filter_type: Literal["any", "all"] - - owned_asset_names: SequenceNotStr[str] - - -class ProfoundShoppingApiAssetNameFilter(TypedDict, total=False): - - field: Required[Literal["asset_name"]] - - operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[str, SequenceNotStr[str]]] - diff --git a/src/types/reports/shopping_executions_query.py b/src/types/reports/shopping_executions_query.py deleted file mode 100644 index 865556c6..00000000 --- a/src/types/reports/shopping_executions_query.py +++ /dev/null @@ -1,67 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Dict, List, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal -from ..._utils import PropertyInfo - -from ..._models import BaseModel -from ..region_id_filter import RegionIdFilter -from ..model_id_filter import ModelIdFilter -from ..topic_id_filter import TopicIdFilter -from ..tag_id_filter import TagIdFilter -from ..prompt_id_filter import PromptIdFilter -from ..persona_id_filter import PersonaIdFilter -from .brand_name_filter import BrandNameFilter -from .merchant_name_filter import MerchantNameFilter -from .product_name_filter import ProductNameFilter -from ..pagination import Pagination - -__all__ = ["ShoppingExecutionsQuery", "ProfoundShoppingApiAssetNameFilter"] - - -class ProfoundShoppingApiAssetNameFilter(BaseModel): - - field: Literal["asset_name"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] - - - -class ShoppingExecutionsQuery(BaseModel): - - category_id: str - - start_date: datetime - """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - end_date: datetime - """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - comparison_start_date: Optional[datetime] = None - - comparison_end_date: Optional[datetime] = None - - date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None - - filters: Optional[List[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]]] = None - - order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None - - pagination: Optional[Pagination] = None - - include_count: Optional[bool] = None - - tag_filter_type: Optional[Literal["any", "all"]] = None - - include_no_tag: Optional[bool] = None - - exclude_topic_ids: Optional[bool] = None - - analysis_types: Optional[List[Literal["visibility", "sentiment", "sentiment_v2", "accuracy"]]] = None - - analysis_filter_type: Optional[Literal["any", "all"]] = None - - owned_asset_names: Optional[List[str]] = None diff --git a/src/types/reports/shopping_item_visibility_params.py b/src/types/reports/shopping_item_visibility_params.py deleted file mode 100644 index 181c0479..00000000 --- a/src/types/reports/shopping_item_visibility_params.py +++ /dev/null @@ -1,82 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Dict, Iterable, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._types import SequenceNotStr -from ..region_id_filter import RegionIdFilter -from ..model_id_filter import ModelIdFilter -from ..topic_id_filter import TopicIdFilter -from ..tag_id_filter import TagIdFilter -from ..prompt_id_filter import PromptIdFilter -from ..persona_id_filter import PersonaIdFilter -from .brand_name_filter import BrandNameFilter -from .merchant_name_filter import MerchantNameFilter -from .product_name_filter import ProductNameFilter -from ..pagination import Pagination -from ..._utils import PropertyInfo - -__all__ = ["ShoppingItemVisibilityParams", "ProfoundShoppingApiAssetNameFilter"] - - -class ShoppingItemVisibilityParams(TypedDict, total=False): - - category_id: Required[str] - - start_date: Required[Union[str, datetime]] - """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - end_date: Required[Union[str, datetime]] - """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - comparison_start_date: Optional[Union[str, datetime]] - - comparison_end_date: Optional[Union[str, datetime]] - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - - filters: Iterable[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]] - - order_by: Dict[str, Literal["asc", "desc"]] - - pagination: Optional[Pagination] - - include_count: bool - - tag_filter_type: Literal["any", "all"] - - include_no_tag: bool - - exclude_topic_ids: bool - - dimensions: Iterable[Literal["period", "product_name", "brand_name", "date", "topic_id", "prompt_id", "prompt", "product_url", "product_image_urls", "product_price"]] - - metrics: Iterable[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "position1_percentage", "position2_percentage", "position3_percentage", "position_above3_percentage", "product_rating", "product_num_reviews", "total_count"]] - - owned_asset_names: SequenceNotStr[str] - - include_items: SequenceNotStr[str] - - search_item: Optional[str] - - merchant_filter_type: Literal["any", "all"] - - include_competitors: bool - - target_product: Optional[str] - - competitor_limit: int - - include_position_frequency: bool - - -class ProfoundShoppingApiAssetNameFilter(TypedDict, total=False): - - field: Required[Literal["asset_name"]] - - operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[str, SequenceNotStr[str]]] - diff --git a/src/types/reports/shopping_item_visibility_query.py b/src/types/reports/shopping_item_visibility_query.py deleted file mode 100644 index aeb18b9c..00000000 --- a/src/types/reports/shopping_item_visibility_query.py +++ /dev/null @@ -1,81 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Dict, List, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal -from ..._utils import PropertyInfo - -from ..._models import BaseModel -from ..region_id_filter import RegionIdFilter -from ..model_id_filter import ModelIdFilter -from ..topic_id_filter import TopicIdFilter -from ..tag_id_filter import TagIdFilter -from ..prompt_id_filter import PromptIdFilter -from ..persona_id_filter import PersonaIdFilter -from .brand_name_filter import BrandNameFilter -from .merchant_name_filter import MerchantNameFilter -from .product_name_filter import ProductNameFilter -from ..pagination import Pagination - -__all__ = ["ShoppingItemVisibilityQuery", "ProfoundShoppingApiAssetNameFilter"] - - -class ProfoundShoppingApiAssetNameFilter(BaseModel): - - field: Literal["asset_name"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] - - - -class ShoppingItemVisibilityQuery(BaseModel): - - category_id: str - - start_date: datetime - """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - end_date: datetime - """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - comparison_start_date: Optional[datetime] = None - - comparison_end_date: Optional[datetime] = None - - date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None - - filters: Optional[List[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]]] = None - - order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None - - pagination: Optional[Pagination] = None - - include_count: Optional[bool] = None - - tag_filter_type: Optional[Literal["any", "all"]] = None - - include_no_tag: Optional[bool] = None - - exclude_topic_ids: Optional[bool] = None - - dimensions: Optional[List[Literal["period", "product_name", "brand_name", "date", "topic_id", "prompt_id", "prompt", "product_url", "product_image_urls", "product_price"]]] = None - - metrics: Optional[List[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "position1_percentage", "position2_percentage", "position3_percentage", "position_above3_percentage", "product_rating", "product_num_reviews", "total_count"]]] = None - - owned_asset_names: Optional[List[str]] = None - - include_items: Optional[List[str]] = None - - search_item: Optional[str] = None - - merchant_filter_type: Optional[Literal["any", "all"]] = None - - include_competitors: Optional[bool] = None - - target_product: Optional[str] = None - - competitor_limit: Optional[int] = None - - include_position_frequency: Optional[bool] = None diff --git a/src/types/reports/shopping_merchant_by_items_params.py b/src/types/reports/shopping_merchant_by_items_params.py deleted file mode 100644 index 204c8278..00000000 --- a/src/types/reports/shopping_merchant_by_items_params.py +++ /dev/null @@ -1,68 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Dict, Iterable, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._types import SequenceNotStr -from ..region_id_filter import RegionIdFilter -from ..model_id_filter import ModelIdFilter -from ..topic_id_filter import TopicIdFilter -from ..tag_id_filter import TagIdFilter -from ..prompt_id_filter import PromptIdFilter -from ..persona_id_filter import PersonaIdFilter -from .brand_name_filter import BrandNameFilter -from .merchant_name_filter import MerchantNameFilter -from .product_name_filter import ProductNameFilter -from ..pagination import Pagination -from ..._utils import PropertyInfo - -__all__ = ["ShoppingMerchantByItemsParams", "ProfoundShoppingApiAssetNameFilter"] - - -class ShoppingMerchantByItemsParams(TypedDict, total=False): - - category_id: Required[str] - - start_date: Required[Union[str, datetime]] - """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - end_date: Required[Union[str, datetime]] - """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - comparison_start_date: Optional[Union[str, datetime]] - - comparison_end_date: Optional[Union[str, datetime]] - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - - filters: Iterable[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]] - - order_by: Dict[str, Literal["asc", "desc"]] - - pagination: Optional[Pagination] - - include_count: bool - - tag_filter_type: Literal["any", "all"] - - include_no_tag: bool - - exclude_topic_ids: bool - - dimensions: Iterable[Literal["period", "merchant_name", "product_name", "brand_name", "product_image_urls", "product_price", "merchant_prices", "has_instant_checkout", "delivery_options", "merchant_url"]] - - metrics: Iterable[Literal["merchant_visibility", "product_visibility", "product_rank", "avg_position", "total_count"]] - - product_name: Optional[str] - - -class ProfoundShoppingApiAssetNameFilter(TypedDict, total=False): - - field: Required[Literal["asset_name"]] - - operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[str, SequenceNotStr[str]]] - diff --git a/src/types/reports/shopping_merchant_by_items_query.py b/src/types/reports/shopping_merchant_by_items_query.py deleted file mode 100644 index a9c9e6bf..00000000 --- a/src/types/reports/shopping_merchant_by_items_query.py +++ /dev/null @@ -1,67 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Dict, List, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal -from ..._utils import PropertyInfo - -from ..._models import BaseModel -from ..region_id_filter import RegionIdFilter -from ..model_id_filter import ModelIdFilter -from ..topic_id_filter import TopicIdFilter -from ..tag_id_filter import TagIdFilter -from ..prompt_id_filter import PromptIdFilter -from ..persona_id_filter import PersonaIdFilter -from .brand_name_filter import BrandNameFilter -from .merchant_name_filter import MerchantNameFilter -from .product_name_filter import ProductNameFilter -from ..pagination import Pagination - -__all__ = ["ShoppingMerchantByItemsQuery", "ProfoundShoppingApiAssetNameFilter"] - - -class ProfoundShoppingApiAssetNameFilter(BaseModel): - - field: Literal["asset_name"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] - - - -class ShoppingMerchantByItemsQuery(BaseModel): - - category_id: str - - start_date: datetime - """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - end_date: datetime - """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - comparison_start_date: Optional[datetime] = None - - comparison_end_date: Optional[datetime] = None - - date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None - - filters: Optional[List[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]]] = None - - order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None - - pagination: Optional[Pagination] = None - - include_count: Optional[bool] = None - - tag_filter_type: Optional[Literal["any", "all"]] = None - - include_no_tag: Optional[bool] = None - - exclude_topic_ids: Optional[bool] = None - - dimensions: Optional[List[Literal["period", "merchant_name", "product_name", "brand_name", "product_image_urls", "product_price", "merchant_prices", "has_instant_checkout", "delivery_options", "merchant_url"]]] = None - - metrics: Optional[List[Literal["merchant_visibility", "product_visibility", "product_rank", "avg_position", "total_count"]]] = None - - product_name: Optional[str] = None diff --git a/src/types/reports/shopping_merchant_distribution_params.py b/src/types/reports/shopping_merchant_distribution_params.py deleted file mode 100644 index f4d7164f..00000000 --- a/src/types/reports/shopping_merchant_distribution_params.py +++ /dev/null @@ -1,70 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Dict, Iterable, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._types import SequenceNotStr -from ..region_id_filter import RegionIdFilter -from ..model_id_filter import ModelIdFilter -from ..topic_id_filter import TopicIdFilter -from ..tag_id_filter import TagIdFilter -from ..prompt_id_filter import PromptIdFilter -from ..persona_id_filter import PersonaIdFilter -from .brand_name_filter import BrandNameFilter -from .merchant_name_filter import MerchantNameFilter -from .product_name_filter import ProductNameFilter -from ..pagination import Pagination -from ..._utils import PropertyInfo - -__all__ = ["ShoppingMerchantDistributionParams", "ProfoundShoppingApiAssetNameFilter"] - - -class ShoppingMerchantDistributionParams(TypedDict, total=False): - - category_id: Required[str] - - start_date: Required[Union[str, datetime]] - """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - end_date: Required[Union[str, datetime]] - """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - comparison_start_date: Optional[Union[str, datetime]] - - comparison_end_date: Optional[Union[str, datetime]] - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - - filters: Iterable[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]] - - order_by: Dict[str, Literal["asc", "desc"]] - - pagination: Optional[Pagination] - - include_count: bool - - tag_filter_type: Literal["any", "all"] - - include_no_tag: bool - - exclude_topic_ids: bool - - dimensions: Iterable[Literal["period", "merchant_name", "date", "owned_asset_name"]] - - metrics: Iterable[Literal["offer_count", "product_count", "average_rank", "share_of_offers", "visibility_rank", "total_count"]] - - owned_asset_names: SequenceNotStr[str] - - search_merchant: Optional[str] - - -class ProfoundShoppingApiAssetNameFilter(TypedDict, total=False): - - field: Required[Literal["asset_name"]] - - operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[str, SequenceNotStr[str]]] - diff --git a/src/types/reports/shopping_merchant_distribution_query.py b/src/types/reports/shopping_merchant_distribution_query.py deleted file mode 100644 index 62126f3b..00000000 --- a/src/types/reports/shopping_merchant_distribution_query.py +++ /dev/null @@ -1,69 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Dict, List, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal -from ..._utils import PropertyInfo - -from ..._models import BaseModel -from ..region_id_filter import RegionIdFilter -from ..model_id_filter import ModelIdFilter -from ..topic_id_filter import TopicIdFilter -from ..tag_id_filter import TagIdFilter -from ..prompt_id_filter import PromptIdFilter -from ..persona_id_filter import PersonaIdFilter -from .brand_name_filter import BrandNameFilter -from .merchant_name_filter import MerchantNameFilter -from .product_name_filter import ProductNameFilter -from ..pagination import Pagination - -__all__ = ["ShoppingMerchantDistributionQuery", "ProfoundShoppingApiAssetNameFilter"] - - -class ProfoundShoppingApiAssetNameFilter(BaseModel): - - field: Literal["asset_name"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] - - - -class ShoppingMerchantDistributionQuery(BaseModel): - - category_id: str - - start_date: datetime - """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - end_date: datetime - """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - comparison_start_date: Optional[datetime] = None - - comparison_end_date: Optional[datetime] = None - - date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None - - filters: Optional[List[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]]] = None - - order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None - - pagination: Optional[Pagination] = None - - include_count: Optional[bool] = None - - tag_filter_type: Optional[Literal["any", "all"]] = None - - include_no_tag: Optional[bool] = None - - exclude_topic_ids: Optional[bool] = None - - dimensions: Optional[List[Literal["period", "merchant_name", "date", "owned_asset_name"]]] = None - - metrics: Optional[List[Literal["offer_count", "product_count", "average_rank", "share_of_offers", "visibility_rank", "total_count"]]] = None - - owned_asset_names: Optional[List[str]] = None - - search_merchant: Optional[str] = None diff --git a/src/types/reports/shopping_merchant_share_params.py b/src/types/reports/shopping_merchant_share_params.py deleted file mode 100644 index 6ff7ba07..00000000 --- a/src/types/reports/shopping_merchant_share_params.py +++ /dev/null @@ -1,70 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Dict, Iterable, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._types import SequenceNotStr -from ..region_id_filter import RegionIdFilter -from ..model_id_filter import ModelIdFilter -from ..topic_id_filter import TopicIdFilter -from ..tag_id_filter import TagIdFilter -from ..prompt_id_filter import PromptIdFilter -from ..persona_id_filter import PersonaIdFilter -from .brand_name_filter import BrandNameFilter -from .merchant_name_filter import MerchantNameFilter -from .product_name_filter import ProductNameFilter -from ..pagination import Pagination -from ..._utils import PropertyInfo - -__all__ = ["ShoppingMerchantShareParams", "ProfoundShoppingApiAssetNameFilter"] - - -class ShoppingMerchantShareParams(TypedDict, total=False): - - category_id: Required[str] - - start_date: Required[Union[str, datetime]] - """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - end_date: Required[Union[str, datetime]] - """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - comparison_start_date: Optional[Union[str, datetime]] - - comparison_end_date: Optional[Union[str, datetime]] - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - - filters: Iterable[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]] - - order_by: Dict[str, Literal["asc", "desc"]] - - pagination: Optional[Pagination] - - include_count: bool - - tag_filter_type: Literal["any", "all"] - - include_no_tag: bool - - exclude_topic_ids: bool - - dimensions: Iterable[Literal["period", "topic_id", "prompt_id"]] - - metrics: Iterable[Literal["merchant_share"]] - - target_asset_names: SequenceNotStr[str] - - owned_asset_names: SequenceNotStr[str] - - -class ProfoundShoppingApiAssetNameFilter(TypedDict, total=False): - - field: Required[Literal["asset_name"]] - - operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[str, SequenceNotStr[str]]] - diff --git a/src/types/reports/shopping_merchant_share_query.py b/src/types/reports/shopping_merchant_share_query.py deleted file mode 100644 index ea2cdb57..00000000 --- a/src/types/reports/shopping_merchant_share_query.py +++ /dev/null @@ -1,69 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Dict, List, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal -from ..._utils import PropertyInfo - -from ..._models import BaseModel -from ..region_id_filter import RegionIdFilter -from ..model_id_filter import ModelIdFilter -from ..topic_id_filter import TopicIdFilter -from ..tag_id_filter import TagIdFilter -from ..prompt_id_filter import PromptIdFilter -from ..persona_id_filter import PersonaIdFilter -from .brand_name_filter import BrandNameFilter -from .merchant_name_filter import MerchantNameFilter -from .product_name_filter import ProductNameFilter -from ..pagination import Pagination - -__all__ = ["ShoppingMerchantShareQuery", "ProfoundShoppingApiAssetNameFilter"] - - -class ProfoundShoppingApiAssetNameFilter(BaseModel): - - field: Literal["asset_name"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] - - - -class ShoppingMerchantShareQuery(BaseModel): - - category_id: str - - start_date: datetime - """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - end_date: datetime - """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - comparison_start_date: Optional[datetime] = None - - comparison_end_date: Optional[datetime] = None - - date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None - - filters: Optional[List[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]]] = None - - order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None - - pagination: Optional[Pagination] = None - - include_count: Optional[bool] = None - - tag_filter_type: Optional[Literal["any", "all"]] = None - - include_no_tag: Optional[bool] = None - - exclude_topic_ids: Optional[bool] = None - - dimensions: Optional[List[Literal["period", "topic_id", "prompt_id"]]] = None - - metrics: Optional[List[Literal["merchant_share"]]] = None - - target_asset_names: Optional[List[str]] = None - - owned_asset_names: Optional[List[str]] = None diff --git a/src/types/reports/shopping_merchant_visibility_by_brand_params.py b/src/types/reports/shopping_merchant_visibility_by_brand_params.py deleted file mode 100644 index e9254ff9..00000000 --- a/src/types/reports/shopping_merchant_visibility_by_brand_params.py +++ /dev/null @@ -1,74 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Dict, Iterable, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._types import SequenceNotStr -from ..region_id_filter import RegionIdFilter -from ..model_id_filter import ModelIdFilter -from ..topic_id_filter import TopicIdFilter -from ..tag_id_filter import TagIdFilter -from ..prompt_id_filter import PromptIdFilter -from ..persona_id_filter import PersonaIdFilter -from .brand_name_filter import BrandNameFilter -from .merchant_name_filter import MerchantNameFilter -from .product_name_filter import ProductNameFilter -from ..pagination import Pagination -from ..._utils import PropertyInfo - -__all__ = ["ShoppingMerchantVisibilityByBrandParams", "ProfoundShoppingApiAssetNameFilter"] - - -class ShoppingMerchantVisibilityByBrandParams(TypedDict, total=False): - - category_id: Required[str] - - start_date: Required[Union[str, datetime]] - """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - end_date: Required[Union[str, datetime]] - """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - comparison_start_date: Optional[Union[str, datetime]] - - comparison_end_date: Optional[Union[str, datetime]] - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - - filters: Iterable[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]] - - order_by: Dict[str, Literal["asc", "desc"]] - - pagination: Optional[Pagination] - - include_count: bool - - tag_filter_type: Literal["any", "all"] - - include_no_tag: bool - - exclude_topic_ids: bool - - dimensions: Iterable[Literal["period", "merchant_name", "brand_name"]] - - metrics: Iterable[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "total_count"]] - - owned_asset_names: SequenceNotStr[str] - - search_brand: Optional[str] - - include_brand: Optional[str] - - include_brand_only: bool - - -class ProfoundShoppingApiAssetNameFilter(TypedDict, total=False): - - field: Required[Literal["asset_name"]] - - operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[str, SequenceNotStr[str]]] - diff --git a/src/types/reports/shopping_merchant_visibility_by_brand_query.py b/src/types/reports/shopping_merchant_visibility_by_brand_query.py deleted file mode 100644 index 81f2dd83..00000000 --- a/src/types/reports/shopping_merchant_visibility_by_brand_query.py +++ /dev/null @@ -1,73 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Dict, List, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal -from ..._utils import PropertyInfo - -from ..._models import BaseModel -from ..region_id_filter import RegionIdFilter -from ..model_id_filter import ModelIdFilter -from ..topic_id_filter import TopicIdFilter -from ..tag_id_filter import TagIdFilter -from ..prompt_id_filter import PromptIdFilter -from ..persona_id_filter import PersonaIdFilter -from .brand_name_filter import BrandNameFilter -from .merchant_name_filter import MerchantNameFilter -from .product_name_filter import ProductNameFilter -from ..pagination import Pagination - -__all__ = ["ShoppingMerchantVisibilityByBrandQuery", "ProfoundShoppingApiAssetNameFilter"] - - -class ProfoundShoppingApiAssetNameFilter(BaseModel): - - field: Literal["asset_name"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] - - - -class ShoppingMerchantVisibilityByBrandQuery(BaseModel): - - category_id: str - - start_date: datetime - """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - end_date: datetime - """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - comparison_start_date: Optional[datetime] = None - - comparison_end_date: Optional[datetime] = None - - date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None - - filters: Optional[List[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]]] = None - - order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None - - pagination: Optional[Pagination] = None - - include_count: Optional[bool] = None - - tag_filter_type: Optional[Literal["any", "all"]] = None - - include_no_tag: Optional[bool] = None - - exclude_topic_ids: Optional[bool] = None - - dimensions: Optional[List[Literal["period", "merchant_name", "brand_name"]]] = None - - metrics: Optional[List[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "total_count"]]] = None - - owned_asset_names: Optional[List[str]] = None - - search_brand: Optional[str] = None - - include_brand: Optional[str] = None - - include_brand_only: Optional[bool] = None diff --git a/src/types/reports/shopping_product_merchant_urls_params.py b/src/types/reports/shopping_product_merchant_urls_params.py deleted file mode 100644 index ca73f25c..00000000 --- a/src/types/reports/shopping_product_merchant_urls_params.py +++ /dev/null @@ -1,21 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Union -from datetime import datetime -from typing_extensions import Required, TypedDict -from ..._types import SequenceNotStr - -__all__ = ["ShoppingProductMerchantUrlsParams"] - - -class ShoppingProductMerchantUrlsParams(TypedDict, total=False): - - category_id: Required[str] - - product_names: Required[SequenceNotStr[str]] - - start_date: Required[Union[str, datetime]] - - end_date: Required[Union[str, datetime]] diff --git a/src/types/reports/shopping_product_merchant_urls_query.py b/src/types/reports/shopping_product_merchant_urls_query.py deleted file mode 100644 index 5d602474..00000000 --- a/src/types/reports/shopping_product_merchant_urls_query.py +++ /dev/null @@ -1,19 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List -from datetime import datetime - -from ..._models import BaseModel - -__all__ = ["ShoppingProductMerchantUrlsQuery"] - - -class ShoppingProductMerchantUrlsQuery(BaseModel): - - category_id: str - - product_names: List[str] - - start_date: datetime - - end_date: datetime diff --git a/src/types/reports/shopping_product_merchant_urls_response.py b/src/types/reports/shopping_product_merchant_urls_response.py deleted file mode 100644 index 5e16ba7d..00000000 --- a/src/types/reports/shopping_product_merchant_urls_response.py +++ /dev/null @@ -1,21 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List - -from ..._models import BaseModel -from ..report_info import ReportInfo - -__all__ = ["ShoppingProductMerchantUrlsResponse", "Data"] - - -class Data(BaseModel): - pass - - - -class ShoppingProductMerchantUrlsResponse(BaseModel): - - info: ReportInfo - """Base model for report information.""" - - data: List[Data] diff --git a/src/types/reports/shopping_trigger_rate_params.py b/src/types/reports/shopping_trigger_rate_params.py deleted file mode 100644 index 02f8d25e..00000000 --- a/src/types/reports/shopping_trigger_rate_params.py +++ /dev/null @@ -1,66 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Dict, Iterable, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._types import SequenceNotStr -from ..region_id_filter import RegionIdFilter -from ..model_id_filter import ModelIdFilter -from ..topic_id_filter import TopicIdFilter -from ..tag_id_filter import TagIdFilter -from ..prompt_id_filter import PromptIdFilter -from ..persona_id_filter import PersonaIdFilter -from .brand_name_filter import BrandNameFilter -from .merchant_name_filter import MerchantNameFilter -from .product_name_filter import ProductNameFilter -from ..pagination import Pagination -from ..._utils import PropertyInfo - -__all__ = ["ShoppingTriggerRateParams", "ProfoundShoppingApiAssetNameFilter"] - - -class ShoppingTriggerRateParams(TypedDict, total=False): - - category_id: Required[str] - - start_date: Required[Union[str, datetime]] - """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - end_date: Required[Union[str, datetime]] - """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - comparison_start_date: Optional[Union[str, datetime]] - - comparison_end_date: Optional[Union[str, datetime]] - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - - filters: Iterable[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]] - - order_by: Dict[str, Literal["asc", "desc"]] - - pagination: Optional[Pagination] - - include_count: bool - - tag_filter_type: Literal["any", "all"] - - include_no_tag: bool - - exclude_topic_ids: bool - - dimensions: Iterable[Literal["period", "date", "model_id", "topic_id", "region_id", "persona_id", "prompt_id", "prompt"]] - - metrics: Iterable[Literal["total_runs", "shopping_triggered_runs", "trigger_rate_percentage"]] - - -class ProfoundShoppingApiAssetNameFilter(TypedDict, total=False): - - field: Required[Literal["asset_name"]] - - operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[str, SequenceNotStr[str]]] - diff --git a/src/types/reports/shopping_trigger_rate_query.py b/src/types/reports/shopping_trigger_rate_query.py deleted file mode 100644 index 7bd3ebc6..00000000 --- a/src/types/reports/shopping_trigger_rate_query.py +++ /dev/null @@ -1,65 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Dict, List, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal -from ..._utils import PropertyInfo - -from ..._models import BaseModel -from ..region_id_filter import RegionIdFilter -from ..model_id_filter import ModelIdFilter -from ..topic_id_filter import TopicIdFilter -from ..tag_id_filter import TagIdFilter -from ..prompt_id_filter import PromptIdFilter -from ..persona_id_filter import PersonaIdFilter -from .brand_name_filter import BrandNameFilter -from .merchant_name_filter import MerchantNameFilter -from .product_name_filter import ProductNameFilter -from ..pagination import Pagination - -__all__ = ["ShoppingTriggerRateQuery", "ProfoundShoppingApiAssetNameFilter"] - - -class ProfoundShoppingApiAssetNameFilter(BaseModel): - - field: Literal["asset_name"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] - - - -class ShoppingTriggerRateQuery(BaseModel): - - category_id: str - - start_date: datetime - """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - end_date: datetime - """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - comparison_start_date: Optional[datetime] = None - - comparison_end_date: Optional[datetime] = None - - date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None - - filters: Optional[List[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]]] = None - - order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None - - pagination: Optional[Pagination] = None - - include_count: Optional[bool] = None - - tag_filter_type: Optional[Literal["any", "all"]] = None - - include_no_tag: Optional[bool] = None - - exclude_topic_ids: Optional[bool] = None - - dimensions: Optional[List[Literal["period", "date", "model_id", "topic_id", "region_id", "persona_id", "prompt_id", "prompt"]]] = None - - metrics: Optional[List[Literal["total_runs", "shopping_triggered_runs", "trigger_rate_percentage"]]] = None diff --git a/src/types/reports/shopping_visibility_params.py b/src/types/reports/shopping_visibility_params.py deleted file mode 100644 index ad1d9b7a..00000000 --- a/src/types/reports/shopping_visibility_params.py +++ /dev/null @@ -1,80 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Dict, Iterable, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._types import SequenceNotStr -from ..region_id_filter import RegionIdFilter -from ..model_id_filter import ModelIdFilter -from ..topic_id_filter import TopicIdFilter -from ..tag_id_filter import TagIdFilter -from ..prompt_id_filter import PromptIdFilter -from ..persona_id_filter import PersonaIdFilter -from .brand_name_filter import BrandNameFilter -from .merchant_name_filter import MerchantNameFilter -from .product_name_filter import ProductNameFilter -from ..pagination import Pagination -from ..._utils import PropertyInfo - -__all__ = ["ShoppingVisibilityParams", "ProfoundShoppingApiAssetNameFilter"] - - -class ShoppingVisibilityParams(TypedDict, total=False): - - category_id: Required[str] - - start_date: Required[Union[str, datetime]] - """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - end_date: Required[Union[str, datetime]] - """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - comparison_start_date: Optional[Union[str, datetime]] - - comparison_end_date: Optional[Union[str, datetime]] - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - - filters: Iterable[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]] - - order_by: Dict[str, Literal["asc", "desc"]] - - pagination: Optional[Pagination] - - include_count: bool - - tag_filter_type: Literal["any", "all"] - - include_no_tag: bool - - exclude_topic_ids: bool - - dimensions: Iterable[Literal["period", "asset_name", "date", "model_id", "topic_id", "region_id", "prompt_id", "prompt"]] - - metrics: Iterable[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "average_position_rank", "position1_percentage", "position2_percentage", "position3_percentage", "position_above3_percentage", "total_count"]] - - owned_asset_names: SequenceNotStr[str] - - search_asset: Optional[str] - - include_asset: Optional[str] - - include_asset_only: bool - - include_assets_only: SequenceNotStr[str] - - rank_by: Literal["visibility_score", "average_position"] - - include_position_frequency: bool - - -class ProfoundShoppingApiAssetNameFilter(TypedDict, total=False): - - field: Required[Literal["asset_name"]] - - operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[str, SequenceNotStr[str]]] - diff --git a/src/types/reports/shopping_visibility_query.py b/src/types/reports/shopping_visibility_query.py deleted file mode 100644 index 48711c23..00000000 --- a/src/types/reports/shopping_visibility_query.py +++ /dev/null @@ -1,79 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Dict, List, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal -from ..._utils import PropertyInfo - -from ..._models import BaseModel -from ..region_id_filter import RegionIdFilter -from ..model_id_filter import ModelIdFilter -from ..topic_id_filter import TopicIdFilter -from ..tag_id_filter import TagIdFilter -from ..prompt_id_filter import PromptIdFilter -from ..persona_id_filter import PersonaIdFilter -from .brand_name_filter import BrandNameFilter -from .merchant_name_filter import MerchantNameFilter -from .product_name_filter import ProductNameFilter -from ..pagination import Pagination - -__all__ = ["ShoppingVisibilityQuery", "ProfoundShoppingApiAssetNameFilter"] - - -class ProfoundShoppingApiAssetNameFilter(BaseModel): - - field: Literal["asset_name"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] - - - -class ShoppingVisibilityQuery(BaseModel): - - category_id: str - - start_date: datetime - """Start date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - end_date: datetime - """End date. Accepts YYYY-MM-DD, YYYY-MM-DD HH:MM, or ISO timestamp.""" - - comparison_start_date: Optional[datetime] = None - - comparison_end_date: Optional[datetime] = None - - date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None - - filters: Optional[List[Annotated[Union[RegionIdFilter, ModelIdFilter, TopicIdFilter, TagIdFilter, PromptIdFilter, PersonaIdFilter, BrandNameFilter, MerchantNameFilter, ProductNameFilter, ProfoundShoppingApiAssetNameFilter], PropertyInfo(discriminator="field")]]] = None - - order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None - - pagination: Optional[Pagination] = None - - include_count: Optional[bool] = None - - tag_filter_type: Optional[Literal["any", "all"]] = None - - include_no_tag: Optional[bool] = None - - exclude_topic_ids: Optional[bool] = None - - dimensions: Optional[List[Literal["period", "asset_name", "date", "model_id", "topic_id", "region_id", "prompt_id", "prompt"]]] = None - - metrics: Optional[List[Literal["visibility_score", "share_of_voice", "average_position", "visibility_rank", "average_position_rank", "position1_percentage", "position2_percentage", "position3_percentage", "position_above3_percentage", "total_count"]]] = None - - owned_asset_names: Optional[List[str]] = None - - search_asset: Optional[str] = None - - include_asset: Optional[str] = None - - include_asset_only: Optional[bool] = None - - include_assets_only: Optional[List[str]] = None - - rank_by: Optional[Literal["visibility_score", "average_position"]] = None - - include_position_frequency: Optional[bool] = None diff --git a/src/types/reports/stream_citations_query.py b/src/types/reports/stream_citations_query.py deleted file mode 100644 index 1eea751d..00000000 --- a/src/types/reports/stream_citations_query.py +++ /dev/null @@ -1,74 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Dict, List, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal -from ..._utils import PropertyInfo - -from ..._models import BaseModel -from ..pagination import Pagination -from ..hostname_filter import HostnameFilter -from ..path_filter import PathFilter -from ..region_id_filter import RegionIdFilter -from ..region_name_filter import RegionNameFilter -from ..topic_id_filter import TopicIdFilter -from ..topic_name_filter import TopicNameFilter -from ..model_id_filter import ModelIdFilter -from ..tag_id_filter import TagIdFilter -from ..tag_name_filter import TagNameFilter -from ..url_filter import UrlFilter -from ..root_domain_filter import RootDomainFilter -from ..analysis_type_filter import AnalysisTypeFilter -from ..prompt_type_filter import PromptTypeFilter -from ..persona_id_filter import PersonaIdFilter -from ..prompt_filter import PromptFilter -from ..prompt_id_filter import PromptIdFilter - -__all__ = ["StreamCitationsQuery", "CitationCategoryFilter"] - - -class CitationCategoryFilter(BaseModel): - - field: Literal["citation_category"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] - - - -class StreamCitationsQuery(BaseModel): - - date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None - """Date interval for the report. (only used with date dimension)""" - - dimensions: Optional[List[Literal["hostname", "path", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "url", "root_domain", "persona", "citation_category"]]] = None - """Dimensions to group the report by.""" - - metrics: List[Literal["count", "citation_share", "share_of_voice", "first_cited_at"]] - """Metrics to include. `share_of_voice` is deprecated, use `citation_share` instead.""" - - order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None - """ - - Custom ordering of the report results. - - The order is a record of key-value pairs where: - - `key` is the field to order by, which can be a metric or dimension - - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. - - When not specified, the default order is the first metric in the query descending. - """ - - pagination: Optional[Pagination] = None - - category_id: str - - start_date: datetime - """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - end_date: datetime - """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - filters: Optional[List[Annotated[Union[HostnameFilter, PathFilter, RegionIdFilter, RegionNameFilter, TopicIdFilter, TopicNameFilter, ModelIdFilter, TagIdFilter, TagNameFilter, UrlFilter, RootDomainFilter, AnalysisTypeFilter, PromptTypeFilter, PersonaIdFilter, CitationCategoryFilter, PromptFilter, PromptIdFilter], PropertyInfo(discriminator="field")]]] = None - """List of filters to apply to the citations report.""" diff --git a/src/types/reports/stream_sentiment_query.py b/src/types/reports/stream_sentiment_query.py deleted file mode 100644 index 85b60422..00000000 --- a/src/types/reports/stream_sentiment_query.py +++ /dev/null @@ -1,75 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Dict, List, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal -from ..._utils import PropertyInfo - -from ..._models import BaseModel -from ..pagination import Pagination -from ..asset_id_filter import AssetIdFilter -from ..region_id_filter import RegionIdFilter -from ..region_name_filter import RegionNameFilter -from ..topic_id_filter import TopicIdFilter -from ..topic_name_filter import TopicNameFilter -from ..model_id_filter import ModelIdFilter -from ..tag_id_filter import TagIdFilter -from ..tag_name_filter import TagNameFilter -from ..prompt_filter import PromptFilter -from ..persona_id_filter import PersonaIdFilter - -__all__ = ["StreamSentimentQuery", "ProfoundAnswerEngineInsightsFiltersAssetNameFilter", "ThemeFilter"] - - -class ThemeFilter(BaseModel): - - field: Literal["theme"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] - -class ProfoundAnswerEngineInsightsFiltersAssetNameFilter(BaseModel): - - field: Literal["asset_name"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] - - - -class StreamSentimentQuery(BaseModel): - - date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None - """Date interval for the report. (only used with date dimension)""" - - dimensions: Optional[List[Literal["theme", "date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "tag", "prompt", "prompt_id", "sentiment_type", "persona"]]] = None - """Dimensions to group the report by.""" - - metrics: List[Literal["positive", "negative", "occurrences"]] - - order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None - """ - - Custom ordering of the report results. - - The order is a record of key-value pairs where: - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. - - When not specified, the default order is the first metric in the query descending. - """ - - pagination: Optional[Pagination] = None - - category_id: str - - start_date: datetime - """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - end_date: datetime - """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - filters: Optional[List[Annotated[Union[AssetIdFilter, ProfoundAnswerEngineInsightsFiltersAssetNameFilter, ThemeFilter, RegionIdFilter, RegionNameFilter, TopicIdFilter, TopicNameFilter, ModelIdFilter, TagIdFilter, TagNameFilter, PromptFilter, PersonaIdFilter], PropertyInfo(discriminator="field")]]] = None - """List of filters to apply to the sentiment report.""" diff --git a/src/types/reports/stream_visibility_query.py b/src/types/reports/stream_visibility_query.py deleted file mode 100644 index 08a1caa1..00000000 --- a/src/types/reports/stream_visibility_query.py +++ /dev/null @@ -1,67 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Dict, List, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal -from ..._utils import PropertyInfo - -from ..._models import BaseModel -from ..pagination import Pagination -from ..region_id_filter import RegionIdFilter -from ..region_name_filter import RegionNameFilter -from ..model_id_filter import ModelIdFilter -from ..topic_id_filter import TopicIdFilter -from ..topic_name_filter import TopicNameFilter -from ..tag_id_filter import TagIdFilter -from ..tag_name_filter import TagNameFilter -from ..prompt_id_filter import PromptIdFilter -from ..prompt_filter import PromptFilter -from ..persona_id_filter import PersonaIdFilter - -__all__ = ["StreamVisibilityQuery", "ProfoundAnswerEngineInsightsFiltersAssetNameFilter"] - - -class ProfoundAnswerEngineInsightsFiltersAssetNameFilter(BaseModel): - - field: Literal["asset_name"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] - - - -class StreamVisibilityQuery(BaseModel): - - date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None - """Date interval for the report. (only used with date dimension)""" - - dimensions: Optional[List[Literal["date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "prompt", "prompt_id", "tag", "persona"]]] = None - """Dimensions to group the report by.""" - - metrics: List[Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"]] - - order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None - """ - - Custom ordering of the report results. - - The order is a record of key-value pairs where: - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. - - When not specified, the default order is the first metric in the query descending. - """ - - pagination: Optional[Pagination] = None - - category_id: str - - start_date: datetime - """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - end_date: datetime - """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - filters: Optional[List[Annotated[Union[RegionIdFilter, RegionNameFilter, ModelIdFilter, TopicIdFilter, TopicNameFilter, ProfoundAnswerEngineInsightsFiltersAssetNameFilter, TagIdFilter, TagNameFilter, PromptIdFilter, PromptFilter, PersonaIdFilter], PropertyInfo(discriminator="field")]]] = None - """List of filters to apply to the visibility report.""" diff --git a/src/types/reports/stream_web_search_results_query.py b/src/types/reports/stream_web_search_results_query.py deleted file mode 100644 index 3ab997b4..00000000 --- a/src/types/reports/stream_web_search_results_query.py +++ /dev/null @@ -1,69 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Dict, List, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal -from ..._utils import PropertyInfo - -from ..._models import BaseModel -from ..pagination import Pagination -from ..hostname_filter import HostnameFilter -from ..path_filter import PathFilter -from ..region_id_filter import RegionIdFilter -from ..topic_id_filter import TopicIdFilter -from ..model_id_filter import ModelIdFilter -from ..tag_id_filter import TagIdFilter -from ..url_filter import UrlFilter -from ..root_domain_filter import RootDomainFilter -from ..persona_id_filter import PersonaIdFilter -from ..prompt_filter import PromptFilter -from ..prompt_id_filter import PromptIdFilter - -__all__ = ["StreamWebSearchResultsQuery", "SearchQueryFilter"] - - -class SearchQueryFilter(BaseModel): - - field: Literal["search_query"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] - - - -class StreamWebSearchResultsQuery(BaseModel): - - date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None - """Date interval for the report. (only used with date dimension)""" - - dimensions: Optional[List[Literal["hostname", "path", "url", "root_domain", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "persona", "search_query"]]] = None - """Dimensions to group the report by.""" - - metrics: List[Literal["count", "search_share"]] - """Metrics to include. `search_share` is the per-prompt occurrence rate.""" - - order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None - """ - - Custom ordering of the report results. - - The order is a record of key-value pairs where: - - `key` is the field to order by, which can be a metric or dimension - - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. - - When not specified, the default order is the first metric in the query descending. - """ - - pagination: Optional[Pagination] = None - - category_id: str - - start_date: datetime - """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - end_date: datetime - """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - filters: Optional[List[Annotated[Union[HostnameFilter, PathFilter, RegionIdFilter, TopicIdFilter, ModelIdFilter, TagIdFilter, UrlFilter, RootDomainFilter, PersonaIdFilter, PromptFilter, PromptIdFilter, SearchQueryFilter], PropertyInfo(discriminator="field")]]] = None - """List of filters to apply to the web search results report.""" diff --git a/src/types/reports/top_inaccurate_claims_query.py b/src/types/reports/top_inaccurate_claims_query.py deleted file mode 100644 index e1eeea9c..00000000 --- a/src/types/reports/top_inaccurate_claims_query.py +++ /dev/null @@ -1,45 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Optional -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["TopInaccurateClaimsQuery"] - - -class TopInaccurateClaimsQuery(BaseModel): - - start_date: str - - end_date: str - - comparison_start_date: Optional[str] = None - - comparison_end_date: Optional[str] = None - - category_id: str - - topic_ids: Optional[List[str]] = None - - exclude_topic_ids: Optional[bool] = None - - tag_ids: Optional[List[str]] = None - - tag_filter_type: Optional[Literal["all", "any"]] = None - - include_no_tag: Optional[bool] = None - - region_ids: Optional[List[str]] = None - - platform_ids: Optional[List[str]] = None - - persona_ids: Optional[List[str]] = None - - include_no_persona: Optional[bool] = None - - prompt_ids: Optional[List[str]] = None - - citation_categories: Optional[List[str]] = None - - limit: Optional[int] = None diff --git a/src/types/reports/visibility_query.py b/src/types/reports/visibility_query.py deleted file mode 100644 index acbba1a2..00000000 --- a/src/types/reports/visibility_query.py +++ /dev/null @@ -1,68 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Dict, List, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal -from ..._utils import PropertyInfo - -from ..._models import BaseModel -from ..pagination import Pagination -from ..region_id_filter import RegionIdFilter -from ..region_name_filter import RegionNameFilter -from ..model_id_filter import ModelIdFilter -from ..topic_id_filter import TopicIdFilter -from ..topic_name_filter import TopicNameFilter -from ..tag_id_filter import TagIdFilter -from ..tag_name_filter import TagNameFilter -from ..prompt_id_filter import PromptIdFilter -from ..prompt_filter import PromptFilter -from ..persona_id_filter import PersonaIdFilter - -__all__ = ["VisibilityQuery", "ProfoundAnswerEngineInsightsFiltersAssetNameFilter"] - - -class ProfoundAnswerEngineInsightsFiltersAssetNameFilter(BaseModel): - - field: Literal["asset_name"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] - - - -class VisibilityQuery(BaseModel): - - date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None - """Date interval for the report. (only used with date dimension)""" - - dimensions: Optional[List[Literal["date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "prompt", "prompt_id", "tag", "persona"]]] = None - """Dimensions to group the report by.""" - - metrics: List[Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"]] - - order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None - """ - - Custom ordering of the report results. - - The order is a record of key-value pairs where: - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. - - When not specified, the default order is the first metric in the query descending. - """ - - pagination: Optional[Pagination] = None - """Pagination settings for the report results.""" - - category_id: str - - start_date: datetime - """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - end_date: datetime - """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - filters: Optional[List[Annotated[Union[RegionIdFilter, RegionNameFilter, ModelIdFilter, TopicIdFilter, TopicNameFilter, ProfoundAnswerEngineInsightsFiltersAssetNameFilter, TagIdFilter, TagNameFilter, PromptIdFilter, PromptFilter, PersonaIdFilter], PropertyInfo(discriminator="field")]]] = None - """List of filters to apply to the visibility report.""" diff --git a/src/types/reports/visibility_query_v1_reports_post_params.py b/src/types/reports/visibility_query_v1_reports_post_params.py deleted file mode 100644 index 3b49d8ba..00000000 --- a/src/types/reports/visibility_query_v1_reports_post_params.py +++ /dev/null @@ -1,69 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Dict, Iterable, Union -from datetime import datetime -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._types import SequenceNotStr -from ..pagination import Pagination -from ..region_id_filter import RegionIdFilter -from ..region_name_filter import RegionNameFilter -from ..model_id_filter import ModelIdFilter -from ..topic_id_filter import TopicIdFilter -from ..topic_name_filter import TopicNameFilter -from ..tag_id_filter import TagIdFilter -from ..tag_name_filter import TagNameFilter -from ..prompt_id_filter import PromptIdFilter -from ..prompt_filter import PromptFilter -from ..persona_id_filter import PersonaIdFilter -from ..._utils import PropertyInfo - -__all__ = ["VisibilityQueryV1ReportsPostParams", "ProfoundAnswerEngineInsightsFiltersAssetNameFilter"] - - -class VisibilityQueryV1ReportsPostParams(TypedDict, total=False): - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - """Date interval for the report. (only used with date dimension)""" - - dimensions: Iterable[Literal["date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "prompt", "prompt_id", "tag", "persona"]] - """Dimensions to group the report by.""" - - metrics: Required[Iterable[Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"]]] - - order_by: Dict[str, Literal["asc", "desc"]] - """ - - Custom ordering of the report results. - - The order is a record of key-value pairs where: - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. - - When not specified, the default order is the first metric in the query descending. - """ - - pagination: Pagination - """Pagination settings for the report results.""" - - category_id: Required[str] - - start_date: Required[Union[str, datetime]] - """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - end_date: Required[Union[str, datetime]] - """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - filters: Iterable[Annotated[Union[RegionIdFilter, RegionNameFilter, ModelIdFilter, TopicIdFilter, TopicNameFilter, ProfoundAnswerEngineInsightsFiltersAssetNameFilter, TagIdFilter, TagNameFilter, PromptIdFilter, PromptFilter, PersonaIdFilter], PropertyInfo(discriminator="field")]] - """List of filters to apply to the visibility report.""" - - -class ProfoundAnswerEngineInsightsFiltersAssetNameFilter(TypedDict, total=False): - - field: Required[Literal["asset_name"]] - - operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[str, SequenceNotStr[str]]] - diff --git a/src/types/reports/visibility_query_v2_v2_reports_post_params.py b/src/types/reports/visibility_query_v2_v2_reports_post_params.py deleted file mode 100644 index b845ae39..00000000 --- a/src/types/reports/visibility_query_v2_v2_reports_post_params.py +++ /dev/null @@ -1,70 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Iterable, Optional, Union -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._types import SequenceNotStr -from ..._utils import PropertyInfo - -__all__ = ["VisibilityQueryV2V2ReportsPostParams", "EntityFilterClause", "FilterNode", "AppRoutesV2AnswerEngineInsightsReportsVisibilitySortSpec"] - - -class VisibilityQueryV2V2ReportsPostParams(TypedDict, total=False): - - category_id: Required[str] - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - group_by: Iterable[Literal["date", "model", "topic", "region", "prompt", "persona"]] - - metrics: Optional[Iterable[Literal["visibility_score", "share_of_voice", "average_position"]]] - - interval: Literal["day", "week", "month"] - - scope: Literal["owned", "all"] - - assets: Optional[Union[str, SequenceNotStr[str], EntityFilterClause]] - """A name (`is`), a list (`in`), or {op,value} with op `is`/`in`/`not_in`.""" - - filter: Optional[FilterNode] - - sort: AppRoutesV2AnswerEngineInsightsReportsVisibilitySortSpec - - limit: Optional[int] - """Page size; default 10, max 50.""" - - max_results: Optional[int] - """Stream endpoint only: cap the number of streamed rows (default: all).""" - - cursor: Optional[str] - - -class AppRoutesV2AnswerEngineInsightsReportsVisibilitySortSpec(TypedDict, total=False): - - field: Literal["visibility_score", "share_of_voice", "average_position"] - -class FilterNode(TypedDict, total=False): - - and_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="and")] - - or_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="or")] - - not_: Annotated[Optional[FilterNode], PropertyInfo(alias="not")] - - field: Optional[str] - - op: Optional[str] - - value: str - -class EntityFilterClause(TypedDict, total=False): - - op: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[str, SequenceNotStr[str]]] - diff --git a/src/types/reports/visibility_query_v2_v2_reports_post_response.py b/src/types/reports/visibility_query_v2_v2_reports_post_response.py deleted file mode 100644 index 7da4e82e..00000000 --- a/src/types/reports/visibility_query_v2_v2_reports_post_response.py +++ /dev/null @@ -1,13 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing_extensions import TypeAlias -from ..._models import BaseModel - -__all__ = ["VisibilityQueryV2V2ReportsPostResponse", "VisibilityQueryV2V2ReportsPostResponse"] - -class VisibilityQueryV2V2ReportsPostResponse(BaseModel): - pass - - - -VisibilityQueryV2V2ReportsPostResponse: TypeAlias = VisibilityQueryV2V2ReportsPostResponse diff --git a/src/types/reports/visibility_stream_v1_reports_stream_post_params.py b/src/types/reports/visibility_stream_v1_reports_stream_post_params.py deleted file mode 100644 index 168c20de..00000000 --- a/src/types/reports/visibility_stream_v1_reports_stream_post_params.py +++ /dev/null @@ -1,68 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Dict, Iterable, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._types import SequenceNotStr -from ..pagination import Pagination -from ..region_id_filter import RegionIdFilter -from ..region_name_filter import RegionNameFilter -from ..model_id_filter import ModelIdFilter -from ..topic_id_filter import TopicIdFilter -from ..topic_name_filter import TopicNameFilter -from ..tag_id_filter import TagIdFilter -from ..tag_name_filter import TagNameFilter -from ..prompt_id_filter import PromptIdFilter -from ..prompt_filter import PromptFilter -from ..persona_id_filter import PersonaIdFilter -from ..._utils import PropertyInfo - -__all__ = ["VisibilityStreamV1ReportsStreamPostParams", "ProfoundAnswerEngineInsightsFiltersAssetNameFilter"] - - -class VisibilityStreamV1ReportsStreamPostParams(TypedDict, total=False): - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - """Date interval for the report. (only used with date dimension)""" - - dimensions: Iterable[Literal["date", "region", "topic", "topic_id", "model", "asset_id", "asset_name", "prompt", "prompt_id", "tag", "persona"]] - """Dimensions to group the report by.""" - - metrics: Required[Iterable[Literal["share_of_voice", "mentions_count", "visibility_score", "executions", "average_position"]]] - - order_by: Dict[str, Literal["asc", "desc"]] - """ - - Custom ordering of the report results. - - The order is a record of key-value pairs where: - - key is the field to order by, which can be a metric or dimension - - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. - - When not specified, the default order is the first metric in the query descending. - """ - - pagination: Optional[Pagination] - - category_id: Required[str] - - start_date: Required[Union[str, datetime]] - """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - end_date: Required[Union[str, datetime]] - """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - filters: Iterable[Annotated[Union[RegionIdFilter, RegionNameFilter, ModelIdFilter, TopicIdFilter, TopicNameFilter, ProfoundAnswerEngineInsightsFiltersAssetNameFilter, TagIdFilter, TagNameFilter, PromptIdFilter, PromptFilter, PersonaIdFilter], PropertyInfo(discriminator="field")]] - """List of filters to apply to the visibility report.""" - - -class ProfoundAnswerEngineInsightsFiltersAssetNameFilter(TypedDict, total=False): - - field: Required[Literal["asset_name"]] - - operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[str, SequenceNotStr[str]]] - diff --git a/src/types/reports/visibility_stream_v1_reports_stream_post_response.py b/src/types/reports/visibility_stream_v1_reports_stream_post_response.py deleted file mode 100644 index 2a39192f..00000000 --- a/src/types/reports/visibility_stream_v1_reports_stream_post_response.py +++ /dev/null @@ -1,27 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Union -from typing_extensions import TypeAlias -from ..._models import BaseModel - -__all__ = ["VisibilityStreamV1ReportsStreamPostResponse", "VisibilityStreamV1ReportsStreamPostResponse", "Query", "VisibilityStreamV1ReportsStreamPostResponse2"] - -class VisibilityStreamV1ReportsStreamPostResponse2(BaseModel): - pass - -class Query(BaseModel): - pass - -class VisibilityStreamV1ReportsStreamPostResponse(BaseModel): - - query: Query - """The normalized query used to build the stream.""" - - total_rows: int - """Total number of rows available before pagination is applied.""" - - - -VisibilityStreamV1ReportsStreamPostResponse: TypeAlias = Union[VisibilityStreamV1ReportsStreamPostResponse, VisibilityStreamV1ReportsStreamPostResponse2] diff --git a/src/types/reports/visibility_stream_v2_v2_reports_stream_post_params.py b/src/types/reports/visibility_stream_v2_v2_reports_stream_post_params.py deleted file mode 100644 index a94e4d00..00000000 --- a/src/types/reports/visibility_stream_v2_v2_reports_stream_post_params.py +++ /dev/null @@ -1,70 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Iterable, Optional, Union -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._types import SequenceNotStr -from ..._utils import PropertyInfo - -__all__ = ["VisibilityStreamV2V2ReportsStreamPostParams", "EntityFilterClause", "FilterNode", "AppRoutesV2AnswerEngineInsightsReportsVisibilitySortSpec"] - - -class VisibilityStreamV2V2ReportsStreamPostParams(TypedDict, total=False): - - category_id: Required[str] - - start_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - end_date: Required[str] - """YYYY-MM-DD, ET, inclusive""" - - group_by: Iterable[Literal["date", "model", "topic", "region", "prompt", "persona"]] - - metrics: Optional[Iterable[Literal["visibility_score", "share_of_voice", "average_position"]]] - - interval: Literal["day", "week", "month"] - - scope: Literal["owned", "all"] - - assets: Optional[Union[str, SequenceNotStr[str], EntityFilterClause]] - """A name (`is`), a list (`in`), or {op,value} with op `is`/`in`/`not_in`.""" - - filter: Optional[FilterNode] - - sort: AppRoutesV2AnswerEngineInsightsReportsVisibilitySortSpec - - limit: Optional[int] - """Page size; default 10, max 50.""" - - max_results: Optional[int] - """Stream endpoint only: cap the number of streamed rows (default: all).""" - - cursor: Optional[str] - - -class AppRoutesV2AnswerEngineInsightsReportsVisibilitySortSpec(TypedDict, total=False): - - field: Literal["visibility_score", "share_of_voice", "average_position"] - -class FilterNode(TypedDict, total=False): - - and_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="and")] - - or_: Annotated[Optional[Iterable[FilterNode]], PropertyInfo(alias="or")] - - not_: Annotated[Optional[FilterNode], PropertyInfo(alias="not")] - - field: Optional[str] - - op: Optional[str] - - value: str - -class EntityFilterClause(TypedDict, total=False): - - op: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[str, SequenceNotStr[str]]] - diff --git a/src/types/reports/visibility_stream_v2_v2_reports_stream_post_response.py b/src/types/reports/visibility_stream_v2_v2_reports_stream_post_response.py deleted file mode 100644 index 667fafd3..00000000 --- a/src/types/reports/visibility_stream_v2_v2_reports_stream_post_response.py +++ /dev/null @@ -1,7 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing_extensions import TypeAlias - -__all__ = ["VisibilityStreamV2V2ReportsStreamPostResponse"] - -VisibilityStreamV2V2ReportsStreamPostResponse: TypeAlias = str diff --git a/src/types/reports/visibility_v2_query.py b/src/types/reports/visibility_v2_query.py deleted file mode 100644 index c939c176..00000000 --- a/src/types/reports/visibility_v2_query.py +++ /dev/null @@ -1,72 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import List, Optional, Union -from typing_extensions import Literal - -from pydantic import Field as FieldInfo - -from ..._models import BaseModel - -__all__ = ["VisibilityV2Query", "EntityFilterClause", "FilterNode", "AppRoutesV2AnswerEngineInsightsReportsVisibilitySortSpec"] - - -class AppRoutesV2AnswerEngineInsightsReportsVisibilitySortSpec(BaseModel): - - field: Optional[Literal["visibility_score", "share_of_voice", "average_position"]] = None - -class FilterNode(BaseModel): - - and_: Optional[List[FilterNode]] = FieldInfo(alias="and", default=None) - - or_: Optional[List[FilterNode]] = FieldInfo(alias="or", default=None) - - not_: Optional[FilterNode] = FieldInfo(alias="not", default=None) - - field: Optional[str] = None - - op: Optional[str] = None - - value: Optional[str] = None - -class EntityFilterClause(BaseModel): - - op: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] - - - -class VisibilityV2Query(BaseModel): - - category_id: str - - start_date: str - """YYYY-MM-DD, ET, inclusive""" - - end_date: str - """YYYY-MM-DD, ET, inclusive""" - - group_by: Optional[List[Literal["date", "model", "topic", "region", "prompt", "persona"]]] = None - - metrics: Optional[List[Literal["visibility_score", "share_of_voice", "average_position"]]] = None - - interval: Optional[Literal["day", "week", "month"]] = None - - scope: Optional[Literal["owned", "all"]] = None - - assets: Optional[Union[str, List[str], EntityFilterClause]] = None - """A name (`is`), a list (`in`), or {op,value} with op `is`/`in`/`not_in`.""" - - filter: Optional[FilterNode] = None - - sort: Optional[AppRoutesV2AnswerEngineInsightsReportsVisibilitySortSpec] = None - - limit: Optional[int] = None - """Page size; default 10, max 50.""" - - max_results: Optional[int] = None - """Stream endpoint only: cap the number of streamed rows (default: all).""" - - cursor: Optional[str] = None diff --git a/src/types/reports/web_search_result_query_params.py b/src/types/reports/web_search_result_query_params.py deleted file mode 100644 index d2fe16bd..00000000 --- a/src/types/reports/web_search_result_query_params.py +++ /dev/null @@ -1,71 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Dict, Iterable, Union -from datetime import datetime -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._types import SequenceNotStr -from ..pagination import Pagination -from ..hostname_filter import HostnameFilter -from ..path_filter import PathFilter -from ..region_id_filter import RegionIdFilter -from ..topic_id_filter import TopicIdFilter -from ..model_id_filter import ModelIdFilter -from ..tag_id_filter import TagIdFilter -from ..url_filter import UrlFilter -from ..root_domain_filter import RootDomainFilter -from ..persona_id_filter import PersonaIdFilter -from ..prompt_filter import PromptFilter -from ..prompt_id_filter import PromptIdFilter -from ..._utils import PropertyInfo - -__all__ = ["WebSearchResultQueryParams", "SearchQueryFilter"] - - -class WebSearchResultQueryParams(TypedDict, total=False): - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - """Date interval for the report. (only used with date dimension)""" - - dimensions: Iterable[Literal["hostname", "path", "url", "root_domain", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "persona", "search_query"]] - """Dimensions to group the report by.""" - - metrics: Required[Iterable[Literal["count", "search_share"]]] - """Metrics to include. `search_share` is the per-prompt occurrence rate.""" - - order_by: Dict[str, Literal["asc", "desc"]] - """ - - Custom ordering of the report results. - - The order is a record of key-value pairs where: - - `key` is the field to order by, which can be a metric or dimension - - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. - - When not specified, the default order is the first metric in the query descending. - """ - - pagination: Pagination - """Pagination settings for the report results.""" - - category_id: Required[str] - - start_date: Required[Union[str, datetime]] - """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - end_date: Required[Union[str, datetime]] - """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - filters: Iterable[Annotated[Union[HostnameFilter, PathFilter, RegionIdFilter, TopicIdFilter, ModelIdFilter, TagIdFilter, UrlFilter, RootDomainFilter, PersonaIdFilter, PromptFilter, PromptIdFilter, SearchQueryFilter], PropertyInfo(discriminator="field")]] - """List of filters to apply to the web search results report.""" - - -class SearchQueryFilter(TypedDict, total=False): - - field: Required[Literal["search_query"]] - - operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[str, SequenceNotStr[str]]] - diff --git a/src/types/reports/web_search_result_stream_params.py b/src/types/reports/web_search_result_stream_params.py deleted file mode 100644 index 672832f1..00000000 --- a/src/types/reports/web_search_result_stream_params.py +++ /dev/null @@ -1,70 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Dict, Iterable, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal, Required, TypedDict -from ..._types import SequenceNotStr -from ..pagination import Pagination -from ..hostname_filter import HostnameFilter -from ..path_filter import PathFilter -from ..region_id_filter import RegionIdFilter -from ..topic_id_filter import TopicIdFilter -from ..model_id_filter import ModelIdFilter -from ..tag_id_filter import TagIdFilter -from ..url_filter import UrlFilter -from ..root_domain_filter import RootDomainFilter -from ..persona_id_filter import PersonaIdFilter -from ..prompt_filter import PromptFilter -from ..prompt_id_filter import PromptIdFilter -from ..._utils import PropertyInfo - -__all__ = ["WebSearchResultStreamParams", "SearchQueryFilter"] - - -class WebSearchResultStreamParams(TypedDict, total=False): - - date_interval: Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"] - """Date interval for the report. (only used with date dimension)""" - - dimensions: Iterable[Literal["hostname", "path", "url", "root_domain", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "persona", "search_query"]] - """Dimensions to group the report by.""" - - metrics: Required[Iterable[Literal["count", "search_share"]]] - """Metrics to include. `search_share` is the per-prompt occurrence rate.""" - - order_by: Dict[str, Literal["asc", "desc"]] - """ - - Custom ordering of the report results. - - The order is a record of key-value pairs where: - - `key` is the field to order by, which can be a metric or dimension - - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. - - When not specified, the default order is the first metric in the query descending. - """ - - pagination: Optional[Pagination] - - category_id: Required[str] - - start_date: Required[Union[str, datetime]] - """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - end_date: Required[Union[str, datetime]] - """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - filters: Iterable[Annotated[Union[HostnameFilter, PathFilter, RegionIdFilter, TopicIdFilter, ModelIdFilter, TagIdFilter, UrlFilter, RootDomainFilter, PersonaIdFilter, PromptFilter, PromptIdFilter, SearchQueryFilter], PropertyInfo(discriminator="field")]] - """List of filters to apply to the web search results report.""" - - -class SearchQueryFilter(TypedDict, total=False): - - field: Required[Literal["search_query"]] - - operator: Required[Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"]] - - value: Required[Union[str, SequenceNotStr[str]]] - diff --git a/src/types/reports/web_search_result_stream_response.py b/src/types/reports/web_search_result_stream_response.py deleted file mode 100644 index 64f676d2..00000000 --- a/src/types/reports/web_search_result_stream_response.py +++ /dev/null @@ -1,27 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from __future__ import annotations - -from typing import Union -from typing_extensions import TypeAlias -from ..._models import BaseModel - -__all__ = ["WebSearchResultStreamResponse", "WebSearchResultStreamResponse", "Query", "WebSearchResultStreamResponse2"] - -class WebSearchResultStreamResponse2(BaseModel): - pass - -class Query(BaseModel): - pass - -class WebSearchResultStreamResponse(BaseModel): - - query: Query - """The normalized query used to build the stream.""" - - total_rows: int - """Total number of rows available before pagination is applied.""" - - - -WebSearchResultStreamResponse: TypeAlias = Union[WebSearchResultStreamResponse, WebSearchResultStreamResponse2] diff --git a/src/types/reports/web_search_results_query.py b/src/types/reports/web_search_results_query.py deleted file mode 100644 index c5c1a942..00000000 --- a/src/types/reports/web_search_results_query.py +++ /dev/null @@ -1,70 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Dict, List, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal -from ..._utils import PropertyInfo - -from ..._models import BaseModel -from ..pagination import Pagination -from ..hostname_filter import HostnameFilter -from ..path_filter import PathFilter -from ..region_id_filter import RegionIdFilter -from ..topic_id_filter import TopicIdFilter -from ..model_id_filter import ModelIdFilter -from ..tag_id_filter import TagIdFilter -from ..url_filter import UrlFilter -from ..root_domain_filter import RootDomainFilter -from ..persona_id_filter import PersonaIdFilter -from ..prompt_filter import PromptFilter -from ..prompt_id_filter import PromptIdFilter - -__all__ = ["WebSearchResultsQuery", "SearchQueryFilter"] - - -class SearchQueryFilter(BaseModel): - - field: Literal["search_query"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] - - - -class WebSearchResultsQuery(BaseModel): - - date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None - """Date interval for the report. (only used with date dimension)""" - - dimensions: Optional[List[Literal["hostname", "path", "url", "root_domain", "date", "region", "topic", "topic_id", "model", "tag", "prompt", "prompt_id", "persona", "search_query"]]] = None - """Dimensions to group the report by.""" - - metrics: List[Literal["count", "search_share"]] - """Metrics to include. `search_share` is the per-prompt occurrence rate.""" - - order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None - """ - - Custom ordering of the report results. - - The order is a record of key-value pairs where: - - `key` is the field to order by, which can be a metric or dimension - - `value` is the direction of the order, either `asc` for ascending or `desc` for descending. - - When not specified, the default order is the first metric in the query descending. - """ - - pagination: Optional[Pagination] = None - """Pagination settings for the report results.""" - - category_id: str - - start_date: datetime - """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - end_date: datetime - """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - filters: Optional[List[Annotated[Union[HostnameFilter, PathFilter, RegionIdFilter, TopicIdFilter, ModelIdFilter, TagIdFilter, UrlFilter, RootDomainFilter, PersonaIdFilter, PromptFilter, PromptIdFilter, SearchQueryFilter], PropertyInfo(discriminator="field")]]] = None - """List of filters to apply to the web search results report.""" diff --git a/src/types/root_domain_filter.py b/src/types/root_domain_filter.py deleted file mode 100644 index 6fa6a666..00000000 --- a/src/types/root_domain_filter.py +++ /dev/null @@ -1,18 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Union -from typing_extensions import Literal - -from .._models import BaseModel - -__all__ = ["RootDomainFilter"] - - -class RootDomainFilter(BaseModel): - """Filter by root domain""" - - field: Literal["root_domain"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] diff --git a/src/types/search_knowledge_base_request.py b/src/types/search_knowledge_base_request.py deleted file mode 100644 index dec1df95..00000000 --- a/src/types/search_knowledge_base_request.py +++ /dev/null @@ -1,32 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Optional - -from .._models import BaseModel - -__all__ = ["SearchKnowledgeBaseRequest", "SearchKnowledgeBaseFilters"] - - -class SearchKnowledgeBaseFilters(BaseModel): - - tags: Optional[List[str]] = None - """Optional tags to match. Documents with any matching tag are included.""" - - folders: Optional[List[str]] = None - """Optional folder paths to search within. Currently limited to one folder.""" - - - -class SearchKnowledgeBaseRequest(BaseModel): - - query: str - """Search query.""" - - top_k: int - """Maximum number of results to return.""" - - return_full_page: Optional[bool] = None - """Return full page content instead of snippets.""" - - filters: Optional[SearchKnowledgeBaseFilters] = None - """Optional search filters.""" diff --git a/src/types/sentiment_v2_report_query.py b/src/types/sentiment_v2_report_query.py deleted file mode 100644 index 151709e9..00000000 --- a/src/types/sentiment_v2_report_query.py +++ /dev/null @@ -1,145 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import Dict, List, Optional, Union -from datetime import datetime -from typing_extensions import Annotated, Literal -from .._utils import PropertyInfo - -from .._models import BaseModel -from .pagination import Pagination - -__all__ = ["SentimentV2ReportQuery", "SentimentV2ModelIdFilter", "SentimentV2RegionIdFilter", "SentimentV2TopicIdFilter", "SentimentV2PromptIdFilter", "SentimentV2PersonaIdFilter", "SentimentV2TagIdFilter", "SentimentV2RunIdFilter", "SentimentV2ThemeIdFilter", "SentimentV2ThemeFilter", "SentimentV2ClaimIdFilter", "SentimentV2ClaimFilter", "SentimentV2SentimentFilter"] - - -class SentimentV2SentimentFilter(BaseModel): - - field: Literal["sentiment"] - - operator: Literal["is", "not_is", "in", "not_in"] - - value: Union[Literal["positive", "negative"], List[Literal["positive", "negative"]]] - -class SentimentV2ClaimFilter(BaseModel): - - field: Literal["claim"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] - -class SentimentV2ClaimIdFilter(BaseModel): - - field: Literal["claim_id"] - - operator: Literal["is", "not_is", "in", "not_in"] - - value: Union[str, List[str]] - -class SentimentV2ThemeFilter(BaseModel): - - field: Literal["theme"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] - -class SentimentV2ThemeIdFilter(BaseModel): - - field: Literal["theme_id"] - - operator: Literal["is", "not_is", "in", "not_in"] - - value: Union[str, List[str]] - -class SentimentV2RunIdFilter(BaseModel): - - field: Literal["run_id"] - - operator: Literal["is", "not_is", "in", "not_in"] - - value: Union[str, List[str]] - -class SentimentV2TagIdFilter(BaseModel): - - field: Literal["tag_id"] - - operator: Literal["is", "not_is", "in", "not_in"] - - value: Union[str, List[str]] - -class SentimentV2PersonaIdFilter(BaseModel): - - field: Literal["persona_id"] - - operator: Literal["is", "not_is", "in", "not_in"] - - value: Union[str, List[str]] - -class SentimentV2PromptIdFilter(BaseModel): - - field: Literal["prompt_id"] - - operator: Literal["is", "not_is", "in", "not_in"] - - value: Union[str, List[str]] - -class SentimentV2TopicIdFilter(BaseModel): - - field: Literal["topic_id"] - - operator: Literal["is", "not_is", "in", "not_in"] - - value: Union[str, List[str]] - -class SentimentV2RegionIdFilter(BaseModel): - - field: Literal["region_id"] - - operator: Literal["is", "not_is", "in", "not_in"] - - value: Union[str, List[str]] - -class SentimentV2ModelIdFilter(BaseModel): - - field: Literal["model_id"] - - operator: Literal["is", "not_is", "in", "not_in"] - - value: Union[str, List[str]] - - - -class SentimentV2ReportQuery(BaseModel): - - category_id: str - - asset_name: str - - start_date: datetime - """Start date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - end_date: datetime - """End date for the report. Accepts formats: YYYY-MM-DD, YYYY-MM-DD HH:MM, or full ISO timestamp.""" - - comparison_start_date: Optional[datetime] = None - """Start of the previous period for delta computation.""" - - comparison_end_date: Optional[datetime] = None - """End of the previous period for delta computation.""" - - date_interval: Optional[Literal["hour", "day", "week", "month", "quarter", "year", "relative_week"]] = None - """Date interval for the report. Only used when dimensions includes date.""" - - dimensions: Optional[List[Literal["date", "topic", "region", "model", "prompt", "persona", "tag", "theme", "claim", "run", "asset_name"]]] = None - """Dimensions to group the report by.""" - - metrics: List[Literal["sentiment", "occurrence"]] - - filters: Optional[List[Annotated[Union[SentimentV2ModelIdFilter, SentimentV2RegionIdFilter, SentimentV2TopicIdFilter, SentimentV2PromptIdFilter, SentimentV2PersonaIdFilter, SentimentV2TagIdFilter, SentimentV2RunIdFilter, SentimentV2ThemeIdFilter, SentimentV2ThemeFilter, SentimentV2ClaimIdFilter, SentimentV2ClaimFilter, SentimentV2SentimentFilter], PropertyInfo(discriminator="field")]]] = None - """List of filters to apply to the sentiment-v2 report.""" - - order_by: Optional[Dict[str, Literal["asc", "desc"]]] = None - """Custom ordering of report results. Dimension keys must also be present in dimensions. The sentiment metric orders by positive_sentiment.""" - - pagination: Optional[Pagination] = None - """Pagination settings for the report results.""" diff --git a/src/types/tag_name_filter.py b/src/types/tag_name_filter.py deleted file mode 100644 index 0eabbe36..00000000 --- a/src/types/tag_name_filter.py +++ /dev/null @@ -1,18 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Union -from typing_extensions import Literal - -from .._models import BaseModel - -__all__ = ["TagNameFilter"] - - -class TagNameFilter(BaseModel): - """Filter by tag name.""" - - field: Literal["tag_name"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] diff --git a/src/types/topic_name_filter.py b/src/types/topic_name_filter.py deleted file mode 100644 index 337210c2..00000000 --- a/src/types/topic_name_filter.py +++ /dev/null @@ -1,18 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Union -from typing_extensions import Literal - -from .._models import BaseModel - -__all__ = ["TopicNameFilter"] - - -class TopicNameFilter(BaseModel): - """Filter by topic name""" - - field: Literal["topic_name"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] diff --git a/src/types/update_agent_request.py b/src/types/update_agent_request.py deleted file mode 100644 index 786b9684..00000000 --- a/src/types/update_agent_request.py +++ /dev/null @@ -1,18 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - - -from .._models import BaseModel - -__all__ = ["UpdateAgentRequest", "Graph"] - - -class Graph(BaseModel): - pass - - - -class UpdateAgentRequest(BaseModel): - """Request body for updating a draft agent's graph in place.""" - - graph: Graph - """New workflow graph for the agent's draft version. Replaces the current draft graph; the agent is iterated in place rather than re-created, so its ID is stable. Required — a null graph is rejected as a 422 here rather than as a relayed upstream error.""" diff --git a/src/types/update_prompt_status_body.py b/src/types/update_prompt_status_body.py deleted file mode 100644 index 6e46e578..00000000 --- a/src/types/update_prompt_status_body.py +++ /dev/null @@ -1,20 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Optional -from typing_extensions import Literal - -from .._models import BaseModel - -__all__ = ["UpdatePromptStatusBody"] - - -class UpdatePromptStatusBody(BaseModel): - - prompt_ids: List[str] - """IDs of the prompts to update.""" - - status: Literal["active", "disabled", "deleted"] - """Target status: 'active', 'disabled', or 'deleted'.""" - - dry_run: Optional[bool] = None - """When true, validate and preview changes without persisting them.""" diff --git a/src/types/url_filter.py b/src/types/url_filter.py deleted file mode 100644 index b35b8d0e..00000000 --- a/src/types/url_filter.py +++ /dev/null @@ -1,18 +0,0 @@ -# File generated from our OpenAPI spec by Scalar. See README.md for details. - -from typing import List, Union -from typing_extensions import Literal - -from .._models import BaseModel - -__all__ = ["UrlFilter"] - - -class UrlFilter(BaseModel): - """Filter by URL""" - - field: Literal["url"] - - operator: Literal["is", "not_is", "in", "not_in", "contains", "not_contains", "matches", "contains_case_insensitive", "not_contains_case_insensitive"] - - value: Union[str, List[str]] diff --git a/tests/smoke-test.py b/tests/smoke-test.py index fc947b26..b655bc40 100644 --- a/tests/smoke-test.py +++ b/tests/smoke-test.py @@ -38,275 +38,269 @@ class SmokeCase(TypedDict): def _smoke_case_0() -> None: - organization = client.organization.list_category_regions_v1_org_categories_category_regions_get( - category_id="categoryId", - ) + organization = client.organizations.regions() + def _smoke_case_1() -> None: - answer = client.prompts.answers.create_v1_prompts_post( - category_id="", - start_date="", - end_date="", - ) + organization = client.organizations.models() + def _smoke_case_2() -> None: - answer = client.prompts.answers.query_v2_v2_prompts_post( - category_id="", - start_date="", - end_date="", - ) + organization = client.organizations.domains() + def _smoke_case_3() -> None: - stream = client.prompts.answers.stream_v2_v2_prompts_stream_post( - category_id="", - start_date="", - end_date="", - ) - for event in stream: - print(event) + organization = client.organizations.list_assets() + def _smoke_case_4() -> None: - report = client.reports.query_sentiment_v2_v1_sentiment_v2_post( - category_id="", - asset_name="", - start_date="", - end_date="", - date_interval="day", - metrics=[], - ) + organization = client.organizations.get_personas() + def _smoke_case_5() -> None: - citation = client.reports.citations.query_v1_reports_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - category_id="", - start_date="", - end_date="", - ) + organization = client.organizations.list() + def _smoke_case_6() -> None: - stream = client.reports.citations.stream_v1_reports_stream_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - category_id="", - start_date="", - end_date="", - ) - for event in stream: - print(event) + category = client.organizations.categories.list() + def _smoke_case_7() -> None: - citation = client.reports.citations.query_v2_v2_reports_post( - category_id="", - start_date="", - end_date="", - interval="day", - scope="all", + category = client.organizations.categories.topics( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", ) + def _smoke_case_8() -> None: - stream = client.reports.citations.stream_v2_v2_reports_stream_post( - category_id="", - start_date="", - end_date="", - interval="day", - scope="all", + category = client.organizations.categories.tags( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", ) - for event in stream: - print(event) + def _smoke_case_9() -> None: - visibility = client.reports.visibility.query_v1_reports_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - category_id="", - start_date="", - end_date="", + category = client.organizations.categories.prompts( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + limit=10000, + status=["active"], ) + def _smoke_case_10() -> None: - stream = client.reports.visibility.stream_v1_reports_stream_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - category_id="", - start_date="", - end_date="", + category = client.organizations.categories.assets( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", ) - for event in stream: - print(event) + def _smoke_case_11() -> None: - visibility = client.reports.visibility.query_v2_v2_reports_post( - category_id="", - start_date="", - end_date="", - interval="day", - scope="owned", + category = client.organizations.categories.get_category_personas( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", ) + def _smoke_case_12() -> None: - stream = client.reports.visibility.stream_v2_v2_reports_stream_post( - category_id="", - start_date="", - end_date="", - interval="day", - scope="owned", + category = client.organizations.categories.create_prompts( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + prompts=[], + dry_run=False, ) - for event in stream: - print(event) + def _smoke_case_13() -> None: - sentiment = client.reports.sentiment.query_v1_reports_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - category_id="", - start_date="", - end_date="", + category = client.organizations.categories.update_prompts( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + prompts=[], + dry_run=False, ) + def _smoke_case_14() -> None: - stream = client.reports.sentiment.stream_v1_reports_stream_post( - date_interval="day", - dimensions=[], - metrics=[], - order_by={}, - category_id="", - start_date="", - end_date="", + category = client.organizations.categories.update_prompt_status( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + prompt_ids=[], + status="active", + dry_run=False, ) - for event in stream: - print(event) + def _smoke_case_15() -> None: - sentiment = client.reports.sentiment.query_v2_v2_reports_post( - category_id="", - asset="", - start_date="", - end_date="", - interval="day", - include_cited_websites=False, + prompt = client.prompts.answers( + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", ) + def _smoke_case_16() -> None: - stream = client.reports.sentiment.stream_v2_v2_reports_stream_post( - category_id="", - asset="", - start_date="", - end_date="", - interval="day", - include_cited_websites=False, + report = client.reports.citations( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", ) - for event in stream: - print(event) + def _smoke_case_17() -> None: - web_search_result = client.reports.web_search_results.query( + report = client.reports.visibility( date_interval="day", dimensions=[], metrics=[], order_by={}, - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", ) + def _smoke_case_18() -> None: - stream = client.reports.web_search_results.stream( + report = client.reports.sentiment( date_interval="day", dimensions=[], metrics=[], order_by={}, - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", ) - for event in stream: - print(event) + def _smoke_case_19() -> None: - referral = client.reports.referrals.create_report_v1_v1_reports_post( + report = client.reports.get_referrals_report( date_interval="day", dimensions=[], metrics=[], order_by={}, domain="", - start_date="", + start_date="2024-01-01T00:00:00.000Z", ) + def _smoke_case_20() -> None: - referral = client.reports.referrals.create_report_v2_v2_reports_post( + report = client.reports.get_bots_report( date_interval="day", dimensions=[], metrics=[], order_by={}, domain="", - start_date="", + start_date="2024-01-01T00:00:00.000Z", ) + def _smoke_case_21() -> None: - bot = client.reports.bots.create_report_v1_v1_reports_post( + report = client.reports.get_referrals_report_v2( date_interval="day", dimensions=[], metrics=[], order_by={}, domain="", - start_date="", + start_date="2024-01-01T00:00:00.000Z", + timezone="UTC", ) + def _smoke_case_22() -> None: - bot = client.reports.bots.create_report_v2_v2_reports_post( + report = client.reports.get_bots_report_v2( date_interval="day", dimensions=[], metrics=[], order_by={}, domain="", - start_date="", + start_date="2024-01-01T00:00:00.000Z", + timezone="UTC", ) + def _smoke_case_23() -> None: - query_fanout = client.reports.query_fanouts.v1_reports_post( + report = client.reports.query_fanouts( date_interval="day", dimensions=[], metrics=[], order_by={}, - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", ) + def _smoke_case_24() -> None: - query_fanout = client.reports.query_fanouts.v2_v2_reports_post( - category_id="", - start_date="", - end_date="", - interval="day", + stream = client.reports.stream_citations( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", ) + for event in stream: + print(event) + + def _smoke_case_25() -> None: - stream = client.reports.query_fanouts.stream_v2_v2_reports_stream_post( - category_id="", - start_date="", - end_date="", - interval="day", + stream = client.reports.stream_visibility( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", ) + for event in stream: print(event) + def _smoke_case_26() -> None: + stream = client.reports.stream_sentiment( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", + ) + + for event in stream: + print(event) + + +def _smoke_case_27() -> None: + web_search_result = client.reports.web_search_results.query( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", + ) + + +def _smoke_case_28() -> None: + stream = client.reports.web_search_results.stream( + date_interval="day", + dimensions=[], + metrics=[], + order_by={}, + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", + ) + + for event in stream: + print(event) + + +def _smoke_case_29() -> None: shopping = client.reports.shopping.visibility( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -317,11 +311,12 @@ def _smoke_case_26() -> None: include_position_frequency=False, ) -def _smoke_case_27() -> None: + +def _smoke_case_30() -> None: shopping = client.reports.shopping.item_visibility( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -333,11 +328,12 @@ def _smoke_case_27() -> None: include_position_frequency=False, ) -def _smoke_case_28() -> None: + +def _smoke_case_31() -> None: shopping = client.reports.shopping.merchant_distribution( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -345,11 +341,12 @@ def _smoke_case_28() -> None: exclude_topic_ids=False, ) -def _smoke_case_29() -> None: + +def _smoke_case_32() -> None: shopping = client.reports.shopping.merchant_visibility_by_brand( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -358,11 +355,12 @@ def _smoke_case_29() -> None: include_brand_only=False, ) -def _smoke_case_30() -> None: + +def _smoke_case_33() -> None: shopping = client.reports.shopping.merchant_by_items( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -370,11 +368,12 @@ def _smoke_case_30() -> None: exclude_topic_ids=False, ) -def _smoke_case_31() -> None: + +def _smoke_case_34() -> None: shopping = client.reports.shopping.all_items_with_merchants( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -385,11 +384,12 @@ def _smoke_case_31() -> None: sort_order="desc", ) -def _smoke_case_32() -> None: + +def _smoke_case_35() -> None: shopping = client.reports.shopping.trigger_rate( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -397,11 +397,12 @@ def _smoke_case_32() -> None: exclude_topic_ids=False, ) -def _smoke_case_33() -> None: + +def _smoke_case_36() -> None: shopping = client.reports.shopping.merchant_share( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -409,19 +410,21 @@ def _smoke_case_33() -> None: exclude_topic_ids=False, ) -def _smoke_case_34() -> None: + +def _smoke_case_37() -> None: shopping = client.reports.shopping.product_merchant_urls( - category_id="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", product_names=[], - start_date="", - end_date="", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", ) -def _smoke_case_35() -> None: + +def _smoke_case_38() -> None: shopping = client.reports.shopping.executions( - category_id="", - start_date="", - end_date="", + category_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + start_date="2024-01-01T00:00:00.000Z", + end_date="2024-01-01T00:00:00.000Z", date_interval="day", include_count=False, tag_filter_type="any", @@ -430,911 +433,412 @@ def _smoke_case_35() -> None: analysis_filter_type="any", ) -def _smoke_case_36() -> None: - accuracy = client.reports.accuracy.overview_v1_reports_overview_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - group_by="period", - ) -def _smoke_case_37() -> None: - accuracy = client.reports.accuracy.breakdown_v1_reports_breakdown_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - breakdown_by="citation", - limit=10, +def _smoke_case_39() -> None: + optimization = client.content.optimization.list( + asset_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + limit=10000, offset=0, - sort_by="citationShare", - sort_order="desc", - ) - -def _smoke_case_38() -> None: - accuracy = client.reports.accuracy.citation_analysis_v1_reports_citation_analysis_post( - category_id="", - clean_href="", - start_date="", - end_date="", ) -def _smoke_case_39() -> None: - accuracy = client.reports.accuracy.topic_ids_v1_reports_topic_ids_post( - category_id="", - start_date="", - end_date="", - ) def _smoke_case_40() -> None: - accuracy = client.reports.accuracy.inaccurate_themes_v1_reports_inaccurate_themes_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - limit=10, - offset=0, - sort_by="response_share", - sort_order="desc", - ) - -def _smoke_case_41() -> None: - accuracy = client.reports.accuracy.inaccurate_clusters_v1_reports_inaccurate_clusters_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - theme_id="", - limit=5000, - offset=0, + optimization = client.content.optimization.retrieve( + asset_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + content_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", ) -def _smoke_case_42() -> None: - accuracy = client.reports.accuracy.inaccuracy_drivers_v1_reports_inaccuracy_drivers_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - limit=5, - ) -def _smoke_case_43() -> None: - accuracy = client.reports.accuracy.top_inaccurate_claims_v1_reports_top_inaccurate_claims_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - limit=5, +def _smoke_case_41() -> None: + agent = client.agents.list( + limit=100, ) -def _smoke_case_44() -> None: - accuracy = client.reports.accuracy.claim_breakdown_v1_reports_claim_breakdown_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - cluster_id="", - ) -def _smoke_case_45() -> None: - accuracy = client.reports.accuracy.claim_citations_v1_reports_claim_citations_post( - start_date="", - end_date="", - category_id="", - exclude_topic_ids=False, - tag_filter_type="any", - include_no_tag=True, - include_no_persona=True, - cluster_id="", - limit=10, - offset=0, - sort_order="desc", +def _smoke_case_42() -> None: + agent = client.agents.retrieve( + agent_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", ) -def _smoke_case_46() -> None: - accuracy = client.reports.accuracy.cluster_example_runs_v1_reports_cluster_example_runs_post( - category_id="", - cluster_id="", - start_date="", - end_date="", - limit=20, - offset=0, - ) -def _smoke_case_47() -> None: - accuracy = client.reports.accuracy.cluster_verification_pairs_v1_reports_cluster_verification_pairs_post( - category_id="", - cluster_id="", +def _smoke_case_43() -> None: + run = client.agents.runs.create( + agent_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", ) -def _smoke_case_48() -> None: - accuracy = client.reports.accuracy.factcheck_setup_status_v1_reports_factcheck_setup_status_post( - category_id="", - ) -def _smoke_case_49() -> None: - optimization = client.content.optimization.list( - asset_id="assetId", - limit=10000, - offset=0, +def _smoke_case_44() -> None: + run = client.agents.runs.retrieve( + agent_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + run_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + verbose=False, ) -def _smoke_case_50() -> None: - optimization = client.content.optimization.retrieve( - asset_id="assetId", - content_id="contentId", - ) -def _smoke_case_51() -> None: +def _smoke_case_45() -> None: knowledge_base = client.knowledge_bases.list() -def _smoke_case_52() -> None: + +def _smoke_case_46() -> None: knowledge_base = client.knowledge_bases.search( - knowledge_base_id="knowledgeBaseId", - query="", + knowledge_base_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + query="x", top_k=0, return_full_page=False, ) -def _smoke_case_53() -> None: + +def _smoke_case_47() -> None: document = client.knowledge_bases.documents.create( - knowledge_base_id="knowledgeBaseId", - name="", - text="", + knowledge_base_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + name="x", + text="x", ) -def _smoke_case_54() -> None: + +def _smoke_case_48() -> None: document = client.knowledge_bases.documents.update( - knowledge_base_id="knowledgeBaseId", - name="", - text="", + knowledge_base_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + name="x", + text="x", ) -def _smoke_case_55() -> None: + +def _smoke_case_49() -> None: document = client.knowledge_bases.documents.delete( - knowledge_base_id="knowledgeBaseId", - name="", + knowledge_base_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + name="x", ) -def _smoke_case_56() -> None: + +def _smoke_case_50() -> None: folder = client.knowledge_bases.folders.create( - knowledge_base_id="knowledgeBaseId", - path="", + knowledge_base_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + path="x", ) -def _smoke_case_57() -> None: + +def _smoke_case_51() -> None: folder = client.knowledge_bases.folders.delete( - knowledge_base_id="knowledgeBaseId", - path="", + knowledge_base_id="7c9e6679-7425-40de-944b-e07fc1f90ae7", + path="x", recursive=False, ) -def _smoke_case_58() -> None: - agent = client.agents.list( - limit=100, - ) - -def _smoke_case_59() -> None: - agent = client.agents.create_v1_post( - organization_id="", - name="", - ) - -def _smoke_case_60() -> None: - agent = client.agents.publish_v1_id_publish_post( - agent_id="agentId", - ) - -def _smoke_case_61() -> None: - agent = client.agents.retrieve( - agent_id="agentId", - ) - -def _smoke_case_62() -> None: - agent = client.agents.update_v1_id_patch( - agent_id="agentId", - graph={}, - ) - -def _smoke_case_63() -> None: - agent = client.agents.list_graph_v1_graph_get( - agent_id="agentId", - ) - -def _smoke_case_64() -> None: - node_type = client.agents.node_types.list_v1_agents_get() - -def _smoke_case_65() -> None: - node_type = client.agents.node_types.list_schema_v1_agents_schema_get( - node_type="nodeType", - ) - -def _smoke_case_66() -> None: - run = client.agents.runs.create( - agent_id="agentId", - ) - -def _smoke_case_67() -> None: - run = client.agents.runs.retrieve( - agent_id="agentId", - run_id="runId", - ) - -def _smoke_case_68() -> None: - organization = client.organizations.list() - -def _smoke_case_69() -> None: - organization = client.organizations.regions() - -def _smoke_case_70() -> None: - organization = client.organizations.models() - -def _smoke_case_71() -> None: - organization = client.organizations.domains() - -def _smoke_case_72() -> None: - organization = client.organizations.list_assets() - -def _smoke_case_73() -> None: - organization = client.organizations.get_personas() - -def _smoke_case_74() -> None: - category = client.organizations.categories.list() - -def _smoke_case_75() -> None: - category = client.organizations.categories.topics( - category_id="categoryId", - ) - -def _smoke_case_76() -> None: - category = client.organizations.categories.tags( - category_id="categoryId", - ) - -def _smoke_case_77() -> None: - category = client.organizations.categories.prompts( - category_id="categoryId", - limit=10000, - status=["active"], - ) - -def _smoke_case_78() -> None: - category = client.organizations.categories.create_prompts( - category_id="categoryId", - prompts=[], - dry_run=False, - ) - -def _smoke_case_79() -> None: - category = client.organizations.categories.update_prompts( - category_id="categoryId", - prompts=[], - dry_run=False, - ) - -def _smoke_case_80() -> None: - category = client.organizations.categories.update_prompt_status( - category_id="categoryId", - prompt_ids=[], - status="active", - dry_run=False, - ) - -def _smoke_case_81() -> None: - category = client.organizations.categories.assets( - category_id="categoryId", - ) - -def _smoke_case_82() -> None: - category = client.organizations.categories.get_category_personas( - category_id="categoryId", - ) - cases: list[SmokeCase] = [ { - "operation": "listCategoryRegionsV1OrgCategoriesCategoryRegionsGet", + "operation": "regions", "method": "GET", - "path": "/v1/org/categories/{category_id}/regions", + "path": "/v1/org/regions", "run": _smoke_case_0, }, - { - "operation": "createV1PromptsPost", - "method": "POST", - "path": "/v1/prompts/answers", + "operation": "models", + "method": "GET", + "path": "/v1/org/models", "run": _smoke_case_1, }, - { - "operation": "queryV2V2PromptsPost", - "method": "POST", - "path": "/v2/prompts/answers", + "operation": "domains", + "method": "GET", + "path": "/v1/org/domains", "run": _smoke_case_2, }, - { - "operation": "streamV2V2PromptsStreamPost", - "method": "POST", - "path": "/v2/prompts/answers/stream", + "operation": "listAssets", + "method": "GET", + "path": "/v1/org/assets", "run": _smoke_case_3, }, - { - "operation": "querySentimentV2V1SentimentV2Post", - "method": "POST", - "path": "/v1/reports/sentiment-v2", + "operation": "getPersonas", + "method": "GET", + "path": "/v1/org/personas", "run": _smoke_case_4, }, - { - "operation": "queryV1ReportsPost", - "method": "POST", - "path": "/v1/reports/citations", + "operation": "list", + "method": "GET", + "path": "/v1/org", "run": _smoke_case_5, }, - { - "operation": "streamV1ReportsStreamPost", - "method": "POST", - "path": "/v1/reports/citations/stream", + "operation": "list", + "method": "GET", + "path": "/v1/org/categories", "run": _smoke_case_6, }, - { - "operation": "queryV2V2ReportsPost", - "method": "POST", - "path": "/v2/reports/citations", + "operation": "topics", + "method": "GET", + "path": "/v1/org/categories/{category_id}/topics", "run": _smoke_case_7, }, - { - "operation": "streamV2V2ReportsStreamPost", - "method": "POST", - "path": "/v2/reports/citations/stream", + "operation": "tags", + "method": "GET", + "path": "/v1/org/categories/{category_id}/tags", "run": _smoke_case_8, }, - { - "operation": "queryV1ReportsPost", - "method": "POST", - "path": "/v1/reports/visibility", + "operation": "prompts", + "method": "GET", + "path": "/v1/org/categories/{category_id}/prompts", "run": _smoke_case_9, }, - { - "operation": "streamV1ReportsStreamPost", - "method": "POST", - "path": "/v1/reports/visibility/stream", + "operation": "assets", + "method": "GET", + "path": "/v1/org/categories/{category_id}/assets", "run": _smoke_case_10, }, - { - "operation": "queryV2V2ReportsPost", - "method": "POST", - "path": "/v2/reports/visibility", + "operation": "getCategoryPersonas", + "method": "GET", + "path": "/v1/org/categories/{category_id}/personas", "run": _smoke_case_11, }, - { - "operation": "streamV2V2ReportsStreamPost", + "operation": "createPrompts", "method": "POST", - "path": "/v2/reports/visibility/stream", + "path": "/v1/org/categories/{category_id}/prompts", "run": _smoke_case_12, }, - { - "operation": "queryV1ReportsPost", - "method": "POST", - "path": "/v1/reports/sentiment", + "operation": "updatePrompts", + "method": "PATCH", + "path": "/v1/org/categories/{category_id}/prompts", "run": _smoke_case_13, }, - { - "operation": "streamV1ReportsStreamPost", - "method": "POST", - "path": "/v1/reports/sentiment/stream", + "operation": "updatePromptStatus", + "method": "PATCH", + "path": "/v1/org/categories/{category_id}/prompts/status", "run": _smoke_case_14, }, - { - "operation": "queryV2V2ReportsPost", + "operation": "answers", "method": "POST", - "path": "/v2/reports/sentiment", + "path": "/v1/prompts/answers", "run": _smoke_case_15, }, - { - "operation": "streamV2V2ReportsStreamPost", + "operation": "citations", "method": "POST", - "path": "/v2/reports/sentiment/stream", + "path": "/v1/reports/citations", "run": _smoke_case_16, }, - { - "operation": "query", + "operation": "visibility", "method": "POST", - "path": "/v1/reports/web-search-results", + "path": "/v1/reports/visibility", "run": _smoke_case_17, }, - { - "operation": "stream", + "operation": "sentiment", "method": "POST", - "path": "/v1/reports/web-search-results/stream", + "path": "/v1/reports/sentiment", "run": _smoke_case_18, }, - { - "operation": "createReportV1V1ReportsPost", + "operation": "getReferralsReport", "method": "POST", "path": "/v1/reports/referrals", "run": _smoke_case_19, }, - { - "operation": "createReportV2V2ReportsPost", + "operation": "getBotsReport", "method": "POST", - "path": "/v2/reports/referrals", + "path": "/v1/reports/bots", "run": _smoke_case_20, }, - { - "operation": "createReportV1V1ReportsPost", + "operation": "getReferralsReportV2", "method": "POST", - "path": "/v1/reports/bots", + "path": "/v2/reports/referrals", "run": _smoke_case_21, }, - { - "operation": "createReportV2V2ReportsPost", + "operation": "getBotsReportV2", "method": "POST", "path": "/v2/reports/bots", "run": _smoke_case_22, }, - { - "operation": "v1ReportsPost", + "operation": "queryFanouts", "method": "POST", "path": "/v1/reports/query-fanouts", "run": _smoke_case_23, }, - { - "operation": "v2V2ReportsPost", + "operation": "streamCitations", "method": "POST", - "path": "/v2/reports/query-fanouts", + "path": "/v1/reports/citations/stream", "run": _smoke_case_24, }, - { - "operation": "streamV2V2ReportsStreamPost", + "operation": "streamVisibility", "method": "POST", - "path": "/v2/reports/query-fanouts/stream", + "path": "/v1/reports/visibility/stream", "run": _smoke_case_25, }, - { - "operation": "visibility", + "operation": "streamSentiment", "method": "POST", - "path": "/v1/reports/shopping/visibility", + "path": "/v1/reports/sentiment/stream", "run": _smoke_case_26, }, - { - "operation": "itemVisibility", + "operation": "query", "method": "POST", - "path": "/v1/reports/shopping/item-visibility", + "path": "/v1/reports/web-search-results", "run": _smoke_case_27, }, - { - "operation": "merchantDistribution", + "operation": "stream", "method": "POST", - "path": "/v1/reports/shopping/merchant-distribution", + "path": "/v1/reports/web-search-results/stream", "run": _smoke_case_28, }, - { - "operation": "merchantVisibilityByBrand", + "operation": "visibility", "method": "POST", - "path": "/v1/reports/shopping/merchant-visibility-by-brand", + "path": "/v1/reports/shopping/visibility", "run": _smoke_case_29, }, - { - "operation": "merchantByItems", + "operation": "itemVisibility", "method": "POST", - "path": "/v1/reports/shopping/merchant-by-items", + "path": "/v1/reports/shopping/item-visibility", "run": _smoke_case_30, }, - { - "operation": "allItemsWithMerchants", + "operation": "merchantDistribution", "method": "POST", - "path": "/v1/reports/shopping/all-items-with-merchants", + "path": "/v1/reports/shopping/merchant-distribution", "run": _smoke_case_31, }, - { - "operation": "triggerRate", + "operation": "merchantVisibilityByBrand", "method": "POST", - "path": "/v1/reports/shopping/trigger-rate", + "path": "/v1/reports/shopping/merchant-visibility-by-brand", "run": _smoke_case_32, }, - { - "operation": "merchantShare", + "operation": "merchantByItems", "method": "POST", - "path": "/v1/reports/shopping/merchant-share", + "path": "/v1/reports/shopping/merchant-by-items", "run": _smoke_case_33, }, - { - "operation": "productMerchantUrls", + "operation": "allItemsWithMerchants", "method": "POST", - "path": "/v1/reports/shopping/product-merchant-urls", + "path": "/v1/reports/shopping/all-items-with-merchants", "run": _smoke_case_34, }, - { - "operation": "executions", + "operation": "triggerRate", "method": "POST", - "path": "/v1/reports/shopping/executions", + "path": "/v1/reports/shopping/trigger-rate", "run": _smoke_case_35, }, - { - "operation": "overviewV1ReportsOverviewPost", + "operation": "merchantShare", "method": "POST", - "path": "/v1/reports/accuracy/overview", + "path": "/v1/reports/shopping/merchant-share", "run": _smoke_case_36, }, - { - "operation": "breakdownV1ReportsBreakdownPost", + "operation": "productMerchantUrls", "method": "POST", - "path": "/v1/reports/accuracy/breakdown", + "path": "/v1/reports/shopping/product-merchant-urls", "run": _smoke_case_37, }, - { - "operation": "citationAnalysisV1ReportsCitationAnalysisPost", + "operation": "executions", "method": "POST", - "path": "/v1/reports/accuracy/citation-analysis", + "path": "/v1/reports/shopping/executions", "run": _smoke_case_38, }, - { - "operation": "topicIdsV1ReportsTopicIdsPost", - "method": "POST", - "path": "/v1/reports/accuracy/topic-ids", + "operation": "list", + "method": "GET", + "path": "/v1/content/{asset_id}/optimization", "run": _smoke_case_39, }, - { - "operation": "inaccurateThemesV1ReportsInaccurateThemesPost", - "method": "POST", - "path": "/v1/reports/accuracy/inaccurate-themes", + "operation": "retrieve", + "method": "GET", + "path": "/v1/content/{asset_id}/optimization/{content_id}", "run": _smoke_case_40, }, - { - "operation": "inaccurateClustersV1ReportsInaccurateClustersPost", - "method": "POST", - "path": "/v1/reports/accuracy/inaccurate-clusters", + "operation": "list", + "method": "GET", + "path": "/v1/agents", "run": _smoke_case_41, }, - { - "operation": "inaccuracyDriversV1ReportsInaccuracyDriversPost", - "method": "POST", - "path": "/v1/reports/accuracy/inaccuracy-drivers", + "operation": "retrieve", + "method": "GET", + "path": "/v1/agents/{agent_id}", "run": _smoke_case_42, }, - { - "operation": "topInaccurateClaimsV1ReportsTopInaccurateClaimsPost", + "operation": "create", "method": "POST", - "path": "/v1/reports/accuracy/top-inaccurate-claims", + "path": "/v1/agents/{agent_id}/runs", "run": _smoke_case_43, }, - - { - "operation": "claimBreakdownV1ReportsClaimBreakdownPost", - "method": "POST", - "path": "/v1/reports/accuracy/claim-breakdown", - "run": _smoke_case_44, - }, - - { - "operation": "claimCitationsV1ReportsClaimCitationsPost", - "method": "POST", - "path": "/v1/reports/accuracy/claim-citations", - "run": _smoke_case_45, - }, - - { - "operation": "clusterExampleRunsV1ReportsClusterExampleRunsPost", - "method": "POST", - "path": "/v1/reports/accuracy/cluster-example-runs", - "run": _smoke_case_46, - }, - - { - "operation": "clusterVerificationPairsV1ReportsClusterVerificationPairsPost", - "method": "POST", - "path": "/v1/reports/accuracy/cluster-verification-pairs", - "run": _smoke_case_47, - }, - - { - "operation": "factcheckSetupStatusV1ReportsFactcheckSetupStatusPost", - "method": "POST", - "path": "/v1/reports/accuracy/factcheck-setup-status", - "run": _smoke_case_48, - }, - - { - "operation": "list", - "method": "GET", - "path": "/v1/content/{asset_id}/optimization", - "run": _smoke_case_49, - }, - { "operation": "retrieve", "method": "GET", - "path": "/v1/content/{asset_id}/optimization/{content_id}", - "run": _smoke_case_50, + "path": "/v1/agents/{agent_id}/runs/{run_id}", + "run": _smoke_case_44, }, - { "operation": "list", "method": "GET", "path": "/v1/knowledge-bases", - "run": _smoke_case_51, + "run": _smoke_case_45, }, - { "operation": "search", "method": "POST", "path": "/v1/knowledge-bases/{knowledge_base_id}/search", - "run": _smoke_case_52, + "run": _smoke_case_46, }, - { "operation": "create", "method": "POST", "path": "/v1/knowledge-bases/{knowledge_base_id}/documents", - "run": _smoke_case_53, + "run": _smoke_case_47, }, - { "operation": "update", "method": "PUT", "path": "/v1/knowledge-bases/{knowledge_base_id}/documents", - "run": _smoke_case_54, + "run": _smoke_case_48, }, - { "operation": "delete", "method": "DELETE", "path": "/v1/knowledge-bases/{knowledge_base_id}/documents", - "run": _smoke_case_55, + "run": _smoke_case_49, }, - { "operation": "create", "method": "POST", "path": "/v1/knowledge-bases/{knowledge_base_id}/folders", - "run": _smoke_case_56, + "run": _smoke_case_50, }, - { "operation": "delete", "method": "DELETE", "path": "/v1/knowledge-bases/{knowledge_base_id}/folders", - "run": _smoke_case_57, - }, - - { - "operation": "list", - "method": "GET", - "path": "/v1/agents", - "run": _smoke_case_58, - }, - - { - "operation": "createV1Post", - "method": "POST", - "path": "/v1/agents", - "run": _smoke_case_59, - }, - - { - "operation": "publishV1IdPublishPost", - "method": "POST", - "path": "/v1/agents/{agent_id}/publish", - "run": _smoke_case_60, - }, - - { - "operation": "retrieve", - "method": "GET", - "path": "/v1/agents/{agent_id}", - "run": _smoke_case_61, - }, - - { - "operation": "updateV1IdPatch", - "method": "PATCH", - "path": "/v1/agents/{agent_id}", - "run": _smoke_case_62, - }, - - { - "operation": "listGraphV1GraphGet", - "method": "GET", - "path": "/v1/agents/{agent_id}/graph", - "run": _smoke_case_63, - }, - - { - "operation": "listV1AgentsGet", - "method": "GET", - "path": "/v1/agents/node-types", - "run": _smoke_case_64, - }, - - { - "operation": "listSchemaV1AgentsSchemaGet", - "method": "GET", - "path": "/v1/agents/node-types/{node_type}/schema", - "run": _smoke_case_65, - }, - - { - "operation": "create", - "method": "POST", - "path": "/v1/agents/{agent_id}/runs", - "run": _smoke_case_66, - }, - - { - "operation": "retrieve", - "method": "GET", - "path": "/v1/agents/{agent_id}/runs/{run_id}", - "run": _smoke_case_67, - }, - - { - "operation": "list", - "method": "GET", - "path": "/v1/org", - "run": _smoke_case_68, - }, - - { - "operation": "regions", - "method": "GET", - "path": "/v1/org/regions", - "run": _smoke_case_69, - }, - - { - "operation": "models", - "method": "GET", - "path": "/v1/org/models", - "run": _smoke_case_70, - }, - - { - "operation": "domains", - "method": "GET", - "path": "/v1/org/domains", - "run": _smoke_case_71, - }, - - { - "operation": "listAssets", - "method": "GET", - "path": "/v1/org/assets", - "run": _smoke_case_72, - }, - - { - "operation": "getPersonas", - "method": "GET", - "path": "/v1/org/personas", - "run": _smoke_case_73, - }, - - { - "operation": "list", - "method": "GET", - "path": "/v1/org/categories", - "run": _smoke_case_74, - }, - - { - "operation": "topics", - "method": "GET", - "path": "/v1/org/categories/{category_id}/topics", - "run": _smoke_case_75, - }, - - { - "operation": "tags", - "method": "GET", - "path": "/v1/org/categories/{category_id}/tags", - "run": _smoke_case_76, - }, - - { - "operation": "prompts", - "method": "GET", - "path": "/v1/org/categories/{category_id}/prompts", - "run": _smoke_case_77, - }, - - { - "operation": "createPrompts", - "method": "POST", - "path": "/v1/org/categories/{category_id}/prompts", - "run": _smoke_case_78, - }, - - { - "operation": "updatePrompts", - "method": "PATCH", - "path": "/v1/org/categories/{category_id}/prompts", - "run": _smoke_case_79, - }, - - { - "operation": "updatePromptStatus", - "method": "PATCH", - "path": "/v1/org/categories/{category_id}/prompts/status", - "run": _smoke_case_80, - }, - - { - "operation": "assets", - "method": "GET", - "path": "/v1/org/categories/{category_id}/assets", - "run": _smoke_case_81, - }, - - { - "operation": "getCategoryPersonas", - "method": "GET", - "path": "/v1/org/categories/{category_id}/personas", - "run": _smoke_case_82, + "run": _smoke_case_51, }, - ] DEFAULT_SMOKE_CONCURRENCY = 32 @@ -1345,11 +849,7 @@ def _selected_cases() -> list[SmokeCase]: needles = [needle.strip() for needle in filter_value.split(",") if needle.strip()] if filter_value else [] if not needles: return cases - return [ - case - for case in cases - if any(needle in case["operation"] or needle in case["path"] for needle in needles) - ] + return [case for case in cases if any(needle in case["operation"] or needle in case["path"] for needle in needles)] def _smoke_concurrency(case_count: int) -> int: @@ -1399,13 +899,18 @@ def main() -> None: report_path = os.environ.get("SCALAR_SMOKE_REPORT") if report_path: - Path(report_path).write_text(json.dumps({"total": len(results), "failed": len(failed), "results": results}), encoding="utf-8") + Path(report_path).write_text( + json.dumps({"total": len(results), "failed": len(failed), "results": results}), encoding="utf-8" + ) else: for result in results: if result["status"] == "passed": print(f"PASS {result['operation']} ({result['method']} {result['path']}) {result['durationMs']}ms") else: - print(f"FAIL {result['operation']} ({result['method']} {result['path']})\n{result.get('error', '')}", file=sys.stderr) + print( + f"FAIL {result['operation']} ({result['method']} {result['path']})\n{result.get('error', '')}", + file=sys.stderr, + ) if not results: print("No code samples ran (empty SDK or a SCALAR_SMOKE_FILTER that matched nothing).", file=sys.stderr) else: From 7a89070ea01daebdf4c298226c5a507854870f3b Mon Sep 17 00:00:00 2001 From: "scalar-docs[bot]" <148485328+scalar-docs[bot]@users.noreply.github.com> Date: Mon, 17 Aug 2026 23:05:49 +0000 Subject: [PATCH 3/3] release: 0.58.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 12 ++++++++++++ pyproject.toml | 2 +- src/profound/_version.py | 2 +- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 2afb750c..2fbefb94 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.57.0" + ".": "0.58.0" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 8bc33af7..644021ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [0.58.0](https://github.com/cooper-square-technologies/profound-python-sdk/compare/v0.57.0...v0.58.0) (2026-08-17) + + +### Features + +* **api:** initial SDK generation ([538bd0b](https://github.com/cooper-square-technologies/profound-python-sdk/commit/538bd0b2f9d0242e86a7ad405e9b4c6316f095f1)) + + +### Chores + +* **api:** regenerate SDK ([699a281](https://github.com/cooper-square-technologies/profound-python-sdk/commit/699a28179f065163098f0a846297bdbb6292fc7a)) + ## 0.57.0 (2026-08-05) Full Changelog: [v0.56.0...v0.57.0](https://github.com/cooper-square-technologies/profound-python-sdk/compare/v0.56.0...v0.57.0) diff --git a/pyproject.toml b/pyproject.toml index d7664c3b..bd9c6626 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "profound" -version = "0.1.0" # x-release-please-version +version = "0.58.0" # x-release-please-version description = "profound Python client." readme = "README.md" license = "Apache-2.0" diff --git a/src/profound/_version.py b/src/profound/_version.py index 8350dd40..31f21c15 100644 --- a/src/profound/_version.py +++ b/src/profound/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Scalar. See README.md for details. __title__ = "profound" -__version__ = "0.1.0" # x-release-please-version +__version__ = "0.58.0" # x-release-please-version