@caupulican/pi-ai 0.81.39 → 0.81.41

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 (126) hide show
  1. package/dist/env-api-keys.d.ts +5 -0
  2. package/dist/env-api-keys.d.ts.map +1 -1
  3. package/dist/env-api-keys.js +20 -4
  4. package/dist/env-api-keys.js.map +1 -1
  5. package/dist/image-models.generated.d.ts +15 -0
  6. package/dist/image-models.generated.d.ts.map +1 -1
  7. package/dist/image-models.generated.js +15 -0
  8. package/dist/image-models.generated.js.map +1 -1
  9. package/dist/index.d.ts +3 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +3 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/models.d.ts +7 -0
  14. package/dist/models.d.ts.map +1 -1
  15. package/dist/models.generated.d.ts +1847 -423
  16. package/dist/models.generated.d.ts.map +1 -1
  17. package/dist/models.generated.js +1511 -500
  18. package/dist/models.generated.js.map +1 -1
  19. package/dist/models.js +9 -0
  20. package/dist/models.js.map +1 -1
  21. package/dist/providers/amazon-bedrock.d.ts.map +1 -1
  22. package/dist/providers/amazon-bedrock.js +135 -79
  23. package/dist/providers/amazon-bedrock.js.map +1 -1
  24. package/dist/providers/anthropic.d.ts.map +1 -1
  25. package/dist/providers/anthropic.js +79 -42
  26. package/dist/providers/anthropic.js.map +1 -1
  27. package/dist/providers/azure-openai-responses.d.ts.map +1 -1
  28. package/dist/providers/azure-openai-responses.js +13 -6
  29. package/dist/providers/azure-openai-responses.js.map +1 -1
  30. package/dist/providers/bedrock-sso.d.ts +6 -0
  31. package/dist/providers/bedrock-sso.d.ts.map +1 -0
  32. package/dist/providers/bedrock-sso.js +39 -0
  33. package/dist/providers/bedrock-sso.js.map +1 -0
  34. package/dist/providers/faux.d.ts +1 -0
  35. package/dist/providers/faux.d.ts.map +1 -1
  36. package/dist/providers/faux.js +1 -0
  37. package/dist/providers/faux.js.map +1 -1
  38. package/dist/providers/images/openrouter.d.ts.map +1 -1
  39. package/dist/providers/images/openrouter.js +8 -3
  40. package/dist/providers/images/openrouter.js.map +1 -1
  41. package/dist/providers/mistral.d.ts.map +1 -1
  42. package/dist/providers/mistral.js +20 -15
  43. package/dist/providers/mistral.js.map +1 -1
  44. package/dist/providers/openai-codex-account.d.ts +32 -0
  45. package/dist/providers/openai-codex-account.d.ts.map +1 -0
  46. package/dist/providers/openai-codex-account.js +157 -0
  47. package/dist/providers/openai-codex-account.js.map +1 -0
  48. package/dist/providers/openai-codex-auth.d.ts +11 -0
  49. package/dist/providers/openai-codex-auth.d.ts.map +1 -0
  50. package/dist/providers/openai-codex-auth.js +43 -0
  51. package/dist/providers/openai-codex-auth.js.map +1 -0
  52. package/dist/providers/openai-codex-responses.d.ts +1 -0
  53. package/dist/providers/openai-codex-responses.d.ts.map +1 -1
  54. package/dist/providers/openai-codex-responses.js +97 -72
  55. package/dist/providers/openai-codex-responses.js.map +1 -1
  56. package/dist/providers/openai-completions.d.ts.map +1 -1
  57. package/dist/providers/openai-completions.js +35 -15
  58. package/dist/providers/openai-completions.js.map +1 -1
  59. package/dist/providers/openai-responses-shared.d.ts +5 -0
  60. package/dist/providers/openai-responses-shared.d.ts.map +1 -1
  61. package/dist/providers/openai-responses-shared.js +42 -5
  62. package/dist/providers/openai-responses-shared.js.map +1 -1
  63. package/dist/providers/openai-responses.d.ts +1 -0
  64. package/dist/providers/openai-responses.d.ts.map +1 -1
  65. package/dist/providers/openai-responses.js +28 -9
  66. package/dist/providers/openai-responses.js.map +1 -1
  67. package/dist/providers/openrouter-cache.d.ts +3 -0
  68. package/dist/providers/openrouter-cache.d.ts.map +1 -0
  69. package/dist/providers/openrouter-cache.js +4 -0
  70. package/dist/providers/openrouter-cache.js.map +1 -0
  71. package/dist/providers/simple-options.d.ts.map +1 -1
  72. package/dist/providers/simple-options.js +2 -0
  73. package/dist/providers/simple-options.js.map +1 -1
  74. package/dist/stream.d.ts.map +1 -1
  75. package/dist/stream.js +12 -4
  76. package/dist/stream.js.map +1 -1
  77. package/dist/types.d.ts +27 -4
  78. package/dist/types.d.ts.map +1 -1
  79. package/dist/types.js.map +1 -1
  80. package/dist/utils/abort-signals.d.ts +1 -0
  81. package/dist/utils/abort-signals.d.ts.map +1 -1
  82. package/dist/utils/abort-signals.js +7 -2
  83. package/dist/utils/abort-signals.js.map +1 -1
  84. package/dist/utils/error-body.d.ts.map +1 -1
  85. package/dist/utils/error-body.js +8 -3
  86. package/dist/utils/error-body.js.map +1 -1
  87. package/dist/utils/oauth/index.d.ts +3 -0
  88. package/dist/utils/oauth/index.d.ts.map +1 -1
  89. package/dist/utils/oauth/index.js +9 -0
  90. package/dist/utils/oauth/index.js.map +1 -1
  91. package/dist/utils/oauth/kimi-coding.d.ts +5 -0
  92. package/dist/utils/oauth/kimi-coding.d.ts.map +1 -0
  93. package/dist/utils/oauth/kimi-coding.js +173 -0
  94. package/dist/utils/oauth/kimi-coding.js.map +1 -0
  95. package/dist/utils/oauth/openai-codex.d.ts.map +1 -1
  96. package/dist/utils/oauth/openai-codex.js +2 -21
  97. package/dist/utils/oauth/openai-codex.js.map +1 -1
  98. package/dist/utils/oauth/openrouter.d.ts +5 -0
  99. package/dist/utils/oauth/openrouter.d.ts.map +1 -0
  100. package/dist/utils/oauth/openrouter.js +197 -0
  101. package/dist/utils/oauth/openrouter.js.map +1 -0
  102. package/dist/utils/oauth/xai.d.ts +6 -0
  103. package/dist/utils/oauth/xai.d.ts.map +1 -0
  104. package/dist/utils/oauth/xai.js +154 -0
  105. package/dist/utils/oauth/xai.js.map +1 -0
  106. package/dist/utils/overflow.d.ts +1 -0
  107. package/dist/utils/overflow.d.ts.map +1 -1
  108. package/dist/utils/overflow.js +3 -0
  109. package/dist/utils/overflow.js.map +1 -1
  110. package/dist/utils/provider-retry.d.ts +11 -0
  111. package/dist/utils/provider-retry.d.ts.map +1 -0
  112. package/dist/utils/provider-retry.js +66 -0
  113. package/dist/utils/provider-retry.js.map +1 -0
  114. package/dist/utils/tool-names.d.ts +6 -1
  115. package/dist/utils/tool-names.d.ts.map +1 -1
  116. package/dist/utils/tool-names.js +22 -9
  117. package/dist/utils/tool-names.js.map +1 -1
  118. package/dist/utils/tool-repair/text-protocol.d.ts +3 -0
  119. package/dist/utils/tool-repair/text-protocol.d.ts.map +1 -1
  120. package/dist/utils/tool-repair/text-protocol.js +10 -0
  121. package/dist/utils/tool-repair/text-protocol.js.map +1 -1
  122. package/dist/utils/uuid.d.ts +3 -0
  123. package/dist/utils/uuid.d.ts.map +1 -0
  124. package/dist/utils/uuid.js +48 -0
  125. package/dist/utils/uuid.js.map +1 -0
  126. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -7,6 +7,7 @@ export * from "./images-api-registry.js";
7
7
  export * from "./models.js";
8
8
  export * from "./providers/faux.js";
9
9
  export * from "./providers/images/register-builtins.js";
10
+ export * from "./providers/openai-codex-account.js";
10
11
  export * from "./providers/register-builtins.js";
11
12
  export * from "./session-resources.js";
12
13
  export * from "./stream.js";
@@ -15,9 +16,11 @@ export * from "./utils/diagnostics.js";
15
16
  export * from "./utils/event-stream.js";
16
17
  export * from "./utils/json-parse.js";
17
18
  export * from "./utils/overflow.js";
19
+ export * from "./utils/provider-retry.js";
18
20
  export * from "./utils/tool-repair/registry.js";
19
21
  export * from "./utils/tool-repair/replay.js";
20
22
  export * from "./utils/tool-repair/text-protocol.js";
21
23
  export * from "./utils/typebox-helpers.js";
24
+ export * from "./utils/uuid.js";
22
25
  export * from "./utils/validation.js";
23
26
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,aAAa,CAAC;AAI5B,cAAc,qBAAqB,CAAC;AAIpC,cAAc,yCAAyC,CAAC;AAQxD,cAAc,kCAAkC,CAAC;AACjD,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AActC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC","sourcesContent":["export type { Static, TSchema } from \"typebox\";\nexport { Type } from \"typebox\";\n\nexport * from \"./api-registry.ts\";\nexport * from \"./env-api-keys.ts\";\nexport * from \"./image-models.ts\";\nexport * from \"./images.ts\";\nexport * from \"./images-api-registry.ts\";\nexport * from \"./models.ts\";\nexport type { BedrockOptions, BedrockThinkingDisplay } from \"./providers/amazon-bedrock.ts\";\nexport type { AnthropicEffort, AnthropicOptions, AnthropicThinkingDisplay } from \"./providers/anthropic.ts\";\nexport type { AzureOpenAIResponsesOptions } from \"./providers/azure-openai-responses.ts\";\nexport * from \"./providers/faux.ts\";\nexport type { GoogleOptions } from \"./providers/google.ts\";\nexport type { GoogleThinkingLevel } from \"./providers/google-shared.ts\";\nexport type { GoogleVertexOptions } from \"./providers/google-vertex.ts\";\nexport * from \"./providers/images/register-builtins.ts\";\nexport type { MistralOptions } from \"./providers/mistral.ts\";\nexport type {\n\tOpenAICodexResponsesOptions,\n\tOpenAICodexWebSocketDebugStats,\n} from \"./providers/openai-codex-responses.ts\";\nexport type { OpenAICompletionsOptions } from \"./providers/openai-completions.ts\";\nexport type { OpenAIResponsesOptions } from \"./providers/openai-responses.ts\";\nexport * from \"./providers/register-builtins.ts\";\nexport * from \"./session-resources.ts\";\nexport * from \"./stream.ts\";\nexport * from \"./types.ts\";\nexport * from \"./utils/diagnostics.ts\";\nexport * from \"./utils/event-stream.ts\";\nexport * from \"./utils/json-parse.ts\";\nexport type {\n\tOAuthAuthInfo,\n\tOAuthCredentials,\n\tOAuthDeviceCodeInfo,\n\tOAuthLoginCallbacks,\n\tOAuthPrompt,\n\tOAuthProvider,\n\tOAuthProviderId,\n\tOAuthProviderInfo,\n\tOAuthProviderInterface,\n\tOAuthSelectOption,\n\tOAuthSelectPrompt,\n} from \"./utils/oauth/types.ts\";\nexport * from \"./utils/overflow.ts\";\nexport * from \"./utils/tool-repair/registry.ts\";\nexport * from \"./utils/tool-repair/replay.ts\";\nexport * from \"./utils/tool-repair/text-protocol.ts\";\nexport * from \"./utils/typebox-helpers.ts\";\nexport * from \"./utils/validation.ts\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,aAAa,CAAC;AAI5B,cAAc,qBAAqB,CAAC;AAIpC,cAAc,yCAAyC,CAAC;AAExD,cAAc,qCAAqC,CAAC;AAOpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AActC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC","sourcesContent":["export type { Static, TSchema } from \"typebox\";\nexport { Type } from \"typebox\";\n\nexport * from \"./api-registry.ts\";\nexport * from \"./env-api-keys.ts\";\nexport * from \"./image-models.ts\";\nexport * from \"./images.ts\";\nexport * from \"./images-api-registry.ts\";\nexport * from \"./models.ts\";\nexport type { BedrockOptions, BedrockThinkingDisplay } from \"./providers/amazon-bedrock.ts\";\nexport type { AnthropicEffort, AnthropicOptions, AnthropicThinkingDisplay } from \"./providers/anthropic.ts\";\nexport type { AzureOpenAIResponsesOptions } from \"./providers/azure-openai-responses.ts\";\nexport * from \"./providers/faux.ts\";\nexport type { GoogleOptions } from \"./providers/google.ts\";\nexport type { GoogleThinkingLevel } from \"./providers/google-shared.ts\";\nexport type { GoogleVertexOptions } from \"./providers/google-vertex.ts\";\nexport * from \"./providers/images/register-builtins.ts\";\nexport type { MistralOptions } from \"./providers/mistral.ts\";\nexport * from \"./providers/openai-codex-account.ts\";\nexport type {\n\tOpenAICodexResponsesOptions,\n\tOpenAICodexWebSocketDebugStats,\n} from \"./providers/openai-codex-responses.ts\";\nexport type { OpenAICompletionsOptions } from \"./providers/openai-completions.ts\";\nexport type { OpenAIResponsesOptions } from \"./providers/openai-responses.ts\";\nexport * from \"./providers/register-builtins.ts\";\nexport * from \"./session-resources.ts\";\nexport * from \"./stream.ts\";\nexport * from \"./types.ts\";\nexport * from \"./utils/diagnostics.ts\";\nexport * from \"./utils/event-stream.ts\";\nexport * from \"./utils/json-parse.ts\";\nexport type {\n\tOAuthAuthInfo,\n\tOAuthCredentials,\n\tOAuthDeviceCodeInfo,\n\tOAuthLoginCallbacks,\n\tOAuthPrompt,\n\tOAuthProvider,\n\tOAuthProviderId,\n\tOAuthProviderInfo,\n\tOAuthProviderInterface,\n\tOAuthSelectOption,\n\tOAuthSelectPrompt,\n} from \"./utils/oauth/types.ts\";\nexport * from \"./utils/overflow.ts\";\nexport * from \"./utils/provider-retry.ts\";\nexport * from \"./utils/tool-repair/registry.ts\";\nexport * from \"./utils/tool-repair/replay.ts\";\nexport * from \"./utils/tool-repair/text-protocol.ts\";\nexport * from \"./utils/typebox-helpers.ts\";\nexport * from \"./utils/uuid.ts\";\nexport * from \"./utils/validation.ts\";\n"]}
package/dist/models.d.ts CHANGED
@@ -11,6 +11,13 @@ export declare function calculateCost<TApi extends Api>(model: Model<TApi>, usag
11
11
  }): Usage["cost"];
12
12
  export declare function getSupportedThinkingLevels<TApi extends Api>(model: Model<TApi>): ModelThinkingLevel[];
13
13
  export declare function clampThinkingLevel<TApi extends Api>(model: Model<TApi>, level: ModelThinkingLevel): ModelThinkingLevel;
14
+ /**
15
+ * Resolve the effective thinking level for a model through one provider-neutral contract.
16
+ * Explicit caller intent wins, then model metadata, then the caller's harness fallback. The
17
+ * selected level is always clamped to the model's advertised capabilities before it leaves this
18
+ * function, so non-reasoning models cannot carry a transient reasoning level.
19
+ */
20
+ export declare function resolveModelThinkingLevel<TApi extends Api>(model: Model<TApi>, requestedLevel: ModelThinkingLevel | undefined, fallbackLevel?: ModelThinkingLevel): ModelThinkingLevel;
14
21
  /**
15
22
  * Check if two models are equal by comparing both their id and provider.
16
23
  * Returns false if either model is null or undefined.
@@ -1 +1 @@
1
- {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAavF,KAAK,QAAQ,CACZ,SAAS,SAAS,aAAa,EAC/B,QAAQ,SAAS,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC,SAAS,CAAC,IAC9C,CAAC,OAAO,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,SAAS;IAAE,GAAG,EAAE,MAAM,IAAI,CAAA;CAAE,GAAG,CAAC,IAAI,SAAS,GAAG,GAAG,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;AAEjH,wBAAgB,QAAQ,CAAC,SAAS,SAAS,aAAa,EAAE,QAAQ,SAAS,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC,SAAS,CAAC,EAC1G,QAAQ,EAAE,SAAS,EACnB,OAAO,EAAE,QAAQ,GACf,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAGtC;AAED,wBAAgB,YAAY,IAAI,aAAa,EAAE,CAE9C;AAED,wBAAgB,SAAS,CAAC,SAAS,SAAS,aAAa,EACxD,QAAQ,EAAE,SAAS,GACjB,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAGhE;AAED,wBAAgB,aAAa,CAAC,IAAI,SAAS,GAAG,EAC7C,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAClB,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE;IAAE,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC/C,KAAK,CAAC,MAAM,CAAC,CAgBf;AAaD,wBAAgB,0BAA0B,CAAC,IAAI,SAAS,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,kBAAkB,EAAE,CASrG;AAED,wBAAgB,kBAAkB,CAAC,IAAI,SAAS,GAAG,EAClD,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAClB,KAAK,EAAE,kBAAkB,GACvB,kBAAkB,CAgBpB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,SAAS,GAAG,EAC9C,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,EACjC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,GAC/B,OAAO,CAGT","sourcesContent":["import { MODELS } from \"./models.generated.ts\";\nimport type { Api, KnownProvider, Model, ModelThinkingLevel, Usage } from \"./types.ts\";\n\nconst modelRegistry: Map<string, Map<string, Model<Api>>> = new Map();\n\n// Initialize registry from MODELS on module load\nfor (const [provider, models] of Object.entries(MODELS)) {\n\tconst providerModels = new Map<string, Model<Api>>();\n\tfor (const [id, model] of Object.entries(models)) {\n\t\tproviderModels.set(id, model as Model<Api>);\n\t}\n\tmodelRegistry.set(provider, providerModels);\n}\n\ntype ModelApi<\n\tTProvider extends KnownProvider,\n\tTModelId extends keyof (typeof MODELS)[TProvider],\n> = (typeof MODELS)[TProvider][TModelId] extends { api: infer TApi } ? (TApi extends Api ? TApi : never) : never;\n\nexport function getModel<TProvider extends KnownProvider, TModelId extends keyof (typeof MODELS)[TProvider]>(\n\tprovider: TProvider,\n\tmodelId: TModelId,\n): Model<ModelApi<TProvider, TModelId>> {\n\tconst providerModels = modelRegistry.get(provider);\n\treturn providerModels?.get(modelId as string) as Model<ModelApi<TProvider, TModelId>>;\n}\n\nexport function getProviders(): KnownProvider[] {\n\treturn Array.from(modelRegistry.keys()) as KnownProvider[];\n}\n\nexport function getModels<TProvider extends KnownProvider>(\n\tprovider: TProvider,\n): Model<ModelApi<TProvider, keyof (typeof MODELS)[TProvider]>>[] {\n\tconst models = modelRegistry.get(provider);\n\treturn models ? (Array.from(models.values()) as Model<ModelApi<TProvider, keyof (typeof MODELS)[TProvider]>>[]) : [];\n}\n\nexport function calculateCost<TApi extends Api>(\n\tmodel: Model<TApi>,\n\tusage: Usage,\n\toptions: { providerSuppliedTotal?: boolean } = {},\n): Usage[\"cost\"] {\n\tusage.cost.input = (model.cost.input / 1000000) * usage.input;\n\tusage.cost.output = (model.cost.output / 1000000) * usage.output;\n\tusage.cost.cacheRead = (model.cost.cacheRead / 1000000) * usage.cacheRead;\n\tusage.cost.cacheWrite = (model.cost.cacheWrite / 1000000) * usage.cacheWrite;\n\tconst longContextPricing = model.longContextPricing;\n\tif (longContextPricing && usage.input + usage.cacheRead + usage.cacheWrite > longContextPricing.thresholdTokens) {\n\t\tusage.cost.input *= longContextPricing.inputMultiplier;\n\t\tusage.cost.cacheRead *= longContextPricing.inputMultiplier;\n\t\tusage.cost.cacheWrite *= longContextPricing.inputMultiplier;\n\t\tusage.cost.output *= longContextPricing.outputMultiplier;\n\t}\n\tif (!options.providerSuppliedTotal) {\n\t\tusage.cost.total = usage.cost.input + usage.cost.output + usage.cost.cacheRead + usage.cost.cacheWrite;\n\t}\n\treturn usage.cost;\n}\n\nconst EXTENDED_THINKING_LEVELS: ModelThinkingLevel[] = [\n\t\"off\",\n\t\"minimal\",\n\t\"low\",\n\t\"medium\",\n\t\"high\",\n\t\"xhigh\",\n\t\"max\",\n\t\"ultra\",\n];\n\nexport function getSupportedThinkingLevels<TApi extends Api>(model: Model<TApi>): ModelThinkingLevel[] {\n\tif (!model.reasoning) return [\"off\"];\n\n\treturn EXTENDED_THINKING_LEVELS.filter((level) => {\n\t\tconst mapped = model.thinkingLevelMap?.[level];\n\t\tif (mapped === null) return false;\n\t\tif (level === \"xhigh\" || level === \"max\" || level === \"ultra\") return mapped !== undefined;\n\t\treturn true;\n\t});\n}\n\nexport function clampThinkingLevel<TApi extends Api>(\n\tmodel: Model<TApi>,\n\tlevel: ModelThinkingLevel,\n): ModelThinkingLevel {\n\tconst availableLevels = getSupportedThinkingLevels(model);\n\tif (availableLevels.includes(level)) return level;\n\n\tconst requestedIndex = EXTENDED_THINKING_LEVELS.indexOf(level);\n\tif (requestedIndex === -1) return availableLevels[0] ?? \"off\";\n\n\tfor (let i = requestedIndex; i < EXTENDED_THINKING_LEVELS.length; i++) {\n\t\tconst candidate = EXTENDED_THINKING_LEVELS[i];\n\t\tif (availableLevels.includes(candidate)) return candidate;\n\t}\n\tfor (let i = requestedIndex - 1; i >= 0; i--) {\n\t\tconst candidate = EXTENDED_THINKING_LEVELS[i];\n\t\tif (availableLevels.includes(candidate)) return candidate;\n\t}\n\treturn availableLevels[0] ?? \"off\";\n}\n\n/**\n * Check if two models are equal by comparing both their id and provider.\n * Returns false if either model is null or undefined.\n */\nexport function modelsAreEqual<TApi extends Api>(\n\ta: Model<TApi> | null | undefined,\n\tb: Model<TApi> | null | undefined,\n): boolean {\n\tif (!a || !b) return false;\n\treturn a.id === b.id && a.provider === b.provider;\n}\n"]}
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAavF,KAAK,QAAQ,CACZ,SAAS,SAAS,aAAa,EAC/B,QAAQ,SAAS,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC,SAAS,CAAC,IAC9C,CAAC,OAAO,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,SAAS;IAAE,GAAG,EAAE,MAAM,IAAI,CAAA;CAAE,GAAG,CAAC,IAAI,SAAS,GAAG,GAAG,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;AAEjH,wBAAgB,QAAQ,CAAC,SAAS,SAAS,aAAa,EAAE,QAAQ,SAAS,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC,SAAS,CAAC,EAC1G,QAAQ,EAAE,SAAS,EACnB,OAAO,EAAE,QAAQ,GACf,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAGtC;AAED,wBAAgB,YAAY,IAAI,aAAa,EAAE,CAE9C;AAED,wBAAgB,SAAS,CAAC,SAAS,SAAS,aAAa,EACxD,QAAQ,EAAE,SAAS,GACjB,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAGhE;AAED,wBAAgB,aAAa,CAAC,IAAI,SAAS,GAAG,EAC7C,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAClB,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE;IAAE,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC/C,KAAK,CAAC,MAAM,CAAC,CAgBf;AAaD,wBAAgB,0BAA0B,CAAC,IAAI,SAAS,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,kBAAkB,EAAE,CASrG;AAED,wBAAgB,kBAAkB,CAAC,IAAI,SAAS,GAAG,EAClD,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAClB,KAAK,EAAE,kBAAkB,GACvB,kBAAkB,CAgBpB;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,SAAS,GAAG,EACzD,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAClB,cAAc,EAAE,kBAAkB,GAAG,SAAS,EAC9C,aAAa,GAAE,kBAA6B,GAC1C,kBAAkB,CAEpB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,SAAS,GAAG,EAC9C,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,EACjC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,GAC/B,OAAO,CAGT","sourcesContent":["import { MODELS } from \"./models.generated.ts\";\nimport type { Api, KnownProvider, Model, ModelThinkingLevel, Usage } from \"./types.ts\";\n\nconst modelRegistry: Map<string, Map<string, Model<Api>>> = new Map();\n\n// Initialize registry from MODELS on module load\nfor (const [provider, models] of Object.entries(MODELS)) {\n\tconst providerModels = new Map<string, Model<Api>>();\n\tfor (const [id, model] of Object.entries(models)) {\n\t\tproviderModels.set(id, model as Model<Api>);\n\t}\n\tmodelRegistry.set(provider, providerModels);\n}\n\ntype ModelApi<\n\tTProvider extends KnownProvider,\n\tTModelId extends keyof (typeof MODELS)[TProvider],\n> = (typeof MODELS)[TProvider][TModelId] extends { api: infer TApi } ? (TApi extends Api ? TApi : never) : never;\n\nexport function getModel<TProvider extends KnownProvider, TModelId extends keyof (typeof MODELS)[TProvider]>(\n\tprovider: TProvider,\n\tmodelId: TModelId,\n): Model<ModelApi<TProvider, TModelId>> {\n\tconst providerModels = modelRegistry.get(provider);\n\treturn providerModels?.get(modelId as string) as Model<ModelApi<TProvider, TModelId>>;\n}\n\nexport function getProviders(): KnownProvider[] {\n\treturn Array.from(modelRegistry.keys()) as KnownProvider[];\n}\n\nexport function getModels<TProvider extends KnownProvider>(\n\tprovider: TProvider,\n): Model<ModelApi<TProvider, keyof (typeof MODELS)[TProvider]>>[] {\n\tconst models = modelRegistry.get(provider);\n\treturn models ? (Array.from(models.values()) as Model<ModelApi<TProvider, keyof (typeof MODELS)[TProvider]>>[]) : [];\n}\n\nexport function calculateCost<TApi extends Api>(\n\tmodel: Model<TApi>,\n\tusage: Usage,\n\toptions: { providerSuppliedTotal?: boolean } = {},\n): Usage[\"cost\"] {\n\tusage.cost.input = (model.cost.input / 1000000) * usage.input;\n\tusage.cost.output = (model.cost.output / 1000000) * usage.output;\n\tusage.cost.cacheRead = (model.cost.cacheRead / 1000000) * usage.cacheRead;\n\tusage.cost.cacheWrite = (model.cost.cacheWrite / 1000000) * usage.cacheWrite;\n\tconst longContextPricing = model.longContextPricing;\n\tif (longContextPricing && usage.input + usage.cacheRead + usage.cacheWrite > longContextPricing.thresholdTokens) {\n\t\tusage.cost.input *= longContextPricing.inputMultiplier;\n\t\tusage.cost.cacheRead *= longContextPricing.inputMultiplier;\n\t\tusage.cost.cacheWrite *= longContextPricing.inputMultiplier;\n\t\tusage.cost.output *= longContextPricing.outputMultiplier;\n\t}\n\tif (!options.providerSuppliedTotal) {\n\t\tusage.cost.total = usage.cost.input + usage.cost.output + usage.cost.cacheRead + usage.cost.cacheWrite;\n\t}\n\treturn usage.cost;\n}\n\nconst EXTENDED_THINKING_LEVELS: ModelThinkingLevel[] = [\n\t\"off\",\n\t\"minimal\",\n\t\"low\",\n\t\"medium\",\n\t\"high\",\n\t\"xhigh\",\n\t\"max\",\n\t\"ultra\",\n];\n\nexport function getSupportedThinkingLevels<TApi extends Api>(model: Model<TApi>): ModelThinkingLevel[] {\n\tif (!model.reasoning) return [\"off\"];\n\n\treturn EXTENDED_THINKING_LEVELS.filter((level) => {\n\t\tconst mapped = model.thinkingLevelMap?.[level];\n\t\tif (mapped === null) return false;\n\t\tif (level === \"xhigh\" || level === \"max\" || level === \"ultra\") return mapped !== undefined;\n\t\treturn true;\n\t});\n}\n\nexport function clampThinkingLevel<TApi extends Api>(\n\tmodel: Model<TApi>,\n\tlevel: ModelThinkingLevel,\n): ModelThinkingLevel {\n\tconst availableLevels = getSupportedThinkingLevels(model);\n\tif (availableLevels.includes(level)) return level;\n\n\tconst requestedIndex = EXTENDED_THINKING_LEVELS.indexOf(level);\n\tif (requestedIndex === -1) return availableLevels[0] ?? \"off\";\n\n\tfor (let i = requestedIndex; i < EXTENDED_THINKING_LEVELS.length; i++) {\n\t\tconst candidate = EXTENDED_THINKING_LEVELS[i];\n\t\tif (availableLevels.includes(candidate)) return candidate;\n\t}\n\tfor (let i = requestedIndex - 1; i >= 0; i--) {\n\t\tconst candidate = EXTENDED_THINKING_LEVELS[i];\n\t\tif (availableLevels.includes(candidate)) return candidate;\n\t}\n\treturn availableLevels[0] ?? \"off\";\n}\n\n/**\n * Resolve the effective thinking level for a model through one provider-neutral contract.\n * Explicit caller intent wins, then model metadata, then the caller's harness fallback. The\n * selected level is always clamped to the model's advertised capabilities before it leaves this\n * function, so non-reasoning models cannot carry a transient reasoning level.\n */\nexport function resolveModelThinkingLevel<TApi extends Api>(\n\tmodel: Model<TApi>,\n\trequestedLevel: ModelThinkingLevel | undefined,\n\tfallbackLevel: ModelThinkingLevel = \"medium\",\n): ModelThinkingLevel {\n\treturn clampThinkingLevel(model, requestedLevel ?? model.defaultThinkingLevel ?? fallbackLevel);\n}\n\n/**\n * Check if two models are equal by comparing both their id and provider.\n * Returns false if either model is null or undefined.\n */\nexport function modelsAreEqual<TApi extends Api>(\n\ta: Model<TApi> | null | undefined,\n\tb: Model<TApi> | null | undefined,\n): boolean {\n\tif (!a || !b) return false;\n\treturn a.id === b.id && a.provider === b.provider;\n}\n"]}