nttp 1.0.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/README.md +245 -0
- package/dist/NTTP.d.ts +121 -0
- package/dist/NTTP.d.ts.map +1 -0
- package/dist/NTTP.js +229 -0
- package/dist/NTTP.js.map +1 -0
- package/dist/cache/exact-cache.d.ts +46 -0
- package/dist/cache/exact-cache.d.ts.map +1 -0
- package/dist/cache/exact-cache.js +104 -0
- package/dist/cache/exact-cache.js.map +1 -0
- package/dist/cache/index.d.ts +8 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +7 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/semantic-cache.d.ts +82 -0
- package/dist/cache/semantic-cache.d.ts.map +1 -0
- package/dist/cache/semantic-cache.js +243 -0
- package/dist/cache/semantic-cache.js.map +1 -0
- package/dist/cache/types.d.ts +135 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +5 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/cache.d.ts +71 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +129 -0
- package/dist/cache.js.map +1 -0
- package/dist/errors.d.ts +35 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +55 -0
- package/dist/errors.js.map +1 -0
- package/dist/executor.d.ts +82 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +395 -0
- package/dist/executor.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/intent.d.ts +55 -0
- package/dist/intent.d.ts.map +1 -0
- package/dist/intent.js +183 -0
- package/dist/intent.js.map +1 -0
- package/dist/llm.d.ts +60 -0
- package/dist/llm.d.ts.map +1 -0
- package/dist/llm.js +171 -0
- package/dist/llm.js.map +1 -0
- package/dist/types.d.ts +280 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +61 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +19 -0
- package/dist/utils.js.map +1 -0
- package/package.json +94 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent.js","sourceRoot":"","sources":["../src/intent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIzD;;GAEG;AACH,MAAM,kBAAkB,GAAG;IACzB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,WAAW,EACT,6DAA6D;SAChE;QACD,SAAS,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC;YAC9C,WAAW,EAAE,gBAAgB;SAC9B;QACD,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,sCAAsC;YACnD,oBAAoB,EAAE,KAAK;SAC5B;QACD,KAAK,EAAE;YACL,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC;YACzB,WAAW,EAAE,mCAAmC;SACjD;QACD,MAAM,EAAE;YACN,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;YACvB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,WAAW,EAAE,mDAAmD;SACjE;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;YACxB,WAAW,EAAE,uDAAuD;SACrE;KACF;IACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC;IACjC,oBAAoB,EAAE,KAAK;CAC5B,CAAC;AAcF;;GAEG;AACH,MAAM,0BAA0B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BlC,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,YAAY;IACH;IAApB,YAAoB,GAAe;QAAf,QAAG,GAAH,GAAG,CAAY;IAAG,CAAC;IAEvC;;;;;;;OAOG;IACH,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,iBAAyB;QAClD,IAAI,CAAC;YACH,oCAAoC;YACpC,MAAM,YAAY,GAAG,0BAA0B,CAAC,OAAO,CACrD,UAAU,EACV,iBAAiB,CAClB,CAAC;YAEF,kFAAkF;YAClF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,cAAc,CAC1C,KAAK,EACL,YAAY,EACZ,kBAAgC,EAChC,GAAG,CACoB,CAAC;YAE1B,6EAA6E;YAC7E,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;YACtB,CAAC;YAED,yCAAyC;YACzC,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAEpD,uBAAuB;YACvB,MAAM,MAAM,GAAW;gBACrB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;gBAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,eAAe,EAAE,UAAU;aAC5B,CAAC;YAEF,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;gBAC9B,MAAM,IAAI,gBAAgB,CAAC,+BAA+B,KAAK,EAAE,CAAC,CAAC;YACrE,CAAC;YACD,MAAM,IAAI,gBAAgB,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACH,mBAAmB,CAAC,UAAqB;QACvC,yBAAyB;QACzB,MAAM,MAAM,GAAG,CAAC,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAC9D,MAAM,SAAS,GAAG,CAAC,UAAU,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QACpE,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,IAAI,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;QAC/B,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;QAE7B,uEAAuE;QACvE,MAAM,iBAAiB,GAA2B,EAAE,CAAC;QACrD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;YAC1C,MAAM,UAAU,GACd,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzE,iBAAiB,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC;QAC3C,CAAC;QAED,mCAAmC;QACnC,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAC1D,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CACjC,CAAC;QAEF,kCAAkC;QAClC,MAAM,KAAK,GAAa,CAAC,UAAU,MAAM,EAAE,EAAE,aAAa,SAAS,EAAE,CAAC,CAAC;QAEvE,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxE,KAAK,CAAC,IAAI,CAAC,WAAW,UAAU,EAAE,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;QAC/B,CAAC;QAED,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,SAAS,GAAG,MAAM;iBACrB,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;iBACxC,IAAI,EAAE;iBACN,IAAI,CAAC,GAAG,CAAC,CAAC;YACb,KAAK,CAAC,IAAI,CAAC,UAAU,SAAS,EAAE,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,IAAI,EAAE,CAAC;YACT,KAAK,CAAC,IAAI,CAAC,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED;;;;;;;;OAQG;IACH,gBAAgB,CAAC,MAAc;QAC7B,MAAM,UAAU,GAAG,MAAM,CAAC,eAAe,CAAC;QAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/B,CAAC;CACF"}
|
package/dist/llm.d.ts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM integration layer using AI SDK for provider-agnostic support.
|
|
3
|
+
* Implements structured outputs for guaranteed schema compliance.
|
|
4
|
+
*/
|
|
5
|
+
import type { JsonValue, JsonObject } from './utils.js';
|
|
6
|
+
export interface LLMConfig {
|
|
7
|
+
provider: 'anthropic' | 'openai' | 'cohere' | 'mistral' | 'google';
|
|
8
|
+
model: string;
|
|
9
|
+
apiKey: string;
|
|
10
|
+
maxTokens?: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Service for interacting with LLM APIs via AI SDK.
|
|
14
|
+
*/
|
|
15
|
+
export declare class LLMService {
|
|
16
|
+
private model;
|
|
17
|
+
private modelPromise;
|
|
18
|
+
private config;
|
|
19
|
+
private maxTokens;
|
|
20
|
+
constructor(config: LLMConfig);
|
|
21
|
+
/**
|
|
22
|
+
* Lazy initialization of LLM model
|
|
23
|
+
* Supports multiple providers with dynamic imports
|
|
24
|
+
*/
|
|
25
|
+
private initializeModel;
|
|
26
|
+
/**
|
|
27
|
+
* Load the model based on provider configuration
|
|
28
|
+
*/
|
|
29
|
+
private loadModel;
|
|
30
|
+
/**
|
|
31
|
+
* Call LLM with structured outputs (guaranteed schema compliance).
|
|
32
|
+
*
|
|
33
|
+
* Uses AI SDK's generateText to generate JSON responses that match
|
|
34
|
+
* the provided schema.
|
|
35
|
+
*
|
|
36
|
+
* Generic type T is constrained to JsonValue to ensure only serializable
|
|
37
|
+
* types can be returned, preventing type safety issues.
|
|
38
|
+
*
|
|
39
|
+
* @param prompt User prompt
|
|
40
|
+
* @param system System prompt
|
|
41
|
+
* @param jsonSchema JSON schema that response must follow
|
|
42
|
+
* @param temperature Sampling temperature (0.0 for deterministic)
|
|
43
|
+
* @param maxRetries Maximum number of retry attempts
|
|
44
|
+
* @returns Parsed JSON response matching the schema
|
|
45
|
+
* @throws LLMError if all retries fail
|
|
46
|
+
*/
|
|
47
|
+
callStructured<T extends JsonValue>(prompt: string, system: string, jsonSchema: JsonObject, temperature?: number, maxRetries?: number): Promise<T>;
|
|
48
|
+
/**
|
|
49
|
+
* Call LLM without structured outputs (basic text response).
|
|
50
|
+
*
|
|
51
|
+
* @param prompt User prompt
|
|
52
|
+
* @param system System prompt
|
|
53
|
+
* @param temperature Sampling temperature
|
|
54
|
+
* @param maxRetries Maximum number of retry attempts
|
|
55
|
+
* @returns Response text from LLM
|
|
56
|
+
* @throws LLMError if all retries fail
|
|
57
|
+
*/
|
|
58
|
+
call(prompt: string, system: string, temperature?: number, maxRetries?: number): Promise<string>;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=llm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IACnE,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,SAAS;IAK7B;;;OAGG;YACW,eAAe;IAa7B;;OAEG;YACW,SAAS;IAwDvB;;;;;;;;;;;;;;;;OAgBG;IACG,cAAc,CAAC,CAAC,SAAS,SAAS,EACtC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,WAAW,GAAE,MAAY,EACzB,UAAU,GAAE,MAAU,GACrB,OAAO,CAAC,CAAC,CAAC;IAsCb;;;;;;;;;OASG;IACG,IAAI,CACR,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,WAAW,GAAE,MAAY,EACzB,UAAU,GAAE,MAAU,GACrB,OAAO,CAAC,MAAM,CAAC;CA6BnB"}
|
package/dist/llm.js
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM integration layer using AI SDK for provider-agnostic support.
|
|
3
|
+
* Implements structured outputs for guaranteed schema compliance.
|
|
4
|
+
*/
|
|
5
|
+
import { generateText } from 'ai';
|
|
6
|
+
import { LLMError } from './errors.js';
|
|
7
|
+
/**
|
|
8
|
+
* Service for interacting with LLM APIs via AI SDK.
|
|
9
|
+
*/
|
|
10
|
+
export class LLMService {
|
|
11
|
+
model = null;
|
|
12
|
+
modelPromise = null;
|
|
13
|
+
config;
|
|
14
|
+
maxTokens;
|
|
15
|
+
constructor(config) {
|
|
16
|
+
this.config = config;
|
|
17
|
+
this.maxTokens = config.maxTokens || 2048;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Lazy initialization of LLM model
|
|
21
|
+
* Supports multiple providers with dynamic imports
|
|
22
|
+
*/
|
|
23
|
+
async initializeModel() {
|
|
24
|
+
if (this.model) {
|
|
25
|
+
return this.model;
|
|
26
|
+
}
|
|
27
|
+
if (this.modelPromise) {
|
|
28
|
+
return this.modelPromise;
|
|
29
|
+
}
|
|
30
|
+
this.modelPromise = this.loadModel();
|
|
31
|
+
return this.modelPromise;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Load the model based on provider configuration
|
|
35
|
+
*/
|
|
36
|
+
async loadModel() {
|
|
37
|
+
switch (this.config.provider) {
|
|
38
|
+
case 'anthropic': {
|
|
39
|
+
// Set environment variable for Anthropic
|
|
40
|
+
process.env.ANTHROPIC_API_KEY = this.config.apiKey;
|
|
41
|
+
const { anthropic } = await import('@ai-sdk/anthropic');
|
|
42
|
+
const model = anthropic(this.config.model);
|
|
43
|
+
this.model = model;
|
|
44
|
+
return model;
|
|
45
|
+
}
|
|
46
|
+
case 'openai': {
|
|
47
|
+
// Set environment variable for OpenAI
|
|
48
|
+
process.env.OPENAI_API_KEY = this.config.apiKey;
|
|
49
|
+
const { openai } = await import('@ai-sdk/openai');
|
|
50
|
+
const model = openai(this.config.model);
|
|
51
|
+
this.model = model;
|
|
52
|
+
return model;
|
|
53
|
+
}
|
|
54
|
+
case 'cohere': {
|
|
55
|
+
// Set environment variable for Cohere
|
|
56
|
+
process.env.COHERE_API_KEY = this.config.apiKey;
|
|
57
|
+
// @ts-expect-error - Optional peer dependency
|
|
58
|
+
const { cohere } = await import('@ai-sdk/cohere');
|
|
59
|
+
const model = cohere(this.config.model);
|
|
60
|
+
this.model = model;
|
|
61
|
+
return model;
|
|
62
|
+
}
|
|
63
|
+
case 'mistral': {
|
|
64
|
+
// Set environment variable for Mistral
|
|
65
|
+
process.env.MISTRAL_API_KEY = this.config.apiKey;
|
|
66
|
+
// @ts-expect-error - Optional peer dependency
|
|
67
|
+
const { mistral } = await import('@ai-sdk/mistral');
|
|
68
|
+
const model = mistral(this.config.model);
|
|
69
|
+
this.model = model;
|
|
70
|
+
return model;
|
|
71
|
+
}
|
|
72
|
+
case 'google': {
|
|
73
|
+
// Set environment variable for Google
|
|
74
|
+
process.env.GOOGLE_API_KEY = this.config.apiKey;
|
|
75
|
+
// @ts-expect-error - Optional peer dependency
|
|
76
|
+
const { google } = await import('@ai-sdk/google-vertex');
|
|
77
|
+
const model = google(this.config.model);
|
|
78
|
+
this.model = model;
|
|
79
|
+
return model;
|
|
80
|
+
}
|
|
81
|
+
default: {
|
|
82
|
+
throw new LLMError(`Unsupported provider: ${this.config.provider}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Call LLM with structured outputs (guaranteed schema compliance).
|
|
88
|
+
*
|
|
89
|
+
* Uses AI SDK's generateText to generate JSON responses that match
|
|
90
|
+
* the provided schema.
|
|
91
|
+
*
|
|
92
|
+
* Generic type T is constrained to JsonValue to ensure only serializable
|
|
93
|
+
* types can be returned, preventing type safety issues.
|
|
94
|
+
*
|
|
95
|
+
* @param prompt User prompt
|
|
96
|
+
* @param system System prompt
|
|
97
|
+
* @param jsonSchema JSON schema that response must follow
|
|
98
|
+
* @param temperature Sampling temperature (0.0 for deterministic)
|
|
99
|
+
* @param maxRetries Maximum number of retry attempts
|
|
100
|
+
* @returns Parsed JSON response matching the schema
|
|
101
|
+
* @throws LLMError if all retries fail
|
|
102
|
+
*/
|
|
103
|
+
async callStructured(prompt, system, jsonSchema, temperature = 0.0, maxRetries = 3) {
|
|
104
|
+
const model = await this.initializeModel();
|
|
105
|
+
// Add JSON schema to prompt
|
|
106
|
+
const enhancedPrompt = `${prompt}\n\nYou must respond with valid JSON matching this schema:\n${JSON.stringify(jsonSchema, null, 2)}`;
|
|
107
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
108
|
+
try {
|
|
109
|
+
const result = await generateText({
|
|
110
|
+
model,
|
|
111
|
+
system: `${system}\n\nAlways respond with valid JSON only, no additional text or formatting.`,
|
|
112
|
+
prompt: enhancedPrompt,
|
|
113
|
+
temperature,
|
|
114
|
+
maxOutputTokens: this.maxTokens,
|
|
115
|
+
});
|
|
116
|
+
// Parse JSON from response
|
|
117
|
+
const jsonText = result.text.trim();
|
|
118
|
+
// Remove markdown code blocks if present
|
|
119
|
+
const cleaned = jsonText.replace(/^```json\n?/, '').replace(/\n?```$/, '');
|
|
120
|
+
return JSON.parse(cleaned);
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
const waitTime = Math.pow(2, attempt); // Exponential backoff: 1s, 2s, 4s
|
|
124
|
+
if (attempt < maxRetries - 1) {
|
|
125
|
+
await new Promise((resolve) => setTimeout(resolve, waitTime * 1000));
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
throw new LLMError(`LLM API failed after ${maxRetries} attempts: ${error}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// TypeScript requires this, but we'll never reach it due to the throw above
|
|
133
|
+
throw new LLMError('Unexpected error in callStructured');
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Call LLM without structured outputs (basic text response).
|
|
137
|
+
*
|
|
138
|
+
* @param prompt User prompt
|
|
139
|
+
* @param system System prompt
|
|
140
|
+
* @param temperature Sampling temperature
|
|
141
|
+
* @param maxRetries Maximum number of retry attempts
|
|
142
|
+
* @returns Response text from LLM
|
|
143
|
+
* @throws LLMError if all retries fail
|
|
144
|
+
*/
|
|
145
|
+
async call(prompt, system, temperature = 0.0, maxRetries = 3) {
|
|
146
|
+
const model = await this.initializeModel();
|
|
147
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
148
|
+
try {
|
|
149
|
+
const result = await generateText({
|
|
150
|
+
model,
|
|
151
|
+
system,
|
|
152
|
+
prompt,
|
|
153
|
+
temperature,
|
|
154
|
+
maxOutputTokens: this.maxTokens,
|
|
155
|
+
});
|
|
156
|
+
return result.text;
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
const waitTime = Math.pow(2, attempt); // Exponential backoff
|
|
160
|
+
if (attempt < maxRetries - 1) {
|
|
161
|
+
await new Promise((resolve) => setTimeout(resolve, waitTime * 1000));
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
throw new LLMError(`LLM API failed after ${maxRetries} attempts: ${error}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
throw new LLMError('Unexpected error in call');
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=llm.js.map
|
package/dist/llm.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm.js","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAUvC;;GAEG;AACH,MAAM,OAAO,UAAU;IACb,KAAK,GAAyB,IAAI,CAAC;IACnC,YAAY,GAAkC,IAAI,CAAC;IACnD,MAAM,CAAY;IAClB,SAAS,CAAS;IAE1B,YAAY,MAAiB;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC;IAC5C,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,eAAe;QAC3B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,YAAY,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,SAAS;QACrB,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC7B,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,yCAAyC;gBACzC,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;gBACnD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;gBACxD,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC3C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;gBACnB,OAAO,KAAK,CAAC;YACf,CAAC;YAED,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;gBAChD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;gBAClD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACxC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;gBACnB,OAAO,KAAK,CAAC;YACf,CAAC;YAED,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;gBAChD,8CAA8C;gBAC9C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;gBAClD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACxC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;gBACnB,OAAO,KAAK,CAAC;YACf,CAAC;YAED,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,uCAAuC;gBACvC,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;gBACjD,8CAA8C;gBAC9C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;gBACpD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACzC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;gBACnB,OAAO,KAAK,CAAC;YACf,CAAC;YAED,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;gBAChD,8CAA8C;gBAC9C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;gBACzD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACxC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;gBACnB,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,QAAQ,CAAC,yBAAyB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK,CAAC,cAAc,CAClB,MAAc,EACd,MAAc,EACd,UAAsB,EACtB,cAAsB,GAAG,EACzB,aAAqB,CAAC;QAEtB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAE3C,4BAA4B;QAC5B,MAAM,cAAc,GAAG,GAAG,MAAM,+DAA+D,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QAErI,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;YACtD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;oBAChC,KAAK;oBACL,MAAM,EAAE,GAAG,MAAM,4EAA4E;oBAC7F,MAAM,EAAE,cAAc;oBACtB,WAAW;oBACX,eAAe,EAAE,IAAI,CAAC,SAAS;iBAChC,CAAC,CAAC;gBAEH,2BAA2B;gBAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACpC,yCAAyC;gBACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;gBAC3E,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAM,CAAC;YAClC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,kCAAkC;gBAEzE,IAAI,OAAO,GAAG,UAAU,GAAG,CAAC,EAAE,CAAC;oBAC7B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC;gBACvE,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,QAAQ,CAChB,wBAAwB,UAAU,cAAc,KAAK,EAAE,CACxD,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,4EAA4E;QAC5E,MAAM,IAAI,QAAQ,CAAC,oCAAoC,CAAC,CAAC;IAC3D,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,IAAI,CACR,MAAc,EACd,MAAc,EACd,cAAsB,GAAG,EACzB,aAAqB,CAAC;QAEtB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAE3C,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;YACtD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;oBAChC,KAAK;oBACL,MAAM;oBACN,MAAM;oBACN,WAAW;oBACX,eAAe,EAAE,IAAI,CAAC,SAAS;iBAChC,CAAC,CAAC;gBAEH,OAAO,MAAM,CAAC,IAAI,CAAC;YACrB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,sBAAsB;gBAE7D,IAAI,OAAO,GAAG,UAAU,GAAG,CAAC,EAAE,CAAC;oBAC7B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC;gBACvE,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,QAAQ,CAChB,wBAAwB,UAAU,cAAc,KAAK,EAAE,CACxD,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,IAAI,QAAQ,CAAC,0BAA0B,CAAC,CAAC;IACjD,CAAC;CACF"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript types for nttp
|
|
3
|
+
*/
|
|
4
|
+
import type { Knex } from 'knex';
|
|
5
|
+
import type { JsonValue, JsonObject, FilterConditions, SortSpec, OperationType } from './utils.js';
|
|
6
|
+
export type { JsonValue, JsonObject, FilterConditions, SortSpec, OperationType, } from './utils.js';
|
|
7
|
+
/**
|
|
8
|
+
* nttp configuration
|
|
9
|
+
*/
|
|
10
|
+
export interface NTTPConfig {
|
|
11
|
+
/**
|
|
12
|
+
* Database configuration (Knex.js config)
|
|
13
|
+
*/
|
|
14
|
+
database: Knex.Config;
|
|
15
|
+
/**
|
|
16
|
+
* LLM configuration
|
|
17
|
+
*/
|
|
18
|
+
llm: {
|
|
19
|
+
/**
|
|
20
|
+
* LLM provider
|
|
21
|
+
*/
|
|
22
|
+
provider: 'anthropic' | 'openai' | 'cohere' | 'mistral' | 'google';
|
|
23
|
+
/**
|
|
24
|
+
* Model name
|
|
25
|
+
* @example "claude-sonnet-4-5-20250929"
|
|
26
|
+
* @example "gpt-4o"
|
|
27
|
+
* @example "command-r-plus"
|
|
28
|
+
*/
|
|
29
|
+
model: string;
|
|
30
|
+
/**
|
|
31
|
+
* API key for the provider
|
|
32
|
+
*/
|
|
33
|
+
apiKey: string;
|
|
34
|
+
/**
|
|
35
|
+
* Maximum tokens for LLM responses
|
|
36
|
+
* @default 2048
|
|
37
|
+
*/
|
|
38
|
+
maxTokens?: number;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Query limits
|
|
42
|
+
*/
|
|
43
|
+
limits?: {
|
|
44
|
+
/**
|
|
45
|
+
* Maximum query length
|
|
46
|
+
* @default 500
|
|
47
|
+
*/
|
|
48
|
+
maxQueryLength?: number;
|
|
49
|
+
/**
|
|
50
|
+
* Default result limit
|
|
51
|
+
* @default 100
|
|
52
|
+
*/
|
|
53
|
+
defaultLimit?: number;
|
|
54
|
+
/**
|
|
55
|
+
* Maximum result limit
|
|
56
|
+
* @default 1000
|
|
57
|
+
*/
|
|
58
|
+
maxLimit?: number;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* 3-layer cache configuration
|
|
62
|
+
*/
|
|
63
|
+
cache?: {
|
|
64
|
+
/**
|
|
65
|
+
* L1 exact match cache configuration
|
|
66
|
+
*/
|
|
67
|
+
l1?: {
|
|
68
|
+
/**
|
|
69
|
+
* Enable L1 cache
|
|
70
|
+
* @default true
|
|
71
|
+
*/
|
|
72
|
+
enabled?: boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Maximum cache size
|
|
75
|
+
* @default 1000
|
|
76
|
+
*/
|
|
77
|
+
maxSize?: number;
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* L2 semantic cache configuration
|
|
81
|
+
*/
|
|
82
|
+
l2?: {
|
|
83
|
+
/**
|
|
84
|
+
* Enable L2 cache
|
|
85
|
+
* @default true
|
|
86
|
+
*/
|
|
87
|
+
enabled?: boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Embedding provider
|
|
90
|
+
*/
|
|
91
|
+
provider: 'openai' | 'cohere' | 'mistral' | 'google';
|
|
92
|
+
/**
|
|
93
|
+
* Embedding model name
|
|
94
|
+
*/
|
|
95
|
+
model: string;
|
|
96
|
+
/**
|
|
97
|
+
* Similarity threshold (0-1)
|
|
98
|
+
* @default 0.85
|
|
99
|
+
*/
|
|
100
|
+
threshold?: number;
|
|
101
|
+
/**
|
|
102
|
+
* Maximum cache size
|
|
103
|
+
* @default 500
|
|
104
|
+
*/
|
|
105
|
+
maxSize?: number;
|
|
106
|
+
/**
|
|
107
|
+
* API key for embedding provider
|
|
108
|
+
*/
|
|
109
|
+
apiKey?: string;
|
|
110
|
+
};
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Options for query execution
|
|
115
|
+
*/
|
|
116
|
+
export interface QueryOptions {
|
|
117
|
+
/**
|
|
118
|
+
* Use schema cache
|
|
119
|
+
* @default true
|
|
120
|
+
*/
|
|
121
|
+
useCache?: boolean;
|
|
122
|
+
/**
|
|
123
|
+
* Force generation of new schema
|
|
124
|
+
* @default false
|
|
125
|
+
*/
|
|
126
|
+
forceNewSchema?: boolean;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* L1 Cache metadata (exact match, no cost).
|
|
130
|
+
*/
|
|
131
|
+
export interface L1CacheMeta {
|
|
132
|
+
readonly cacheLayer: 1;
|
|
133
|
+
readonly cost: 0;
|
|
134
|
+
readonly latency: number;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* L2 Cache metadata (semantic match with similarity score).
|
|
138
|
+
*/
|
|
139
|
+
export interface L2CacheMeta {
|
|
140
|
+
readonly cacheLayer: 2;
|
|
141
|
+
readonly cost: number;
|
|
142
|
+
readonly latency: number;
|
|
143
|
+
readonly similarity: number;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* L3 Cache metadata (LLM generation, highest cost).
|
|
147
|
+
*/
|
|
148
|
+
export interface L3CacheMeta {
|
|
149
|
+
readonly cacheLayer: 3;
|
|
150
|
+
readonly cost: number;
|
|
151
|
+
readonly latency: number;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Discriminated union for query result metadata.
|
|
155
|
+
* Ensures type-safe access to layer-specific fields.
|
|
156
|
+
*/
|
|
157
|
+
export type QueryResultMeta = L1CacheMeta | L2CacheMeta | L3CacheMeta;
|
|
158
|
+
/**
|
|
159
|
+
* Query result
|
|
160
|
+
*/
|
|
161
|
+
export interface QueryResult {
|
|
162
|
+
/**
|
|
163
|
+
* Original query string
|
|
164
|
+
*/
|
|
165
|
+
query: string;
|
|
166
|
+
/**
|
|
167
|
+
* Query results
|
|
168
|
+
*/
|
|
169
|
+
data: JsonObject[];
|
|
170
|
+
/**
|
|
171
|
+
* Schema ID for caching
|
|
172
|
+
*/
|
|
173
|
+
schemaId: string;
|
|
174
|
+
/**
|
|
175
|
+
* Whether result came from cache
|
|
176
|
+
*/
|
|
177
|
+
cacheHit: boolean;
|
|
178
|
+
/**
|
|
179
|
+
* Execution time in milliseconds
|
|
180
|
+
*/
|
|
181
|
+
executionTimeMs: number;
|
|
182
|
+
/**
|
|
183
|
+
* Parsed intent
|
|
184
|
+
*/
|
|
185
|
+
intent: Intent;
|
|
186
|
+
/**
|
|
187
|
+
* Generated SQL (for debugging)
|
|
188
|
+
*/
|
|
189
|
+
sql?: string;
|
|
190
|
+
/**
|
|
191
|
+
* SQL parameters (for debugging)
|
|
192
|
+
*/
|
|
193
|
+
params?: JsonValue[];
|
|
194
|
+
/**
|
|
195
|
+
* Cache metadata (optional)
|
|
196
|
+
* Uses discriminated union for type-safe access to layer-specific fields
|
|
197
|
+
*/
|
|
198
|
+
meta?: QueryResultMeta;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Parsed intent from natural language
|
|
202
|
+
*/
|
|
203
|
+
export interface Intent {
|
|
204
|
+
/**
|
|
205
|
+
* Database entity (table name)
|
|
206
|
+
*/
|
|
207
|
+
entity: string;
|
|
208
|
+
/**
|
|
209
|
+
* Operation type
|
|
210
|
+
*/
|
|
211
|
+
operation: OperationType;
|
|
212
|
+
/**
|
|
213
|
+
* Filter conditions
|
|
214
|
+
*/
|
|
215
|
+
filters?: FilterConditions;
|
|
216
|
+
/**
|
|
217
|
+
* Result limit
|
|
218
|
+
*/
|
|
219
|
+
limit?: number | null;
|
|
220
|
+
/**
|
|
221
|
+
* Fields to select
|
|
222
|
+
*/
|
|
223
|
+
fields?: string[] | null;
|
|
224
|
+
/**
|
|
225
|
+
* Sort configuration (format: "field:direction")
|
|
226
|
+
* @example "created_at:desc"
|
|
227
|
+
*/
|
|
228
|
+
sort?: SortSpec | null;
|
|
229
|
+
/**
|
|
230
|
+
* Normalized intent string
|
|
231
|
+
*/
|
|
232
|
+
normalized_text: string;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Cached schema definition
|
|
236
|
+
*/
|
|
237
|
+
export interface SchemaDefinition {
|
|
238
|
+
/**
|
|
239
|
+
* Unique schema ID
|
|
240
|
+
*/
|
|
241
|
+
schema_id: string;
|
|
242
|
+
/**
|
|
243
|
+
* Intent pattern this schema represents
|
|
244
|
+
*/
|
|
245
|
+
intent_pattern: string;
|
|
246
|
+
/**
|
|
247
|
+
* Generated SQL query
|
|
248
|
+
*/
|
|
249
|
+
generated_sql: string;
|
|
250
|
+
/**
|
|
251
|
+
* SQL query parameters
|
|
252
|
+
*/
|
|
253
|
+
sql_params: JsonValue[];
|
|
254
|
+
/**
|
|
255
|
+
* JSON schema for results
|
|
256
|
+
*/
|
|
257
|
+
result_schema: JsonObject;
|
|
258
|
+
/**
|
|
259
|
+
* Number of times this schema was used
|
|
260
|
+
*/
|
|
261
|
+
use_count: number;
|
|
262
|
+
/**
|
|
263
|
+
* Whether schema is pinned
|
|
264
|
+
*/
|
|
265
|
+
pinned: boolean;
|
|
266
|
+
/**
|
|
267
|
+
* Example queries that use this schema
|
|
268
|
+
*/
|
|
269
|
+
example_queries: string[];
|
|
270
|
+
/**
|
|
271
|
+
* When schema was created
|
|
272
|
+
*/
|
|
273
|
+
created_at: Date;
|
|
274
|
+
/**
|
|
275
|
+
* When schema was last used
|
|
276
|
+
*/
|
|
277
|
+
last_used_at: Date;
|
|
278
|
+
}
|
|
279
|
+
export type { CacheStats } from './cache/types.js';
|
|
280
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core type utilities for NTTP package.
|
|
3
|
+
* These types replace 'any' usage and provide strict type safety.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Primitive JSON values.
|
|
7
|
+
*/
|
|
8
|
+
export type JsonPrimitive = string | number | boolean | null;
|
|
9
|
+
/**
|
|
10
|
+
* Recursive JSON value type.
|
|
11
|
+
* Replaces 'any' for data that must be serializable.
|
|
12
|
+
*/
|
|
13
|
+
export type JsonValue = JsonPrimitive | JsonObject | JsonArray;
|
|
14
|
+
/**
|
|
15
|
+
* JSON object type - strictly typed alternative to Record<string, any>
|
|
16
|
+
*/
|
|
17
|
+
export interface JsonObject {
|
|
18
|
+
[key: string]: JsonValue;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* JSON array type
|
|
22
|
+
*/
|
|
23
|
+
export interface JsonArray extends Array<JsonValue> {
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Specific type for database filter values.
|
|
27
|
+
* Supports primitives and arrays of primitives for IN clauses.
|
|
28
|
+
*/
|
|
29
|
+
export type FilterValue = JsonPrimitive | JsonPrimitive[];
|
|
30
|
+
/**
|
|
31
|
+
* Database filter conditions.
|
|
32
|
+
* Replaces Record<string, any> in intent parsing.
|
|
33
|
+
*/
|
|
34
|
+
export type FilterConditions = Record<string, FilterValue>;
|
|
35
|
+
/**
|
|
36
|
+
* Sort direction for query results.
|
|
37
|
+
*/
|
|
38
|
+
export type SortDirection = "asc" | "desc";
|
|
39
|
+
/**
|
|
40
|
+
* Sort specification in format "field:direction"
|
|
41
|
+
* Template literal type ensures compile-time validation.
|
|
42
|
+
* @example "created_at:desc" | "name:asc"
|
|
43
|
+
*/
|
|
44
|
+
export type SortSpec = `${string}:${SortDirection}`;
|
|
45
|
+
/**
|
|
46
|
+
* Database operation types.
|
|
47
|
+
*/
|
|
48
|
+
export type OperationType = "list" | "count" | "aggregate" | "filter";
|
|
49
|
+
/**
|
|
50
|
+
* Validates if a string matches the SortSpec format at runtime.
|
|
51
|
+
* Use this as a type guard or in Zod schemas.
|
|
52
|
+
*/
|
|
53
|
+
export declare function isSortSpec(value: string): value is SortSpec;
|
|
54
|
+
/**
|
|
55
|
+
* Parses a sort specification into its components.
|
|
56
|
+
*/
|
|
57
|
+
export declare function parseSortSpec(spec: SortSpec): {
|
|
58
|
+
field: string;
|
|
59
|
+
direction: SortDirection;
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAE7D;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC;CAAG;AAEtD;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,aAAa,EAAE,CAAC;AAE1D;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAE3D;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;AAE3C;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,GAAG,MAAM,IAAI,aAAa,EAAE,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEtE;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,QAAQ,CAE3D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,aAAa,CAAC;CACzB,CAGA"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core type utilities for NTTP package.
|
|
3
|
+
* These types replace 'any' usage and provide strict type safety.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Validates if a string matches the SortSpec format at runtime.
|
|
7
|
+
* Use this as a type guard or in Zod schemas.
|
|
8
|
+
*/
|
|
9
|
+
export function isSortSpec(value) {
|
|
10
|
+
return /^[\w_]+:(asc|desc)$/.test(value);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Parses a sort specification into its components.
|
|
14
|
+
*/
|
|
15
|
+
export function parseSortSpec(spec) {
|
|
16
|
+
const [field, direction] = spec.split(":");
|
|
17
|
+
return { field, direction };
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAsDH;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa;IACvC,OAAO,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAc;IAI3C,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;IACtE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC7B,CAAC"}
|