promptopskit 0.9.0 → 0.9.2

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 (37) hide show
  1. package/README.md +19 -6
  2. package/dist/{chunk-NS6OTKY2.js → chunk-6ICAKKV3.js} +81 -22
  3. package/dist/{chunk-NS6OTKY2.js.map → chunk-6ICAKKV3.js.map} +1 -1
  4. package/dist/{chunk-FJ3D76IV.js → chunk-A2VPKL4X.js} +2 -2
  5. package/dist/{chunk-SVNQNMMV.js → chunk-CGBEKODU.js} +2 -2
  6. package/dist/{chunk-Q67E2GGD.js → chunk-DA2NSBIN.js} +2 -2
  7. package/dist/{chunk-AAQNCAVA.js → chunk-DAJMCV4F.js} +3 -3
  8. package/dist/{chunk-E2AIIPQC.js → chunk-XSSET4QN.js} +2 -2
  9. package/dist/{chunk-W6XHGSPJ.js → chunk-YLJGWVZ6.js} +3 -3
  10. package/dist/index.cjs +80 -21
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.js +7 -7
  13. package/dist/providers/anthropic.cjs +80 -21
  14. package/dist/providers/anthropic.cjs.map +1 -1
  15. package/dist/providers/anthropic.js +2 -2
  16. package/dist/providers/gemini.cjs +80 -21
  17. package/dist/providers/gemini.cjs.map +1 -1
  18. package/dist/providers/gemini.js +2 -2
  19. package/dist/providers/llmasaservice.cjs +80 -21
  20. package/dist/providers/llmasaservice.cjs.map +1 -1
  21. package/dist/providers/llmasaservice.js +3 -3
  22. package/dist/providers/openai-responses.cjs +80 -21
  23. package/dist/providers/openai-responses.cjs.map +1 -1
  24. package/dist/providers/openai-responses.js +2 -2
  25. package/dist/providers/openai.cjs +80 -21
  26. package/dist/providers/openai.cjs.map +1 -1
  27. package/dist/providers/openai.js +2 -2
  28. package/dist/providers/openrouter.cjs +80 -21
  29. package/dist/providers/openrouter.cjs.map +1 -1
  30. package/dist/providers/openrouter.js +3 -3
  31. package/package.json +1 -1
  32. /package/dist/{chunk-FJ3D76IV.js.map → chunk-A2VPKL4X.js.map} +0 -0
  33. /package/dist/{chunk-SVNQNMMV.js.map → chunk-CGBEKODU.js.map} +0 -0
  34. /package/dist/{chunk-Q67E2GGD.js.map → chunk-DA2NSBIN.js.map} +0 -0
  35. /package/dist/{chunk-AAQNCAVA.js.map → chunk-DAJMCV4F.js.map} +0 -0
  36. /package/dist/{chunk-E2AIIPQC.js.map → chunk-XSSET4QN.js.map} +0 -0
  37. /package/dist/{chunk-W6XHGSPJ.js.map → chunk-YLJGWVZ6.js.map} +0 -0
@@ -4,7 +4,7 @@ import {
4
4
  renderSections,
5
5
  resolveAssetForProvider,
6
6
  withPromptInputSupport
7
- } from "./chunk-NS6OTKY2.js";
7
+ } from "./chunk-6ICAKKV3.js";
8
8
 
9
9
  // src/providers/gemini.ts
10
10
  var geminiAdapter = withPromptInputSupport({
@@ -120,4 +120,4 @@ var geminiAdapter = withPromptInputSupport({
120
120
  export {
121
121
  geminiAdapter
122
122
  };
123
- //# sourceMappingURL=chunk-FJ3D76IV.js.map
123
+ //# sourceMappingURL=chunk-A2VPKL4X.js.map
@@ -4,7 +4,7 @@ import {
4
4
  renderSections,
5
5
  resolveAssetForProvider,
6
6
  withPromptInputSupport
7
- } from "./chunk-NS6OTKY2.js";
7
+ } from "./chunk-6ICAKKV3.js";
8
8
 
9
9
  // src/providers/openai.ts
10
10
  var openaiAdapter = withPromptInputSupport({
@@ -107,4 +107,4 @@ var openaiAdapter = withPromptInputSupport({
107
107
  export {
108
108
  openaiAdapter
109
109
  };
110
- //# sourceMappingURL=chunk-SVNQNMMV.js.map
110
+ //# sourceMappingURL=chunk-CGBEKODU.js.map
@@ -4,7 +4,7 @@ import {
4
4
  renderSections,
5
5
  resolveAssetForProvider,
6
6
  withPromptInputSupport
7
- } from "./chunk-NS6OTKY2.js";
7
+ } from "./chunk-6ICAKKV3.js";
8
8
 
9
9
  // src/providers/anthropic.ts
10
10
  var anthropicAdapter = withPromptInputSupport({
@@ -144,4 +144,4 @@ var anthropicAdapter = withPromptInputSupport({
144
144
  export {
145
145
  anthropicAdapter
146
146
  };
147
- //# sourceMappingURL=chunk-Q67E2GGD.js.map
147
+ //# sourceMappingURL=chunk-DA2NSBIN.js.map
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  openaiAdapter
3
- } from "./chunk-SVNQNMMV.js";
3
+ } from "./chunk-CGBEKODU.js";
4
4
  import {
5
5
  applyRawProviderBody,
6
6
  resolveAssetForProvider,
7
7
  withPromptInputSupport
8
- } from "./chunk-NS6OTKY2.js";
8
+ } from "./chunk-6ICAKKV3.js";
9
9
 
10
10
  // src/providers/openrouter.ts
11
11
  var openrouterAdapter = withPromptInputSupport({
@@ -58,4 +58,4 @@ var openrouterAdapter = withPromptInputSupport({
58
58
  export {
59
59
  openrouterAdapter
60
60
  };
61
- //# sourceMappingURL=chunk-AAQNCAVA.js.map
61
+ //# sourceMappingURL=chunk-DAJMCV4F.js.map
@@ -4,7 +4,7 @@ import {
4
4
  renderSections,
5
5
  resolveAssetForProvider,
6
6
  withPromptInputSupport
7
- } from "./chunk-NS6OTKY2.js";
7
+ } from "./chunk-6ICAKKV3.js";
8
8
 
9
9
  // src/providers/openai-responses.ts
10
10
  var openaiResponsesAdapter = withPromptInputSupport({
@@ -112,4 +112,4 @@ var openaiResponsesAdapter = withPromptInputSupport({
112
112
  export {
113
113
  openaiResponsesAdapter
114
114
  };
115
- //# sourceMappingURL=chunk-E2AIIPQC.js.map
115
+ //# sourceMappingURL=chunk-XSSET4QN.js.map
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  openaiAdapter
3
- } from "./chunk-SVNQNMMV.js";
3
+ } from "./chunk-CGBEKODU.js";
4
4
  import {
5
5
  applyRawProviderBody,
6
6
  resolveAssetForProvider,
7
7
  withPromptInputSupport
8
- } from "./chunk-NS6OTKY2.js";
8
+ } from "./chunk-6ICAKKV3.js";
9
9
 
10
10
  // src/providers/llmasaservice.ts
11
11
  var LLMASASERVICE_BASE_URL = "https://gateway.llmasaservice.io";
@@ -127,4 +127,4 @@ export {
127
127
  createLLMAsAServiceOpenAIConfig,
128
128
  llmasaserviceAdapter
129
129
  };
130
- //# sourceMappingURL=chunk-W6XHGSPJ.js.map
130
+ //# sourceMappingURL=chunk-YLJGWVZ6.js.map
package/dist/index.cjs CHANGED
@@ -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,39 +2602,97 @@ 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}`
2630
2643
  );
2631
2644
  }
2632
- const data = await response.json();
2633
- 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") {
2634
- throw new Error("TheTokenCompany compression returned an invalid response payload.");
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)}`
2652
+ );
2653
+ }
2654
+ const normalized = normalizeTheTokenCompanyCompressResponse(data);
2655
+ if (!normalized) {
2656
+ return createTheTokenCompanyFallback(
2657
+ input,
2658
+ "response payload was invalid"
2659
+ );
2660
+ }
2661
+ return normalized;
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
+ }
2679
+ function normalizeTheTokenCompanyCompressResponse(data) {
2680
+ if (typeof data.output !== "string" || typeof data.output_tokens !== "number") {
2681
+ return void 0;
2635
2682
  }
2636
- return data;
2683
+ const inputTokens = typeof data.input_tokens === "number" ? data.input_tokens : data.original_input_tokens;
2684
+ if (typeof inputTokens !== "number") {
2685
+ return void 0;
2686
+ }
2687
+ const tokensSaved = typeof data.tokens_saved === "number" ? data.tokens_saved : inputTokens - data.output_tokens;
2688
+ const compressionRatio = typeof data.compression_ratio === "number" ? data.compression_ratio : data.output_tokens === 0 ? 0 : inputTokens / data.output_tokens;
2689
+ return {
2690
+ output: data.output,
2691
+ output_tokens: data.output_tokens,
2692
+ input_tokens: inputTokens,
2693
+ tokens_saved: tokensSaved,
2694
+ compression_ratio: compressionRatio
2695
+ };
2637
2696
  }
2638
2697
  function getEnv(name) {
2639
2698
  if (typeof process === "undefined") {