promptopskit 0.4.2 → 0.5.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 +98 -57
- package/SKILL.md +360 -6
- package/dist/chunk-6BOUQVSX.js +130 -0
- package/dist/chunk-6BOUQVSX.js.map +1 -0
- package/dist/{chunk-7MRMN3SW.js → chunk-6VLKZCNS.js} +6 -4
- package/dist/chunk-6VLKZCNS.js.map +1 -0
- package/dist/{chunk-HWEVRBKZ.js → chunk-AGTGIZMR.js} +6 -2
- package/dist/chunk-AGTGIZMR.js.map +1 -0
- package/dist/{chunk-XL76NHZR.js → chunk-D75HKF64.js} +6 -4
- package/dist/chunk-D75HKF64.js.map +1 -0
- package/dist/{chunk-5AAYDOPU.js → chunk-IN4KT5EU.js} +4 -3
- package/dist/chunk-IN4KT5EU.js.map +1 -0
- package/dist/{chunk-JKBWC5WJ.js → chunk-K6ZU3CGV.js} +22 -5
- package/dist/chunk-K6ZU3CGV.js.map +1 -0
- package/dist/{chunk-YI4LILPY.js → chunk-KN7H4JRK.js} +61 -4
- package/dist/chunk-KN7H4JRK.js.map +1 -0
- package/dist/{chunk-Z4IPWEUU.js → chunk-LNGHGGJN.js} +6 -4
- package/dist/chunk-LNGHGGJN.js.map +1 -0
- package/dist/{chunk-MI3M6KDD.js → chunk-QK3WKE3K.js} +6 -4
- package/dist/chunk-QK3WKE3K.js.map +1 -0
- package/dist/cli/index.js +27 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/index.cjs +233 -21
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -9
- package/dist/index.d.ts +9 -9
- package/dist/index.js +32 -10
- package/dist/index.js.map +1 -1
- package/dist/providers/anthropic.cjs +82 -8
- package/dist/providers/anthropic.cjs.map +1 -1
- package/dist/providers/anthropic.d.cts +2 -2
- package/dist/providers/anthropic.d.ts +2 -2
- package/dist/providers/anthropic.js +3 -3
- package/dist/providers/gemini.cjs +82 -8
- package/dist/providers/gemini.cjs.map +1 -1
- package/dist/providers/gemini.d.cts +2 -2
- package/dist/providers/gemini.d.ts +2 -2
- package/dist/providers/gemini.js +3 -3
- package/dist/providers/llmasaservice.cjs +1467 -0
- package/dist/providers/llmasaservice.cjs.map +1 -0
- package/dist/providers/llmasaservice.d.cts +28 -0
- package/dist/providers/llmasaservice.d.ts +28 -0
- package/dist/providers/llmasaservice.js +20 -0
- package/dist/providers/llmasaservice.js.map +1 -0
- package/dist/providers/openai-responses.cjs +82 -8
- package/dist/providers/openai-responses.cjs.map +1 -1
- package/dist/providers/openai-responses.d.cts +2 -2
- package/dist/providers/openai-responses.d.ts +2 -2
- package/dist/providers/openai-responses.js +3 -3
- package/dist/providers/openai.cjs +82 -8
- package/dist/providers/openai.cjs.map +1 -1
- package/dist/providers/openai.d.cts +2 -2
- package/dist/providers/openai.d.ts +2 -2
- package/dist/providers/openai.js +3 -3
- package/dist/providers/openrouter.cjs +83 -8
- package/dist/providers/openrouter.cjs.map +1 -1
- package/dist/providers/openrouter.d.cts +2 -2
- package/dist/providers/openrouter.d.ts +2 -2
- package/dist/providers/openrouter.js +4 -4
- package/dist/{schema-B9A1zLRk.d.cts → schema-D-RI4w-k.d.cts} +695 -183
- package/dist/{schema-B9A1zLRk.d.ts → schema-D-RI4w-k.d.ts} +695 -183
- package/dist/testing.cjs +21 -4
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +1 -1
- package/dist/testing.d.ts +1 -1
- package/dist/testing.js +1 -1
- package/dist/{types-DjGAwJxC.d.ts → types-B3dxBGu6.d.ts} +18 -6
- package/dist/{types-DpbzzZO2.d.cts → types-DbTAjlTN.d.cts} +18 -6
- package/dist/usagetap/index.cjs +6 -1
- package/dist/usagetap/index.cjs.map +1 -1
- package/dist/usagetap/index.d.cts +4 -3
- package/dist/usagetap/index.d.ts +4 -3
- package/dist/usagetap/index.js +3 -1
- package/package.json +11 -1
- package/dist/chunk-5AAYDOPU.js.map +0 -1
- package/dist/chunk-7MRMN3SW.js.map +0 -1
- package/dist/chunk-HWEVRBKZ.js.map +0 -1
- package/dist/chunk-JKBWC5WJ.js.map +0 -1
- package/dist/chunk-MI3M6KDD.js.map +0 -1
- package/dist/chunk-XL76NHZR.js.map +0 -1
- package/dist/chunk-YI4LILPY.js.map +0 -1
- package/dist/chunk-Z4IPWEUU.js.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -30,6 +30,10 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
30
30
|
// src/index.ts
|
|
31
31
|
var src_exports = {};
|
|
32
32
|
__export(src_exports, {
|
|
33
|
+
LLMASASERVICE_BASE_URL: () => LLMASASERVICE_BASE_URL,
|
|
34
|
+
LLMASASERVICE_DEFAULT_MODEL: () => LLMASASERVICE_DEFAULT_MODEL,
|
|
35
|
+
LLMASASERVICE_RESPONSE_HEADER_NAMES: () => LLMASASERVICE_RESPONSE_HEADER_NAMES,
|
|
36
|
+
LLMASASERVICE_SDK_PLACEHOLDER_API_KEY: () => LLMASASERVICE_SDK_PLACEHOLDER_API_KEY,
|
|
33
37
|
PromptAssetOverridesSchema: () => PromptAssetOverridesSchema,
|
|
34
38
|
PromptAssetSchema: () => PromptAssetSchema,
|
|
35
39
|
PromptOpsKit: () => PromptOpsKit,
|
|
@@ -37,6 +41,7 @@ __export(src_exports, {
|
|
|
37
41
|
applyOverrides: () => applyOverrides,
|
|
38
42
|
applyUsageTapEntitlements: () => applyUsageTapEntitlements,
|
|
39
43
|
beginUsageTapCall: () => beginUsageTapCall,
|
|
44
|
+
createLLMAsAServiceOpenAIConfig: () => createLLMAsAServiceOpenAIConfig,
|
|
40
45
|
createPromptOpsKit: () => createPromptOpsKit,
|
|
41
46
|
createUsageTapClient: () => createUsageTapClient,
|
|
42
47
|
defaultUsageTapErrorMapper: () => defaultUsageTapErrorMapper,
|
|
@@ -49,6 +54,7 @@ __export(src_exports, {
|
|
|
49
54
|
geminiAdapter: () => geminiAdapter,
|
|
50
55
|
getAdapter: () => getAdapter,
|
|
51
56
|
interpolate: () => interpolate,
|
|
57
|
+
llmasaserviceAdapter: () => llmasaserviceAdapter,
|
|
52
58
|
loadPromptFile: () => loadPromptFile,
|
|
53
59
|
openaiAdapter: () => openaiAdapter,
|
|
54
60
|
openaiResponsesAdapter: () => openaiResponsesAdapter,
|
|
@@ -58,6 +64,7 @@ __export(src_exports, {
|
|
|
58
64
|
resolveIncludes: () => resolveIncludes,
|
|
59
65
|
runAnthropicWithUsageTap: () => runAnthropicWithUsageTap,
|
|
60
66
|
runGeminiWithUsageTap: () => runGeminiWithUsageTap,
|
|
67
|
+
runLLMAsAServiceWithUsageTap: () => runLLMAsAServiceWithUsageTap,
|
|
61
68
|
runOpenAIWithUsageTap: () => runOpenAIWithUsageTap,
|
|
62
69
|
runOpenRouterWithUsageTap: () => runOpenRouterWithUsageTap,
|
|
63
70
|
validateAsset: () => validateAsset,
|
|
@@ -165,7 +172,8 @@ function mergeOverride(base, override) {
|
|
|
165
172
|
anthropic: mergeRecordBlock(result.raw?.anthropic, override.raw.anthropic),
|
|
166
173
|
gemini: mergeRecordBlock(result.raw?.gemini, override.raw.gemini),
|
|
167
174
|
google: mergeRecordBlock(result.raw?.google, override.raw.google),
|
|
168
|
-
openrouter: mergeRecordBlock(result.raw?.openrouter, override.raw.openrouter)
|
|
175
|
+
openrouter: mergeRecordBlock(result.raw?.openrouter, override.raw.openrouter),
|
|
176
|
+
llmasaservice: mergeRecordBlock(result.raw?.llmasaservice, override.raw.llmasaservice)
|
|
169
177
|
};
|
|
170
178
|
}
|
|
171
179
|
if (override.provider_options !== void 0) {
|
|
@@ -183,6 +191,10 @@ function mergeOverride(base, override) {
|
|
|
183
191
|
openrouter: {
|
|
184
192
|
...result.provider_options?.openrouter,
|
|
185
193
|
...override.provider_options.openrouter
|
|
194
|
+
},
|
|
195
|
+
llmasaservice: {
|
|
196
|
+
...result.provider_options?.llmasaservice,
|
|
197
|
+
...override.provider_options.llmasaservice
|
|
186
198
|
}
|
|
187
199
|
};
|
|
188
200
|
}
|
|
@@ -318,10 +330,26 @@ var OpenRouterProviderOptionsSchema = import_zod.z.object({
|
|
|
318
330
|
plugins: import_zod.z.array(import_zod.z.record(import_zod.z.unknown())).optional(),
|
|
319
331
|
models: import_zod.z.array(import_zod.z.string()).optional()
|
|
320
332
|
});
|
|
333
|
+
var LLMAsAServiceCustomerSchema = import_zod.z.object({
|
|
334
|
+
customer_id: import_zod.z.string(),
|
|
335
|
+
customer_name: import_zod.z.string().optional(),
|
|
336
|
+
customer_user_id: import_zod.z.string().optional(),
|
|
337
|
+
customer_user_name: import_zod.z.string().optional(),
|
|
338
|
+
customer_user_email: import_zod.z.string().optional()
|
|
339
|
+
});
|
|
340
|
+
var LLMAsAServiceProviderOptionsSchema = import_zod.z.object({
|
|
341
|
+
base_url: import_zod.z.string().url().optional(),
|
|
342
|
+
project_id: import_zod.z.string().optional(),
|
|
343
|
+
customer: LLMAsAServiceCustomerSchema.optional(),
|
|
344
|
+
conversationId: import_zod.z.string().optional(),
|
|
345
|
+
conversationTitle: import_zod.z.string().optional(),
|
|
346
|
+
projectId: import_zod.z.string().optional()
|
|
347
|
+
});
|
|
321
348
|
var ProviderOptionsSchema = import_zod.z.object({
|
|
322
349
|
anthropic: AnthropicProviderOptionsSchema.optional(),
|
|
323
350
|
gemini: GeminiProviderOptionsSchema.optional(),
|
|
324
|
-
openrouter: OpenRouterProviderOptionsSchema.optional()
|
|
351
|
+
openrouter: OpenRouterProviderOptionsSchema.optional(),
|
|
352
|
+
llmasaservice: LLMAsAServiceProviderOptionsSchema.optional()
|
|
325
353
|
});
|
|
326
354
|
var RawProviderBodySchema = import_zod.z.object({
|
|
327
355
|
openai: import_zod.z.record(import_zod.z.unknown()).optional(),
|
|
@@ -330,7 +358,8 @@ var RawProviderBodySchema = import_zod.z.object({
|
|
|
330
358
|
anthropic: import_zod.z.record(import_zod.z.unknown()).optional(),
|
|
331
359
|
gemini: import_zod.z.record(import_zod.z.unknown()).optional(),
|
|
332
360
|
google: import_zod.z.record(import_zod.z.unknown()).optional(),
|
|
333
|
-
openrouter: import_zod.z.record(import_zod.z.unknown()).optional()
|
|
361
|
+
openrouter: import_zod.z.record(import_zod.z.unknown()).optional(),
|
|
362
|
+
llmasaservice: import_zod.z.record(import_zod.z.unknown()).optional()
|
|
334
363
|
});
|
|
335
364
|
var OpenAICacheSchema = import_zod.z.object({
|
|
336
365
|
prompt_cache_key: import_zod.z.string().min(1).optional(),
|
|
@@ -417,7 +446,7 @@ var SectionsSchema = import_zod.z.object({
|
|
|
417
446
|
notes: import_zod.z.string().optional()
|
|
418
447
|
});
|
|
419
448
|
var PromptDefaultsSchema = import_zod.z.object({
|
|
420
|
-
provider: import_zod.z.enum(["openai", "openai-responses", "anthropic", "google", "gemini", "openrouter", "any"]).optional(),
|
|
449
|
+
provider: import_zod.z.enum(["openai", "openai-responses", "anthropic", "google", "gemini", "openrouter", "llmasaservice", "any"]).optional(),
|
|
421
450
|
model: import_zod.z.string().optional(),
|
|
422
451
|
cache: CacheSchema.optional(),
|
|
423
452
|
metadata: MetadataSchema.optional(),
|
|
@@ -429,7 +458,7 @@ var PromptAssetSchema = import_zod.z.object({
|
|
|
429
458
|
id: import_zod.z.string(),
|
|
430
459
|
schema_version: import_zod.z.number().int().positive().default(1),
|
|
431
460
|
description: import_zod.z.string().optional(),
|
|
432
|
-
provider: import_zod.z.enum(["openai", "openai-responses", "anthropic", "google", "gemini", "openrouter", "any"]).optional(),
|
|
461
|
+
provider: import_zod.z.enum(["openai", "openai-responses", "anthropic", "google", "gemini", "openrouter", "llmasaservice", "any"]).optional(),
|
|
433
462
|
model: import_zod.z.string().optional(),
|
|
434
463
|
fallback_models: import_zod.z.array(import_zod.z.string()).optional(),
|
|
435
464
|
reasoning: ReasoningSchema.optional(),
|
|
@@ -1174,6 +1203,56 @@ function collectContextSizeWarnings(asset, variables = {}) {
|
|
|
1174
1203
|
return warnings;
|
|
1175
1204
|
}
|
|
1176
1205
|
|
|
1206
|
+
// src/history.ts
|
|
1207
|
+
function defaultCompactHistory(info) {
|
|
1208
|
+
const content = info.overflow.map((message) => `${message.role}: ${message.content}`).join("\n\n");
|
|
1209
|
+
return {
|
|
1210
|
+
role: "user",
|
|
1211
|
+
content: `Earlier conversation compacted to preserve history:
|
|
1212
|
+
|
|
1213
|
+
${content}`
|
|
1214
|
+
};
|
|
1215
|
+
}
|
|
1216
|
+
function normalizeCompactionResult(result) {
|
|
1217
|
+
if (typeof result === "string") {
|
|
1218
|
+
return {
|
|
1219
|
+
role: "user",
|
|
1220
|
+
content: result
|
|
1221
|
+
};
|
|
1222
|
+
}
|
|
1223
|
+
return result;
|
|
1224
|
+
}
|
|
1225
|
+
function compactHistoryForPrompt(asset, runtime) {
|
|
1226
|
+
const history = runtime.history;
|
|
1227
|
+
const maxItems = asset.context?.history?.max_items;
|
|
1228
|
+
if (!history || maxItems === void 0 || history.length <= maxItems) {
|
|
1229
|
+
return history;
|
|
1230
|
+
}
|
|
1231
|
+
if (maxItems === 1) {
|
|
1232
|
+
const info2 = {
|
|
1233
|
+
promptId: asset.id,
|
|
1234
|
+
maxItems,
|
|
1235
|
+
overflow: history,
|
|
1236
|
+
preserved: [],
|
|
1237
|
+
history
|
|
1238
|
+
};
|
|
1239
|
+
const compacted2 = runtime.onHistoryCompaction ? normalizeCompactionResult(runtime.onHistoryCompaction(info2)) : defaultCompactHistory(info2);
|
|
1240
|
+
return [compacted2];
|
|
1241
|
+
}
|
|
1242
|
+
const preservedCount = maxItems - 1;
|
|
1243
|
+
const overflow = history.slice(0, history.length - preservedCount);
|
|
1244
|
+
const preserved = history.slice(-preservedCount);
|
|
1245
|
+
const info = {
|
|
1246
|
+
promptId: asset.id,
|
|
1247
|
+
maxItems,
|
|
1248
|
+
overflow,
|
|
1249
|
+
preserved,
|
|
1250
|
+
history
|
|
1251
|
+
};
|
|
1252
|
+
const compacted = runtime.onHistoryCompaction ? normalizeCompactionResult(runtime.onHistoryCompaction(info)) : defaultCompactHistory(info);
|
|
1253
|
+
return [compacted, ...preserved];
|
|
1254
|
+
}
|
|
1255
|
+
|
|
1177
1256
|
// src/providers/prompt-input.ts
|
|
1178
1257
|
function isPromptLookup(input) {
|
|
1179
1258
|
return "path" in input && typeof input.path === "string";
|
|
@@ -1209,7 +1288,8 @@ function withPromptInputSupport(adapter) {
|
|
|
1209
1288
|
}
|
|
1210
1289
|
return adapter.render(resolved, {
|
|
1211
1290
|
...runtime,
|
|
1212
|
-
variables: sanitization.variables
|
|
1291
|
+
variables: sanitization.variables,
|
|
1292
|
+
history: compactHistoryForPrompt(resolved, runtime)
|
|
1213
1293
|
});
|
|
1214
1294
|
};
|
|
1215
1295
|
return {
|
|
@@ -1262,8 +1342,9 @@ var openaiAdapter = withPromptInputSupport({
|
|
|
1262
1342
|
if (sections.system_instructions) {
|
|
1263
1343
|
messages.push({ role: "system", content: sections.system_instructions });
|
|
1264
1344
|
}
|
|
1265
|
-
|
|
1266
|
-
|
|
1345
|
+
const history = compactHistoryForPrompt(resolvedAsset, runtime);
|
|
1346
|
+
if (history) {
|
|
1347
|
+
for (const msg of history) {
|
|
1267
1348
|
messages.push({ role: msg.role, content: msg.content });
|
|
1268
1349
|
}
|
|
1269
1350
|
}
|
|
@@ -1360,8 +1441,9 @@ var openaiResponsesAdapter = withPromptInputSupport({
|
|
|
1360
1441
|
});
|
|
1361
1442
|
const responseOptions = runtime.openaiResponses;
|
|
1362
1443
|
const input = [];
|
|
1363
|
-
|
|
1364
|
-
|
|
1444
|
+
const history = compactHistoryForPrompt(resolvedAsset, runtime);
|
|
1445
|
+
if (history) {
|
|
1446
|
+
for (const msg of history) {
|
|
1365
1447
|
input.push({ role: msg.role, content: msg.content });
|
|
1366
1448
|
}
|
|
1367
1449
|
}
|
|
@@ -1474,8 +1556,9 @@ var anthropicAdapter = withPromptInputSupport({
|
|
|
1474
1556
|
...anthropicCacheConfig.ttl ? { ttl: anthropicCacheConfig.ttl } : {}
|
|
1475
1557
|
} : void 0;
|
|
1476
1558
|
const cacheMode = anthropicCacheConfig?.mode ?? "automatic";
|
|
1477
|
-
|
|
1478
|
-
|
|
1559
|
+
const history = compactHistoryForPrompt(resolvedAsset, runtime);
|
|
1560
|
+
if (history) {
|
|
1561
|
+
for (const msg of history) {
|
|
1479
1562
|
messages.push({ role: msg.role, content: msg.content });
|
|
1480
1563
|
}
|
|
1481
1564
|
}
|
|
@@ -1600,8 +1683,9 @@ var geminiAdapter = withPromptInputSupport({
|
|
|
1600
1683
|
strict: runtime.strict
|
|
1601
1684
|
});
|
|
1602
1685
|
const contents = [];
|
|
1603
|
-
|
|
1604
|
-
|
|
1686
|
+
const history = compactHistoryForPrompt(resolvedAsset, runtime);
|
|
1687
|
+
if (history) {
|
|
1688
|
+
for (const msg of history) {
|
|
1605
1689
|
contents.push({
|
|
1606
1690
|
role: msg.role === "assistant" ? "model" : "user",
|
|
1607
1691
|
parts: [{ text: msg.content }]
|
|
@@ -1703,6 +1787,7 @@ var openrouterAdapter = withPromptInputSupport({
|
|
|
1703
1787
|
{
|
|
1704
1788
|
variables: runtime.variables,
|
|
1705
1789
|
history: runtime.history,
|
|
1790
|
+
onHistoryCompaction: runtime.onHistoryCompaction,
|
|
1706
1791
|
toolRegistry: runtime.toolRegistry,
|
|
1707
1792
|
strict: runtime.strict
|
|
1708
1793
|
}
|
|
@@ -1724,6 +1809,118 @@ var openrouterAdapter = withPromptInputSupport({
|
|
|
1724
1809
|
}
|
|
1725
1810
|
});
|
|
1726
1811
|
|
|
1812
|
+
// src/providers/llmasaservice.ts
|
|
1813
|
+
var LLMASASERVICE_BASE_URL = "https://gateway.llmasaservice.io";
|
|
1814
|
+
var LLMASASERVICE_SDK_PLACEHOLDER_API_KEY = "not-used-by-llm-gateway";
|
|
1815
|
+
var LLMASASERVICE_DEFAULT_MODEL = "group:standard";
|
|
1816
|
+
var LLMASASERVICE_RESPONSE_HEADER_NAMES = [
|
|
1817
|
+
"x-request-id",
|
|
1818
|
+
"x-llm-model-id",
|
|
1819
|
+
"x-llm-model-group"
|
|
1820
|
+
];
|
|
1821
|
+
function createLLMAsAServiceOpenAIConfig(options = {}) {
|
|
1822
|
+
return {
|
|
1823
|
+
baseURL: options.baseURL ?? LLMASASERVICE_BASE_URL,
|
|
1824
|
+
apiKey: LLMASASERVICE_SDK_PLACEHOLDER_API_KEY,
|
|
1825
|
+
defaultHeaders: {
|
|
1826
|
+
"x-project-id": options.projectId ?? ""
|
|
1827
|
+
}
|
|
1828
|
+
};
|
|
1829
|
+
}
|
|
1830
|
+
function isGPT5ModelSelector(model) {
|
|
1831
|
+
if (!model) return false;
|
|
1832
|
+
return model.split(/[|,]/).map((candidate) => candidate.trim()).some((candidate) => candidate.startsWith("gpt-5") || candidate.startsWith("openai:gpt-5"));
|
|
1833
|
+
}
|
|
1834
|
+
function defaultModel() {
|
|
1835
|
+
return LLMASASERVICE_DEFAULT_MODEL;
|
|
1836
|
+
}
|
|
1837
|
+
function isRecord(value) {
|
|
1838
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
1839
|
+
}
|
|
1840
|
+
function rawCustomerId(asset) {
|
|
1841
|
+
const customer = isRecord(asset.raw?.llmasaservice?.customer) ? asset.raw.llmasaservice.customer : void 0;
|
|
1842
|
+
return customer?.customer_id;
|
|
1843
|
+
}
|
|
1844
|
+
function isGatewayRenderValidation(runtime) {
|
|
1845
|
+
return runtime?.runtime !== void 0;
|
|
1846
|
+
}
|
|
1847
|
+
var llmasaserviceAdapter = withPromptInputSupport({
|
|
1848
|
+
name: "llmasaservice",
|
|
1849
|
+
validate(asset, runtime) {
|
|
1850
|
+
const resolvedAsset = resolveAssetForProvider(asset, runtime);
|
|
1851
|
+
const validation = openaiAdapter.validate(
|
|
1852
|
+
{
|
|
1853
|
+
...resolvedAsset,
|
|
1854
|
+
model: resolvedAsset.model ?? defaultModel()
|
|
1855
|
+
},
|
|
1856
|
+
runtime
|
|
1857
|
+
);
|
|
1858
|
+
const warnings = validation.warnings.filter(
|
|
1859
|
+
(warning) => warning !== "OpenAI adapter requires a model to be specified."
|
|
1860
|
+
);
|
|
1861
|
+
const errors = [...validation.errors];
|
|
1862
|
+
const gatewayOptions = resolvedAsset.provider_options?.llmasaservice;
|
|
1863
|
+
const missingProjectId = !gatewayOptions?.project_id;
|
|
1864
|
+
const missingCustomerId = !gatewayOptions?.customer?.customer_id && typeof rawCustomerId(resolvedAsset) !== "string";
|
|
1865
|
+
const validateRenderMetadata = isGatewayRenderValidation(runtime);
|
|
1866
|
+
if (missingProjectId && validateRenderMetadata) {
|
|
1867
|
+
errors.push(
|
|
1868
|
+
"LLMAsAService adapter requires provider_options.llmasaservice.project_id for x-project-id routing."
|
|
1869
|
+
);
|
|
1870
|
+
}
|
|
1871
|
+
if (missingCustomerId && validateRenderMetadata) {
|
|
1872
|
+
errors.push(
|
|
1873
|
+
"LLMAsAService adapter requires customer.customer_id in provider_options.llmasaservice.customer or raw.llmasaservice.customer."
|
|
1874
|
+
);
|
|
1875
|
+
}
|
|
1876
|
+
if ((missingProjectId || missingCustomerId) && !validateRenderMetadata) {
|
|
1877
|
+
warnings.push(
|
|
1878
|
+
"LLMAsAService project_id and customer.customer_id must be supplied before rendering, usually through runtime provider_options."
|
|
1879
|
+
);
|
|
1880
|
+
}
|
|
1881
|
+
return {
|
|
1882
|
+
valid: errors.length === 0,
|
|
1883
|
+
errors,
|
|
1884
|
+
warnings
|
|
1885
|
+
};
|
|
1886
|
+
},
|
|
1887
|
+
render(asset, runtime) {
|
|
1888
|
+
const resolvedAsset = resolveAssetForProvider(asset, runtime);
|
|
1889
|
+
const options = resolvedAsset.provider_options?.llmasaservice;
|
|
1890
|
+
const model = resolvedAsset.model ?? defaultModel();
|
|
1891
|
+
const result = openaiAdapter.render(
|
|
1892
|
+
{ ...resolvedAsset, model, raw: void 0 },
|
|
1893
|
+
{
|
|
1894
|
+
variables: runtime.variables,
|
|
1895
|
+
history: runtime.history,
|
|
1896
|
+
onHistoryCompaction: runtime.onHistoryCompaction,
|
|
1897
|
+
toolRegistry: runtime.toolRegistry,
|
|
1898
|
+
strict: runtime.strict
|
|
1899
|
+
}
|
|
1900
|
+
);
|
|
1901
|
+
let body = { ...result.body };
|
|
1902
|
+
if (isGPT5ModelSelector(model) && body.max_tokens !== void 0 && body.max_completion_tokens === void 0) {
|
|
1903
|
+
body.max_completion_tokens = body.max_tokens;
|
|
1904
|
+
delete body.max_tokens;
|
|
1905
|
+
}
|
|
1906
|
+
if (options?.customer !== void 0) body.customer = options.customer;
|
|
1907
|
+
if (options?.conversationId !== void 0) body.conversationId = options.conversationId;
|
|
1908
|
+
if (options?.conversationTitle !== void 0) body.conversationTitle = options.conversationTitle;
|
|
1909
|
+
if (options?.projectId !== void 0) body.projectId = options.projectId;
|
|
1910
|
+
body = applyRawProviderBody(body, resolvedAsset, "llmasaservice");
|
|
1911
|
+
const projectId = options?.project_id ?? "";
|
|
1912
|
+
return {
|
|
1913
|
+
body,
|
|
1914
|
+
provider: "llmasaservice",
|
|
1915
|
+
model,
|
|
1916
|
+
baseURL: options?.base_url ?? LLMASASERVICE_BASE_URL,
|
|
1917
|
+
headers: {
|
|
1918
|
+
"x-project-id": projectId
|
|
1919
|
+
}
|
|
1920
|
+
};
|
|
1921
|
+
}
|
|
1922
|
+
});
|
|
1923
|
+
|
|
1727
1924
|
// src/providers/index.ts
|
|
1728
1925
|
var adapters = {
|
|
1729
1926
|
openai: openaiAdapter,
|
|
@@ -1731,7 +1928,8 @@ var adapters = {
|
|
|
1731
1928
|
anthropic: anthropicAdapter,
|
|
1732
1929
|
google: geminiAdapter,
|
|
1733
1930
|
gemini: geminiAdapter,
|
|
1734
|
-
openrouter: openrouterAdapter
|
|
1931
|
+
openrouter: openrouterAdapter,
|
|
1932
|
+
llmasaservice: llmasaserviceAdapter
|
|
1735
1933
|
};
|
|
1736
1934
|
function getAdapter(provider) {
|
|
1737
1935
|
const adapter = adapters[provider];
|
|
@@ -1967,7 +2165,7 @@ function validateAsset(asset, frontMatterKeys, filePath) {
|
|
|
1967
2165
|
});
|
|
1968
2166
|
}
|
|
1969
2167
|
for (const [envName, overrides] of Object.entries(asset.environments ?? {})) {
|
|
1970
|
-
if (asset.cache && (!
|
|
2168
|
+
if (asset.cache && (!isRecord2(overrides) || !overrides.cache)) {
|
|
1971
2169
|
warnings.push({
|
|
1972
2170
|
code: "POK045",
|
|
1973
2171
|
message: `Environment "${envName}" does not override cache while prompt-level cache is defined.`,
|
|
@@ -1977,7 +2175,7 @@ function validateAsset(asset, frontMatterKeys, filePath) {
|
|
|
1977
2175
|
}
|
|
1978
2176
|
}
|
|
1979
2177
|
for (const [tierName, overrides] of Object.entries(asset.tiers ?? {})) {
|
|
1980
|
-
if (asset.cache && (!
|
|
2178
|
+
if (asset.cache && (!isRecord2(overrides) || !overrides.cache)) {
|
|
1981
2179
|
warnings.push({
|
|
1982
2180
|
code: "POK045",
|
|
1983
2181
|
message: `Tier "${tierName}" does not override cache while prompt-level cache is defined.`,
|
|
@@ -1987,7 +2185,7 @@ function validateAsset(asset, frontMatterKeys, filePath) {
|
|
|
1987
2185
|
}
|
|
1988
2186
|
}
|
|
1989
2187
|
for (const tool of asset.tools ?? []) {
|
|
1990
|
-
if (
|
|
2188
|
+
if (isRecord2(tool)) {
|
|
1991
2189
|
if (!tool.description) {
|
|
1992
2190
|
warnings.push({
|
|
1993
2191
|
code: "POK047",
|
|
@@ -2042,7 +2240,7 @@ function findClosestMatch(input, candidates) {
|
|
|
2042
2240
|
}
|
|
2043
2241
|
return best;
|
|
2044
2242
|
}
|
|
2045
|
-
function
|
|
2243
|
+
function isRecord2(value) {
|
|
2046
2244
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
2047
2245
|
}
|
|
2048
2246
|
|
|
@@ -2321,7 +2519,7 @@ function applyUsageTapEntitlements(request, begin, options = {}) {
|
|
|
2321
2519
|
if (!isObject2(nextRequest.body)) {
|
|
2322
2520
|
return nextRequest;
|
|
2323
2521
|
}
|
|
2324
|
-
if (nextRequest.provider === "openai" || nextRequest.provider === "openrouter") {
|
|
2522
|
+
if (nextRequest.provider === "openai" || nextRequest.provider === "openrouter" || nextRequest.provider === "llmasaservice") {
|
|
2325
2523
|
capOpenAIReasoning(nextRequest.body, allowed);
|
|
2326
2524
|
if (isRecordArray(nextRequest.body.tools)) {
|
|
2327
2525
|
nextRequest.body.tools = filterOpenAITools(nextRequest.body.tools, allowed, options);
|
|
@@ -2410,6 +2608,9 @@ function runOpenAIWithUsageTap(client, options) {
|
|
|
2410
2608
|
function runOpenRouterWithUsageTap(client, options) {
|
|
2411
2609
|
return runProviderWithUsageTap(client, options, extractOpenAIUsage);
|
|
2412
2610
|
}
|
|
2611
|
+
function runLLMAsAServiceWithUsageTap(client, options) {
|
|
2612
|
+
return runProviderWithUsageTap(client, options, extractOpenAIUsage);
|
|
2613
|
+
}
|
|
2413
2614
|
function runAnthropicWithUsageTap(client, options) {
|
|
2414
2615
|
return runProviderWithUsageTap(client, options, extractAnthropicUsage);
|
|
2415
2616
|
}
|
|
@@ -2513,7 +2714,11 @@ var PromptOpsKit = class {
|
|
|
2513
2714
|
}
|
|
2514
2715
|
const request = adapter.render(resolved, {
|
|
2515
2716
|
variables: sanitization.variables,
|
|
2516
|
-
history:
|
|
2717
|
+
history: compactHistoryForPrompt(resolved, {
|
|
2718
|
+
history: options.history,
|
|
2719
|
+
onHistoryCompaction: options.onHistoryCompaction
|
|
2720
|
+
}),
|
|
2721
|
+
onHistoryCompaction: options.onHistoryCompaction,
|
|
2517
2722
|
toolRegistry: options.toolRegistry,
|
|
2518
2723
|
strict: options.strict,
|
|
2519
2724
|
openaiResponses: options.openaiResponses
|
|
@@ -2578,6 +2783,10 @@ async function renderPrompt(options) {
|
|
|
2578
2783
|
}
|
|
2579
2784
|
// Annotate the CommonJS export names for ESM import in node:
|
|
2580
2785
|
0 && (module.exports = {
|
|
2786
|
+
LLMASASERVICE_BASE_URL,
|
|
2787
|
+
LLMASASERVICE_DEFAULT_MODEL,
|
|
2788
|
+
LLMASASERVICE_RESPONSE_HEADER_NAMES,
|
|
2789
|
+
LLMASASERVICE_SDK_PLACEHOLDER_API_KEY,
|
|
2581
2790
|
PromptAssetOverridesSchema,
|
|
2582
2791
|
PromptAssetSchema,
|
|
2583
2792
|
PromptOpsKit,
|
|
@@ -2585,6 +2794,7 @@ async function renderPrompt(options) {
|
|
|
2585
2794
|
applyOverrides,
|
|
2586
2795
|
applyUsageTapEntitlements,
|
|
2587
2796
|
beginUsageTapCall,
|
|
2797
|
+
createLLMAsAServiceOpenAIConfig,
|
|
2588
2798
|
createPromptOpsKit,
|
|
2589
2799
|
createUsageTapClient,
|
|
2590
2800
|
defaultUsageTapErrorMapper,
|
|
@@ -2597,6 +2807,7 @@ async function renderPrompt(options) {
|
|
|
2597
2807
|
geminiAdapter,
|
|
2598
2808
|
getAdapter,
|
|
2599
2809
|
interpolate,
|
|
2810
|
+
llmasaserviceAdapter,
|
|
2600
2811
|
loadPromptFile,
|
|
2601
2812
|
openaiAdapter,
|
|
2602
2813
|
openaiResponsesAdapter,
|
|
@@ -2606,6 +2817,7 @@ async function renderPrompt(options) {
|
|
|
2606
2817
|
resolveIncludes,
|
|
2607
2818
|
runAnthropicWithUsageTap,
|
|
2608
2819
|
runGeminiWithUsageTap,
|
|
2820
|
+
runLLMAsAServiceWithUsageTap,
|
|
2609
2821
|
runOpenAIWithUsageTap,
|
|
2610
2822
|
runOpenRouterWithUsageTap,
|
|
2611
2823
|
validateAsset,
|