@bastani/pi-ai 0.9.40 → 0.9.41-alpha.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 (129) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +42 -2
  3. package/dist/api/anthropic-messages.d.ts.map +1 -1
  4. package/dist/api/anthropic-messages.js +7 -10
  5. package/dist/api/anthropic-messages.js.map +1 -1
  6. package/dist/api/azure-openai-responses.js +2 -2
  7. package/dist/api/azure-openai-responses.js.map +1 -1
  8. package/dist/api/bedrock-converse-stream.d.ts.map +1 -1
  9. package/dist/api/bedrock-converse-stream.js +12 -0
  10. package/dist/api/bedrock-converse-stream.js.map +1 -1
  11. package/dist/api/classifier-shared.d.ts.map +1 -1
  12. package/dist/api/classifier-shared.js +4 -3
  13. package/dist/api/classifier-shared.js.map +1 -1
  14. package/dist/api/cloudflare-workers-ai-system-one.d.ts.map +1 -1
  15. package/dist/api/cloudflare-workers-ai-system-one.js +8 -0
  16. package/dist/api/cloudflare-workers-ai-system-one.js.map +1 -1
  17. package/dist/api/google-generative-ai.js +4 -4
  18. package/dist/api/google-generative-ai.js.map +1 -1
  19. package/dist/api/google-vertex.d.ts.map +1 -1
  20. package/dist/api/google-vertex.js +9 -9
  21. package/dist/api/google-vertex.js.map +1 -1
  22. package/dist/api/llama-cpp-classify.d.ts.map +1 -1
  23. package/dist/api/llama-cpp-classify.js +2 -1
  24. package/dist/api/llama-cpp-classify.js.map +1 -1
  25. package/dist/api/mistral-conversations.js +2 -2
  26. package/dist/api/mistral-conversations.js.map +1 -1
  27. package/dist/api/openai-codex-responses.d.ts.map +1 -1
  28. package/dist/api/openai-codex-responses.js +12 -9
  29. package/dist/api/openai-codex-responses.js.map +1 -1
  30. package/dist/api/openai-completions.d.ts.map +1 -1
  31. package/dist/api/openai-completions.js +4 -4
  32. package/dist/api/openai-completions.js.map +1 -1
  33. package/dist/api/openai-responses.d.ts.map +1 -1
  34. package/dist/api/openai-responses.js +15 -7
  35. package/dist/api/openai-responses.js.map +1 -1
  36. package/dist/api/openrouter-images.d.ts.map +1 -1
  37. package/dist/api/openrouter-images.js +4 -3
  38. package/dist/api/openrouter-images.js.map +1 -1
  39. package/dist/api/pi-messages.d.ts.map +1 -1
  40. package/dist/api/pi-messages.js +3 -3
  41. package/dist/api/pi-messages.js.map +1 -1
  42. package/dist/api/simple-options.d.ts.map +1 -1
  43. package/dist/api/simple-options.js +1 -0
  44. package/dist/api/simple-options.js.map +1 -1
  45. package/dist/api/system-one-shared.d.ts +20 -4
  46. package/dist/api/system-one-shared.d.ts.map +1 -1
  47. package/dist/api/system-one-shared.js +49 -19
  48. package/dist/api/system-one-shared.js.map +1 -1
  49. package/dist/api/typesafe-system-one.d.ts.map +1 -1
  50. package/dist/api/typesafe-system-one.js +10 -3
  51. package/dist/api/typesafe-system-one.js.map +1 -1
  52. package/dist/auth/oauth/anthropic.d.ts.map +1 -1
  53. package/dist/auth/oauth/anthropic.js +15 -2
  54. package/dist/auth/oauth/anthropic.js.map +1 -1
  55. package/dist/auth/oauth/github-copilot.d.ts.map +1 -1
  56. package/dist/auth/oauth/github-copilot.js +7 -2
  57. package/dist/auth/oauth/github-copilot.js.map +1 -1
  58. package/dist/auth/oauth/kimi-coding.d.ts.map +1 -1
  59. package/dist/auth/oauth/kimi-coding.js +24 -21
  60. package/dist/auth/oauth/kimi-coding.js.map +1 -1
  61. package/dist/auth/oauth/meta.d.ts.map +1 -1
  62. package/dist/auth/oauth/meta.js +7 -2
  63. package/dist/auth/oauth/meta.js.map +1 -1
  64. package/dist/auth/oauth/openai-chatgpt.d.ts.map +1 -1
  65. package/dist/auth/oauth/openai-chatgpt.js +10 -0
  66. package/dist/auth/oauth/openai-chatgpt.js.map +1 -1
  67. package/dist/auth/oauth/openai-codex.d.ts.map +1 -1
  68. package/dist/auth/oauth/openai-codex.js +11 -2
  69. package/dist/auth/oauth/openai-codex.js.map +1 -1
  70. package/dist/auth/oauth/radius.d.ts.map +1 -1
  71. package/dist/auth/oauth/radius.js +24 -8
  72. package/dist/auth/oauth/radius.js.map +1 -1
  73. package/dist/auth/oauth/xai.d.ts.map +1 -1
  74. package/dist/auth/oauth/xai.js +11 -0
  75. package/dist/auth/oauth/xai.js.map +1 -1
  76. package/dist/auth/oauth-refresh-errors.d.ts +46 -0
  77. package/dist/auth/oauth-refresh-errors.d.ts.map +1 -0
  78. package/dist/auth/oauth-refresh-errors.js +150 -0
  79. package/dist/auth/oauth-refresh-errors.js.map +1 -0
  80. package/dist/auth/resolve.d.ts +23 -0
  81. package/dist/auth/resolve.d.ts.map +1 -1
  82. package/dist/auth/resolve.js +194 -5
  83. package/dist/auth/resolve.js.map +1 -1
  84. package/dist/index.d.ts +3 -0
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +3 -0
  87. package/dist/index.js.map +1 -1
  88. package/dist/models.d.ts +4 -1
  89. package/dist/models.d.ts.map +1 -1
  90. package/dist/models.js +15 -4
  91. package/dist/models.js.map +1 -1
  92. package/dist/providers/compat-schema.d.ts +18 -0
  93. package/dist/providers/compat-schema.d.ts.map +1 -1
  94. package/dist/providers/compat-schema.js +10 -0
  95. package/dist/providers/compat-schema.js.map +1 -1
  96. package/dist/providers/data/.manifest.json +1 -1
  97. package/dist/providers/data/amazon-bedrock.json +1 -1
  98. package/dist/providers/data/baseten.json +1 -1
  99. package/dist/providers/data/cerebras.json +1 -1
  100. package/dist/providers/data/cloudflare-workers-ai.json +1 -1
  101. package/dist/providers/data/github-copilot.json +1 -1
  102. package/dist/providers/data/groq.json +1 -1
  103. package/dist/providers/data/huggingface.json +1 -1
  104. package/dist/providers/data/nvidia.json +1 -1
  105. package/dist/providers/data/opencode.json +1 -1
  106. package/dist/providers/data/openrouter.json +1 -1
  107. package/dist/providers/data/radius.json +1 -1
  108. package/dist/providers/data/together.json +1 -1
  109. package/dist/providers/data/typesafe.json +1 -1
  110. package/dist/providers/data/vercel-ai-gateway.json +1 -1
  111. package/dist/types.d.ts +10 -2
  112. package/dist/types.d.ts.map +1 -1
  113. package/dist/types.js.map +1 -1
  114. package/dist/utils/identity.d.ts +65 -0
  115. package/dist/utils/identity.d.ts.map +1 -0
  116. package/dist/utils/identity.js +142 -0
  117. package/dist/utils/identity.js.map +1 -0
  118. package/dist/utils/retry.d.ts.map +1 -1
  119. package/dist/utils/retry.js +9 -8
  120. package/dist/utils/retry.js.map +1 -1
  121. package/dist/utils/version.d.ts +2 -0
  122. package/dist/utils/version.d.ts.map +1 -0
  123. package/dist/utils/version.js +3 -0
  124. package/dist/utils/version.js.map +1 -0
  125. package/package.json +2 -2
  126. package/dist/utils/pi-user-agent.d.ts +0 -2
  127. package/dist/utils/pi-user-agent.d.ts.map +0 -1
  128. package/dist/utils/pi-user-agent.js +0 -12
  129. package/dist/utils/pi-user-agent.js.map +0 -1
package/dist/types.d.ts CHANGED
@@ -10,11 +10,12 @@ import type { OpenAICompletionsOptions } from "./api/openai-completions.ts";
10
10
  import type { OpenAIImagesOptions } from "./api/openai-images.ts";
11
11
  import type { OpenAIResponsesOptions } from "./api/openai-responses.ts";
12
12
  import type { PiMessagesOptions } from "./api/pi-messages.ts";
13
- import type { AnthropicMessagesCompat, BedrockCompat, MistralConversationsCompat, OpenAICompletionsCompat, OpenAIResponsesCompat } from "./providers/compat-schema.ts";
13
+ import type { AnthropicMessagesCompat, BedrockCompat, MistralConversationsCompat, OpenAICompletionsCompat, OpenAIResponsesCompat, SystemOneCompat } from "./providers/compat-schema.ts";
14
14
  import type { CacheRetention, ModelCost, ModelInputLimits, ModelInputModality, ModelPromptCache, ModelThinkingLevel, ThinkingLevel, ThinkingLevelMap } from "./providers/model-schema.ts";
15
15
  import type { AssistantMessageDiagnostic } from "./utils/diagnostics.ts";
16
16
  import type { AssistantMessageEventStream } from "./utils/event-stream.ts";
17
- export type { AnthropicAllowedFallbackModel, AnthropicMessagesCompat, BedrockCompat, ChatTemplateKwargValue, MistralConversationsCompat, OpenAICompletionsCompat, OpenAIResponsesCompat, OpenRouterRouting, SessionAffinityFormat, ThinkingTokenBudgetField, VercelGatewayRouting, } from "./providers/compat-schema.ts";
17
+ import type { ClientIdentity } from "./utils/identity.ts";
18
+ export type { AnthropicAllowedFallbackModel, AnthropicMessagesCompat, BedrockCompat, ChatTemplateKwargValue, MistralConversationsCompat, OpenAICompletionsCompat, OpenAIResponsesCompat, OpenRouterRouting, SessionAffinityFormat, SystemOneCompat, ThinkingTokenBudgetField, VercelGatewayRouting, } from "./providers/compat-schema.ts";
18
19
  export type { CacheRetention, ModelCost, ModelCostRates, ModelCostTier, ModelImageInputLimits, ModelImageResizeOptions, ModelInputLimits, ModelInputModality, ModelPromptCache, ModelThinkingLevel, ThinkingLevel, ThinkingLevelMap, } from "./providers/model-schema.ts";
19
20
  export type { AssistantMessageEventStream } from "./utils/event-stream.ts";
20
21
  export type KnownApi = "openai-completions" | "mistral-conversations" | "openai-responses" | "azure-openai-responses" | "openai-codex-responses" | "anthropic-messages" | "bedrock-converse-stream" | "google-generative-ai" | "google-vertex" | "pi-messages";
@@ -81,6 +82,11 @@ export interface ProviderRequestOptions<TModel = Model<Api>> {
81
82
  * A null value suppresses a provider/API default header with the same name.
82
83
  */
83
84
  headers?: ProviderHeaders;
85
+ /**
86
+ * How the request identifies the calling app: `User-Agent` and provider attribution headers.
87
+ * Absent fields use pi-ai's defaults: a detailed `User-Agent` and no attribution.
88
+ */
89
+ identity?: ClientIdentity;
84
90
  /**
85
91
  * HTTP request timeout in milliseconds for providers/SDKs that support it.
86
92
  * For example, OpenAI and Anthropic SDK clients default to 10 minutes.
@@ -766,6 +772,8 @@ export interface ImageModel<TApi extends ImageApi> extends BaseModel<TApi> {
766
772
  export interface ClassifierModel<TApi extends ClassifierApi> extends BaseModel<TApi> {
767
773
  type: "classifier";
768
774
  contextWindow: number;
775
+ /** Compatibility overrides for System One APIs. If not set, auto-detected from provider, baseUrl, and id. */
776
+ compat?: TApi extends "typesafe-system-one" | "cloudflare-workers-ai-system-one" ? SystemOneCompat : never;
769
777
  }
770
778
  /** Dedicated compaction model, excluded from chat model selection. */
771
779
  export interface CompactorModel<TApi extends CompactorApi = CompactorApi> extends BaseModel<TApi> {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AACnF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AACnF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EACX,uBAAuB,EACvB,aAAa,EACb,0BAA0B,EAC1B,uBAAuB,EACvB,qBAAqB,EACrB,eAAe,EACf,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EACX,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,YAAY,EACX,6BAA6B,EAC7B,uBAAuB,EACvB,aAAa,EACb,sBAAsB,EACtB,0BAA0B,EAC1B,uBAAuB,EACvB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,wBAAwB,EACxB,oBAAoB,GACpB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACX,cAAc,EACd,SAAS,EACT,cAAc,EACd,aAAa,EACb,qBAAqB,EACrB,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,gBAAgB,GAChB,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAE3E,MAAM,MAAM,QAAQ,GACjB,oBAAoB,GACpB,uBAAuB,GACvB,kBAAkB,GAClB,wBAAwB,GACxB,wBAAwB,GACxB,oBAAoB,GACpB,yBAAyB,GACzB,sBAAsB,GACtB,eAAe,GACf,aAAa,CAAC;AAEjB,MAAM,MAAM,GAAG,GAAG,QAAQ,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAE3C,MAAM,MAAM,aAAa,GAAG,mBAAmB,GAAG,eAAe,CAAC;AAElE,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAErD,MAAM,MAAM,kBAAkB,GAC3B,qBAAqB,GACrB,kCAAkC,GAClC,oBAAoB,GACpB,kBAAkB,CAAC;AAEtB,MAAM,MAAM,aAAa,GAAG,kBAAkB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAE/D,MAAM,MAAM,YAAY,GAAG,eAAe,CAAC;AAE3C,MAAM,MAAM,aAAa,GACtB,gBAAgB,GAChB,UAAU,GACV,WAAW,GACX,eAAe,GACf,QAAQ,GACR,eAAe,GACf,QAAQ,GACR,YAAY,GACZ,OAAO,GACP,wBAAwB,GACxB,cAAc,GACd,kBAAkB,GAClB,eAAe,GACf,QAAQ,GACR,UAAU,GACV,OAAO,GACP,QAAQ,GACR,UAAU,GACV,gBAAgB,GAChB,KAAK,GACL,MAAM,GACN,UAAU,GACV,YAAY,GACZ,mBAAmB,GACnB,KAAK,GACL,eAAe,GACf,SAAS,GACT,SAAS,GACT,YAAY,GACZ,YAAY,GACZ,eAAe,GACf,aAAa,GACb,WAAW,GACX,UAAU,GACV,SAAS,GACT,UAAU,GACV,aAAa,GACb,aAAa,GACb,MAAM,GACN,uBAAuB,GACvB,uBAAuB,GACvB,iBAAiB,GACjB,oBAAoB,GACpB,4BAA4B,GAC5B,QAAQ,GACR,sBAAsB,GACtB,uBAAuB,GACvB,uBAAuB,CAAC;AAC3B,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,MAAM,CAAC;AAEhD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AACzC,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACrD,MAAM,MAAM,6BAA6B,GAAG,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC,CAAC;AAChG,yEAAyE;AACzE,MAAM,WAAW,eAAe;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAGD,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,WAAW,GAAG,kBAAkB,GAAG,MAAM,CAAC;AAE1E,sFAAsF;AACtF,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACjD,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;AAC5D,MAAM,MAAM,aAAa,GAAG,OAAO,UAAU,CAAC,KAAK,CAAC;AAEpD,MAAM,WAAW,gBAAgB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,2FAA2F;AAC3F,MAAM,WAAW,sBAAsB,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC;IAC1D,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;;;;OAIG;IACH,GAAG,CAAC,EAAE,WAAW,CAAC;IAClB;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IACpG;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjF;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAc,SAAQ,sBAAsB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxE;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrF;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;OAGG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,MAAM,qBAAqB,GAAG,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5E,MAAM,WAAW,oBAAqB,SAAQ,sBAAsB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/E;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,sEAAsE;AACtE,MAAM,MAAM,qBAAqB,GAAG,sBAAsB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAEvE;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC7B,oBAAoB,EAAE,gBAAgB,CAAC;IACvC,oBAAoB,EAAE,wBAAwB,CAAC;IAC/C,kBAAkB,EAAE,sBAAsB,CAAC;IAC3C,wBAAwB,EAAE,2BAA2B,CAAC;IACtD,wBAAwB,EAAE,2BAA2B,CAAC;IACtD,sBAAsB,EAAE,aAAa,CAAC;IACtC,eAAe,EAAE,mBAAmB,CAAC;IACrC,uBAAuB,EAAE,cAAc,CAAC;IACxC,yBAAyB,EAAE,cAAc,CAAC;IAC1C,aAAa,EAAE,iBAAiB,CAAC;CACjC;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,CAAC,IAAI,SAAS,GAAG,IAAI,IAAI,SAAS,MAAM,aAAa,GAC9E,aAAa,CAAC,IAAI,CAAC,GACnB,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3C;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC/B,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,2BAA2B,CAAC;IAC5G,YAAY,CACX,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EACjB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,CAAC,EAAE,mBAAmB,GAC3B,2BAA2B,CAAC;IAC/B,aAAa,CAAC,CACb,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EACjB,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,oBAAoB,GAC5B,2BAA2B,CAAC;IAC/B,cAAc,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3G;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC9B,cAAc,CACb,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,EAC3B,OAAO,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,eAAe,CAAC,CAAC;CAC5B;AAED,kEAAkE;AAClE,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CACP,KAAK,EAAE,eAAe,CAAC,aAAa,CAAC,EACrC,OAAO,EAAE,iBAAiB,EAC1B,OAAO,CAAC,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAkB,SAAQ,sBAAsB,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;IAChG;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAc,SAAQ,sBAAsB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClF;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,MAAM,qBAAqB,GAAG,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5E;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAClC,mBAAmB,EAAE,aAAa,CAAC;IACnC,eAAe,EAAE,mBAAmB,CAAC;CACrC;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,CAAC,IAAI,SAAS,QAAQ,IAAI,IAAI,SAAS,MAAM,kBAAkB,GACvF,kBAAkB,CAAC,IAAI,CAAC,GACxB,qBAAqB,CAAC;AAGzB,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACzD,kHAAkH;IAClH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,iGAAiG;IACjG,QAAQ,CAAC,EAAE,OAAO,GAAG;QAAE,MAAM,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,KAAK,CAAA;KAAE,CAAC;IACvD,4EAA4E;IAC5E,eAAe,CAAC,EAAE,eAAe,CAAC;CAClC;AAaD,MAAM,MAAM,cAAc,CAAC,IAAI,SAAS,GAAG,GAAG,GAAG,EAAE,QAAQ,SAAS,aAAa,GAAG,aAAa,IAAI,CACpG,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAClB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,CAAC,EAAE,QAAQ,KACd,2BAA2B,CAAC;AAEjC,MAAM,MAAM,cAAc,CAAC,QAAQ,SAAS,aAAa,GAAG,aAAa,IAAI,CAC5E,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,EAC3B,OAAO,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE,QAAQ,KACd,OAAO,CAAC,eAAe,CAAC,CAAC;AAE9B,MAAM,MAAM,kBAAkB,CAAC,QAAQ,SAAS,iBAAiB,GAAG,iBAAiB,IAAI,CACxF,KAAK,EAAE,eAAe,CAAC,aAAa,CAAC,EACrC,OAAO,EAAE,iBAAiB,EAC1B,OAAO,CAAC,EAAE,QAAQ,KACd,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAE/B,MAAM,WAAW,eAAe;IAC/B,CAAC,EAAE,CAAC,CAAC;IACL,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,YAAY,GAAG,cAAc,CAAC;CACtC;AAED,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;gDAE4C;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,UAAU,CAAC;IACjB,+GAA+G;IAC/G,SAAS,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,UAAU,CAAC;IACjB,6FAA6F;IAC7F,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;;;OASG;IACH,QAAQ,EAAE,iBAAiB,CAAC;IAC5B;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,UAAU,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,sFAAsF;IACtF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,KAAK;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,iGAAiG;IACjG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACd,CAAC;CACF;AAED,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;AAEtG,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,SAAS,EAAE,GAAG,UAAU,CAAC;AAC7F,MAAM,MAAM,UAAU,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEtD,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;AAC/C,KAAK,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;AACxG,KAAK,cAAc,CAAC,CAAC,IACpB,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,GAClB,KAAK,GACL,OAAO,SAAS,CAAC,GAChB,KAAK,GACL,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GACtC,IAAI,GACJ,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;AAC9C,KAAK,eAAe,CAAC,CAAC,SAAS,MAAM,IAAI;KACvC,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,SAAS,MAAM,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI;CAChH,CAAC,MAAM,CAAC,CAAC,CAAC;AACX,KAAK,gBAAgB,CAAC,CAAC,IACtB,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,GAClB,KAAK,GACL,OAAO,SAAS,CAAC,GAChB,KAAK,GACL,kBAAkB,CAAC,CAAC,CAAC,SAAS,IAAI,GACjC,IAAI,GACJ,CAAC,SAAS,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GACzC,IAAI,GACJ,CAAC,SAAS,SAAS,GAClB,KAAK,GACL,CAAC,SAAS,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,GACjC,gBAAgB,CAAC,KAAK,CAAC,GACvB,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,GACtC,KAAK,GACL,CAAC,SAAS,MAAM,GACf,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GACnC,IAAI,GACJ,KAAK,GACN,KAAK,CAAC;AAEjB,sGAAsG;AACtG,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAC/B,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,GAClB,SAAS,GACT,OAAO,SAAS,CAAC,GAChB,SAAS,GACT,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,GACtB,CAAC,GACD,CAAC,SAAS,SAAS,OAAO,EAAE,GAC3B;KAAG,IAAI,IAAI,MAAM,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;CAAE,GACtE,CAAC,SAAS,MAAM,GACf;KAAG,IAAI,IAAI,MAAM,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;CAAE,GACtE,KAAK,CAAC;AAEd,MAAM,WAAW,cAAc;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,qEAAqE;IACrE,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oFAAoF;IACpF,IAAI,CAAC,EAAE,SAAS,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,wGAAwG;IACxG,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;IAChC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,yEAAyE;IACzE,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC;IACpB,qDAAqD;IACrD,YAAY,CAAC,EAAE,aAAa,EAAE,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,CAAC,WAAW,GAAG,YAAY,GAAG,eAAe,CAAC,EAAE,CAAC;IACnE,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,CAAC,WAAW,GAAG,eAAe,GAAG,QAAQ,GAAG,eAAe,CAAC,EAAE,CAAC;IACxE,GAAG,EAAE,GAAG,CAAC;IACT,QAAQ,EAAE,UAAU,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2GAA2G;IAC3G,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,WAAW,CAAC,EAAE,0BAA0B,EAAE,CAAC;IAC3C,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8GAA8G;IAC9G,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,mEAAmE;AACnE,MAAM,WAAW,oBAAoB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,kDAAkD;IAClD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,IAAI,GAAG,OAAO,GAAG,YAAY,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,4DAA4D;AAC5D,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAC9B,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,iBAAiB,CAAC,QAAQ,GAAG,SAAS,IACjD,gBAAgB,CAAC,QAAQ,CAAC,SAAS,IAAI,GACpC;IACA,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,CAAC,WAAW,GAAG,YAAY,CAAC,EAAE,CAAC;IACxC,OAAO,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACvC,mGAAmG;IACnG,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,mEAAmE;IACnE,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB,GACA,KAAK,CAAC;AAEV,MAAM,MAAM,OAAO,GAAG,aAAa,GAAG,WAAW,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AAEzF,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,YAAY,CAAC;AAC5D,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,YAAY,CAAC;AAE7D,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,kBAAkB,EAAE,CAAC;CAC5B;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAE5D,MAAM,WAAW,eAAe;IAC/B,GAAG,EAAE,QAAQ,CAAC;IACd,QAAQ,EAAE,UAAU,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,UAAU,EAAE,gBAAgB,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACxC,IAAI,EAAE,QAAQ,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,uBAAuB;IACvC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1C;AAED,MAAM,MAAM,kBAAkB,GAAG,wBAAwB,GAAG,uBAAuB,GAAG,sBAAsB,CAAC;AAE7G,MAAM,WAAW,iBAAiB;IACjC,KAAK,EAAE,UAAU,CAAC;IAClB;;;OAGG;IACH,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,sBAAsB;IACtC,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACrC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,gBAAgB,GAAG,sBAAsB,GAAG,qBAAqB,GAAG,oBAAoB,CAAC;AACrG,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAEhE,MAAM,WAAW,gBAAgB;IAChC,GAAG,EAAE,aAAa,CAAC;IACnB,QAAQ,EAAE,UAAU,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC1C,wEAAwE;IACxE,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,UAAU,EAAE,oBAAoB,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,wDAAwD;AACxD,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,cAAc,CAAC;AAE3D,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;AAErE;;;;;;GAMG;AACH,MAAM,MAAM,yBAAyB,GAClC;IACA,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC5B,GACD;IACA,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,eAAe,CAAC;CACzB,CAAC;AAEL,MAAM,WAAW,IAAI,CAAC,WAAW,SAAS,OAAO,GAAG,OAAO;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,WAAW,CAAC;IACxB,mBAAmB,CAAC,EAAE,KAAK,GAAG,yBAAyB,CAAC;CACxD;AAED,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;CACb;AAED;;;;;GAKG;AACH,MAAM,WAAW,OAAO;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;CACf;AAED,OAAO,CAAC,MAAM,sBAAsB,EAAE,OAAO,MAAM,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC/B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,QAAQ,CAAC,CAAC,sBAAsB,CAAC,EAAE,IAAI,CAAC;CACxC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,qBAAqB,GAC9B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GACvE;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GACtF;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GACtF;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GAC3E;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GAC1F;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GAC1F;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GAC3E;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GAC1F;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GAC7F;IACA,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC;IACxE,OAAO,EAAE,gBAAgB,CAAC;CACzB,GACD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC;IAAC,KAAK,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAEhG,sEAAsE;AACtE,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,WAAW,CAAC;AAE1D;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAChC,EAAE,EAAE,kBAAkB,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;CAChB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC9B,4FAA4F;IAC5F,WAAW,EAAE,MAAM,CAAC;IACpB,8HAA8H;IAC9H,eAAe,EAAE,MAAM,CAAC;IACxB,0HAA0H;IAC1H,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,6GAA6G;IAC7G,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,mFAAmF;AACnF,MAAM,WAAW,SAAS,CAAC,IAAI,SAAS,MAAM;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,IAAI,CAAC;IACV,QAAQ,EAAE,UAAU,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,mEAAmE;IACnE,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,sDAAsD;AACtD,MAAM,WAAW,KAAK,CAAC,IAAI,SAAS,GAAG,CAAE,SAAQ,SAAS,CAAC,IAAI,CAAC;IAC/D;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,sGAAsG;IACtG,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,6HAA6H;IAC7H,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,gFAAgF;IAChF,6BAA6B,CAAC,EAAE,6BAA6B,CAAC;IAC9D;;;OAGG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B;;;OAGG;IACH,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAClC,kGAAkG;IAClG,MAAM,CAAC,EAAE,IAAI,SAAS,oBAAoB,GACvC,uBAAuB,GACvB,IAAI,SAAS,kBAAkB,GAAG,wBAAwB,GAAG,wBAAwB,GACpF,qBAAqB,GACrB,IAAI,SAAS,oBAAoB,GAChC,uBAAuB,GACvB,IAAI,SAAS,yBAAyB,GACrC,aAAa,GACb,IAAI,SAAS,uBAAuB,GACnC,0BAA0B,GAC1B,KAAK,CAAC;CACb;AAED,mEAAmE;AACnE,MAAM,WAAW,UAAU,CAAC,IAAI,SAAS,QAAQ,CAAE,SAAQ,SAAS,CAAC,IAAI,CAAC;IACzE,IAAI,EAAE,OAAO,CAAC;IACd,0GAA0G;IAC1G,MAAM,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;CAC7B;AAED,kEAAkE;AAClE,MAAM,WAAW,eAAe,CAAC,IAAI,SAAS,aAAa,CAAE,SAAQ,SAAS,CAAC,IAAI,CAAC;IACnF,IAAI,EAAE,YAAY,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,6GAA6G;IAC7G,MAAM,CAAC,EAAE,IAAI,SAAS,qBAAqB,GAAG,kCAAkC,GAAG,eAAe,GAAG,KAAK,CAAC;CAC3G;AAED,sEAAsE;AACtE,MAAM,WAAW,cAAc,CAAC,IAAI,SAAS,YAAY,GAAG,YAAY,CAAE,SAAQ,SAAS,CAAC,IAAI,CAAC;IAChG,IAAI,EAAE,WAAW,CAAC;CAClB;AAED,uCAAuC;AACvC,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACjB,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC5B,UAAU,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC;IAC3C,SAAS,EAAE,cAAc,CAAC;CAC1B;AAED,gFAAgF;AAChF,MAAM,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC;AAE3C,iEAAiE;AACjE,MAAM,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { TelemetryContext } from \"@earendil-works/pi-telemetry\";\nimport type { AnthropicOptions } from \"./api/anthropic-messages.ts\";\nimport type { AzureOpenAIResponsesOptions } from \"./api/azure-openai-responses.ts\";\nimport type { BedrockOptions } from \"./api/bedrock-converse-stream.ts\";\nimport type { GoogleOptions } from \"./api/google-generative-ai.ts\";\nimport type { GoogleVertexOptions } from \"./api/google-vertex.ts\";\nimport type { MistralOptions } from \"./api/mistral-conversations.ts\";\nimport type { OpenAICodexResponsesOptions } from \"./api/openai-codex-responses.ts\";\nimport type { OpenAICompletionsOptions } from \"./api/openai-completions.ts\";\nimport type { OpenAIImagesOptions } from \"./api/openai-images.ts\";\nimport type { OpenAIResponsesOptions } from \"./api/openai-responses.ts\";\nimport type { PiMessagesOptions } from \"./api/pi-messages.ts\";\nimport type {\n\tAnthropicMessagesCompat,\n\tBedrockCompat,\n\tMistralConversationsCompat,\n\tOpenAICompletionsCompat,\n\tOpenAIResponsesCompat,\n} from \"./providers/compat-schema.ts\";\nimport type {\n\tCacheRetention,\n\tModelCost,\n\tModelInputLimits,\n\tModelInputModality,\n\tModelPromptCache,\n\tModelThinkingLevel,\n\tThinkingLevel,\n\tThinkingLevelMap,\n} from \"./providers/model-schema.ts\";\nimport type { AssistantMessageDiagnostic } from \"./utils/diagnostics.ts\";\nimport type { AssistantMessageEventStream } from \"./utils/event-stream.ts\";\n\nexport type {\n\tAnthropicAllowedFallbackModel,\n\tAnthropicMessagesCompat,\n\tBedrockCompat,\n\tChatTemplateKwargValue,\n\tMistralConversationsCompat,\n\tOpenAICompletionsCompat,\n\tOpenAIResponsesCompat,\n\tOpenRouterRouting,\n\tSessionAffinityFormat,\n\tThinkingTokenBudgetField,\n\tVercelGatewayRouting,\n} from \"./providers/compat-schema.ts\";\nexport type {\n\tCacheRetention,\n\tModelCost,\n\tModelCostRates,\n\tModelCostTier,\n\tModelImageInputLimits,\n\tModelImageResizeOptions,\n\tModelInputLimits,\n\tModelInputModality,\n\tModelPromptCache,\n\tModelThinkingLevel,\n\tThinkingLevel,\n\tThinkingLevelMap,\n} from \"./providers/model-schema.ts\";\nexport type { AssistantMessageEventStream } from \"./utils/event-stream.ts\";\n\nexport type KnownApi =\n\t| \"openai-completions\"\n\t| \"mistral-conversations\"\n\t| \"openai-responses\"\n\t| \"azure-openai-responses\"\n\t| \"openai-codex-responses\"\n\t| \"anthropic-messages\"\n\t| \"bedrock-converse-stream\"\n\t| \"google-generative-ai\"\n\t| \"google-vertex\"\n\t| \"pi-messages\";\n\nexport type Api = KnownApi | (string & {});\n\nexport type KnownImageApi = \"openrouter-images\" | \"openai-images\";\n\nexport type ImageApi = KnownImageApi | (string & {});\n\nexport type KnownClassifierApi =\n\t| \"typesafe-system-one\"\n\t| \"cloudflare-workers-ai-system-one\"\n\t| \"llama-cpp-classify\"\n\t| \"openai-decisions\";\n\nexport type ClassifierApi = KnownClassifierApi | (string & {});\n\nexport type CompactorApi = \"morph-compact\";\n\nexport type KnownProvider =\n\t| \"amazon-bedrock\"\n\t| \"ant-ling\"\n\t| \"anthropic\"\n\t| \"anthropic-api\"\n\t| \"google\"\n\t| \"google-vertex\"\n\t| \"openai\"\n\t| \"openai-api\"\n\t| \"azure\"\n\t| \"azure-openai-responses\"\n\t| \"openai-codex\"\n\t| \"openai-decisions\"\n\t| \"openai-images\"\n\t| \"radius\"\n\t| \"typesafe\"\n\t| \"morph\"\n\t| \"nvidia\"\n\t| \"deepseek\"\n\t| \"github-copilot\"\n\t| \"xai\"\n\t| \"groq\"\n\t| \"cerebras\"\n\t| \"openrouter\"\n\t| \"vercel-ai-gateway\"\n\t| \"zai\"\n\t| \"zai-coding-cn\"\n\t| \"mistral\"\n\t| \"minimax\"\n\t| \"minimax-cn\"\n\t| \"moonshotai\"\n\t| \"moonshotai-cn\"\n\t| \"huggingface\"\n\t| \"fireworks\"\n\t| \"together\"\n\t| \"baseten\"\n\t| \"opencode\"\n\t| \"opencode-go\"\n\t| \"kimi-coding\"\n\t| \"meta\"\n\t| \"cloudflare-workers-ai\"\n\t| \"cloudflare-ai-gateway\"\n\t| \"qwen-token-plan\"\n\t| \"qwen-token-plan-cn\"\n\t| \"qwen-token-plan-individual\"\n\t| \"xiaomi\"\n\t| \"xiaomi-token-plan-cn\"\n\t| \"xiaomi-token-plan-ams\"\n\t| \"xiaomi-token-plan-sgp\";\nexport type ProviderId = KnownProvider | string;\n\nexport type ToolChoice = \"auto\" | \"none\";\nexport type SamplingParams = Record<string, unknown>;\nexport type SamplingParamsByThinkingLevel = Partial<Record<ModelThinkingLevel, SamplingParams>>;\n/** Token budgets for each thinking level (token-based providers only) */\nexport interface ThinkingBudgets {\n\tminimal?: number;\n\tlow?: number;\n\tmedium?: number;\n\thigh?: number;\n}\n\n// Base options all providers share\nexport type Transport = \"sse\" | \"websocket\" | \"websocket-cached\" | \"auto\";\n\n/** Provider-scoped environment overrides. Values take precedence over process.env. */\nexport type ProviderEnv = Record<string, string>;\nexport type ProviderHeaders = Record<string, string | null>;\nexport type FetchFunction = typeof globalThis.fetch;\n\nexport interface ProviderResponse {\n\tstatus: number;\n\theaders: Record<string, string>;\n}\n\n/** Authentication, HTTP transport, and lifecycle callbacks shared by provider requests. */\nexport interface ProviderRequestOptions<TModel = Model<Api>> {\n\tsignal?: AbortSignal;\n\t/** Explicit parent context for telemetry produced by this logical request. */\n\ttelemetryContext?: TelemetryContext;\n\tapiKey?: string;\n\t/**\n\t * Optional fetch implementation for provider HTTP requests.\n\t * Defaults to `globalThis.fetch`. Provider adapters that cannot inject a custom implementation may reject it.\n\t * This does not affect WebSocket transports.\n\t */\n\tfetch?: FetchFunction;\n\t/**\n\t * Provider-scoped environment values. These take precedence over process.env for\n\t * provider configuration such as regional settings, endpoint placeholders, and\n\t * proxy variables.\n\t */\n\tenv?: ProviderEnv;\n\t/**\n\t * Optional callback for inspecting or replacing provider payloads before sending.\n\t * Return undefined to keep the payload unchanged.\n\t */\n\tonPayload?: (payload: unknown, model: TModel) => unknown | undefined | Promise<unknown | undefined>;\n\t/**\n\t * Optional callback invoked after an HTTP response is received.\n\t */\n\tonResponse?: (response: ProviderResponse, model: TModel) => void | Promise<void>;\n\t/**\n\t * Optional custom HTTP headers to include in API requests.\n\t * Merged with provider defaults; caller values override default headers.\n\t * On AWS Bedrock these are injected via a Smithy `build`-step middleware so\n\t * they are covered by SigV4 signing; reserved headers (`x-amz-*`,\n\t * `authorization`, `host`) are silently ignored to preserve SigV4 / bearer auth.\n\t * A null value suppresses a provider/API default header with the same name.\n\t */\n\theaders?: ProviderHeaders;\n\t/**\n\t * HTTP request timeout in milliseconds for providers/SDKs that support it.\n\t * For example, OpenAI and Anthropic SDK clients default to 10 minutes.\n\t */\n\ttimeoutMs?: number;\n\t/**\n\t * Maximum retry attempts for providers/SDKs that support client-side retries.\n\t * For example, OpenAI and Anthropic SDK clients default to 2.\n\t */\n\tmaxRetries?: number;\n\t/**\n\t * Maximum delay in milliseconds to wait for a retry when the server requests a long wait.\n\t * If the server's requested delay exceeds this value, the request fails immediately\n\t * with an error containing the requested delay, allowing higher-level retry logic\n\t * to handle it with user visibility.\n\t * Default: 60000 (60 seconds). Set to 0 to disable the cap.\n\t */\n\tmaxRetryDelayMs?: number;\n}\n\nexport interface StreamOptions extends ProviderRequestOptions<Model<Api>> {\n\t/**\n\t * Optional callback invoked after an HTTP response is received and before\n\t * its body stream is consumed.\n\t */\n\tonResponse?: (response: ProviderResponse, model: Model<Api>) => void | Promise<void>;\n\t/**\n\t * Optional observer for each parsed provider stream event before Pi normalization.\n\t * Event data is adapter-owned and must be treated as read-only.\n\t * Adapter support is explicit; unsupported adapters do not invoke it.\n\t */\n\tonProviderStreamEvent?: (data: unknown, model: Model<Api>) => void | Promise<void>;\n\ttemperature?: number;\n\t/**\n\t * Arbitrary sampling parameters merged into the request body as-is, after the named request\n\t * fields, so keys here override them. Lets custom OpenAI-compatible servers (llama.cpp, vLLM,\n\t * SGLang, ...) receive parameters pi does not model, e.g. `top_p`, `top_k`, `min_p`,\n\t * `repetition_penalty`. Merged over `Model.samplingParams` per key. Only applied by\n\t * OpenAI-compatible adapters (completions, responses, Azure responses); other APIs ignore it.\n\t */\n\tsamplingParams?: SamplingParams;\n\tmaxTokens?: number;\n\t/**\n\t * Preferred transport for providers that support multiple transports.\n\t * Providers that do not support this option ignore it.\n\t */\n\ttransport?: Transport;\n\t/**\n\t * Prompt cache retention preference. Providers map this to their supported values.\n\t * Default: \"short\".\n\t */\n\tcacheRetention?: CacheRetention;\n\t/**\n\t * Optional session identifier for providers that support session-based caching.\n\t * Providers can use this to enable prompt caching, request routing, or other\n\t * session-aware features. Ignored by providers that don't support it.\n\t */\n\tsessionId?: string;\n\t/**\n\t * WebSocket connect timeout in milliseconds for providers that support\n\t * WebSocket transports. This covers the connection/open handshake only;\n\t * HTTP/SDK idleness uses `timeoutMs`, while gaps between decoded provider\n\t * stream events use `streamDeadlineMs`.\n\t */\n\twebsocketConnectTimeoutMs?: number;\n\t/**\n\t * Maximum idle gap in milliseconds between two provider stream events.\n\t *\n\t * Enforced below the HTTP layer, so a response body that stalls without ever\n\t * rejecting the adapter's async iterator (for example a decompression failure\n\t * that destroys the stream silently, #2553) still settles the attempt as a\n\t * retryable transport error instead of hanging forever. The timer restarts on\n\t * every event, so it never caps total stream duration.\n\t *\n\t * Defaults to 300000 ms. `0` (or any non-positive value) disables it.\n\t */\n\tstreamDeadlineMs?: number;\n\t/**\n\t * Optional metadata to include in API requests.\n\t * Providers extract the fields they understand and ignore the rest.\n\t * For example, Anthropic uses `user_id` for abuse tracking and rate limiting.\n\t */\n\tmetadata?: Record<string, unknown>;\n}\n\nexport type ProviderStreamOptions = StreamOptions & Record<string, unknown>;\n\nexport interface DeferredFetchOptions extends ProviderRequestOptions<Model<Api>> {\n\t/**\n\t * Maximum provider long-poll duration in milliseconds.\n\t * Defaults to 0, which performs one status check.\n\t */\n\twait?: number;\n}\n\n/** Request options for best-effort deferred-response cancellation. */\nexport type DeferredCancelOptions = ProviderRequestOptions<Model<Api>>;\n\n/**\n * Maps known APIs to their full provider-specific stream option types.\n * Type-only imports from API implementation modules are erased at emit, so\n * this is tree-shake safe.\n */\nexport interface ApiOptionsMap {\n\t\"anthropic-messages\": AnthropicOptions;\n\t\"openai-completions\": OpenAICompletionsOptions;\n\t\"openai-responses\": OpenAIResponsesOptions;\n\t\"openai-codex-responses\": OpenAICodexResponsesOptions;\n\t\"azure-openai-responses\": AzureOpenAIResponsesOptions;\n\t\"google-generative-ai\": GoogleOptions;\n\t\"google-vertex\": GoogleVertexOptions;\n\t\"mistral-conversations\": MistralOptions;\n\t\"bedrock-converse-stream\": BedrockOptions;\n\t\"pi-messages\": PiMessagesOptions;\n}\n\n/**\n * Full stream options for an API. Known APIs resolve to their concrete option\n * type; custom API strings fall back to the generic shape.\n */\nexport type ApiStreamOptions<TApi extends Api> = TApi extends keyof ApiOptionsMap\n\t? ApiOptionsMap[TApi]\n\t: StreamOptions & Record<string, unknown>;\n\n/**\n * The uniform stream contract of an API implementation module: every module\n * under `src/api/` exports `stream` and `streamSimple`; capable modules may also\n * export deferred-response methods. Lazy wrappers (`lazyApi()`) and provider\n * factories pass these around as values. This is the untyped dispatch shape;\n * per-API option typing lives on the implementation modules themselves and on\n * `Provider.stream()` via `ApiStreamOptions`.\n */\nexport interface ProviderStreams {\n\tstream(model: Model<Api>, context: TranscriptContext, options?: StreamOptions): AssistantMessageEventStream;\n\tstreamSimple(\n\t\tmodel: Model<Api>,\n\t\tcontext: TranscriptContext,\n\t\toptions?: SimpleStreamOptions,\n\t): AssistantMessageEventStream;\n\tfetchDeferred?(\n\t\tmodel: Model<Api>,\n\t\thandle: DeferredHandle,\n\t\toptions?: DeferredFetchOptions,\n\t): AssistantMessageEventStream;\n\tcancelDeferred?(model: Model<Api>, handle: DeferredHandle, options?: DeferredCancelOptions): Promise<void>;\n}\n\n/**\n * The uniform contract of an image-generation API implementation module:\n * every image API module under `src/api/` exports exactly `generateImages`,\n * so the module itself satisfies this interface. Lazy wrappers and\n * `createProvider({ images })` pass these around as values.\n */\nexport interface ProviderImages {\n\tgenerateImages(\n\t\tmodel: ImageModel<ImageApi>,\n\t\tcontext: ImagesContext,\n\t\toptions?: ImagesOptions,\n\t): Promise<AssistantImages>;\n}\n\n/** The uniform contract implemented by classifier API modules. */\nexport interface ProviderClassifier {\n\tclassify(\n\t\tmodel: ClassifierModel<ClassifierApi>,\n\t\tcontext: ClassifierContext,\n\t\toptions?: ClassifierOptions,\n\t): Promise<ClassifierResult>;\n}\n\nexport interface ClassifierOptions extends ProviderRequestOptions<ClassifierModel<ClassifierApi>> {\n\t/**\n\t * Divides the answer logits by this value before they are normalized into probabilities.\n\t * Values above 1 soften the distribution; values below 1 sharpen it. Must be positive.\n\t * APIs that cannot apply it ignore it.\n\t */\n\ttemperature?: number;\n}\n\nexport interface ImagesOptions extends ProviderRequestOptions<ImageModel<ImageApi>> {\n\t/**\n\t * Optional metadata to include in API requests.\n\t * Providers extract the fields they understand and ignore the rest.\n\t */\n\tmetadata?: Record<string, unknown>;\n}\n\nexport type ProviderImagesOptions = ImagesOptions & Record<string, unknown>;\n\n/**\n * Maps known image APIs to their request option types, like `ApiOptionsMap`\n * does for chat APIs.\n */\nexport interface ImageApiOptionsMap {\n\t\"openrouter-images\": ImagesOptions;\n\t\"openai-images\": OpenAIImagesOptions;\n}\n\n/**\n * Request options for an image API. Known APIs resolve to their concrete option\n * type; custom API strings fall back to the generic shape.\n */\nexport type ImageApiOptions<TApi extends ImageApi> = TApi extends keyof ImageApiOptionsMap\n\t? ImageApiOptionsMap[TApi]\n\t: ProviderImagesOptions;\n\n// Unified options with reasoning passed to streamSimple() and completeSimple()\nexport interface SimpleStreamOptions extends StreamOptions {\n\t/** Provider-neutral tool selection for simple requests. When omitted, adapters use provider-specific behavior. */\n\ttoolChoice?: ToolChoice;\n\treasoning?: ThinkingLevel;\n\t/** Ask a capable provider to return a durable handle and continue the request asynchronously. */\n\tdeferred?: boolean | { window?: \"15m\" | \"1h\" | \"24h\" };\n\t/** Custom token budgets for thinking levels (token-based providers only) */\n\tthinkingBudgets?: ThinkingBudgets;\n}\n\n// Generic StreamFunction with typed options.\n//\n// Contract:\n// - Receives a normalized transcript: the system prompt and tools live in the\n// leading system message, never on the context itself.\n// - Must return an AssistantMessageEventStream.\n// - Direct streamSimple() calls may throw synchronously when request auth is\n// missing. Once a stream is returned, request/model/runtime failures should\n// be encoded in the stream, not thrown.\n// - Error termination must produce an AssistantMessage with stopReason\n// \"error\" or \"aborted\" and errorMessage, emitted via the stream protocol.\nexport type StreamFunction<TApi extends Api = Api, TOptions extends StreamOptions = StreamOptions> = (\n\tmodel: Model<TApi>,\n\tcontext: TranscriptContext,\n\toptions?: TOptions,\n) => AssistantMessageEventStream;\n\nexport type ImagesFunction<TOptions extends ImagesOptions = ImagesOptions> = (\n\tmodel: ImageModel<ImageApi>,\n\tcontext: ImagesContext,\n\toptions?: TOptions,\n) => Promise<AssistantImages>;\n\nexport type ClassifierFunction<TOptions extends ClassifierOptions = ClassifierOptions> = (\n\tmodel: ClassifierModel<ClassifierApi>,\n\tcontext: ClassifierContext,\n\toptions?: TOptions,\n) => Promise<ClassifierResult>;\n\nexport interface TextSignatureV1 {\n\tv: 1;\n\tid: string;\n\tphase?: \"commentary\" | \"final_answer\";\n}\n\nexport interface TextContent {\n\ttype: \"text\";\n\ttext: string;\n\ttextSignature?: string; // e.g., for OpenAI responses, message metadata (legacy id string or TextSignatureV1 JSON)\n}\n\nexport interface ThinkingContent {\n\ttype: \"thinking\";\n\tthinking: string;\n\tthinkingSignature?: string; // Provider-specific opaque or serialized reasoning replay data\n\t/** When true, the thinking content was redacted by safety filters. The opaque\n\t * encrypted payload is stored in `thinkingSignature` so it can be passed back\n\t * to the API for multi-turn continuity. */\n\tredacted?: boolean;\n}\n\n/**\n * Boundary marker emitted by Anthropic server-side fallback, where one model's output gives way\n * to the next after a classifier refusal.\n *\n * This is public content rather than a stream-only event because it must survive the round trip:\n * \"Keep it exactly where it appeared. The API uses its position to validate the thinking blocks\n * around it, so a request that echoes thinking blocks from both sides of the boundary is rejected\n * if the block is omitted or moved.\"\n * https://platform.claude.com/docs/en/build-with-claude/refusals-and-fallback\n */\nexport interface FallbackContent {\n\ttype: \"fallback\";\n\t/** The model that declined. Echoes the model string sent when the declining hop is the request's own model. */\n\tfromModel: string;\n\t/** Resolved id of the model that continues. Always present. */\n\ttoModel: string;\n}\n\nexport interface ImageContent {\n\ttype: \"image\";\n\tdata: string; // base64 encoded image data\n\tmimeType: string; // e.g., \"image/jpeg\", \"image/png\"\n}\n\n/**\n * A document sent as model input, currently PDF only.\n *\n * Anthropic documents PDF as a platform capability — \"All active models support PDF processing\" —\n * routed through the same vision path as images, so it is not a per-model modality. A model\n * advertises it through `Model.input` containing `\"pdf\"`, which generated metadata sets only for\n * the runtimes that can actually serialize a document block. Providers that cannot are sent a\n * visible placeholder instead, exactly as they are for images they cannot accept.\n * https://platform.claude.com/docs/en/build-with-claude/pdf-support\n */\nexport interface DocumentContent {\n\ttype: \"document\";\n\t/** Base64-encoded document bytes. Amazon Bedrock takes raw bytes and decodes this itself. */\n\tdata: string;\n\t/**\n\t * The only media type either serializer implements. It is a literal rather than `string`\n\t * because both paths hardcode PDF — the Anthropic block emits `BetaBase64PDFSource`, whose\n\t * `media_type` is itself a fixed literal, and Bedrock emits `DocumentFormat.PDF` — so a wider\n\t * type would let a caller label arbitrary bytes as a PDF. Widening this union later is\n\t * non-breaking; narrowing it after release would not be. Note that adding a format is not a\n\t * media-type swap on the Anthropic side: plain text needs a structurally different source\n\t * variant (`BetaPlainTextSource`, `type: \"text\"`), and Bedrock's `doc`/`docx`/`xls`/`xlsx`/\n\t * `csv`/`html`/`md` formats have no Anthropic source variant at all.\n\t */\n\tmimeType: \"application/pdf\";\n\t/**\n\t * Optional caller-supplied label. Amazon Bedrock requires a name and warns that it \"is\n\t * vulnerable to prompt injections\", so the Bedrock path sanitizes this to the characters AWS\n\t * permits and falls back to a neutral generated name.\n\t */\n\tname?: string;\n}\n\nexport interface ToolCall {\n\ttype: \"toolCall\";\n\tid: string;\n\tname: string;\n\targuments: JsonObject;\n\tthoughtSignature?: string; // Google-specific: opaque signature for reusing thought context\n\t/** OpenAI Responses namespace for calls to dynamically loaded or namespaced tools. */\n\tnamespace?: string;\n\targumentsError?: string;\n}\n\nexport interface Usage {\n\tinput: number;\n\toutput: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\t/** Subset of `cacheWrite` written with 1h retention. Anthropic and Bedrock report this split. */\n\tcacheWrite1h?: number;\n\t/**\n\t * Reasoning/thinking tokens, when the provider reports them. This is a subset of\n\t * `output`: `output` already includes these tokens. Set to a number (possibly 0) by\n\t * providers that expose a reasoning breakdown; left undefined by providers that don't.\n\t */\n\treasoning?: number;\n\ttotalTokens: number;\n\tcost: {\n\t\tinput: number;\n\t\toutput: number;\n\t\tcacheRead: number;\n\t\tcacheWrite: number;\n\t\ttotal: number;\n\t};\n}\n\nexport type StopReason = \"pending\" | \"stop\" | \"length\" | \"toolUse\" | \"error\" | \"aborted\" | \"deferred\";\n\nexport type JsonValue = null | boolean | number | string | readonly JsonValue[] | JsonObject;\nexport type JsonObject = { [key: string]: JsonValue };\n\ntype IsAny<T> = 0 extends 1 & T ? true : false;\ntype IsExactlyJsonValue<T> = [T] extends [JsonValue] ? ([JsonValue] extends [T] ? true : false) : false;\ntype IsJsonProperty<T> =\n\tIsAny<T> extends true\n\t\t? false\n\t\t: unknown extends T\n\t\t\t? false\n\t\t\t: [Exclude<T, undefined>] extends [never]\n\t\t\t\t? true\n\t\t\t\t: IsJsonCompatible<Exclude<T, undefined>>;\ntype InvalidJsonKeys<T extends object> = {\n\t[TKey in keyof T]-?: TKey extends string | number ? (IsJsonProperty<T[TKey]> extends true ? never : TKey) : TKey;\n}[keyof T];\ntype IsJsonCompatible<T> =\n\tIsAny<T> extends true\n\t\t? false\n\t\t: unknown extends T\n\t\t\t? false\n\t\t\t: IsExactlyJsonValue<T> extends true\n\t\t\t\t? true\n\t\t\t\t: T extends null | boolean | number | string\n\t\t\t\t\t? true\n\t\t\t\t\t: T extends undefined\n\t\t\t\t\t\t? false\n\t\t\t\t\t\t: T extends readonly (infer TItem)[]\n\t\t\t\t\t\t\t? IsJsonCompatible<TItem>\n\t\t\t\t\t\t\t: T extends (...args: never[]) => unknown\n\t\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t\t: T extends object\n\t\t\t\t\t\t\t\t\t? [InvalidJsonKeys<T>] extends [never]\n\t\t\t\t\t\t\t\t\t\t? true\n\t\t\t\t\t\t\t\t\t\t: false\n\t\t\t\t\t\t\t\t\t: false;\n\n/** The JSON representation of a typed in-memory value. Optional object properties remain optional. */\nexport type JsonRepresentation<T> =\n\tIsAny<T> extends true\n\t\t? JsonValue\n\t\t: unknown extends T\n\t\t\t? JsonValue\n\t\t\t: [T] extends [JsonValue]\n\t\t\t\t? T\n\t\t\t\t: T extends readonly unknown[]\n\t\t\t\t\t? { [TKey in keyof T]: JsonRepresentation<Exclude<T[TKey], undefined>> }\n\t\t\t\t\t: T extends object\n\t\t\t\t\t\t? { [TKey in keyof T]: JsonRepresentation<Exclude<T[TKey], undefined>> }\n\t\t\t\t\t\t: never;\n\nexport interface DeferredHandle {\n\tprovider: string;\n\tmodelId: string;\n\tapi: string;\n\t/** Provider token, such as a response id or batch id plus row id. */\n\tid: string;\n\texpiresAt?: number;\n\tpollAfterMs?: number;\n\t/** Provider conversion data required to reconstruct the final assistant message. */\n\tdata?: JsonValue;\n}\n\n/**\n * System instructions and tool declarations at one point in the transcript.\n *\n * The leading system message is the system prompt. Later system messages change it:\n * `content` adds instructions from that point on, `sections` replace or remove named\n * prompt sections, and `toolsAdded`/`toolsRemoved` change the tool set. Replaying\n * every system message in order yields the current prompt and tools. Providers that\n * accept system messages mid-conversation send each one in place; other providers\n * rebuild the leading system message from the replayed state.\n */\nexport interface SystemMessage {\n\trole: \"system\";\n\t/** Instruction text. On the leading message this is the base prompt; later, additional instructions. */\n\tcontent: string | TextContent[];\n\t/**\n\t * Named, ordered prompt sections rendered verbatim after `content`. The leading message\n\t * declares them; later messages replace sections by name, and `null` removes one. Keep\n\t * each section self-delimiting (a tag, a heading) so the model can relate an update to\n\t * the original. Avoid integer-like names; JSON objects reorder those.\n\t */\n\tsections?: Record<string, string | null>;\n\t/** Complete definitions of tools that become available at this point. */\n\ttoolsAdded?: Tool[];\n\t/** Tools that stop being available at this point. */\n\ttoolsRemoved?: ToolReference[];\n\ttimestamp: number; // Unix timestamp in milliseconds\n}\n\nexport interface UserMessage {\n\trole: \"user\";\n\tcontent: string | (TextContent | ImageContent | DocumentContent)[];\n\ttimestamp: number; // Unix timestamp in milliseconds\n}\n\nexport interface AssistantMessage {\n\trole: \"assistant\";\n\tcontent: (TextContent | ThinkingContent | ToolCall | FallbackContent)[];\n\tapi: Api;\n\tprovider: ProviderId;\n\tmodel: string;\n\tresponseModel?: string; // Concrete model reported by the provider when different from the requested `model`\n\tresponseId?: string; // Provider-specific response/message identifier when the upstream API exposes one\n\t/** Exact provider-native effort level used for this response. Absent for legacy or unmanaged responses. */\n\tproviderThinkingLevel?: string;\n\tdiagnostics?: AssistantMessageDiagnostic[]; // Redacted provider/runtime diagnostics for failures and recoveries.\n\tusage: Usage;\n\tstopReason: StopReason;\n\tdeferred?: DeferredHandle;\n\terrorMessage?: string;\n\t/** Server-requested retry delay in ms (`Retry-After` or a body `retry_after`), when the provider sent one. */\n\tretryAfterMs?: number;\n\trawStopReason?: string;\n\t/**\n\t * Provider indication of whether the model explicitly ended its turn.\n\t * Preserved for debugging and does not currently affect agent control flow.\n\t */\n\tendTurn?: boolean;\n\ttimestamp: number; // Unix timestamp in milliseconds\n\tdurationMs?: number;\n}\n\n/** A tool call made by another tool, such as a codemode script. */\nexport interface NestedToolCallRecord {\n\tid: string;\n\tname: string;\n\t/** Omitted when over the size limits. */\n\targuments?: JsonObject;\n\t/** UTF-8 JSON size when arguments are omitted. */\n\targumentsBytes?: number;\n\tstatus: \"ok\" | \"error\" | \"unfinished\";\n\tdurationMs?: number;\n\terror?: string;\n}\n\n/** Bounded nested-call record. Results are not recorded. */\nexport interface NestedToolCalls {\n\tcalls: NestedToolCallRecord[];\n\tcomplete: boolean;\n}\n\nexport type ToolResultMessage<TDetails = JsonValue> =\n\tIsJsonCompatible<TDetails> extends true\n\t\t? {\n\t\t\t\trole: \"toolResult\";\n\t\t\t\ttoolCallId: string;\n\t\t\t\ttoolName: string;\n\t\t\t\tcontent: (TextContent | ImageContent)[]; // Supports text and images\n\t\t\t\tdetails?: JsonRepresentation<TDetails>;\n\t\t\t\t/** Usage from the tool execution itself, if available. Not part of main LLM context accounting. */\n\t\t\t\tusage?: Usage;\n\t\t\t\t/** Nested calls retained in the session, not sent to the model. */\n\t\t\t\tnestedCalls?: NestedToolCalls;\n\t\t\t\tisError: boolean;\n\t\t\t\ttimestamp: number; // Unix timestamp in milliseconds\n\t\t\t\tdurationMs?: number;\n\t\t\t}\n\t\t: never;\n\nexport type Message = SystemMessage | UserMessage | AssistantMessage | ToolResultMessage;\n\nexport type ImagesInputContent = TextContent | ImageContent;\nexport type ImagesOutputContent = TextContent | ImageContent;\n\nexport interface ImagesContext {\n\tinput: ImagesInputContent[];\n}\n\nexport type ImagesStopReason = \"stop\" | \"error\" | \"aborted\";\n\nexport interface AssistantImages {\n\tapi: ImageApi;\n\tprovider: ProviderId;\n\tmodel: string;\n\toutput: ImagesOutputContent[];\n\tresponseId?: string;\n\tusage?: Usage;\n\tstopReason: ImagesStopReason;\n\terrorMessage?: string;\n\ttimestamp: number; // Unix timestamp in milliseconds\n}\n\nexport interface ClassifierChoiceQuestion {\n\ttype: \"choice\";\n\tinstructions: string;\n\tcriteria: Record<string, string>;\n}\n\nexport interface ClassifierScoreQuestion {\n\ttype: \"score\";\n\tinstructions: string;\n\tcriteria: string[];\n}\n\nexport interface ClassifierBoolQuestion {\n\ttype: \"bool\";\n\tinstructions: string;\n\tcriteria: { true: string; false: string };\n}\n\nexport type ClassifierQuestion = ClassifierChoiceQuestion | ClassifierScoreQuestion | ClassifierBoolQuestion;\n\nexport interface ClassifierContext {\n\tstate: JsonObject;\n\t/**\n\t * Images judged together with `state`. Only models whose `input` includes `\"image\"` accept them;\n\t * other models return an error result.\n\t */\n\timages?: ImageContent[];\n\tquestions: Record<string, ClassifierQuestion>;\n}\n\nexport interface ClassifierChoiceAnswer {\n\ttype: \"choice\";\n\tchoice: string;\n\tprobabilities: Record<string, number>;\n\tconfidence: number;\n}\n\nexport interface ClassifierScoreAnswer {\n\ttype: \"score\";\n\tscore: number;\n\tconfidence: number;\n}\n\nexport interface ClassifierBoolAnswer {\n\ttype: \"bool\";\n\tprobability: number;\n}\n\nexport type ClassifierAnswer = ClassifierChoiceAnswer | ClassifierScoreAnswer | ClassifierBoolAnswer;\nexport type ClassifierStopReason = \"stop\" | \"error\" | \"aborted\";\n\nexport interface ClassifierResult {\n\tapi: ClassifierApi;\n\tprovider: ProviderId;\n\tmodel: string;\n\tanswers: Record<string, ClassifierAnswer>;\n\t/** Token usage and cost at the model's catalog price, when reported. */\n\tusage?: Usage;\n\tstopReason: ClassifierStopReason;\n\terrorMessage?: string;\n\ttimestamp: number; // Unix timestamp in milliseconds\n}\n\nimport type { TSchema } from \"typebox\";\n\n/** OpenAI grammar variants for constrained sampling. */\nexport type GrammarFormat = \"openai_lark\" | \"openai_regex\";\n\nexport type GrammarVariants = Partial<Record<GrammarFormat, string>>;\n\n/**\n * Optional provider-side constrained sampling configs for a tool.\n *\n * The `json_schema` value roughly maps to the concept of `strict` in APIs which is\n * implemented as json-schema constrained sampling by APIs. Grammar variants let\n * callers provide provider-specific encodings of the same intended language.\n */\nexport type ConstrainedSamplingConfig =\n\t| {\n\t\t\ttype: \"json_schema\";\n\t\t\tstrict: \"prefer\" | \"require\";\n\t }\n\t| {\n\t\t\ttype: \"grammar\";\n\t\t\tvariants: GrammarVariants;\n\t };\n\nexport interface Tool<TParameters extends TSchema = TSchema> {\n\tname: string;\n\tdescription: string;\n\tparameters: TParameters;\n\tconstrainedSampling?: false | ConstrainedSamplingConfig;\n}\n\nexport interface ToolReference {\n\tname: string;\n}\n\n/**\n * Request input accepted by the public stream entry points (`Models.stream()`,\n * `streamSimple()`, ...). `systemPrompt` and `tools` are shorthand for a leading\n * system message; `normalizeContext()` folds them into one before the request\n * reaches a provider.\n */\nexport interface Context {\n\tsystemPrompt?: string;\n\tmessages: Message[];\n\ttools?: Tool[];\n}\n\ndeclare const transcriptContextBrand: unique symbol;\n\n/**\n * Normalized request context passed to providers and API implementations. The\n * prompt and tool declarations are carried by the transcript's system messages.\n * Only `normalizeContext()` produces this type, so a raw `Context` cannot reach\n * provider code by accident.\n */\nexport type TranscriptContext = {\n\tmessages: Message[];\n\treadonly [transcriptContextBrand]: true;\n};\n\n/**\n * Event protocol for AssistantMessageEventStream.\n *\n * Successful streams emit `start` before partial updates and terminate with\n * `done`. A stream may terminate directly with `error` when request setup fails\n * before generation starts; after `start`, failures also terminate with `error`.\n * Direct `streamSimple()` calls throw synchronously when request auth is missing.\n * Updates and `done` must never appear before `start`.\n *\n * Tool-call arguments at `toolcall_start` are provider-specific;\n * `toolcall_delta` carries subsequent JSON updates.\n */\nexport type AssistantMessageEvent =\n\t| { type: \"start\"; partial: AssistantMessage }\n\t| { type: \"text_start\"; contentIndex: number; partial: AssistantMessage }\n\t| { type: \"text_delta\"; contentIndex: number; delta: string; partial: AssistantMessage }\n\t| { type: \"text_end\"; contentIndex: number; content: string; partial: AssistantMessage }\n\t| { type: \"thinking_start\"; contentIndex: number; partial: AssistantMessage }\n\t| { type: \"thinking_delta\"; contentIndex: number; delta: string; partial: AssistantMessage }\n\t| { type: \"thinking_end\"; contentIndex: number; content: string; partial: AssistantMessage }\n\t| { type: \"toolcall_start\"; contentIndex: number; partial: AssistantMessage }\n\t| { type: \"toolcall_delta\"; contentIndex: number; delta: string; partial: AssistantMessage }\n\t| { type: \"toolcall_end\"; contentIndex: number; toolCall: ToolCall; partial: AssistantMessage }\n\t| {\n\t\t\ttype: \"done\";\n\t\t\treason: Extract<StopReason, \"stop\" | \"length\" | \"toolUse\" | \"deferred\">;\n\t\t\tmessage: AssistantMessage;\n\t }\n\t| { type: \"error\"; reason: Extract<StopReason, \"aborted\" | \"error\">; error: AssistantMessage };\n\n/** Service tiers a model can advertise beyond standard processing. */\nexport type ModelServiceTierId = \"priority\" | \"ultrafast\";\n\n/**\n * A service tier a model advertises, following Codex's `ModelInfo.service_tiers`, with the provider's\n * published per-million-token rates for that tier.\n *\n * Adapters send a tier only when the model advertises it. `flex` is an API request option and needs\n * no advertisement.\n */\nexport interface ModelServiceTier {\n\tid: ModelServiceTierId;\n\tcost: ModelCost;\n}\n\n/**\n * Explicit routing metadata that marks a model as the fast-inference variant of another model.\n *\n * Presence of this field — never a `-fast` name suffix — is what gives a model fast semantics.\n * A provider, `models.json` custom model, or extension may own an exact `<base>-fast` ID without\n * this metadata, in which case it is an ordinary model and routes exactly as it is declared.\n */\nexport interface ModelFastRoute {\n\t/** Canonical ID of the normal-speed model this variant pairs with, in the same provider. */\n\tbaseModelId: string;\n\t/** Model ID to send upstream. OpenAI-style routing keeps the base ID; a provider with real fast siblings sends its own ID. */\n\tupstreamModelId: string;\n\t/** Service tier to send with the request. Set only for providers that route fast traffic through an OpenAI-style tier. */\n\tserviceTier?: ModelServiceTierId;\n\t/** Anthropic inference speed to send with the request. Set only for Claude models that support fast mode. */\n\tspeed?: \"fast\";\n}\n\n/** Fields shared by every catalog entry, regardless of what you can do with it. */\nexport interface BaseModel<TApi extends string> {\n\tid: string;\n\tname: string;\n\tapi: TApi;\n\tprovider: ProviderId;\n\tbaseUrl: string;\n\tinput: ModelInputModality[];\n\t/** Provider input limits and cache-safe preprocessing metadata. */\n\tinputLimits?: ModelInputLimits;\n\tcost: ModelCost;\n\theaders?: Record<string, string>;\n}\n\n/** Chat model: usable with `stream()` and friends. */\nexport interface Model<TApi extends Api> extends BaseModel<TApi> {\n\t/**\n\t * Optional: chat is the default model type, so models without `type` are chat\n\t * models. Narrow mixed model lists with `isModelType()` instead of comparing\n\t * `type` directly.\n\t */\n\ttype?: \"chat\";\n\treasoning: boolean;\n\t/**\n\t * Maps pi thinking levels to provider/model-specific values.\n\t * Missing keys use provider defaults. null marks a level as unsupported.\n\t */\n\tthinkingLevelMap?: ThinkingLevelMap;\n\t/** Prompt cache lifetimes per retention tier. Unset when the provider's cache behavior is unknown. */\n\tpromptCache?: ModelPromptCache;\n\tcontextWindow: number;\n\tmaxTokens: number;\n\t/** Default sampling parameters for this model. See {@link StreamOptions.samplingParams}; per-request keys override these. */\n\tsamplingParams?: SamplingParams;\n\t/** Sampling parameter overrides selected by the effective pi thinking level. */\n\tsamplingParamsByThinkingLevel?: SamplingParamsByThinkingLevel;\n\t/**\n\t * Marks this model as the fast-inference variant of {@link ModelFastRoute.baseModelId} and carries the\n\t * upstream routing it needs. Absent on every normal model.\n\t */\n\tfastRoute?: ModelFastRoute;\n\t/**\n\t * Service tiers this model advertises. When set, the Codex adapter sends only advertised tiers.\n\t * When unset, the model carries no tier metadata and only Ultrafast is withheld.\n\t */\n\tserviceTiers?: ModelServiceTier[];\n\t/** Compatibility overrides for OpenAI-compatible APIs. If not set, auto-detected from baseUrl. */\n\tcompat?: TApi extends \"openai-completions\"\n\t\t? OpenAICompletionsCompat\n\t\t: TApi extends \"openai-responses\" | \"azure-openai-responses\" | \"openai-codex-responses\"\n\t\t\t? OpenAIResponsesCompat\n\t\t\t: TApi extends \"anthropic-messages\"\n\t\t\t\t? AnthropicMessagesCompat\n\t\t\t\t: TApi extends \"bedrock-converse-stream\"\n\t\t\t\t\t? BedrockCompat\n\t\t\t\t\t: TApi extends \"mistral-conversations\"\n\t\t\t\t\t\t? MistralConversationsCompat\n\t\t\t\t\t\t: never;\n}\n\n/** Image-generation model: usable with `generateImages()` only. */\nexport interface ImageModel<TApi extends ImageApi> extends BaseModel<TApi> {\n\ttype: \"image\";\n\t/** Output modalities. Always includes `\"image\"`; `\"text\"` means the model can also return text blocks. */\n\toutput: (\"text\" | \"image\")[];\n}\n\n/** Structured classifier model: usable with `classify()` only. */\nexport interface ClassifierModel<TApi extends ClassifierApi> extends BaseModel<TApi> {\n\ttype: \"classifier\";\n\tcontextWindow: number;\n}\n\n/** Dedicated compaction model, excluded from chat model selection. */\nexport interface CompactorModel<TApi extends CompactorApi = CompactorApi> extends BaseModel<TApi> {\n\ttype: \"compactor\";\n}\n\n/** Model shape for each model type. */\nexport interface ModelTypeMap {\n\tchat: Model<Api>;\n\timage: ImageModel<ImageApi>;\n\tclassifier: ClassifierModel<ClassifierApi>;\n\tcompactor: CompactorModel;\n}\n\n/** What a catalog entry is for. Decides which `Models` operation accepts it. */\nexport type ModelType = keyof ModelTypeMap;\n\n/** Anything a provider can list. Narrow with `isModelType()`. */\nexport type AnyModel = ModelTypeMap[ModelType];\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { TelemetryContext } from \"@earendil-works/pi-telemetry\";\nimport type { AnthropicOptions } from \"./api/anthropic-messages.ts\";\nimport type { AzureOpenAIResponsesOptions } from \"./api/azure-openai-responses.ts\";\nimport type { BedrockOptions } from \"./api/bedrock-converse-stream.ts\";\nimport type { GoogleOptions } from \"./api/google-generative-ai.ts\";\nimport type { GoogleVertexOptions } from \"./api/google-vertex.ts\";\nimport type { MistralOptions } from \"./api/mistral-conversations.ts\";\nimport type { OpenAICodexResponsesOptions } from \"./api/openai-codex-responses.ts\";\nimport type { OpenAICompletionsOptions } from \"./api/openai-completions.ts\";\nimport type { OpenAIImagesOptions } from \"./api/openai-images.ts\";\nimport type { OpenAIResponsesOptions } from \"./api/openai-responses.ts\";\nimport type { PiMessagesOptions } from \"./api/pi-messages.ts\";\nimport type {\n\tAnthropicMessagesCompat,\n\tBedrockCompat,\n\tMistralConversationsCompat,\n\tOpenAICompletionsCompat,\n\tOpenAIResponsesCompat,\n\tSystemOneCompat,\n} from \"./providers/compat-schema.ts\";\nimport type {\n\tCacheRetention,\n\tModelCost,\n\tModelInputLimits,\n\tModelInputModality,\n\tModelPromptCache,\n\tModelThinkingLevel,\n\tThinkingLevel,\n\tThinkingLevelMap,\n} from \"./providers/model-schema.ts\";\nimport type { AssistantMessageDiagnostic } from \"./utils/diagnostics.ts\";\nimport type { AssistantMessageEventStream } from \"./utils/event-stream.ts\";\nimport type { ClientIdentity } from \"./utils/identity.ts\";\n\nexport type {\n\tAnthropicAllowedFallbackModel,\n\tAnthropicMessagesCompat,\n\tBedrockCompat,\n\tChatTemplateKwargValue,\n\tMistralConversationsCompat,\n\tOpenAICompletionsCompat,\n\tOpenAIResponsesCompat,\n\tOpenRouterRouting,\n\tSessionAffinityFormat,\n\tSystemOneCompat,\n\tThinkingTokenBudgetField,\n\tVercelGatewayRouting,\n} from \"./providers/compat-schema.ts\";\nexport type {\n\tCacheRetention,\n\tModelCost,\n\tModelCostRates,\n\tModelCostTier,\n\tModelImageInputLimits,\n\tModelImageResizeOptions,\n\tModelInputLimits,\n\tModelInputModality,\n\tModelPromptCache,\n\tModelThinkingLevel,\n\tThinkingLevel,\n\tThinkingLevelMap,\n} from \"./providers/model-schema.ts\";\nexport type { AssistantMessageEventStream } from \"./utils/event-stream.ts\";\n\nexport type KnownApi =\n\t| \"openai-completions\"\n\t| \"mistral-conversations\"\n\t| \"openai-responses\"\n\t| \"azure-openai-responses\"\n\t| \"openai-codex-responses\"\n\t| \"anthropic-messages\"\n\t| \"bedrock-converse-stream\"\n\t| \"google-generative-ai\"\n\t| \"google-vertex\"\n\t| \"pi-messages\";\n\nexport type Api = KnownApi | (string & {});\n\nexport type KnownImageApi = \"openrouter-images\" | \"openai-images\";\n\nexport type ImageApi = KnownImageApi | (string & {});\n\nexport type KnownClassifierApi =\n\t| \"typesafe-system-one\"\n\t| \"cloudflare-workers-ai-system-one\"\n\t| \"llama-cpp-classify\"\n\t| \"openai-decisions\";\n\nexport type ClassifierApi = KnownClassifierApi | (string & {});\n\nexport type CompactorApi = \"morph-compact\";\n\nexport type KnownProvider =\n\t| \"amazon-bedrock\"\n\t| \"ant-ling\"\n\t| \"anthropic\"\n\t| \"anthropic-api\"\n\t| \"google\"\n\t| \"google-vertex\"\n\t| \"openai\"\n\t| \"openai-api\"\n\t| \"azure\"\n\t| \"azure-openai-responses\"\n\t| \"openai-codex\"\n\t| \"openai-decisions\"\n\t| \"openai-images\"\n\t| \"radius\"\n\t| \"typesafe\"\n\t| \"morph\"\n\t| \"nvidia\"\n\t| \"deepseek\"\n\t| \"github-copilot\"\n\t| \"xai\"\n\t| \"groq\"\n\t| \"cerebras\"\n\t| \"openrouter\"\n\t| \"vercel-ai-gateway\"\n\t| \"zai\"\n\t| \"zai-coding-cn\"\n\t| \"mistral\"\n\t| \"minimax\"\n\t| \"minimax-cn\"\n\t| \"moonshotai\"\n\t| \"moonshotai-cn\"\n\t| \"huggingface\"\n\t| \"fireworks\"\n\t| \"together\"\n\t| \"baseten\"\n\t| \"opencode\"\n\t| \"opencode-go\"\n\t| \"kimi-coding\"\n\t| \"meta\"\n\t| \"cloudflare-workers-ai\"\n\t| \"cloudflare-ai-gateway\"\n\t| \"qwen-token-plan\"\n\t| \"qwen-token-plan-cn\"\n\t| \"qwen-token-plan-individual\"\n\t| \"xiaomi\"\n\t| \"xiaomi-token-plan-cn\"\n\t| \"xiaomi-token-plan-ams\"\n\t| \"xiaomi-token-plan-sgp\";\nexport type ProviderId = KnownProvider | string;\n\nexport type ToolChoice = \"auto\" | \"none\";\nexport type SamplingParams = Record<string, unknown>;\nexport type SamplingParamsByThinkingLevel = Partial<Record<ModelThinkingLevel, SamplingParams>>;\n/** Token budgets for each thinking level (token-based providers only) */\nexport interface ThinkingBudgets {\n\tminimal?: number;\n\tlow?: number;\n\tmedium?: number;\n\thigh?: number;\n}\n\n// Base options all providers share\nexport type Transport = \"sse\" | \"websocket\" | \"websocket-cached\" | \"auto\";\n\n/** Provider-scoped environment overrides. Values take precedence over process.env. */\nexport type ProviderEnv = Record<string, string>;\nexport type ProviderHeaders = Record<string, string | null>;\nexport type FetchFunction = typeof globalThis.fetch;\n\nexport interface ProviderResponse {\n\tstatus: number;\n\theaders: Record<string, string>;\n}\n\n/** Authentication, HTTP transport, and lifecycle callbacks shared by provider requests. */\nexport interface ProviderRequestOptions<TModel = Model<Api>> {\n\tsignal?: AbortSignal;\n\t/** Explicit parent context for telemetry produced by this logical request. */\n\ttelemetryContext?: TelemetryContext;\n\tapiKey?: string;\n\t/**\n\t * Optional fetch implementation for provider HTTP requests.\n\t * Defaults to `globalThis.fetch`. Provider adapters that cannot inject a custom implementation may reject it.\n\t * This does not affect WebSocket transports.\n\t */\n\tfetch?: FetchFunction;\n\t/**\n\t * Provider-scoped environment values. These take precedence over process.env for\n\t * provider configuration such as regional settings, endpoint placeholders, and\n\t * proxy variables.\n\t */\n\tenv?: ProviderEnv;\n\t/**\n\t * Optional callback for inspecting or replacing provider payloads before sending.\n\t * Return undefined to keep the payload unchanged.\n\t */\n\tonPayload?: (payload: unknown, model: TModel) => unknown | undefined | Promise<unknown | undefined>;\n\t/**\n\t * Optional callback invoked after an HTTP response is received.\n\t */\n\tonResponse?: (response: ProviderResponse, model: TModel) => void | Promise<void>;\n\t/**\n\t * Optional custom HTTP headers to include in API requests.\n\t * Merged with provider defaults; caller values override default headers.\n\t * On AWS Bedrock these are injected via a Smithy `build`-step middleware so\n\t * they are covered by SigV4 signing; reserved headers (`x-amz-*`,\n\t * `authorization`, `host`) are silently ignored to preserve SigV4 / bearer auth.\n\t * A null value suppresses a provider/API default header with the same name.\n\t */\n\theaders?: ProviderHeaders;\n\t/**\n\t * How the request identifies the calling app: `User-Agent` and provider attribution headers.\n\t * Absent fields use pi-ai's defaults: a detailed `User-Agent` and no attribution.\n\t */\n\tidentity?: ClientIdentity;\n\t/**\n\t * HTTP request timeout in milliseconds for providers/SDKs that support it.\n\t * For example, OpenAI and Anthropic SDK clients default to 10 minutes.\n\t */\n\ttimeoutMs?: number;\n\t/**\n\t * Maximum retry attempts for providers/SDKs that support client-side retries.\n\t * For example, OpenAI and Anthropic SDK clients default to 2.\n\t */\n\tmaxRetries?: number;\n\t/**\n\t * Maximum delay in milliseconds to wait for a retry when the server requests a long wait.\n\t * If the server's requested delay exceeds this value, the request fails immediately\n\t * with an error containing the requested delay, allowing higher-level retry logic\n\t * to handle it with user visibility.\n\t * Default: 60000 (60 seconds). Set to 0 to disable the cap.\n\t */\n\tmaxRetryDelayMs?: number;\n}\n\nexport interface StreamOptions extends ProviderRequestOptions<Model<Api>> {\n\t/**\n\t * Optional callback invoked after an HTTP response is received and before\n\t * its body stream is consumed.\n\t */\n\tonResponse?: (response: ProviderResponse, model: Model<Api>) => void | Promise<void>;\n\t/**\n\t * Optional observer for each parsed provider stream event before Pi normalization.\n\t * Event data is adapter-owned and must be treated as read-only.\n\t * Adapter support is explicit; unsupported adapters do not invoke it.\n\t */\n\tonProviderStreamEvent?: (data: unknown, model: Model<Api>) => void | Promise<void>;\n\ttemperature?: number;\n\t/**\n\t * Arbitrary sampling parameters merged into the request body as-is, after the named request\n\t * fields, so keys here override them. Lets custom OpenAI-compatible servers (llama.cpp, vLLM,\n\t * SGLang, ...) receive parameters pi does not model, e.g. `top_p`, `top_k`, `min_p`,\n\t * `repetition_penalty`. Merged over `Model.samplingParams` per key. Only applied by\n\t * OpenAI-compatible adapters (completions, responses, Azure responses); other APIs ignore it.\n\t */\n\tsamplingParams?: SamplingParams;\n\tmaxTokens?: number;\n\t/**\n\t * Preferred transport for providers that support multiple transports.\n\t * Providers that do not support this option ignore it.\n\t */\n\ttransport?: Transport;\n\t/**\n\t * Prompt cache retention preference. Providers map this to their supported values.\n\t * Default: \"short\".\n\t */\n\tcacheRetention?: CacheRetention;\n\t/**\n\t * Optional session identifier for providers that support session-based caching.\n\t * Providers can use this to enable prompt caching, request routing, or other\n\t * session-aware features. Ignored by providers that don't support it.\n\t */\n\tsessionId?: string;\n\t/**\n\t * WebSocket connect timeout in milliseconds for providers that support\n\t * WebSocket transports. This covers the connection/open handshake only;\n\t * HTTP/SDK idleness uses `timeoutMs`, while gaps between decoded provider\n\t * stream events use `streamDeadlineMs`.\n\t */\n\twebsocketConnectTimeoutMs?: number;\n\t/**\n\t * Maximum idle gap in milliseconds between two provider stream events.\n\t *\n\t * Enforced below the HTTP layer, so a response body that stalls without ever\n\t * rejecting the adapter's async iterator (for example a decompression failure\n\t * that destroys the stream silently, #2553) still settles the attempt as a\n\t * retryable transport error instead of hanging forever. The timer restarts on\n\t * every event, so it never caps total stream duration.\n\t *\n\t * Defaults to 300000 ms. `0` (or any non-positive value) disables it.\n\t */\n\tstreamDeadlineMs?: number;\n\t/**\n\t * Optional metadata to include in API requests.\n\t * Providers extract the fields they understand and ignore the rest.\n\t * For example, Anthropic uses `user_id` for abuse tracking and rate limiting.\n\t */\n\tmetadata?: Record<string, unknown>;\n}\n\nexport type ProviderStreamOptions = StreamOptions & Record<string, unknown>;\n\nexport interface DeferredFetchOptions extends ProviderRequestOptions<Model<Api>> {\n\t/**\n\t * Maximum provider long-poll duration in milliseconds.\n\t * Defaults to 0, which performs one status check.\n\t */\n\twait?: number;\n}\n\n/** Request options for best-effort deferred-response cancellation. */\nexport type DeferredCancelOptions = ProviderRequestOptions<Model<Api>>;\n\n/**\n * Maps known APIs to their full provider-specific stream option types.\n * Type-only imports from API implementation modules are erased at emit, so\n * this is tree-shake safe.\n */\nexport interface ApiOptionsMap {\n\t\"anthropic-messages\": AnthropicOptions;\n\t\"openai-completions\": OpenAICompletionsOptions;\n\t\"openai-responses\": OpenAIResponsesOptions;\n\t\"openai-codex-responses\": OpenAICodexResponsesOptions;\n\t\"azure-openai-responses\": AzureOpenAIResponsesOptions;\n\t\"google-generative-ai\": GoogleOptions;\n\t\"google-vertex\": GoogleVertexOptions;\n\t\"mistral-conversations\": MistralOptions;\n\t\"bedrock-converse-stream\": BedrockOptions;\n\t\"pi-messages\": PiMessagesOptions;\n}\n\n/**\n * Full stream options for an API. Known APIs resolve to their concrete option\n * type; custom API strings fall back to the generic shape.\n */\nexport type ApiStreamOptions<TApi extends Api> = TApi extends keyof ApiOptionsMap\n\t? ApiOptionsMap[TApi]\n\t: StreamOptions & Record<string, unknown>;\n\n/**\n * The uniform stream contract of an API implementation module: every module\n * under `src/api/` exports `stream` and `streamSimple`; capable modules may also\n * export deferred-response methods. Lazy wrappers (`lazyApi()`) and provider\n * factories pass these around as values. This is the untyped dispatch shape;\n * per-API option typing lives on the implementation modules themselves and on\n * `Provider.stream()` via `ApiStreamOptions`.\n */\nexport interface ProviderStreams {\n\tstream(model: Model<Api>, context: TranscriptContext, options?: StreamOptions): AssistantMessageEventStream;\n\tstreamSimple(\n\t\tmodel: Model<Api>,\n\t\tcontext: TranscriptContext,\n\t\toptions?: SimpleStreamOptions,\n\t): AssistantMessageEventStream;\n\tfetchDeferred?(\n\t\tmodel: Model<Api>,\n\t\thandle: DeferredHandle,\n\t\toptions?: DeferredFetchOptions,\n\t): AssistantMessageEventStream;\n\tcancelDeferred?(model: Model<Api>, handle: DeferredHandle, options?: DeferredCancelOptions): Promise<void>;\n}\n\n/**\n * The uniform contract of an image-generation API implementation module:\n * every image API module under `src/api/` exports exactly `generateImages`,\n * so the module itself satisfies this interface. Lazy wrappers and\n * `createProvider({ images })` pass these around as values.\n */\nexport interface ProviderImages {\n\tgenerateImages(\n\t\tmodel: ImageModel<ImageApi>,\n\t\tcontext: ImagesContext,\n\t\toptions?: ImagesOptions,\n\t): Promise<AssistantImages>;\n}\n\n/** The uniform contract implemented by classifier API modules. */\nexport interface ProviderClassifier {\n\tclassify(\n\t\tmodel: ClassifierModel<ClassifierApi>,\n\t\tcontext: ClassifierContext,\n\t\toptions?: ClassifierOptions,\n\t): Promise<ClassifierResult>;\n}\n\nexport interface ClassifierOptions extends ProviderRequestOptions<ClassifierModel<ClassifierApi>> {\n\t/**\n\t * Divides the answer logits by this value before they are normalized into probabilities.\n\t * Values above 1 soften the distribution; values below 1 sharpen it. Must be positive.\n\t * APIs that cannot apply it ignore it.\n\t */\n\ttemperature?: number;\n}\n\nexport interface ImagesOptions extends ProviderRequestOptions<ImageModel<ImageApi>> {\n\t/**\n\t * Optional metadata to include in API requests.\n\t * Providers extract the fields they understand and ignore the rest.\n\t */\n\tmetadata?: Record<string, unknown>;\n}\n\nexport type ProviderImagesOptions = ImagesOptions & Record<string, unknown>;\n\n/**\n * Maps known image APIs to their request option types, like `ApiOptionsMap`\n * does for chat APIs.\n */\nexport interface ImageApiOptionsMap {\n\t\"openrouter-images\": ImagesOptions;\n\t\"openai-images\": OpenAIImagesOptions;\n}\n\n/**\n * Request options for an image API. Known APIs resolve to their concrete option\n * type; custom API strings fall back to the generic shape.\n */\nexport type ImageApiOptions<TApi extends ImageApi> = TApi extends keyof ImageApiOptionsMap\n\t? ImageApiOptionsMap[TApi]\n\t: ProviderImagesOptions;\n\n// Unified options with reasoning passed to streamSimple() and completeSimple()\nexport interface SimpleStreamOptions extends StreamOptions {\n\t/** Provider-neutral tool selection for simple requests. When omitted, adapters use provider-specific behavior. */\n\ttoolChoice?: ToolChoice;\n\treasoning?: ThinkingLevel;\n\t/** Ask a capable provider to return a durable handle and continue the request asynchronously. */\n\tdeferred?: boolean | { window?: \"15m\" | \"1h\" | \"24h\" };\n\t/** Custom token budgets for thinking levels (token-based providers only) */\n\tthinkingBudgets?: ThinkingBudgets;\n}\n\n// Generic StreamFunction with typed options.\n//\n// Contract:\n// - Receives a normalized transcript: the system prompt and tools live in the\n// leading system message, never on the context itself.\n// - Must return an AssistantMessageEventStream.\n// - Direct streamSimple() calls may throw synchronously when request auth is\n// missing. Once a stream is returned, request/model/runtime failures should\n// be encoded in the stream, not thrown.\n// - Error termination must produce an AssistantMessage with stopReason\n// \"error\" or \"aborted\" and errorMessage, emitted via the stream protocol.\nexport type StreamFunction<TApi extends Api = Api, TOptions extends StreamOptions = StreamOptions> = (\n\tmodel: Model<TApi>,\n\tcontext: TranscriptContext,\n\toptions?: TOptions,\n) => AssistantMessageEventStream;\n\nexport type ImagesFunction<TOptions extends ImagesOptions = ImagesOptions> = (\n\tmodel: ImageModel<ImageApi>,\n\tcontext: ImagesContext,\n\toptions?: TOptions,\n) => Promise<AssistantImages>;\n\nexport type ClassifierFunction<TOptions extends ClassifierOptions = ClassifierOptions> = (\n\tmodel: ClassifierModel<ClassifierApi>,\n\tcontext: ClassifierContext,\n\toptions?: TOptions,\n) => Promise<ClassifierResult>;\n\nexport interface TextSignatureV1 {\n\tv: 1;\n\tid: string;\n\tphase?: \"commentary\" | \"final_answer\";\n}\n\nexport interface TextContent {\n\ttype: \"text\";\n\ttext: string;\n\ttextSignature?: string; // e.g., for OpenAI responses, message metadata (legacy id string or TextSignatureV1 JSON)\n}\n\nexport interface ThinkingContent {\n\ttype: \"thinking\";\n\tthinking: string;\n\tthinkingSignature?: string; // Provider-specific opaque or serialized reasoning replay data\n\t/** When true, the thinking content was redacted by safety filters. The opaque\n\t * encrypted payload is stored in `thinkingSignature` so it can be passed back\n\t * to the API for multi-turn continuity. */\n\tredacted?: boolean;\n}\n\n/**\n * Boundary marker emitted by Anthropic server-side fallback, where one model's output gives way\n * to the next after a classifier refusal.\n *\n * This is public content rather than a stream-only event because it must survive the round trip:\n * \"Keep it exactly where it appeared. The API uses its position to validate the thinking blocks\n * around it, so a request that echoes thinking blocks from both sides of the boundary is rejected\n * if the block is omitted or moved.\"\n * https://platform.claude.com/docs/en/build-with-claude/refusals-and-fallback\n */\nexport interface FallbackContent {\n\ttype: \"fallback\";\n\t/** The model that declined. Echoes the model string sent when the declining hop is the request's own model. */\n\tfromModel: string;\n\t/** Resolved id of the model that continues. Always present. */\n\ttoModel: string;\n}\n\nexport interface ImageContent {\n\ttype: \"image\";\n\tdata: string; // base64 encoded image data\n\tmimeType: string; // e.g., \"image/jpeg\", \"image/png\"\n}\n\n/**\n * A document sent as model input, currently PDF only.\n *\n * Anthropic documents PDF as a platform capability — \"All active models support PDF processing\" —\n * routed through the same vision path as images, so it is not a per-model modality. A model\n * advertises it through `Model.input` containing `\"pdf\"`, which generated metadata sets only for\n * the runtimes that can actually serialize a document block. Providers that cannot are sent a\n * visible placeholder instead, exactly as they are for images they cannot accept.\n * https://platform.claude.com/docs/en/build-with-claude/pdf-support\n */\nexport interface DocumentContent {\n\ttype: \"document\";\n\t/** Base64-encoded document bytes. Amazon Bedrock takes raw bytes and decodes this itself. */\n\tdata: string;\n\t/**\n\t * The only media type either serializer implements. It is a literal rather than `string`\n\t * because both paths hardcode PDF — the Anthropic block emits `BetaBase64PDFSource`, whose\n\t * `media_type` is itself a fixed literal, and Bedrock emits `DocumentFormat.PDF` — so a wider\n\t * type would let a caller label arbitrary bytes as a PDF. Widening this union later is\n\t * non-breaking; narrowing it after release would not be. Note that adding a format is not a\n\t * media-type swap on the Anthropic side: plain text needs a structurally different source\n\t * variant (`BetaPlainTextSource`, `type: \"text\"`), and Bedrock's `doc`/`docx`/`xls`/`xlsx`/\n\t * `csv`/`html`/`md` formats have no Anthropic source variant at all.\n\t */\n\tmimeType: \"application/pdf\";\n\t/**\n\t * Optional caller-supplied label. Amazon Bedrock requires a name and warns that it \"is\n\t * vulnerable to prompt injections\", so the Bedrock path sanitizes this to the characters AWS\n\t * permits and falls back to a neutral generated name.\n\t */\n\tname?: string;\n}\n\nexport interface ToolCall {\n\ttype: \"toolCall\";\n\tid: string;\n\tname: string;\n\targuments: JsonObject;\n\tthoughtSignature?: string; // Google-specific: opaque signature for reusing thought context\n\t/** OpenAI Responses namespace for calls to dynamically loaded or namespaced tools. */\n\tnamespace?: string;\n\targumentsError?: string;\n}\n\nexport interface Usage {\n\tinput: number;\n\toutput: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\t/** Subset of `cacheWrite` written with 1h retention. Anthropic and Bedrock report this split. */\n\tcacheWrite1h?: number;\n\t/**\n\t * Reasoning/thinking tokens, when the provider reports them. This is a subset of\n\t * `output`: `output` already includes these tokens. Set to a number (possibly 0) by\n\t * providers that expose a reasoning breakdown; left undefined by providers that don't.\n\t */\n\treasoning?: number;\n\ttotalTokens: number;\n\tcost: {\n\t\tinput: number;\n\t\toutput: number;\n\t\tcacheRead: number;\n\t\tcacheWrite: number;\n\t\ttotal: number;\n\t};\n}\n\nexport type StopReason = \"pending\" | \"stop\" | \"length\" | \"toolUse\" | \"error\" | \"aborted\" | \"deferred\";\n\nexport type JsonValue = null | boolean | number | string | readonly JsonValue[] | JsonObject;\nexport type JsonObject = { [key: string]: JsonValue };\n\ntype IsAny<T> = 0 extends 1 & T ? true : false;\ntype IsExactlyJsonValue<T> = [T] extends [JsonValue] ? ([JsonValue] extends [T] ? true : false) : false;\ntype IsJsonProperty<T> =\n\tIsAny<T> extends true\n\t\t? false\n\t\t: unknown extends T\n\t\t\t? false\n\t\t\t: [Exclude<T, undefined>] extends [never]\n\t\t\t\t? true\n\t\t\t\t: IsJsonCompatible<Exclude<T, undefined>>;\ntype InvalidJsonKeys<T extends object> = {\n\t[TKey in keyof T]-?: TKey extends string | number ? (IsJsonProperty<T[TKey]> extends true ? never : TKey) : TKey;\n}[keyof T];\ntype IsJsonCompatible<T> =\n\tIsAny<T> extends true\n\t\t? false\n\t\t: unknown extends T\n\t\t\t? false\n\t\t\t: IsExactlyJsonValue<T> extends true\n\t\t\t\t? true\n\t\t\t\t: T extends null | boolean | number | string\n\t\t\t\t\t? true\n\t\t\t\t\t: T extends undefined\n\t\t\t\t\t\t? false\n\t\t\t\t\t\t: T extends readonly (infer TItem)[]\n\t\t\t\t\t\t\t? IsJsonCompatible<TItem>\n\t\t\t\t\t\t\t: T extends (...args: never[]) => unknown\n\t\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t\t: T extends object\n\t\t\t\t\t\t\t\t\t? [InvalidJsonKeys<T>] extends [never]\n\t\t\t\t\t\t\t\t\t\t? true\n\t\t\t\t\t\t\t\t\t\t: false\n\t\t\t\t\t\t\t\t\t: false;\n\n/** The JSON representation of a typed in-memory value. Optional object properties remain optional. */\nexport type JsonRepresentation<T> =\n\tIsAny<T> extends true\n\t\t? JsonValue\n\t\t: unknown extends T\n\t\t\t? JsonValue\n\t\t\t: [T] extends [JsonValue]\n\t\t\t\t? T\n\t\t\t\t: T extends readonly unknown[]\n\t\t\t\t\t? { [TKey in keyof T]: JsonRepresentation<Exclude<T[TKey], undefined>> }\n\t\t\t\t\t: T extends object\n\t\t\t\t\t\t? { [TKey in keyof T]: JsonRepresentation<Exclude<T[TKey], undefined>> }\n\t\t\t\t\t\t: never;\n\nexport interface DeferredHandle {\n\tprovider: string;\n\tmodelId: string;\n\tapi: string;\n\t/** Provider token, such as a response id or batch id plus row id. */\n\tid: string;\n\texpiresAt?: number;\n\tpollAfterMs?: number;\n\t/** Provider conversion data required to reconstruct the final assistant message. */\n\tdata?: JsonValue;\n}\n\n/**\n * System instructions and tool declarations at one point in the transcript.\n *\n * The leading system message is the system prompt. Later system messages change it:\n * `content` adds instructions from that point on, `sections` replace or remove named\n * prompt sections, and `toolsAdded`/`toolsRemoved` change the tool set. Replaying\n * every system message in order yields the current prompt and tools. Providers that\n * accept system messages mid-conversation send each one in place; other providers\n * rebuild the leading system message from the replayed state.\n */\nexport interface SystemMessage {\n\trole: \"system\";\n\t/** Instruction text. On the leading message this is the base prompt; later, additional instructions. */\n\tcontent: string | TextContent[];\n\t/**\n\t * Named, ordered prompt sections rendered verbatim after `content`. The leading message\n\t * declares them; later messages replace sections by name, and `null` removes one. Keep\n\t * each section self-delimiting (a tag, a heading) so the model can relate an update to\n\t * the original. Avoid integer-like names; JSON objects reorder those.\n\t */\n\tsections?: Record<string, string | null>;\n\t/** Complete definitions of tools that become available at this point. */\n\ttoolsAdded?: Tool[];\n\t/** Tools that stop being available at this point. */\n\ttoolsRemoved?: ToolReference[];\n\ttimestamp: number; // Unix timestamp in milliseconds\n}\n\nexport interface UserMessage {\n\trole: \"user\";\n\tcontent: string | (TextContent | ImageContent | DocumentContent)[];\n\ttimestamp: number; // Unix timestamp in milliseconds\n}\n\nexport interface AssistantMessage {\n\trole: \"assistant\";\n\tcontent: (TextContent | ThinkingContent | ToolCall | FallbackContent)[];\n\tapi: Api;\n\tprovider: ProviderId;\n\tmodel: string;\n\tresponseModel?: string; // Concrete model reported by the provider when different from the requested `model`\n\tresponseId?: string; // Provider-specific response/message identifier when the upstream API exposes one\n\t/** Exact provider-native effort level used for this response. Absent for legacy or unmanaged responses. */\n\tproviderThinkingLevel?: string;\n\tdiagnostics?: AssistantMessageDiagnostic[]; // Redacted provider/runtime diagnostics for failures and recoveries.\n\tusage: Usage;\n\tstopReason: StopReason;\n\tdeferred?: DeferredHandle;\n\terrorMessage?: string;\n\t/** Server-requested retry delay in ms (`Retry-After` or a body `retry_after`), when the provider sent one. */\n\tretryAfterMs?: number;\n\trawStopReason?: string;\n\t/**\n\t * Provider indication of whether the model explicitly ended its turn.\n\t * Preserved for debugging and does not currently affect agent control flow.\n\t */\n\tendTurn?: boolean;\n\ttimestamp: number; // Unix timestamp in milliseconds\n\tdurationMs?: number;\n}\n\n/** A tool call made by another tool, such as a codemode script. */\nexport interface NestedToolCallRecord {\n\tid: string;\n\tname: string;\n\t/** Omitted when over the size limits. */\n\targuments?: JsonObject;\n\t/** UTF-8 JSON size when arguments are omitted. */\n\targumentsBytes?: number;\n\tstatus: \"ok\" | \"error\" | \"unfinished\";\n\tdurationMs?: number;\n\terror?: string;\n}\n\n/** Bounded nested-call record. Results are not recorded. */\nexport interface NestedToolCalls {\n\tcalls: NestedToolCallRecord[];\n\tcomplete: boolean;\n}\n\nexport type ToolResultMessage<TDetails = JsonValue> =\n\tIsJsonCompatible<TDetails> extends true\n\t\t? {\n\t\t\t\trole: \"toolResult\";\n\t\t\t\ttoolCallId: string;\n\t\t\t\ttoolName: string;\n\t\t\t\tcontent: (TextContent | ImageContent)[]; // Supports text and images\n\t\t\t\tdetails?: JsonRepresentation<TDetails>;\n\t\t\t\t/** Usage from the tool execution itself, if available. Not part of main LLM context accounting. */\n\t\t\t\tusage?: Usage;\n\t\t\t\t/** Nested calls retained in the session, not sent to the model. */\n\t\t\t\tnestedCalls?: NestedToolCalls;\n\t\t\t\tisError: boolean;\n\t\t\t\ttimestamp: number; // Unix timestamp in milliseconds\n\t\t\t\tdurationMs?: number;\n\t\t\t}\n\t\t: never;\n\nexport type Message = SystemMessage | UserMessage | AssistantMessage | ToolResultMessage;\n\nexport type ImagesInputContent = TextContent | ImageContent;\nexport type ImagesOutputContent = TextContent | ImageContent;\n\nexport interface ImagesContext {\n\tinput: ImagesInputContent[];\n}\n\nexport type ImagesStopReason = \"stop\" | \"error\" | \"aborted\";\n\nexport interface AssistantImages {\n\tapi: ImageApi;\n\tprovider: ProviderId;\n\tmodel: string;\n\toutput: ImagesOutputContent[];\n\tresponseId?: string;\n\tusage?: Usage;\n\tstopReason: ImagesStopReason;\n\terrorMessage?: string;\n\ttimestamp: number; // Unix timestamp in milliseconds\n}\n\nexport interface ClassifierChoiceQuestion {\n\ttype: \"choice\";\n\tinstructions: string;\n\tcriteria: Record<string, string>;\n}\n\nexport interface ClassifierScoreQuestion {\n\ttype: \"score\";\n\tinstructions: string;\n\tcriteria: string[];\n}\n\nexport interface ClassifierBoolQuestion {\n\ttype: \"bool\";\n\tinstructions: string;\n\tcriteria: { true: string; false: string };\n}\n\nexport type ClassifierQuestion = ClassifierChoiceQuestion | ClassifierScoreQuestion | ClassifierBoolQuestion;\n\nexport interface ClassifierContext {\n\tstate: JsonObject;\n\t/**\n\t * Images judged together with `state`. Only models whose `input` includes `\"image\"` accept them;\n\t * other models return an error result.\n\t */\n\timages?: ImageContent[];\n\tquestions: Record<string, ClassifierQuestion>;\n}\n\nexport interface ClassifierChoiceAnswer {\n\ttype: \"choice\";\n\tchoice: string;\n\tprobabilities: Record<string, number>;\n\tconfidence: number;\n}\n\nexport interface ClassifierScoreAnswer {\n\ttype: \"score\";\n\tscore: number;\n\tconfidence: number;\n}\n\nexport interface ClassifierBoolAnswer {\n\ttype: \"bool\";\n\tprobability: number;\n}\n\nexport type ClassifierAnswer = ClassifierChoiceAnswer | ClassifierScoreAnswer | ClassifierBoolAnswer;\nexport type ClassifierStopReason = \"stop\" | \"error\" | \"aborted\";\n\nexport interface ClassifierResult {\n\tapi: ClassifierApi;\n\tprovider: ProviderId;\n\tmodel: string;\n\tanswers: Record<string, ClassifierAnswer>;\n\t/** Token usage and cost at the model's catalog price, when reported. */\n\tusage?: Usage;\n\tstopReason: ClassifierStopReason;\n\terrorMessage?: string;\n\ttimestamp: number; // Unix timestamp in milliseconds\n}\n\nimport type { TSchema } from \"typebox\";\n\n/** OpenAI grammar variants for constrained sampling. */\nexport type GrammarFormat = \"openai_lark\" | \"openai_regex\";\n\nexport type GrammarVariants = Partial<Record<GrammarFormat, string>>;\n\n/**\n * Optional provider-side constrained sampling configs for a tool.\n *\n * The `json_schema` value roughly maps to the concept of `strict` in APIs which is\n * implemented as json-schema constrained sampling by APIs. Grammar variants let\n * callers provide provider-specific encodings of the same intended language.\n */\nexport type ConstrainedSamplingConfig =\n\t| {\n\t\t\ttype: \"json_schema\";\n\t\t\tstrict: \"prefer\" | \"require\";\n\t }\n\t| {\n\t\t\ttype: \"grammar\";\n\t\t\tvariants: GrammarVariants;\n\t };\n\nexport interface Tool<TParameters extends TSchema = TSchema> {\n\tname: string;\n\tdescription: string;\n\tparameters: TParameters;\n\tconstrainedSampling?: false | ConstrainedSamplingConfig;\n}\n\nexport interface ToolReference {\n\tname: string;\n}\n\n/**\n * Request input accepted by the public stream entry points (`Models.stream()`,\n * `streamSimple()`, ...). `systemPrompt` and `tools` are shorthand for a leading\n * system message; `normalizeContext()` folds them into one before the request\n * reaches a provider.\n */\nexport interface Context {\n\tsystemPrompt?: string;\n\tmessages: Message[];\n\ttools?: Tool[];\n}\n\ndeclare const transcriptContextBrand: unique symbol;\n\n/**\n * Normalized request context passed to providers and API implementations. The\n * prompt and tool declarations are carried by the transcript's system messages.\n * Only `normalizeContext()` produces this type, so a raw `Context` cannot reach\n * provider code by accident.\n */\nexport type TranscriptContext = {\n\tmessages: Message[];\n\treadonly [transcriptContextBrand]: true;\n};\n\n/**\n * Event protocol for AssistantMessageEventStream.\n *\n * Successful streams emit `start` before partial updates and terminate with\n * `done`. A stream may terminate directly with `error` when request setup fails\n * before generation starts; after `start`, failures also terminate with `error`.\n * Direct `streamSimple()` calls throw synchronously when request auth is missing.\n * Updates and `done` must never appear before `start`.\n *\n * Tool-call arguments at `toolcall_start` are provider-specific;\n * `toolcall_delta` carries subsequent JSON updates.\n */\nexport type AssistantMessageEvent =\n\t| { type: \"start\"; partial: AssistantMessage }\n\t| { type: \"text_start\"; contentIndex: number; partial: AssistantMessage }\n\t| { type: \"text_delta\"; contentIndex: number; delta: string; partial: AssistantMessage }\n\t| { type: \"text_end\"; contentIndex: number; content: string; partial: AssistantMessage }\n\t| { type: \"thinking_start\"; contentIndex: number; partial: AssistantMessage }\n\t| { type: \"thinking_delta\"; contentIndex: number; delta: string; partial: AssistantMessage }\n\t| { type: \"thinking_end\"; contentIndex: number; content: string; partial: AssistantMessage }\n\t| { type: \"toolcall_start\"; contentIndex: number; partial: AssistantMessage }\n\t| { type: \"toolcall_delta\"; contentIndex: number; delta: string; partial: AssistantMessage }\n\t| { type: \"toolcall_end\"; contentIndex: number; toolCall: ToolCall; partial: AssistantMessage }\n\t| {\n\t\t\ttype: \"done\";\n\t\t\treason: Extract<StopReason, \"stop\" | \"length\" | \"toolUse\" | \"deferred\">;\n\t\t\tmessage: AssistantMessage;\n\t }\n\t| { type: \"error\"; reason: Extract<StopReason, \"aborted\" | \"error\">; error: AssistantMessage };\n\n/** Service tiers a model can advertise beyond standard processing. */\nexport type ModelServiceTierId = \"priority\" | \"ultrafast\";\n\n/**\n * A service tier a model advertises, following Codex's `ModelInfo.service_tiers`, with the provider's\n * published per-million-token rates for that tier.\n *\n * Adapters send a tier only when the model advertises it. `flex` is an API request option and needs\n * no advertisement.\n */\nexport interface ModelServiceTier {\n\tid: ModelServiceTierId;\n\tcost: ModelCost;\n}\n\n/**\n * Explicit routing metadata that marks a model as the fast-inference variant of another model.\n *\n * Presence of this field — never a `-fast` name suffix — is what gives a model fast semantics.\n * A provider, `models.json` custom model, or extension may own an exact `<base>-fast` ID without\n * this metadata, in which case it is an ordinary model and routes exactly as it is declared.\n */\nexport interface ModelFastRoute {\n\t/** Canonical ID of the normal-speed model this variant pairs with, in the same provider. */\n\tbaseModelId: string;\n\t/** Model ID to send upstream. OpenAI-style routing keeps the base ID; a provider with real fast siblings sends its own ID. */\n\tupstreamModelId: string;\n\t/** Service tier to send with the request. Set only for providers that route fast traffic through an OpenAI-style tier. */\n\tserviceTier?: ModelServiceTierId;\n\t/** Anthropic inference speed to send with the request. Set only for Claude models that support fast mode. */\n\tspeed?: \"fast\";\n}\n\n/** Fields shared by every catalog entry, regardless of what you can do with it. */\nexport interface BaseModel<TApi extends string> {\n\tid: string;\n\tname: string;\n\tapi: TApi;\n\tprovider: ProviderId;\n\tbaseUrl: string;\n\tinput: ModelInputModality[];\n\t/** Provider input limits and cache-safe preprocessing metadata. */\n\tinputLimits?: ModelInputLimits;\n\tcost: ModelCost;\n\theaders?: Record<string, string>;\n}\n\n/** Chat model: usable with `stream()` and friends. */\nexport interface Model<TApi extends Api> extends BaseModel<TApi> {\n\t/**\n\t * Optional: chat is the default model type, so models without `type` are chat\n\t * models. Narrow mixed model lists with `isModelType()` instead of comparing\n\t * `type` directly.\n\t */\n\ttype?: \"chat\";\n\treasoning: boolean;\n\t/**\n\t * Maps pi thinking levels to provider/model-specific values.\n\t * Missing keys use provider defaults. null marks a level as unsupported.\n\t */\n\tthinkingLevelMap?: ThinkingLevelMap;\n\t/** Prompt cache lifetimes per retention tier. Unset when the provider's cache behavior is unknown. */\n\tpromptCache?: ModelPromptCache;\n\tcontextWindow: number;\n\tmaxTokens: number;\n\t/** Default sampling parameters for this model. See {@link StreamOptions.samplingParams}; per-request keys override these. */\n\tsamplingParams?: SamplingParams;\n\t/** Sampling parameter overrides selected by the effective pi thinking level. */\n\tsamplingParamsByThinkingLevel?: SamplingParamsByThinkingLevel;\n\t/**\n\t * Marks this model as the fast-inference variant of {@link ModelFastRoute.baseModelId} and carries the\n\t * upstream routing it needs. Absent on every normal model.\n\t */\n\tfastRoute?: ModelFastRoute;\n\t/**\n\t * Service tiers this model advertises. When set, the Codex adapter sends only advertised tiers.\n\t * When unset, the model carries no tier metadata and only Ultrafast is withheld.\n\t */\n\tserviceTiers?: ModelServiceTier[];\n\t/** Compatibility overrides for OpenAI-compatible APIs. If not set, auto-detected from baseUrl. */\n\tcompat?: TApi extends \"openai-completions\"\n\t\t? OpenAICompletionsCompat\n\t\t: TApi extends \"openai-responses\" | \"azure-openai-responses\" | \"openai-codex-responses\"\n\t\t\t? OpenAIResponsesCompat\n\t\t\t: TApi extends \"anthropic-messages\"\n\t\t\t\t? AnthropicMessagesCompat\n\t\t\t\t: TApi extends \"bedrock-converse-stream\"\n\t\t\t\t\t? BedrockCompat\n\t\t\t\t\t: TApi extends \"mistral-conversations\"\n\t\t\t\t\t\t? MistralConversationsCompat\n\t\t\t\t\t\t: never;\n}\n\n/** Image-generation model: usable with `generateImages()` only. */\nexport interface ImageModel<TApi extends ImageApi> extends BaseModel<TApi> {\n\ttype: \"image\";\n\t/** Output modalities. Always includes `\"image\"`; `\"text\"` means the model can also return text blocks. */\n\toutput: (\"text\" | \"image\")[];\n}\n\n/** Structured classifier model: usable with `classify()` only. */\nexport interface ClassifierModel<TApi extends ClassifierApi> extends BaseModel<TApi> {\n\ttype: \"classifier\";\n\tcontextWindow: number;\n\t/** Compatibility overrides for System One APIs. If not set, auto-detected from provider, baseUrl, and id. */\n\tcompat?: TApi extends \"typesafe-system-one\" | \"cloudflare-workers-ai-system-one\" ? SystemOneCompat : never;\n}\n\n/** Dedicated compaction model, excluded from chat model selection. */\nexport interface CompactorModel<TApi extends CompactorApi = CompactorApi> extends BaseModel<TApi> {\n\ttype: \"compactor\";\n}\n\n/** Model shape for each model type. */\nexport interface ModelTypeMap {\n\tchat: Model<Api>;\n\timage: ImageModel<ImageApi>;\n\tclassifier: ClassifierModel<ClassifierApi>;\n\tcompactor: CompactorModel;\n}\n\n/** What a catalog entry is for. Decides which `Models` operation accepts it. */\nexport type ModelType = keyof ModelTypeMap;\n\n/** Anything a provider can list. Narrow with `isModelType()`. */\nexport type AnyModel = ModelTypeMap[ModelType];\n"]}
@@ -0,0 +1,65 @@
1
+ import type { Models, MutableModels } from "../models.ts";
2
+ /**
3
+ * The `User-Agent` sent to providers:
4
+ * - `"detailed"`: `pi/<version> (<platform>; <runtime>/<runtime version>; <arch>)`, or `pi/<version> (browser)`
5
+ * outside Node.js and Bun.
6
+ * - `"short"`: `pi`.
7
+ * - `{ custom }`: the given value.
8
+ */
9
+ export type UserAgentMode = "short" | "detailed" | {
10
+ custom: string;
11
+ };
12
+ /** Who requests are attributed to. `getAttributionHeaders()` maps the fields to each provider's headers. */
13
+ export interface ClientAttribution {
14
+ /** App name: OpenRouter app title, NVIDIA invoke origin (first letter upper-cased), OpenCode client. */
15
+ name: string;
16
+ /** App URL: OpenRouter `HTTP-Referer`, the app's identity in OpenRouter's rankings, grouped by origin. */
17
+ url: string;
18
+ /** App categories, e.g. `["cli-agent"]`: OpenRouter `X-OpenRouter-Categories`, comma-separated. */
19
+ categories?: string[];
20
+ }
21
+ /** pi's attribution, used by pi-agent-core, pi-durable, and the coding agent. */
22
+ export declare const PI_ATTRIBUTION: ClientAttribution;
23
+ /**
24
+ * How pi-ai identifies the calling app to providers. Every field is optional; absent fields use pi-ai's defaults:
25
+ * a detailed `User-Agent` with pi-ai's version and no attribution headers. Plain JSON, so it can be persisted.
26
+ */
27
+ export interface ClientIdentity {
28
+ /** Default: `"detailed"`. */
29
+ userAgent?: UserAgentMode;
30
+ /** Provider attribution headers. Absent or `null`: none; `null` also turns off attribution set by a merged identity. */
31
+ attribution?: ClientAttribution | null;
32
+ /** Version in the detailed `User-Agent`. Default: the pi-ai version. */
33
+ version?: string;
34
+ }
35
+ /** The provider and endpoint a request goes to. */
36
+ export interface ClientIdentityTarget {
37
+ readonly provider: string;
38
+ readonly baseUrl: string;
39
+ }
40
+ /** Merge identities field by field; later sources win and undefined fields are skipped. */
41
+ export declare function mergeClientIdentity(...sources: (ClientIdentity | undefined)[]): ClientIdentity | undefined;
42
+ /** The version in the detailed `User-Agent`. */
43
+ export declare function getClientVersion(identity?: ClientIdentity): string;
44
+ /** The `User-Agent` value of an identity. */
45
+ export declare function formatUserAgent(identity?: ClientIdentity): string;
46
+ /** Provider attribution headers of an identity for a request target. Empty when attribution is off. */
47
+ export declare function getAttributionHeaders(target: ClientIdentityTarget, identity?: ClientIdentity): Record<string, string>;
48
+ /**
49
+ * OpenCode's per-conversation routing header for requests to OpenCode, including custom providers pointing at it.
50
+ * Undefined without a session or for other targets. An empty session id is still a session id.
51
+ */
52
+ export declare function getOpenCodeSessionHeaders(target: ClientIdentityTarget, sessionId: string | undefined): Record<string, string> | undefined;
53
+ /**
54
+ * Default headers an identity adds to a request: `User-Agent` and provider attribution. APIs apply them below model,
55
+ * provider, and request headers, so configured headers override them and `null` request headers remove them.
56
+ */
57
+ export declare function getIdentityHeaders(target: ClientIdentityTarget, identity?: ClientIdentity): Record<string, string>;
58
+ /**
59
+ * `models` with `identity` as the default identity of its requests: a request's `identity` overrides it field by
60
+ * field, and it overrides the identity `models` was created with. Everything else is delegated unchanged; a
61
+ * `MutableModels` stays mutable.
62
+ */
63
+ export declare function withClientIdentity(models: MutableModels, identity: ClientIdentity): MutableModels;
64
+ export declare function withClientIdentity(models: Models, identity: ClientIdentity): Models;
65
+ //# sourceMappingURL=identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/utils/identity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG1D;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,UAAU,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtE,4GAA4G;AAC5G,MAAM,WAAW,iBAAiB;IACjC,wGAAwG;IACxG,IAAI,EAAE,MAAM,CAAC;IACb,0GAA0G;IAC1G,GAAG,EAAE,MAAM,CAAC;IACZ,mGAAmG;IACnG,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,iFAAiF;AACjF,eAAO,MAAM,cAAc,EAAE,iBAAoF,CAAC;AAElH;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC9B,6BAA6B;IAC7B,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,wHAAwH;IACxH,WAAW,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACvC,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,mDAAmD;AACnD,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB;AAMD,2FAA2F;AAC3F,wBAAgB,mBAAmB,CAAC,GAAG,OAAO,EAAE,CAAC,cAAc,GAAG,SAAS,CAAC,EAAE,GAAG,cAAc,GAAG,SAAS,CAU1G;AAED,gDAAgD;AAChD,wBAAgB,gBAAgB,CAAC,QAAQ,CAAC,EAAE,cAAc,GAAG,MAAM,CAElE;AAUD,6CAA6C;AAC7C,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,cAAc,GAAG,MAAM,CAOjE;AAyBD,uGAAuG;AACvG,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,oBAAoB,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiBrH;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACxC,MAAM,EAAE,oBAAoB,EAC5B,SAAS,EAAE,MAAM,GAAG,SAAS,GAC3B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAEpC;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAElH;AAMD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,GAAG,aAAa,CAAC;AACnG,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,MAAM,CAAC"}
@@ -0,0 +1,142 @@
1
+ import { PI_AI_VERSION } from "./version.js";
2
+ /** pi's attribution, used by pi-agent-core, pi-durable, and the coding agent. */
3
+ export const PI_ATTRIBUTION = { name: "pi", url: "https://pi.dev", categories: ["cli-agent"] };
4
+ const OPENROUTER_HOST = "openrouter.ai";
5
+ const NVIDIA_NIM_HOST = "integrate.api.nvidia.com";
6
+ const OPENCODE_HOST = "opencode.ai";
7
+ /** Merge identities field by field; later sources win and undefined fields are skipped. */
8
+ export function mergeClientIdentity(...sources) {
9
+ let merged;
10
+ for (const source of sources) {
11
+ if (!source)
12
+ continue;
13
+ merged = { ...merged };
14
+ if (source.userAgent !== undefined)
15
+ merged.userAgent = source.userAgent;
16
+ if (source.attribution !== undefined)
17
+ merged.attribution = source.attribution;
18
+ if (source.version !== undefined)
19
+ merged.version = source.version;
20
+ }
21
+ return merged;
22
+ }
23
+ /** The version in the detailed `User-Agent`. */
24
+ export function getClientVersion(identity) {
25
+ return identity?.version ?? PI_AI_VERSION;
26
+ }
27
+ function runtimeDescription() {
28
+ if (typeof process === "undefined")
29
+ return undefined;
30
+ const versions = process.versions;
31
+ if (versions?.bun)
32
+ return `bun/${versions.bun}`;
33
+ if (versions?.node)
34
+ return `node/${process.version}`;
35
+ return undefined;
36
+ }
37
+ /** The `User-Agent` value of an identity. */
38
+ export function formatUserAgent(identity) {
39
+ const mode = identity?.userAgent ?? "detailed";
40
+ if (typeof mode === "object")
41
+ return mode.custom;
42
+ if (mode === "short")
43
+ return "pi";
44
+ const product = `pi/${getClientVersion(identity)}`;
45
+ const runtime = runtimeDescription();
46
+ return runtime ? `${product} (${process.platform}; ${runtime}; ${process.arch})` : `${product} (browser)`;
47
+ }
48
+ function matchesHost(baseUrl, expectedHost) {
49
+ try {
50
+ return new URL(baseUrl).hostname === expectedHost;
51
+ }
52
+ catch {
53
+ return false;
54
+ }
55
+ }
56
+ // Match the host exactly: attribution must not reach a custom endpoint that merely contains "openrouter.ai".
57
+ function isOpenRouter(target) {
58
+ return target.provider === "openrouter" || matchesHost(target.baseUrl, OPENROUTER_HOST);
59
+ }
60
+ function isNvidiaNim(target) {
61
+ return target.provider === "nvidia" || matchesHost(target.baseUrl, NVIDIA_NIM_HOST);
62
+ }
63
+ function isOpenCode(target) {
64
+ return (target.provider === "opencode" || target.provider === "opencode-go" || matchesHost(target.baseUrl, OPENCODE_HOST));
65
+ }
66
+ /** Provider attribution headers of an identity for a request target. Empty when attribution is off. */
67
+ export function getAttributionHeaders(target, identity) {
68
+ const attribution = identity?.attribution;
69
+ if (!attribution)
70
+ return {};
71
+ const { name, url, categories } = attribution;
72
+ if (isOpenRouter(target)) {
73
+ return {
74
+ "HTTP-Referer": url,
75
+ "X-OpenRouter-Title": name,
76
+ ...(categories === undefined || categories.length === 0
77
+ ? {}
78
+ : { "X-OpenRouter-Categories": categories.join(",") }),
79
+ };
80
+ }
81
+ // NVIDIA expects a capitalized origin, such as `Pi`.
82
+ if (isNvidiaNim(target))
83
+ return { "X-BILLING-INVOKE-ORIGIN": name.charAt(0).toUpperCase() + name.slice(1) };
84
+ if (isOpenCode(target))
85
+ return { "x-opencode-client": name };
86
+ return {};
87
+ }
88
+ /**
89
+ * OpenCode's per-conversation routing header for requests to OpenCode, including custom providers pointing at it.
90
+ * Undefined without a session or for other targets. An empty session id is still a session id.
91
+ */
92
+ export function getOpenCodeSessionHeaders(target, sessionId) {
93
+ return sessionId !== undefined && isOpenCode(target) ? { "x-opencode-session": sessionId } : undefined;
94
+ }
95
+ /**
96
+ * Default headers an identity adds to a request: `User-Agent` and provider attribution. APIs apply them below model,
97
+ * provider, and request headers, so configured headers override them and `null` request headers remove them.
98
+ */
99
+ export function getIdentityHeaders(target, identity) {
100
+ return { "User-Agent": formatUserAgent(identity), ...getAttributionHeaders(target, identity) };
101
+ }
102
+ function isMutableModels(models) {
103
+ return "setProvider" in models && "deleteProvider" in models && "clearProviders" in models;
104
+ }
105
+ export function withClientIdentity(models, identity) {
106
+ const withIdentity = (options) => ({ ...options, identity: mergeClientIdentity(identity, options?.identity) });
107
+ const wrapped = {
108
+ getProviders: () => models.getProviders(),
109
+ getProvider: (id) => models.getProvider(id),
110
+ getModels: (provider) => models.getModels(provider),
111
+ getModel: (provider, id) => models.getModel(provider, id),
112
+ getModelsOfType: (type, provider) => models.getModelsOfType(type, provider),
113
+ getModelOfType: (type, provider, id) => models.getModelOfType(type, provider, id),
114
+ getAllModels: (provider) => models.getAllModels(provider),
115
+ refresh: (options) => models.refresh(options),
116
+ checkAuth: (providerId, options) => models.checkAuth(providerId, options),
117
+ getAvailable: (providerId, options) => models.getAvailable(providerId, options),
118
+ getAvailableOfType: (type, providerId, options) => models.getAvailableOfType(type, providerId, options),
119
+ getAllAvailable: (providerId, options) => models.getAllAvailable(providerId, options),
120
+ getAuth: models.getAuth.bind(models),
121
+ login: (providerId, type, interaction, options) => models.login(providerId, type, interaction, options),
122
+ logout: (providerId, options) => models.logout(providerId, options),
123
+ stream: (model, context, options) => models.stream(model, context, withIdentity(options)),
124
+ complete: (model, context, options) => models.complete(model, context, withIdentity(options)),
125
+ streamSimple: (model, context, options) => models.streamSimple(model, context, withIdentity(options)),
126
+ completeSimple: (model, context, options) => models.completeSimple(model, context, withIdentity(options)),
127
+ fetchDeferred: (model, handle, options) => models.fetchDeferred(model, handle, withIdentity(options)),
128
+ cancelDeferred: (model, handle, options) => models.cancelDeferred(model, handle, withIdentity(options)),
129
+ generateImages: (model, context, options) => models.generateImages(model, context, withIdentity(options)),
130
+ classify: (model, context, options) => models.classify(model, context, withIdentity(options)),
131
+ };
132
+ if (!isMutableModels(models))
133
+ return wrapped;
134
+ const mutable = {
135
+ ...wrapped,
136
+ setProvider: (provider) => models.setProvider(provider),
137
+ deleteProvider: (id) => models.deleteProvider(id),
138
+ clearProviders: () => models.clearProviders(),
139
+ };
140
+ return mutable;
141
+ }
142
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/utils/identity.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Models, MutableModels } from \"../models.ts\";\nimport { PI_AI_VERSION } from \"./version.ts\";\n\n/**\n * The `User-Agent` sent to providers:\n * - `\"detailed\"`: `pi/<version> (<platform>; <runtime>/<runtime version>; <arch>)`, or `pi/<version> (browser)`\n * outside Node.js and Bun.\n * - `\"short\"`: `pi`.\n * - `{ custom }`: the given value.\n */\nexport type UserAgentMode = \"short\" | \"detailed\" | { custom: string };\n\n/** Who requests are attributed to. `getAttributionHeaders()` maps the fields to each provider's headers. */\nexport interface ClientAttribution {\n\t/** App name: OpenRouter app title, NVIDIA invoke origin (first letter upper-cased), OpenCode client. */\n\tname: string;\n\t/** App URL: OpenRouter `HTTP-Referer`, the app's identity in OpenRouter's rankings, grouped by origin. */\n\turl: string;\n\t/** App categories, e.g. `[\"cli-agent\"]`: OpenRouter `X-OpenRouter-Categories`, comma-separated. */\n\tcategories?: string[];\n}\n\n/** pi's attribution, used by pi-agent-core, pi-durable, and the coding agent. */\nexport const PI_ATTRIBUTION: ClientAttribution = { name: \"pi\", url: \"https://pi.dev\", categories: [\"cli-agent\"] };\n\n/**\n * How pi-ai identifies the calling app to providers. Every field is optional; absent fields use pi-ai's defaults:\n * a detailed `User-Agent` with pi-ai's version and no attribution headers. Plain JSON, so it can be persisted.\n */\nexport interface ClientIdentity {\n\t/** Default: `\"detailed\"`. */\n\tuserAgent?: UserAgentMode;\n\t/** Provider attribution headers. Absent or `null`: none; `null` also turns off attribution set by a merged identity. */\n\tattribution?: ClientAttribution | null;\n\t/** Version in the detailed `User-Agent`. Default: the pi-ai version. */\n\tversion?: string;\n}\n\n/** The provider and endpoint a request goes to. */\nexport interface ClientIdentityTarget {\n\treadonly provider: string;\n\treadonly baseUrl: string;\n}\n\nconst OPENROUTER_HOST = \"openrouter.ai\";\nconst NVIDIA_NIM_HOST = \"integrate.api.nvidia.com\";\nconst OPENCODE_HOST = \"opencode.ai\";\n\n/** Merge identities field by field; later sources win and undefined fields are skipped. */\nexport function mergeClientIdentity(...sources: (ClientIdentity | undefined)[]): ClientIdentity | undefined {\n\tlet merged: ClientIdentity | undefined;\n\tfor (const source of sources) {\n\t\tif (!source) continue;\n\t\tmerged = { ...merged };\n\t\tif (source.userAgent !== undefined) merged.userAgent = source.userAgent;\n\t\tif (source.attribution !== undefined) merged.attribution = source.attribution;\n\t\tif (source.version !== undefined) merged.version = source.version;\n\t}\n\treturn merged;\n}\n\n/** The version in the detailed `User-Agent`. */\nexport function getClientVersion(identity?: ClientIdentity): string {\n\treturn identity?.version ?? PI_AI_VERSION;\n}\n\nfunction runtimeDescription(): string | undefined {\n\tif (typeof process === \"undefined\") return undefined;\n\tconst versions = process.versions;\n\tif (versions?.bun) return `bun/${versions.bun}`;\n\tif (versions?.node) return `node/${process.version}`;\n\treturn undefined;\n}\n\n/** The `User-Agent` value of an identity. */\nexport function formatUserAgent(identity?: ClientIdentity): string {\n\tconst mode = identity?.userAgent ?? \"detailed\";\n\tif (typeof mode === \"object\") return mode.custom;\n\tif (mode === \"short\") return \"pi\";\n\tconst product = `pi/${getClientVersion(identity)}`;\n\tconst runtime = runtimeDescription();\n\treturn runtime ? `${product} (${process.platform}; ${runtime}; ${process.arch})` : `${product} (browser)`;\n}\n\nfunction matchesHost(baseUrl: string, expectedHost: string): boolean {\n\ttry {\n\t\treturn new URL(baseUrl).hostname === expectedHost;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n// Match the host exactly: attribution must not reach a custom endpoint that merely contains \"openrouter.ai\".\nfunction isOpenRouter(target: ClientIdentityTarget): boolean {\n\treturn target.provider === \"openrouter\" || matchesHost(target.baseUrl, OPENROUTER_HOST);\n}\n\nfunction isNvidiaNim(target: ClientIdentityTarget): boolean {\n\treturn target.provider === \"nvidia\" || matchesHost(target.baseUrl, NVIDIA_NIM_HOST);\n}\n\nfunction isOpenCode(target: ClientIdentityTarget): boolean {\n\treturn (\n\t\ttarget.provider === \"opencode\" || target.provider === \"opencode-go\" || matchesHost(target.baseUrl, OPENCODE_HOST)\n\t);\n}\n\n/** Provider attribution headers of an identity for a request target. Empty when attribution is off. */\nexport function getAttributionHeaders(target: ClientIdentityTarget, identity?: ClientIdentity): Record<string, string> {\n\tconst attribution = identity?.attribution;\n\tif (!attribution) return {};\n\tconst { name, url, categories } = attribution;\n\tif (isOpenRouter(target)) {\n\t\treturn {\n\t\t\t\"HTTP-Referer\": url,\n\t\t\t\"X-OpenRouter-Title\": name,\n\t\t\t...(categories === undefined || categories.length === 0\n\t\t\t\t? {}\n\t\t\t\t: { \"X-OpenRouter-Categories\": categories.join(\",\") }),\n\t\t};\n\t}\n\t// NVIDIA expects a capitalized origin, such as `Pi`.\n\tif (isNvidiaNim(target)) return { \"X-BILLING-INVOKE-ORIGIN\": name.charAt(0).toUpperCase() + name.slice(1) };\n\tif (isOpenCode(target)) return { \"x-opencode-client\": name };\n\treturn {};\n}\n\n/**\n * OpenCode's per-conversation routing header for requests to OpenCode, including custom providers pointing at it.\n * Undefined without a session or for other targets. An empty session id is still a session id.\n */\nexport function getOpenCodeSessionHeaders(\n\ttarget: ClientIdentityTarget,\n\tsessionId: string | undefined,\n): Record<string, string> | undefined {\n\treturn sessionId !== undefined && isOpenCode(target) ? { \"x-opencode-session\": sessionId } : undefined;\n}\n\n/**\n * Default headers an identity adds to a request: `User-Agent` and provider attribution. APIs apply them below model,\n * provider, and request headers, so configured headers override them and `null` request headers remove them.\n */\nexport function getIdentityHeaders(target: ClientIdentityTarget, identity?: ClientIdentity): Record<string, string> {\n\treturn { \"User-Agent\": formatUserAgent(identity), ...getAttributionHeaders(target, identity) };\n}\n\nfunction isMutableModels(models: Models): models is MutableModels {\n\treturn \"setProvider\" in models && \"deleteProvider\" in models && \"clearProviders\" in models;\n}\n\n/**\n * `models` with `identity` as the default identity of its requests: a request's `identity` overrides it field by\n * field, and it overrides the identity `models` was created with. Everything else is delegated unchanged; a\n * `MutableModels` stays mutable.\n */\nexport function withClientIdentity(models: MutableModels, identity: ClientIdentity): MutableModels;\nexport function withClientIdentity(models: Models, identity: ClientIdentity): Models;\nexport function withClientIdentity(models: Models, identity: ClientIdentity): Models {\n\tconst withIdentity = <T extends { identity?: ClientIdentity }>(options: T | undefined): T =>\n\t\t({ ...options, identity: mergeClientIdentity(identity, options?.identity) }) as T;\n\tconst wrapped: Models = {\n\t\tgetProviders: () => models.getProviders(),\n\t\tgetProvider: (id) => models.getProvider(id),\n\t\tgetModels: (provider) => models.getModels(provider),\n\t\tgetModel: (provider, id) => models.getModel(provider, id),\n\t\tgetModelsOfType: (type, provider) => models.getModelsOfType(type, provider),\n\t\tgetModelOfType: (type, provider, id) => models.getModelOfType(type, provider, id),\n\t\tgetAllModels: (provider) => models.getAllModels(provider),\n\t\trefresh: (options) => models.refresh(options),\n\t\tcheckAuth: (providerId, options) => models.checkAuth(providerId, options),\n\t\tgetAvailable: (providerId, options) => models.getAvailable(providerId, options),\n\t\tgetAvailableOfType: (type, providerId, options) => models.getAvailableOfType(type, providerId, options),\n\t\tgetAllAvailable: (providerId, options) => models.getAllAvailable(providerId, options),\n\t\tgetAuth: models.getAuth.bind(models),\n\t\tlogin: (providerId, type, interaction, options) => models.login(providerId, type, interaction, options),\n\t\tlogout: (providerId, options) => models.logout(providerId, options),\n\t\tstream: (model, context, options) => models.stream(model, context, withIdentity(options)),\n\t\tcomplete: (model, context, options) => models.complete(model, context, withIdentity(options)),\n\t\tstreamSimple: (model, context, options) => models.streamSimple(model, context, withIdentity(options)),\n\t\tcompleteSimple: (model, context, options) => models.completeSimple(model, context, withIdentity(options)),\n\t\tfetchDeferred: (model, handle, options) => models.fetchDeferred(model, handle, withIdentity(options)),\n\t\tcancelDeferred: (model, handle, options) => models.cancelDeferred(model, handle, withIdentity(options)),\n\t\tgenerateImages: (model, context, options) => models.generateImages(model, context, withIdentity(options)),\n\t\tclassify: (model, context, options) => models.classify(model, context, withIdentity(options)),\n\t};\n\tif (!isMutableModels(models)) return wrapped;\n\tconst mutable: MutableModels = {\n\t\t...wrapped,\n\t\tsetProvider: (provider) => models.setProvider(provider),\n\t\tdeleteProvider: (id) => models.deleteProvider(id),\n\t\tclearProviders: () => models.clearProviders(),\n\t};\n\treturn mutable;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AA8HpD;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,qFAAqF;IACrF,UAAU,EAAE,MAAM,CAAC;IACnB,0FAA0F;IAC1F,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,gCAAgC,QAAS,CAAC;AAEvD,wBAAgB,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,aAAa,GAAG,iBAAiB,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAIlH;AAED,KAAK,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE,YAAY,GAAG,cAAc,GAAG,cAAc,CAAC,CAAC;AAE3F;;;GAGG;AACH,wBAAgB,mBAAmB,CAClC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,aAAa,GAAG,iBAAiB,GAAG,iBAAiB,CAAC,EAChF,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,cAAc,CAAC,GAC7C,MAAM,CAKR;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAGrH;AAED,kFAAkF;AAClF,MAAM,WAAW,cAAc;IAC9B,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,CAClB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,KAChB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,mFAAmF;IACnF,mBAAmB,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,mFAAmF;IACnF,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnG;AA0BD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,kBAAkB,CACvC,OAAO,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,EACxC,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,SAAS,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,gBAAgB,CAAC,CA4C3B;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAKxE"}
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AA+HpD;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,qFAAqF;IACrF,UAAU,EAAE,MAAM,CAAC;IACnB,0FAA0F;IAC1F,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,gCAAgC,QAAS,CAAC;AAEvD,wBAAgB,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,aAAa,GAAG,iBAAiB,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAIlH;AAED,KAAK,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE,YAAY,GAAG,cAAc,GAAG,cAAc,CAAC,CAAC;AAE3F;;;GAGG;AACH,wBAAgB,mBAAmB,CAClC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,aAAa,GAAG,iBAAiB,GAAG,iBAAiB,CAAC,EAChF,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,cAAc,CAAC,GAC7C,MAAM,CAKR;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAGrH;AAED,kFAAkF;AAClF,MAAM,WAAW,cAAc;IAC9B,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,CAClB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,KAChB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,mFAAmF;IACnF,mBAAmB,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,mFAAmF;IACnF,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnG;AA0BD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,kBAAkB,CACvC,OAAO,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,EACxC,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,SAAS,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,gBAAgB,CAAC,CA4C3B;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAKxE"}