promptopskit 0.9.1 → 0.10.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.
Files changed (66) hide show
  1. package/README.md +9 -7
  2. package/SKILL.md +5 -4
  3. package/dist/{chunk-QZHR2YMK.js → chunk-46Z64RVO.js} +61 -21
  4. package/dist/{chunk-QZHR2YMK.js.map → chunk-46Z64RVO.js.map} +1 -1
  5. package/dist/{chunk-EDHPVR2F.js → chunk-7XLJOH2K.js} +3 -3
  6. package/dist/{chunk-VOXMOGU5.js → chunk-ALBSFXYR.js} +2 -1
  7. package/dist/chunk-ALBSFXYR.js.map +1 -0
  8. package/dist/{chunk-C5HHTLZX.js → chunk-IGLKVT74.js} +2 -2
  9. package/dist/{chunk-7GMCNHXJ.js → chunk-PSQWMBKX.js} +21 -21
  10. package/dist/chunk-PSQWMBKX.js.map +1 -0
  11. package/dist/{chunk-O3SRIDTH.js → chunk-QVJTND5A.js} +2 -2
  12. package/dist/{chunk-QHAIOVQ3.js → chunk-UULXO5I6.js} +2 -2
  13. package/dist/{chunk-D23T3X4V.js → chunk-VUQEB5ML.js} +2 -2
  14. package/dist/cli/index.js +1 -0
  15. package/dist/cli/index.js.map +1 -1
  16. package/dist/index.cjs +81 -39
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.cts +5 -3
  19. package/dist/index.d.ts +5 -3
  20. package/dist/index.js +11 -11
  21. package/dist/index.js.map +1 -1
  22. package/dist/providers/anthropic.cjs +60 -19
  23. package/dist/providers/anthropic.cjs.map +1 -1
  24. package/dist/providers/anthropic.d.cts +1 -1
  25. package/dist/providers/anthropic.d.ts +1 -1
  26. package/dist/providers/anthropic.js +3 -3
  27. package/dist/providers/gemini.cjs +60 -19
  28. package/dist/providers/gemini.cjs.map +1 -1
  29. package/dist/providers/gemini.d.cts +1 -1
  30. package/dist/providers/gemini.d.ts +1 -1
  31. package/dist/providers/gemini.js +3 -3
  32. package/dist/providers/llmasaservice.cjs +78 -38
  33. package/dist/providers/llmasaservice.cjs.map +1 -1
  34. package/dist/providers/llmasaservice.d.cts +6 -5
  35. package/dist/providers/llmasaservice.d.ts +6 -5
  36. package/dist/providers/llmasaservice.js +4 -6
  37. package/dist/providers/openai-responses.cjs +60 -19
  38. package/dist/providers/openai-responses.cjs.map +1 -1
  39. package/dist/providers/openai-responses.d.cts +1 -1
  40. package/dist/providers/openai-responses.d.ts +1 -1
  41. package/dist/providers/openai-responses.js +3 -3
  42. package/dist/providers/openai.cjs +60 -19
  43. package/dist/providers/openai.cjs.map +1 -1
  44. package/dist/providers/openai.d.cts +1 -1
  45. package/dist/providers/openai.d.ts +1 -1
  46. package/dist/providers/openai.js +3 -3
  47. package/dist/providers/openrouter.cjs +60 -19
  48. package/dist/providers/openrouter.cjs.map +1 -1
  49. package/dist/providers/openrouter.d.cts +1 -1
  50. package/dist/providers/openrouter.d.ts +1 -1
  51. package/dist/providers/openrouter.js +4 -4
  52. package/dist/testing.cjs +1 -0
  53. package/dist/testing.cjs.map +1 -1
  54. package/dist/testing.js +1 -1
  55. package/dist/{types-D6VJJo1x.d.ts → types-9Jv8eHhM.d.ts} +8 -1
  56. package/dist/{types-B4TWRzUY.d.cts → types-D3MemVmM.d.cts} +8 -1
  57. package/dist/usagetap/index.d.cts +1 -1
  58. package/dist/usagetap/index.d.ts +1 -1
  59. package/package.json +1 -1
  60. package/dist/chunk-7GMCNHXJ.js.map +0 -1
  61. package/dist/chunk-VOXMOGU5.js.map +0 -1
  62. /package/dist/{chunk-EDHPVR2F.js.map → chunk-7XLJOH2K.js.map} +0 -0
  63. /package/dist/{chunk-C5HHTLZX.js.map → chunk-IGLKVT74.js.map} +0 -0
  64. /package/dist/{chunk-O3SRIDTH.js.map → chunk-QVJTND5A.js.map} +0 -0
  65. /package/dist/{chunk-QHAIOVQ3.js.map → chunk-UULXO5I6.js.map} +0 -0
  66. /package/dist/{chunk-D23T3X4V.js.map → chunk-VUQEB5ML.js.map} +0 -0
package/dist/index.cjs CHANGED
@@ -33,7 +33,6 @@ __export(src_exports, {
33
33
  LLMASASERVICE_BASE_URL: () => LLMASASERVICE_BASE_URL,
34
34
  LLMASASERVICE_DEFAULT_MODEL: () => LLMASASERVICE_DEFAULT_MODEL,
35
35
  LLMASASERVICE_RESPONSE_HEADER_NAMES: () => LLMASASERVICE_RESPONSE_HEADER_NAMES,
36
- LLMASASERVICE_SDK_PLACEHOLDER_API_KEY: () => LLMASASERVICE_SDK_PLACEHOLDER_API_KEY,
37
36
  PromptAssetOverridesSchema: () => PromptAssetOverridesSchema,
38
37
  PromptAssetSchema: () => PromptAssetSchema,
39
38
  PromptOpsKit: () => PromptOpsKit,
@@ -1480,6 +1479,7 @@ var LLMAsAServiceCustomerSchema = import_zod.z.object({
1480
1479
  });
1481
1480
  var LLMAsAServiceProviderOptionsSchema = import_zod.z.object({
1482
1481
  base_url: import_zod.z.string().url().optional(),
1482
+ // Deprecated compatibility fields; the gateway no longer requires project routing.
1483
1483
  project_id: import_zod.z.string().optional(),
1484
1484
  customer: LLMAsAServiceCustomerSchema.optional(),
1485
1485
  conversationId: import_zod.z.string().optional(),
@@ -2536,6 +2536,7 @@ async function applyPromptCompressionForRender(asset, runtime) {
2536
2536
  aggressiveness: theTokenCompanyConfig?.aggressiveness
2537
2537
  });
2538
2538
  promptTemplate = result.output;
2539
+ warnings.push(...result.warnings ?? []);
2539
2540
  compression.push({
2540
2541
  provider: "thetokencompany",
2541
2542
  model,
@@ -2601,41 +2602,80 @@ function reportHeuristicCompressionWarnings2(warnings, compressionWarnings, scop
2601
2602
  async function compressWithTheTokenCompany(input, options) {
2602
2603
  const apiKey = options.apiKey ?? getEnv("THETOKENCOMPANY_API_KEY") ?? getEnv("TTC_API_KEY");
2603
2604
  if (!apiKey) {
2604
- throw new Error(
2605
- "TheTokenCompany compression is enabled, but no API key was provided. Pass theTokenCompany.apiKey to renderPrompt() or set THETOKENCOMPANY_API_KEY."
2605
+ return createTheTokenCompanyFallback(
2606
+ input,
2607
+ "no API key was provided"
2606
2608
  );
2607
2609
  }
2608
2610
  const fetchImpl = options.fetch ?? globalThis.fetch;
2609
2611
  if (!fetchImpl) {
2610
- throw new Error("TheTokenCompany compression requires a runtime with fetch support.");
2612
+ return createTheTokenCompanyFallback(
2613
+ input,
2614
+ "fetch is unavailable in this runtime"
2615
+ );
2611
2616
  }
2612
2617
  const baseURL = (options.baseURL ?? THETOKENCOMPANY_DEFAULT_BASE_URL).replace(/\/+$/, "");
2613
2618
  const compressionSettings = options.aggressiveness === void 0 ? void 0 : { aggressiveness: options.aggressiveness };
2614
- const response = await fetchImpl(`${baseURL}/v1/compress`, {
2615
- method: "POST",
2616
- headers: {
2617
- Authorization: `Bearer ${apiKey}`,
2618
- "Content-Type": "application/json"
2619
- },
2620
- body: JSON.stringify({
2621
- model: options.model,
2619
+ let response;
2620
+ try {
2621
+ response = await fetchImpl(`${baseURL}/v1/compress`, {
2622
+ method: "POST",
2623
+ headers: {
2624
+ Authorization: `Bearer ${apiKey}`,
2625
+ "Content-Type": "application/json"
2626
+ },
2627
+ body: JSON.stringify({
2628
+ model: options.model,
2629
+ input,
2630
+ ...compressionSettings ? { compression_settings: compressionSettings } : {}
2631
+ })
2632
+ });
2633
+ } catch (error) {
2634
+ return createTheTokenCompanyFallback(
2622
2635
  input,
2623
- ...compressionSettings ? { compression_settings: compressionSettings } : {}
2624
- })
2625
- });
2636
+ `request failed: ${toErrorMessage(error)}`
2637
+ );
2638
+ }
2626
2639
  if (!response.ok) {
2627
- const body = await response.text().catch(() => "");
2628
- throw new Error(
2629
- `TheTokenCompany compression failed with HTTP ${response.status}` + (body ? `: ${body}` : ".")
2640
+ return createTheTokenCompanyFallback(
2641
+ input,
2642
+ `service returned HTTP ${response.status}`
2643
+ );
2644
+ }
2645
+ let data;
2646
+ try {
2647
+ data = await response.json();
2648
+ } catch (error) {
2649
+ return createTheTokenCompanyFallback(
2650
+ input,
2651
+ `response body was not valid JSON: ${toErrorMessage(error)}`
2630
2652
  );
2631
2653
  }
2632
- const data = await response.json();
2633
2654
  const normalized = normalizeTheTokenCompanyCompressResponse(data);
2634
2655
  if (!normalized) {
2635
- throw new Error("TheTokenCompany compression returned an invalid response payload.");
2656
+ return createTheTokenCompanyFallback(
2657
+ input,
2658
+ "response payload was invalid"
2659
+ );
2636
2660
  }
2637
2661
  return normalized;
2638
2662
  }
2663
+ function createTheTokenCompanyFallback(input, reason) {
2664
+ const tokens = estimateHeuristicTokens(input);
2665
+ return {
2666
+ output: input,
2667
+ output_tokens: tokens,
2668
+ input_tokens: tokens,
2669
+ tokens_saved: 0,
2670
+ compression_ratio: tokens === 0 ? 0 : 1,
2671
+ warnings: [
2672
+ `POK057: TheTokenCompany compression skipped; using uncompressed prompt with zero token savings (${reason}).`
2673
+ ]
2674
+ };
2675
+ }
2676
+ function toErrorMessage(error) {
2677
+ return error instanceof Error && error.message ? error.message : "unknown error";
2678
+ }
2639
2679
  function normalizeTheTokenCompanyCompressResponse(data) {
2640
2680
  if (typeof data.output !== "string" || typeof data.output_tokens !== "number") {
2641
2681
  return void 0;
@@ -3232,20 +3272,17 @@ var openrouterAdapter = withPromptInputSupport({
3232
3272
 
3233
3273
  // src/providers/llmasaservice.ts
3234
3274
  var LLMASASERVICE_BASE_URL = "https://gateway.llmasaservice.io";
3235
- var LLMASASERVICE_SDK_PLACEHOLDER_API_KEY = "not-used-by-llm-gateway";
3236
3275
  var LLMASASERVICE_DEFAULT_MODEL = "group:standard";
3237
3276
  var LLMASASERVICE_RESPONSE_HEADER_NAMES = [
3238
3277
  "x-request-id",
3239
3278
  "x-llm-model-id",
3240
3279
  "x-llm-model-group"
3241
3280
  ];
3242
- function createLLMAsAServiceOpenAIConfig(options = {}) {
3281
+ function createLLMAsAServiceOpenAIConfig(options) {
3243
3282
  return {
3244
3283
  baseURL: options.baseURL ?? LLMASASERVICE_BASE_URL,
3245
- apiKey: LLMASASERVICE_SDK_PLACEHOLDER_API_KEY,
3246
- defaultHeaders: {
3247
- "x-project-id": options.projectId ?? ""
3248
- }
3284
+ apiKey: options.apiKey,
3285
+ ...options.projectId ? { defaultHeaders: { "x-project-id": options.projectId } } : {}
3249
3286
  };
3250
3287
  }
3251
3288
  function isGPT5ModelSelector(model) {
@@ -3262,9 +3299,6 @@ function rawCustomerId(asset) {
3262
3299
  const customer = isRecord(asset.raw?.llmasaservice?.customer) ? asset.raw.llmasaservice.customer : void 0;
3263
3300
  return customer?.customer_id;
3264
3301
  }
3265
- function isGatewayRenderValidation(runtime) {
3266
- return runtime?.runtime !== void 0;
3267
- }
3268
3302
  var llmasaserviceAdapter = withPromptInputSupport({
3269
3303
  name: "llmasaservice",
3270
3304
  validate(asset, runtime) {
@@ -3281,12 +3315,12 @@ var llmasaserviceAdapter = withPromptInputSupport({
3281
3315
  );
3282
3316
  const errors = [...validation.errors];
3283
3317
  const gatewayOptions = resolvedAsset.provider_options?.llmasaservice;
3284
- const missingProjectId = !gatewayOptions?.project_id;
3318
+ const missingApiKey = !runtime?.llmasaservice?.apiKey;
3285
3319
  const missingCustomerId = !gatewayOptions?.customer?.customer_id && typeof rawCustomerId(resolvedAsset) !== "string";
3286
- const validateRenderMetadata = isGatewayRenderValidation(runtime);
3287
- if (missingProjectId && validateRenderMetadata) {
3320
+ const validateRenderMetadata = runtime !== void 0;
3321
+ if (missingApiKey && validateRenderMetadata) {
3288
3322
  errors.push(
3289
- "LLMAsAService adapter requires provider_options.llmasaservice.project_id for x-project-id routing."
3323
+ "LLMAsAService adapter requires llmasaservice.apiKey for Authorization Bearer authentication."
3290
3324
  );
3291
3325
  }
3292
3326
  if (missingCustomerId && validateRenderMetadata) {
@@ -3294,9 +3328,9 @@ var llmasaserviceAdapter = withPromptInputSupport({
3294
3328
  "LLMAsAService adapter requires customer.customer_id in provider_options.llmasaservice.customer or raw.llmasaservice.customer."
3295
3329
  );
3296
3330
  }
3297
- if ((missingProjectId || missingCustomerId) && !validateRenderMetadata) {
3331
+ if ((missingApiKey || missingCustomerId) && !validateRenderMetadata) {
3298
3332
  warnings.push(
3299
- "LLMAsAService project_id and customer.customer_id must be supplied before rendering, usually through runtime provider_options."
3333
+ "LLMAsAService apiKey and customer.customer_id must be supplied before rendering."
3300
3334
  );
3301
3335
  }
3302
3336
  return {
@@ -3329,14 +3363,21 @@ var llmasaserviceAdapter = withPromptInputSupport({
3329
3363
  if (options?.conversationTitle !== void 0) body.conversationTitle = options.conversationTitle;
3330
3364
  if (options?.projectId !== void 0) body.projectId = options.projectId;
3331
3365
  body = applyRawProviderBody(body, resolvedAsset, "llmasaservice");
3332
- const projectId = options?.project_id ?? "";
3366
+ const apiKey = runtime.llmasaservice?.apiKey;
3367
+ if (!apiKey) {
3368
+ throw new Error(
3369
+ "LLMAsAService adapter requires llmasaservice.apiKey for Authorization Bearer authentication."
3370
+ );
3371
+ }
3372
+ const projectId = options?.project_id;
3333
3373
  return {
3334
3374
  body,
3335
3375
  provider: "llmasaservice",
3336
3376
  model,
3337
3377
  baseURL: options?.base_url ?? LLMASASERVICE_BASE_URL,
3338
3378
  headers: {
3339
- "x-project-id": projectId
3379
+ Authorization: `Bearer ${apiKey}`,
3380
+ ...projectId ? { "x-project-id": projectId } : {}
3340
3381
  }
3341
3382
  };
3342
3383
  }
@@ -4188,7 +4229,8 @@ var PromptOpsKit = class {
4188
4229
  }
4189
4230
  const adapter = getAdapter(options.provider);
4190
4231
  const validation = adapter.validate(resolved, {
4191
- openaiResponses: options.openaiResponses
4232
+ openaiResponses: options.openaiResponses,
4233
+ llmasaservice: options.llmasaservice
4192
4234
  });
4193
4235
  if (!validation.valid) {
4194
4236
  throw new Error(
@@ -4225,6 +4267,7 @@ var PromptOpsKit = class {
4225
4267
  toolRegistry: options.toolRegistry,
4226
4268
  strict: options.strict,
4227
4269
  openaiResponses: options.openaiResponses,
4270
+ llmasaservice: options.llmasaservice,
4228
4271
  theTokenCompany: options.theTokenCompany
4229
4272
  });
4230
4273
  const request = adapter.render(prepared.asset, prepared.runtime);
@@ -4298,7 +4341,6 @@ async function renderPrompt(options) {
4298
4341
  LLMASASERVICE_BASE_URL,
4299
4342
  LLMASASERVICE_DEFAULT_MODEL,
4300
4343
  LLMASASERVICE_RESPONSE_HEADER_NAMES,
4301
- LLMASASERVICE_SDK_PLACEHOLDER_API_KEY,
4302
4344
  PromptAssetOverridesSchema,
4303
4345
  PromptAssetSchema,
4304
4346
  PromptOpsKit,