@openrouter/sdk 0.9.11 → 0.10.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 (274) hide show
  1. package/FUNCTIONS.md +2 -1
  2. package/_speakeasy/.github/action-inputs-config.json +4 -0
  3. package/esm/funcs/analyticsGetUserActivity.js +2 -1
  4. package/esm/funcs/apiKeysCreate.js +2 -1
  5. package/esm/funcs/apiKeysDelete.js +2 -1
  6. package/esm/funcs/apiKeysGet.js +2 -1
  7. package/esm/funcs/apiKeysGetCurrentKeyMetadata.js +2 -1
  8. package/esm/funcs/apiKeysList.js +2 -1
  9. package/esm/funcs/apiKeysUpdate.js +2 -1
  10. package/esm/funcs/betaResponsesSend.js +2 -1
  11. package/esm/funcs/call-model.d.ts +19 -70
  12. package/esm/funcs/call-model.js +29 -71
  13. package/esm/funcs/chatSend.js +2 -1
  14. package/esm/funcs/creditsCreateCoinbaseCharge.js +2 -1
  15. package/esm/funcs/creditsGetCredits.js +2 -1
  16. package/esm/funcs/embeddingsGenerate.js +2 -1
  17. package/esm/funcs/embeddingsListModels.js +2 -1
  18. package/esm/funcs/endpointsList.js +2 -1
  19. package/esm/funcs/endpointsListZdrEndpoints.js +2 -1
  20. package/esm/funcs/generationsGetGeneration.js +2 -1
  21. package/esm/funcs/guardrailsBulkAssignKeys.js +2 -1
  22. package/esm/funcs/guardrailsBulkAssignMembers.js +2 -1
  23. package/esm/funcs/guardrailsBulkUnassignKeys.js +2 -1
  24. package/esm/funcs/guardrailsBulkUnassignMembers.js +2 -1
  25. package/esm/funcs/guardrailsCreate.js +2 -1
  26. package/esm/funcs/guardrailsDelete.js +2 -1
  27. package/esm/funcs/guardrailsGet.js +2 -1
  28. package/esm/funcs/guardrailsList.js +2 -1
  29. package/esm/funcs/guardrailsListGuardrailKeyAssignments.js +2 -1
  30. package/esm/funcs/guardrailsListGuardrailMemberAssignments.js +2 -1
  31. package/esm/funcs/guardrailsListKeyAssignments.js +2 -1
  32. package/esm/funcs/guardrailsListMemberAssignments.js +2 -1
  33. package/esm/funcs/guardrailsUpdate.js +2 -1
  34. package/esm/funcs/modelsCount.d.ts +1 -1
  35. package/esm/funcs/modelsCount.js +9 -4
  36. package/esm/funcs/modelsList.js +3 -1
  37. package/esm/funcs/modelsListForUser.js +2 -1
  38. package/esm/funcs/oAuthCreateAuthCode.d.ts +1 -1
  39. package/esm/funcs/oAuthCreateAuthCode.js +4 -3
  40. package/esm/funcs/oAuthExchangeAuthCodeForAPIKey.js +2 -1
  41. package/esm/funcs/providersList.js +2 -1
  42. package/esm/index.d.ts +22 -23
  43. package/esm/index.js +20 -17
  44. package/esm/lib/anthropic-compat.d.ts +2 -1
  45. package/esm/lib/anthropic-compat.js +1 -2
  46. package/esm/lib/async-params.d.ts +19 -5
  47. package/esm/lib/async-params.js +5 -1
  48. package/esm/lib/chat-compat.d.ts +1 -1
  49. package/esm/lib/chat-compat.js +1 -2
  50. package/esm/lib/claude-type-guards.d.ts +2 -2
  51. package/esm/lib/config.d.ts +8 -10
  52. package/esm/lib/config.js +2 -2
  53. package/esm/lib/conversation-state.d.ts +1 -1
  54. package/esm/lib/conversation-state.js +35 -32
  55. package/esm/lib/env.d.ts +6 -2
  56. package/esm/lib/env.js +7 -3
  57. package/esm/lib/model-result.d.ts +73 -17
  58. package/esm/lib/model-result.js +329 -125
  59. package/esm/lib/sdks.d.ts +1 -1
  60. package/esm/lib/sdks.js +8 -28
  61. package/esm/lib/stream-transformers.d.ts +5 -4
  62. package/esm/lib/stream-transformers.js +24 -29
  63. package/esm/lib/stream-type-guards.js +8 -32
  64. package/esm/lib/tool-context.d.ts +68 -0
  65. package/esm/lib/tool-context.js +175 -0
  66. package/esm/lib/tool-executor.d.ts +9 -5
  67. package/esm/lib/tool-executor.js +26 -16
  68. package/esm/lib/tool-orchestrator.d.ts +2 -2
  69. package/esm/lib/tool-types.d.ts +101 -14
  70. package/esm/lib/tool-types.js +17 -0
  71. package/esm/lib/tool.d.ts +49 -60
  72. package/esm/lib/tool.js +15 -19
  73. package/esm/lib/turn-context.d.ts +1 -1
  74. package/esm/models/assistantmessage.d.ts +6 -0
  75. package/esm/models/assistantmessage.js +3 -0
  76. package/esm/models/chatcompletionaudiooutput.d.ts +38 -0
  77. package/esm/models/chatcompletionaudiooutput.js +36 -0
  78. package/esm/models/chatgenerationparams.d.ts +75 -6
  79. package/esm/models/chatgenerationparams.js +42 -0
  80. package/esm/models/chatmessagecontentitem.d.ts +3 -2
  81. package/esm/models/chatmessagecontentitem.js +3 -0
  82. package/esm/models/chatmessagecontentitemcachecontrol.d.ts +5 -5
  83. package/esm/models/chatmessagecontentitemcachecontrol.js +5 -7
  84. package/esm/models/chatmessagecontentitemfile.d.ts +57 -0
  85. package/esm/models/chatmessagecontentitemfile.js +59 -0
  86. package/esm/models/chatmessagetokenlogprobs.d.ts +1 -1
  87. package/esm/models/chatmessagetokenlogprobs.js +2 -1
  88. package/esm/models/chatresponse.d.ts +1 -1
  89. package/esm/models/chatresponse.js +1 -1
  90. package/esm/models/chatstreamingmessagechunk.d.ts +2 -0
  91. package/esm/models/chatstreamingmessagechunk.js +2 -0
  92. package/esm/models/chatstreamingresponsechunk.d.ts +1 -1
  93. package/esm/models/chatstreamingresponsechunk.js +1 -1
  94. package/esm/models/compoundfilter.d.ts +36 -0
  95. package/esm/models/compoundfilter.js +32 -0
  96. package/esm/models/conflictresponseerrordata.d.ts +17 -0
  97. package/esm/models/conflictresponseerrordata.js +16 -0
  98. package/esm/models/contextcompressionengine.d.ts +15 -0
  99. package/esm/models/contextcompressionengine.js +14 -0
  100. package/esm/models/datetimeservertool.d.ts +30 -0
  101. package/esm/models/datetimeservertool.js +22 -0
  102. package/esm/models/defaultparameters.d.ts +3 -0
  103. package/esm/models/defaultparameters.js +6 -0
  104. package/esm/models/errors/conflictresponseerror.d.ts +33 -0
  105. package/esm/models/errors/conflictresponseerror.js +42 -0
  106. package/esm/models/errors/index.d.ts +1 -0
  107. package/esm/models/errors/index.js +1 -0
  108. package/esm/models/index.d.ts +23 -4
  109. package/esm/models/index.js +23 -4
  110. package/esm/models/openairesponsesinputunion.d.ts +32 -1
  111. package/esm/models/openairesponsesinputunion.js +53 -1
  112. package/esm/models/openresponsesapplypatchtool.d.ts +20 -0
  113. package/esm/models/openresponsesapplypatchtool.js +21 -0
  114. package/esm/models/openresponsescodeinterpretertool.d.ts +68 -0
  115. package/esm/models/openresponsescodeinterpretertool.js +85 -0
  116. package/esm/models/openresponsescomputertool.d.ts +39 -0
  117. package/esm/models/openresponsescomputertool.js +50 -0
  118. package/esm/models/openresponsescustomtool.d.ts +75 -0
  119. package/esm/models/openresponsescustomtool.js +95 -0
  120. package/esm/models/openresponseseasyinputmessage.d.ts +30 -4
  121. package/esm/models/openresponseseasyinputmessage.js +28 -2
  122. package/esm/models/openresponsesfilesearchtool.d.ts +111 -0
  123. package/esm/models/openresponsesfilesearchtool.js +180 -0
  124. package/esm/models/openresponsesfunctioncalloutput.d.ts +46 -7
  125. package/esm/models/openresponsesfunctioncalloutput.js +56 -4
  126. package/esm/models/openresponsesfunctionshelltool.d.ts +20 -0
  127. package/esm/models/openresponsesfunctionshelltool.js +21 -0
  128. package/esm/models/openresponsesimagegenerationtool.d.ts +125 -0
  129. package/esm/models/openresponsesimagegenerationtool.js +153 -0
  130. package/esm/models/openresponsesinputmessageitem.d.ts +2 -2
  131. package/esm/models/openresponsesinputmessageitem.js +2 -2
  132. package/esm/models/openresponsesinputunion.d.ts +207 -0
  133. package/esm/models/openresponsesinputunion.js +225 -0
  134. package/esm/models/openresponseslocalshelltool.d.ts +20 -0
  135. package/esm/models/openresponseslocalshelltool.js +21 -0
  136. package/esm/models/openresponsesmcptool.d.ts +128 -0
  137. package/esm/models/openresponsesmcptool.js +173 -0
  138. package/esm/models/openresponsesnonstreamingresponse.d.ts +11 -2
  139. package/esm/models/openresponsesnonstreamingresponse.js +27 -0
  140. package/esm/models/openresponsesrequest.d.ts +53 -11
  141. package/esm/models/openresponsesrequest.js +51 -2
  142. package/esm/models/openresponsesstreamevent.d.ts +52 -4
  143. package/esm/models/openresponsesstreamevent.js +54 -3
  144. package/esm/models/openresponseswebsearch20250826tool.d.ts +29 -0
  145. package/esm/models/openresponseswebsearch20250826tool.js +23 -0
  146. package/esm/models/openresponseswebsearchcallcompleted.d.ts +16 -0
  147. package/esm/models/openresponseswebsearchcallcompleted.js +24 -0
  148. package/esm/models/openresponseswebsearchcallinprogress.d.ts +16 -0
  149. package/esm/models/openresponseswebsearchcallinprogress.js +24 -0
  150. package/esm/models/openresponseswebsearchcallsearching.d.ts +16 -0
  151. package/esm/models/openresponseswebsearchcallsearching.js +24 -0
  152. package/esm/models/openresponseswebsearchpreview20250311tool.d.ts +44 -0
  153. package/esm/models/openresponseswebsearchpreview20250311tool.js +51 -0
  154. package/esm/models/openresponseswebsearchpreviewtool.d.ts +44 -0
  155. package/esm/models/openresponseswebsearchpreviewtool.js +47 -0
  156. package/esm/models/openresponseswebsearchtool.d.ts +29 -0
  157. package/esm/models/openresponseswebsearchtool.js +23 -0
  158. package/esm/models/operations/bulkassignkeystoguardrail.d.ts +16 -3
  159. package/esm/models/operations/bulkassignkeystoguardrail.js +2 -2
  160. package/esm/models/operations/bulkassignmemberstoguardrail.d.ts +16 -3
  161. package/esm/models/operations/bulkassignmemberstoguardrail.js +2 -2
  162. package/esm/models/operations/bulkunassignkeysfromguardrail.d.ts +16 -3
  163. package/esm/models/operations/bulkunassignkeysfromguardrail.js +2 -2
  164. package/esm/models/operations/bulkunassignmembersfromguardrail.d.ts +16 -3
  165. package/esm/models/operations/bulkunassignmembersfromguardrail.js +2 -2
  166. package/esm/models/operations/createauthkeyscode.d.ts +16 -3
  167. package/esm/models/operations/createauthkeyscode.js +2 -2
  168. package/esm/models/operations/createcoinbasecharge.d.ts +16 -3
  169. package/esm/models/operations/createcoinbasecharge.js +2 -2
  170. package/esm/models/operations/createembeddings.d.ts +16 -3
  171. package/esm/models/operations/createembeddings.js +2 -2
  172. package/esm/models/operations/createguardrail.d.ts +25 -3
  173. package/esm/models/operations/createguardrail.js +6 -2
  174. package/esm/models/operations/createkeys.d.ts +16 -3
  175. package/esm/models/operations/createkeys.js +2 -2
  176. package/esm/models/operations/createresponses.d.ts +16 -3
  177. package/esm/models/operations/createresponses.js +2 -2
  178. package/esm/models/operations/deleteguardrail.d.ts +16 -3
  179. package/esm/models/operations/deleteguardrail.js +2 -2
  180. package/esm/models/operations/deletekeys.d.ts +16 -3
  181. package/esm/models/operations/deletekeys.js +2 -2
  182. package/esm/models/operations/exchangeauthcodeforapikey.d.ts +16 -3
  183. package/esm/models/operations/exchangeauthcodeforapikey.js +2 -2
  184. package/esm/models/operations/getcredits.d.ts +16 -3
  185. package/esm/models/operations/getcredits.js +2 -2
  186. package/esm/models/operations/getcurrentkey.d.ts +16 -3
  187. package/esm/models/operations/getcurrentkey.js +2 -2
  188. package/esm/models/operations/getgeneration.d.ts +25 -3
  189. package/esm/models/operations/getgeneration.js +7 -2
  190. package/esm/models/operations/getguardrail.d.ts +20 -3
  191. package/esm/models/operations/getguardrail.js +4 -2
  192. package/esm/models/operations/getkey.d.ts +16 -3
  193. package/esm/models/operations/getkey.js +2 -2
  194. package/esm/models/operations/getmodels.d.ts +21 -3
  195. package/esm/models/operations/getmodels.js +4 -2
  196. package/esm/models/operations/getuseractivity.d.ts +16 -3
  197. package/esm/models/operations/getuseractivity.js +2 -2
  198. package/esm/models/operations/list.d.ts +16 -3
  199. package/esm/models/operations/list.js +2 -2
  200. package/esm/models/operations/listembeddingsmodels.d.ts +16 -3
  201. package/esm/models/operations/listembeddingsmodels.js +2 -2
  202. package/esm/models/operations/listendpoints.d.ts +16 -3
  203. package/esm/models/operations/listendpoints.js +2 -2
  204. package/esm/models/operations/listendpointszdr.d.ts +16 -3
  205. package/esm/models/operations/listendpointszdr.js +2 -2
  206. package/esm/models/operations/listguardrailkeyassignments.d.ts +16 -3
  207. package/esm/models/operations/listguardrailkeyassignments.js +2 -2
  208. package/esm/models/operations/listguardrailmemberassignments.d.ts +16 -3
  209. package/esm/models/operations/listguardrailmemberassignments.js +2 -2
  210. package/esm/models/operations/listguardrails.d.ts +20 -3
  211. package/esm/models/operations/listguardrails.js +4 -2
  212. package/esm/models/operations/listkeyassignments.d.ts +16 -3
  213. package/esm/models/operations/listkeyassignments.js +2 -2
  214. package/esm/models/operations/listmemberassignments.d.ts +16 -3
  215. package/esm/models/operations/listmemberassignments.js +2 -2
  216. package/esm/models/operations/listmodelscount.d.ts +21 -3
  217. package/esm/models/operations/listmodelscount.js +4 -2
  218. package/esm/models/operations/listmodelsuser.d.ts +16 -3
  219. package/esm/models/operations/listmodelsuser.js +2 -2
  220. package/esm/models/operations/listproviders.d.ts +16 -3
  221. package/esm/models/operations/listproviders.js +2 -2
  222. package/esm/models/operations/sendchatcompletionrequest.d.ts +16 -3
  223. package/esm/models/operations/sendchatcompletionrequest.js +2 -2
  224. package/esm/models/operations/updateguardrail.d.ts +25 -3
  225. package/esm/models/operations/updateguardrail.js +6 -2
  226. package/esm/models/operations/updatekeys.d.ts +16 -3
  227. package/esm/models/operations/updatekeys.js +2 -2
  228. package/esm/models/outputmessage.d.ts +23 -0
  229. package/esm/models/outputmessage.js +24 -0
  230. package/esm/models/outputmodality.d.ts +1 -0
  231. package/esm/models/outputmodality.js +1 -0
  232. package/esm/models/providername.d.ts +1 -0
  233. package/esm/models/providername.js +1 -0
  234. package/esm/models/providerpreferences.d.ts +4 -0
  235. package/esm/models/providerpreferences.js +4 -0
  236. package/esm/models/providersort.d.ts +1 -0
  237. package/esm/models/providersort.js +1 -0
  238. package/esm/models/providersortconfig.d.ts +1 -0
  239. package/esm/models/providersortconfig.js +1 -0
  240. package/esm/models/responseoutputtext.d.ts +8 -8
  241. package/esm/models/responseoutputtext.js +10 -9
  242. package/esm/models/responsesoutputitem.d.ts +2 -13
  243. package/esm/models/responsesoutputitem.js +8 -6
  244. package/esm/models/responsesoutputitemreasoning.d.ts +2 -31
  245. package/esm/models/responsesoutputitemreasoning.js +2 -44
  246. package/esm/models/responsesoutputmessage.d.ts +24 -32
  247. package/esm/models/responsesoutputmessage.js +26 -47
  248. package/esm/models/responsesservertooloutput.d.ts +42 -0
  249. package/esm/models/responsesservertooloutput.js +44 -0
  250. package/esm/models/responseswebsearchcalloutput.d.ts +90 -5
  251. package/esm/models/responseswebsearchcalloutput.js +113 -5
  252. package/esm/models/responseswebsearchservertool.d.ts +35 -0
  253. package/esm/models/responseswebsearchservertool.js +28 -0
  254. package/esm/models/tooldefinitionjson.d.ts +38 -20
  255. package/esm/models/tooldefinitionjson.js +22 -11
  256. package/esm/models/websearchengine.d.ts +2 -0
  257. package/esm/models/websearchengine.js +2 -0
  258. package/esm/models/websearchservertool.d.ts +116 -0
  259. package/esm/models/websearchservertool.js +77 -0
  260. package/esm/models/websearchshorthand.d.ts +215 -0
  261. package/esm/models/websearchshorthand.js +138 -0
  262. package/esm/sdk/sdk.d.ts +4 -1
  263. package/esm/sdk/sdk.js +0 -1
  264. package/esm/types/index.d.ts +0 -2
  265. package/esm/types/index.js +0 -1
  266. package/jsr.json +1 -1
  267. package/package.json +11 -6
  268. package/turbo.json +10 -0
  269. package/esm/models/openresponsesinput.d.ts +0 -28
  270. package/esm/models/openresponsesinput.js +0 -54
  271. package/esm/models/openresponseslogprobs.d.ts +0 -16
  272. package/esm/models/openresponseslogprobs.js +0 -22
  273. package/esm/models/openresponsestoplogprobs.d.ts +0 -14
  274. package/esm/models/openresponsestoplogprobs.js +0 -15
package/FUNCTIONS.md CHANGED
@@ -26,7 +26,8 @@ import { betaResponsesSend } from "@openrouter/sdk/funcs/betaResponsesSend.js";
26
26
  // You can create one instance of it to use across an application.
27
27
  const openRouter = new OpenRouterCore({
28
28
  httpReferer: "<value>",
29
- xTitle: "<value>",
29
+ appTitle: "<value>",
30
+ appCategories: "<value>",
30
31
  apiKey: process.env["OPENROUTER_API_KEY"] ?? "",
31
32
  });
32
33
 
@@ -49,5 +49,9 @@
49
49
  {
50
50
  "name": "publish_terraform",
51
51
  "language": "terraform"
52
+ },
53
+ {
54
+ "name": "publish_cli",
55
+ "language": "cli"
52
56
  }
53
57
  ]
@@ -34,7 +34,8 @@ async function $do(client, request, options) {
34
34
  const headers = new Headers(compactMap({
35
35
  Accept: "application/json",
36
36
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload?.["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
37
- "X-Title": encodeSimple("X-Title", payload?.["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
37
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload?.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
38
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload?.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
38
39
  }));
39
40
  const secConfig = await extractSecurity(client._options.apiKey);
40
41
  const securityInput = secConfig == null ? {} : { apiKey: secConfig };
@@ -32,7 +32,8 @@ async function $do(client, request, options) {
32
32
  "Content-Type": "application/json",
33
33
  Accept: "application/json",
34
34
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
35
- "X-Title": encodeSimple("X-Title", payload["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
35
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
36
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
36
37
  }));
37
38
  const secConfig = await extractSecurity(client._options.apiKey);
38
39
  const securityInput = secConfig == null ? {} : { apiKey: secConfig };
@@ -37,7 +37,8 @@ async function $do(client, request, options) {
37
37
  const headers = new Headers(compactMap({
38
38
  Accept: "application/json",
39
39
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
40
- "X-Title": encodeSimple("X-Title", payload["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
40
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
41
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
41
42
  }));
42
43
  const secConfig = await extractSecurity(client._options.apiKey);
43
44
  const securityInput = secConfig == null ? {} : { apiKey: secConfig };
@@ -37,7 +37,8 @@ async function $do(client, request, options) {
37
37
  const headers = new Headers(compactMap({
38
38
  Accept: "application/json",
39
39
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
40
- "X-Title": encodeSimple("X-Title", payload["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
40
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
41
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
41
42
  }));
42
43
  const secConfig = await extractSecurity(client._options.apiKey);
43
44
  const securityInput = secConfig == null ? {} : { apiKey: secConfig };
@@ -31,7 +31,8 @@ async function $do(client, request, options) {
31
31
  const headers = new Headers(compactMap({
32
32
  Accept: "application/json",
33
33
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload?.["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
34
- "X-Title": encodeSimple("X-Title", payload?.["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
34
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload?.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
35
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload?.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
35
36
  }));
36
37
  const secConfig = await extractSecurity(client._options.apiKey);
37
38
  const securityInput = secConfig == null ? {} : { apiKey: secConfig };
@@ -35,7 +35,8 @@ async function $do(client, request, options) {
35
35
  const headers = new Headers(compactMap({
36
36
  Accept: "application/json",
37
37
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload?.["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
38
- "X-Title": encodeSimple("X-Title", payload?.["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
38
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload?.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
39
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload?.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
39
40
  }));
40
41
  const secConfig = await extractSecurity(client._options.apiKey);
41
42
  const securityInput = secConfig == null ? {} : { apiKey: secConfig };
@@ -38,7 +38,8 @@ async function $do(client, request, options) {
38
38
  "Content-Type": "application/json",
39
39
  Accept: "application/json",
40
40
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
41
- "X-Title": encodeSimple("X-Title", payload["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
41
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
42
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
42
43
  }));
43
44
  const secConfig = await extractSecurity(client._options.apiKey);
44
45
  const securityInput = secConfig == null ? {} : { apiKey: secConfig };
@@ -30,7 +30,8 @@ async function $do(client, request, options) {
30
30
  ? "text/event-stream"
31
31
  : "application/json",
32
32
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
33
- "X-Title": encodeSimple("X-Title", payload["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
33
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
34
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
34
35
  }));
35
36
  const secConfig = await extractSecurity(client._options.apiKey);
36
37
  const securityInput = secConfig == null ? {} : { apiKey: secConfig };
@@ -1,3 +1,4 @@
1
+ import type { $ZodObject, $ZodShape, infer as zodInfer } from 'zod/v4/core';
1
2
  import type { OpenRouterCore } from '../core.js';
2
3
  import type { CallModelInput } from '../lib/async-params.js';
3
4
  import type { RequestOptions } from '../lib/sdks.js';
@@ -23,61 +24,30 @@ export type { CallModelInput } from '../lib/async-params.js';
23
24
  *
24
25
  * All consumption patterns can be used concurrently on the same response.
25
26
  *
26
- * For message format conversion, use the helper functions:
27
- * - `fromChatMessages()` / `toChatMessage()` for OpenAI chat format
28
- * - `fromClaudeMessages()` / `toClaudeMessage()` for Anthropic Claude format
27
+ * **Context:**
29
28
  *
30
- * **Async Function Support:**
31
- *
32
- * Any field in CallModelInput can be a function that computes the value dynamically
33
- * based on the conversation context. You can mix static values and functions in the
34
- * same request. Functions are resolved before EVERY turn, allowing parameters to
35
- * adapt as the conversation progresses.
36
- *
37
- * @example
38
- * ```typescript
39
- * // Mix static and dynamic values
40
- * const result = callModel(client, {
41
- * model: 'gpt-4', // static
42
- * temperature: (ctx) => Math.min(ctx.numberOfTurns * 0.2, 1.0), // dynamic
43
- * input: [{ type: 'text', text: 'Hello' }], // static
44
- * });
45
- * ```
46
- *
47
- * @example
48
- * ```typescript
49
- * // Switch models based on conversation length
50
- * const result = callModel(client, {
51
- * model: (ctx) => ctx.numberOfTurns > 3 ? 'gpt-4' : 'gpt-3.5-turbo',
52
- * input: [{ type: 'text', text: 'Complex question' }],
53
- * });
54
- * ```
29
+ * Tools can declare a `contextSchema` to receive typed context data.
30
+ * The `context` parameter on callModel is typed as the intersection of all tool schemas:
55
31
  *
56
32
  * @example
57
33
  * ```typescript
58
- * // Use async functions to fetch dynamic values
59
34
  * const result = callModel(client, {
60
35
  * model: 'gpt-4',
61
- * instructions: async (ctx) => {
62
- * const userPrefs = await fetchUserPreferences();
63
- * return `You are a helpful assistant. User preferences: ${userPrefs}`;
36
+ * input: 'Hello',
37
+ * tools: [weatherTool, dbTool] as const,
38
+ * context: {
39
+ * get_weather: { apiKey: 'sk-...' },
40
+ * db_query: { dbUrl: 'postgres://...' },
64
41
  * },
65
- * input: [{ type: 'text', text: 'Help me' }],
66
42
  * });
67
43
  * ```
68
44
  *
69
- * Async functions receive `TurnContext` with:
70
- * - `numberOfTurns`: Current turn number (0-indexed, 0 = initial request)
71
- * - `messageHistory`: Current conversation messages
72
- * - `model`: Current model selection (if set)
73
- * - `models`: Current models array (if set)
74
- *
75
- * **Execution Order:**
76
- * Functions are resolved at the START of each turn in this order:
77
- * 1. Async functions (parallel resolution)
78
- * 2. Tool execution (if tools called by model)
79
- * 3. nextTurnParams functions (if defined on tools)
80
- * 4. API request with resolved values
45
+ * Context can also be a function or async function:
46
+ * ```typescript
47
+ * context: (turn) => ({
48
+ * get_weather: { apiKey: turn.numberOfTurns > 1 ? refreshedKey : initialKey },
49
+ * })
50
+ * ```
81
51
  *
82
52
  * **Stop Conditions:**
83
53
  *
@@ -85,34 +55,13 @@ export type { CallModelInput } from '../lib/async-params.js';
85
55
  *
86
56
  * @example
87
57
  * ```typescript
88
- * // Stop after 3 steps
89
58
  * stopWhen: stepCountIs(3)
90
- *
91
- * // Stop when a specific tool is called
92
- * stopWhen: hasToolCall('finalizeResults')
93
- *
94
- * // Multiple conditions (OR logic - stops if ANY is true)
95
- * stopWhen: [
96
- * stepCountIs(10), // Safety: max 10 steps
97
- * maxCost(0.50), // Budget: max $0.50
98
- * hasToolCall('finalize') // Logic: stop when finalize called
99
- * ]
100
- *
101
- * // Custom condition with full step history
102
- * stopWhen: ({ steps }) => {
103
- * const totalCalls = steps.reduce((sum, s) => sum + s.toolCalls.length, 0);
104
- * return totalCalls >= 20; // Stop after 20 total tool calls
105
- * }
59
+ * stopWhen: [stepCountIs(10), maxCost(0.50), hasToolCall('finalize')]
106
60
  * ```
107
61
  *
108
- * Available helper functions:
109
- * - `stepCountIs(n)` - Stop after n steps
110
- * - `hasToolCall(name)` - Stop when tool is called
111
- * - `maxTokensUsed(n)` - Stop when token usage exceeds n
112
- * - `maxCost(n)` - Stop when cost exceeds n dollars
113
- * - `finishReasonIs(reason)` - Stop on specific finish reason
114
- *
115
62
  * Default: `stepCountIs(5)` if not specified
116
63
  */
117
- export declare function callModel<TTools extends readonly Tool[]>(client: OpenRouterCore, request: CallModelInput<TTools>, options?: RequestOptions): ModelResult<TTools>;
64
+ export declare function callModel<TTools extends readonly Tool[], TSharedSchema extends $ZodObject<$ZodShape> | undefined = undefined, TShared extends Record<string, unknown> = TSharedSchema extends $ZodObject<$ZodShape> ? zodInfer<TSharedSchema> : Record<string, never>>(client: OpenRouterCore, request: CallModelInput<TTools, TShared> & {
65
+ sharedContextSchema?: TSharedSchema;
66
+ }, options?: RequestOptions): ModelResult<TTools, TShared>;
118
67
  //# sourceMappingURL=call-model.d.ts.map
@@ -19,61 +19,30 @@ import { convertToolsToAPIFormat } from '../lib/tool-executor.js';
19
19
  *
20
20
  * All consumption patterns can be used concurrently on the same response.
21
21
  *
22
- * For message format conversion, use the helper functions:
23
- * - `fromChatMessages()` / `toChatMessage()` for OpenAI chat format
24
- * - `fromClaudeMessages()` / `toClaudeMessage()` for Anthropic Claude format
22
+ * **Context:**
25
23
  *
26
- * **Async Function Support:**
27
- *
28
- * Any field in CallModelInput can be a function that computes the value dynamically
29
- * based on the conversation context. You can mix static values and functions in the
30
- * same request. Functions are resolved before EVERY turn, allowing parameters to
31
- * adapt as the conversation progresses.
24
+ * Tools can declare a `contextSchema` to receive typed context data.
25
+ * The `context` parameter on callModel is typed as the intersection of all tool schemas:
32
26
  *
33
27
  * @example
34
28
  * ```typescript
35
- * // Mix static and dynamic values
36
- * const result = callModel(client, {
37
- * model: 'gpt-4', // static
38
- * temperature: (ctx) => Math.min(ctx.numberOfTurns * 0.2, 1.0), // dynamic
39
- * input: [{ type: 'text', text: 'Hello' }], // static
40
- * });
41
- * ```
42
- *
43
- * @example
44
- * ```typescript
45
- * // Switch models based on conversation length
46
- * const result = callModel(client, {
47
- * model: (ctx) => ctx.numberOfTurns > 3 ? 'gpt-4' : 'gpt-3.5-turbo',
48
- * input: [{ type: 'text', text: 'Complex question' }],
49
- * });
50
- * ```
51
- *
52
- * @example
53
- * ```typescript
54
- * // Use async functions to fetch dynamic values
55
29
  * const result = callModel(client, {
56
30
  * model: 'gpt-4',
57
- * instructions: async (ctx) => {
58
- * const userPrefs = await fetchUserPreferences();
59
- * return `You are a helpful assistant. User preferences: ${userPrefs}`;
31
+ * input: 'Hello',
32
+ * tools: [weatherTool, dbTool] as const,
33
+ * context: {
34
+ * get_weather: { apiKey: 'sk-...' },
35
+ * db_query: { dbUrl: 'postgres://...' },
60
36
  * },
61
- * input: [{ type: 'text', text: 'Help me' }],
62
37
  * });
63
38
  * ```
64
39
  *
65
- * Async functions receive `TurnContext` with:
66
- * - `numberOfTurns`: Current turn number (0-indexed, 0 = initial request)
67
- * - `messageHistory`: Current conversation messages
68
- * - `model`: Current model selection (if set)
69
- * - `models`: Current models array (if set)
70
- *
71
- * **Execution Order:**
72
- * Functions are resolved at the START of each turn in this order:
73
- * 1. Async functions (parallel resolution)
74
- * 2. Tool execution (if tools called by model)
75
- * 3. nextTurnParams functions (if defined on tools)
76
- * 4. API request with resolved values
40
+ * Context can also be a function or async function:
41
+ * ```typescript
42
+ * context: (turn) => ({
43
+ * get_weather: { apiKey: turn.numberOfTurns > 1 ? refreshedKey : initialKey },
44
+ * })
45
+ * ```
77
46
  *
78
47
  * **Stop Conditions:**
79
48
  *
@@ -81,38 +50,15 @@ import { convertToolsToAPIFormat } from '../lib/tool-executor.js';
81
50
  *
82
51
  * @example
83
52
  * ```typescript
84
- * // Stop after 3 steps
85
53
  * stopWhen: stepCountIs(3)
86
- *
87
- * // Stop when a specific tool is called
88
- * stopWhen: hasToolCall('finalizeResults')
89
- *
90
- * // Multiple conditions (OR logic - stops if ANY is true)
91
- * stopWhen: [
92
- * stepCountIs(10), // Safety: max 10 steps
93
- * maxCost(0.50), // Budget: max $0.50
94
- * hasToolCall('finalize') // Logic: stop when finalize called
95
- * ]
96
- *
97
- * // Custom condition with full step history
98
- * stopWhen: ({ steps }) => {
99
- * const totalCalls = steps.reduce((sum, s) => sum + s.toolCalls.length, 0);
100
- * return totalCalls >= 20; // Stop after 20 total tool calls
101
- * }
54
+ * stopWhen: [stepCountIs(10), maxCost(0.50), hasToolCall('finalize')]
102
55
  * ```
103
56
  *
104
- * Available helper functions:
105
- * - `stepCountIs(n)` - Stop after n steps
106
- * - `hasToolCall(name)` - Stop when tool is called
107
- * - `maxTokensUsed(n)` - Stop when token usage exceeds n
108
- * - `maxCost(n)` - Stop when cost exceeds n dollars
109
- * - `finishReasonIs(reason)` - Stop on specific finish reason
110
- *
111
57
  * Default: `stepCountIs(5)` if not specified
112
58
  */
113
59
  export function callModel(client, request, options) {
114
60
  // Destructure state management options along with tools and stopWhen
115
- const { tools, stopWhen, state, requireApproval, approveToolCalls, rejectToolCalls, ...apiRequest } = request;
61
+ const { tools, stopWhen, state, requireApproval, approveToolCalls, rejectToolCalls, context, sharedContextSchema, onTurnStart, onTurnEnd, ...apiRequest } = request;
116
62
  // Convert tools to API format - no cast needed now that convertToolsToAPIFormat accepts readonly
117
63
  const apiTools = tools ? convertToolsToAPIFormat(tools) : undefined;
118
64
  // Build the request with converted tools
@@ -124,10 +70,18 @@ export function callModel(client, request, options) {
124
70
  if (apiTools !== undefined) {
125
71
  finalRequest['tools'] = apiTools;
126
72
  }
73
+ // Inject x-openrouter-callmodel header into every callModel request
74
+ const callModelOptions = {
75
+ ...options,
76
+ headers: {
77
+ ...Object.fromEntries(new Headers(options?.headers ?? options?.fetchOptions?.headers ?? undefined)),
78
+ 'x-openrouter-callmodel': 'true',
79
+ },
80
+ };
127
81
  return new ModelResult({
128
82
  client,
129
83
  request: finalRequest,
130
- options: options ?? {},
84
+ options: callModelOptions,
131
85
  tools,
132
86
  ...(stopWhen !== undefined && { stopWhen }),
133
87
  // Pass state management options
@@ -135,6 +89,10 @@ export function callModel(client, request, options) {
135
89
  ...(requireApproval !== undefined && { requireApproval }),
136
90
  ...(approveToolCalls !== undefined && { approveToolCalls }),
137
91
  ...(rejectToolCalls !== undefined && { rejectToolCalls }),
92
+ ...(context !== undefined && { context }),
93
+ ...(sharedContextSchema !== undefined && { sharedContextSchema }),
94
+ ...(onTurnStart !== undefined && { onTurnStart }),
95
+ ...(onTurnEnd !== undefined && { onTurnEnd }),
138
96
  });
139
97
  }
140
98
  //# sourceMappingURL=call-model.js.map
@@ -30,7 +30,8 @@ async function $do(client, request, options) {
30
30
  ? "text/event-stream"
31
31
  : "application/json",
32
32
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
33
- "X-Title": encodeSimple("X-Title", payload["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
33
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
34
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
34
35
  }));
35
36
  const secConfig = await extractSecurity(client._options.apiKey);
36
37
  const securityInput = secConfig == null ? {} : { apiKey: secConfig };
@@ -34,7 +34,8 @@ async function $do(client, security, request, options) {
34
34
  "Content-Type": "application/json",
35
35
  Accept: "application/json",
36
36
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
37
- "X-Title": encodeSimple("X-Title", payload["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
37
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
38
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
38
39
  }));
39
40
  const requestSecurity = resolveSecurity([
40
41
  {
@@ -31,7 +31,8 @@ async function $do(client, request, options) {
31
31
  const headers = new Headers(compactMap({
32
32
  Accept: "application/json",
33
33
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload?.["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
34
- "X-Title": encodeSimple("X-Title", payload?.["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
34
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload?.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
35
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload?.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
35
36
  }));
36
37
  const secConfig = await extractSecurity(client._options.apiKey);
37
38
  const securityInput = secConfig == null ? {} : { apiKey: secConfig };
@@ -32,7 +32,8 @@ async function $do(client, request, options) {
32
32
  "Content-Type": "application/json",
33
33
  Accept: "application/json;q=1, text/event-stream;q=0",
34
34
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
35
- "X-Title": encodeSimple("X-Title", payload["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
35
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
36
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
36
37
  }));
37
38
  const secConfig = await extractSecurity(client._options.apiKey);
38
39
  const securityInput = secConfig == null ? {} : { apiKey: secConfig };
@@ -32,7 +32,8 @@ async function $do(client, request, options) {
32
32
  const headers = new Headers(compactMap({
33
33
  Accept: "application/json",
34
34
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload?.["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
35
- "X-Title": encodeSimple("X-Title", payload?.["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
35
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload?.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
36
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload?.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
36
37
  }));
37
38
  const secConfig = await extractSecurity(client._options.apiKey);
38
39
  const securityInput = secConfig == null ? {} : { apiKey: secConfig };
@@ -38,7 +38,8 @@ async function $do(client, request, options) {
38
38
  const headers = new Headers(compactMap({
39
39
  Accept: "application/json",
40
40
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
41
- "X-Title": encodeSimple("X-Title", payload["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
41
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
42
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
42
43
  }));
43
44
  const secConfig = await extractSecurity(client._options.apiKey);
44
45
  const securityInput = secConfig == null ? {} : { apiKey: secConfig };
@@ -28,7 +28,8 @@ async function $do(client, request, options) {
28
28
  const headers = new Headers(compactMap({
29
29
  Accept: "application/json",
30
30
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload?.["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
31
- "X-Title": encodeSimple("X-Title", payload?.["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
31
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload?.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
32
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload?.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
32
33
  }));
33
34
  const secConfig = await extractSecurity(client._options.apiKey);
34
35
  const securityInput = secConfig == null ? {} : { apiKey: secConfig };
@@ -31,7 +31,8 @@ async function $do(client, request, options) {
31
31
  const headers = new Headers(compactMap({
32
32
  Accept: "application/json",
33
33
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
34
- "X-Title": encodeSimple("X-Title", payload["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
34
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
35
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
35
36
  }));
36
37
  const secConfig = await extractSecurity(client._options.apiKey);
37
38
  const securityInput = secConfig == null ? {} : { apiKey: secConfig };
@@ -38,7 +38,8 @@ async function $do(client, request, options) {
38
38
  "Content-Type": "application/json",
39
39
  Accept: "application/json",
40
40
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
41
- "X-Title": encodeSimple("X-Title", payload["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
41
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
42
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
42
43
  }));
43
44
  const secConfig = await extractSecurity(client._options.apiKey);
44
45
  const securityInput = secConfig == null ? {} : { apiKey: secConfig };
@@ -38,7 +38,8 @@ async function $do(client, request, options) {
38
38
  "Content-Type": "application/json",
39
39
  Accept: "application/json",
40
40
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
41
- "X-Title": encodeSimple("X-Title", payload["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
41
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
42
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
42
43
  }));
43
44
  const secConfig = await extractSecurity(client._options.apiKey);
44
45
  const securityInput = secConfig == null ? {} : { apiKey: secConfig };
@@ -38,7 +38,8 @@ async function $do(client, request, options) {
38
38
  "Content-Type": "application/json",
39
39
  Accept: "application/json",
40
40
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
41
- "X-Title": encodeSimple("X-Title", payload["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
41
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
42
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
42
43
  }));
43
44
  const secConfig = await extractSecurity(client._options.apiKey);
44
45
  const securityInput = secConfig == null ? {} : { apiKey: secConfig };
@@ -38,7 +38,8 @@ async function $do(client, request, options) {
38
38
  "Content-Type": "application/json",
39
39
  Accept: "application/json",
40
40
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
41
- "X-Title": encodeSimple("X-Title", payload["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
41
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
42
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
42
43
  }));
43
44
  const secConfig = await extractSecurity(client._options.apiKey);
44
45
  const securityInput = secConfig == null ? {} : { apiKey: secConfig };
@@ -32,7 +32,8 @@ async function $do(client, request, options) {
32
32
  "Content-Type": "application/json",
33
33
  Accept: "application/json",
34
34
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
35
- "X-Title": encodeSimple("X-Title", payload["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
35
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
36
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
36
37
  }));
37
38
  const secConfig = await extractSecurity(client._options.apiKey);
38
39
  const securityInput = secConfig == null ? {} : { apiKey: secConfig };
@@ -37,7 +37,8 @@ async function $do(client, request, options) {
37
37
  const headers = new Headers(compactMap({
38
38
  Accept: "application/json",
39
39
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
40
- "X-Title": encodeSimple("X-Title", payload["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
40
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
41
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
41
42
  }));
42
43
  const secConfig = await extractSecurity(client._options.apiKey);
43
44
  const securityInput = secConfig == null ? {} : { apiKey: secConfig };
@@ -37,7 +37,8 @@ async function $do(client, request, options) {
37
37
  const headers = new Headers(compactMap({
38
38
  Accept: "application/json",
39
39
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
40
- "X-Title": encodeSimple("X-Title", payload["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
40
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
41
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
41
42
  }));
42
43
  const secConfig = await extractSecurity(client._options.apiKey);
43
44
  const securityInput = secConfig == null ? {} : { apiKey: secConfig };
@@ -35,7 +35,8 @@ async function $do(client, request, options) {
35
35
  const headers = new Headers(compactMap({
36
36
  Accept: "application/json",
37
37
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload?.["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
38
- "X-Title": encodeSimple("X-Title", payload?.["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
38
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload?.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
39
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload?.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
39
40
  }));
40
41
  const secConfig = await extractSecurity(client._options.apiKey);
41
42
  const securityInput = secConfig == null ? {} : { apiKey: secConfig };
@@ -41,7 +41,8 @@ async function $do(client, request, options) {
41
41
  const headers = new Headers(compactMap({
42
42
  Accept: "application/json",
43
43
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
44
- "X-Title": encodeSimple("X-Title", payload["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
44
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
45
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
45
46
  }));
46
47
  const secConfig = await extractSecurity(client._options.apiKey);
47
48
  const securityInput = secConfig == null ? {} : { apiKey: secConfig };
@@ -41,7 +41,8 @@ async function $do(client, request, options) {
41
41
  const headers = new Headers(compactMap({
42
42
  Accept: "application/json",
43
43
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
44
- "X-Title": encodeSimple("X-Title", payload["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
44
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
45
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
45
46
  }));
46
47
  const secConfig = await extractSecurity(client._options.apiKey);
47
48
  const securityInput = secConfig == null ? {} : { apiKey: secConfig };
@@ -35,7 +35,8 @@ async function $do(client, request, options) {
35
35
  const headers = new Headers(compactMap({
36
36
  Accept: "application/json",
37
37
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload?.["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
38
- "X-Title": encodeSimple("X-Title", payload?.["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
38
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload?.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
39
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload?.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
39
40
  }));
40
41
  const secConfig = await extractSecurity(client._options.apiKey);
41
42
  const securityInput = secConfig == null ? {} : { apiKey: secConfig };
@@ -35,7 +35,8 @@ async function $do(client, request, options) {
35
35
  const headers = new Headers(compactMap({
36
36
  Accept: "application/json",
37
37
  "HTTP-Referer": encodeSimple("HTTP-Referer", payload?.["HTTP-Referer"] ?? client._options.httpReferer, { explode: false, charEncoding: "none" }),
38
- "X-Title": encodeSimple("X-Title", payload?.["X-Title"] ?? client._options.xTitle, { explode: false, charEncoding: "none" }),
38
+ "X-OpenRouter-Categories": encodeSimple("X-OpenRouter-Categories", payload?.appCategories ?? client._options.appCategories, { explode: false, charEncoding: "none" }),
39
+ "X-OpenRouter-Title": encodeSimple("X-OpenRouter-Title", payload?.appTitle ?? client._options.appTitle, { explode: false, charEncoding: "none" }),
39
40
  }));
40
41
  const secConfig = await extractSecurity(client._options.apiKey);
41
42
  const securityInput = secConfig == null ? {} : { apiKey: secConfig };