Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions integration_tests/models/agent_minimal.sql
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
{{
config(
materialized = 'cortex_agent',
comment = 'Minimal integration-test agent',
profile = {'display_name': 'Minimal Agent', 'color': 'gray'}
meta = {
'comment': 'Minimal integration-test agent',
'profile': {'display_name': 'Minimal Agent', 'color': 'gray'}
}
)
}}
models:
Expand Down
2 changes: 1 addition & 1 deletion integration_tests/models/agent_raw_ddl.sql
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{{ config(materialized='cortex_agent', raw_ddl=true) }}
{{ config(materialized='cortex_agent', meta={'raw_ddl': true}) }}
comment = 'Raw-DDL pass-through integration-test agent'
profile = '{"display_name": "Raw DDL Agent", "color": "green"}'
from specification
Expand Down
8 changes: 5 additions & 3 deletions integration_tests/models/agent_versioned.sql
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
{{
config(
materialized = 'cortex_agent',
versioning = true,
set_default = true,
comment = 'Versioned integration-test agent'
meta = {
'versioning': true,
'set_default': true,
'comment': 'Versioned integration-test agent'
}
)
}}
models:
Expand Down
2 changes: 1 addition & 1 deletion integration_tests/models/agent_with_budget_shorthand.sql
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{{
config(
materialized = 'cortex_agent',
budget = 30
meta = {'budget': 30}
)
}}
instructions:
Expand Down
2 changes: 1 addition & 1 deletion integration_tests/models/agent_with_mcp_server.sql
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{{
config(
materialized = 'cortex_agent',
comment = 'Agent with an MCP server wired via ref() for DAG lineage'
meta = {'comment': 'Agent with an MCP server wired via ref() for DAG lineage'}
)
}}
models:
Expand Down
6 changes: 4 additions & 2 deletions integration_tests/models/agent_with_model_and_budget.sql
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
{{
config(
materialized = 'cortex_agent',
model = 'claude-opus-4',
budget = { 'seconds': 30, 'tokens': 16000 }
meta = {
'model': 'claude-opus-4',
'budget': {'seconds': 30, 'tokens': 16000}
}
)
}}
instructions:
Expand Down
6 changes: 4 additions & 2 deletions integration_tests/models/agent_with_search.sql
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
{{
config(
materialized = 'cortex_agent',
comment = 'Agent with a Cortex Search tool (compile-only: no live search service in test env)',
profile = {'display_name': 'Search Agent', 'color': 'teal'}
meta = {
'comment': 'Agent with a Cortex Search tool (compile-only: no live search service in test env)',
'profile': {'display_name': 'Search Agent', 'color': 'teal'}
}
)
}}
models:
Expand Down
12 changes: 7 additions & 5 deletions integration_tests/models/agent_with_semantic_view.sql
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
{{
config(
materialized = 'cortex_agent',
comment = 'Agent wired to a dbt-managed semantic view',
profile = {
'display_name': 'Orders Analyst',
'avatar': 'orders-icon.png',
'color': 'blue'
meta = {
'comment': 'Agent wired to a dbt-managed semantic view',
'profile': {
'display_name': 'Orders Analyst',
'avatar': 'orders-icon.png',
'color': 'blue'
}
}
)
}}
Expand Down
6 changes: 4 additions & 2 deletions integration_tests/models/agent_with_skill.sql
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
{{
config(
materialized = 'cortex_agent',
comment = 'Agent with a skill (compile-only: no live stage in test env)',
profile = {'display_name': 'Skill Agent', 'color': 'purple'}
meta = {
'comment': 'Agent with a skill (compile-only: no live stage in test env)',
'profile': {'display_name': 'Skill Agent', 'color': 'purple'}
}
)
}}
models:
Expand Down
8 changes: 5 additions & 3 deletions integration_tests/models/agent_with_web_search.sql
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
{{
config(
materialized = 'cortex_agent',
comment = 'Agent with web search enabled (integration test)',
web_search_tool = true
materialized = 'cortex_agent',
meta = {
'comment': 'Agent with web search enabled (integration test)',
'web_search_tool': true
}
)
}}
models:
Expand Down
10 changes: 6 additions & 4 deletions integration_tests/models/atlassian_mcp_server.sql
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
{{
config(
materialized = 'cortex_mcp_server',
display_name = 'Atlassian (Jira & Confluence)',
url = 'https://mcp.atlassian.com/v1/mcp',
api_integration = 'jira_mcp_api_integration'
materialized = 'cortex_mcp_server',
meta = {
'display_name': 'Atlassian (Jira & Confluence)',
'url': 'https://mcp.atlassian.com/v1/mcp',
'api_integration': 'jira_mcp_api_integration'
}
)
}}
2 changes: 1 addition & 1 deletion integration_tests/models/forecaster_skill.sql
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{{
config(
materialized = 'cortex_skill',
stage = var('skill_stage', '@my_db.my_schema.skill_stage')
meta = {'stage': var('skill_stage', '@my_db.my_schema.skill_stage')}
)
}}
9 changes: 6 additions & 3 deletions macros/materializations/cortex_agent.sql
Original file line number Diff line number Diff line change
Expand Up @@ -53,12 +53,15 @@
identifier=identifier, schema=schema, database=database,
type='view') -%}

{%- set versioning = config.get('versioning', default=false) -%}
{%- set raw_ddl = config.get('raw_ddl', default=false) -%}
{%- set _m = config.meta.get('versioning') -%}
{%- set versioning = _m if _m is not none else config.get('versioning', default=false) -%}
{%- set _m = config.meta.get('raw_ddl') -%}
{%- set raw_ddl = _m if _m is not none else config.get('raw_ddl', default=false) -%}

{%- if versioning and not raw_ddl -%}

{%- set version_name = config.get('version_name', default=none) -%}
{%- set _m = config.meta.get('version_name') -%}
{%- set version_name = _m if _m is not none else config.get('version_name', default=none) -%}
{%- if version_name is none -%}
{%- set version_name = dbt_cortex_agent._cortex_agent_auto_version_name() -%}
{%- endif -%}
Expand Down
54 changes: 35 additions & 19 deletions macros/relations/cortex_agent/create.sql
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@
identifier=identifier, schema=schema, database=database,
type='view') -%}

{%- set versioning = config.get('versioning', default=false) -%}
{%- set raw_ddl = config.get('raw_ddl', default=false) -%}
{%- set _m = config.meta.get('versioning') -%}
{%- set versioning = _m if _m is not none else config.get('versioning', default=false) -%}
{%- set _m = config.meta.get('raw_ddl') -%}
{%- set raw_ddl = _m if _m is not none else config.get('raw_ddl', default=false) -%}

{{ run_hooks(pre_hooks) }}

Expand All @@ -33,11 +35,13 @@

{%- else -%}

{%- set version_name = config.get('version_name', default=none) -%}
{%- set _m = config.meta.get('version_name') -%}
{%- set version_name = _m if _m is not none else config.get('version_name', default=none) -%}
{%- if version_name is none -%}
{%- set version_name = dbt_cortex_agent._cortex_agent_auto_version_name() -%}
{%- endif -%}
{%- set set_default = config.get('set_default', default=true) -%}
{%- set _m = config.meta.get('set_default') -%}
{%- set set_default = _m if _m is not none else config.get('set_default', default=true) -%}
{%- set agent_exists = dbt_cortex_agent._cortex_agent_exists(target_relation) -%}

{%- if not agent_exists -%}
Expand Down Expand Up @@ -110,11 +114,24 @@
-- Returns: a valid DDL statement that creates the agent.
-#}

{%- set raw_ddl = config.get('raw_ddl', default=false) -%}
{%- set _m = config.meta.get('raw_ddl') -%}
{%- set raw_ddl = _m if _m is not none else config.get('raw_ddl', default=false) -%}
{%- set _m = config.meta.get('comment') -%}
{%- set comment = _m if _m is not none else config.get('comment', default=none) -%}
{%- set _m = config.meta.get('profile') -%}
{%- set profile = _m if _m is not none else config.get('profile', default=none) -%}
{%- set _m = config.meta.get('web_search_tool') -%}
{%- set web_search_tool = _m if _m is not none else config.get('web_search_tool', default=false) -%}
{%- set _m = config.meta.get('model') -%}
{%- set model = _m if _m is not none else config.get('model', default=none) -%}
{%- set _m = config.meta.get('budget') -%}
{%- set budget = _m if _m is not none else config.get('budget', default=none) -%}
{%- set _m = config.meta.get('mcp_servers') -%}
{%- set mcp_servers = _m if _m is not none else config.get('mcp_servers', default=[]) -%}

{%- if raw_ddl -%}

{%- if config.get('web_search_tool', default=false) or config.get('comment', default=none) is not none or config.get('profile', default=none) is not none or config.get('model', default=none) is not none or config.get('budget', default=none) is not none or config.get('mcp_servers', default=[]) | length > 0 -%}
{%- if web_search_tool or comment is not none or profile is not none or model is not none or budget is not none or mcp_servers | length > 0 -%}
{{ exceptions.warn("cortex_agent: web_search_tool, comment, profile, model, budget, and mcp_servers configs are ignored when raw_ddl=true. Add these directly to your DDL body.") }}
{%- endif -%}

Expand All @@ -123,13 +140,6 @@

{%- else -%}

{%- set comment = config.get('comment', default=none) -%}
{%- set profile = config.get('profile', default=none) -%}
{%- set web_search_tool = config.get('web_search_tool', default=false) -%}
{%- set model = config.get('model', default=none) -%}
{%- set budget = config.get('budget', default=none) -%}
{%- set mcp_servers = config.get('mcp_servers', default=[]) -%}

{%- if model is not none and '\nmodels:' in ('\n' ~ sql) -%}
{{ exceptions.warn("cortex_agent: 'model' config is set but the spec body also appears to contain a top-level 'models:' key. The config-injected value will be ignored by most YAML parsers. Remove 'models:' from the spec body or unset the 'model' config.") }}
{%- endif -%}
Expand Down Expand Up @@ -187,10 +197,14 @@ $${{ '\n' }}{{ dbt_cortex_agent.cortex_agent_render_model_and_budget(model, budg
-- Returns: DDL string
-#}

{%- set comment = config.get('comment', default=none) -%}
{%- set profile = config.get('profile', default=none) -%}
{%- set web_search_tool = config.get('web_search_tool', default=false) -%}
{%- set mcp_servers = config.get('mcp_servers', default=[]) -%}
{%- set _m = config.meta.get('comment') -%}
{%- set comment = _m if _m is not none else config.get('comment', default=none) -%}
{%- set _m = config.meta.get('profile') -%}
{%- set profile = _m if _m is not none else config.get('profile', default=none) -%}
{%- set _m = config.meta.get('web_search_tool') -%}
{%- set web_search_tool = _m if _m is not none else config.get('web_search_tool', default=false) -%}
{%- set _m = config.meta.get('mcp_servers') -%}
{%- set mcp_servers = _m if _m is not none else config.get('mcp_servers', default=[]) -%}

{%- if web_search_tool -%}
{%- set sql = sql ~ '\ntools:\n - tool_spec:\n type: "web_search"\n name: "web_search"\n' -%}
Expand Down Expand Up @@ -240,8 +254,10 @@ $${{ '\n' }}{{ sql }}{{ '\n' }}$$
-- Returns: DDL string
-#}

{%- set web_search_tool = config.get('web_search_tool', default=false) -%}
{%- set mcp_servers = config.get('mcp_servers', default=[]) -%}
{%- set _m = config.meta.get('web_search_tool') -%}
{%- set web_search_tool = _m if _m is not none else config.get('web_search_tool', default=false) -%}
{%- set _m = config.meta.get('mcp_servers') -%}
{%- set mcp_servers = _m if _m is not none else config.get('mcp_servers', default=[]) -%}

{%- if web_search_tool -%}
{%- set sql = sql ~ '\ntools:\n - tool_spec:\n type: "web_search"\n name: "web_search"\n' -%}
Expand Down
12 changes: 8 additions & 4 deletions macros/relations/cortex_mcp_server/create.sql
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,12 @@
--
-- Returns: a valid DDL statement that creates the external MCP server.
-#}
{%- set display_name = config.require('display_name') -%}
{%- set url = config.require('url') -%}
{%- set api_integration = config.require('api_integration') -%}
{%- set _m = config.meta.get('display_name') -%}
{%- set display_name = _m if _m is not none else config.require('display_name') -%}
{%- set _m = config.meta.get('url') -%}
{%- set url = _m if _m is not none else config.require('url') -%}
{%- set _m = config.meta.get('api_integration') -%}
{%- set api_integration = _m if _m is not none else config.require('api_integration') -%}

create or replace external mcp server {{ relation }}
with display_name = {{ dbt_cortex_agent.cortex_agent_quote_string(display_name) }}
Expand All @@ -43,7 +46,8 @@
-- Returns: {'relations': [target_relation]}
-#}
{%- set identifier = model['alias'] -%}
{%- set api_integration = config.require('api_integration') -%}
{%- set _m = config.meta.get('api_integration') -%}
{%- set api_integration = _m if _m is not none else config.require('api_integration') -%}

{%- if execute and not dbt_cortex_agent._mcp_api_integration_exists(api_integration) -%}
{{ exceptions.raise_compiler_error(
Expand Down
5 changes: 3 additions & 2 deletions macros/relations/cortex_skill/create.sql
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@
-- Returns: {'relations': [target_relation]}
-#}
{%- set identifier = model['alias'] -%}
{%- set stage = config.require('stage') -%}
{%- set _m = config.meta.get('stage') -%}
{%- set stage = _m if _m is not none else config.require('stage') -%}
{%- set skill_path = stage ~ '/skills/' ~ identifier -%}
{%- set stage_identifier = stage[1:] -%}
{%- set skill_dir = dbt_cortex_agent.cortex_skill__resolve_skill_dir() -%}
Expand Down Expand Up @@ -132,7 +133,7 @@
{%- set ns = namespace(stage='') -%}
{%- for node in graph.nodes.values() -%}
{%- if node.resource_type == 'model' and node.name == model_name -%}
{%- set ns.stage = node.config.get('stage', '') -%}
{%- set ns.stage = node.config.get('meta', {}).get('stage') or node.config.get('stage', '') -%}
{%- endif -%}
{%- endfor -%}
{%- if ns.stage == '' -%}
Expand Down
Loading