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.
Files changed (431) hide show
  1. bigquery_agent_analytics-0.3.2/.github/workflows/producers-ci.yml +100 -0
  2. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/.gitignore +9 -0
  3. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/CHANGELOG.md +111 -0
  4. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/PKG-INFO +1 -1
  5. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/autoformat.sh +2 -2
  6. bigquery_agent_analytics-0.3.2/examples/migration_v5/README.md +261 -0
  7. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/binding.yaml +84 -0
  8. bigquery_agent_analytics-0.3.2/examples/migration_v5/example_ontologies/__init__.py +25 -0
  9. bigquery_agent_analytics-0.3.2/examples/migration_v5/example_ontologies/simple_request_flow.ttl +125 -0
  10. bigquery_agent_analytics-0.3.2/examples/migration_v5/example_ontologies/simple_request_flow_config.py +45 -0
  11. bigquery_agent_analytics-0.3.2/examples/migration_v5/mako_artifacts.py +229 -0
  12. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/mako_demo_agent.py +172 -3
  13. bigquery_agent_analytics-0.3.2/examples/migration_v5/ontology_artifacts.py +770 -0
  14. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/periodic_materialization/README.md +194 -78
  15. bigquery_agent_analytics-0.3.2/examples/migration_v5/periodic_materialization/build_image.sh +189 -0
  16. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/periodic_materialization/deploy_cloud_run_job.sh +348 -50
  17. bigquery_agent_analytics-0.3.2/examples/migration_v5/periodic_materialization/requirements.txt +36 -0
  18. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/periodic_materialization/run_job.py +119 -0
  19. bigquery_agent_analytics-0.3.2/examples/migration_v5/periodic_materialization/terraform/.gitignore +9 -0
  20. bigquery_agent_analytics-0.3.2/examples/migration_v5/periodic_materialization/terraform/README.md +185 -0
  21. bigquery_agent_analytics-0.3.2/examples/migration_v5/periodic_materialization/terraform/main.tf +333 -0
  22. bigquery_agent_analytics-0.3.2/examples/migration_v5/periodic_materialization/terraform/outputs.tf +38 -0
  23. bigquery_agent_analytics-0.3.2/examples/migration_v5/periodic_materialization/terraform/terraform.tfvars.example +27 -0
  24. bigquery_agent_analytics-0.3.2/examples/migration_v5/periodic_materialization/terraform/variables.tf +133 -0
  25. bigquery_agent_analytics-0.3.2/examples/migration_v5/periodic_materialization/terraform/versions.tf +31 -0
  26. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/property_graph.sql +51 -1
  27. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/reference_extractor.py +293 -11
  28. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/table_ddl.sql +12 -0
  29. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5_demo_notebook.ipynb +840 -255
  30. bigquery_agent_analytics-0.3.2/producers/README.md +37 -0
  31. bigquery_agent_analytics-0.3.2/producers/pyproject.toml +88 -0
  32. bigquery_agent_analytics-0.3.2/producers/src/bigquery_agent_analytics_tracing/__init__.py +40 -0
  33. bigquery_agent_analytics-0.3.2/producers/src/bigquery_agent_analytics_tracing/_utils.py +168 -0
  34. bigquery_agent_analytics-0.3.2/producers/src/bigquery_agent_analytics_tracing/_writer_identity.py +52 -0
  35. bigquery_agent_analytics-0.3.2/producers/src/bigquery_agent_analytics_tracing/config.py +149 -0
  36. bigquery_agent_analytics-0.3.2/producers/src/bigquery_agent_analytics_tracing/drain.py +668 -0
  37. bigquery_agent_analytics-0.3.2/producers/src/bigquery_agent_analytics_tracing/logger.py +459 -0
  38. bigquery_agent_analytics-0.3.2/producers/src/bigquery_agent_analytics_tracing/schema.py +73 -0
  39. bigquery_agent_analytics-0.3.2/producers/tests/__init__.py +13 -0
  40. bigquery_agent_analytics-0.3.2/producers/tests/test_config.py +158 -0
  41. bigquery_agent_analytics-0.3.2/producers/tests/test_drain.py +309 -0
  42. bigquery_agent_analytics-0.3.2/producers/tests/test_logger_row_shape.py +290 -0
  43. bigquery_agent_analytics-0.3.2/producers/tests/test_schema.py +106 -0
  44. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/pyproject.toml +1 -1
  45. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/scripts/README.md +116 -2
  46. bigquery_agent_analytics-0.3.2/scripts/latency_report.py +730 -0
  47. bigquery_agent_analytics-0.3.2/scripts/latency_report.sh +52 -0
  48. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/scripts/quality_report.py +389 -113
  49. bigquery_agent_analytics-0.3.2/scripts/sample_latency_report.md +169 -0
  50. bigquery_agent_analytics-0.3.2/scripts/sample_quality_report.md +138 -0
  51. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/cli.py +87 -0
  52. bigquery_agent_analytics-0.3.2/src/bigquery_agent_analytics/extracted_models.py +152 -0
  53. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/graph_validation.py +60 -21
  54. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/materialize_window.py +1042 -46
  55. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/ontology_graph.py +192 -12
  56. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/ontology_materializer.py +77 -17
  57. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/ontology_property_graph.py +55 -21
  58. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/resolved_spec.py +54 -3
  59. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/runtime_spec.py +24 -2
  60. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/structured_extraction.py +104 -9
  61. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_ontology/binding_loader.py +248 -1
  62. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_ontology/binding_models.py +91 -6
  63. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_ontology/graph_ddl_compiler.py +105 -5
  64. bigquery_agent_analytics-0.3.2/tests/test_binding_explicit_fk_mapping.py +908 -0
  65. bigquery_agent_analytics-0.3.2/tests/test_extract_graph_diagnostics_modes.py +565 -0
  66. bigquery_agent_analytics-0.3.2/tests/test_latency_report_helpers.py +304 -0
  67. bigquery_agent_analytics-0.3.2/tests/test_materialize_window.py +4602 -0
  68. bigquery_agent_analytics-0.3.2/tests/test_migration_v5_ontology_artifacts.py +345 -0
  69. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_migration_v5_reference_extractor.py +164 -0
  70. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_ontology_materializer.py +170 -0
  71. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_ontology_property_graph.py +121 -0
  72. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_quality_report_helpers.py +315 -4
  73. bigquery_agent_analytics-0.3.1/examples/migration_v5/README.md +0 -205
  74. bigquery_agent_analytics-0.3.1/examples/migration_v5/mako_artifacts.py +0 -751
  75. bigquery_agent_analytics-0.3.1/examples/migration_v5/periodic_materialization/requirements.txt +0 -29
  76. bigquery_agent_analytics-0.3.1/scripts/sample_report.md +0 -164
  77. bigquery_agent_analytics-0.3.1/src/bigquery_agent_analytics/extracted_models.py +0 -57
  78. bigquery_agent_analytics-0.3.1/tests/test_materialize_window.py +0 -2203
  79. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/.github/workflows/ci.yml +0 -0
  80. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/.github/workflows/release.yml +0 -0
  81. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/CODE_OF_CONDUCT.md +0 -0
  82. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/CONTRIBUTING.md +0 -0
  83. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/LICENSE +0 -0
  84. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/README.md +0 -0
  85. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/SDK.md +0 -0
  86. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/SECURITY.md +0 -0
  87. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/dashboard/README.md +0 -0
  88. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/dashboard/agent_analytics_dashboard.ipynb +0 -0
  89. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/dashboard/app.py +0 -0
  90. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/dashboard/requirements.txt +0 -0
  91. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/README.md +0 -0
  92. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/continuous_queries/README.md +0 -0
  93. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/continuous_queries/bigtable_dashboard.sql +0 -0
  94. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/continuous_queries/pubsub_alerting.sql +0 -0
  95. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/continuous_queries/realtime_error_analysis.sql +0 -0
  96. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/continuous_queries/session_scoring.sql +0 -0
  97. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/continuous_queries/setup_reservation.md +0 -0
  98. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/python_udf/README.md +0 -0
  99. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/python_udf/register.sql +0 -0
  100. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/remote_function/README.md +0 -0
  101. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/remote_function/deploy.sh +0 -0
  102. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/remote_function/dispatch.py +0 -0
  103. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/remote_function/main.py +0 -0
  104. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/remote_function/register.sql +0 -0
  105. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/streaming_evaluation/README.md +0 -0
  106. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/streaming_evaluation/main.py +0 -0
  107. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/streaming_evaluation/requirements.txt +0 -0
  108. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/streaming_evaluation/setup.sh +0 -0
  109. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/streaming_evaluation/trigger_query.sql +0 -0
  110. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/deploy/streaming_evaluation/worker.py +0 -0
  111. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/README.md +0 -0
  112. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/context_graph_v2_design.md +0 -0
  113. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/context_graph_v3_design.md +0 -0
  114. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/design.md +0 -0
  115. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/entity_resolution_primitives.md +0 -0
  116. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_bka_measurement.md +0 -0
  117. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_bq_bundle_mirror.md +0 -0
  118. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_bundle_loader.md +0 -0
  119. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_diagnostics.md +0 -0
  120. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_orchestrator_swap.md +0 -0
  121. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_plan_parser.md +0 -0
  122. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_plan_resolver.md +0 -0
  123. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_retry_loop.md +0 -0
  124. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_revalidate_cli.md +0 -0
  125. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_revalidation.md +0 -0
  126. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_rollout_guide.md +0 -0
  127. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_runtime_fallback.md +0 -0
  128. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_runtime_registry.md +0 -0
  129. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_runtime_target.md +0 -0
  130. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_scaffolding.md +0 -0
  131. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/extractor_compilation_template_renderer.md +0 -0
  132. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/hatteras_evaluation.md +0 -0
  133. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/implementation_plan_concept_index_runtime.md +0 -0
  134. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/implementation_plan_remote_function.md +0 -0
  135. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/learning_ontology_and_context_graph.md +0 -0
  136. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/ontology/binding-validation.md +0 -0
  137. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/ontology/binding.md +0 -0
  138. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/ontology/cli.md +0 -0
  139. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/ontology/compilation.md +0 -0
  140. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/ontology/concept-index.md +0 -0
  141. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/ontology/ontology-build.md +0 -0
  142. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/ontology/ontology.md +0 -0
  143. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/ontology/owl-import.md +0 -0
  144. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/ontology/scaffold.md +0 -0
  145. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/ontology/validation.md +0 -0
  146. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/ontology_graph_v4_design.md +0 -0
  147. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/ontology_graph_v5_design.md +0 -0
  148. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/ontology_runtime_reader.md +0 -0
  149. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/prd_unified_analytics_interface.md +0 -0
  150. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/proposal_bigquery_agent_cli.md +0 -0
  151. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/python_udf_support_design.md +0 -0
  152. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/remote_function_rationale.md +0 -0
  153. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/docs/sdk_usage_tracking.md +0 -0
  154. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/README.md +0 -0
  155. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/.gitignore +0 -0
  156. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/A2A_JOINT_LINEAGE.md +0 -0
  157. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/BQ_STUDIO_WALKTHROUGH.md +0 -0
  158. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/DATA_LINEAGE.md +0 -0
  159. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/DEMO_NARRATION.md +0 -0
  160. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/README.md +0 -0
  161. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/analyst_agent/__init__.py +0 -0
  162. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/analyst_agent/agent.py +0 -0
  163. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/analyst_agent/prompts.py +0 -0
  164. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/analyst_agent/tools.py +0 -0
  165. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/bq_studio_queries.gql.tpl +0 -0
  166. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/build_joint_graph.py +0 -0
  167. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/build_org_graphs.py +0 -0
  168. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/caller_agent/__init__.py +0 -0
  169. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/caller_agent/agent.py +0 -0
  170. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/caller_agent/prompts.py +0 -0
  171. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/caller_agent/tools.py +0 -0
  172. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/campaigns.py +0 -0
  173. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/joint_property_graph.gql.tpl +0 -0
  174. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/receiver_agent/__init__.py +0 -0
  175. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/receiver_agent/agent.py +0 -0
  176. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/receiver_agent/prompts.py +0 -0
  177. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/render_queries.sh +0 -0
  178. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/reset.sh +0 -0
  179. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/run_analyst_agent.py +0 -0
  180. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/run_caller_agent.py +0 -0
  181. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/run_e2e_demo.sh +0 -0
  182. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/run_receiver_server.py +0 -0
  183. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/setup.sh +0 -0
  184. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/a2a_joint_lineage_demo/smoke_receiver.py +0 -0
  185. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/DEMO_NARRATION.md +0 -0
  186. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/README.md +0 -0
  187. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/agent/__init__.py +0 -0
  188. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/agent/agent.py +0 -0
  189. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/agent/prompts.py +0 -0
  190. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/agent/tools.py +0 -0
  191. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/agent_improvement/__init__.py +0 -0
  192. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/agent_improvement/config.py +0 -0
  193. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/agent_improvement/config_loader.py +0 -0
  194. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/agent_improvement/eval_runner.py +0 -0
  195. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/agent_improvement/improver_agent.py +0 -0
  196. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/agent_improvement/prompt_adapter.py +0 -0
  197. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/agent_improvement/prompts.py +0 -0
  198. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/agent_improvement/tool_introspection.py +0 -0
  199. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/config.json +0 -0
  200. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/demo.png +0 -0
  201. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/eval/eval_cases.json +0 -0
  202. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/eval/generate_traffic.py +0 -0
  203. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/eval/operational_metrics.py +0 -0
  204. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/eval/run_eval.py +0 -0
  205. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/overview.png +0 -0
  206. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/reset.sh +0 -0
  207. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/run_cycle.sh +0 -0
  208. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/run_improvement.py +0 -0
  209. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/setup.sh +0 -0
  210. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/setup_vertex.py +0 -0
  211. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/agent_improvement_cycle/show_prompt.sh +0 -0
  212. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/ai_classify_side_by_side.sql +0 -0
  213. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/ai_forecast_side_by_side.sql +0 -0
  214. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/ai_ml_integration_demo.ipynb +0 -0
  215. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/ai_similarity_validation.sql +0 -0
  216. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/categorical_dashboard.sql +0 -0
  217. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/categorical_evaluation_demo.ipynb +0 -0
  218. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/ci/README.md +0 -0
  219. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/ci/evaluate_thresholds.yml +0 -0
  220. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/ci_eval_pipeline.sh +0 -0
  221. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/cli_agent_tool.py +0 -0
  222. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/context_graph_adcp_demo.ipynb +0 -0
  223. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/continuous_query_alerting.sql +0 -0
  224. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/dashboard_v2.ipynb +0 -0
  225. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/dashboard_v2_bigframes.ipynb +0 -0
  226. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/.gitignore +0 -0
  227. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/BQ_STUDIO_WALKTHROUGH.md +0 -0
  228. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/DATA_LINEAGE.md +0 -0
  229. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/DEMO_NARRATION.md +0 -0
  230. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/DEMO_QUESTIONS.md +0 -0
  231. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/README.md +0 -0
  232. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/SETUP_NEW_PROJECT.md +0 -0
  233. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/SLIDES.html +0 -0
  234. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/SLIDES.md +0 -0
  235. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/SLIDES.pptx +0 -0
  236. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/agent/__init__.py +0 -0
  237. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/agent/agent.py +0 -0
  238. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/agent/prompts.py +0 -0
  239. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/agent/tools.py +0 -0
  240. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/bq_studio_queries.gql.tpl +0 -0
  241. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/build_graph.py +0 -0
  242. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/build_rich_graph.py +0 -0
  243. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/campaigns.py +0 -0
  244. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/property_graph.gql.tpl +0 -0
  245. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/render_queries.sh +0 -0
  246. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/reset.sh +0 -0
  247. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/rich_property_graph.gql.tpl +0 -0
  248. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/run_agent.py +0 -0
  249. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/decision_lineage_demo/setup.sh +0 -0
  250. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/e2e_demo.py +0 -0
  251. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/e2e_demo_output.txt +0 -0
  252. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/e2e_notebook_demo.ipynb +0 -0
  253. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/event_semantics_views_bigframes_demo.ipynb +0 -0
  254. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/memory_service_demo.ipynb +0 -0
  255. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/.gitignore +0 -0
  256. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/export_events_jsonl.py +0 -0
  257. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/mako_core.ttl +0 -0
  258. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/ontology.yaml +0 -0
  259. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/revalidation_thresholds.json +0 -0
  260. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/migration_v5/run_agent.py +0 -0
  261. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/nba_agent_trace_analysis_notebook.ipynb +0 -0
  262. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/ontology_graph_v4_demo.ipynb +0 -0
  263. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/ontology_graph_v5_demo.ipynb +0 -0
  264. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/python_udf_eval_summary.sql +0 -0
  265. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/python_udf_evaluation.sql +0 -0
  266. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/python_udf_event_semantics.sql +0 -0
  267. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/remote_function_dashboard.sql +0 -0
  268. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/examples/ymgo_graph_spec.yaml +0 -0
  269. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/scripts/quality_report.sh +0 -0
  270. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/__init__.py +0 -0
  271. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/_deploy_runtime.py +0 -0
  272. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/_ontology_routing.py +0 -0
  273. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/_streaming_evaluation.py +0 -0
  274. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/_telemetry.py +0 -0
  275. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/ai_ml_integration.py +0 -0
  276. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/bigframes_evaluator.py +0 -0
  277. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/binding_validation.py +0 -0
  278. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/categorical_evaluator.py +0 -0
  279. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/categorical_views.py +0 -0
  280. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/client.py +0 -0
  281. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/context_graph.py +0 -0
  282. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/eval_suite.py +0 -0
  283. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/eval_validator.py +0 -0
  284. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/evaluators.py +0 -0
  285. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/event_semantics.py +0 -0
  286. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/__init__.py +0 -0
  287. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/ast_validator.py +0 -0
  288. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/bq_bundle_mirror.py +0 -0
  289. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/bundle_loader.py +0 -0
  290. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/cli_revalidate.py +0 -0
  291. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/compiler.py +0 -0
  292. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/diagnostics.py +0 -0
  293. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/fingerprint.py +0 -0
  294. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/manifest.py +0 -0
  295. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/measurement.py +0 -0
  296. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/plan_parser.py +0 -0
  297. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/plan_resolver.py +0 -0
  298. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/retry_loop.py +0 -0
  299. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/revalidation.py +0 -0
  300. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/runtime_fallback.py +0 -0
  301. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/runtime_registry.py +0 -0
  302. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/smoke_test.py +0 -0
  303. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/subprocess_runner.py +0 -0
  304. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/extractor_compilation/template_renderer.py +0 -0
  305. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/feedback.py +0 -0
  306. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/formatter.py +0 -0
  307. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/grader_pipeline.py +0 -0
  308. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/insights.py +0 -0
  309. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/memory_service.py +0 -0
  310. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/multi_trial.py +0 -0
  311. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/ontology_models.py +0 -0
  312. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/ontology_orchestrator.py +0 -0
  313. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/ontology_runtime.py +0 -0
  314. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/ontology_schema_compiler.py +0 -0
  315. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/serialization.py +0 -0
  316. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/trace.py +0 -0
  317. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/trace_evaluator.py +0 -0
  318. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/ttl_importer.py +0 -0
  319. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/udf_kernels.py +0 -0
  320. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/udf_sql_templates.py +0 -0
  321. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_agent_analytics/views.py +0 -0
  322. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_ontology/__init__.py +0 -0
  323. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_ontology/_fingerprint.py +0 -0
  324. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_ontology/cli.py +0 -0
  325. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_ontology/concept_index.py +0 -0
  326. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_ontology/docs/user_manual.md +0 -0
  327. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_ontology/graph_ddl_models.py +0 -0
  328. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_ontology/ontology_loader.py +0 -0
  329. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_ontology/ontology_models.py +0 -0
  330. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_ontology/owl_importer.py +0 -0
  331. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/src/bigquery_ontology/scaffold.py +0 -0
  332. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/__init__.py +0 -0
  333. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/bigquery_ontology/__init__.py +0 -0
  334. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/bigquery_ontology/test_binding_loader.py +0 -0
  335. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/bigquery_ontology/test_binding_models.py +0 -0
  336. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/bigquery_ontology/test_cli.py +0 -0
  337. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/bigquery_ontology/test_compile_concept_index.py +0 -0
  338. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/bigquery_ontology/test_concept_index.py +0 -0
  339. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/bigquery_ontology/test_fingerprint.py +0 -0
  340. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/bigquery_ontology/test_graph_ddl_compiler.py +0 -0
  341. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/bigquery_ontology/test_ontology_models.py +0 -0
  342. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/bigquery_ontology/test_owl_importer.py +0 -0
  343. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/bigquery_ontology/test_scaffold.py +0 -0
  344. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/bigquery_ontology/test_scaffold_cli.py +0 -0
  345. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/fixtures/lineage_sessions.json +0 -0
  346. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/fixtures/mixed_events.json +0 -0
  347. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/fixtures/mixed_owl_skos.ttl +0 -0
  348. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/fixtures/skos_taxonomy.ttl +0 -0
  349. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/fixtures/test_binding.yaml +0 -0
  350. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/fixtures/test_combined_spec.yaml +0 -0
  351. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/fixtures/test_ontology.yaml +0 -0
  352. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/fixtures/yamo_sample.ttl +0 -0
  353. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/fixtures_extractor_compilation/__init__.py +0 -0
  354. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/fixtures_extractor_compilation/bka_decision_inputs.py +0 -0
  355. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/fixtures_extractor_compilation/bka_decision_measurement_report.json +0 -0
  356. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/fixtures_extractor_compilation/bka_decision_template.py +0 -0
  357. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/fixtures_extractor_compilation/plan_bka_decision.json +0 -0
  358. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_abstract_adapter_filter.py +0 -0
  359. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_ai_generate_judge_live.py +0 -0
  360. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_ai_ml_integration.py +0 -0
  361. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_ai_ml_integration_labels.py +0 -0
  362. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_bigframes_evaluator.py +0 -0
  363. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_binding_validation.py +0 -0
  364. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_bridge_hardening.py +0 -0
  365. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_categorical_evaluator.py +0 -0
  366. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_categorical_views.py +0 -0
  367. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_cli.py +0 -0
  368. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_client_labels.py +0 -0
  369. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_context_graph.py +0 -0
  370. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_context_graph_labels.py +0 -0
  371. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_dual_loader.py +0 -0
  372. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_eval_suite.py +0 -0
  373. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_eval_validator.py +0 -0
  374. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_event_semantics.py +0 -0
  375. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extracted_models.py +0 -0
  376. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation.py +0 -0
  377. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_bka_compile_live.py +0 -0
  378. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_bq_bundle_mirror.py +0 -0
  379. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_bq_bundle_mirror_live.py +0 -0
  380. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_bundle_loader.py +0 -0
  381. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_cli_revalidate.py +0 -0
  382. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_cli_revalidate_bq_live.py +0 -0
  383. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_diagnostics.py +0 -0
  384. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_measurement.py +0 -0
  385. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_plan_parser.py +0 -0
  386. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_plan_resolver.py +0 -0
  387. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_retry_loop.py +0 -0
  388. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_revalidation.py +0 -0
  389. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_runtime_fallback.py +0 -0
  390. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_runtime_registry.py +0 -0
  391. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_extractor_compilation_template.py +0 -0
  392. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_feedback_labels.py +0 -0
  393. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_formatter.py +0 -0
  394. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_grader_pipeline.py +0 -0
  395. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_graph_validation.py +0 -0
  396. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_integration_ontology_binding.py +0 -0
  397. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_materialize_window_live.py +0 -0
  398. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_memory_service.py +0 -0
  399. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_memory_service_labels.py +0 -0
  400. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_multi_trial.py +0 -0
  401. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_ontology_graph.py +0 -0
  402. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_ontology_graph_from_bundles_root.py +0 -0
  403. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_ontology_labels.py +0 -0
  404. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_ontology_models.py +0 -0
  405. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_ontology_orchestrator.py +0 -0
  406. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_ontology_runtime.py +0 -0
  407. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_ontology_runtime_live.py +0 -0
  408. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_ontology_schema_compiler.py +0 -0
  409. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_owl_import_bridge.py +0 -0
  410. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_pr16_fixes.py +0 -0
  411. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_pr17_fixes.py +0 -0
  412. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_pr19_fixes.py +0 -0
  413. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_remote_function.py +0 -0
  414. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_resolved_spec.py +0 -0
  415. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_runtime_factory.py +0 -0
  416. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_runtime_spec.py +0 -0
  417. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_sdk_client.py +0 -0
  418. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_sdk_evaluators.py +0 -0
  419. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_sdk_feedback.py +0 -0
  420. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_sdk_insights.py +0 -0
  421. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_sdk_trace.py +0 -0
  422. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_serialization.py +0 -0
  423. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_streaming_evaluation.py +0 -0
  424. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_surface_tags.py +0 -0
  425. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_telemetry.py +0 -0
  426. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_trace_evaluator.py +0 -0
  427. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_trace_filter_factory.py +0 -0
  428. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_udf_kernels.py +0 -0
  429. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_udf_sql_generation.py +0 -0
  430. {bigquery_agent_analytics-0.3.1 → bigquery_agent_analytics-0.3.2}/tests/test_v5_golden.py +0 -0
  431. {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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bigquery-agent-analytics
3
- Version: 0.3.1
3
+ Version: 0.3.2
4
4
  Summary: SDK for analyzing and evaluating agent traces stored in BigQuery.
5
5
  Author: Google LLC
6
6
  License-Expression: Apache-2.0
@@ -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.