agentfootprint 10.7.0 → 10.8.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 (210) hide show
  1. package/CAPABILITIES.md +3 -0
  2. package/dist/adapters/llm/BedrockProvider.js +18 -3
  3. package/dist/adapters/llm/BedrockProvider.js.map +1 -1
  4. package/dist/adapters/llm/BrowserOpenAIProvider.js.map +1 -1
  5. package/dist/adapters/llm/OpenAIProvider.js.map +1 -1
  6. package/dist/adapters/llm/bedrockCacheWire.js +92 -0
  7. package/dist/adapters/llm/bedrockCacheWire.js.map +1 -0
  8. package/dist/adapters/llm/bedrockModels.js +72 -0
  9. package/dist/adapters/llm/bedrockModels.js.map +1 -0
  10. package/dist/cache/applyCachePolicy.js +12 -3
  11. package/dist/cache/applyCachePolicy.js.map +1 -1
  12. package/dist/cache/cacheRecorder.js +4 -1
  13. package/dist/cache/cacheRecorder.js.map +1 -1
  14. package/dist/cache/cacheStrategyFor.js +41 -5
  15. package/dist/cache/cacheStrategyFor.js.map +1 -1
  16. package/dist/cache/index.js +4 -3
  17. package/dist/cache/index.js.map +1 -1
  18. package/dist/cache/strategies/BreakpointCacheStrategy.js +5 -2
  19. package/dist/cache/strategies/BreakpointCacheStrategy.js.map +1 -1
  20. package/dist/cache/strategies/NoOpCacheStrategy.js +2 -2
  21. package/dist/cache/strategies/NoOpCacheStrategy.js.map +1 -1
  22. package/dist/core/Agent.js +22 -2
  23. package/dist/core/Agent.js.map +1 -1
  24. package/dist/core/agent/AgentBuilder.js +3 -1
  25. package/dist/core/agent/AgentBuilder.js.map +1 -1
  26. package/dist/core/agent/cacheSupport.js +43 -0
  27. package/dist/core/agent/cacheSupport.js.map +1 -0
  28. package/dist/core/agent/evidence/extract.js +70 -13
  29. package/dist/core/agent/evidence/extract.js.map +1 -1
  30. package/dist/core/agent/evidence/figureUnits.js +24 -0
  31. package/dist/core/agent/evidence/figureUnits.js.map +1 -0
  32. package/dist/core/agent/evidence/figures.js +90 -49
  33. package/dist/core/agent/evidence/figures.js.map +1 -1
  34. package/dist/core/agent/evidence/gate.js +15 -4
  35. package/dist/core/agent/evidence/gate.js.map +1 -1
  36. package/dist/core/agent/evidence/numberPrecision.js +57 -0
  37. package/dist/core/agent/evidence/numberPrecision.js.map +1 -0
  38. package/dist/core/agent/evidence/numericRanges.js +33 -0
  39. package/dist/core/agent/evidence/numericRanges.js.map +1 -0
  40. package/dist/core/agent/findings/contingent.js +1 -1
  41. package/dist/core/agent/findings/contingent.js.map +1 -1
  42. package/dist/core/agent/runManifest.js +7 -0
  43. package/dist/core/agent/runManifest.js.map +1 -1
  44. package/dist/core/agent/skillBrains.js +13 -5
  45. package/dist/core/agent/skillBrains.js.map +1 -1
  46. package/dist/core/agent/stages/callLLM.js +9 -1
  47. package/dist/core/agent/stages/callLLM.js.map +1 -1
  48. package/dist/core/agent/stages/route.js +4 -3
  49. package/dist/core/agent/stages/route.js.map +1 -1
  50. package/dist/esm/adapters/llm/BedrockProvider.d.ts +6 -7
  51. package/dist/esm/adapters/llm/BedrockProvider.js +18 -3
  52. package/dist/esm/adapters/llm/BedrockProvider.js.map +1 -1
  53. package/dist/esm/adapters/llm/BrowserOpenAIProvider.d.ts +2 -3
  54. package/dist/esm/adapters/llm/BrowserOpenAIProvider.js.map +1 -1
  55. package/dist/esm/adapters/llm/OpenAIProvider.d.ts +1 -2
  56. package/dist/esm/adapters/llm/OpenAIProvider.js.map +1 -1
  57. package/dist/esm/adapters/llm/bedrockCacheWire.d.ts +46 -0
  58. package/dist/esm/adapters/llm/bedrockCacheWire.js +86 -0
  59. package/dist/esm/adapters/llm/bedrockCacheWire.js.map +1 -0
  60. package/dist/esm/adapters/llm/bedrockModels.d.ts +19 -0
  61. package/dist/esm/adapters/llm/bedrockModels.js +68 -0
  62. package/dist/esm/adapters/llm/bedrockModels.js.map +1 -0
  63. package/dist/esm/cache/applyCachePolicy.d.ts +8 -2
  64. package/dist/esm/cache/applyCachePolicy.js +10 -2
  65. package/dist/esm/cache/applyCachePolicy.js.map +1 -1
  66. package/dist/esm/cache/cacheRecorder.js +4 -1
  67. package/dist/esm/cache/cacheRecorder.js.map +1 -1
  68. package/dist/esm/cache/cacheStrategyFor.d.ts +21 -3
  69. package/dist/esm/cache/cacheStrategyFor.js +39 -4
  70. package/dist/esm/cache/cacheStrategyFor.js.map +1 -1
  71. package/dist/esm/cache/index.d.ts +3 -3
  72. package/dist/esm/cache/index.js +3 -3
  73. package/dist/esm/cache/index.js.map +1 -1
  74. package/dist/esm/cache/strategies/BreakpointCacheStrategy.d.ts +1 -0
  75. package/dist/esm/cache/strategies/BreakpointCacheStrategy.js +5 -2
  76. package/dist/esm/cache/strategies/BreakpointCacheStrategy.js.map +1 -1
  77. package/dist/esm/cache/strategies/NoOpCacheStrategy.d.ts +1 -1
  78. package/dist/esm/cache/strategies/NoOpCacheStrategy.js +2 -2
  79. package/dist/esm/cache/strategies/NoOpCacheStrategy.js.map +1 -1
  80. package/dist/esm/cache/types.d.ts +3 -0
  81. package/dist/esm/core/Agent.d.ts +3 -1
  82. package/dist/esm/core/Agent.js +22 -2
  83. package/dist/esm/core/Agent.js.map +1 -1
  84. package/dist/esm/core/agent/AgentBuilder.d.ts +1 -0
  85. package/dist/esm/core/agent/AgentBuilder.js +3 -1
  86. package/dist/esm/core/agent/AgentBuilder.js.map +1 -1
  87. package/dist/esm/core/agent/cacheSupport.d.ts +12 -0
  88. package/dist/esm/core/agent/cacheSupport.js +39 -0
  89. package/dist/esm/core/agent/cacheSupport.js.map +1 -0
  90. package/dist/esm/core/agent/evidence/extract.d.ts +12 -3
  91. package/dist/esm/core/agent/evidence/extract.js +71 -14
  92. package/dist/esm/core/agent/evidence/extract.js.map +1 -1
  93. package/dist/esm/core/agent/evidence/figureUnits.d.ts +2 -0
  94. package/dist/esm/core/agent/evidence/figureUnits.js +21 -0
  95. package/dist/esm/core/agent/evidence/figureUnits.js.map +1 -0
  96. package/dist/esm/core/agent/evidence/figures.d.ts +26 -7
  97. package/dist/esm/core/agent/evidence/figures.js +81 -42
  98. package/dist/esm/core/agent/evidence/figures.js.map +1 -1
  99. package/dist/esm/core/agent/evidence/gate.js +15 -4
  100. package/dist/esm/core/agent/evidence/gate.js.map +1 -1
  101. package/dist/esm/core/agent/evidence/numberPrecision.d.ts +13 -0
  102. package/dist/esm/core/agent/evidence/numberPrecision.js +52 -0
  103. package/dist/esm/core/agent/evidence/numberPrecision.js.map +1 -0
  104. package/dist/esm/core/agent/evidence/numericRanges.d.ts +8 -0
  105. package/dist/esm/core/agent/evidence/numericRanges.js +28 -0
  106. package/dist/esm/core/agent/evidence/numericRanges.js.map +1 -0
  107. package/dist/esm/core/agent/evidence/types.d.ts +14 -4
  108. package/dist/esm/core/agent/findings/contingent.js +1 -1
  109. package/dist/esm/core/agent/findings/contingent.js.map +1 -1
  110. package/dist/esm/core/agent/runManifest.d.ts +3 -0
  111. package/dist/esm/core/agent/runManifest.js +7 -0
  112. package/dist/esm/core/agent/runManifest.js.map +1 -1
  113. package/dist/esm/core/agent/skillBrains.d.ts +4 -0
  114. package/dist/esm/core/agent/skillBrains.js +13 -5
  115. package/dist/esm/core/agent/skillBrains.js.map +1 -1
  116. package/dist/esm/core/agent/stages/callLLM.d.ts +2 -0
  117. package/dist/esm/core/agent/stages/callLLM.js +9 -1
  118. package/dist/esm/core/agent/stages/callLLM.js.map +1 -1
  119. package/dist/esm/core/agent/stages/route.js +5 -3
  120. package/dist/esm/core/agent/stages/route.js.map +1 -1
  121. package/dist/esm/events/payloads.d.ts +7 -0
  122. package/dist/esm/injection-engine/factories/defineFact.js +3 -3
  123. package/dist/esm/injection-engine/factories/defineFact.js.map +1 -1
  124. package/dist/esm/injection-engine/factories/defineInstruction.js +3 -3
  125. package/dist/esm/injection-engine/factories/defineInstruction.js.map +1 -1
  126. package/dist/esm/injection-engine/factories/defineSkill.js +2 -2
  127. package/dist/esm/injection-engine/factories/defineSkill.js.map +1 -1
  128. package/dist/esm/injection-engine/factories/defineSteering.js +3 -3
  129. package/dist/esm/injection-engine/factories/defineSteering.js.map +1 -1
  130. package/dist/esm/provider-contract/types.d.ts +4 -1
  131. package/dist/esm/provider-contract/types.js.map +1 -1
  132. package/dist/esm/redaction/knownStrings.js +2 -0
  133. package/dist/esm/redaction/knownStrings.js.map +1 -1
  134. package/dist/esm/resilience/withFallback.js +17 -6
  135. package/dist/esm/resilience/withFallback.js.map +1 -1
  136. package/dist/esm/tools/normalize.d.ts +7 -5
  137. package/dist/esm/tools/normalize.js +26 -2
  138. package/dist/esm/tools/normalize.js.map +1 -1
  139. package/dist/injection-engine/factories/defineFact.js +2 -2
  140. package/dist/injection-engine/factories/defineFact.js.map +1 -1
  141. package/dist/injection-engine/factories/defineInstruction.js +2 -2
  142. package/dist/injection-engine/factories/defineInstruction.js.map +1 -1
  143. package/dist/injection-engine/factories/defineSkill.js +1 -1
  144. package/dist/injection-engine/factories/defineSkill.js.map +1 -1
  145. package/dist/injection-engine/factories/defineSteering.js +2 -2
  146. package/dist/injection-engine/factories/defineSteering.js.map +1 -1
  147. package/dist/provider-contract/types.js.map +1 -1
  148. package/dist/redaction/knownStrings.js +2 -0
  149. package/dist/redaction/knownStrings.js.map +1 -1
  150. package/dist/resilience/withFallback.js +17 -6
  151. package/dist/resilience/withFallback.js.map +1 -1
  152. package/dist/tools/normalize.js +28 -3
  153. package/dist/tools/normalize.js.map +1 -1
  154. package/dist/types/adapters/llm/BedrockProvider.d.ts +6 -7
  155. package/dist/types/adapters/llm/BedrockProvider.d.ts.map +1 -1
  156. package/dist/types/adapters/llm/BrowserOpenAIProvider.d.ts +2 -3
  157. package/dist/types/adapters/llm/BrowserOpenAIProvider.d.ts.map +1 -1
  158. package/dist/types/adapters/llm/OpenAIProvider.d.ts +1 -2
  159. package/dist/types/adapters/llm/OpenAIProvider.d.ts.map +1 -1
  160. package/dist/types/adapters/llm/bedrockCacheWire.d.ts +47 -0
  161. package/dist/types/adapters/llm/bedrockCacheWire.d.ts.map +1 -0
  162. package/dist/types/adapters/llm/bedrockModels.d.ts +20 -0
  163. package/dist/types/adapters/llm/bedrockModels.d.ts.map +1 -0
  164. package/dist/types/cache/applyCachePolicy.d.ts +8 -2
  165. package/dist/types/cache/applyCachePolicy.d.ts.map +1 -1
  166. package/dist/types/cache/cacheRecorder.d.ts.map +1 -1
  167. package/dist/types/cache/cacheStrategyFor.d.ts +21 -3
  168. package/dist/types/cache/cacheStrategyFor.d.ts.map +1 -1
  169. package/dist/types/cache/index.d.ts +3 -3
  170. package/dist/types/cache/index.d.ts.map +1 -1
  171. package/dist/types/cache/strategies/BreakpointCacheStrategy.d.ts +1 -0
  172. package/dist/types/cache/strategies/BreakpointCacheStrategy.d.ts.map +1 -1
  173. package/dist/types/cache/strategies/NoOpCacheStrategy.d.ts +1 -1
  174. package/dist/types/cache/types.d.ts +3 -0
  175. package/dist/types/cache/types.d.ts.map +1 -1
  176. package/dist/types/core/Agent.d.ts +3 -1
  177. package/dist/types/core/Agent.d.ts.map +1 -1
  178. package/dist/types/core/agent/AgentBuilder.d.ts +1 -0
  179. package/dist/types/core/agent/AgentBuilder.d.ts.map +1 -1
  180. package/dist/types/core/agent/cacheSupport.d.ts +13 -0
  181. package/dist/types/core/agent/cacheSupport.d.ts.map +1 -0
  182. package/dist/types/core/agent/evidence/extract.d.ts +12 -3
  183. package/dist/types/core/agent/evidence/extract.d.ts.map +1 -1
  184. package/dist/types/core/agent/evidence/figureUnits.d.ts +3 -0
  185. package/dist/types/core/agent/evidence/figureUnits.d.ts.map +1 -0
  186. package/dist/types/core/agent/evidence/figures.d.ts +26 -7
  187. package/dist/types/core/agent/evidence/figures.d.ts.map +1 -1
  188. package/dist/types/core/agent/evidence/gate.d.ts.map +1 -1
  189. package/dist/types/core/agent/evidence/numberPrecision.d.ts +14 -0
  190. package/dist/types/core/agent/evidence/numberPrecision.d.ts.map +1 -0
  191. package/dist/types/core/agent/evidence/numericRanges.d.ts +9 -0
  192. package/dist/types/core/agent/evidence/numericRanges.d.ts.map +1 -0
  193. package/dist/types/core/agent/evidence/types.d.ts +14 -4
  194. package/dist/types/core/agent/evidence/types.d.ts.map +1 -1
  195. package/dist/types/core/agent/runManifest.d.ts +3 -0
  196. package/dist/types/core/agent/runManifest.d.ts.map +1 -1
  197. package/dist/types/core/agent/skillBrains.d.ts +4 -0
  198. package/dist/types/core/agent/skillBrains.d.ts.map +1 -1
  199. package/dist/types/core/agent/stages/callLLM.d.ts +2 -0
  200. package/dist/types/core/agent/stages/callLLM.d.ts.map +1 -1
  201. package/dist/types/core/agent/stages/route.d.ts.map +1 -1
  202. package/dist/types/events/payloads.d.ts +7 -0
  203. package/dist/types/events/payloads.d.ts.map +1 -1
  204. package/dist/types/provider-contract/types.d.ts +4 -1
  205. package/dist/types/provider-contract/types.d.ts.map +1 -1
  206. package/dist/types/redaction/knownStrings.d.ts.map +1 -1
  207. package/dist/types/resilience/withFallback.d.ts.map +1 -1
  208. package/dist/types/tools/normalize.d.ts +7 -5
  209. package/dist/types/tools/normalize.d.ts.map +1 -1
  210. package/package.json +1 -1
@@ -34,7 +34,10 @@ import { NoOpCacheStrategy } from './strategies/NoOpCacheStrategy.js';
34
34
  /** One shared instance: the no-op strategy holds no state. */
35
35
  const NO_CACHING = new NoOpCacheStrategy();
36
36
  /**
37
- * The strategy that serves `provider`'s declared prompt caching.
37
+ * The strategy that serves `provider`'s declared prompt caching for `model`.
38
+ * Static declarations keep the one-argument form. For a model-aware adapter,
39
+ * pass its model (including its own supported shorthand); omitting it selects
40
+ * no caching rather than guessing a model.
38
41
  *
39
42
  * @throws TypeError when the declaration is malformed (an unknown `mode`, a
40
43
  * `maxBreakpoints` that is not a positive integer, a non-boolean
@@ -42,16 +45,40 @@ const NO_CACHING = new NoOpCacheStrategy();
42
45
  * quietly fell back to "no caching" would be the very failure this
43
46
  * function exists to end.
44
47
  */
45
- export function cacheStrategyFor(provider) {
46
- const declared = provider.promptCaching;
48
+ export function cacheStrategyFor(provider, model) {
49
+ const declared = promptCachingFor(provider, model);
47
50
  if (declared === undefined)
48
51
  return NO_CACHING;
49
52
  const who = `the '${provider.name}' provider`;
50
- assertDeclaration(declared, who);
51
53
  return declared.mode === 'breakpoints'
52
54
  ? new BreakpointCacheStrategy(declared, who)
53
55
  : new AutomaticCacheStrategy(declared, who);
54
56
  }
57
+ /** Resolve the provider's one declaration for this model. An omitted model
58
+ * cannot establish a model-aware capability, so it fails closed. Static
59
+ * declarations retain the existing one-argument behavior.
60
+ *
61
+ * Use this reader instead of accessing `provider.promptCaching.mode`: the
62
+ * port also permits a model function. No resolver is duplicated in adapters.
63
+ *
64
+ * @example
65
+ * ```ts
66
+ * import { promptCachingFor } from 'agentfootprint/cache';
67
+ * const declaration = promptCachingFor(provider, model);
68
+ * if (declaration?.mode === 'breakpoints') console.log(declaration.maxBreakpoints);
69
+ * ```
70
+ */
71
+ export function promptCachingFor(provider, model) {
72
+ const declaration = provider.promptCaching;
73
+ const declared = typeof declaration === 'function'
74
+ ? model === undefined
75
+ ? undefined
76
+ : declaration(model)
77
+ : declaration;
78
+ if (declared !== undefined)
79
+ assertDeclaration(declared, `the '${provider.name}' provider`);
80
+ return declared;
81
+ }
55
82
  function assertDeclaration(declared, who) {
56
83
  const shape = declared;
57
84
  const refuse = (what) => {
@@ -69,5 +96,13 @@ function assertDeclaration(declared, who) {
69
96
  if (typeof shape.reportsUsage !== 'boolean') {
70
97
  refuse(`with reportsUsage ${JSON.stringify(shape.reportsUsage)} (true or false)`);
71
98
  }
99
+ if (shape.fields !== undefined &&
100
+ (!Array.isArray(shape.fields) ||
101
+ shape.fields.length === 0 ||
102
+ shape.fields.length > 3 ||
103
+ shape.fields.some((field) => !['system', 'tools', 'messages'].includes(field)) ||
104
+ new Set(shape.fields).size !== shape.fields.length)) {
105
+ refuse('with fields other than a nonempty unique subset of system, tools, messages');
106
+ }
72
107
  }
73
108
  //# sourceMappingURL=cacheStrategyFor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cacheStrategyFor.js","sourceRoot":"","sources":["../../../src/cache/cacheStrategyFor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,8DAA8D;AAC9D,MAAM,UAAU,GAAG,IAAI,iBAAiB,EAAE,CAAC;AAE3C;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAqD;IAErD,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC;IACxC,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC;IAC9C,MAAM,GAAG,GAAG,QAAQ,QAAQ,CAAC,IAAI,YAAY,CAAC;IAC9C,iBAAiB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACjC,OAAO,QAAQ,CAAC,IAAI,KAAK,aAAa;QACpC,CAAC,CAAC,IAAI,uBAAuB,CAAC,QAAQ,EAAE,GAAG,CAAC;QAC5C,CAAC,CAAC,IAAI,sBAAsB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAuB,EAAE,GAAW;IAC7D,MAAM,KAAK,GAAG,QAAgF,CAAC;IAC/F,MAAM,MAAM,GAAG,CAAC,IAAY,EAAS,EAAE;QACrC,MAAM,IAAI,SAAS,CACjB,GAAG,GAAG,2BAA2B,IAAI,mDAAmD;YACtF,qFAAqF;YACrF,sDAAsD,CACzD,CAAC;IACJ,CAAC,CAAC;IACF,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC/D,MAAM,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,IACE,KAAK,CAAC,IAAI,KAAK,aAAa;QAC5B,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,IAAK,KAAK,CAAC,cAAyB,GAAG,CAAC,CAAC,EACjF,CAAC;QACD,MAAM,CAAC,uBAAuB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC;IAC7F,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QAC5C,MAAM,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;IACpF,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"cacheStrategyFor.js","sourceRoot":"","sources":["../../../src/cache/cacheStrategyFor.ts"],"names":[],"mappings":"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"}
@@ -3,12 +3,12 @@
3
3
  *
4
4
  * The strategy an agent runs is chosen by CAPABILITY: the provider adapter
5
5
  * declares how its wire caches (`LLMProvider.promptCaching`) and
6
- * `cacheStrategyFor(provider)` returns the one strategy that serves it —
6
+ * `cacheStrategyFor(provider, model?)` returns the strategy that serves it —
7
7
  * - `BreakpointCacheStrategy` — `mode: 'breakpoints'` (Anthropic's
8
8
  * `cache_control`; `anthropic()`, `browserAnthropic()`);
9
9
  * - `AutomaticCacheStrategy` — `mode: 'automatic'` (OpenAI and Azure
10
10
  * OpenAI cache on their own);
11
- * - `NoOpCacheStrategy` — nothing declared (Mock, Ollama, Bedrock Converse,
11
+ * - `NoOpCacheStrategy` — nothing declared for the model (Mock, Ollama,
12
12
  * Gemini, any adapter that has not said).
13
13
  * Nothing registers at module load and nothing is keyed by provider name, so
14
14
  * a decorator that renames its provider keeps caching by forwarding the
@@ -21,7 +21,7 @@
21
21
  */
22
22
  export type { CachePolicy, CachePolicyContext, CacheMarker, CacheStrategy, CacheStrategyContext, CacheMetrics, CacheUsage, PromptCaching, } from './types.js';
23
23
  export { known, unknown, notApplicable, isKnown, valueOr, describeClaim, type Claim, } from '../lib/claim/claim.js';
24
- export { cacheStrategyFor } from './cacheStrategyFor.js';
24
+ export { cacheStrategyFor, promptCachingFor } from './cacheStrategyFor.js';
25
25
  export { NoOpCacheStrategy } from './strategies/NoOpCacheStrategy.js';
26
26
  export { BreakpointCacheStrategy } from './strategies/BreakpointCacheStrategy.js';
27
27
  export { AutomaticCacheStrategy } from './strategies/AutomaticCacheStrategy.js';
@@ -3,12 +3,12 @@
3
3
  *
4
4
  * The strategy an agent runs is chosen by CAPABILITY: the provider adapter
5
5
  * declares how its wire caches (`LLMProvider.promptCaching`) and
6
- * `cacheStrategyFor(provider)` returns the one strategy that serves it —
6
+ * `cacheStrategyFor(provider, model?)` returns the strategy that serves it —
7
7
  * - `BreakpointCacheStrategy` — `mode: 'breakpoints'` (Anthropic's
8
8
  * `cache_control`; `anthropic()`, `browserAnthropic()`);
9
9
  * - `AutomaticCacheStrategy` — `mode: 'automatic'` (OpenAI and Azure
10
10
  * OpenAI cache on their own);
11
- * - `NoOpCacheStrategy` — nothing declared (Mock, Ollama, Bedrock Converse,
11
+ * - `NoOpCacheStrategy` — nothing declared for the model (Mock, Ollama,
12
12
  * Gemini, any adapter that has not said).
13
13
  * Nothing registers at module load and nothing is keyed by provider name, so
14
14
  * a decorator that renames its provider keeps caching by forwarding the
@@ -24,7 +24,7 @@
24
24
  // `agentfootprint/maps` exports, so `known` from either door is one function.
25
25
  export { known, unknown, notApplicable, isKnown, valueOr, describeClaim, } from '../lib/claim/claim.js';
26
26
  // Strategy selection — by the provider's declared capability, never its name
27
- export { cacheStrategyFor } from './cacheStrategyFor.js';
27
+ export { cacheStrategyFor, promptCachingFor } from './cacheStrategyFor.js';
28
28
  // Built-in strategy classes (for consumers who want explicit overrides via
29
29
  // `Agent.create({ cacheStrategy })`)
30
30
  export { NoOpCacheStrategy } from './strategies/NoOpCacheStrategy.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cache/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAeH,oEAAoE;AACpE,2DAA2D;AAC3D,8EAA8E;AAC9E,OAAO,EACL,KAAK,EACL,OAAO,EACP,aAAa,EACb,OAAO,EACP,OAAO,EACP,aAAa,GAEd,MAAM,uBAAuB,CAAC;AAE/B,6EAA6E;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,2EAA2E;AAC3E,qCAAqC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAEhF,WAAW;AACX,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cache/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAeH,oEAAoE;AACpE,2DAA2D;AAC3D,8EAA8E;AAC9E,OAAO,EACL,KAAK,EACL,OAAO,EACP,aAAa,EACb,OAAO,EACP,OAAO,EACP,aAAa,GAEd,MAAM,uBAAuB,CAAC;AAE/B,6EAA6E;AAC7E,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE3E,2EAA2E;AAC3E,qCAAqC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAEhF,WAAW;AACX,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
@@ -24,6 +24,7 @@ export declare class BreakpointCacheStrategy implements CacheStrategy {
24
24
  private readonly maxBreakpoints;
25
25
  private readonly reportsUsage;
26
26
  private readonly who;
27
+ private readonly fields?;
27
28
  /**
28
29
  * @param declared the provider's `promptCaching` declaration
29
30
  * @param who names the adapter in the meter's evidence sentences,
@@ -23,6 +23,7 @@ export class BreakpointCacheStrategy {
23
23
  maxBreakpoints;
24
24
  reportsUsage;
25
25
  who;
26
+ fields;
26
27
  /**
27
28
  * @param declared the provider's `promptCaching` declaration
28
29
  * @param who names the adapter in the meter's evidence sentences,
@@ -32,6 +33,7 @@ export class BreakpointCacheStrategy {
32
33
  this.maxBreakpoints = declared.maxBreakpoints;
33
34
  this.reportsUsage = declared.reportsUsage;
34
35
  this.who = who;
36
+ this.fields = declared.fields;
35
37
  }
36
38
  async prepareRequest(req, candidates, ctx) {
37
39
  // The agent-side kill switch, honoured here too: the CacheGate should
@@ -40,9 +42,10 @@ export class BreakpointCacheStrategy {
40
42
  if (ctx.cachingDisabled || candidates.length === 0) {
41
43
  return { request: req, markersApplied: [] };
42
44
  }
43
- const markersApplied = candidates.length <= this.maxBreakpoints
45
+ const supported = this.fields === undefined
44
46
  ? candidates
45
- : candidates.slice(0, this.maxBreakpoints);
47
+ : candidates.filter((marker) => this.fields?.includes(marker.field));
48
+ const markersApplied = supported.length <= this.maxBreakpoints ? supported : supported.slice(0, this.maxBreakpoints);
46
49
  return { request: { ...req, cacheMarkers: markersApplied }, markersApplied };
47
50
  }
48
51
  extractMetrics(usage) {
@@ -1 +1 @@
1
- {"version":3,"file":"BreakpointCacheStrategy.js","sourceRoot":"","sources":["../../../../src/cache/strategies/BreakpointCacheStrategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAUH,OAAO,EAAE,aAAa,EAAc,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrD,MAAM,OAAO,uBAAuB;IACzB,IAAI,GAAG,aAAa,CAAC;IACb,cAAc,CAAS;IACvB,YAAY,CAAU;IACtB,GAAG,CAAS;IAE7B;;;;OAIG;IACH,YAAY,QAAyD,EAAE,GAAG,GAAG,cAAc;QACzF,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC;QAC9C,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;QAC1C,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,GAAe,EACf,UAAkC,EAClC,GAAyB;QAKzB,sEAAsE;QACtE,yEAAyE;QACzE,6DAA6D;QAC7D,IAAI,GAAG,CAAC,eAAe,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnD,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;QAC9C,CAAC;QACD,MAAM,cAAc,GAClB,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc;YACtC,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC/C,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,GAAG,EAAE,YAAY,EAAE,cAAc,EAAE,EAAE,cAAc,EAAE,CAAC;IAC/E,CAAC;IAED,cAAc,CAAC,KAA6B;QAC1C,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,aAAa,CAClB,GAAG,IAAI,CAAC,GAAG,uDAAuD;gBAChE,qCAAqC,CACxC,CAAC;QACJ,CAAC;QACD,OAAO,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;CACF"}
1
+ {"version":3,"file":"BreakpointCacheStrategy.js","sourceRoot":"","sources":["../../../../src/cache/strategies/BreakpointCacheStrategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAUH,OAAO,EAAE,aAAa,EAAc,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrD,MAAM,OAAO,uBAAuB;IACzB,IAAI,GAAG,aAAa,CAAC;IACb,cAAc,CAAS;IACvB,YAAY,CAAU;IACtB,GAAG,CAAS;IACZ,MAAM,CAAmC;IAE1D;;;;OAIG;IACH,YAAY,QAAyD,EAAE,GAAG,GAAG,cAAc;QACzF,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC;QAC9C,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;QAC1C,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,GAAe,EACf,UAAkC,EAClC,GAAyB;QAKzB,sEAAsE;QACtE,yEAAyE;QACzE,6DAA6D;QAC7D,IAAI,GAAG,CAAC,eAAe,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnD,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;QAC9C,CAAC;QACD,MAAM,SAAS,GACb,IAAI,CAAC,MAAM,KAAK,SAAS;YACvB,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACzE,MAAM,cAAc,GAClB,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAChG,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,GAAG,EAAE,YAAY,EAAE,cAAc,EAAE,EAAE,cAAc,EAAE,CAAC;IAC/E,CAAC;IAED,cAAc,CAAC,KAA6B;QAC1C,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,aAAa,CAClB,GAAG,IAAI,CAAC,GAAG,uDAAuD;gBAChE,qCAAqC,CACxC,CAAC;QACJ,CAAC;QACD,OAAO,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;CACF"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * NoOpCacheStrategy — for a provider that declares no prompt caching
3
- * (`LLMProvider.promptCaching` absent): Mock, Ollama, Bedrock Converse,
3
+ * (`LLMProvider.promptCaching` absent or undefined for this model): Mock, Ollama,
4
4
  * any adapter that has not said, or an intentional opt-out.
5
5
  *
6
6
  * Returns the request unchanged and reports *not applicable* — never a zero.
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * NoOpCacheStrategy — for a provider that declares no prompt caching
3
- * (`LLMProvider.promptCaching` absent): Mock, Ollama, Bedrock Converse,
3
+ * (`LLMProvider.promptCaching` absent or undefined for this model): Mock, Ollama,
4
4
  * any adapter that has not said, or an intentional opt-out.
5
5
  *
6
6
  * Returns the request unchanged and reports *not applicable* — never a zero.
@@ -14,7 +14,7 @@ export class NoOpCacheStrategy {
14
14
  return { request: req, markersApplied: [] };
15
15
  }
16
16
  extractMetrics(_usage) {
17
- return notApplicable('the provider declares no prompt caching (LLMProvider.promptCaching is absent), so no ' +
17
+ return notApplicable('the provider declares no prompt caching for this model (LLMProvider.promptCaching is absent or resolves to undefined), so no ' +
18
18
  'cache traffic is driven or reported');
19
19
  }
20
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"NoOpCacheStrategy.js","sourceRoot":"","sources":["../../../../src/cache/strategies/NoOpCacheStrategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,OAAO,EAAE,aAAa,EAAc,MAAM,0BAA0B,CAAC;AAGrE,MAAM,OAAO,iBAAiB;IACnB,IAAI,GAAG,MAAM,CAAC;IAEvB,KAAK,CAAC,cAAc,CAClB,GAAe,EACf,WAAmC,EACnC,IAA0B;QAK1B,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;IAC9C,CAAC;IAED,cAAc,CAAC,MAA8B;QAC3C,OAAO,aAAa,CAClB,uFAAuF;YACrF,qCAAqC,CACxC,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"NoOpCacheStrategy.js","sourceRoot":"","sources":["../../../../src/cache/strategies/NoOpCacheStrategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,OAAO,EAAE,aAAa,EAAc,MAAM,0BAA0B,CAAC;AAGrE,MAAM,OAAO,iBAAiB;IACnB,IAAI,GAAG,MAAM,CAAC;IAEvB,KAAK,CAAC,cAAc,CAClB,GAAe,EACf,WAAmC,EACnC,IAA0B;QAK1B,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;IAC9C,CAAC;IAED,cAAc,CAAC,MAA8B;QAC3C,OAAO,aAAa,CAClB,+HAA+H;YAC7H,qCAAqC,CACxC,CAAC;IACJ,CAAC;CACF"}
@@ -180,6 +180,9 @@ export type PromptCaching = {
180
180
  /** Breakpoints the wire honours on one request (Anthropic: 4). */
181
181
  readonly maxBreakpoints: number;
182
182
  readonly reportsUsage: boolean;
183
+ /** Optional wire-supported fields. Absent means all marker fields;
184
+ * models such as Bedrock Nova accept system/messages but not tools. */
185
+ readonly fields?: readonly CacheMarker['field'][];
183
186
  } | {
184
187
  readonly mode: 'automatic';
185
188
  readonly reportsUsage: boolean;
@@ -169,6 +169,8 @@ export declare class Agent extends RunnerBase<AgentInput, AgentOutput> {
169
169
  * consumer passes one explicitly.
170
170
  */
171
171
  private readonly cacheStrategy;
172
+ private readonly cacheStrategyIsOverride;
173
+ private readonly cacheUnsupported;
172
174
  private readonly registry;
173
175
  /**
174
176
  * The Injection list — Skills, Steering, Instructions, Facts (and
@@ -653,7 +655,7 @@ export declare class Agent extends RunnerBase<AgentInput, AgentOutput> {
653
655
  readonly strictness: 'assist' | 'guard' | 'rails';
654
656
  readonly continuity: 'turn' | 'conversation';
655
657
  readonly nodeIds: ReadonlySet<string>;
656
- }, skillBrains?: import('./agent/skillBrains.js').FoldedSkillBrains, evidenceGate?: ResolvedEvidenceGate, limitsTravelWithTheAnswer?: boolean, recipes?: readonly AppliedRecipe[], skillGraphDeclared?: SkillGraphDeclaredMap, mapsPlan?: import('../maps/engagement/types.js').EngagementPlan, claimContract?: readonly import('../integrity/unsupported-claim/check.js').DeclaredClaim[], answerValidationConfig?: ResolvedAnswerValidation);
658
+ }, skillBrains?: import('./agent/skillBrains.js').FoldedSkillBrains, evidenceGate?: ResolvedEvidenceGate, limitsTravelWithTheAnswer?: boolean, recipes?: readonly AppliedRecipe[], skillGraphDeclared?: SkillGraphDeclaredMap, mapsPlan?: import('../maps/engagement/types.js').EngagementPlan, claimContract?: readonly import('../integrity/unsupported-claim/check.js').DeclaredClaim[], answerValidationConfig?: ResolvedAnswerValidation, systemPromptCacheExplicit?: boolean);
657
659
  static create(opts: AgentOptions): AgentBuilder;
658
660
  /**
659
661
  * Cache policy for the base system prompt. Read by the CacheDecision
@@ -19,6 +19,7 @@ import { extractSequence } from '../security/extractSequence.js';
19
19
  import { PolicyHaltError } from '../security/PolicyHaltError.js';
20
20
  import { updateSkillHistory as updateSkillHistoryStage } from '../cache/CacheGateDecider.js';
21
21
  import { cacheStrategyFor } from '../cache/cacheStrategyFor.js';
22
+ import { cacheRequestedWithoutSupport } from './agent/cacheSupport.js';
22
23
  import { forcedToolChoiceFor, UnsupportedToolChoiceError, } from '../provider-contract/forcedToolChoice.js';
23
24
  import { nativeOutputSchemaFor, UnsupportedNativeOutputError, } from '../provider-contract/nativeOutputSchema.js';
24
25
  import { isRequestRefusal } from '../provider-contract/requestRefusal.js';
@@ -235,6 +236,8 @@ export class Agent extends RunnerBase {
235
236
  * consumer passes one explicitly.
236
237
  */
237
238
  cacheStrategy;
239
+ cacheStrategyIsOverride;
240
+ cacheUnsupported;
238
241
  registry;
239
242
  /**
240
243
  * The Injection list — Skills, Steering, Instructions, Facts (and
@@ -726,7 +729,7 @@ export class Agent extends RunnerBase {
726
729
  * rebinding itself to each run id (`core/agent/receipt/receiptDigests.ts`). */
727
730
  receiptDigests = createReceiptDigests();
728
731
  answerValidationConfig;
729
- constructor(opts, systemPromptValue, registry, voice, injections = [], memories = [], outputSchemaParser, toolProvider, systemPromptCachePolicy = 'always', cachingDisabled = false, cacheStrategy, outputFallbackCfg, reliabilityConfig, thinkingHandlerValue, thinkingBudgetValue, skillGraphNextSkill, skillGraphReachable, skillGraphScoreEntries, checkInOptions, runConfigFn, windowStrategy, toolMiddleware, messageMiddleware, outputEnforcement, skillGraphEdgeTargets, skillGraphExplainNextSkill, skillGraphIsTree, skillGraphSupersededEntries, skillGraphCascade, skillBrains, evidenceGate, limitsTravelWithTheAnswer, recipes, skillGraphDeclared, mapsPlan, claimContract, answerValidationConfig) {
732
+ constructor(opts, systemPromptValue, registry, voice, injections = [], memories = [], outputSchemaParser, toolProvider, systemPromptCachePolicy = 'always', cachingDisabled = false, cacheStrategy, outputFallbackCfg, reliabilityConfig, thinkingHandlerValue, thinkingBudgetValue, skillGraphNextSkill, skillGraphReachable, skillGraphScoreEntries, checkInOptions, runConfigFn, windowStrategy, toolMiddleware, messageMiddleware, outputEnforcement, skillGraphEdgeTargets, skillGraphExplainNextSkill, skillGraphIsTree, skillGraphSupersededEntries, skillGraphCascade, skillBrains, evidenceGate, limitsTravelWithTheAnswer, recipes, skillGraphDeclared, mapsPlan, claimContract, answerValidationConfig, systemPromptCacheExplicit = false) {
730
733
  super();
731
734
  // Which conversation this instance's self-explain evidence belongs to —
732
735
  // held in a module registry, not on the class, so it is not public API
@@ -756,7 +759,20 @@ export class Agent extends RunnerBase {
756
759
  // caller overrides it — never one looked up by `provider.name`, which a
757
760
  // renaming decorator (`withRetry`, an app's own wrapper) rewrites. A
758
761
  // provider that declares nothing gets the no-op strategy.
759
- this.cacheStrategy = cacheStrategy ?? cacheStrategyFor(opts.provider);
762
+ this.cacheStrategy = cacheStrategy ?? cacheStrategyFor(opts.provider, opts.model);
763
+ this.cacheStrategyIsOverride = cacheStrategy !== undefined;
764
+ this.cacheUnsupported = cacheRequestedWithoutSupport({
765
+ strategy: this.cacheStrategy,
766
+ providerName: opts.provider.name,
767
+ systemPrompt: systemPromptValue,
768
+ systemPolicy: systemPromptCachePolicy,
769
+ systemExplicit: systemPromptCacheExplicit,
770
+ modelAwareUnavailable: cacheStrategy === undefined &&
771
+ typeof opts.provider.promptCaching === 'function' &&
772
+ this.cacheStrategy.name === 'none',
773
+ injections,
774
+ disabled: cachingDisabled,
775
+ });
760
776
  this.registry = registry;
761
777
  this.injections = injections;
762
778
  this.skillGraphNextSkill = skillGraphNextSkill;
@@ -3485,6 +3501,7 @@ export class Agent extends RunnerBase {
3485
3501
  model: this.model,
3486
3502
  hasRunConfig: this.runConfigFn !== undefined,
3487
3503
  hasSkillBrains: this.skillBrains !== undefined,
3504
+ ...(this.cacheUnsupported !== undefined && { cacheUnsupported: this.cacheUnsupported }),
3488
3505
  reactMode: this.reactMode,
3489
3506
  memories: this.memories,
3490
3507
  ...(this.windowStrategy !== undefined && {
@@ -4707,6 +4724,7 @@ export class Agent extends RunnerBase {
4707
4724
  ...(costBudget !== undefined && { costBudget }),
4708
4725
  maxIterations,
4709
4726
  cacheStrategy,
4727
+ ...(this.cacheStrategyIsOverride && { cacheStrategyIsOverride: true }),
4710
4728
  get toolSchemas() {
4711
4729
  return toolSchemasResolved;
4712
4730
  },
@@ -4764,6 +4782,8 @@ export class Agent extends RunnerBase {
4764
4782
  brains: this.skillBrains,
4765
4783
  agentProvider: provider,
4766
4784
  agentCacheStrategy: cacheStrategy,
4785
+ agentModel: model,
4786
+ ...(this.cacheStrategyIsOverride && { agentCacheStrategyIsOverride: true }),
4767
4787
  }),
4768
4788
  }),
4769
4789
  });