bigquery-agent-analytics 0.3.1__tar.gz → 0.3.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- bigquery_agent_analytics-0.3.2/.github/workflows/producers-ci.yml +100 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/.gitignore +9 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/CHANGELOG.md +111 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/PKG-INFO +1 -1
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/autoformat.sh +2 -2
- bigquery_agent_analytics-0.3.2/examples/migration_v5/README.md +261 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/binding.yaml +84 -0
- bigquery_agent_analytics-0.3.2/examples/migration_v5/example_ontologies/__init__.py +25 -0
- bigquery_agent_analytics-0.3.2/examples/migration_v5/example_ontologies/simple_request_flow.ttl +125 -0
- bigquery_agent_analytics-0.3.2/examples/migration_v5/example_ontologies/simple_request_flow_config.py +45 -0
- bigquery_agent_analytics-0.3.2/examples/migration_v5/mako_artifacts.py +229 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/mako_demo_agent.py +172 -3
- bigquery_agent_analytics-0.3.2/examples/migration_v5/ontology_artifacts.py +770 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/periodic_materialization/README.md +194 -78
- bigquery_agent_analytics-0.3.2/examples/migration_v5/periodic_materialization/build_image.sh +189 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/periodic_materialization/deploy_cloud_run_job.sh +348 -50
- bigquery_agent_analytics-0.3.2/examples/migration_v5/periodic_materialization/requirements.txt +36 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/periodic_materialization/run_job.py +119 -0
- bigquery_agent_analytics-0.3.2/examples/migration_v5/periodic_materialization/terraform/.gitignore +9 -0
- bigquery_agent_analytics-0.3.2/examples/migration_v5/periodic_materialization/terraform/README.md +185 -0
- bigquery_agent_analytics-0.3.2/examples/migration_v5/periodic_materialization/terraform/main.tf +333 -0
- bigquery_agent_analytics-0.3.2/examples/migration_v5/periodic_materialization/terraform/outputs.tf +38 -0
- bigquery_agent_analytics-0.3.2/examples/migration_v5/periodic_materialization/terraform/terraform.tfvars.example +27 -0
- bigquery_agent_analytics-0.3.2/examples/migration_v5/periodic_materialization/terraform/variables.tf +133 -0
- bigquery_agent_analytics-0.3.2/examples/migration_v5/periodic_materialization/terraform/versions.tf +31 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/property_graph.sql +51 -1
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/reference_extractor.py +293 -11
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/table_ddl.sql +12 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5_demo_notebook.ipynb +840 -255
- bigquery_agent_analytics-0.3.2/producers/README.md +37 -0
- bigquery_agent_analytics-0.3.2/producers/pyproject.toml +88 -0
- bigquery_agent_analytics-0.3.2/producers/src/bigquery_agent_analytics_tracing/__init__.py +40 -0
- bigquery_agent_analytics-0.3.2/producers/src/bigquery_agent_analytics_tracing/_utils.py +168 -0
- bigquery_agent_analytics-0.3.2/producers/src/bigquery_agent_analytics_tracing/_writer_identity.py +52 -0
- bigquery_agent_analytics-0.3.2/producers/src/bigquery_agent_analytics_tracing/config.py +149 -0
- bigquery_agent_analytics-0.3.2/producers/src/bigquery_agent_analytics_tracing/drain.py +668 -0
- bigquery_agent_analytics-0.3.2/producers/src/bigquery_agent_analytics_tracing/logger.py +459 -0
- bigquery_agent_analytics-0.3.2/producers/src/bigquery_agent_analytics_tracing/schema.py +73 -0
- bigquery_agent_analytics-0.3.2/producers/tests/__init__.py +13 -0
- bigquery_agent_analytics-0.3.2/producers/tests/test_config.py +158 -0
- bigquery_agent_analytics-0.3.2/producers/tests/test_drain.py +309 -0
- bigquery_agent_analytics-0.3.2/producers/tests/test_logger_row_shape.py +290 -0
- bigquery_agent_analytics-0.3.2/producers/tests/test_schema.py +106 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/pyproject.toml +1 -1
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/scripts/README.md +116 -2
- bigquery_agent_analytics-0.3.2/scripts/latency_report.py +730 -0
- bigquery_agent_analytics-0.3.2/scripts/latency_report.sh +52 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/scripts/quality_report.py +389 -113
- bigquery_agent_analytics-0.3.2/scripts/sample_latency_report.md +169 -0
- bigquery_agent_analytics-0.3.2/scripts/sample_quality_report.md +138 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/cli.py +87 -0
- bigquery_agent_analytics-0.3.2/src/bigquery_agent_analytics/extracted_models.py +152 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/graph_validation.py +60 -21
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/materialize_window.py +1042 -46
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/ontology_graph.py +192 -12
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/ontology_materializer.py +77 -17
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/ontology_property_graph.py +55 -21
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/resolved_spec.py +54 -3
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/runtime_spec.py +24 -2
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/structured_extraction.py +104 -9
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_ontology/binding_loader.py +248 -1
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_ontology/binding_models.py +91 -6
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_ontology/graph_ddl_compiler.py +105 -5
- bigquery_agent_analytics-0.3.2/tests/test_binding_explicit_fk_mapping.py +908 -0
- bigquery_agent_analytics-0.3.2/tests/test_extract_graph_diagnostics_modes.py +565 -0
- bigquery_agent_analytics-0.3.2/tests/test_latency_report_helpers.py +304 -0
- bigquery_agent_analytics-0.3.2/tests/test_materialize_window.py +4602 -0
- bigquery_agent_analytics-0.3.2/tests/test_migration_v5_ontology_artifacts.py +345 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_migration_v5_reference_extractor.py +164 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_ontology_materializer.py +170 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_ontology_property_graph.py +121 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_quality_report_helpers.py +315 -4
- bigquery_agent_analytics-0.3.1/examples/migration_v5/README.md +0 -205
- bigquery_agent_analytics-0.3.1/examples/migration_v5/mako_artifacts.py +0 -751
- bigquery_agent_analytics-0.3.1/examples/migration_v5/periodic_materialization/requirements.txt +0 -29
- bigquery_agent_analytics-0.3.1/scripts/sample_report.md +0 -164
- bigquery_agent_analytics-0.3.1/src/bigquery_agent_analytics/extracted_models.py +0 -57
- bigquery_agent_analytics-0.3.1/tests/test_materialize_window.py +0 -2203
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/.github/workflows/ci.yml +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/.github/workflows/release.yml +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/CODE_OF_CONDUCT.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/CONTRIBUTING.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/LICENSE +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/README.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/SDK.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/SECURITY.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/dashboard/README.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/dashboard/agent_analytics_dashboard.ipynb +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/dashboard/app.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/dashboard/requirements.txt +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/README.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/continuous_queries/README.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/continuous_queries/bigtable_dashboard.sql +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/continuous_queries/pubsub_alerting.sql +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/continuous_queries/realtime_error_analysis.sql +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/continuous_queries/session_scoring.sql +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/continuous_queries/setup_reservation.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/python_udf/README.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/python_udf/register.sql +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/remote_function/README.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/remote_function/deploy.sh +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/remote_function/dispatch.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/remote_function/main.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/remote_function/register.sql +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/streaming_evaluation/README.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/streaming_evaluation/main.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/streaming_evaluation/requirements.txt +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/streaming_evaluation/setup.sh +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/streaming_evaluation/trigger_query.sql +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/streaming_evaluation/worker.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/README.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/context_graph_v2_design.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/context_graph_v3_design.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/design.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/entity_resolution_primitives.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_bka_measurement.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_bq_bundle_mirror.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_bundle_loader.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_diagnostics.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_orchestrator_swap.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_plan_parser.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_plan_resolver.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_retry_loop.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_revalidate_cli.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_revalidation.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_rollout_guide.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_runtime_fallback.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_runtime_registry.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_runtime_target.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_scaffolding.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_template_renderer.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/hatteras_evaluation.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/implementation_plan_concept_index_runtime.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/implementation_plan_remote_function.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/learning_ontology_and_context_graph.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/ontology/binding-validation.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/ontology/binding.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/ontology/cli.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/ontology/compilation.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/ontology/concept-index.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/ontology/ontology-build.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/ontology/ontology.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/ontology/owl-import.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/ontology/scaffold.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/ontology/validation.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/ontology_graph_v4_design.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/ontology_graph_v5_design.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/ontology_runtime_reader.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/prd_unified_analytics_interface.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/proposal_bigquery_agent_cli.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/python_udf_support_design.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/remote_function_rationale.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/sdk_usage_tracking.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/README.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/.gitignore +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/A2A_JOINT_LINEAGE.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/BQ_STUDIO_WALKTHROUGH.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/DATA_LINEAGE.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/DEMO_NARRATION.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/README.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/analyst_agent/__init__.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/analyst_agent/agent.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/analyst_agent/prompts.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/analyst_agent/tools.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/bq_studio_queries.gql.tpl +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/build_joint_graph.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/build_org_graphs.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/caller_agent/__init__.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/caller_agent/agent.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/caller_agent/prompts.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/caller_agent/tools.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/campaigns.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/joint_property_graph.gql.tpl +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/receiver_agent/__init__.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/receiver_agent/agent.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/receiver_agent/prompts.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/render_queries.sh +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/reset.sh +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/run_analyst_agent.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/run_caller_agent.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/run_e2e_demo.sh +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/run_receiver_server.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/setup.sh +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/smoke_receiver.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/DEMO_NARRATION.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/README.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/agent/__init__.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/agent/agent.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/agent/prompts.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/agent/tools.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/agent_improvement/__init__.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/agent_improvement/config.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/agent_improvement/config_loader.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/agent_improvement/eval_runner.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/agent_improvement/improver_agent.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/agent_improvement/prompt_adapter.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/agent_improvement/prompts.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/agent_improvement/tool_introspection.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/config.json +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/demo.png +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/eval/eval_cases.json +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/eval/generate_traffic.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/eval/operational_metrics.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/eval/run_eval.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/overview.png +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/reset.sh +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/run_cycle.sh +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/run_improvement.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/setup.sh +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/setup_vertex.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/show_prompt.sh +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/ai_classify_side_by_side.sql +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/ai_forecast_side_by_side.sql +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/ai_ml_integration_demo.ipynb +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/ai_similarity_validation.sql +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/categorical_dashboard.sql +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/categorical_evaluation_demo.ipynb +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/ci/README.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/ci/evaluate_thresholds.yml +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/ci_eval_pipeline.sh +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/cli_agent_tool.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/context_graph_adcp_demo.ipynb +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/continuous_query_alerting.sql +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/dashboard_v2.ipynb +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/dashboard_v2_bigframes.ipynb +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/.gitignore +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/BQ_STUDIO_WALKTHROUGH.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/DATA_LINEAGE.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/DEMO_NARRATION.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/DEMO_QUESTIONS.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/README.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/SETUP_NEW_PROJECT.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/SLIDES.html +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/SLIDES.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/SLIDES.pptx +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/agent/__init__.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/agent/agent.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/agent/prompts.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/agent/tools.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/bq_studio_queries.gql.tpl +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/build_graph.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/build_rich_graph.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/campaigns.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/property_graph.gql.tpl +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/render_queries.sh +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/reset.sh +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/rich_property_graph.gql.tpl +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/run_agent.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/setup.sh +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/e2e_demo.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/e2e_demo_output.txt +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/e2e_notebook_demo.ipynb +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/event_semantics_views_bigframes_demo.ipynb +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/memory_service_demo.ipynb +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/.gitignore +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/export_events_jsonl.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/mako_core.ttl +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/ontology.yaml +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/revalidation_thresholds.json +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/run_agent.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/nba_agent_trace_analysis_notebook.ipynb +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/ontology_graph_v4_demo.ipynb +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/ontology_graph_v5_demo.ipynb +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/python_udf_eval_summary.sql +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/python_udf_evaluation.sql +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/python_udf_event_semantics.sql +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/remote_function_dashboard.sql +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/ymgo_graph_spec.yaml +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/scripts/quality_report.sh +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/__init__.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/_deploy_runtime.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/_ontology_routing.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/_streaming_evaluation.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/_telemetry.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/ai_ml_integration.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/bigframes_evaluator.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/binding_validation.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/categorical_evaluator.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/categorical_views.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/client.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/context_graph.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/eval_suite.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/eval_validator.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/evaluators.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/event_semantics.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/__init__.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/ast_validator.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/bq_bundle_mirror.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/bundle_loader.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/cli_revalidate.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/compiler.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/diagnostics.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/fingerprint.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/manifest.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/measurement.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/plan_parser.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/plan_resolver.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/retry_loop.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/revalidation.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/runtime_fallback.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/runtime_registry.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/smoke_test.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/subprocess_runner.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/template_renderer.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/feedback.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/formatter.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/grader_pipeline.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/insights.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/memory_service.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/multi_trial.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/ontology_models.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/ontology_orchestrator.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/ontology_runtime.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/ontology_schema_compiler.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/serialization.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/trace.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/trace_evaluator.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/ttl_importer.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/udf_kernels.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/udf_sql_templates.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/views.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_ontology/__init__.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_ontology/_fingerprint.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_ontology/cli.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_ontology/concept_index.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_ontology/docs/user_manual.md +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_ontology/graph_ddl_models.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_ontology/ontology_loader.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_ontology/ontology_models.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_ontology/owl_importer.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_ontology/scaffold.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/__init__.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/bigquery_ontology/__init__.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/bigquery_ontology/test_binding_loader.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/bigquery_ontology/test_binding_models.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/bigquery_ontology/test_cli.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/bigquery_ontology/test_compile_concept_index.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/bigquery_ontology/test_concept_index.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/bigquery_ontology/test_fingerprint.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/bigquery_ontology/test_graph_ddl_compiler.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/bigquery_ontology/test_ontology_models.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/bigquery_ontology/test_owl_importer.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/bigquery_ontology/test_scaffold.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/bigquery_ontology/test_scaffold_cli.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/fixtures/lineage_sessions.json +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/fixtures/mixed_events.json +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/fixtures/mixed_owl_skos.ttl +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/fixtures/skos_taxonomy.ttl +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/fixtures/test_binding.yaml +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/fixtures/test_combined_spec.yaml +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/fixtures/test_ontology.yaml +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/fixtures/yamo_sample.ttl +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/fixtures_extractor_compilation/__init__.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/fixtures_extractor_compilation/bka_decision_inputs.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/fixtures_extractor_compilation/bka_decision_measurement_report.json +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/fixtures_extractor_compilation/bka_decision_template.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/fixtures_extractor_compilation/plan_bka_decision.json +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_abstract_adapter_filter.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_ai_generate_judge_live.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_ai_ml_integration.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_ai_ml_integration_labels.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_bigframes_evaluator.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_binding_validation.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_bridge_hardening.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_categorical_evaluator.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_categorical_views.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_cli.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_client_labels.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_context_graph.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_context_graph_labels.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_dual_loader.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_eval_suite.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_eval_validator.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_event_semantics.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extracted_models.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_bka_compile_live.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_bq_bundle_mirror.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_bq_bundle_mirror_live.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_bundle_loader.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_cli_revalidate.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_cli_revalidate_bq_live.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_diagnostics.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_measurement.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_plan_parser.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_plan_resolver.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_retry_loop.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_revalidation.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_runtime_fallback.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_runtime_registry.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_template.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_feedback_labels.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_formatter.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_grader_pipeline.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_graph_validation.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_integration_ontology_binding.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_materialize_window_live.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_memory_service.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_memory_service_labels.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_multi_trial.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_ontology_graph.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_ontology_graph_from_bundles_root.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_ontology_labels.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_ontology_models.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_ontology_orchestrator.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_ontology_runtime.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_ontology_runtime_live.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_ontology_schema_compiler.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_owl_import_bridge.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_pr16_fixes.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_pr17_fixes.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_pr19_fixes.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_remote_function.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_resolved_spec.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_runtime_factory.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_runtime_spec.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_sdk_client.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_sdk_evaluators.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_sdk_feedback.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_sdk_insights.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_sdk_trace.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_serialization.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_streaming_evaluation.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_surface_tags.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_telemetry.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_trace_evaluator.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_trace_filter_factory.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_udf_kernels.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_udf_sql_generation.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_v5_golden.py +0 -0
- {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_views.py +0 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Copyright 2026 Google LLC
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
name: Producers CI
|
|
16
|
+
|
|
17
|
+
on:
|
|
18
|
+
push:
|
|
19
|
+
branches: [main]
|
|
20
|
+
paths:
|
|
21
|
+
- 'producers/**'
|
|
22
|
+
- '.github/workflows/producers-ci.yml'
|
|
23
|
+
pull_request:
|
|
24
|
+
branches: [main]
|
|
25
|
+
paths:
|
|
26
|
+
- 'producers/**'
|
|
27
|
+
- '.github/workflows/producers-ci.yml'
|
|
28
|
+
|
|
29
|
+
concurrency:
|
|
30
|
+
group: producers-ci-${{ github.ref }}
|
|
31
|
+
cancel-in-progress: true
|
|
32
|
+
|
|
33
|
+
defaults:
|
|
34
|
+
run:
|
|
35
|
+
working-directory: producers
|
|
36
|
+
|
|
37
|
+
jobs:
|
|
38
|
+
format:
|
|
39
|
+
name: Producers format check
|
|
40
|
+
runs-on: ubuntu-latest
|
|
41
|
+
steps:
|
|
42
|
+
- uses: actions/checkout@v4
|
|
43
|
+
|
|
44
|
+
- uses: actions/setup-python@v5
|
|
45
|
+
with:
|
|
46
|
+
python-version: "3.12"
|
|
47
|
+
|
|
48
|
+
- name: Install formatting tools
|
|
49
|
+
run: pip install "pyink>=24.3.0" "isort>=5.0"
|
|
50
|
+
|
|
51
|
+
- name: isort --check
|
|
52
|
+
run: isort --check-only src/ tests/
|
|
53
|
+
|
|
54
|
+
- name: pyink --check
|
|
55
|
+
run: pyink --check src/ tests/
|
|
56
|
+
|
|
57
|
+
test:
|
|
58
|
+
name: Producers test (Python ${{ matrix.python-version }})
|
|
59
|
+
runs-on: ubuntu-latest
|
|
60
|
+
strategy:
|
|
61
|
+
fail-fast: false
|
|
62
|
+
matrix:
|
|
63
|
+
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
|
|
64
|
+
steps:
|
|
65
|
+
- uses: actions/checkout@v4
|
|
66
|
+
|
|
67
|
+
- uses: actions/setup-python@v5
|
|
68
|
+
with:
|
|
69
|
+
python-version: ${{ matrix.python-version }}
|
|
70
|
+
|
|
71
|
+
- name: Install package with dev dependencies
|
|
72
|
+
run: pip install -e ".[dev]"
|
|
73
|
+
|
|
74
|
+
- name: Run tests
|
|
75
|
+
run: pytest --tb=short -q
|
|
76
|
+
|
|
77
|
+
build:
|
|
78
|
+
name: Producers build
|
|
79
|
+
runs-on: ubuntu-latest
|
|
80
|
+
needs: [format, test]
|
|
81
|
+
steps:
|
|
82
|
+
- uses: actions/checkout@v4
|
|
83
|
+
|
|
84
|
+
- uses: actions/setup-python@v5
|
|
85
|
+
with:
|
|
86
|
+
python-version: "3.12"
|
|
87
|
+
|
|
88
|
+
- name: Install build tools
|
|
89
|
+
run: pip install build
|
|
90
|
+
|
|
91
|
+
- name: Build sdist and wheel
|
|
92
|
+
run: python -m build
|
|
93
|
+
|
|
94
|
+
- name: List artifacts
|
|
95
|
+
run: ls -la dist/
|
|
96
|
+
|
|
97
|
+
- uses: actions/upload-artifact@v4
|
|
98
|
+
with:
|
|
99
|
+
name: producers-dist
|
|
100
|
+
path: producers/dist/
|
|
@@ -11,11 +11,20 @@ build/
|
|
|
11
11
|
.venv/
|
|
12
12
|
venv/
|
|
13
13
|
env/
|
|
14
|
+
.adk/
|
|
14
15
|
uv.lock
|
|
16
|
+
.env
|
|
15
17
|
|
|
16
18
|
# Script outputs
|
|
17
19
|
scripts/reports/
|
|
18
20
|
|
|
21
|
+
# Example run artifacts
|
|
22
|
+
examples/*/reports/
|
|
23
|
+
examples/*/reports_*/
|
|
24
|
+
examples/*/trials_*/
|
|
25
|
+
scripts/**/*.log
|
|
26
|
+
examples/**/*.log
|
|
27
|
+
|
|
19
28
|
# Local workspace metadata
|
|
20
29
|
.code*/
|
|
21
30
|
deploy/streaming_evaluation/.streaming_evaluation_state.json
|
|
@@ -7,6 +7,117 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.3.2] - 2026-05-22
|
|
11
|
+
|
|
12
|
+
### Release highlights
|
|
13
|
+
|
|
14
|
+
The migration-v5 production track lands the design-partner asks from
|
|
15
|
+
[#187](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/issues/187)
|
|
16
|
+
end-to-end: backfill mode, compiled-only extraction (with zero-LLM
|
|
17
|
+
guarantee), explicit FK→PK mapping that re-enables MAKO self-edges,
|
|
18
|
+
an opt-in orphan-session watchdog, the Beat 5 feedback / reward
|
|
19
|
+
loop in both the demo and the live notebook, hardened deploy
|
|
20
|
+
defaults (split SAs + tunable retries), and a Terraform module
|
|
21
|
+
mirroring the bash deploy. The migration-v5 cron path is now
|
|
22
|
+
complete for audit-critical production deployments.
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
|
|
26
|
+
- **Backfill mode for `materialize_window`** ([#188](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/pull/188),
|
|
27
|
+
closes [#177](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/issues/177))
|
|
28
|
+
— `bqaa-materialize-window --backfill --from / --to --state-key-suffix`
|
|
29
|
+
runs a one-shot historical window with isolated state-table
|
|
30
|
+
rows (the suffix folds into the `state_key` hash, so backfill
|
|
31
|
+
rows can't advance the steady-state cron checkpoint).
|
|
32
|
+
- **Compiled-only extraction mode + deploy path** ([#192](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/pull/192),
|
|
33
|
+
[#193](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/pull/193),
|
|
34
|
+
closes [#178](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/issues/178))
|
|
35
|
+
— `--extraction-mode=compiled-only` routes the orchestrator
|
|
36
|
+
through structured extractors only, never calls `AI.GENERATE`,
|
|
37
|
+
surfaces uncovered spans as typed `empty_extraction` failures
|
|
38
|
+
with sample diagnostics. The deploy script (`#193`) stages
|
|
39
|
+
`reference_extractor.py` into the container, wires
|
|
40
|
+
`BQAA_REFERENCE_EXTRACTORS_MODULE`, and makes
|
|
41
|
+
`roles/aiplatform.user` conditional (idempotently removes the
|
|
42
|
+
grant when transitioning an existing ai-fallback deploy to
|
|
43
|
+
compiled-only). `TestCompiledOnlyMakesZeroLLMCalls` proves the
|
|
44
|
+
zero-LLM contract.
|
|
45
|
+
- **Explicit FK→PK mapping for binding columns** ([#191](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/pull/191),
|
|
46
|
+
[#222](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/pull/222),
|
|
47
|
+
closes [#179](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/issues/179))
|
|
48
|
+
— `from_columns` / `to_columns` accept `list[dict[str, str]]`
|
|
49
|
+
shape (`[{src_decision_execution_id: id}]`) in addition to the
|
|
50
|
+
legacy `list[str]`. Materializer, validators, and the PG DDL
|
|
51
|
+
compiler consume the canonical
|
|
52
|
+
`ResolvedRelationship.from_column_mapping`. MAKO's
|
|
53
|
+
`evolvedFrom` / `supersededBy` self-edges are re-added to the
|
|
54
|
+
migration v5 binding.
|
|
55
|
+
- **Orphan-session watchdog** ([#224](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/pull/224),
|
|
56
|
+
closes [#180](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/issues/180))
|
|
57
|
+
— opt-in via `--max-session-age-hours N`. Each cron pass scans
|
|
58
|
+
for sessions whose first event is older than the cutoff but
|
|
59
|
+
which never emitted `AGENT_COMPLETED`; flags them as
|
|
60
|
+
`session_orphaned` failures and records the running set in the
|
|
61
|
+
state table (`mode='orphan_scan'` + `mode='orphan_ledger'`
|
|
62
|
+
rows). Strict `>` watermark, explicit timestamp-bound partition
|
|
63
|
+
pruning on the resolved-orphan probe.
|
|
64
|
+
- **Migration v5 Beat 5 — feedback / reward loop** ([#227](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/pull/227),
|
|
65
|
+
[#228](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/pull/228),
|
|
66
|
+
closes [#181](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/issues/181),
|
|
67
|
+
[#184](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/issues/184),
|
|
68
|
+
[#185](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/issues/185))
|
|
69
|
+
— demo scope grows from 6 → 11 entities and 9 → 14
|
|
70
|
+
relationships. Adds `BusinessConstraint`,
|
|
71
|
+
`ConstraintApplication`, `RejectionReason`, `OutcomeSignal`,
|
|
72
|
+
`RewardComputation` + their edges. The demo agent emits four
|
|
73
|
+
new tools (`apply_constraint`, `record_rejection`,
|
|
74
|
+
`record_outcome_signal`, `compute_reward`); the reference
|
|
75
|
+
extractor covers all four; the notebook's new Beat 5 cells run
|
|
76
|
+
the two payoff GQL traversals end-to-end against a live
|
|
77
|
+
BigQuery scratch dataset (29 / 29 cells executed, counts 1–29,
|
|
78
|
+
6 unique reward rows + 8 unique rejection rows verified live).
|
|
79
|
+
- **Split runtime + scheduler-caller SAs by default** ([#230](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/pull/230),
|
|
80
|
+
closes [#182](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/issues/182))
|
|
81
|
+
— `deploy_cloud_run_job.sh` creates two SAs by default:
|
|
82
|
+
`bqaa-periodic-runtime-sa` (BigQuery + Vertex AI roles) and
|
|
83
|
+
`bqaa-periodic-scheduler-sa` (only `roles/run.invoker` on the
|
|
84
|
+
job). `--single-sa` is the escape hatch for the pre-#182
|
|
85
|
+
combined identity. Least-privilege: scheduler-caller never
|
|
86
|
+
needs BigQuery permissions.
|
|
87
|
+
- **Tunable `--max-retries` on Cloud Run Job** ([#230](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/pull/230),
|
|
88
|
+
closes [#183](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/issues/183))
|
|
89
|
+
— default 2 (was hard-coded 1). The orchestrator's session-
|
|
90
|
+
level idempotency + append-only state table make additional
|
|
91
|
+
retries safe. The retry count flows into `BQAA_MAX_RETRIES` on
|
|
92
|
+
the job's env so the runtime's startup log surfaces it in
|
|
93
|
+
`jsonPayload.max_retries` — operators correlating Cloud
|
|
94
|
+
Monitoring alert noise with retry behaviour see the policy
|
|
95
|
+
without `gcloud run jobs describe`.
|
|
96
|
+
- **Terraform module for periodic materialization** ([#231](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/pull/231),
|
|
97
|
+
closes [#186](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/issues/186))
|
|
98
|
+
— `examples/migration_v5/periodic_materialization/terraform/`
|
|
99
|
+
mirrors the bash deploy's resources (graph dataset, both SAs,
|
|
100
|
+
IAM bindings, Cloud Run v2 Job, Scheduler trigger) with
|
|
101
|
+
defaults matching `deploy_cloud_run_job.sh`'s post-#230
|
|
102
|
+
surface. New `build_image.sh` helper produces the staging
|
|
103
|
+
layout the runtime needs. Image build/publish are intentionally
|
|
104
|
+
outside the module — `var.image_uri` takes the published
|
|
105
|
+
container image. `var.manage_apis` enables the required APIs
|
|
106
|
+
on a clean project; `var.deletion_protection` matches the bash
|
|
107
|
+
deploy's lifecycle. Live-verified end-to-end against
|
|
108
|
+
`test-project-0728-467323`.
|
|
109
|
+
|
|
110
|
+
### Fixed
|
|
111
|
+
|
|
112
|
+
- **Orphan-watchdog empty-array streaming-insert crash hotfix** ([#225](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/pull/225))
|
|
113
|
+
— BigQuery's streaming-insert API rejects empty
|
|
114
|
+
`ARRAY<STRING>` values with `Field value of
|
|
115
|
+
flagged_session_ids cannot be empty.`. Pre-fix, every cron
|
|
116
|
+
pass after [#224](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/pull/224)
|
|
117
|
+
crashed at insert time. Fix: omit nullable columns from the
|
|
118
|
+
`insert_rows_json` payload when their value is `None` or
|
|
119
|
+
empty.
|
|
120
|
+
|
|
10
121
|
## [0.3.1] - 2026-05-18
|
|
11
122
|
|
|
12
123
|
### Release highlights
|
|
@@ -21,9 +21,9 @@ set -euo pipefail
|
|
|
21
21
|
REPO_ROOT="$(cd "$(dirname "$0")" && pwd)"
|
|
22
22
|
|
|
23
23
|
echo "==> Running isort (import sorting)..."
|
|
24
|
-
isort "${REPO_ROOT}/src/" "${REPO_ROOT}/tests/" "${REPO_ROOT}/examples/"
|
|
24
|
+
isort "${REPO_ROOT}/src/" "${REPO_ROOT}/tests/" "${REPO_ROOT}/examples/" "${REPO_ROOT}/scripts/"
|
|
25
25
|
|
|
26
26
|
echo "==> Running pyink (code formatting)..."
|
|
27
|
-
pyink --config "${REPO_ROOT}/pyproject.toml" "${REPO_ROOT}/src/" "${REPO_ROOT}/tests/" "${REPO_ROOT}/examples/"
|
|
27
|
+
pyink --config "${REPO_ROOT}/pyproject.toml" "${REPO_ROOT}/src/" "${REPO_ROOT}/tests/" "${REPO_ROOT}/examples/" "${REPO_ROOT}/scripts/"
|
|
28
28
|
|
|
29
29
|
echo "==> Done. All Python files formatted."
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
# Migration v5 Demo — Ontology-Driven Artifact Pipeline
|
|
2
|
+
|
|
3
|
+
**Status:** The four-guarantee notebook (`examples/migration_v5_demo_notebook.ipynb`) is live end-to-end against `test-project-0728-467323` using the MAKO ontology as the canonical reference example. PR [#155](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/pull/155) shipped the fixture foundation; PR [#157](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/pull/157) added `reference_extractor.py`; PR [#160](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/pull/160) wired Beat 3 + Beat 4.4 live.
|
|
4
|
+
|
|
5
|
+
The demo's event source of truth is **a runnable agent talking to the BQ AA plugin**, not a hand-coded event generator. The artifact pipeline that turns a TTL into binding + DDL + property-graph SQL is **ontology-agnostic** — see `ontology_artifacts.py` — and the MAKO config (in `mako_artifacts.py`) is one concrete configuration of it.
|
|
6
|
+
|
|
7
|
+
## Pluggable contract
|
|
8
|
+
|
|
9
|
+
The pipeline takes a single :class:`ontology_artifacts.OntologyConfig` plus a target `(project, dataset)` and produces four files:
|
|
10
|
+
|
|
11
|
+
| Generated file | What it is |
|
|
12
|
+
|---|---|
|
|
13
|
+
| `ontology.yaml` | `import-owl` output with `FILL_IN` PKs resolved, cross-namespace dangling relationships dropped, inheritance stripped. |
|
|
14
|
+
| `binding.yaml` | Maps the configured entity allowlist onto BigQuery tables for the target `(project, dataset)`. Heterogeneous edges use the legacy `from_columns: [<col>]` shape; self-edges (`evolvedFrom`, `supersededBy`) use the explicit dict-shape `from_columns: [{src_<col>: <pk_prop>}]` so the SDK's canonical FK→PK mapping disambiguates the src/dst endpoints. Out-of-scope relationships filtered. |
|
|
15
|
+
| `table_ddl.sql` | `CREATE TABLE` SQL for every node + edge table, with SDK metadata columns (`session_id STRING, extracted_at TIMESTAMP`) on every bound table. |
|
|
16
|
+
| `property_graph.sql` | `CREATE OR REPLACE PROPERTY GRAPH` over those tables. Node `KEY` + edge `SOURCE KEY ... REFERENCES` use the per-entity PK columns. |
|
|
17
|
+
|
|
18
|
+
The pipeline applies three OWL-TTL normalizations generic enough to apply to any reasonable ontology:
|
|
19
|
+
|
|
20
|
+
1. **`FILL_IN` PKs → `id: string`.** The OWL importer marks entities without `owl:hasKey` declarations as `FILL_IN`; the resolver synthesizes a stable `id` property. Entities that already declare `owl:hasKey` are left untouched.
|
|
21
|
+
2. **Cross-namespace dangling relationships dropped.** TTLs that extend upstream ontologies (PROV-O, PKO, DCAT, …) often reference upstream entities the importer didn't pull; the pipeline drops these and records them under a `{annotation_prefix}:dropped_cross_namespace_relationships` audit annotation.
|
|
22
|
+
3. **Inheritance stripped.** `gm compile` v0 doesn't support `extends:` clauses; the pipeline drops them and records the loss under `{annotation_prefix}:stripped_inheritance`.
|
|
23
|
+
|
|
24
|
+
## Example ontologies in this directory
|
|
25
|
+
|
|
26
|
+
This demo ships **two** ontology configs. The MAKO config is the load-bearing reference example (real production ontology, full agent, runnable demo); the Simple Request Flow config is a smoke fixture that proves the pipeline is genuinely ontology-agnostic.
|
|
27
|
+
|
|
28
|
+
| Config | TTL | Where | Surface |
|
|
29
|
+
|---|---|---|---|
|
|
30
|
+
| `MAKO_CONFIG` | `mako_core.ttl` (Yahoo Monetization decision ontology, 18 namespace entities) | `mako_artifacts.py` | Full demo: notebook, `mako_demo_agent.py` (5 decision-flow tools), `reference_extractor.py`, periodic materialization deploy. |
|
|
31
|
+
| `SIMPLE_REQUEST_FLOW_CONFIG` | `example_ontologies/simple_request_flow.ttl` (3-entity Request → Action → Outcome flow) | `example_ontologies/simple_request_flow_config.py` | Smoke fixture only. Exercised by `tests/test_migration_v5_ontology_artifacts.py`. No runnable agent ships with it. |
|
|
32
|
+
|
|
33
|
+
A new ontology plugs in the same way: write a TTL, define an `OntologyConfig` naming it, call `regenerate_snapshots(your_config, project=..., dataset=...)`.
|
|
34
|
+
|
|
35
|
+
## Authorship boundary
|
|
36
|
+
|
|
37
|
+
| File | Authored? | What it does |
|
|
38
|
+
|------|-----------|--------------|
|
|
39
|
+
| `ontology_artifacts.py` | **Authored.** | Generic ontology-agnostic pipeline: `OntologyConfig` dataclass + `load_ontology`, `make_binding`, `make_table_ddl`, `make_property_graph_sql`, `regenerate_snapshots`. **Does not generate events.** |
|
|
40
|
+
| `mako_core.ttl` | **Authored.** | The real MAKO ontology, pulled from the [reference gist](https://gist.github.com/haiyuan-eng-google/a69ff6282ebcc877f77f9aa4e3db1afd). Domain-agnostic decision semantics for Yahoo Monetization Platform. |
|
|
41
|
+
| `mako_artifacts.py` | **Authored.** | MAKO-specific config: `MAKO_CONFIG` + thin back-compat wrappers around the generic pipeline. The notebook imports from this module. |
|
|
42
|
+
| `mako_demo_agent.py` | **Authored.** | Runnable ADK agent + `BigQueryAgentAnalyticsPlugin` wiring. Defines five MAKO decision-flow tools (`capture_context`, `propose_decision_point`, `evaluate_candidate`, `commit_outcome`, `complete_execution`) and a system prompt that walks the agent through them. Real plugin traces land in `agent_events` when the agent runs. MAKO-specific by design — the agent's tools mirror MAKO's decision flow. |
|
|
43
|
+
| `run_agent.py` | **Authored.** | Driver. `python run_agent.py --sessions 50 --project X --dataset Y` runs the MAKO agent for N sessions and lets the plugin populate `agent_events`. |
|
|
44
|
+
| `export_events_jsonl.py` | **Authored.** | Optional. Exports a pinned subset of `agent_events` to a local JSONL file for the notebook's deterministic offline revalidation tests. Not an event generator — it reads from BigQuery. |
|
|
45
|
+
| `example_ontologies/simple_request_flow.ttl` | **Authored.** | Pluggability smoke fixture (3 entities, 2 relationships, no cross-namespace imports). |
|
|
46
|
+
| `example_ontologies/simple_request_flow_config.py` | **Authored.** | `SIMPLE_REQUEST_FLOW_CONFIG` — second `OntologyConfig` that plugs into the same generic pipeline. |
|
|
47
|
+
| `ontology.yaml` / `binding.yaml` / `table_ddl.sql` / `property_graph.sql` | **Generated** for MAKO by `mako_artifacts.regenerate_snapshots()`. Checked in so reviewers can read them as-is. | TTL-derived artifacts for `(test-project-0728-467323, migration_v5_demo)`. The notebook regenerates against a fresh `migration_v5_demo_<8-hex>` dataset at runtime. |
|
|
48
|
+
| `events.jsonl` | **Captured.** | Optional offline snapshot exported via `export_events_jsonl.py`. Not checked in; populated on demand. |
|
|
49
|
+
|
|
50
|
+
The Simple Request Flow config's snapshots are **not checked in** — they're regenerated to a tmpdir by the pluggability test. The TTL + config are the only files under `example_ontologies/`.
|
|
51
|
+
|
|
52
|
+
## Demo flow (what the notebook does)
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
mako_core.ttl ┐
|
|
56
|
+
│ │
|
|
57
|
+
▼ │ Beat 0 — setup
|
|
58
|
+
ontology_artifacts.regenerate_snapshots(MAKO_CONFIG, ...) │
|
|
59
|
+
(called via mako_artifacts.regenerate_snapshots) │
|
|
60
|
+
│ │
|
|
61
|
+
├── ontology.yaml │
|
|
62
|
+
├── binding.yaml │
|
|
63
|
+
├── table_ddl.sql ────► BigQuery (CREATE TABLE) │
|
|
64
|
+
└── property_graph.sql ────► BigQuery (CREATE PROPERTY │
|
|
65
|
+
GRAPH) ┘
|
|
66
|
+
|
|
67
|
+
run_agent.py --sessions N ────► ADK runner + BQ AA plugin ┐ Beat 0 — populate
|
|
68
|
+
│ │ agent_events
|
|
69
|
+
▼ │
|
|
70
|
+
agent_events table ┘
|
|
71
|
+
|
|
72
|
+
ontology-build --skip-property-graph ────► populates the ┐
|
|
73
|
+
binding-validate node + edge │ Beats 1–4
|
|
74
|
+
ontology-build (extracts the graph) tables │ consume
|
|
75
|
+
OntologyRuntime + LabelSynonymResolver ┘
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Beat 3's compile / runtime / savings cells run live, using `reference_extractor.extract_mako_decision_event` as the runtime fallback under a focused compiled bundle that handles the `complete_execution` event type.
|
|
79
|
+
|
|
80
|
+
## Reference example: MAKO design decisions
|
|
81
|
+
|
|
82
|
+
The decisions below are documented in MAKO terms because MAKO is the load-bearing reference example, but the underlying pipeline behavior is general. Section numbers map to the transformations the generic pipeline applies (see "Pluggable contract" above).
|
|
83
|
+
|
|
84
|
+
### 1. MAKO `DecisionExecution` is the central hub
|
|
85
|
+
|
|
86
|
+
The MAKO demo entity allowlist (`DEMO_ENTITIES` in `mako_artifacts.py`) is **eleven entities** split across the two-beat arc:
|
|
87
|
+
|
|
88
|
+
* **Beats 1–4 hub** (6 entities): `AgentSession`, `DecisionExecution`, `DecisionPoint`, `Candidate`, `SelectionOutcome`, `ContextSnapshot`. `DecisionExecution` is non-obvious but load-bearing — per MAKO's TTL, it's the entity that's `partOfSession` an `AgentSession`, `atContextSnapshot` a `ContextSnapshot`, `executedAtDecisionPoint` a `DecisionPoint`, `hasSelectionOutcome` a `SelectionOutcome`. The decision-flow story doesn't hold together without it.
|
|
89
|
+
* **Beat 5 feedback / reward loop** (5 entities): `BusinessConstraint`, `ConstraintApplication`, `RejectionReason`, `OutcomeSignal`, `RewardComputation`. Each captures one slice of "what happened *after* the decision" — constraint evaluations, candidate rejections, observed real-world outcomes, and the RL reward computed from those outcomes.
|
|
90
|
+
|
|
91
|
+
The edge set is **TTL-driven with one filter**: `make_binding` walks `ontology.relationships` and picks every relationship whose endpoints both fall within the entity allowlist. The current MAKO binding has **fourteen** relationships covering eleven entities:
|
|
92
|
+
|
|
93
|
+
* **Beats 1–4 hub** (7 edges + 2 self-edges, 6 entities): `atContextSnapshot`, `evaluatesCandidate`, `executedAtDecisionPoint`, `hasSelectionOutcome`, `partOfSession`, `rejectedCandidate`, `selectedCandidate`, plus the two `DecisionExecution → DecisionExecution` self-edges (`evolvedFrom`, `supersededBy`).
|
|
94
|
+
* **Beat 5 feedback / reward loop** (5 edges, 5 entities): `hasRejectionReason` (Candidate → RejectionReason), `appliedConstraint` (ConstraintApplication → BusinessConstraint), `filteredByConstraint` (Candidate → ConstraintApplication), `producedOutcome` (DecisionExecution → OutcomeSignal), `derivedReward` (RewardComputation → OutcomeSignal).
|
|
95
|
+
|
|
96
|
+
The self-edges use the explicit dict-shape `from_columns` introduced in #179 and consumed by C2; see design decision 9 below for the column convention.
|
|
97
|
+
|
|
98
|
+
### 2. FILL_IN resolution: synthesize `id: string`
|
|
99
|
+
|
|
100
|
+
The MAKO TTL doesn't declare `owl:hasKey` on most entities, so the OWL importer marks 17 concrete entities' primary keys as `FILL_IN`. The pipeline resolves each one to a synthesized `id: string` property + primary key. Matches MAKO's "every artifact has a stable identifier" design contract. If a future MAKO revision adds `owl:hasKey` declarations, the resolver leaves those alone — only `FILL_IN` placeholders get rewritten. This rule is **general** — any TTL with `FILL_IN` PKs gets the same treatment.
|
|
101
|
+
|
|
102
|
+
### 3. Cross-namespace relationships dropped (with audit trail)
|
|
103
|
+
|
|
104
|
+
MAKO extends PROV-O + PKO + DCAT. Four relationships in the TTL point to entities outside MAKO's own namespace (`delegatedBy → prov:Agent`, etc.). The artifact pipeline drops these so the ontology loads cleanly and records the dropped names under the ontology's top-level `mako_demo:dropped_cross_namespace_relationships` annotation. The loss is auditable from a loaded model. **General behavior**: any TTL extending upstream ontologies gets the same treatment; the annotation key uses the config's `annotation_prefix`.
|
|
105
|
+
|
|
106
|
+
### 4. Agent uses realistic tool names; mapping is explicit
|
|
107
|
+
|
|
108
|
+
A real ADK agent exposes business/task-oriented tools, not tools whose argument names mirror TTL property names. The MAKO demo follows that convention — tool names are imperative business verbs (`capture_context`, `propose_decision_point`, `evaluate_candidate`, `commit_outcome`, `complete_execution`) and tool argument / return-value keys use ordinary snake_case (`audience_size`, `budget_remaining_usd`, `business_entity_id`).
|
|
109
|
+
|
|
110
|
+
The **explicit mapping** between what the agent emits and what extraction materializes into the MAKO graph:
|
|
111
|
+
|
|
112
|
+
| Tool field (trace) | Materialized → MAKO property | Materialization rule |
|
|
113
|
+
|---|---|---|
|
|
114
|
+
| `capture_context.audience_size` | `ContextSnapshot.snapshotPayload` (component) | Folded into the JSON `snapshotPayload` blob. |
|
|
115
|
+
| `capture_context.budget_remaining_usd` | `ContextSnapshot.snapshotPayload` (component) | Same. |
|
|
116
|
+
| `capture_context.context_id` | `ContextSnapshot.id` (primary key) | 1:1. |
|
|
117
|
+
| `propose_decision_point.decision_point_id` | `DecisionPoint.id` (primary key) | 1:1. |
|
|
118
|
+
| `propose_decision_point.reversibility` | `DecisionPoint.reversibility` | 1:1. |
|
|
119
|
+
| `propose_decision_point.decision_type` | — | **Trace-only.** MAKO does not declare `decisionType` on `DecisionPoint`; the field exists in the trace for analytics but isn't materialized. |
|
|
120
|
+
| `evaluate_candidate.candidate_id` | `Candidate.id` (primary key) | 1:1. |
|
|
121
|
+
| `evaluate_candidate.candidate_label` | — | **Trace-only.** `Candidate` has no MAKO-declared data properties; the label exists in the trace as reasoning context. |
|
|
122
|
+
| `evaluate_candidate.decision_point_id` | `evaluatesCandidate` edge (DecisionPoint → Candidate) | Edge endpoint. |
|
|
123
|
+
| `commit_outcome.outcome_id` | `SelectionOutcome.id` | 1:1. |
|
|
124
|
+
| `commit_outcome.selected_candidate_id` | `selectedCandidate` edge (SelectionOutcome → Candidate) | Edge endpoint. |
|
|
125
|
+
| `commit_outcome.rationale` | — | **Trace-only.** `SelectionOutcome` has no MAKO-declared rationale field. |
|
|
126
|
+
| `complete_execution.execution_id` | `DecisionExecution.id` | 1:1. |
|
|
127
|
+
| `complete_execution.business_entity_id` | `DecisionExecution.businessEntityId` | 1:1 (column `business_entity_id`). |
|
|
128
|
+
| `complete_execution.latency_ms` | `DecisionExecution.latencyMs` (INT64) | 1:1 (column `latency_ms`, **typed INT64** in `table_ddl.sql`). |
|
|
129
|
+
| `complete_execution.{decision_point,context,outcome}_id` | `executedAtDecisionPoint` / `atContextSnapshot` / `hasSelectionOutcome` edges | Each is an edge endpoint pointing at the parent `DecisionExecution`. |
|
|
130
|
+
| `session_id` (envelope) | `partOfSession` edge (DecisionExecution → AgentSession) | Plugin envelope. Both the compiled extractor (for `complete_execution` events; live in Beat 3.5) and the reference extractor (fallback path) synthesize the `AgentSession` node + `partOfSession` edge from this envelope field. Beat 4.4's hub-shape GQL traversal returns non-zero rows. |
|
|
131
|
+
|
|
132
|
+
**Rule of thumb:** only fields with a TTL-declared target property are materialized; everything else stays in the raw `agent_events` trace as reasoning context. The mapping above is the contract `reference_extractor.extract_mako_decision_event` (and the compiled bundle Beat 3.3 emits) implement.
|
|
133
|
+
|
|
134
|
+
The agent uses Vertex AI Gemini by default (`DEMO_AGENT_MODEL=gemini-2.5-flash`). Same wiring pattern as `examples/decision_lineage_demo/agent/agent.py`.
|
|
135
|
+
|
|
136
|
+
### 5. `(project, dataset)` is a parameter, not a baked-in value
|
|
137
|
+
|
|
138
|
+
`mako_artifacts.regenerate_snapshots(project=..., dataset=...)` and `run_agent.py --project X --dataset Y` both take the target as input. The checked-in snapshots use `test-project-0728-467323` / `migration_v5_demo` as defaults so reviewers can `cat` them; the notebook regenerates everything against a fresh `migration_v5_demo_<8-hex>` dataset at runtime. The generic pipeline takes `(project, dataset)` the same way — they're never config-time constants.
|
|
139
|
+
|
|
140
|
+
### 6. `events.jsonl` is captured, not synthesized
|
|
141
|
+
|
|
142
|
+
If kept, `events.jsonl` is the output of `export_events_jsonl.py` reading from `agent_events`. The notebook may use it as an offline corpus for Beat 3's revalidation tests (deterministic input the threshold gates can lock against), but the demo's primary event surface is the live `agent_events` table.
|
|
143
|
+
|
|
144
|
+
The exporter's `SELECT` projects the subset of the BQ AA plugin's schema the notebook needs (`google/adk/plugins/bigquery_agent_analytics_plugin.py::_get_events_schema`): `timestamp`, `event_type`, `agent`, `session_id`, `invocation_id`, `user_id`, `trace_id`, `span_id`, `parent_span_id`, `status`, `error_message`, `is_truncated`, plus `content` / `attributes` / `latency_ms` (all JSON). The plugin's full schema also includes `content_parts` (REPEATED RECORD for multimodal parts); the exporter omits it because the MAKO decision flow is text-only.
|
|
145
|
+
|
|
146
|
+
### 7. Table DDL carries SDK metadata columns
|
|
147
|
+
|
|
148
|
+
`make_table_ddl()` appends `session_id STRING, extracted_at TIMESTAMP` to every node and edge table because the materializer writes both on every `materialize()` call and `binding_validation.py` requires them on every bound table. Without them, the notebook's binding-validate step would fail before ontology-build. When a domain property already maps to one of those columns (MAKO's `AgentSession.sessionId → session_id`), the metadata copy is skipped to avoid a duplicate-column error. **General behavior**: applies to every config.
|
|
149
|
+
|
|
150
|
+
### 8. Per-entity PK columns
|
|
151
|
+
|
|
152
|
+
Every entity's PK column is `{entity_short}_id` (`decision_execution_id`, `candidate_id`, `agent_session_id`, …), not a bare `id`. Even after C2 wired the canonical FK→PK mapping (so the materializer can resolve self-edges where `src_<col>_id` deliberately differs from the PK column), heterogeneous edges keep the legacy `list[str]` shape — and that shape pairs binding columns positionally with the endpoint's PK columns. With bare `id` as the PK, every cross-entity edge would land `(id STRING, id STRING)` (duplicate-column error) and the heterogeneous-edge codepath would have no way to disambiguate without forcing every binding into dict-shape. Per-entity names match the convention the original V5 spec used (`YMGO_Context_Graph_V3`: `decision_id`, `adUnitId`) and the SDK's integration-test fixture. **General behavior**: applies to every config; the Simple Request Flow binding produces `request_id` / `action_id` / `outcome_id` for the same reason.
|
|
153
|
+
|
|
154
|
+
Notebook GQL queries reference `de.decision_execution_id` (not `de.id`); the Beat 4 cells carry an entity → PK column map for the same reason.
|
|
155
|
+
|
|
156
|
+
### 9. Self-edges via explicit FK→PK mapping
|
|
157
|
+
|
|
158
|
+
MAKO declares `evolvedFrom` and `supersededBy` as `DecisionExecution → DecisionExecution` self-edges. The natural composite `(decision_execution_id, decision_execution_id)` is a duplicate-column error, and bare `src_/dst_` prefixing on its own misses the materializer's property-column lookup (the FK column no longer matches any property name on the endpoint entity).
|
|
159
|
+
|
|
160
|
+
C2 (`feat/relationship-canonical-column-mapping`) wires the canonical FK→PK mapping from #179 through the materializer, the validator, and the PG DDL compiler — so the binding can declare self-edges using the dict-shape `from_columns`:
|
|
161
|
+
|
|
162
|
+
```yaml
|
|
163
|
+
- name: evolvedFrom
|
|
164
|
+
source: <project>.<dataset>.evolved_from
|
|
165
|
+
from_columns:
|
|
166
|
+
- src_decision_execution_id: id # edge_col -> endpoint PK property
|
|
167
|
+
to_columns:
|
|
168
|
+
- dst_decision_execution_id: id
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
`make_binding()` emits this shape for any `rel.from_ == rel.to`. The materializer's `_route_edge` uses the canonical `from_column_mapping` / `to_column_mapping` to translate the parsed node-id segment (keyed by endpoint *column*) into the right edge-table FK column. The PG DDL compiler resolves `SOURCE KEY (src_decision_execution_id) REFERENCES decision_execution (decision_execution_id)` correctly. **General behavior**: applies to any config — self-edges are no longer dropped.
|
|
172
|
+
|
|
173
|
+
### 10. Inheritance stripped from entities
|
|
174
|
+
|
|
175
|
+
The MAKO TTL declares `mako:Candidate rdfs:subClassOf mako:RoleTrait`; the OWL importer surfaces this as `Candidate.extends: RoleTrait`. `gm compile` v0 doesn't support inheritance and rejects the binding (`compile-validation — Entity 'Candidate' uses 'extends'`), which blocks Section 4's `--emit-concept-index` step. The pipeline drops `extends` from the post-import YAML and audit-trails the discard under the config's `annotation_prefix` (`mako_demo:stripped_inheritance` for MAKO). `RoleTrait` is a marker class in MAKO (REQ-ONT-022) with no properties beyond the `id` PK every other entity already has, so the discard has no semantic effect on the demo's 11-entity scope. **General behavior**: applies to any TTL with `extends:` clauses.
|
|
176
|
+
|
|
177
|
+
## Validation commands run (all pass)
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
# MAKO artifact pipeline runs end-to-end and regenerates snapshots.
|
|
181
|
+
PYTHONPATH=src python examples/migration_v5/mako_artifacts.py
|
|
182
|
+
# → {"binding_entities": 11, "binding_relationships": 14,
|
|
183
|
+
# "ontology_entities": 18}
|
|
184
|
+
|
|
185
|
+
# Generic pipeline works against the Simple Request Flow smoke fixture.
|
|
186
|
+
PYTHONPATH=src pytest tests/test_migration_v5_ontology_artifacts.py
|
|
187
|
+
# → 10 passed (MAKO snapshot regression + pluggability assertions
|
|
188
|
+
# + owl:hasKey regression coverage)
|
|
189
|
+
|
|
190
|
+
# Generated MAKO ontology validates clean.
|
|
191
|
+
python -m bigquery_ontology.cli validate examples/migration_v5/ontology.yaml
|
|
192
|
+
|
|
193
|
+
# Generated MAKO binding validates against the generated ontology.
|
|
194
|
+
python -m bigquery_ontology.cli validate examples/migration_v5/binding.yaml \
|
|
195
|
+
--ontology examples/migration_v5/ontology.yaml
|
|
196
|
+
|
|
197
|
+
# Property graph + concept index DDL compiles clean.
|
|
198
|
+
python -m bigquery_ontology.cli compile \
|
|
199
|
+
--emit-concept-index \
|
|
200
|
+
--concept-index-table 'test-project-0728-467323.migration_v5_demo.mako_concept_index' \
|
|
201
|
+
--ontology examples/migration_v5/ontology.yaml \
|
|
202
|
+
examples/migration_v5/binding.yaml
|
|
203
|
+
|
|
204
|
+
# Demo agent + plugin import cleanly.
|
|
205
|
+
PYTHONPATH=src:examples/migration_v5 python -c "
|
|
206
|
+
import mako_demo_agent
|
|
207
|
+
print(type(mako_demo_agent.root_agent).__name__,
|
|
208
|
+
len(mako_demo_agent.root_agent.tools),
|
|
209
|
+
type(mako_demo_agent.bq_logging_plugin).__name__)"
|
|
210
|
+
# → LlmAgent 9 BigQueryAgentAnalyticsPlugin
|
|
211
|
+
|
|
212
|
+
# Driver --help works without live BQ / Vertex.
|
|
213
|
+
PYTHONPATH=src python examples/migration_v5/run_agent.py --help
|
|
214
|
+
|
|
215
|
+
# Exporter --help + identifier validation.
|
|
216
|
+
PYTHONPATH=src python examples/migration_v5/export_events_jsonl.py --help
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
A live end-to-end notebook run (`run_agent.py --sessions 3` + Beat 1–4 cells against a fresh scratch dataset on `test-project-0728-467323`) is captured with cell outputs inline in `examples/migration_v5_demo_notebook.ipynb`. Per-beat evidence (exact numbers depend on which `--sessions N` run produced the committed snapshot):
|
|
220
|
+
|
|
221
|
+
- **Beat 1**: GQL `DecisionExecution` count `before=0, after=N>0`, `rows_materialized total>0`, `property_graph_status='skipped:user_requested'`, zero SDK-issued `CREATE OR REPLACE PROPERTY GRAPH` jobs.
|
|
222
|
+
- **Beat 2**: `binding-validate` exits 1 with a `missing_column` failure after column rename; restore + re-validate exits 0; cell 2.5 reuses cell 1.4's `property_graph_status='skipped:user_requested'` + non-zero `rows_materialized` to close the combined "validate + build" flow without re-materializing inside BigQuery's streaming-buffer window.
|
|
223
|
+
- **Beat 3.6**: synthetic `ExtractedGraph` triggers all three `FallbackScope` failures (`NODE + FIELD + EDGE`).
|
|
224
|
+
- **Beat 4**: concept index emitted + applied; `LabelSynonymResolver.resolve("DecisionExecution")` returns 1 candidate with a 12-hex `compile_id`; `GRAPH_TABLE` count over the user-authored property graph is non-zero. Hub-shape `(DecisionExecution)-[partOfSession]->(AgentSession)` returns at least one row per current session — the compiled extractor wired in Beat 3.5 synthesizes the envelope-side `AgentSession` + `partOfSession`.
|
|
225
|
+
- **Beat 5**: feedback / reward loop closes the demo arc. The agent emits four additional tool calls per decision — `record_rejection` (one per losing candidate), optional `apply_constraint` (when a candidate is filtered by policy), `record_outcome_signal` (one to three per execution; observed real-world result), `compute_reward` (one per execution; aggregates the signals into a scalar RL reward). The reference extractor at `examples/migration_v5/reference_extractor.py` covers all four, emitting `RejectionReason`, `BusinessConstraint` + `ConstraintApplication`, `OutcomeSignal`, and `RewardComputation` nodes plus the edges (`hasRejectionReason`, `appliedConstraint`, `filteredByConstraint`, `producedOutcome`, `derivedReward`) that wire them back into the Beat 1–4 hub. **Live notebook smoke passed**: a single coherent end-to-end run against a fresh `migration_v5_demo_0a300070` scratch dataset on `test-project-0728-467323` with three MAKO agent sessions, captured in `examples/migration_v5_demo_notebook.ipynb` — all 29 code cells executed with monotonic execution counts 1–29 and zero error outputs. Beat 1's build materializes `rows_materialized total=89` across 18 tables (Beats 1–4 hub + Beat 5 entities + edges); Beat 5's cells extract 125 nodes / 46 edges and confirm 6 `OutcomeSignal` + 3 `RewardComputation` + 8 `RejectionReason` rows landed in BigQuery alongside their edges. Both payoff GQL traversals project unique edge tuples via `SELECT DISTINCT` and assert their row count matches the underlying `DISTINCT` edge count: `(DecisionExecution)-[producedOutcome]->(OutcomeSignal)<-[derivedReward]-(RewardComputation)` returns 6 unique rows with real `reward_value` floats (0.80 / 1.00) from the agent's `compute_reward` payload; `(Candidate)-[hasRejectionReason]->(RejectionReason)` returns 8 unique rows attributing every losing candidate to a recorded reason. The `DISTINCT` projection makes the cells robust to BigQuery's streaming-buffer DELETE rejection (which can pin Beat 1.4 + Beat 3.5's row sets within the same ~30 min window) and the assertions catch any join-cardinality regression. The binding scope grows from 6 to **11** entities; 9 to **14** relationships (the prior 9 already included the two `DecisionExecution` self-edges from C2).
|
|
226
|
+
|
|
227
|
+
## Run this every N hours in production
|
|
228
|
+
|
|
229
|
+
The notebook walks through the four guarantees once, ad hoc. Real deployments want the graph kept fresh on a cron — events arrive continuously, the materialized entity/relationship tables should follow within a chosen latency budget.
|
|
230
|
+
|
|
231
|
+
[`periodic_materialization/`](./periodic_materialization/) is the production path: a packaged Cloud Run Job + Cloud Scheduler trigger that runs `bqaa-materialize-window` every N hours against your project, using the MAKO demo's bound artifacts. The deploy script bundles the checked-in `binding.yaml` / `ontology.yaml` / `table_ddl.sql` from this directory — running it against a different `OntologyConfig` means regenerating those snapshots for your config first and pointing the deploy at the new files. The deploy script doesn't yet wire that as a CLI flag; that's a natural follow-up but out of scope for this PR.
|
|
232
|
+
|
|
233
|
+
The flow customers actually follow:
|
|
234
|
+
|
|
235
|
+
1. **Get events** — point at your existing `agent_events` table (the BQ AA plugin already writes here; if you don't have one yet, seed via `python examples/migration_v5/run_agent.py --sessions 3` against a scratch dataset to populate it with MAKO traces).
|
|
236
|
+
2. **Local dry-run** — `python periodic_materialization/run_job.py` with env vars. Same code path as the deployed job, no Cloud Run required. Verifies your IAM / dataset setup before paying for a deploy.
|
|
237
|
+
3. **Deploy** — one command:
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
./examples/migration_v5/periodic_materialization/deploy_cloud_run_job.sh \
|
|
241
|
+
--project your-project --region us-central1 \
|
|
242
|
+
--events-dataset your_events_dataset \
|
|
243
|
+
--graph-dataset your_graph_dataset \
|
|
244
|
+
--schedule "0 */6 * * *" --smoke
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
Deploys the Cloud Run Job, creates the runtime service account with narrow IAM (events-READ, graph-WRITE), wires the Cloud Scheduler trigger, and runs `--smoke` to verify in one shot.
|
|
248
|
+
|
|
249
|
+
4. **Verify** — Cloud Logging shows the JSON report on every run (`jsonPayload.ok`, `sessions_materialized`, `rows_materialized`, per-table `table_statuses`). The state table at `<graph_dataset>._bqaa_materialization_state` is a queryable audit log.
|
|
250
|
+
5. **Alert** — Cloud Monitoring on `severity=ERROR` OR `jsonPayload.ok=false`. The `jsonPayload.failures[].error_code` distinguishes `empty_extraction` (AI/IAM) from `materialization_failed` (schema/write-perm).
|
|
251
|
+
|
|
252
|
+
See **[`periodic_materialization/README.md`](./periodic_materialization/README.md)** for the full customer playbook: required APIs, IAM matrix, recommended schedules per latency target, Cloud Monitoring alert queries, state-table SQL, troubleshooting, and live-deployment evidence captured against the canonical test project.
|
|
253
|
+
|
|
254
|
+
## Related
|
|
255
|
+
|
|
256
|
+
- [#107 storyboard](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/issues/107) — per-cell plan the notebook implements.
|
|
257
|
+
- [#107 MAKO requirement](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/issues/107#issuecomment-4435535476) — "test with the real ontology" comment.
|
|
258
|
+
- [Round-2 reshape clarification](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK/pull/155#issuecomment-4437670647) — pinned the "TTL + runnable agent" contract.
|
|
259
|
+
- [`examples/decision_lineage_demo/`](../decision_lineage_demo/) — reference pattern for ADK agent + BQ AA plugin wiring.
|
|
260
|
+
- [Rollout guide](../../docs/extractor_compilation_rollout_guide.md) — Phase C pipeline reference for Beat 3 cells.
|
|
261
|
+
- [Ontology runtime reader](../../docs/ontology_runtime_reader.md) — #58 reader API used in Beat 4.
|