@duckcodeailabs/dql-agent 1.9.4 → 1.9.5
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.
- package/dist/answer-loop.d.ts.map +1 -1
- package/dist/answer-loop.js +195 -22
- package/dist/answer-loop.js.map +1 -1
- package/dist/semantic-bridge/member-select.d.ts +6 -0
- package/dist/semantic-bridge/member-select.d.ts.map +1 -1
- package/dist/semantic-bridge/member-select.js +4 -0
- package/dist/semantic-bridge/member-select.js.map +1 -1
- package/dist/semantic-bridge/query-shape.d.ts +26 -0
- package/dist/semantic-bridge/query-shape.d.ts.map +1 -0
- package/dist/semantic-bridge/query-shape.js +48 -0
- package/dist/semantic-bridge/query-shape.js.map +1 -0
- package/package.json +4 -4
|
@@ -17,6 +17,12 @@ export declare function selectSemanticMembersViaLlm(input: {
|
|
|
17
17
|
question: string;
|
|
18
18
|
signal?: AbortSignal;
|
|
19
19
|
reasoningEffort?: ReasoningEffort;
|
|
20
|
+
/**
|
|
21
|
+
* Dimensions the selection MUST include as group-bys (a retry after a
|
|
22
|
+
* breakdown was dropped). The instruction is added to the prompt; the model
|
|
23
|
+
* still picks only from the compatible cards.
|
|
24
|
+
*/
|
|
25
|
+
requireDimensions?: string[];
|
|
20
26
|
}): Promise<SemanticMemberSelection | undefined>;
|
|
21
27
|
/** Extract the first balanced JSON object from model text (tolerant of fences/prose). */
|
|
22
28
|
export declare function extractFirstJsonObject(raw: string): unknown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"member-select.d.ts","sourceRoot":"","sources":["../../src/semantic-bridge/member-select.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAgB,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAwB,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAElF,wBAAsB,2BAA2B,CAAC,KAAK,EAAE;IACvD,QAAQ,EAAE,aAAa,CAAC;IACxB,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,eAAe,CAAC,EAAE,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"member-select.d.ts","sourceRoot":"","sources":["../../src/semantic-bridge/member-select.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAgB,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAwB,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAElF,wBAAsB,2BAA2B,CAAC,KAAK,EAAE;IACvD,QAAQ,EAAE,aAAa,CAAC;IACxB,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B,GAAG,OAAO,CAAC,uBAAuB,GAAG,SAAS,CAAC,CAmH/C;AAwCD,yFAAyF;AACzF,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CA6B3D"}
|
|
@@ -49,6 +49,7 @@ export async function selectSemanticMembersViaLlm(input) {
|
|
|
49
49
|
return `- ${dimension.name}${grains.length > 0 ? ` [grains: ${grains.join(', ')}]` : ''}`;
|
|
50
50
|
})] : []),
|
|
51
51
|
].join('\n');
|
|
52
|
+
const requiredDims = (input.requireDimensions ?? []).filter((name) => keepDimension(name));
|
|
52
53
|
const messages = [
|
|
53
54
|
{
|
|
54
55
|
role: 'system',
|
|
@@ -57,6 +58,9 @@ export async function selectSemanticMembersViaLlm(input) {
|
|
|
57
58
|
'Respond with a SINGLE json object, no prose, no code fences other than one ```json block:',
|
|
58
59
|
'{"metrics": string[], "dimensions"?: string[], "timeDimension"?: {"name": string, "granularity": "day"|"week"|"month"|"quarter"|"year"}, "filters"?: [{"dimension": string, "operator": "equals"|"in", "values": string[]}], "limit"?: number}',
|
|
59
60
|
'If no listed metric can answer the question, return {"metrics": []}.',
|
|
61
|
+
...(requiredDims.length > 0
|
|
62
|
+
? [`You MUST include these dimensions as group-bys (they are the requested breakdown): ${requiredDims.join(', ')}.`]
|
|
63
|
+
: []),
|
|
60
64
|
].join('\n'),
|
|
61
65
|
},
|
|
62
66
|
{ role: 'user', content: `Question: ${input.question}\n\nAvailable governed members:\n${catalog}\n\nReturn the member selection as JSON.` },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"member-select.js","sourceRoot":"","sources":["../../src/semantic-bridge/member-select.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,
|
|
1
|
+
{"version":3,"file":"member-select.js","sourceRoot":"","sources":["../../src/semantic-bridge/member-select.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Classify a governed-metric question by whether the SEMANTIC COMPILER can build
|
|
3
|
+
* it — so the answer loop can route it correctly and, crucially, decide whether
|
|
4
|
+
* a compose failure is a MODELING gap (refuse with an actionable reason) or a
|
|
5
|
+
* genuine compiler gap (free SQL is the legitimate path).
|
|
6
|
+
*
|
|
7
|
+
* The native compiler builds — with columns always qualified across joins, so no
|
|
8
|
+
* ambiguous columns and no wrong joins by construction:
|
|
9
|
+
* {one+ simple/additive metrics} × {categorical dims} × {one time dim + grain}
|
|
10
|
+
* × {AND-combined pre-aggregation filters} × {global order/limit}, cross-fact
|
|
11
|
+
* via aggregate-islands, provided the members are join-graph-connected.
|
|
12
|
+
* Derived/ratio/cumulative/non-additive metrics must go to the runtime compiler
|
|
13
|
+
* (MetricFlow / dbt Cloud). A handful of shapes neither can express — those are
|
|
14
|
+
* the only ones that legitimately need free SQL.
|
|
15
|
+
*/
|
|
16
|
+
import type { AnalysisQuestionPlan } from '../metadata/analysis-planner.js';
|
|
17
|
+
import type { SemanticLayer } from '@duckcodeailabs/dql-core';
|
|
18
|
+
export type GovernedQueryShape = 'compiler_expressible' | 'runtime_required' | 'genuine_gap';
|
|
19
|
+
/**
|
|
20
|
+
* @param questionPlan the parsed question plan (shape, terms).
|
|
21
|
+
* @param metricName the governed metric that matched (its runtime need is
|
|
22
|
+
* read from the semantic layer, not guessed).
|
|
23
|
+
* @param semanticLayer the catalog (for `canComposeMetric`).
|
|
24
|
+
*/
|
|
25
|
+
export declare function classifyGovernedQueryShape(questionPlan: AnalysisQuestionPlan, metricName: string | undefined, semanticLayer: Pick<SemanticLayer, 'canComposeMetric'>): GovernedQueryShape;
|
|
26
|
+
//# sourceMappingURL=query-shape.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-shape.d.ts","sourceRoot":"","sources":["../../src/semantic-bridge/query-shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,MAAM,MAAM,kBAAkB,GAAG,sBAAsB,GAAG,kBAAkB,GAAG,aAAa,CAAC;AA6B7F;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,oBAAoB,EAClC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,kBAAkB,CAAC,GACrD,kBAAkB,CAiBpB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shapes that neither the native compiler nor the runtime can express
|
|
3
|
+
* deterministically, so free SQL is the correct path. Kept CONSERVATIVE and
|
|
4
|
+
* biased toward `genuine_gap` — a false "genuine_gap" merely keeps the existing
|
|
5
|
+
* free-SQL behavior, whereas a false "compiler_expressible" could refuse a
|
|
6
|
+
* question that should have generated SQL.
|
|
7
|
+
*/
|
|
8
|
+
const GENUINE_GAP_RE = new RegExp([
|
|
9
|
+
'running\\s+total',
|
|
10
|
+
'cumulative',
|
|
11
|
+
'moving\\s+average',
|
|
12
|
+
'month[-\\s]?over[-\\s]?month',
|
|
13
|
+
'year[-\\s]?over[-\\s]?year',
|
|
14
|
+
'week[-\\s]?over[-\\s]?week',
|
|
15
|
+
'rolling\\s+\\d',
|
|
16
|
+
'\\bhaving\\b',
|
|
17
|
+
'multiplied\\s+by',
|
|
18
|
+
'divided\\s+by',
|
|
19
|
+
'ratio\\s+of',
|
|
20
|
+
'percent(?:age)?\\s+change',
|
|
21
|
+
'growth\\s+rate',
|
|
22
|
+
'per[-\\s]?unit',
|
|
23
|
+
].join('|'), 'i');
|
|
24
|
+
/**
|
|
25
|
+
* @param questionPlan the parsed question plan (shape, terms).
|
|
26
|
+
* @param metricName the governed metric that matched (its runtime need is
|
|
27
|
+
* read from the semantic layer, not guessed).
|
|
28
|
+
* @param semanticLayer the catalog (for `canComposeMetric`).
|
|
29
|
+
*/
|
|
30
|
+
export function classifyGovernedQueryShape(questionPlan, metricName, semanticLayer) {
|
|
31
|
+
// Genuine gaps first — a shape neither compiler nor runtime expresses.
|
|
32
|
+
// Per-group top-N ("top 3 products PER region") is the clearest structural one.
|
|
33
|
+
if (questionPlan.requestedShape.topN?.scope === 'per_group')
|
|
34
|
+
return 'genuine_gap';
|
|
35
|
+
if (GENUINE_GAP_RE.test(questionPlan.question) || GENUINE_GAP_RE.test(questionPlan.normalizedQuestion)) {
|
|
36
|
+
return 'genuine_gap';
|
|
37
|
+
}
|
|
38
|
+
// A derived/ratio/cumulative/non-additive metric is not natively composable and
|
|
39
|
+
// must run through the runtime compiler (MetricFlow / dbt Cloud).
|
|
40
|
+
if (metricName && !semanticLayer.canComposeMetric(metricName))
|
|
41
|
+
return 'runtime_required';
|
|
42
|
+
// A simple/additive metric × dims × grain × AND-filters × global order/limit —
|
|
43
|
+
// exactly the compiler's wheelhouse. If it matched a governed metric and still
|
|
44
|
+
// couldn't compose, that is a MODELING gap (an unconnected dimension), not a
|
|
45
|
+
// reason to guess SQL.
|
|
46
|
+
return 'compiler_expressible';
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=query-shape.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-shape.js","sourceRoot":"","sources":["../../src/semantic-bridge/query-shape.ts"],"names":[],"mappings":"AAoBA;;;;;;GAMG;AACH,MAAM,cAAc,GAAG,IAAI,MAAM,CAC/B;IACE,kBAAkB;IAClB,YAAY;IACZ,mBAAmB;IACnB,8BAA8B;IAC9B,4BAA4B;IAC5B,4BAA4B;IAC5B,gBAAgB;IAChB,cAAc;IACd,kBAAkB;IAClB,eAAe;IACf,aAAa;IACb,2BAA2B;IAC3B,gBAAgB;IAChB,gBAAgB;CACjB,CAAC,IAAI,CAAC,GAAG,CAAC,EACX,GAAG,CACJ,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CACxC,YAAkC,EAClC,UAA8B,EAC9B,aAAsD;IAEtD,uEAAuE;IACvE,gFAAgF;IAChF,IAAI,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,KAAK,WAAW;QAAE,OAAO,aAAa,CAAC;IAClF,IAAI,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACvG,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,gFAAgF;IAChF,kEAAkE;IAClE,IAAI,UAAU,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,UAAU,CAAC;QAAE,OAAO,kBAAkB,CAAC;IAEzF,+EAA+E;IAC/E,+EAA+E;IAC/E,6EAA6E;IAC7E,uBAAuB;IACvB,OAAO,sBAAsB,CAAC;AAChC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@duckcodeailabs/dql-agent",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.5",
|
|
4
4
|
"description": "DQL agent: knowledge graph, Skills, block-first answer loop, and pluggable LLM providers (Claude / OpenAI / Gemini / Ollama)",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
"access": "public"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@duckcodeailabs/dql-core": "^1.9.
|
|
28
|
-
"@duckcodeailabs/dql-governance": "^1.9.
|
|
29
|
-
"@duckcodeailabs/dql-project": "^1.9.
|
|
27
|
+
"@duckcodeailabs/dql-core": "^1.9.5",
|
|
28
|
+
"@duckcodeailabs/dql-governance": "^1.9.5",
|
|
29
|
+
"@duckcodeailabs/dql-project": "^1.9.5",
|
|
30
30
|
"better-sqlite3": "^12.11.1",
|
|
31
31
|
"js-yaml": "^4.1.1"
|
|
32
32
|
},
|