@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.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schema": 1,
3
3
  "packageName": "@dinilmusick/gutts",
4
- "version": "1.0.0",
5
- "sourceCommit": "90ebe43df19e2d735713338ec3dc3f9e48a797ce",
4
+ "version": "1.2.0",
5
+ "sourceCommit": "2a1a7292a15c3872c959adc656508e08693c6bc3",
6
6
  "releaseWorkflow": "npm Release",
7
- "workflowRunId": "40890749768"
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=fod-node-provider.test.d.ts.map
@@ -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,2 @@
1
+ export declare function executeGuttsApi(apiId: string, input: Record<string, unknown>): Promise<unknown>;
2
+ //# sourceMappingURL=fod-runtime.d.ts.map
@@ -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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"}
@@ -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
@@ -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
@@ -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
@@ -6,4 +6,5 @@ export * from "./numbers/number-concepts.js";
6
6
  export * from "./urls/url-concepts.js";
7
7
  export * from "./api/index.js";
8
8
  export * from "./models/index.js";
9
+ export * from "./semantic-input/index.js";
9
10
  //# sourceMappingURL=index.d.ts.map
@@ -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
@@ -6,4 +6,5 @@ export * from "./numbers/number-concepts.js";
6
6
  export * from "./urls/url-concepts.js";
7
7
  export * from "./api/index.js";
8
8
  export * from "./models/index.js";
9
+ export * from "./semantic-input/index.js";
9
10
  //# sourceMappingURL=index.js.map
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -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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"}
@@ -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.0.0",
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.0.0",
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": {