promptopskit 0.4.0 → 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-F6UJ73Y6.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-L2V7LDKD.js → chunk-D75HKF64.js} +6 -4
- package/dist/chunk-D75HKF64.js.map +1 -0
- package/dist/{chunk-UPTCSWK3.js → chunk-IN4KT5EU.js} +4 -3
- package/dist/chunk-IN4KT5EU.js.map +1 -0
- package/dist/{chunk-JBLUPKY4.js → chunk-K6ZU3CGV.js} +54 -6
- package/dist/chunk-K6ZU3CGV.js.map +1 -0
- package/dist/{chunk-XNNDGDPI.js → chunk-KN7H4JRK.js} +61 -4
- package/dist/chunk-KN7H4JRK.js.map +1 -0
- package/dist/{chunk-HLNVKKMS.js → chunk-LNGHGGJN.js} +6 -4
- package/dist/chunk-LNGHGGJN.js.map +1 -0
- package/dist/{chunk-RY5DVTLV.js → chunk-QK3WKE3K.js} +6 -4
- package/dist/chunk-QK3WKE3K.js.map +1 -0
- package/dist/cli/index.js +114 -55
- package/dist/cli/index.js.map +1 -1
- package/dist/index.cjs +265 -22
- 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 +114 -9
- 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 +114 -9
- 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 +114 -9
- 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 +114 -9
- 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 +115 -9
- 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-F6UJ73Y6.js.map +0 -1
- package/dist/chunk-HLNVKKMS.js.map +0 -1
- package/dist/chunk-HWEVRBKZ.js.map +0 -1
- package/dist/chunk-JBLUPKY4.js.map +0 -1
- package/dist/chunk-L2V7LDKD.js.map +0 -1
- package/dist/chunk-RY5DVTLV.js.map +0 -1
- package/dist/chunk-UPTCSWK3.js.map +0 -1
- package/dist/chunk-XNNDGDPI.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(),
|
|
@@ -685,6 +714,7 @@ function mergeDefaults(base, local) {
|
|
|
685
714
|
return {
|
|
686
715
|
provider: local.provider ?? base.provider,
|
|
687
716
|
model: local.model ?? base.model,
|
|
717
|
+
cache: mergeCache(base.cache, local.cache),
|
|
688
718
|
metadata: {
|
|
689
719
|
...base.metadata ?? {},
|
|
690
720
|
...local.metadata ?? {}
|
|
@@ -696,10 +726,12 @@ function mergeDefaults(base, local) {
|
|
|
696
726
|
};
|
|
697
727
|
}
|
|
698
728
|
function applyDefaults(asset, defaults) {
|
|
729
|
+
const cache = mergeCache(defaults.cache, asset.cache);
|
|
699
730
|
const hasDefaultMetadata = defaults.metadata && Object.keys(defaults.metadata).length > 0;
|
|
700
731
|
const hasDefaultSystem = !!defaults.sections?.system_instructions;
|
|
701
732
|
const hasDefaultScalars = defaults.provider !== void 0 || defaults.model !== void 0;
|
|
702
|
-
|
|
733
|
+
const hasDefaultCache = cache !== void 0;
|
|
734
|
+
if (!hasDefaultMetadata && !hasDefaultSystem && !hasDefaultScalars && !hasDefaultCache) {
|
|
703
735
|
return asset;
|
|
704
736
|
}
|
|
705
737
|
const mergedMetadata = {
|
|
@@ -713,10 +745,38 @@ function applyDefaults(asset, defaults) {
|
|
|
713
745
|
...asset,
|
|
714
746
|
provider: asset.provider ?? defaults.provider,
|
|
715
747
|
model: asset.model ?? defaults.model,
|
|
748
|
+
cache,
|
|
716
749
|
metadata,
|
|
717
750
|
sections
|
|
718
751
|
};
|
|
719
752
|
}
|
|
753
|
+
function mergeCache(base, local) {
|
|
754
|
+
const merged = {
|
|
755
|
+
...base ?? {},
|
|
756
|
+
...local ?? {},
|
|
757
|
+
openai: {
|
|
758
|
+
...base?.openai ?? {},
|
|
759
|
+
...local?.openai ?? {}
|
|
760
|
+
},
|
|
761
|
+
anthropic: {
|
|
762
|
+
...base?.anthropic ?? {},
|
|
763
|
+
...local?.anthropic ?? {}
|
|
764
|
+
},
|
|
765
|
+
gemini: {
|
|
766
|
+
...base?.gemini ?? {},
|
|
767
|
+
...local?.gemini ?? {}
|
|
768
|
+
},
|
|
769
|
+
google: {
|
|
770
|
+
...base?.google ?? {},
|
|
771
|
+
...local?.google ?? {}
|
|
772
|
+
}
|
|
773
|
+
};
|
|
774
|
+
if (merged.openai && Object.keys(merged.openai).length === 0) delete merged.openai;
|
|
775
|
+
if (merged.anthropic && Object.keys(merged.anthropic).length === 0) delete merged.anthropic;
|
|
776
|
+
if (merged.gemini && Object.keys(merged.gemini).length === 0) delete merged.gemini;
|
|
777
|
+
if (merged.google && Object.keys(merged.google).length === 0) delete merged.google;
|
|
778
|
+
return Object.keys(merged).length > 0 ? merged : void 0;
|
|
779
|
+
}
|
|
720
780
|
|
|
721
781
|
// src/composition/resolve-includes.ts
|
|
722
782
|
async function resolveIncludes(asset, basePath, visited = /* @__PURE__ */ new Set()) {
|
|
@@ -1143,6 +1203,56 @@ function collectContextSizeWarnings(asset, variables = {}) {
|
|
|
1143
1203
|
return warnings;
|
|
1144
1204
|
}
|
|
1145
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
|
+
|
|
1146
1256
|
// src/providers/prompt-input.ts
|
|
1147
1257
|
function isPromptLookup(input) {
|
|
1148
1258
|
return "path" in input && typeof input.path === "string";
|
|
@@ -1178,7 +1288,8 @@ function withPromptInputSupport(adapter) {
|
|
|
1178
1288
|
}
|
|
1179
1289
|
return adapter.render(resolved, {
|
|
1180
1290
|
...runtime,
|
|
1181
|
-
variables: sanitization.variables
|
|
1291
|
+
variables: sanitization.variables,
|
|
1292
|
+
history: compactHistoryForPrompt(resolved, runtime)
|
|
1182
1293
|
});
|
|
1183
1294
|
};
|
|
1184
1295
|
return {
|
|
@@ -1231,8 +1342,9 @@ var openaiAdapter = withPromptInputSupport({
|
|
|
1231
1342
|
if (sections.system_instructions) {
|
|
1232
1343
|
messages.push({ role: "system", content: sections.system_instructions });
|
|
1233
1344
|
}
|
|
1234
|
-
|
|
1235
|
-
|
|
1345
|
+
const history = compactHistoryForPrompt(resolvedAsset, runtime);
|
|
1346
|
+
if (history) {
|
|
1347
|
+
for (const msg of history) {
|
|
1236
1348
|
messages.push({ role: msg.role, content: msg.content });
|
|
1237
1349
|
}
|
|
1238
1350
|
}
|
|
@@ -1329,8 +1441,9 @@ var openaiResponsesAdapter = withPromptInputSupport({
|
|
|
1329
1441
|
});
|
|
1330
1442
|
const responseOptions = runtime.openaiResponses;
|
|
1331
1443
|
const input = [];
|
|
1332
|
-
|
|
1333
|
-
|
|
1444
|
+
const history = compactHistoryForPrompt(resolvedAsset, runtime);
|
|
1445
|
+
if (history) {
|
|
1446
|
+
for (const msg of history) {
|
|
1334
1447
|
input.push({ role: msg.role, content: msg.content });
|
|
1335
1448
|
}
|
|
1336
1449
|
}
|
|
@@ -1443,8 +1556,9 @@ var anthropicAdapter = withPromptInputSupport({
|
|
|
1443
1556
|
...anthropicCacheConfig.ttl ? { ttl: anthropicCacheConfig.ttl } : {}
|
|
1444
1557
|
} : void 0;
|
|
1445
1558
|
const cacheMode = anthropicCacheConfig?.mode ?? "automatic";
|
|
1446
|
-
|
|
1447
|
-
|
|
1559
|
+
const history = compactHistoryForPrompt(resolvedAsset, runtime);
|
|
1560
|
+
if (history) {
|
|
1561
|
+
for (const msg of history) {
|
|
1448
1562
|
messages.push({ role: msg.role, content: msg.content });
|
|
1449
1563
|
}
|
|
1450
1564
|
}
|
|
@@ -1569,8 +1683,9 @@ var geminiAdapter = withPromptInputSupport({
|
|
|
1569
1683
|
strict: runtime.strict
|
|
1570
1684
|
});
|
|
1571
1685
|
const contents = [];
|
|
1572
|
-
|
|
1573
|
-
|
|
1686
|
+
const history = compactHistoryForPrompt(resolvedAsset, runtime);
|
|
1687
|
+
if (history) {
|
|
1688
|
+
for (const msg of history) {
|
|
1574
1689
|
contents.push({
|
|
1575
1690
|
role: msg.role === "assistant" ? "model" : "user",
|
|
1576
1691
|
parts: [{ text: msg.content }]
|
|
@@ -1672,6 +1787,7 @@ var openrouterAdapter = withPromptInputSupport({
|
|
|
1672
1787
|
{
|
|
1673
1788
|
variables: runtime.variables,
|
|
1674
1789
|
history: runtime.history,
|
|
1790
|
+
onHistoryCompaction: runtime.onHistoryCompaction,
|
|
1675
1791
|
toolRegistry: runtime.toolRegistry,
|
|
1676
1792
|
strict: runtime.strict
|
|
1677
1793
|
}
|
|
@@ -1693,6 +1809,118 @@ var openrouterAdapter = withPromptInputSupport({
|
|
|
1693
1809
|
}
|
|
1694
1810
|
});
|
|
1695
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
|
+
|
|
1696
1924
|
// src/providers/index.ts
|
|
1697
1925
|
var adapters = {
|
|
1698
1926
|
openai: openaiAdapter,
|
|
@@ -1700,7 +1928,8 @@ var adapters = {
|
|
|
1700
1928
|
anthropic: anthropicAdapter,
|
|
1701
1929
|
google: geminiAdapter,
|
|
1702
1930
|
gemini: geminiAdapter,
|
|
1703
|
-
openrouter: openrouterAdapter
|
|
1931
|
+
openrouter: openrouterAdapter,
|
|
1932
|
+
llmasaservice: llmasaserviceAdapter
|
|
1704
1933
|
};
|
|
1705
1934
|
function getAdapter(provider) {
|
|
1706
1935
|
const adapter = adapters[provider];
|
|
@@ -1936,7 +2165,7 @@ function validateAsset(asset, frontMatterKeys, filePath) {
|
|
|
1936
2165
|
});
|
|
1937
2166
|
}
|
|
1938
2167
|
for (const [envName, overrides] of Object.entries(asset.environments ?? {})) {
|
|
1939
|
-
if (asset.cache && (!
|
|
2168
|
+
if (asset.cache && (!isRecord2(overrides) || !overrides.cache)) {
|
|
1940
2169
|
warnings.push({
|
|
1941
2170
|
code: "POK045",
|
|
1942
2171
|
message: `Environment "${envName}" does not override cache while prompt-level cache is defined.`,
|
|
@@ -1946,7 +2175,7 @@ function validateAsset(asset, frontMatterKeys, filePath) {
|
|
|
1946
2175
|
}
|
|
1947
2176
|
}
|
|
1948
2177
|
for (const [tierName, overrides] of Object.entries(asset.tiers ?? {})) {
|
|
1949
|
-
if (asset.cache && (!
|
|
2178
|
+
if (asset.cache && (!isRecord2(overrides) || !overrides.cache)) {
|
|
1950
2179
|
warnings.push({
|
|
1951
2180
|
code: "POK045",
|
|
1952
2181
|
message: `Tier "${tierName}" does not override cache while prompt-level cache is defined.`,
|
|
@@ -1956,7 +2185,7 @@ function validateAsset(asset, frontMatterKeys, filePath) {
|
|
|
1956
2185
|
}
|
|
1957
2186
|
}
|
|
1958
2187
|
for (const tool of asset.tools ?? []) {
|
|
1959
|
-
if (
|
|
2188
|
+
if (isRecord2(tool)) {
|
|
1960
2189
|
if (!tool.description) {
|
|
1961
2190
|
warnings.push({
|
|
1962
2191
|
code: "POK047",
|
|
@@ -2011,7 +2240,7 @@ function findClosestMatch(input, candidates) {
|
|
|
2011
2240
|
}
|
|
2012
2241
|
return best;
|
|
2013
2242
|
}
|
|
2014
|
-
function
|
|
2243
|
+
function isRecord2(value) {
|
|
2015
2244
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
2016
2245
|
}
|
|
2017
2246
|
|
|
@@ -2290,7 +2519,7 @@ function applyUsageTapEntitlements(request, begin, options = {}) {
|
|
|
2290
2519
|
if (!isObject2(nextRequest.body)) {
|
|
2291
2520
|
return nextRequest;
|
|
2292
2521
|
}
|
|
2293
|
-
if (nextRequest.provider === "openai" || nextRequest.provider === "openrouter") {
|
|
2522
|
+
if (nextRequest.provider === "openai" || nextRequest.provider === "openrouter" || nextRequest.provider === "llmasaservice") {
|
|
2294
2523
|
capOpenAIReasoning(nextRequest.body, allowed);
|
|
2295
2524
|
if (isRecordArray(nextRequest.body.tools)) {
|
|
2296
2525
|
nextRequest.body.tools = filterOpenAITools(nextRequest.body.tools, allowed, options);
|
|
@@ -2379,6 +2608,9 @@ function runOpenAIWithUsageTap(client, options) {
|
|
|
2379
2608
|
function runOpenRouterWithUsageTap(client, options) {
|
|
2380
2609
|
return runProviderWithUsageTap(client, options, extractOpenAIUsage);
|
|
2381
2610
|
}
|
|
2611
|
+
function runLLMAsAServiceWithUsageTap(client, options) {
|
|
2612
|
+
return runProviderWithUsageTap(client, options, extractOpenAIUsage);
|
|
2613
|
+
}
|
|
2382
2614
|
function runAnthropicWithUsageTap(client, options) {
|
|
2383
2615
|
return runProviderWithUsageTap(client, options, extractAnthropicUsage);
|
|
2384
2616
|
}
|
|
@@ -2482,7 +2714,11 @@ var PromptOpsKit = class {
|
|
|
2482
2714
|
}
|
|
2483
2715
|
const request = adapter.render(resolved, {
|
|
2484
2716
|
variables: sanitization.variables,
|
|
2485
|
-
history:
|
|
2717
|
+
history: compactHistoryForPrompt(resolved, {
|
|
2718
|
+
history: options.history,
|
|
2719
|
+
onHistoryCompaction: options.onHistoryCompaction
|
|
2720
|
+
}),
|
|
2721
|
+
onHistoryCompaction: options.onHistoryCompaction,
|
|
2486
2722
|
toolRegistry: options.toolRegistry,
|
|
2487
2723
|
strict: options.strict,
|
|
2488
2724
|
openaiResponses: options.openaiResponses
|
|
@@ -2547,6 +2783,10 @@ async function renderPrompt(options) {
|
|
|
2547
2783
|
}
|
|
2548
2784
|
// Annotate the CommonJS export names for ESM import in node:
|
|
2549
2785
|
0 && (module.exports = {
|
|
2786
|
+
LLMASASERVICE_BASE_URL,
|
|
2787
|
+
LLMASASERVICE_DEFAULT_MODEL,
|
|
2788
|
+
LLMASASERVICE_RESPONSE_HEADER_NAMES,
|
|
2789
|
+
LLMASASERVICE_SDK_PLACEHOLDER_API_KEY,
|
|
2550
2790
|
PromptAssetOverridesSchema,
|
|
2551
2791
|
PromptAssetSchema,
|
|
2552
2792
|
PromptOpsKit,
|
|
@@ -2554,6 +2794,7 @@ async function renderPrompt(options) {
|
|
|
2554
2794
|
applyOverrides,
|
|
2555
2795
|
applyUsageTapEntitlements,
|
|
2556
2796
|
beginUsageTapCall,
|
|
2797
|
+
createLLMAsAServiceOpenAIConfig,
|
|
2557
2798
|
createPromptOpsKit,
|
|
2558
2799
|
createUsageTapClient,
|
|
2559
2800
|
defaultUsageTapErrorMapper,
|
|
@@ -2566,6 +2807,7 @@ async function renderPrompt(options) {
|
|
|
2566
2807
|
geminiAdapter,
|
|
2567
2808
|
getAdapter,
|
|
2568
2809
|
interpolate,
|
|
2810
|
+
llmasaserviceAdapter,
|
|
2569
2811
|
loadPromptFile,
|
|
2570
2812
|
openaiAdapter,
|
|
2571
2813
|
openaiResponsesAdapter,
|
|
@@ -2575,6 +2817,7 @@ async function renderPrompt(options) {
|
|
|
2575
2817
|
resolveIncludes,
|
|
2576
2818
|
runAnthropicWithUsageTap,
|
|
2577
2819
|
runGeminiWithUsageTap,
|
|
2820
|
+
runLLMAsAServiceWithUsageTap,
|
|
2578
2821
|
runOpenAIWithUsageTap,
|
|
2579
2822
|
runOpenRouterWithUsageTap,
|
|
2580
2823
|
validateAsset,
|