promptopskit 0.6.2 → 0.7.1

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 (69) hide show
  1. package/README.md +38 -28
  2. package/dist/{chunk-VMLGUI4F.js → chunk-35NN5F6O.js} +2 -2
  3. package/dist/{chunk-GLT3YYWK.js → chunk-3G3EAV7H.js} +2 -2
  4. package/dist/{chunk-XEZJZ3IG.js → chunk-6NOUETAC.js} +2 -2
  5. package/dist/{chunk-JR7252DG.js → chunk-F552OBUV.js} +116 -6
  6. package/dist/chunk-F552OBUV.js.map +1 -0
  7. package/dist/{chunk-FNCIBZJF.js → chunk-FICB2ZSK.js} +3 -3
  8. package/dist/{chunk-55B7QQBK.js → chunk-OWMP5NMV.js} +2 -2
  9. package/dist/{chunk-IPFD5Y3O.js → chunk-R65RAHAG.js} +3 -3
  10. package/dist/{chunk-UY5OKMVP.js → chunk-ULVY473P.js} +27 -2
  11. package/dist/chunk-ULVY473P.js.map +1 -0
  12. package/dist/cli/index.js +37 -1
  13. package/dist/cli/index.js.map +1 -1
  14. package/dist/index.cjs +148 -8
  15. package/dist/index.cjs.map +1 -1
  16. package/dist/index.d.cts +8 -5
  17. package/dist/index.d.ts +8 -5
  18. package/dist/index.js +20 -11
  19. package/dist/index.js.map +1 -1
  20. package/dist/providers/anthropic.cjs +137 -5
  21. package/dist/providers/anthropic.cjs.map +1 -1
  22. package/dist/providers/anthropic.d.cts +2 -2
  23. package/dist/providers/anthropic.d.ts +2 -2
  24. package/dist/providers/anthropic.js +3 -3
  25. package/dist/providers/gemini.cjs +137 -5
  26. package/dist/providers/gemini.cjs.map +1 -1
  27. package/dist/providers/gemini.d.cts +2 -2
  28. package/dist/providers/gemini.d.ts +2 -2
  29. package/dist/providers/gemini.js +3 -3
  30. package/dist/providers/llmasaservice.cjs +137 -5
  31. package/dist/providers/llmasaservice.cjs.map +1 -1
  32. package/dist/providers/llmasaservice.d.cts +2 -2
  33. package/dist/providers/llmasaservice.d.ts +2 -2
  34. package/dist/providers/llmasaservice.js +4 -4
  35. package/dist/providers/openai-responses.cjs +137 -5
  36. package/dist/providers/openai-responses.cjs.map +1 -1
  37. package/dist/providers/openai-responses.d.cts +2 -2
  38. package/dist/providers/openai-responses.d.ts +2 -2
  39. package/dist/providers/openai-responses.js +3 -3
  40. package/dist/providers/openai.cjs +137 -5
  41. package/dist/providers/openai.cjs.map +1 -1
  42. package/dist/providers/openai.d.cts +2 -2
  43. package/dist/providers/openai.d.ts +2 -2
  44. package/dist/providers/openai.js +3 -3
  45. package/dist/providers/openrouter.cjs +137 -5
  46. package/dist/providers/openrouter.cjs.map +1 -1
  47. package/dist/providers/openrouter.d.cts +2 -2
  48. package/dist/providers/openrouter.d.ts +2 -2
  49. package/dist/providers/openrouter.js +4 -4
  50. package/dist/{schema-CuYsv8JA.d.cts → schema-DBcSns_b.d.cts} +192 -0
  51. package/dist/{schema-CuYsv8JA.d.ts → schema-DBcSns_b.d.ts} +192 -0
  52. package/dist/testing.cjs +11 -0
  53. package/dist/testing.cjs.map +1 -1
  54. package/dist/testing.d.cts +1 -1
  55. package/dist/testing.d.ts +1 -1
  56. package/dist/testing.js +1 -1
  57. package/dist/{types-DpK0mTHL.d.ts → types-8T2D5KB5.d.cts} +20 -2
  58. package/dist/{types-UA_p9uJy.d.cts → types-BlLXT5Qb.d.ts} +20 -2
  59. package/dist/usagetap/index.d.cts +2 -2
  60. package/dist/usagetap/index.d.ts +2 -2
  61. package/package.json +1 -1
  62. package/dist/chunk-JR7252DG.js.map +0 -1
  63. package/dist/chunk-UY5OKMVP.js.map +0 -1
  64. /package/dist/{chunk-VMLGUI4F.js.map → chunk-35NN5F6O.js.map} +0 -0
  65. /package/dist/{chunk-GLT3YYWK.js.map → chunk-3G3EAV7H.js.map} +0 -0
  66. /package/dist/{chunk-XEZJZ3IG.js.map → chunk-6NOUETAC.js.map} +0 -0
  67. /package/dist/{chunk-FNCIBZJF.js.map → chunk-FICB2ZSK.js.map} +0 -0
  68. /package/dist/{chunk-55B7QQBK.js.map → chunk-OWMP5NMV.js.map} +0 -0
  69. /package/dist/{chunk-IPFD5Y3O.js.map → chunk-R65RAHAG.js.map} +0 -0
package/dist/index.cjs CHANGED
@@ -37,6 +37,8 @@ __export(src_exports, {
37
37
  PromptAssetOverridesSchema: () => PromptAssetOverridesSchema,
38
38
  PromptAssetSchema: () => PromptAssetSchema,
39
39
  PromptOpsKit: () => PromptOpsKit,
40
+ THETOKENCOMPANY_DEFAULT_BASE_URL: () => THETOKENCOMPANY_DEFAULT_BASE_URL,
41
+ THETOKENCOMPANY_DEFAULT_MODEL: () => THETOKENCOMPANY_DEFAULT_MODEL,
40
42
  anthropicAdapter: () => anthropicAdapter,
41
43
  applyOverrides: () => applyOverrides,
42
44
  applyUsageTapEntitlements: () => applyUsageTapEntitlements,
@@ -457,6 +459,16 @@ function mergeOverride(base, override) {
457
459
  if (override.response !== void 0) {
458
460
  result.response = { ...result.response, ...override.response };
459
461
  }
462
+ if (override.compression !== void 0) {
463
+ result.compression = {
464
+ ...result.compression,
465
+ ...override.compression,
466
+ thetokencompany: mergeRecordBlock(
467
+ result.compression?.thetokencompany,
468
+ override.compression.thetokencompany
469
+ )
470
+ };
471
+ }
460
472
  if (override.cache !== void 0) {
461
473
  result.cache = {
462
474
  ...result.cache,
@@ -682,6 +694,14 @@ var RawProviderBodySchema = import_zod.z.object({
682
694
  openrouter: import_zod.z.record(import_zod.z.unknown()).optional(),
683
695
  llmasaservice: import_zod.z.record(import_zod.z.unknown()).optional()
684
696
  });
697
+ var TheTokenCompanyCompressionSchema = import_zod.z.object({
698
+ enabled: import_zod.z.boolean().optional(),
699
+ model: import_zod.z.string().min(1).optional(),
700
+ aggressiveness: import_zod.z.number().min(0).max(1).optional()
701
+ });
702
+ var CompressionSchema = import_zod.z.object({
703
+ thetokencompany: TheTokenCompanyCompressionSchema.optional()
704
+ });
685
705
  var OpenAICacheSchema = import_zod.z.object({
686
706
  prompt_cache_key: import_zod.z.string().min(1).optional(),
687
707
  retention: import_zod.z.enum(["in_memory", "24h"]).optional()
@@ -754,6 +774,7 @@ var PromptAssetOverridesSchema = import_zod.z.object({
754
774
  reasoning: ReasoningSchema.optional(),
755
775
  sampling: SamplingSchema.optional(),
756
776
  response: ResponseSchemaWithValidation.optional(),
777
+ compression: CompressionSchema.optional(),
757
778
  cache: CacheSchema.optional(),
758
779
  raw: RawProviderBodySchema.optional(),
759
780
  tools: import_zod.z.array(ToolRefSchema).optional(),
@@ -775,6 +796,7 @@ var PromptDefaultsSchema = import_zod.z.object({
775
796
  reasoning: ReasoningSchema.optional(),
776
797
  sampling: SamplingSchema.optional(),
777
798
  response: ResponseSchema.optional(),
799
+ compression: CompressionSchema.optional(),
778
800
  cache: CacheSchema.optional(),
779
801
  raw: RawProviderBodySchema.optional(),
780
802
  tools: import_zod.z.array(ToolRefSchema).optional(),
@@ -799,6 +821,7 @@ var PromptAssetSchema = import_zod.z.object({
799
821
  reasoning: ReasoningSchema.optional(),
800
822
  sampling: SamplingSchema.optional(),
801
823
  response: ResponseSchemaWithValidation.optional(),
824
+ compression: CompressionSchema.optional(),
802
825
  cache: CacheSchema.optional(),
803
826
  raw: RawProviderBodySchema.optional(),
804
827
  tools: import_zod.z.array(ToolRefSchema).optional(),
@@ -1159,6 +1182,7 @@ function mergeDefaults(base, local) {
1159
1182
  reasoning: mergeRecordBlock2(base.reasoning, local.reasoning),
1160
1183
  sampling: mergeRecordBlock2(base.sampling, local.sampling),
1161
1184
  response: mergeRecordBlock2(base.response, local.response),
1185
+ compression: mergeCompression(base.compression, local.compression),
1162
1186
  cache: mergeCache(base.cache, local.cache),
1163
1187
  raw: mergeRaw(base.raw, local.raw),
1164
1188
  tools: local.tools ?? base.tools,
@@ -1179,6 +1203,7 @@ function mergeDefaults(base, local) {
1179
1203
  };
1180
1204
  }
1181
1205
  function applyDefaults(asset, defaults) {
1206
+ const compression = mergeCompression(defaults.compression, asset.compression);
1182
1207
  const cache = mergeCache(defaults.cache, asset.cache);
1183
1208
  const raw = mergeRaw(defaults.raw, asset.raw);
1184
1209
  const providerOptions = mergeProviderOptions(defaults.provider_options, asset.provider_options);
@@ -1192,7 +1217,7 @@ function applyDefaults(asset, defaults) {
1192
1217
  const hasDefaultMetadata = defaults.metadata && Object.keys(defaults.metadata).length > 0;
1193
1218
  const hasDefaultSystem = !!defaults.sections?.system_instructions;
1194
1219
  const hasDefaultScalars = defaults.provider !== void 0 || defaults.model !== void 0 || defaults.fallback_models !== void 0 || defaults.tools !== void 0 || defaults.includes !== void 0;
1195
- const hasDefaultObjects = cache !== void 0 || raw !== void 0 || providerOptions !== void 0 || reasoning !== void 0 || sampling !== void 0 || response !== void 0 || mcp !== void 0 || context !== void 0 || environments !== void 0 || tiers !== void 0;
1220
+ const hasDefaultObjects = compression !== void 0 || cache !== void 0 || raw !== void 0 || providerOptions !== void 0 || reasoning !== void 0 || sampling !== void 0 || response !== void 0 || mcp !== void 0 || context !== void 0 || environments !== void 0 || tiers !== void 0;
1196
1221
  if (!hasDefaultMetadata && !hasDefaultSystem && !hasDefaultScalars && !hasDefaultObjects) {
1197
1222
  return asset;
1198
1223
  }
@@ -1211,6 +1236,7 @@ function applyDefaults(asset, defaults) {
1211
1236
  reasoning,
1212
1237
  sampling,
1213
1238
  response,
1239
+ compression,
1214
1240
  cache,
1215
1241
  raw,
1216
1242
  tools: asset.tools ?? defaults.tools,
@@ -1280,6 +1306,15 @@ function mergeCache(base, local) {
1280
1306
  if (merged.google && Object.keys(merged.google).length === 0) delete merged.google;
1281
1307
  return Object.keys(merged).length > 0 ? merged : void 0;
1282
1308
  }
1309
+ function mergeCompression(base, local) {
1310
+ const merged = {
1311
+ ...base ?? {},
1312
+ ...local ?? {},
1313
+ thetokencompany: mergeRecordBlock2(base?.thetokencompany, local?.thetokencompany)
1314
+ };
1315
+ removeEmptyProviderBlocks(merged);
1316
+ return Object.keys(merged).length > 0 ? merged : void 0;
1317
+ }
1283
1318
  function mergeRaw(base, local) {
1284
1319
  const merged = {
1285
1320
  ...base ?? {},
@@ -1323,12 +1358,14 @@ function mergeOverrideConfig(base, local) {
1323
1358
  const reasoning = mergeRecordBlock2(base?.reasoning, local.reasoning);
1324
1359
  const sampling = mergeRecordBlock2(base?.sampling, local.sampling);
1325
1360
  const response = mergeRecordBlock2(base?.response, local.response);
1361
+ const compression = mergeCompression(base?.compression, local.compression);
1326
1362
  const cache = mergeCache(base?.cache, local.cache);
1327
1363
  const raw = mergeRaw(base?.raw, local.raw);
1328
1364
  const providerOptions = mergeProviderOptions(base?.provider_options, local.provider_options);
1329
1365
  if (reasoning !== void 0) merged.reasoning = reasoning;
1330
1366
  if (sampling !== void 0) merged.sampling = sampling;
1331
1367
  if (response !== void 0) merged.response = response;
1368
+ if (compression !== void 0) merged.compression = compression;
1332
1369
  if (cache !== void 0) merged.cache = cache;
1333
1370
  if (raw !== void 0) merged.raw = raw;
1334
1371
  if (providerOptions !== void 0) merged.provider_options = providerOptions;
@@ -1524,6 +1561,97 @@ function compactHistoryForPrompt(asset, runtime) {
1524
1561
  return [compacted, ...preserved];
1525
1562
  }
1526
1563
 
1564
+ // src/compression.ts
1565
+ var THETOKENCOMPANY_DEFAULT_MODEL = "bear-2";
1566
+ var THETOKENCOMPANY_DEFAULT_BASE_URL = "https://api.thetokencompany.com";
1567
+ async function applyPromptCompressionForRender(asset, runtime) {
1568
+ const config = asset.compression?.thetokencompany;
1569
+ if (config?.enabled !== true || !asset.sections.prompt_template) {
1570
+ return { asset, runtime, compression: [] };
1571
+ }
1572
+ const sections = renderSections(asset, {
1573
+ variables: runtime.variables,
1574
+ strict: runtime.strict
1575
+ });
1576
+ if (!sections.prompt_template) {
1577
+ return { asset, runtime, compression: [] };
1578
+ }
1579
+ const model = config.model ?? THETOKENCOMPANY_DEFAULT_MODEL;
1580
+ const result = await compressWithTheTokenCompany(sections.prompt_template, {
1581
+ apiKey: runtime.theTokenCompany?.apiKey,
1582
+ baseURL: runtime.theTokenCompany?.baseURL,
1583
+ fetch: runtime.theTokenCompany?.fetch,
1584
+ model,
1585
+ aggressiveness: config.aggressiveness
1586
+ });
1587
+ return {
1588
+ asset: {
1589
+ ...asset,
1590
+ sections: {
1591
+ ...asset.sections,
1592
+ ...sections,
1593
+ prompt_template: result.output
1594
+ }
1595
+ },
1596
+ runtime: {
1597
+ ...runtime,
1598
+ variables: {},
1599
+ strict: false
1600
+ },
1601
+ compression: [{
1602
+ provider: "thetokencompany",
1603
+ model,
1604
+ inputTokens: result.input_tokens,
1605
+ outputTokens: result.output_tokens,
1606
+ tokensSaved: result.tokens_saved,
1607
+ compressionRatio: result.compression_ratio
1608
+ }]
1609
+ };
1610
+ }
1611
+ async function compressWithTheTokenCompany(input, options) {
1612
+ const apiKey = options.apiKey ?? getEnv("THETOKENCOMPANY_API_KEY") ?? getEnv("TTC_API_KEY");
1613
+ if (!apiKey) {
1614
+ throw new Error(
1615
+ "TheTokenCompany compression is enabled, but no API key was provided. Pass theTokenCompany.apiKey to renderPrompt() or set THETOKENCOMPANY_API_KEY."
1616
+ );
1617
+ }
1618
+ const fetchImpl = options.fetch ?? globalThis.fetch;
1619
+ if (!fetchImpl) {
1620
+ throw new Error("TheTokenCompany compression requires a runtime with fetch support.");
1621
+ }
1622
+ const baseURL = (options.baseURL ?? THETOKENCOMPANY_DEFAULT_BASE_URL).replace(/\/+$/, "");
1623
+ const compressionSettings = options.aggressiveness === void 0 ? void 0 : { aggressiveness: options.aggressiveness };
1624
+ const response = await fetchImpl(`${baseURL}/v1/compress`, {
1625
+ method: "POST",
1626
+ headers: {
1627
+ Authorization: `Bearer ${apiKey}`,
1628
+ "Content-Type": "application/json"
1629
+ },
1630
+ body: JSON.stringify({
1631
+ model: options.model,
1632
+ input,
1633
+ ...compressionSettings ? { compression_settings: compressionSettings } : {}
1634
+ })
1635
+ });
1636
+ if (!response.ok) {
1637
+ const body = await response.text().catch(() => "");
1638
+ throw new Error(
1639
+ `TheTokenCompany compression failed with HTTP ${response.status}` + (body ? `: ${body}` : ".")
1640
+ );
1641
+ }
1642
+ const data = await response.json();
1643
+ if (typeof data.output !== "string" || typeof data.output_tokens !== "number" || typeof data.input_tokens !== "number" || typeof data.tokens_saved !== "number" || typeof data.compression_ratio !== "number") {
1644
+ throw new Error("TheTokenCompany compression returned an invalid response payload.");
1645
+ }
1646
+ return data;
1647
+ }
1648
+ function getEnv(name) {
1649
+ if (typeof process === "undefined") {
1650
+ return void 0;
1651
+ }
1652
+ return process.env[name];
1653
+ }
1654
+
1527
1655
  // src/providers/prompt-input.ts
1528
1656
  function isPromptLookup(input) {
1529
1657
  return "path" in input && typeof input.path === "string";
@@ -1547,21 +1675,27 @@ function withPromptInputSupport(adapter) {
1547
1675
  };
1548
1676
  const renderPrompt2 = async (input, runtime) => {
1549
1677
  const resolved = await resolveProviderPromptInput(input, runtime);
1550
- const sanitization = sanitizeContextVariables(resolved, runtime.variables, {
1678
+ const resolvedForRender = resolveAssetForProvider(resolved, runtime);
1679
+ const sanitization = sanitizeContextVariables(resolvedForRender, runtime.variables, {
1551
1680
  onContextOverflow: runtime.onContextOverflow
1552
1681
  });
1553
1682
  if (sanitization.shortCircuit) {
1554
1683
  return {
1555
1684
  provider: adapter.name,
1556
- model: resolved.model ?? "",
1685
+ model: resolvedForRender.model ?? "",
1557
1686
  returnMessage: sanitization.shortCircuit.returnMessage
1558
1687
  };
1559
1688
  }
1560
- return adapter.render(resolved, {
1689
+ const prepared = await applyPromptCompressionForRender(resolvedForRender, {
1561
1690
  ...runtime,
1691
+ environment: void 0,
1692
+ tier: void 0,
1693
+ runtime: void 0,
1562
1694
  variables: sanitization.variables,
1563
- history: compactHistoryForPrompt(resolved, runtime)
1695
+ history: compactHistoryForPrompt(resolvedForRender, runtime)
1564
1696
  });
1697
+ const request = adapter.render(prepared.asset, prepared.runtime);
1698
+ return prepared.compression.length > 0 ? { ...request, compression: prepared.compression } : request;
1565
1699
  };
1566
1700
  return {
1567
1701
  ...adapter,
@@ -2253,6 +2387,7 @@ var KNOWN_FRONT_MATTER_KEYS = /* @__PURE__ */ new Set([
2253
2387
  "tiers",
2254
2388
  "metadata",
2255
2389
  "cache",
2390
+ "compression",
2256
2391
  "provider_options",
2257
2392
  "raw"
2258
2393
  ]);
@@ -3023,7 +3158,7 @@ var PromptOpsKit = class {
3023
3158
  console.warn(`[promptopskit] Warning: ${warning}`);
3024
3159
  }
3025
3160
  }
3026
- const request = adapter.render(resolved, {
3161
+ const prepared = await applyPromptCompressionForRender(resolved, {
3027
3162
  variables: sanitization.variables,
3028
3163
  history: compactHistoryForPrompt(resolved, {
3029
3164
  history: options.history,
@@ -3032,11 +3167,14 @@ var PromptOpsKit = class {
3032
3167
  onHistoryCompaction: options.onHistoryCompaction,
3033
3168
  toolRegistry: options.toolRegistry,
3034
3169
  strict: options.strict,
3035
- openaiResponses: options.openaiResponses
3170
+ openaiResponses: options.openaiResponses,
3171
+ theTokenCompany: options.theTokenCompany
3036
3172
  });
3173
+ const request = adapter.render(prepared.asset, prepared.runtime);
3037
3174
  return {
3038
3175
  resolved,
3039
- request,
3176
+ request: prepared.compression.length > 0 ? { ...request, compression: prepared.compression } : request,
3177
+ ...prepared.compression.length > 0 ? { compression: prepared.compression } : {},
3040
3178
  warnings: shouldIncludeContextWarningsInResult(contextWarningPolicy) ? [...validation.warnings, ...contextSizeWarnings] : validation.warnings
3041
3179
  };
3042
3180
  }
@@ -3101,6 +3239,8 @@ async function renderPrompt(options) {
3101
3239
  PromptAssetOverridesSchema,
3102
3240
  PromptAssetSchema,
3103
3241
  PromptOpsKit,
3242
+ THETOKENCOMPANY_DEFAULT_BASE_URL,
3243
+ THETOKENCOMPANY_DEFAULT_MODEL,
3104
3244
  anthropicAdapter,
3105
3245
  applyOverrides,
3106
3246
  applyUsageTapEntitlements,