@askdb/core 1.0.0-beta.40 → 1.0.0-beta.42
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 +39 -1
- package/dist/ask.d.ts +48 -0
- package/dist/ask.d.ts.map +1 -1
- package/dist/ask.js +176 -10
- package/dist/ask.js.map +1 -1
- package/dist/enrichment/suggest.d.ts +7 -0
- package/dist/enrichment/suggest.d.ts.map +1 -1
- package/dist/enrichment/suggest.js +7 -1
- package/dist/enrichment/suggest.js.map +1 -1
- package/dist/errors.d.ts +49 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +20 -0
- package/dist/errors.js.map +1 -1
- package/dist/exec/postgres.d.ts +6 -0
- package/dist/exec/postgres.d.ts.map +1 -0
- package/dist/exec/postgres.js +30 -0
- package/dist/exec/postgres.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/logging/log-events.d.ts +13 -0
- package/dist/logging/log-events.d.ts.map +1 -1
- package/dist/logging/log-events.js +13 -0
- package/dist/logging/log-events.js.map +1 -1
- package/dist/modes/post-execute-log.d.ts +9 -0
- package/dist/modes/post-execute-log.d.ts.map +1 -0
- package/dist/modes/post-execute-log.js +26 -0
- package/dist/modes/post-execute-log.js.map +1 -0
- package/dist/sql/bind.d.ts +100 -0
- package/dist/sql/bind.d.ts.map +1 -0
- package/dist/sql/bind.js +560 -0
- package/dist/sql/bind.js.map +1 -0
- package/dist/sql/dialect-spec.d.ts +4 -0
- package/dist/sql/dialect-spec.d.ts.map +1 -1
- package/dist/sql/dialect-spec.js +8 -0
- package/dist/sql/dialect-spec.js.map +1 -1
- package/dist/sql/extract-sql.d.ts +8 -1
- package/dist/sql/extract-sql.d.ts.map +1 -1
- package/dist/sql/extract-sql.js +27 -4
- package/dist/sql/extract-sql.js.map +1 -1
- package/dist/sql/generate.d.ts +19 -0
- package/dist/sql/generate.d.ts.map +1 -1
- package/dist/sql/generate.js +79 -5
- package/dist/sql/generate.js.map +1 -1
- package/dist/sql/index.d.ts +4 -2
- package/dist/sql/index.d.ts.map +1 -1
- package/dist/sql/index.js +4 -2
- package/dist/sql/index.js.map +1 -1
- package/dist/sql/parameter-manifest.d.ts +34 -0
- package/dist/sql/parameter-manifest.d.ts.map +1 -0
- package/dist/sql/parameter-manifest.js +150 -0
- package/dist/sql/parameter-manifest.js.map +1 -0
- package/dist/sql/prompt.d.ts +7 -1
- package/dist/sql/prompt.d.ts.map +1 -1
- package/dist/sql/prompt.js +24 -1
- package/dist/sql/prompt.js.map +1 -1
- package/dist/sql/sensitive-guardrail.d.ts +47 -0
- package/dist/sql/sensitive-guardrail.d.ts.map +1 -0
- package/dist/sql/sensitive-guardrail.js +589 -0
- package/dist/sql/sensitive-guardrail.js.map +1 -0
- package/dist/sql/tenant-placeholders.d.ts +3 -2
- package/dist/sql/tenant-placeholders.d.ts.map +1 -1
- package/dist/sql/tenant-placeholders.js +14 -11
- package/dist/sql/tenant-placeholders.js.map +1 -1
- package/dist/sql/validate.d.ts.map +1 -1
- package/dist/sql/validate.js +1 -47
- package/dist/sql/validate.js.map +1 -1
- package/package.json +6 -5
- package/dist/ai/provider.d.ts +0 -116
- package/dist/ai/provider.d.ts.map +0 -1
- package/dist/ai/provider.js +0 -255
- package/dist/ai/provider.js.map +0 -1
package/dist/ai/provider.js
DELETED
|
@@ -1,255 +0,0 @@
|
|
|
1
|
-
import { createOpenAI } from "@ai-sdk/openai";
|
|
2
|
-
const DEFAULT_MODEL = "gpt-4o-mini";
|
|
3
|
-
const DEFAULT_EMBEDDING_MODEL = "text-embedding-3-small";
|
|
4
|
-
function readProvider(env) {
|
|
5
|
-
const raw = (env.ASKDB_AI_PROVIDER ?? "").toLowerCase().trim();
|
|
6
|
-
if (raw === "" || raw === "openai")
|
|
7
|
-
return "openai";
|
|
8
|
-
if (raw === "azure" || raw === "azure-openai" || raw === "foundry")
|
|
9
|
-
return "azure";
|
|
10
|
-
if (raw === "google")
|
|
11
|
-
return "google";
|
|
12
|
-
throw new Error(`Unknown ASKDB_AI_PROVIDER "${env.ASKDB_AI_PROVIDER}". Expected "openai", "azure", or "google".`);
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Resolves a provider config from environment variables. Returns `undefined`
|
|
16
|
-
* if no API key is configured (callers treat this as "AI is disabled" rather
|
|
17
|
-
* than erroring, so AI features can be optional).
|
|
18
|
-
*
|
|
19
|
-
* BYO-key design: each provider has its native env vars (e.g. `OPENAI_API_KEY`
|
|
20
|
-
* for OpenAI, `AZURE_OPENAI_API_KEY` for Azure / Foundry). The `ASKDB_AI_*`
|
|
21
|
-
* family is a universal alias set that works across providers — useful when
|
|
22
|
-
* you want a single set of names across deployments.
|
|
23
|
-
*
|
|
24
|
-
* Precedence for the API key (within the selected provider):
|
|
25
|
-
* 1. `ASKDB_AI_API_KEY` — universal alias (primary)
|
|
26
|
-
* 2. provider-native primary — `OPENAI_API_KEY` or `AZURE_OPENAI_API_KEY` / `AZURE_API_KEY`
|
|
27
|
-
* 3. provider-native secondary — `OPENAI_API_KEY_SECONDARY` or `AZURE_OPENAI_API_KEY_SECONDARY`
|
|
28
|
-
* 4. `ASKDB_AI_API_KEY_SECONDARY` — universal rotation fallback
|
|
29
|
-
*
|
|
30
|
-
* **Important:** Only `@askdb/config` reads `process.env` (during dotenv load and while evaluating
|
|
31
|
-
* `askdb.config.*`). Pass `getAskDbRuntimeConfig().ai.aiEnv` from `@askdb/config` after
|
|
32
|
-
* `bootstrapAskDbEnv()`, or an explicit plain object in tests.
|
|
33
|
-
*
|
|
34
|
-
* @param env - String map in the shape of canonical AskDB env keys (from the runtime snapshot).
|
|
35
|
-
* @param options - Optional per-app overrides (e.g. a per-app model env var).
|
|
36
|
-
*/
|
|
37
|
-
export function resolveAskDbAiConfig(env, options = {}) {
|
|
38
|
-
const provider = readProvider(env);
|
|
39
|
-
const providerNativeKey = provider === "azure"
|
|
40
|
-
? env.AZURE_OPENAI_API_KEY || env.AZURE_API_KEY
|
|
41
|
-
: provider === "google"
|
|
42
|
-
? env.GOOGLE_GENERATIVE_AI_API_KEY || env.GOOGLE_AI_API_KEY
|
|
43
|
-
: env.OPENAI_API_KEY;
|
|
44
|
-
const providerNativeKeySecondary = provider === "azure"
|
|
45
|
-
? env.AZURE_OPENAI_API_KEY_SECONDARY || env.AZURE_API_KEY_SECONDARY
|
|
46
|
-
: env.OPENAI_API_KEY_SECONDARY;
|
|
47
|
-
const apiKey = env.ASKDB_AI_API_KEY ||
|
|
48
|
-
providerNativeKey ||
|
|
49
|
-
providerNativeKeySecondary ||
|
|
50
|
-
env.ASKDB_AI_API_KEY_SECONDARY ||
|
|
51
|
-
undefined;
|
|
52
|
-
if (!apiKey)
|
|
53
|
-
return undefined;
|
|
54
|
-
const providerNativeModel = provider === "azure"
|
|
55
|
-
? env.AZURE_OPENAI_DEPLOYMENT || env.AZURE_DEPLOYMENT_NAME
|
|
56
|
-
: provider === "google"
|
|
57
|
-
? env.GOOGLE_AI_MODEL
|
|
58
|
-
: env.OPENAI_MODEL;
|
|
59
|
-
const model = env.ASKDB_AI_MODEL ||
|
|
60
|
-
env.ASKDB_MODEL ||
|
|
61
|
-
providerNativeModel ||
|
|
62
|
-
options.modelDefault ||
|
|
63
|
-
DEFAULT_MODEL;
|
|
64
|
-
const providerNativeBaseURL = provider === "azure"
|
|
65
|
-
? env.AZURE_OPENAI_BASE_URL || env.AZURE_OPENAI_ENDPOINT || env.AZURE_BASE_URL
|
|
66
|
-
: provider === "google"
|
|
67
|
-
? env.GOOGLE_AI_BASE_URL
|
|
68
|
-
: env.OPENAI_BASE_URL;
|
|
69
|
-
const baseURL = env.ASKDB_AI_BASE_URL || providerNativeBaseURL || undefined;
|
|
70
|
-
const resourceName = env.ASKDB_AI_AZURE_RESOURCE_NAME || env.AZURE_RESOURCE_NAME || undefined;
|
|
71
|
-
const apiVersion = env.ASKDB_AI_AZURE_API_VERSION || env.AZURE_OPENAI_API_VERSION || env.AZURE_API_VERSION || undefined;
|
|
72
|
-
if (provider === "azure" && !baseURL && !resourceName) {
|
|
73
|
-
throw new Error("Azure provider requires ASKDB_AI_AZURE_RESOURCE_NAME (e.g. 'my-foundry') " +
|
|
74
|
-
"or ASKDB_AI_BASE_URL pointing at the full endpoint.");
|
|
75
|
-
}
|
|
76
|
-
return {
|
|
77
|
-
provider,
|
|
78
|
-
apiKey,
|
|
79
|
-
model,
|
|
80
|
-
...(baseURL ? { baseURL } : {}),
|
|
81
|
-
...(resourceName ? { resourceName } : {}),
|
|
82
|
-
...(apiVersion ? { apiVersion } : {}),
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Resolves an embedding model config from the same provider/key/base URL
|
|
87
|
-
* connection as `resolveAskDbAiConfig`, but with embedding-specific model
|
|
88
|
-
* precedence so chat model ids (for example `gpt-4o`) are not used as
|
|
89
|
-
* embedding model ids by accident.
|
|
90
|
-
*
|
|
91
|
-
* **Important:** Only `@askdb/config` reads `process.env` (during dotenv load and while evaluating
|
|
92
|
-
* `askdb.config.*`). Pass `getAskDbRuntimeConfig().ai.aiEnv` from `@askdb/config` after
|
|
93
|
-
* `bootstrapAskDbEnv()`, or an explicit plain object in tests.
|
|
94
|
-
*
|
|
95
|
-
* @param env - String map in the shape of canonical AskDB env keys (from the runtime snapshot).
|
|
96
|
-
* @param options - Optional per-app overrides (e.g. a per-app embedding model env var).
|
|
97
|
-
*/
|
|
98
|
-
export function resolveAskDbEmbeddingConfig(env, options = {}) {
|
|
99
|
-
const provider = readProvider(env);
|
|
100
|
-
const providerNativeKey = provider === "azure"
|
|
101
|
-
? env.AZURE_OPENAI_API_KEY || env.AZURE_API_KEY
|
|
102
|
-
: provider === "google"
|
|
103
|
-
? env.GOOGLE_GENERATIVE_AI_API_KEY || env.GOOGLE_AI_API_KEY
|
|
104
|
-
: env.OPENAI_API_KEY;
|
|
105
|
-
const providerNativeKeySecondary = provider === "azure"
|
|
106
|
-
? env.AZURE_OPENAI_API_KEY_SECONDARY || env.AZURE_API_KEY_SECONDARY
|
|
107
|
-
: env.OPENAI_API_KEY_SECONDARY;
|
|
108
|
-
const apiKey = env.ASKDB_AI_API_KEY ||
|
|
109
|
-
providerNativeKey ||
|
|
110
|
-
providerNativeKeySecondary ||
|
|
111
|
-
env.ASKDB_AI_API_KEY_SECONDARY ||
|
|
112
|
-
undefined;
|
|
113
|
-
if (!apiKey)
|
|
114
|
-
return undefined;
|
|
115
|
-
const perAppModel = options.modelEnvVar ? env[options.modelEnvVar] : undefined;
|
|
116
|
-
const providerNativeModel = provider === "azure"
|
|
117
|
-
? env.AZURE_OPENAI_EMBEDDING_DEPLOYMENT ||
|
|
118
|
-
env.AZURE_EMBEDDING_DEPLOYMENT_NAME
|
|
119
|
-
: provider === "google"
|
|
120
|
-
? env.GOOGLE_AI_EMBEDDING_MODEL
|
|
121
|
-
: env.OPENAI_EMBEDDING_MODEL;
|
|
122
|
-
const model = perAppModel ||
|
|
123
|
-
env.ASKDB_AI_EMBEDDING_MODEL ||
|
|
124
|
-
env.ASKDB_EMBEDDING_MODEL ||
|
|
125
|
-
providerNativeModel ||
|
|
126
|
-
options.modelDefault ||
|
|
127
|
-
DEFAULT_EMBEDDING_MODEL;
|
|
128
|
-
const providerNativeBaseURL = provider === "azure"
|
|
129
|
-
? env.AZURE_OPENAI_BASE_URL || env.AZURE_OPENAI_ENDPOINT || env.AZURE_BASE_URL
|
|
130
|
-
: provider === "google"
|
|
131
|
-
? env.GOOGLE_AI_BASE_URL
|
|
132
|
-
: env.OPENAI_BASE_URL;
|
|
133
|
-
const baseURL = env.ASKDB_AI_BASE_URL || providerNativeBaseURL || undefined;
|
|
134
|
-
const resourceName = env.ASKDB_AI_AZURE_RESOURCE_NAME || env.AZURE_RESOURCE_NAME || undefined;
|
|
135
|
-
const apiVersion = env.ASKDB_AI_AZURE_API_VERSION || env.AZURE_OPENAI_API_VERSION || env.AZURE_API_VERSION || undefined;
|
|
136
|
-
if (provider === "azure" && !baseURL && !resourceName) {
|
|
137
|
-
throw new Error("Azure provider requires ASKDB_AI_AZURE_RESOURCE_NAME (e.g. 'my-foundry') " +
|
|
138
|
-
"or ASKDB_AI_BASE_URL pointing at the full endpoint.");
|
|
139
|
-
}
|
|
140
|
-
return {
|
|
141
|
-
provider,
|
|
142
|
-
apiKey,
|
|
143
|
-
model,
|
|
144
|
-
...(baseURL ? { baseURL } : {}),
|
|
145
|
-
...(resourceName ? { resourceName } : {}),
|
|
146
|
-
...(apiVersion ? { apiVersion } : {}),
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
/** Build a {@link LanguageModel} from an already-resolved config. */
|
|
150
|
-
export async function createAskDbLanguageModel(config) {
|
|
151
|
-
if (config.provider === "azure") {
|
|
152
|
-
// Lazy-loaded so `@ai-sdk/azure` is only required when actually used.
|
|
153
|
-
const { createAzure } = await import("@ai-sdk/azure");
|
|
154
|
-
const azure = createAzure({
|
|
155
|
-
apiKey: config.apiKey,
|
|
156
|
-
...(config.resourceName ? { resourceName: config.resourceName } : {}),
|
|
157
|
-
...(config.baseURL ? { baseURL: config.baseURL } : {}),
|
|
158
|
-
...(config.apiVersion ? { apiVersion: config.apiVersion } : {}),
|
|
159
|
-
});
|
|
160
|
-
return azure(config.model);
|
|
161
|
-
}
|
|
162
|
-
if (config.provider === "google") {
|
|
163
|
-
// Lazy-loaded so `@ai-sdk/google` is only required when actually used.
|
|
164
|
-
const { createGoogleGenerativeAI } = await import("@ai-sdk/google");
|
|
165
|
-
const google = createGoogleGenerativeAI({
|
|
166
|
-
apiKey: config.apiKey,
|
|
167
|
-
...(config.baseURL ? { baseURL: config.baseURL } : {}),
|
|
168
|
-
});
|
|
169
|
-
return google(config.model);
|
|
170
|
-
}
|
|
171
|
-
const openai = createOpenAI({
|
|
172
|
-
apiKey: config.apiKey,
|
|
173
|
-
...(config.baseURL ? { baseURL: config.baseURL } : {}),
|
|
174
|
-
});
|
|
175
|
-
return openai(config.model);
|
|
176
|
-
}
|
|
177
|
-
/** Build an AI SDK text embedding model from an already-resolved config. */
|
|
178
|
-
export async function createAskDbEmbeddingModel(config, options = {}) {
|
|
179
|
-
if (config.provider === "azure") {
|
|
180
|
-
const { createAzure } = await import("@ai-sdk/azure");
|
|
181
|
-
const azure = createAzure({
|
|
182
|
-
apiKey: config.apiKey,
|
|
183
|
-
...(config.resourceName ? { resourceName: config.resourceName } : {}),
|
|
184
|
-
...(config.baseURL ? { baseURL: config.baseURL } : {}),
|
|
185
|
-
...(config.apiVersion ? { apiVersion: config.apiVersion } : {}),
|
|
186
|
-
});
|
|
187
|
-
return azure.embedding(config.model, {
|
|
188
|
-
dimensions: options.dimensions,
|
|
189
|
-
user: options.user,
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
if (config.provider === "google") {
|
|
193
|
-
const { createGoogleGenerativeAI } = await import("@ai-sdk/google");
|
|
194
|
-
const google = createGoogleGenerativeAI({
|
|
195
|
-
apiKey: config.apiKey,
|
|
196
|
-
...(config.baseURL ? { baseURL: config.baseURL } : {}),
|
|
197
|
-
});
|
|
198
|
-
return google.textEmbeddingModel(config.model);
|
|
199
|
-
}
|
|
200
|
-
const openai = createOpenAI({
|
|
201
|
-
apiKey: config.apiKey,
|
|
202
|
-
...(config.baseURL ? { baseURL: config.baseURL } : {}),
|
|
203
|
-
});
|
|
204
|
-
return openai.embedding(config.model, {
|
|
205
|
-
dimensions: options.dimensions,
|
|
206
|
-
user: options.user,
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Convenience wrapper: resolve config from env, then construct a model.
|
|
211
|
-
* Returns `undefined` when no API key is configured.
|
|
212
|
-
*
|
|
213
|
-
* **Important:** Only `@askdb/config` reads `process.env` (during dotenv load and while evaluating
|
|
214
|
-
* `askdb.config.*`). Pass `getAskDbRuntimeConfig().ai.aiEnv` from `@askdb/config` after
|
|
215
|
-
* `bootstrapAskDbEnv()`, or an explicit plain object in tests.
|
|
216
|
-
*
|
|
217
|
-
* @param env - String map in the shape of canonical AskDB env keys (from the runtime snapshot).
|
|
218
|
-
* @param options - Optional per-app overrides (e.g. a per-app model env var).
|
|
219
|
-
*/
|
|
220
|
-
export async function createAskDbLanguageModelFromEnv(env, options = {}) {
|
|
221
|
-
const config = resolveAskDbAiConfig(env, options);
|
|
222
|
-
if (!config)
|
|
223
|
-
return undefined;
|
|
224
|
-
return createAskDbLanguageModel(config);
|
|
225
|
-
}
|
|
226
|
-
/** Resolve embedding config from env, then construct an AI SDK embedding model.
|
|
227
|
-
*
|
|
228
|
-
* **Important:** Only `@askdb/config` reads `process.env` (during dotenv load and while evaluating
|
|
229
|
-
* `askdb.config.*`). Pass `getAskDbRuntimeConfig().ai.aiEnv` after `bootstrapAskDbEnv()`, or
|
|
230
|
-
* an explicit plain object in tests.
|
|
231
|
-
*
|
|
232
|
-
* @param env - String map in the shape of canonical AskDB env keys (from the runtime snapshot).
|
|
233
|
-
* @param options - Optional per-app overrides plus embedding-specific model/dimensions settings.
|
|
234
|
-
*/
|
|
235
|
-
export async function createAskDbEmbeddingModelFromEnv(env, options = {}) {
|
|
236
|
-
const config = resolveAskDbEmbeddingConfig(env, options);
|
|
237
|
-
if (!config)
|
|
238
|
-
return undefined;
|
|
239
|
-
return createAskDbEmbeddingModel(config, options);
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
* Human-readable message describing how to configure AI, used by callers
|
|
243
|
-
* when no key is configured.
|
|
244
|
-
*/
|
|
245
|
-
export function askDbAiKeyMissingMessage(context) {
|
|
246
|
-
return (`${context}: no AI API key configured. ` +
|
|
247
|
-
`For OpenAI, set OPENAI_API_KEY (or ASKDB_AI_API_KEY). ` +
|
|
248
|
-
`For Azure / Microsoft Foundry, set ASKDB_AI_PROVIDER=azure plus ` +
|
|
249
|
-
`AZURE_OPENAI_API_KEY (or ASKDB_AI_API_KEY), ` +
|
|
250
|
-
`ASKDB_AI_AZURE_RESOURCE_NAME (or ASKDB_AI_BASE_URL), and a deployment name ` +
|
|
251
|
-
`via ASKDB_AI_MODEL. ` +
|
|
252
|
-
`For Google Gemini, set ASKDB_AI_PROVIDER=google plus ` +
|
|
253
|
-
`GOOGLE_GENERATIVE_AI_API_KEY (or ASKDB_AI_API_KEY).`);
|
|
254
|
-
}
|
|
255
|
-
//# sourceMappingURL=provider.js.map
|
package/dist/ai/provider.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/ai/provider.ts"],"names":[],"mappings":"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"}
|