promptopskit 0.6.2 → 0.7.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 (68) hide show
  1. package/dist/{chunk-VMLGUI4F.js → chunk-35NN5F6O.js} +2 -2
  2. package/dist/{chunk-GLT3YYWK.js → chunk-3G3EAV7H.js} +2 -2
  3. package/dist/{chunk-XEZJZ3IG.js → chunk-6NOUETAC.js} +2 -2
  4. package/dist/{chunk-JR7252DG.js → chunk-F552OBUV.js} +116 -6
  5. package/dist/chunk-F552OBUV.js.map +1 -0
  6. package/dist/{chunk-FNCIBZJF.js → chunk-FICB2ZSK.js} +3 -3
  7. package/dist/{chunk-55B7QQBK.js → chunk-OWMP5NMV.js} +2 -2
  8. package/dist/{chunk-IPFD5Y3O.js → chunk-R65RAHAG.js} +3 -3
  9. package/dist/{chunk-UY5OKMVP.js → chunk-ULVY473P.js} +27 -2
  10. package/dist/chunk-ULVY473P.js.map +1 -0
  11. package/dist/cli/index.js +37 -1
  12. package/dist/cli/index.js.map +1 -1
  13. package/dist/index.cjs +148 -8
  14. package/dist/index.cjs.map +1 -1
  15. package/dist/index.d.cts +8 -5
  16. package/dist/index.d.ts +8 -5
  17. package/dist/index.js +20 -11
  18. package/dist/index.js.map +1 -1
  19. package/dist/providers/anthropic.cjs +137 -5
  20. package/dist/providers/anthropic.cjs.map +1 -1
  21. package/dist/providers/anthropic.d.cts +2 -2
  22. package/dist/providers/anthropic.d.ts +2 -2
  23. package/dist/providers/anthropic.js +3 -3
  24. package/dist/providers/gemini.cjs +137 -5
  25. package/dist/providers/gemini.cjs.map +1 -1
  26. package/dist/providers/gemini.d.cts +2 -2
  27. package/dist/providers/gemini.d.ts +2 -2
  28. package/dist/providers/gemini.js +3 -3
  29. package/dist/providers/llmasaservice.cjs +137 -5
  30. package/dist/providers/llmasaservice.cjs.map +1 -1
  31. package/dist/providers/llmasaservice.d.cts +2 -2
  32. package/dist/providers/llmasaservice.d.ts +2 -2
  33. package/dist/providers/llmasaservice.js +4 -4
  34. package/dist/providers/openai-responses.cjs +137 -5
  35. package/dist/providers/openai-responses.cjs.map +1 -1
  36. package/dist/providers/openai-responses.d.cts +2 -2
  37. package/dist/providers/openai-responses.d.ts +2 -2
  38. package/dist/providers/openai-responses.js +3 -3
  39. package/dist/providers/openai.cjs +137 -5
  40. package/dist/providers/openai.cjs.map +1 -1
  41. package/dist/providers/openai.d.cts +2 -2
  42. package/dist/providers/openai.d.ts +2 -2
  43. package/dist/providers/openai.js +3 -3
  44. package/dist/providers/openrouter.cjs +137 -5
  45. package/dist/providers/openrouter.cjs.map +1 -1
  46. package/dist/providers/openrouter.d.cts +2 -2
  47. package/dist/providers/openrouter.d.ts +2 -2
  48. package/dist/providers/openrouter.js +4 -4
  49. package/dist/{schema-CuYsv8JA.d.cts → schema-DBcSns_b.d.cts} +192 -0
  50. package/dist/{schema-CuYsv8JA.d.ts → schema-DBcSns_b.d.ts} +192 -0
  51. package/dist/testing.cjs +11 -0
  52. package/dist/testing.cjs.map +1 -1
  53. package/dist/testing.d.cts +1 -1
  54. package/dist/testing.d.ts +1 -1
  55. package/dist/testing.js +1 -1
  56. package/dist/{types-DpK0mTHL.d.ts → types-8T2D5KB5.d.cts} +20 -2
  57. package/dist/{types-UA_p9uJy.d.cts → types-BlLXT5Qb.d.ts} +20 -2
  58. package/dist/usagetap/index.d.cts +2 -2
  59. package/dist/usagetap/index.d.ts +2 -2
  60. package/package.json +1 -1
  61. package/dist/chunk-JR7252DG.js.map +0 -1
  62. package/dist/chunk-UY5OKMVP.js.map +0 -1
  63. /package/dist/{chunk-VMLGUI4F.js.map → chunk-35NN5F6O.js.map} +0 -0
  64. /package/dist/{chunk-GLT3YYWK.js.map → chunk-3G3EAV7H.js.map} +0 -0
  65. /package/dist/{chunk-XEZJZ3IG.js.map → chunk-6NOUETAC.js.map} +0 -0
  66. /package/dist/{chunk-FNCIBZJF.js.map → chunk-FICB2ZSK.js.map} +0 -0
  67. /package/dist/{chunk-55B7QQBK.js.map → chunk-OWMP5NMV.js.map} +0 -0
  68. /package/dist/{chunk-IPFD5Y3O.js.map → chunk-R65RAHAG.js.map} +0 -0
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  openaiResponsesAdapter
3
- } from "../chunk-55B7QQBK.js";
4
- import "../chunk-JR7252DG.js";
5
- import "../chunk-UY5OKMVP.js";
3
+ } from "../chunk-OWMP5NMV.js";
4
+ import "../chunk-F552OBUV.js";
5
+ import "../chunk-ULVY473P.js";
6
6
  export {
7
7
  openaiResponsesAdapter
8
8
  };
@@ -381,6 +381,16 @@ function mergeOverride(base, override) {
381
381
  if (override.response !== void 0) {
382
382
  result.response = { ...result.response, ...override.response };
383
383
  }
384
+ if (override.compression !== void 0) {
385
+ result.compression = {
386
+ ...result.compression,
387
+ ...override.compression,
388
+ thetokencompany: mergeRecordBlock(
389
+ result.compression?.thetokencompany,
390
+ override.compression.thetokencompany
391
+ )
392
+ };
393
+ }
384
394
  if (override.cache !== void 0) {
385
395
  result.cache = {
386
396
  ...result.cache,
@@ -606,6 +616,14 @@ var RawProviderBodySchema = import_zod.z.object({
606
616
  openrouter: import_zod.z.record(import_zod.z.unknown()).optional(),
607
617
  llmasaservice: import_zod.z.record(import_zod.z.unknown()).optional()
608
618
  });
619
+ var TheTokenCompanyCompressionSchema = import_zod.z.object({
620
+ enabled: import_zod.z.boolean().optional(),
621
+ model: import_zod.z.string().min(1).optional(),
622
+ aggressiveness: import_zod.z.number().min(0).max(1).optional()
623
+ });
624
+ var CompressionSchema = import_zod.z.object({
625
+ thetokencompany: TheTokenCompanyCompressionSchema.optional()
626
+ });
609
627
  var OpenAICacheSchema = import_zod.z.object({
610
628
  prompt_cache_key: import_zod.z.string().min(1).optional(),
611
629
  retention: import_zod.z.enum(["in_memory", "24h"]).optional()
@@ -678,6 +696,7 @@ var PromptAssetOverridesSchema = import_zod.z.object({
678
696
  reasoning: ReasoningSchema.optional(),
679
697
  sampling: SamplingSchema.optional(),
680
698
  response: ResponseSchemaWithValidation.optional(),
699
+ compression: CompressionSchema.optional(),
681
700
  cache: CacheSchema.optional(),
682
701
  raw: RawProviderBodySchema.optional(),
683
702
  tools: import_zod.z.array(ToolRefSchema).optional(),
@@ -699,6 +718,7 @@ var PromptDefaultsSchema = import_zod.z.object({
699
718
  reasoning: ReasoningSchema.optional(),
700
719
  sampling: SamplingSchema.optional(),
701
720
  response: ResponseSchema.optional(),
721
+ compression: CompressionSchema.optional(),
702
722
  cache: CacheSchema.optional(),
703
723
  raw: RawProviderBodySchema.optional(),
704
724
  tools: import_zod.z.array(ToolRefSchema).optional(),
@@ -723,6 +743,7 @@ var PromptAssetSchema = import_zod.z.object({
723
743
  reasoning: ReasoningSchema.optional(),
724
744
  sampling: SamplingSchema.optional(),
725
745
  response: ResponseSchemaWithValidation.optional(),
746
+ compression: CompressionSchema.optional(),
726
747
  cache: CacheSchema.optional(),
727
748
  raw: RawProviderBodySchema.optional(),
728
749
  tools: import_zod.z.array(ToolRefSchema).optional(),
@@ -1083,6 +1104,7 @@ function mergeDefaults(base, local) {
1083
1104
  reasoning: mergeRecordBlock2(base.reasoning, local.reasoning),
1084
1105
  sampling: mergeRecordBlock2(base.sampling, local.sampling),
1085
1106
  response: mergeRecordBlock2(base.response, local.response),
1107
+ compression: mergeCompression(base.compression, local.compression),
1086
1108
  cache: mergeCache(base.cache, local.cache),
1087
1109
  raw: mergeRaw(base.raw, local.raw),
1088
1110
  tools: local.tools ?? base.tools,
@@ -1103,6 +1125,7 @@ function mergeDefaults(base, local) {
1103
1125
  };
1104
1126
  }
1105
1127
  function applyDefaults(asset, defaults) {
1128
+ const compression = mergeCompression(defaults.compression, asset.compression);
1106
1129
  const cache = mergeCache(defaults.cache, asset.cache);
1107
1130
  const raw = mergeRaw(defaults.raw, asset.raw);
1108
1131
  const providerOptions = mergeProviderOptions(defaults.provider_options, asset.provider_options);
@@ -1116,7 +1139,7 @@ function applyDefaults(asset, defaults) {
1116
1139
  const hasDefaultMetadata = defaults.metadata && Object.keys(defaults.metadata).length > 0;
1117
1140
  const hasDefaultSystem = !!defaults.sections?.system_instructions;
1118
1141
  const hasDefaultScalars = defaults.provider !== void 0 || defaults.model !== void 0 || defaults.fallback_models !== void 0 || defaults.tools !== void 0 || defaults.includes !== void 0;
1119
- 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;
1142
+ 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;
1120
1143
  if (!hasDefaultMetadata && !hasDefaultSystem && !hasDefaultScalars && !hasDefaultObjects) {
1121
1144
  return asset;
1122
1145
  }
@@ -1135,6 +1158,7 @@ function applyDefaults(asset, defaults) {
1135
1158
  reasoning,
1136
1159
  sampling,
1137
1160
  response,
1161
+ compression,
1138
1162
  cache,
1139
1163
  raw,
1140
1164
  tools: asset.tools ?? defaults.tools,
@@ -1204,6 +1228,15 @@ function mergeCache(base, local) {
1204
1228
  if (merged.google && Object.keys(merged.google).length === 0) delete merged.google;
1205
1229
  return Object.keys(merged).length > 0 ? merged : void 0;
1206
1230
  }
1231
+ function mergeCompression(base, local) {
1232
+ const merged = {
1233
+ ...base ?? {},
1234
+ ...local ?? {},
1235
+ thetokencompany: mergeRecordBlock2(base?.thetokencompany, local?.thetokencompany)
1236
+ };
1237
+ removeEmptyProviderBlocks(merged);
1238
+ return Object.keys(merged).length > 0 ? merged : void 0;
1239
+ }
1207
1240
  function mergeRaw(base, local) {
1208
1241
  const merged = {
1209
1242
  ...base ?? {},
@@ -1247,12 +1280,14 @@ function mergeOverrideConfig(base, local) {
1247
1280
  const reasoning = mergeRecordBlock2(base?.reasoning, local.reasoning);
1248
1281
  const sampling = mergeRecordBlock2(base?.sampling, local.sampling);
1249
1282
  const response = mergeRecordBlock2(base?.response, local.response);
1283
+ const compression = mergeCompression(base?.compression, local.compression);
1250
1284
  const cache = mergeCache(base?.cache, local.cache);
1251
1285
  const raw = mergeRaw(base?.raw, local.raw);
1252
1286
  const providerOptions = mergeProviderOptions(base?.provider_options, local.provider_options);
1253
1287
  if (reasoning !== void 0) merged.reasoning = reasoning;
1254
1288
  if (sampling !== void 0) merged.sampling = sampling;
1255
1289
  if (response !== void 0) merged.response = response;
1290
+ if (compression !== void 0) merged.compression = compression;
1256
1291
  if (cache !== void 0) merged.cache = cache;
1257
1292
  if (raw !== void 0) merged.raw = raw;
1258
1293
  if (providerOptions !== void 0) merged.provider_options = providerOptions;
@@ -1448,6 +1483,97 @@ function compactHistoryForPrompt(asset, runtime) {
1448
1483
  return [compacted, ...preserved];
1449
1484
  }
1450
1485
 
1486
+ // src/compression.ts
1487
+ var THETOKENCOMPANY_DEFAULT_MODEL = "bear-2";
1488
+ var THETOKENCOMPANY_DEFAULT_BASE_URL = "https://api.thetokencompany.com";
1489
+ async function applyPromptCompressionForRender(asset, runtime) {
1490
+ const config = asset.compression?.thetokencompany;
1491
+ if (config?.enabled !== true || !asset.sections.prompt_template) {
1492
+ return { asset, runtime, compression: [] };
1493
+ }
1494
+ const sections = renderSections(asset, {
1495
+ variables: runtime.variables,
1496
+ strict: runtime.strict
1497
+ });
1498
+ if (!sections.prompt_template) {
1499
+ return { asset, runtime, compression: [] };
1500
+ }
1501
+ const model = config.model ?? THETOKENCOMPANY_DEFAULT_MODEL;
1502
+ const result = await compressWithTheTokenCompany(sections.prompt_template, {
1503
+ apiKey: runtime.theTokenCompany?.apiKey,
1504
+ baseURL: runtime.theTokenCompany?.baseURL,
1505
+ fetch: runtime.theTokenCompany?.fetch,
1506
+ model,
1507
+ aggressiveness: config.aggressiveness
1508
+ });
1509
+ return {
1510
+ asset: {
1511
+ ...asset,
1512
+ sections: {
1513
+ ...asset.sections,
1514
+ ...sections,
1515
+ prompt_template: result.output
1516
+ }
1517
+ },
1518
+ runtime: {
1519
+ ...runtime,
1520
+ variables: {},
1521
+ strict: false
1522
+ },
1523
+ compression: [{
1524
+ provider: "thetokencompany",
1525
+ model,
1526
+ inputTokens: result.input_tokens,
1527
+ outputTokens: result.output_tokens,
1528
+ tokensSaved: result.tokens_saved,
1529
+ compressionRatio: result.compression_ratio
1530
+ }]
1531
+ };
1532
+ }
1533
+ async function compressWithTheTokenCompany(input, options) {
1534
+ const apiKey = options.apiKey ?? getEnv("THETOKENCOMPANY_API_KEY") ?? getEnv("TTC_API_KEY");
1535
+ if (!apiKey) {
1536
+ throw new Error(
1537
+ "TheTokenCompany compression is enabled, but no API key was provided. Pass theTokenCompany.apiKey to renderPrompt() or set THETOKENCOMPANY_API_KEY."
1538
+ );
1539
+ }
1540
+ const fetchImpl = options.fetch ?? globalThis.fetch;
1541
+ if (!fetchImpl) {
1542
+ throw new Error("TheTokenCompany compression requires a runtime with fetch support.");
1543
+ }
1544
+ const baseURL = (options.baseURL ?? THETOKENCOMPANY_DEFAULT_BASE_URL).replace(/\/+$/, "");
1545
+ const compressionSettings = options.aggressiveness === void 0 ? void 0 : { aggressiveness: options.aggressiveness };
1546
+ const response = await fetchImpl(`${baseURL}/v1/compress`, {
1547
+ method: "POST",
1548
+ headers: {
1549
+ Authorization: `Bearer ${apiKey}`,
1550
+ "Content-Type": "application/json"
1551
+ },
1552
+ body: JSON.stringify({
1553
+ model: options.model,
1554
+ input,
1555
+ ...compressionSettings ? { compression_settings: compressionSettings } : {}
1556
+ })
1557
+ });
1558
+ if (!response.ok) {
1559
+ const body = await response.text().catch(() => "");
1560
+ throw new Error(
1561
+ `TheTokenCompany compression failed with HTTP ${response.status}` + (body ? `: ${body}` : ".")
1562
+ );
1563
+ }
1564
+ const data = await response.json();
1565
+ 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") {
1566
+ throw new Error("TheTokenCompany compression returned an invalid response payload.");
1567
+ }
1568
+ return data;
1569
+ }
1570
+ function getEnv(name) {
1571
+ if (typeof process === "undefined") {
1572
+ return void 0;
1573
+ }
1574
+ return process.env[name];
1575
+ }
1576
+
1451
1577
  // src/providers/prompt-input.ts
1452
1578
  function isPromptLookup(input) {
1453
1579
  return "path" in input && typeof input.path === "string";
@@ -1471,21 +1597,27 @@ function withPromptInputSupport(adapter) {
1471
1597
  };
1472
1598
  const renderPrompt = async (input, runtime) => {
1473
1599
  const resolved = await resolveProviderPromptInput(input, runtime);
1474
- const sanitization = sanitizeContextVariables(resolved, runtime.variables, {
1600
+ const resolvedForRender = resolveAssetForProvider(resolved, runtime);
1601
+ const sanitization = sanitizeContextVariables(resolvedForRender, runtime.variables, {
1475
1602
  onContextOverflow: runtime.onContextOverflow
1476
1603
  });
1477
1604
  if (sanitization.shortCircuit) {
1478
1605
  return {
1479
1606
  provider: adapter.name,
1480
- model: resolved.model ?? "",
1607
+ model: resolvedForRender.model ?? "",
1481
1608
  returnMessage: sanitization.shortCircuit.returnMessage
1482
1609
  };
1483
1610
  }
1484
- return adapter.render(resolved, {
1611
+ const prepared = await applyPromptCompressionForRender(resolvedForRender, {
1485
1612
  ...runtime,
1613
+ environment: void 0,
1614
+ tier: void 0,
1615
+ runtime: void 0,
1486
1616
  variables: sanitization.variables,
1487
- history: compactHistoryForPrompt(resolved, runtime)
1617
+ history: compactHistoryForPrompt(resolvedForRender, runtime)
1488
1618
  });
1619
+ const request = adapter.render(prepared.asset, prepared.runtime);
1620
+ return prepared.compression.length > 0 ? { ...request, compression: prepared.compression } : request;
1489
1621
  };
1490
1622
  return {
1491
1623
  ...adapter,