@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.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schema": 1,
3
3
  "packageName": "@dinilmusick/gutts",
4
- "version": "1.1.0",
5
- "sourceCommit": "25fe2f36405852cc7344365cdbdf458f9f788168",
4
+ "version": "1.2.0",
5
+ "sourceCommit": "2a1a7292a15c3872c959adc656508e08693c6bc3",
6
6
  "releaseWorkflow": "npm Release",
7
- "workflowRunId": "40941611934"
7
+ "workflowRunId": "41188970179"
8
8
  }
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.1.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": {