@dinilmusick/gutts 1.1.0 → 1.2.0
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/.krusbl-release-attestation.json +3 -3
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/semantic-input/index.d.ts +42 -0
- package/dist/semantic-input/index.d.ts.map +1 -0
- package/dist/semantic-input/index.js +110 -0
- package/dist/semantic-input/index.js.map +1 -0
- package/dist/semantic-input/index.test.d.ts +2 -0
- package/dist/semantic-input/index.test.d.ts.map +1 -0
- package/dist/semantic-input/index.test.js +211 -0
- package/dist/semantic-input/index.test.js.map +1 -0
- package/gutts.manifest.json +5 -3
- package/package.json +2 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": 1,
|
|
3
3
|
"packageName": "@dinilmusick/gutts",
|
|
4
|
-
"version": "1.
|
|
5
|
-
"sourceCommit": "
|
|
4
|
+
"version": "1.2.0",
|
|
5
|
+
"sourceCommit": "2a1a7292a15c3872c959adc656508e08693c6bc3",
|
|
6
6
|
"releaseWorkflow": "npm Release",
|
|
7
|
-
"workflowRunId": "
|
|
7
|
+
"workflowRunId": "41188970179"
|
|
8
8
|
}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export type SemanticInputSchema = {
|
|
2
|
+
type: string;
|
|
3
|
+
properties?: Record<string, SemanticInputSchema>;
|
|
4
|
+
required?: readonly string[];
|
|
5
|
+
enum?: readonly unknown[];
|
|
6
|
+
items?: SemanticInputSchema;
|
|
7
|
+
description?: string;
|
|
8
|
+
[key: string]: unknown;
|
|
9
|
+
};
|
|
10
|
+
export type SemanticInputContext = {
|
|
11
|
+
page?: string;
|
|
12
|
+
section?: string;
|
|
13
|
+
field?: string;
|
|
14
|
+
label?: string;
|
|
15
|
+
description?: string;
|
|
16
|
+
semanticType?: string;
|
|
17
|
+
vocabulary?: readonly string[];
|
|
18
|
+
examples?: readonly string[];
|
|
19
|
+
constraints?: readonly string[];
|
|
20
|
+
};
|
|
21
|
+
export type SemanticInputRequest = {
|
|
22
|
+
input: string;
|
|
23
|
+
schema: SemanticInputSchema;
|
|
24
|
+
context?: SemanticInputContext;
|
|
25
|
+
candidates?: readonly string[];
|
|
26
|
+
preserveRawInput?: boolean;
|
|
27
|
+
};
|
|
28
|
+
export type SemanticInputCandidate = {
|
|
29
|
+
value: string;
|
|
30
|
+
similarity?: number | undefined;
|
|
31
|
+
relevance?: number | undefined;
|
|
32
|
+
};
|
|
33
|
+
export type SemanticInputResolution<T = unknown> = {
|
|
34
|
+
status: "resolved" | "ambiguous" | "invalid";
|
|
35
|
+
value?: T;
|
|
36
|
+
rawInput?: string;
|
|
37
|
+
candidates: readonly SemanticInputCandidate[];
|
|
38
|
+
modelOutput: unknown;
|
|
39
|
+
};
|
|
40
|
+
export declare function rankSemanticInputCandidates(input: string, candidates: readonly string[]): Promise<readonly SemanticInputCandidate[]>;
|
|
41
|
+
export declare function resolveSemanticInput<T = unknown>(request: SemanticInputRequest): Promise<SemanticInputResolution<T>>;
|
|
42
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/semantic-input/index.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACjD,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,IAAI,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,mBAAmB,CAAC;IAC5B,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,uBAAuB,CAAC,CAAC,GAAG,OAAO,IAAI;IACjD,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;IAC7C,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAC9C,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AA8BF,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,OAAO,CAAC,SAAS,sBAAsB,EAAE,CAAC,CAiB5C;AAED,wBAAsB,oBAAoB,CAAC,CAAC,GAAG,OAAO,EACpD,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAgErC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { EttinReranker17M } from "../models/ettin/index.js";
|
|
2
|
+
import { MiniLM } from "../models/minilm/index.js";
|
|
3
|
+
import { Needle3 } from "../models/needle3/index.js";
|
|
4
|
+
function unwrapModelOutput(output) {
|
|
5
|
+
if (!output || typeof output !== "object")
|
|
6
|
+
return output;
|
|
7
|
+
const record = output;
|
|
8
|
+
for (const key of ["output", "result", "data", "structuredOutput"]) {
|
|
9
|
+
if (key in record)
|
|
10
|
+
return record[key];
|
|
11
|
+
}
|
|
12
|
+
return output;
|
|
13
|
+
}
|
|
14
|
+
function buildPrompt(request) {
|
|
15
|
+
return [
|
|
16
|
+
"Convert the natural-language input into the supplied target schema.",
|
|
17
|
+
"Return only data conforming to the target schema. Never invent information.",
|
|
18
|
+
request.context?.page ? `Page: ${request.context.page}` : "",
|
|
19
|
+
request.context?.section ? `Section: ${request.context.section}` : "",
|
|
20
|
+
request.context?.field ? `Field: ${request.context.field}` : "",
|
|
21
|
+
request.context?.label ? `Label: ${request.context.label}` : "",
|
|
22
|
+
request.context?.description ? `Description: ${request.context.description}` : "",
|
|
23
|
+
request.context?.semanticType ? `Semantic type: ${request.context.semanticType}` : "",
|
|
24
|
+
request.context?.vocabulary?.length ? `Vocabulary: ${request.context.vocabulary.join(", ")}` : "",
|
|
25
|
+
request.context?.examples?.length ? `Examples: ${request.context.examples.join(" | ")}` : "",
|
|
26
|
+
request.context?.constraints?.length ? `Constraints: ${request.context.constraints.join("; ")}` : "",
|
|
27
|
+
request.candidates?.length ? `Candidate values: ${request.candidates.join(" | ")}` : "",
|
|
28
|
+
`Target schema: ${JSON.stringify(request.schema)}`,
|
|
29
|
+
`Input: ${request.input}`,
|
|
30
|
+
].filter(Boolean).join("\n");
|
|
31
|
+
}
|
|
32
|
+
export async function rankSemanticInputCandidates(input, candidates) {
|
|
33
|
+
if (candidates.length === 0)
|
|
34
|
+
return [];
|
|
35
|
+
const similarityModel = new MiniLM();
|
|
36
|
+
const reranker = new EttinReranker17M();
|
|
37
|
+
const similarities = await Promise.all(candidates.map((candidate) => similarityModel.similarity({ left: input, right: candidate })));
|
|
38
|
+
const relevance = await reranker.rerank({ query: input, candidates });
|
|
39
|
+
return candidates
|
|
40
|
+
.map((value, index) => ({ value, similarity: similarities[index], relevance: relevance[index] }))
|
|
41
|
+
.sort((a, b) => {
|
|
42
|
+
const relDiff = (b.relevance ?? -Infinity) - (a.relevance ?? -Infinity);
|
|
43
|
+
if (relDiff !== 0)
|
|
44
|
+
return relDiff;
|
|
45
|
+
const simDiff = (b.similarity ?? -Infinity) - (a.similarity ?? -Infinity);
|
|
46
|
+
if (simDiff !== 0)
|
|
47
|
+
return simDiff;
|
|
48
|
+
return a.value.localeCompare(b.value);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
export async function resolveSemanticInput(request) {
|
|
52
|
+
if (!request.input || !request.input.trim()) {
|
|
53
|
+
return {
|
|
54
|
+
status: "invalid",
|
|
55
|
+
...(request.preserveRawInput ? { rawInput: request.input } : {}),
|
|
56
|
+
candidates: [],
|
|
57
|
+
modelOutput: undefined,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
const candidateList = request.candidates?.length
|
|
61
|
+
? request.candidates
|
|
62
|
+
: (request.context?.vocabulary ?? []);
|
|
63
|
+
const candidates = candidateList.length
|
|
64
|
+
? await rankSemanticInputCandidates(request.input, candidateList)
|
|
65
|
+
: [];
|
|
66
|
+
const needle = new Needle3();
|
|
67
|
+
let rawOutput;
|
|
68
|
+
try {
|
|
69
|
+
rawOutput = await needle.complete({
|
|
70
|
+
prompt: buildPrompt(request),
|
|
71
|
+
schema: request.schema,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return {
|
|
76
|
+
status: "invalid",
|
|
77
|
+
...(request.preserveRawInput ? { rawInput: request.input } : {}),
|
|
78
|
+
candidates,
|
|
79
|
+
modelOutput: undefined,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
const modelOutput = unwrapModelOutput(rawOutput);
|
|
83
|
+
if (modelOutput === undefined || modelOutput === null || modelOutput === "") {
|
|
84
|
+
return {
|
|
85
|
+
status: "invalid",
|
|
86
|
+
...(request.preserveRawInput ? { rawInput: request.input } : {}),
|
|
87
|
+
candidates,
|
|
88
|
+
modelOutput,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
const value = (candidates.length && typeof modelOutput === "string"
|
|
92
|
+
? candidates[0]?.value
|
|
93
|
+
: modelOutput);
|
|
94
|
+
if (value === undefined || value === null) {
|
|
95
|
+
return {
|
|
96
|
+
status: candidates.length > 1 ? "ambiguous" : "invalid",
|
|
97
|
+
...(request.preserveRawInput ? { rawInput: request.input } : {}),
|
|
98
|
+
candidates,
|
|
99
|
+
modelOutput,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
status: "resolved",
|
|
104
|
+
value,
|
|
105
|
+
...(request.preserveRawInput ? { rawInput: request.input } : {}),
|
|
106
|
+
candidates,
|
|
107
|
+
modelOutput,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/semantic-input/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../src/semantic-input/index.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
const completeMock = vi.fn();
|
|
3
|
+
const similarityMock = vi.fn();
|
|
4
|
+
const rerankMock = vi.fn();
|
|
5
|
+
vi.mock("../models/needle3/index.js", () => ({
|
|
6
|
+
Needle3: class {
|
|
7
|
+
complete(args) {
|
|
8
|
+
return completeMock(args);
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
}));
|
|
12
|
+
vi.mock("../models/minilm/index.js", () => ({
|
|
13
|
+
MiniLM: class {
|
|
14
|
+
similarity(args) {
|
|
15
|
+
return similarityMock(args);
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
}));
|
|
19
|
+
vi.mock("../models/ettin/index.js", () => ({
|
|
20
|
+
EttinReranker17M: class {
|
|
21
|
+
rerank(args) {
|
|
22
|
+
return rerankMock(args);
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
}));
|
|
26
|
+
import { rankSemanticInputCandidates, resolveSemanticInput } from "./index.js";
|
|
27
|
+
describe("GutTS universal semantic input", () => {
|
|
28
|
+
beforeEach(() => {
|
|
29
|
+
vi.resetAllMocks();
|
|
30
|
+
similarityMock.mockImplementation(async () => 0.5);
|
|
31
|
+
rerankMock.mockImplementation(async ({ candidates }) => candidates.map((_, i) => candidates.length - i));
|
|
32
|
+
completeMock.mockImplementation(async () => ({ output: "default" }));
|
|
33
|
+
});
|
|
34
|
+
it("1. Needle receives the target schema", async () => {
|
|
35
|
+
const targetSchema = { type: "object", properties: { age: { type: "integer" } }, required: ["age"] };
|
|
36
|
+
completeMock.mockResolvedValueOnce({ output: { age: 32 } });
|
|
37
|
+
await resolveSemanticInput({
|
|
38
|
+
input: "I am thirty-two",
|
|
39
|
+
schema: targetSchema,
|
|
40
|
+
});
|
|
41
|
+
expect(completeMock).toHaveBeenCalledWith(expect.objectContaining({
|
|
42
|
+
schema: targetSchema,
|
|
43
|
+
}));
|
|
44
|
+
});
|
|
45
|
+
it("2. Context is included in semantic resolution", async () => {
|
|
46
|
+
completeMock.mockResolvedValueOnce({ output: { country: "Canada" } });
|
|
47
|
+
await resolveSemanticInput({
|
|
48
|
+
input: "from Toronto",
|
|
49
|
+
schema: { type: "object", properties: { country: { type: "string" } } },
|
|
50
|
+
context: {
|
|
51
|
+
page: "Profile",
|
|
52
|
+
section: "Geography",
|
|
53
|
+
field: "originCountry",
|
|
54
|
+
label: "Origin Country",
|
|
55
|
+
description: "Country of residence",
|
|
56
|
+
semanticType: "geo-country",
|
|
57
|
+
vocabulary: ["Canada", "USA"],
|
|
58
|
+
examples: ["Canada", "Mexico"],
|
|
59
|
+
constraints: ["Must be ISO compliant"],
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
expect(completeMock).toHaveBeenCalled();
|
|
63
|
+
const callArgs = completeMock.mock.calls[0]?.[0];
|
|
64
|
+
expect(callArgs.prompt).toContain("Page: Profile");
|
|
65
|
+
expect(callArgs.prompt).toContain("Section: Geography");
|
|
66
|
+
expect(callArgs.prompt).toContain("Field: originCountry");
|
|
67
|
+
expect(callArgs.prompt).toContain("Label: Origin Country");
|
|
68
|
+
expect(callArgs.prompt).toContain("Description: Country of residence");
|
|
69
|
+
expect(callArgs.prompt).toContain("Semantic type: geo-country");
|
|
70
|
+
expect(callArgs.prompt).toContain("Vocabulary: Canada, USA");
|
|
71
|
+
expect(callArgs.prompt).toContain("Examples: Canada | Mexico");
|
|
72
|
+
expect(callArgs.prompt).toContain("Constraints: Must be ISO compliant");
|
|
73
|
+
});
|
|
74
|
+
it("3. Natural language is converted into structured output", async () => {
|
|
75
|
+
completeMock.mockResolvedValueOnce({
|
|
76
|
+
output: {
|
|
77
|
+
quantity: 5,
|
|
78
|
+
item: "apples",
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
const result = await resolveSemanticInput({
|
|
82
|
+
input: "five apples please",
|
|
83
|
+
schema: {
|
|
84
|
+
type: "object",
|
|
85
|
+
properties: { quantity: { type: "integer" }, item: { type: "string" } },
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
expect(result.status).toBe("resolved");
|
|
89
|
+
expect(result.value).toEqual({ quantity: 5, item: "apples" });
|
|
90
|
+
});
|
|
91
|
+
it("4. Candidate ranking uses existing MiniLM + Ettin models", async () => {
|
|
92
|
+
similarityMock.mockImplementation(async ({ right }) => (right === "May" ? 0.88 : 0.42));
|
|
93
|
+
rerankMock.mockResolvedValueOnce([10.5, 2.1]);
|
|
94
|
+
const ranked = await rankSemanticInputCandidates("mage", ["May", "March"]);
|
|
95
|
+
expect(similarityMock).toHaveBeenCalledTimes(2);
|
|
96
|
+
expect(rerankMock).toHaveBeenCalledWith(expect.objectContaining({
|
|
97
|
+
query: "mage",
|
|
98
|
+
candidates: ["May", "March"],
|
|
99
|
+
}));
|
|
100
|
+
expect(ranked[0]?.value).toBe("May");
|
|
101
|
+
expect(ranked[0]?.similarity).toBe(0.88);
|
|
102
|
+
expect(ranked[0]?.relevance).toBe(10.5);
|
|
103
|
+
});
|
|
104
|
+
it("5. Candidate ordering is deterministic with tie-breaking", async () => {
|
|
105
|
+
similarityMock.mockResolvedValue(0.5);
|
|
106
|
+
// All candidates return equal relevance score
|
|
107
|
+
rerankMock.mockResolvedValueOnce([5.0, 5.0, 5.0]);
|
|
108
|
+
const ranked = await rankSemanticInputCandidates("query", ["Zeta", "Alpha", "Beta"]);
|
|
109
|
+
// Equal relevance and similarity falls back to alphabetical
|
|
110
|
+
expect(ranked.map((c) => c.value)).toEqual(["Alpha", "Beta", "Zeta"]);
|
|
111
|
+
});
|
|
112
|
+
it("6. Empty candidate sets work correctly", async () => {
|
|
113
|
+
completeMock.mockResolvedValueOnce({ output: "Plain output" });
|
|
114
|
+
const ranked = await rankSemanticInputCandidates("query", []);
|
|
115
|
+
expect(ranked).toEqual([]);
|
|
116
|
+
const result = await resolveSemanticInput({
|
|
117
|
+
input: "Plain query",
|
|
118
|
+
schema: { type: "string" },
|
|
119
|
+
candidates: [],
|
|
120
|
+
});
|
|
121
|
+
expect(result.status).toBe("resolved");
|
|
122
|
+
expect(result.value).toBe("Plain output");
|
|
123
|
+
expect(result.candidates).toEqual([]);
|
|
124
|
+
});
|
|
125
|
+
it("7. Invalid/empty model output becomes invalid rather than fabricated data", async () => {
|
|
126
|
+
completeMock.mockResolvedValueOnce({ output: null });
|
|
127
|
+
const resultNull = await resolveSemanticInput({
|
|
128
|
+
input: "gibberish 123",
|
|
129
|
+
schema: { type: "object" },
|
|
130
|
+
context: { vocabulary: ["One", "Two"] },
|
|
131
|
+
});
|
|
132
|
+
expect(resultNull.status).toBe("invalid");
|
|
133
|
+
expect(resultNull.value).toBeUndefined();
|
|
134
|
+
completeMock.mockResolvedValueOnce({ output: "" });
|
|
135
|
+
const resultEmpty = await resolveSemanticInput({
|
|
136
|
+
input: "something",
|
|
137
|
+
schema: { type: "string" },
|
|
138
|
+
});
|
|
139
|
+
expect(resultEmpty.status).toBe("invalid");
|
|
140
|
+
expect(resultEmpty.value).toBeUndefined();
|
|
141
|
+
});
|
|
142
|
+
it("8. preserveRawInput defaults to false", async () => {
|
|
143
|
+
completeMock.mockResolvedValueOnce({ output: 42 });
|
|
144
|
+
const result = await resolveSemanticInput({
|
|
145
|
+
input: "forty-two",
|
|
146
|
+
schema: { type: "integer" },
|
|
147
|
+
});
|
|
148
|
+
expect(result.status).toBe("resolved");
|
|
149
|
+
expect(result.value).toBe(42);
|
|
150
|
+
expect("rawInput" in result).toBe(false);
|
|
151
|
+
});
|
|
152
|
+
it("9. preserveRawInput: true returns the original input", async () => {
|
|
153
|
+
completeMock.mockResolvedValueOnce({ output: 42 });
|
|
154
|
+
const result = await resolveSemanticInput({
|
|
155
|
+
input: " forty-two ",
|
|
156
|
+
schema: { type: "integer" },
|
|
157
|
+
preserveRawInput: true,
|
|
158
|
+
});
|
|
159
|
+
expect(result.status).toBe("resolved");
|
|
160
|
+
expect(result.value).toBe(42);
|
|
161
|
+
expect(result.rawInput).toBe(" forty-two ");
|
|
162
|
+
});
|
|
163
|
+
it("10. Contextual example resolves through schema/context pipeline without hard-coded replacements", async () => {
|
|
164
|
+
similarityMock.mockImplementation(async ({ right }) => (right === "May" ? 0.95 : 0.3));
|
|
165
|
+
rerankMock.mockResolvedValueOnce([12.0, 1.0]);
|
|
166
|
+
completeMock.mockResolvedValueOnce({ output: "May" });
|
|
167
|
+
const result = await resolveSemanticInput({
|
|
168
|
+
input: "23 mage 1994",
|
|
169
|
+
schema: { type: "string" },
|
|
170
|
+
context: {
|
|
171
|
+
field: "Date of Birth",
|
|
172
|
+
semanticType: "date",
|
|
173
|
+
vocabulary: ["May", "March"],
|
|
174
|
+
},
|
|
175
|
+
preserveRawInput: true,
|
|
176
|
+
});
|
|
177
|
+
expect(result.status).toBe("resolved");
|
|
178
|
+
expect(result.value).toBe("May");
|
|
179
|
+
expect(result.rawInput).toBe("23 mage 1994");
|
|
180
|
+
expect(result.candidates[0]?.value).toBe("May");
|
|
181
|
+
});
|
|
182
|
+
describe("Edge cases", () => {
|
|
183
|
+
it("handles empty or whitespace-only input safely", async () => {
|
|
184
|
+
const emptyResult = await resolveSemanticInput({
|
|
185
|
+
input: "",
|
|
186
|
+
schema: { type: "string" },
|
|
187
|
+
});
|
|
188
|
+
expect(emptyResult.status).toBe("invalid");
|
|
189
|
+
expect(emptyResult.value).toBeUndefined();
|
|
190
|
+
expect(completeMock).not.toHaveBeenCalled();
|
|
191
|
+
const whitespaceResult = await resolveSemanticInput({
|
|
192
|
+
input: " \t\n ",
|
|
193
|
+
schema: { type: "string" },
|
|
194
|
+
preserveRawInput: true,
|
|
195
|
+
});
|
|
196
|
+
expect(whitespaceResult.status).toBe("invalid");
|
|
197
|
+
expect(whitespaceResult.rawInput).toBe(" \t\n ");
|
|
198
|
+
expect(completeMock).not.toHaveBeenCalled();
|
|
199
|
+
});
|
|
200
|
+
it("handles model exceptions safely", async () => {
|
|
201
|
+
completeMock.mockRejectedValueOnce(new Error("Needle inference timeout"));
|
|
202
|
+
const result = await resolveSemanticInput({
|
|
203
|
+
input: "failing query",
|
|
204
|
+
schema: { type: "string" },
|
|
205
|
+
});
|
|
206
|
+
expect(result.status).toBe("invalid");
|
|
207
|
+
expect(result.value).toBeUndefined();
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/semantic-input/index.test.ts"],"names":[],"mappings":"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"}
|
package/gutts.manifest.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://skipo.dev/schemas/gutts-manifest.v1.json",
|
|
3
3
|
"package": "@dinilmusick/gutts",
|
|
4
4
|
"packageType": "global-utility",
|
|
5
|
-
"version": "1.
|
|
5
|
+
"version": "1.1.0",
|
|
6
6
|
"promotion": {
|
|
7
7
|
"eligible": true,
|
|
8
8
|
"scope": "global",
|
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
"numbers",
|
|
17
17
|
"urls",
|
|
18
18
|
"api",
|
|
19
|
-
"models"
|
|
19
|
+
"models",
|
|
20
|
+
"semantic-input"
|
|
20
21
|
],
|
|
21
22
|
"exports": [
|
|
22
23
|
"@dinilmusick/gutts/json",
|
|
@@ -26,6 +27,7 @@
|
|
|
26
27
|
"@dinilmusick/gutts/numbers",
|
|
27
28
|
"@dinilmusick/gutts/urls",
|
|
28
29
|
"@dinilmusick/gutts/api",
|
|
29
|
-
"@dinilmusick/gutts/models"
|
|
30
|
+
"@dinilmusick/gutts/models",
|
|
31
|
+
"@dinilmusick/gutts/semantic-input"
|
|
30
32
|
]
|
|
31
33
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dinilmusick/gutts",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Global Utilities for TypeScript applications.",
|
|
6
6
|
"type": "module",
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
"./urls": "./dist/urls/url-concepts.js",
|
|
17
17
|
"./api": "./dist/api/index.js",
|
|
18
18
|
"./models": "./dist/models/index.js",
|
|
19
|
+
"./semantic-input": "./dist/semantic-input/index.js",
|
|
19
20
|
"./gutts.manifest.json": "./gutts.manifest.json"
|
|
20
21
|
},
|
|
21
22
|
"scripts": {
|