@dinilmusick/gutts 1.0.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/api/fod-node-provider.d.ts +27 -0
- package/dist/api/fod-node-provider.d.ts.map +1 -0
- package/dist/api/fod-node-provider.js +13 -0
- package/dist/api/fod-node-provider.js.map +1 -0
- package/dist/api/fod-node-provider.test.d.ts +2 -0
- package/dist/api/fod-node-provider.test.d.ts.map +1 -0
- package/dist/api/fod-node-provider.test.js +14 -0
- package/dist/api/fod-node-provider.test.js.map +1 -0
- package/dist/api/fod-runtime.d.ts +2 -0
- package/dist/api/fod-runtime.d.ts.map +1 -0
- package/dist/api/fod-runtime.js +28 -0
- package/dist/api/fod-runtime.js.map +1 -0
- package/dist/api/index.d.ts +2 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +2 -0
- package/dist/api/index.js.map +1 -1
- 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
|
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ApiDefinition, JsonSchema } from './api-types.js';
|
|
2
|
+
export interface GuttsFodPort {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
direction: 'input' | 'output';
|
|
6
|
+
dataType: string;
|
|
7
|
+
required?: boolean;
|
|
8
|
+
description?: string;
|
|
9
|
+
schema?: JsonSchema;
|
|
10
|
+
}
|
|
11
|
+
export interface GuttsFodNodeDefinition {
|
|
12
|
+
type: string;
|
|
13
|
+
label: string;
|
|
14
|
+
description: string;
|
|
15
|
+
category: 'gutts';
|
|
16
|
+
group: string;
|
|
17
|
+
inputs: GuttsFodPort[];
|
|
18
|
+
outputs: GuttsFodPort[];
|
|
19
|
+
metadata: {
|
|
20
|
+
apiId: string;
|
|
21
|
+
package: string;
|
|
22
|
+
semantics: ApiDefinition['semantics'];
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export declare function guttsApiToFodNode(api: ApiDefinition): GuttsFodNodeDefinition;
|
|
26
|
+
export declare const guttsFodNodeDefinitions: readonly GuttsFodNodeDefinition[];
|
|
27
|
+
//# sourceMappingURL=fod-node-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fod-node-provider.d.ts","sourceRoot":"","sources":["../../src/api/fod-node-provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,aAAa,EAAC,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAE7D,MAAM,WAAW,YAAY;IAAE,EAAE,EAAC,MAAM,CAAC;IAAA,IAAI,EAAC,MAAM,CAAC;IAAA,SAAS,EAAC,OAAO,GAAC,QAAQ,CAAC;IAAA,QAAQ,EAAC,MAAM,CAAC;IAAA,QAAQ,CAAC,EAAC,OAAO,CAAC;IAAA,WAAW,CAAC,EAAC,MAAM,CAAC;IAAA,MAAM,CAAC,EAAC,UAAU,CAAC;CAAC;AAC1J,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAC,MAAM,CAAC;IAAA,KAAK,EAAC,MAAM,CAAC;IAAA,WAAW,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,OAAO,CAAC;IAAA,KAAK,EAAC,MAAM,CAAC;IAC1E,MAAM,EAAC,YAAY,EAAE,CAAC;IAAA,OAAO,EAAC,YAAY,EAAE,CAAC;IAC7C,QAAQ,EAAC;QAAC,KAAK,EAAC,MAAM,CAAC;QAAA,OAAO,EAAC,MAAM,CAAC;QAAA,SAAS,EAAC,aAAa,CAAC,WAAW,CAAC,CAAA;KAAC,CAAC;CAC7E;AAID,wBAAgB,iBAAiB,CAAC,GAAG,EAAC,aAAa,GAAE,sBAAsB,CAQ1E;AAED,eAAO,MAAM,uBAAuB,EAAC,SAAS,sBAAsB,EAA4D,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { guttsApiDefinitions } from './api-registry.js';
|
|
2
|
+
const schemaType = (schema) => String(schema?.type ?? 'any');
|
|
3
|
+
export function guttsApiToFodNode(api) {
|
|
4
|
+
return {
|
|
5
|
+
type: `gutts/${api.id}`, label: api.name, description: api.description, category: 'gutts',
|
|
6
|
+
group: api.category,
|
|
7
|
+
inputs: api.parameters.map(parameter => ({ id: parameter.name, name: parameter.name, direction: 'input', dataType: schemaType(parameter.schema), required: parameter.required, description: parameter.description, schema: parameter.schema })),
|
|
8
|
+
outputs: [{ id: 'result', name: 'result', direction: 'output', dataType: schemaType(api.output), ...(api.output.description ? { description: api.output.description } : {}), schema: api.output }],
|
|
9
|
+
metadata: { apiId: api.id, package: '@dinilmusick/gutts', semantics: api.semantics }
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export const guttsFodNodeDefinitions = Object.freeze(guttsApiDefinitions.map(guttsApiToFodNode));
|
|
13
|
+
//# sourceMappingURL=fod-node-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fod-node-provider.js","sourceRoot":"","sources":["../../src/api/fod-node-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAC,MAAM,mBAAmB,CAAC;AAUtD,MAAM,UAAU,GAAC,CAAC,MAA2B,EAAC,EAAE,CAAA,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,KAAK,CAAC,CAAC;AAE9E,MAAM,UAAU,iBAAiB,CAAC,GAAiB;IACjD,OAAO;QACL,IAAI,EAAC,SAAS,GAAG,CAAC,EAAE,EAAE,EAAC,KAAK,EAAC,GAAG,CAAC,IAAI,EAAC,WAAW,EAAC,GAAG,CAAC,WAAW,EAAC,QAAQ,EAAC,OAAO;QAClF,KAAK,EAAC,GAAG,CAAC,QAAQ;QAClB,MAAM,EAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAA,EAAE,CAAA,CAAC,EAAC,EAAE,EAAC,SAAS,CAAC,IAAI,EAAC,IAAI,EAAC,SAAS,CAAC,IAAI,EAAC,SAAS,EAAC,OAAO,EAAC,QAAQ,EAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,EAAC,QAAQ,EAAC,SAAS,CAAC,QAAQ,EAAC,WAAW,EAAC,SAAS,CAAC,WAAW,EAAC,MAAM,EAAC,SAAS,CAAC,MAAM,EAAC,CAAC,CAAC;QAC7N,OAAO,EAAC,CAAC,EAAC,EAAE,EAAC,QAAQ,EAAC,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,QAAQ,EAAC,QAAQ,EAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAC,WAAW,EAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,MAAM,EAAC,GAAG,CAAC,MAAM,EAAC,CAAC;QAClL,QAAQ,EAAC,EAAC,KAAK,EAAC,GAAG,CAAC,EAAE,EAAC,OAAO,EAAC,oBAAoB,EAAC,SAAS,EAAC,GAAG,CAAC,SAAS,EAAC;KAC7E,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAmC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fod-node-provider.test.d.ts","sourceRoot":"","sources":["../../src/api/fod-node-provider.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { guttsFodNodeDefinitions } from './fod-node-provider.js';
|
|
3
|
+
import { executeGuttsApi } from './fod-runtime.js';
|
|
4
|
+
describe('GutTS FOD node provider', () => {
|
|
5
|
+
it('exposes every published API definition as a grouped node', () => {
|
|
6
|
+
expect(guttsFodNodeDefinitions.length).toBeGreaterThan(20);
|
|
7
|
+
expect(new Set(guttsFodNodeDefinitions.map(node => node.group))).toEqual(new Set(['arrays', 'json', 'numbers', 'objects', 'strings', 'urls', 'models']));
|
|
8
|
+
});
|
|
9
|
+
it('executes deterministic utility APIs through the same registry IDs', async () => {
|
|
10
|
+
await expect(executeGuttsApi('gutts.numbers.sum', { values: [1, 2, 3] })).resolves.toBe(6);
|
|
11
|
+
await expect(executeGuttsApi('gutts.strings.camelCase', { value: 'hello world' })).resolves.toBe('helloWorld');
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=fod-node-provider.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fod-node-provider.test.js","sourceRoot":"","sources":["../../src/api/fod-node-provider.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,EAAC,EAAE,EAAC,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAC,uBAAuB,EAAC,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAEjD,QAAQ,CAAC,yBAAyB,EAAC,GAAE,EAAE;IACrC,EAAE,CAAC,0DAA0D,EAAC,GAAE,EAAE;QAChE,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAC3D,MAAM,CAAC,IAAI,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAA,EAAE,CAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAC,MAAM,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,MAAM,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnJ,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,mEAAmE,EAAC,KAAK,IAAE,EAAE;QAC9E,MAAM,MAAM,CAAC,eAAe,CAAC,mBAAmB,EAAC,EAAC,MAAM,EAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrF,MAAM,MAAM,CAAC,eAAe,CAAC,yBAAyB,EAAC,EAAC,KAAK,EAAC,aAAa,EAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7G,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fod-runtime.d.ts","sourceRoot":"","sources":["../../src/api/fod-runtime.ts"],"names":[],"mappings":"AAoBA,wBAAsB,eAAe,CAAC,KAAK,EAAC,MAAM,EAAC,KAAK,EAAC,MAAM,CAAC,MAAM,EAAC,OAAO,CAAC,GAAE,OAAO,CAAC,OAAO,CAAC,CAMhG"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { guttsApiById } from './api-registry.js';
|
|
2
|
+
import { compact, unique, chunk, flatten, last } from '../arrays/array-operations.js';
|
|
3
|
+
import { isJsonValue, parseJson, tryParseJson, stringifyJson } from '../json/json-concepts.js';
|
|
4
|
+
import { clamp, inRange, roundTo, isFiniteNumber, sum } from '../numbers/number-operations.js';
|
|
5
|
+
import { hasOwn, pick, omit, isPlainObject } from '../objects/object-operations.js';
|
|
6
|
+
import { isBlank, isNonBlank, isEmail, startsWithAny, endsWithAny } from '../strings/string-predicates.js';
|
|
7
|
+
import { capitalize, camelCase, kebabCase, snakeCase, truncate } from '../strings/string-transform.js';
|
|
8
|
+
import { truncateWords } from '../strings/string-truncate-words.js';
|
|
9
|
+
import { isUrl, joinUrl, getQueryParam, setQueryParam } from '../urls/url-operations.js';
|
|
10
|
+
const utilityFunctions = {
|
|
11
|
+
compact: i => compact(i.values), unique: i => unique(i.values), chunk: i => chunk(i.values, i.size), flatten: i => flatten(i.values), last: i => last(i.values),
|
|
12
|
+
isJsonValue: i => isJsonValue(i.value), parseJson: i => parseJson(i.text), tryParseJson: i => tryParseJson(i.text), stringifyJson: i => stringifyJson(i.value, i.space),
|
|
13
|
+
clamp: i => clamp(i.value, i.min, i.max), inRange: i => inRange(i.value, i.min, i.max), roundTo: i => roundTo(i.value, i.decimals), isFiniteNumber: i => isFiniteNumber(i.value), sum: i => sum(i.values),
|
|
14
|
+
hasOwn: i => hasOwn(i.value, i.key), pick: i => pick(i.value, i.keys), omit: i => omit(i.value, i.keys), isPlainObject: i => isPlainObject(i.value),
|
|
15
|
+
isBlank: i => isBlank(i.value), isNonBlank: i => isNonBlank(i.value), isEmail: i => isEmail(i.value), startsWithAny: i => startsWithAny(i.value, i.prefixes), endsWithAny: i => endsWithAny(i.value, i.suffixes),
|
|
16
|
+
capitalize: i => capitalize(i.value), camelCase: i => camelCase(i.value), kebabCase: i => kebabCase(i.value), snakeCase: i => snakeCase(i.value), truncate: i => truncate(i.value, i.maxLength, i.suffix), truncateWords: i => truncateWords(i.value, i.maxWords, i.suffix),
|
|
17
|
+
isUrl: i => isUrl(i.value), joinUrl: i => joinUrl(i.base, ...i.parts), getQueryParam: i => getQueryParam(i.url, i.key), setQueryParam: i => setQueryParam(i.url, i.key, i.value)
|
|
18
|
+
};
|
|
19
|
+
export async function executeGuttsApi(apiId, input) {
|
|
20
|
+
const api = guttsApiById[apiId];
|
|
21
|
+
if (!api)
|
|
22
|
+
throw new Error(`Unknown GutTS API '${apiId}'.`);
|
|
23
|
+
const fn = utilityFunctions[api.name];
|
|
24
|
+
if (!fn)
|
|
25
|
+
throw new Error(`GutTS API '${apiId}' has metadata but no embedded runtime adapter.`);
|
|
26
|
+
return await fn(input);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=fod-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fod-runtime.js","sourceRoot":"","sources":["../../src/api/fod-runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/api/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export type { ApiDefinition, ApiExample, ApiParameter, ApiSemantics, JsonSchema } from "./api-types.js";
|
|
2
2
|
export { defineApi } from "./define-api.js";
|
|
3
3
|
export { guttsApiDefinitions, guttsApiById } from "./api-registry.js";
|
|
4
|
+
export { guttsFodNodeDefinitions, guttsApiToFodNode } from './fod-node-provider.js';
|
|
5
|
+
export { executeGuttsApi } from './fod-runtime.js';
|
|
4
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/api/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAC,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAC,MAAM,gBAAgB,CAAC;AACtG,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAC,mBAAmB,EAAE,YAAY,EAAC,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAC,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAC,MAAM,gBAAgB,CAAC;AACtG,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAC,mBAAmB,EAAE,YAAY,EAAC,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAC,uBAAuB,EAAC,iBAAiB,EAAC,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC"}
|
package/dist/api/index.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { defineApi } from "./define-api.js";
|
|
2
2
|
export { guttsApiDefinitions, guttsApiById } from "./api-registry.js";
|
|
3
|
+
export { guttsFodNodeDefinitions, guttsApiToFodNode } from './fod-node-provider.js';
|
|
4
|
+
export { executeGuttsApi } from './fod-runtime.js';
|
|
3
5
|
//# sourceMappingURL=index.js.map
|
package/dist/api/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAC,mBAAmB,EAAE,YAAY,EAAC,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAC,mBAAmB,EAAE,YAAY,EAAC,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAC,uBAAuB,EAAC,iBAAiB,EAAC,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC"}
|
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": {
|