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
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  geminiAdapter
3
- } from "../chunk-VMLGUI4F.js";
4
- import "../chunk-JR7252DG.js";
5
- import "../chunk-UY5OKMVP.js";
3
+ } from "../chunk-35NN5F6O.js";
4
+ import "../chunk-F552OBUV.js";
5
+ import "../chunk-ULVY473P.js";
6
6
  export {
7
7
  geminiAdapter
8
8
  };
@@ -386,6 +386,16 @@ function mergeOverride(base, override) {
386
386
  if (override.response !== void 0) {
387
387
  result.response = { ...result.response, ...override.response };
388
388
  }
389
+ if (override.compression !== void 0) {
390
+ result.compression = {
391
+ ...result.compression,
392
+ ...override.compression,
393
+ thetokencompany: mergeRecordBlock(
394
+ result.compression?.thetokencompany,
395
+ override.compression.thetokencompany
396
+ )
397
+ };
398
+ }
389
399
  if (override.cache !== void 0) {
390
400
  result.cache = {
391
401
  ...result.cache,
@@ -611,6 +621,14 @@ var RawProviderBodySchema = import_zod.z.object({
611
621
  openrouter: import_zod.z.record(import_zod.z.unknown()).optional(),
612
622
  llmasaservice: import_zod.z.record(import_zod.z.unknown()).optional()
613
623
  });
624
+ var TheTokenCompanyCompressionSchema = import_zod.z.object({
625
+ enabled: import_zod.z.boolean().optional(),
626
+ model: import_zod.z.string().min(1).optional(),
627
+ aggressiveness: import_zod.z.number().min(0).max(1).optional()
628
+ });
629
+ var CompressionSchema = import_zod.z.object({
630
+ thetokencompany: TheTokenCompanyCompressionSchema.optional()
631
+ });
614
632
  var OpenAICacheSchema = import_zod.z.object({
615
633
  prompt_cache_key: import_zod.z.string().min(1).optional(),
616
634
  retention: import_zod.z.enum(["in_memory", "24h"]).optional()
@@ -683,6 +701,7 @@ var PromptAssetOverridesSchema = import_zod.z.object({
683
701
  reasoning: ReasoningSchema.optional(),
684
702
  sampling: SamplingSchema.optional(),
685
703
  response: ResponseSchemaWithValidation.optional(),
704
+ compression: CompressionSchema.optional(),
686
705
  cache: CacheSchema.optional(),
687
706
  raw: RawProviderBodySchema.optional(),
688
707
  tools: import_zod.z.array(ToolRefSchema).optional(),
@@ -704,6 +723,7 @@ var PromptDefaultsSchema = import_zod.z.object({
704
723
  reasoning: ReasoningSchema.optional(),
705
724
  sampling: SamplingSchema.optional(),
706
725
  response: ResponseSchema.optional(),
726
+ compression: CompressionSchema.optional(),
707
727
  cache: CacheSchema.optional(),
708
728
  raw: RawProviderBodySchema.optional(),
709
729
  tools: import_zod.z.array(ToolRefSchema).optional(),
@@ -728,6 +748,7 @@ var PromptAssetSchema = import_zod.z.object({
728
748
  reasoning: ReasoningSchema.optional(),
729
749
  sampling: SamplingSchema.optional(),
730
750
  response: ResponseSchemaWithValidation.optional(),
751
+ compression: CompressionSchema.optional(),
731
752
  cache: CacheSchema.optional(),
732
753
  raw: RawProviderBodySchema.optional(),
733
754
  tools: import_zod.z.array(ToolRefSchema).optional(),
@@ -1088,6 +1109,7 @@ function mergeDefaults(base, local) {
1088
1109
  reasoning: mergeRecordBlock2(base.reasoning, local.reasoning),
1089
1110
  sampling: mergeRecordBlock2(base.sampling, local.sampling),
1090
1111
  response: mergeRecordBlock2(base.response, local.response),
1112
+ compression: mergeCompression(base.compression, local.compression),
1091
1113
  cache: mergeCache(base.cache, local.cache),
1092
1114
  raw: mergeRaw(base.raw, local.raw),
1093
1115
  tools: local.tools ?? base.tools,
@@ -1108,6 +1130,7 @@ function mergeDefaults(base, local) {
1108
1130
  };
1109
1131
  }
1110
1132
  function applyDefaults(asset, defaults) {
1133
+ const compression = mergeCompression(defaults.compression, asset.compression);
1111
1134
  const cache = mergeCache(defaults.cache, asset.cache);
1112
1135
  const raw = mergeRaw(defaults.raw, asset.raw);
1113
1136
  const providerOptions = mergeProviderOptions(defaults.provider_options, asset.provider_options);
@@ -1121,7 +1144,7 @@ function applyDefaults(asset, defaults) {
1121
1144
  const hasDefaultMetadata = defaults.metadata && Object.keys(defaults.metadata).length > 0;
1122
1145
  const hasDefaultSystem = !!defaults.sections?.system_instructions;
1123
1146
  const hasDefaultScalars = defaults.provider !== void 0 || defaults.model !== void 0 || defaults.fallback_models !== void 0 || defaults.tools !== void 0 || defaults.includes !== void 0;
1124
- 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;
1147
+ 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;
1125
1148
  if (!hasDefaultMetadata && !hasDefaultSystem && !hasDefaultScalars && !hasDefaultObjects) {
1126
1149
  return asset;
1127
1150
  }
@@ -1140,6 +1163,7 @@ function applyDefaults(asset, defaults) {
1140
1163
  reasoning,
1141
1164
  sampling,
1142
1165
  response,
1166
+ compression,
1143
1167
  cache,
1144
1168
  raw,
1145
1169
  tools: asset.tools ?? defaults.tools,
@@ -1209,6 +1233,15 @@ function mergeCache(base, local) {
1209
1233
  if (merged.google && Object.keys(merged.google).length === 0) delete merged.google;
1210
1234
  return Object.keys(merged).length > 0 ? merged : void 0;
1211
1235
  }
1236
+ function mergeCompression(base, local) {
1237
+ const merged = {
1238
+ ...base ?? {},
1239
+ ...local ?? {},
1240
+ thetokencompany: mergeRecordBlock2(base?.thetokencompany, local?.thetokencompany)
1241
+ };
1242
+ removeEmptyProviderBlocks(merged);
1243
+ return Object.keys(merged).length > 0 ? merged : void 0;
1244
+ }
1212
1245
  function mergeRaw(base, local) {
1213
1246
  const merged = {
1214
1247
  ...base ?? {},
@@ -1252,12 +1285,14 @@ function mergeOverrideConfig(base, local) {
1252
1285
  const reasoning = mergeRecordBlock2(base?.reasoning, local.reasoning);
1253
1286
  const sampling = mergeRecordBlock2(base?.sampling, local.sampling);
1254
1287
  const response = mergeRecordBlock2(base?.response, local.response);
1288
+ const compression = mergeCompression(base?.compression, local.compression);
1255
1289
  const cache = mergeCache(base?.cache, local.cache);
1256
1290
  const raw = mergeRaw(base?.raw, local.raw);
1257
1291
  const providerOptions = mergeProviderOptions(base?.provider_options, local.provider_options);
1258
1292
  if (reasoning !== void 0) merged.reasoning = reasoning;
1259
1293
  if (sampling !== void 0) merged.sampling = sampling;
1260
1294
  if (response !== void 0) merged.response = response;
1295
+ if (compression !== void 0) merged.compression = compression;
1261
1296
  if (cache !== void 0) merged.cache = cache;
1262
1297
  if (raw !== void 0) merged.raw = raw;
1263
1298
  if (providerOptions !== void 0) merged.provider_options = providerOptions;
@@ -1453,6 +1488,97 @@ function compactHistoryForPrompt(asset, runtime) {
1453
1488
  return [compacted, ...preserved];
1454
1489
  }
1455
1490
 
1491
+ // src/compression.ts
1492
+ var THETOKENCOMPANY_DEFAULT_MODEL = "bear-2";
1493
+ var THETOKENCOMPANY_DEFAULT_BASE_URL = "https://api.thetokencompany.com";
1494
+ async function applyPromptCompressionForRender(asset, runtime) {
1495
+ const config = asset.compression?.thetokencompany;
1496
+ if (config?.enabled !== true || !asset.sections.prompt_template) {
1497
+ return { asset, runtime, compression: [] };
1498
+ }
1499
+ const sections = renderSections(asset, {
1500
+ variables: runtime.variables,
1501
+ strict: runtime.strict
1502
+ });
1503
+ if (!sections.prompt_template) {
1504
+ return { asset, runtime, compression: [] };
1505
+ }
1506
+ const model = config.model ?? THETOKENCOMPANY_DEFAULT_MODEL;
1507
+ const result = await compressWithTheTokenCompany(sections.prompt_template, {
1508
+ apiKey: runtime.theTokenCompany?.apiKey,
1509
+ baseURL: runtime.theTokenCompany?.baseURL,
1510
+ fetch: runtime.theTokenCompany?.fetch,
1511
+ model,
1512
+ aggressiveness: config.aggressiveness
1513
+ });
1514
+ return {
1515
+ asset: {
1516
+ ...asset,
1517
+ sections: {
1518
+ ...asset.sections,
1519
+ ...sections,
1520
+ prompt_template: result.output
1521
+ }
1522
+ },
1523
+ runtime: {
1524
+ ...runtime,
1525
+ variables: {},
1526
+ strict: false
1527
+ },
1528
+ compression: [{
1529
+ provider: "thetokencompany",
1530
+ model,
1531
+ inputTokens: result.input_tokens,
1532
+ outputTokens: result.output_tokens,
1533
+ tokensSaved: result.tokens_saved,
1534
+ compressionRatio: result.compression_ratio
1535
+ }]
1536
+ };
1537
+ }
1538
+ async function compressWithTheTokenCompany(input, options) {
1539
+ const apiKey = options.apiKey ?? getEnv("THETOKENCOMPANY_API_KEY") ?? getEnv("TTC_API_KEY");
1540
+ if (!apiKey) {
1541
+ throw new Error(
1542
+ "TheTokenCompany compression is enabled, but no API key was provided. Pass theTokenCompany.apiKey to renderPrompt() or set THETOKENCOMPANY_API_KEY."
1543
+ );
1544
+ }
1545
+ const fetchImpl = options.fetch ?? globalThis.fetch;
1546
+ if (!fetchImpl) {
1547
+ throw new Error("TheTokenCompany compression requires a runtime with fetch support.");
1548
+ }
1549
+ const baseURL = (options.baseURL ?? THETOKENCOMPANY_DEFAULT_BASE_URL).replace(/\/+$/, "");
1550
+ const compressionSettings = options.aggressiveness === void 0 ? void 0 : { aggressiveness: options.aggressiveness };
1551
+ const response = await fetchImpl(`${baseURL}/v1/compress`, {
1552
+ method: "POST",
1553
+ headers: {
1554
+ Authorization: `Bearer ${apiKey}`,
1555
+ "Content-Type": "application/json"
1556
+ },
1557
+ body: JSON.stringify({
1558
+ model: options.model,
1559
+ input,
1560
+ ...compressionSettings ? { compression_settings: compressionSettings } : {}
1561
+ })
1562
+ });
1563
+ if (!response.ok) {
1564
+ const body = await response.text().catch(() => "");
1565
+ throw new Error(
1566
+ `TheTokenCompany compression failed with HTTP ${response.status}` + (body ? `: ${body}` : ".")
1567
+ );
1568
+ }
1569
+ const data = await response.json();
1570
+ 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") {
1571
+ throw new Error("TheTokenCompany compression returned an invalid response payload.");
1572
+ }
1573
+ return data;
1574
+ }
1575
+ function getEnv(name) {
1576
+ if (typeof process === "undefined") {
1577
+ return void 0;
1578
+ }
1579
+ return process.env[name];
1580
+ }
1581
+
1456
1582
  // src/providers/prompt-input.ts
1457
1583
  function isPromptLookup(input) {
1458
1584
  return "path" in input && typeof input.path === "string";
@@ -1476,21 +1602,27 @@ function withPromptInputSupport(adapter) {
1476
1602
  };
1477
1603
  const renderPrompt = async (input, runtime) => {
1478
1604
  const resolved = await resolveProviderPromptInput(input, runtime);
1479
- const sanitization = sanitizeContextVariables(resolved, runtime.variables, {
1605
+ const resolvedForRender = resolveAssetForProvider(resolved, runtime);
1606
+ const sanitization = sanitizeContextVariables(resolvedForRender, runtime.variables, {
1480
1607
  onContextOverflow: runtime.onContextOverflow
1481
1608
  });
1482
1609
  if (sanitization.shortCircuit) {
1483
1610
  return {
1484
1611
  provider: adapter.name,
1485
- model: resolved.model ?? "",
1612
+ model: resolvedForRender.model ?? "",
1486
1613
  returnMessage: sanitization.shortCircuit.returnMessage
1487
1614
  };
1488
1615
  }
1489
- return adapter.render(resolved, {
1616
+ const prepared = await applyPromptCompressionForRender(resolvedForRender, {
1490
1617
  ...runtime,
1618
+ environment: void 0,
1619
+ tier: void 0,
1620
+ runtime: void 0,
1491
1621
  variables: sanitization.variables,
1492
- history: compactHistoryForPrompt(resolved, runtime)
1622
+ history: compactHistoryForPrompt(resolvedForRender, runtime)
1493
1623
  });
1624
+ const request = adapter.render(prepared.asset, prepared.runtime);
1625
+ return prepared.compression.length > 0 ? { ...request, compression: prepared.compression } : request;
1494
1626
  };
1495
1627
  return {
1496
1628
  ...adapter,