mohdel 0.115.0 → 0.116.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.
@@ -77,6 +77,7 @@ export async function * openai (envelope, deps = {}) {
77
77
  let outputTokens = 0
78
78
  let thinkingTokens = 0
79
79
  let cachedInputTokens = 0
80
+ let cacheWriteTokens = 0
80
81
  let status = STATUS_COMPLETED
81
82
  /** @type {string | undefined} */
82
83
  let warning
@@ -132,6 +133,7 @@ export async function * openai (envelope, deps = {}) {
132
133
  outputTokens = event.response.usage.output_tokens ?? 0
133
134
  thinkingTokens = event.response.usage.output_tokens_details?.reasoning_tokens ?? 0
134
135
  cachedInputTokens = event.response.usage.input_tokens_details?.cached_tokens ?? 0
136
+ cacheWriteTokens = event.response.usage.input_tokens_details?.cache_write_tokens ?? 0
135
137
  }
136
138
  if (toolItems.size > 0) {
137
139
  status = STATUS_TOOL_USE
@@ -148,6 +150,7 @@ export async function * openai (envelope, deps = {}) {
148
150
  outputTokens = event.response.usage.output_tokens ?? 0
149
151
  thinkingTokens = event.response.usage.output_tokens_details?.reasoning_tokens ?? 0
150
152
  cachedInputTokens = event.response.usage.input_tokens_details?.cached_tokens ?? 0
153
+ cacheWriteTokens = event.response.usage.input_tokens_details?.cache_write_tokens ?? 0
151
154
  }
152
155
  break
153
156
 
@@ -177,11 +180,12 @@ export async function * openai (envelope, deps = {}) {
177
180
  // one from the other for the message-only count.
178
181
  const messageOutputTokens = Math.max(0, outputTokens - thinkingTokens)
179
182
 
180
- // OpenAI counts cached_tokens as a SUBSET of input_tokens. Convert to
181
- // mohdel's additive convention (cacheReadInputTokens is separate from
182
- // inputTokens) by subtracting the cached portion before pricing. Both
183
- // adapters and computeCost stay simpler with the additive shape.
184
- const regularInputTokens = Math.max(0, inputTokens - cachedInputTokens)
183
+ // OpenAI counts cached_tokens and cache_write_tokens as SUBSETS of
184
+ // input_tokens. Convert to mohdel's additive convention (cacheRead/
185
+ // cacheWriteInputTokens are separate from inputTokens) by subtracting
186
+ // both portions before pricing. Both adapters and computeCost stay
187
+ // simpler with the additive shape.
188
+ const regularInputTokens = Math.max(0, inputTokens - cachedInputTokens - cacheWriteTokens)
185
189
 
186
190
  /** @type {import('#core/events.js').DoneEvent} */
187
191
  const done = {
@@ -192,6 +196,7 @@ export async function * openai (envelope, deps = {}) {
192
196
  inputTokens: regularInputTokens,
193
197
  outputTokens: messageOutputTokens,
194
198
  thinkingTokens,
199
+ ...(cacheWriteTokens > 0 && { cacheWriteInputTokens: cacheWriteTokens }),
195
200
  ...(cachedInputTokens > 0 && { cacheReadInputTokens: cachedInputTokens }),
196
201
  cost: costFor(
197
202
  catalogKey(envelope.model),
@@ -199,6 +204,7 @@ export async function * openai (envelope, deps = {}) {
199
204
  inputTokens: regularInputTokens,
200
205
  outputTokens: messageOutputTokens,
201
206
  thinkingTokens,
207
+ cacheWriteInputTokens: cacheWriteTokens,
202
208
  cacheReadInputTokens: cachedInputTokens
203
209
  }
204
210
  ),
@@ -273,6 +279,7 @@ function buildRequest (envelope, input, instructions) {
273
279
  if (envelope.identifier) {
274
280
  if (provider === 'openai') {
275
281
  request.safety_identifier = envelope.identifier
282
+ request.prompt_cache_key = envelope.identifier
276
283
  } else {
277
284
  request.user = envelope.identifier
278
285
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mohdel",
3
- "version": "0.115.0",
3
+ "version": "0.116.1",
4
4
  "license": "MIT",
5
5
  "author": {
6
6
  "name": "Christophe Le Bars",
@@ -87,16 +87,16 @@
87
87
  "@opentelemetry/exporter-trace-otlp-grpc": "^0.220.0",
88
88
  "@opentelemetry/sdk-node": "^0.220.0",
89
89
  "chalk": "^5.4.0",
90
- "mohdel-thin-gate-linux-x64-gnu": "0.115.0"
90
+ "mohdel-thin-gate-linux-x64-gnu": "0.116.1"
91
91
  },
92
92
  "dependencies": {
93
93
  "@anthropic-ai/sdk": "^0.110.0",
94
94
  "@cerebras/cerebras_cloud_sdk": "^1.61.1",
95
- "@google/genai": "^2.10.0",
95
+ "@google/genai": "^2.11.0",
96
96
  "@opentelemetry/api": "^1.9.1",
97
97
  "env-paths": "^4.0.0",
98
98
  "groq-sdk": "^1.3.0",
99
- "openai": "^6.45.0",
99
+ "openai": "^6.46.0",
100
100
  "undici": "^7.24.5"
101
101
  },
102
102
  "lint-staged": {