@nodetool-ai/runtime 0.7.0-rc.11

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 (198) hide show
  1. package/dist/bridge-protocol.d.ts +39 -0
  2. package/dist/bridge-protocol.d.ts.map +1 -0
  3. package/dist/bridge-protocol.js +39 -0
  4. package/dist/bridge-protocol.js.map +1 -0
  5. package/dist/comfy-executor.d.ts +41 -0
  6. package/dist/comfy-executor.d.ts.map +1 -0
  7. package/dist/comfy-executor.js +305 -0
  8. package/dist/comfy-executor.js.map +1 -0
  9. package/dist/context-packer.d.ts +22 -0
  10. package/dist/context-packer.d.ts.map +1 -0
  11. package/dist/context-packer.js +66 -0
  12. package/dist/context-packer.js.map +1 -0
  13. package/dist/context.d.ts +405 -0
  14. package/dist/context.d.ts.map +1 -0
  15. package/dist/context.js +1455 -0
  16. package/dist/context.js.map +1 -0
  17. package/dist/index.d.ts +18 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +15 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/node-executor.d.ts +53 -0
  22. package/dist/node-executor.d.ts.map +1 -0
  23. package/dist/node-executor.js +9 -0
  24. package/dist/node-executor.js.map +1 -0
  25. package/dist/providers/aki-manifest.json +34 -0
  26. package/dist/providers/aki-provider.d.ts +65 -0
  27. package/dist/providers/aki-provider.d.ts.map +1 -0
  28. package/dist/providers/aki-provider.js +517 -0
  29. package/dist/providers/aki-provider.js.map +1 -0
  30. package/dist/providers/anthropic-provider.d.ts +55 -0
  31. package/dist/providers/anthropic-provider.d.ts.map +1 -0
  32. package/dist/providers/anthropic-provider.js +563 -0
  33. package/dist/providers/anthropic-provider.js.map +1 -0
  34. package/dist/providers/base-provider.d.ts +194 -0
  35. package/dist/providers/base-provider.d.ts.map +1 -0
  36. package/dist/providers/base-provider.js +515 -0
  37. package/dist/providers/base-provider.js.map +1 -0
  38. package/dist/providers/cerebras-provider.d.ts +20 -0
  39. package/dist/providers/cerebras-provider.d.ts.map +1 -0
  40. package/dist/providers/cerebras-provider.js +52 -0
  41. package/dist/providers/cerebras-provider.js.map +1 -0
  42. package/dist/providers/claude-agent-provider.d.ts +107 -0
  43. package/dist/providers/claude-agent-provider.d.ts.map +1 -0
  44. package/dist/providers/claude-agent-provider.js +586 -0
  45. package/dist/providers/claude-agent-provider.js.map +1 -0
  46. package/dist/providers/cohere-provider.d.ts +36 -0
  47. package/dist/providers/cohere-provider.d.ts.map +1 -0
  48. package/dist/providers/cohere-provider.js +116 -0
  49. package/dist/providers/cohere-provider.js.map +1 -0
  50. package/dist/providers/cost-calculator.d.ts +109 -0
  51. package/dist/providers/cost-calculator.d.ts.map +1 -0
  52. package/dist/providers/cost-calculator.js +475 -0
  53. package/dist/providers/cost-calculator.js.map +1 -0
  54. package/dist/providers/deepseek-provider.d.ts +25 -0
  55. package/dist/providers/deepseek-provider.d.ts.map +1 -0
  56. package/dist/providers/deepseek-provider.js +58 -0
  57. package/dist/providers/deepseek-provider.js.map +1 -0
  58. package/dist/providers/fake-provider.d.ts +52 -0
  59. package/dist/providers/fake-provider.d.ts.map +1 -0
  60. package/dist/providers/fake-provider.js +107 -0
  61. package/dist/providers/fake-provider.js.map +1 -0
  62. package/dist/providers/fal-provider.d.ts +32 -0
  63. package/dist/providers/fal-provider.d.ts.map +1 -0
  64. package/dist/providers/fal-provider.js +445 -0
  65. package/dist/providers/fal-provider.js.map +1 -0
  66. package/dist/providers/gemini-provider.d.ts +109 -0
  67. package/dist/providers/gemini-provider.d.ts.map +1 -0
  68. package/dist/providers/gemini-provider.js +943 -0
  69. package/dist/providers/gemini-provider.js.map +1 -0
  70. package/dist/providers/groq-provider.d.ts +20 -0
  71. package/dist/providers/groq-provider.d.ts.map +1 -0
  72. package/dist/providers/groq-provider.js +52 -0
  73. package/dist/providers/groq-provider.js.map +1 -0
  74. package/dist/providers/huggingface-provider.d.ts +59 -0
  75. package/dist/providers/huggingface-provider.d.ts.map +1 -0
  76. package/dist/providers/huggingface-provider.js +305 -0
  77. package/dist/providers/huggingface-provider.js.map +1 -0
  78. package/dist/providers/index.d.ts +69 -0
  79. package/dist/providers/index.d.ts.map +1 -0
  80. package/dist/providers/index.js +137 -0
  81. package/dist/providers/index.js.map +1 -0
  82. package/dist/providers/jina-provider.d.ts +37 -0
  83. package/dist/providers/jina-provider.d.ts.map +1 -0
  84. package/dist/providers/jina-provider.js +118 -0
  85. package/dist/providers/jina-provider.js.map +1 -0
  86. package/dist/providers/kie-provider.d.ts +19 -0
  87. package/dist/providers/kie-provider.d.ts.map +1 -0
  88. package/dist/providers/kie-provider.js +118 -0
  89. package/dist/providers/kie-provider.js.map +1 -0
  90. package/dist/providers/llama-provider.d.ts +49 -0
  91. package/dist/providers/llama-provider.d.ts.map +1 -0
  92. package/dist/providers/llama-provider.js +381 -0
  93. package/dist/providers/llama-provider.js.map +1 -0
  94. package/dist/providers/lmstudio-provider.d.ts +22 -0
  95. package/dist/providers/lmstudio-provider.d.ts.map +1 -0
  96. package/dist/providers/lmstudio-provider.js +63 -0
  97. package/dist/providers/lmstudio-provider.js.map +1 -0
  98. package/dist/providers/manifest-models.d.ts +12 -0
  99. package/dist/providers/manifest-models.d.ts.map +1 -0
  100. package/dist/providers/manifest-models.js +96 -0
  101. package/dist/providers/manifest-models.js.map +1 -0
  102. package/dist/providers/meshy-provider.d.ts +53 -0
  103. package/dist/providers/meshy-provider.d.ts.map +1 -0
  104. package/dist/providers/meshy-provider.js +230 -0
  105. package/dist/providers/meshy-provider.js.map +1 -0
  106. package/dist/providers/minimax-provider.d.ts +66 -0
  107. package/dist/providers/minimax-provider.d.ts.map +1 -0
  108. package/dist/providers/minimax-provider.js +531 -0
  109. package/dist/providers/minimax-provider.js.map +1 -0
  110. package/dist/providers/mistral-provider.d.ts +26 -0
  111. package/dist/providers/mistral-provider.d.ts.map +1 -0
  112. package/dist/providers/mistral-provider.js +74 -0
  113. package/dist/providers/mistral-provider.js.map +1 -0
  114. package/dist/providers/moonshot-provider.d.ts +24 -0
  115. package/dist/providers/moonshot-provider.d.ts.map +1 -0
  116. package/dist/providers/moonshot-provider.js +43 -0
  117. package/dist/providers/moonshot-provider.js.map +1 -0
  118. package/dist/providers/ollama-provider.d.ts +71 -0
  119. package/dist/providers/ollama-provider.d.ts.map +1 -0
  120. package/dist/providers/ollama-provider.js +480 -0
  121. package/dist/providers/ollama-provider.js.map +1 -0
  122. package/dist/providers/openai-provider.d.ts +103 -0
  123. package/dist/providers/openai-provider.d.ts.map +1 -0
  124. package/dist/providers/openai-provider.js +917 -0
  125. package/dist/providers/openai-provider.js.map +1 -0
  126. package/dist/providers/openrouter-provider.d.ts +49 -0
  127. package/dist/providers/openrouter-provider.d.ts.map +1 -0
  128. package/dist/providers/openrouter-provider.js +147 -0
  129. package/dist/providers/openrouter-provider.js.map +1 -0
  130. package/dist/providers/provider-registry.d.ts +24 -0
  131. package/dist/providers/provider-registry.d.ts.map +1 -0
  132. package/dist/providers/provider-registry.js +124 -0
  133. package/dist/providers/provider-registry.js.map +1 -0
  134. package/dist/providers/python-provider.d.ts +75 -0
  135. package/dist/providers/python-provider.d.ts.map +1 -0
  136. package/dist/providers/python-provider.js +157 -0
  137. package/dist/providers/python-provider.js.map +1 -0
  138. package/dist/providers/replicate-provider.d.ts +73 -0
  139. package/dist/providers/replicate-provider.d.ts.map +1 -0
  140. package/dist/providers/replicate-provider.js +484 -0
  141. package/dist/providers/replicate-provider.js.map +1 -0
  142. package/dist/providers/rodin-provider.d.ts +41 -0
  143. package/dist/providers/rodin-provider.d.ts.map +1 -0
  144. package/dist/providers/rodin-provider.js +236 -0
  145. package/dist/providers/rodin-provider.js.map +1 -0
  146. package/dist/providers/scripted-provider.d.ts +141 -0
  147. package/dist/providers/scripted-provider.d.ts.map +1 -0
  148. package/dist/providers/scripted-provider.js +246 -0
  149. package/dist/providers/scripted-provider.js.map +1 -0
  150. package/dist/providers/together-provider.d.ts +20 -0
  151. package/dist/providers/together-provider.d.ts.map +1 -0
  152. package/dist/providers/together-provider.js +56 -0
  153. package/dist/providers/together-provider.js.map +1 -0
  154. package/dist/providers/types.d.ts +202 -0
  155. package/dist/providers/types.d.ts.map +1 -0
  156. package/dist/providers/types.js +2 -0
  157. package/dist/providers/types.js.map +1 -0
  158. package/dist/providers/vllm-provider.d.ts +22 -0
  159. package/dist/providers/vllm-provider.d.ts.map +1 -0
  160. package/dist/providers/vllm-provider.js +66 -0
  161. package/dist/providers/vllm-provider.js.map +1 -0
  162. package/dist/providers/voyage-provider.d.ts +37 -0
  163. package/dist/providers/voyage-provider.d.ts.map +1 -0
  164. package/dist/providers/voyage-provider.js +124 -0
  165. package/dist/providers/voyage-provider.js.map +1 -0
  166. package/dist/providers/xai-provider.d.ts +24 -0
  167. package/dist/providers/xai-provider.d.ts.map +1 -0
  168. package/dist/providers/xai-provider.js +57 -0
  169. package/dist/providers/xai-provider.js.map +1 -0
  170. package/dist/python-bridge-types.d.ts +70 -0
  171. package/dist/python-bridge-types.d.ts.map +1 -0
  172. package/dist/python-bridge-types.js +2 -0
  173. package/dist/python-bridge-types.js.map +1 -0
  174. package/dist/python-node-executor.d.ts +20 -0
  175. package/dist/python-node-executor.d.ts.map +1 -0
  176. package/dist/python-node-executor.js +219 -0
  177. package/dist/python-node-executor.js.map +1 -0
  178. package/dist/python-stdio-bridge.d.ts +67 -0
  179. package/dist/python-stdio-bridge.d.ts.map +1 -0
  180. package/dist/python-stdio-bridge.js +704 -0
  181. package/dist/python-stdio-bridge.js.map +1 -0
  182. package/dist/recommended-models.d.ts +17 -0
  183. package/dist/recommended-models.d.ts.map +1 -0
  184. package/dist/recommended-models.js +139 -0
  185. package/dist/recommended-models.js.map +1 -0
  186. package/dist/telemetry.d.ts +61 -0
  187. package/dist/telemetry.d.ts.map +1 -0
  188. package/dist/telemetry.js +128 -0
  189. package/dist/telemetry.js.map +1 -0
  190. package/dist/trace-exporters.d.ts +72 -0
  191. package/dist/trace-exporters.d.ts.map +1 -0
  192. package/dist/trace-exporters.js +216 -0
  193. package/dist/trace-exporters.js.map +1 -0
  194. package/dist/tracing-helpers.d.ts +99 -0
  195. package/dist/tracing-helpers.d.ts.map +1 -0
  196. package/dist/tracing-helpers.js +217 -0
  197. package/dist/tracing-helpers.js.map +1 -0
  198. package/package.json +64 -0
@@ -0,0 +1,475 @@
1
+ /**
2
+ * Centralized cost calculation for all AI providers.
3
+ *
4
+ * This module provides a unified interface for calculating API costs in credits.
5
+ * 1 credit = $0.01 USD (i.e., 1000 credits = $10 USD)
6
+ * All rates include a 50% premium over provider base costs.
7
+ *
8
+ * Usage:
9
+ * import { CostCalculator, UsageInfo } from "./cost-calculator.js";
10
+ *
11
+ * // Calculate cost for a chat completion
12
+ * const usage: UsageInfo = { inputTokens: 1000, outputTokens: 500 };
13
+ * const cost = CostCalculator.calculate("gpt-4o-mini", usage, "openai");
14
+ *
15
+ * // Or use convenience helper functions
16
+ * const cost2 = calculateChatCost("gpt-4o-mini", 1000, 500);
17
+ */
18
+ export var CostType;
19
+ (function (CostType) {
20
+ CostType["TOKEN_BASED"] = "token_based";
21
+ CostType["EMBEDDING"] = "embedding";
22
+ CostType["CHARACTER_BASED"] = "character_based";
23
+ CostType["DURATION_BASED"] = "duration_based";
24
+ CostType["IMAGE_BASED"] = "image_based";
25
+ CostType["VIDEO_BASED"] = "video_based";
26
+ /** Flat per-task cost, e.g. 3D generation APIs billed per submitted job. */
27
+ CostType["TASK_BASED"] = "task_based";
28
+ })(CostType || (CostType = {}));
29
+ /**
30
+ * Pricing tiers by tier name - derived from Python cost_calculator.py PRICING_TIERS.
31
+ */
32
+ export const PRICING_TIERS = {
33
+ // GPT-5 Series (newest flagship models)
34
+ gpt5Tier: {
35
+ costType: CostType.TOKEN_BASED,
36
+ inputPer1kTokens: 0.002625,
37
+ outputPer1kTokens: 0.021,
38
+ cachedPer1kTokens: 0.0002625
39
+ },
40
+ gpt5ProTier: {
41
+ costType: CostType.TOKEN_BASED,
42
+ inputPer1kTokens: 0.0315,
43
+ outputPer1kTokens: 0.252
44
+ },
45
+ gpt5MiniTier: {
46
+ costType: CostType.TOKEN_BASED,
47
+ inputPer1kTokens: 0.000375,
48
+ outputPer1kTokens: 0.003,
49
+ cachedPer1kTokens: 0.0000375
50
+ },
51
+ // GPT-4.1 family
52
+ gpt41Tier: {
53
+ costType: CostType.TOKEN_BASED,
54
+ inputPer1kTokens: 0.0045,
55
+ outputPer1kTokens: 0.018,
56
+ cachedPer1kTokens: 0.001125
57
+ },
58
+ gpt41MiniTier: {
59
+ costType: CostType.TOKEN_BASED,
60
+ inputPer1kTokens: 0.0012,
61
+ outputPer1kTokens: 0.0048,
62
+ cachedPer1kTokens: 0.0003
63
+ },
64
+ gpt41NanoTier: {
65
+ costType: CostType.TOKEN_BASED,
66
+ inputPer1kTokens: 0.0003,
67
+ outputPer1kTokens: 0.0012,
68
+ cachedPer1kTokens: 0.000075
69
+ },
70
+ // O4-mini (reasoning)
71
+ o4MiniTier: {
72
+ costType: CostType.TOKEN_BASED,
73
+ inputPer1kTokens: 0.006,
74
+ outputPer1kTokens: 0.024,
75
+ cachedPer1kTokens: 0.0015
76
+ },
77
+ // O1 Series (existing reasoning models)
78
+ o1Tier: {
79
+ costType: CostType.TOKEN_BASED,
80
+ inputPer1kTokens: 2.25,
81
+ outputPer1kTokens: 9.0
82
+ },
83
+ o1MiniTier: {
84
+ costType: CostType.TOKEN_BASED,
85
+ inputPer1kTokens: 0.45,
86
+ outputPer1kTokens: 1.8
87
+ },
88
+ // GPT-4o Series
89
+ topTierChat: {
90
+ costType: CostType.TOKEN_BASED,
91
+ inputPer1kTokens: 0.375,
92
+ outputPer1kTokens: 1.5
93
+ },
94
+ lowTierChat: {
95
+ costType: CostType.TOKEN_BASED,
96
+ inputPer1kTokens: 0.0225,
97
+ outputPer1kTokens: 0.09
98
+ },
99
+ // GPT-4 Turbo
100
+ gpt4Turbo: {
101
+ costType: CostType.TOKEN_BASED,
102
+ inputPer1kTokens: 1.5,
103
+ outputPer1kTokens: 6.0
104
+ },
105
+ // Image generation - gpt-image-1
106
+ imageGptLow: {
107
+ costType: CostType.IMAGE_BASED,
108
+ perImage: 1.5
109
+ },
110
+ imageGptMedium: {
111
+ costType: CostType.IMAGE_BASED,
112
+ perImage: 6.0
113
+ },
114
+ imageGptHigh: {
115
+ costType: CostType.IMAGE_BASED,
116
+ perImage: 25.0
117
+ },
118
+ // Image generation GPT-image-1.5
119
+ imageGpt15: {
120
+ costType: CostType.TOKEN_BASED,
121
+ inputPer1kTokens: 0.0075,
122
+ outputPer1kTokens: 0.015
123
+ },
124
+ // Whisper / Speech-to-Text
125
+ whisperStandard: {
126
+ costType: CostType.DURATION_BASED,
127
+ perMinute: 0.9
128
+ },
129
+ whisperLowCost: {
130
+ costType: CostType.DURATION_BASED,
131
+ perMinute: 0.45
132
+ },
133
+ // TTS / Text-to-Speech
134
+ ttsStandard: {
135
+ costType: CostType.CHARACTER_BASED,
136
+ per1kChars: 0.09
137
+ },
138
+ ttsHd: {
139
+ costType: CostType.CHARACTER_BASED,
140
+ per1kChars: 2.25
141
+ },
142
+ ttsUltraHd: {
143
+ costType: CostType.CHARACTER_BASED,
144
+ per1kChars: 4.5
145
+ },
146
+ // Embeddings
147
+ embeddingSmall: {
148
+ costType: CostType.EMBEDDING,
149
+ inputPer1kTokens: 0.003
150
+ },
151
+ embeddingLarge: {
152
+ costType: CostType.EMBEDDING,
153
+ inputPer1kTokens: 0.0195
154
+ },
155
+ // Anthropic Claude 4 family (2025)
156
+ claudeOpus4: {
157
+ costType: CostType.TOKEN_BASED,
158
+ inputPer1kTokens: 0.045,
159
+ outputPer1kTokens: 0.15
160
+ },
161
+ claudeSonnet4: {
162
+ costType: CostType.TOKEN_BASED,
163
+ inputPer1kTokens: 0.0075,
164
+ outputPer1kTokens: 0.0375
165
+ },
166
+ claudeHaiku4: {
167
+ costType: CostType.TOKEN_BASED,
168
+ inputPer1kTokens: 0.00225,
169
+ outputPer1kTokens: 0.0075
170
+ },
171
+ // Claude 3.7 family
172
+ claude37Sonnet: {
173
+ costType: CostType.TOKEN_BASED,
174
+ inputPer1kTokens: 0.009,
175
+ outputPer1kTokens: 0.027
176
+ },
177
+ // Claude 3.5 family
178
+ claude35Sonnet: {
179
+ costType: CostType.TOKEN_BASED,
180
+ inputPer1kTokens: 0.0075,
181
+ outputPer1kTokens: 0.0225
182
+ },
183
+ claude35Haiku: {
184
+ costType: CostType.TOKEN_BASED,
185
+ inputPer1kTokens: 0.0015,
186
+ outputPer1kTokens: 0.006
187
+ },
188
+ // Claude 3 Opus
189
+ claude3Opus: {
190
+ costType: CostType.TOKEN_BASED,
191
+ inputPer1kTokens: 0.045,
192
+ outputPer1kTokens: 0.15
193
+ },
194
+ // Claude 3 Sonnet
195
+ claude3Sonnet: {
196
+ costType: CostType.TOKEN_BASED,
197
+ inputPer1kTokens: 0.0075,
198
+ outputPer1kTokens: 0.0225
199
+ },
200
+ // Claude 3 Haiku
201
+ claude3Haiku: {
202
+ costType: CostType.TOKEN_BASED,
203
+ inputPer1kTokens: 0.000375,
204
+ outputPer1kTokens: 0.0015
205
+ },
206
+ // --- 3D generation (TASK_BASED) ---
207
+ // Pricing sources:
208
+ // Meshy: https://www.meshy.ai/pricing (verify on each pricing change)
209
+ // Rodin: https://hyperhuman.deemos.com/rodin (verify on each pricing change)
210
+ // All values are in nodetool credits (1 credit = $0.01 USD), including 50% premium.
211
+ // "Preview" = shape-only (fast); "Textured" = preview + refine (PBR textures embedded).
212
+ //
213
+ // TODO: verify exact per-task costs against the live pricing pages above.
214
+ meshy4TextPreviewTier: { costType: CostType.TASK_BASED, perTask: 63 }, // ~$0.42/task
215
+ meshy4TextTexturedTier: { costType: CostType.TASK_BASED, perTask: 221 }, // ~$0.42 preview + ~$1.05 refine = $1.47/task
216
+ meshy4ImageTier: { costType: CostType.TASK_BASED, perTask: 63 }, // ~$0.42/task
217
+ meshy3TurboTextPreviewTier: { costType: CostType.TASK_BASED, perTask: 32 }, // ~$0.21/task
218
+ meshy3TurboTextTexturedTier: { costType: CostType.TASK_BASED, perTask: 111 }, // ~$0.21 + ~$0.53 = $0.74/task
219
+ meshy3TurboImageTier: { costType: CostType.TASK_BASED, perTask: 32 }, // ~$0.21/task
220
+ rodinGen1Tier: { costType: CostType.TASK_BASED, perTask: 120 }, // ~$0.80/task
221
+ rodinGen1TurboTier: { costType: CostType.TASK_BASED, perTask: 75 }, // ~$0.50/task
222
+ rodinSketchTier: { costType: CostType.TASK_BASED, perTask: 45 } // ~$0.30/task
223
+ };
224
+ /**
225
+ * Model ID to tier mapping.
226
+ * Keys are "provider:modelId" strings for provider-specific pricing.
227
+ */
228
+ export const MODEL_TO_TIER = {
229
+ // GPT-5 Series (newest models) - OpenAI specific
230
+ "openai:gpt-5": "gpt5Tier",
231
+ "openai:gpt-5.2": "gpt5Tier",
232
+ "openai:gpt-5.2-pro": "gpt5ProTier",
233
+ "openai:gpt-5-mini": "gpt5MiniTier",
234
+ // GPT-4.1 Family - OpenAI specific
235
+ "openai:gpt-4.1": "gpt41Tier",
236
+ "openai:gpt-4.1-mini": "gpt41MiniTier",
237
+ "openai:gpt-4.1-nano": "gpt41NanoTier",
238
+ // O4 Series (reasoning models) - OpenAI specific
239
+ "openai:o4-mini": "o4MiniTier",
240
+ // O1 Series (existing reasoning models) - OpenAI specific
241
+ "openai:o1": "o1Tier",
242
+ "openai:o1-preview": "o1Tier",
243
+ "openai:o1-mini": "o1MiniTier",
244
+ // O3 Series (future models) - OpenAI specific
245
+ "openai:o3": "o1Tier",
246
+ "openai:o3-mini": "o1MiniTier",
247
+ // GPT-4o Series - OpenAI specific
248
+ "openai:gpt-4o": "topTierChat",
249
+ "openai:gpt-4o-2024-11-20": "topTierChat",
250
+ "openai:gpt-4o-2024-08-06": "topTierChat",
251
+ "openai:gpt-4o-2024-05-13": "topTierChat",
252
+ "openai:gpt-4o-search-preview": "topTierChat",
253
+ "openai:gpt-4o-mini": "lowTierChat",
254
+ "openai:gpt-4o-mini-2024-07-18": "lowTierChat",
255
+ "openai:gpt-4o-mini-search-preview": "lowTierChat",
256
+ // GPT-4 Turbo Series - OpenAI specific
257
+ "openai:gpt-4-turbo": "gpt4Turbo",
258
+ "openai:gpt-4-turbo-2024-04-09": "gpt4Turbo",
259
+ "openai:gpt-4-turbo-preview": "gpt4Turbo",
260
+ "openai:gpt-4-0125-preview": "gpt4Turbo",
261
+ "openai:gpt-4-1106-preview": "gpt4Turbo",
262
+ "openai:computer-use-preview": "topTierChat",
263
+ // Image models - OpenAI specific
264
+ "openai:gpt-image-2": "imageGpt15",
265
+ "openai:gpt-image-1.5": "imageGpt15",
266
+ // Whisper / Speech-to-Text - OpenAI specific
267
+ "openai:whisper-1": "whisperStandard",
268
+ "openai:gpt-4o-transcribe": "whisperStandard",
269
+ "openai:gpt-4o-mini-transcribe": "whisperLowCost",
270
+ // TTS / Text-to-Speech - OpenAI specific
271
+ "openai:gpt-4o-mini-tts": "ttsStandard",
272
+ "openai:tts-1": "ttsHd",
273
+ "openai:tts-1-hd": "ttsUltraHd",
274
+ // Embeddings - OpenAI specific
275
+ "openai:text-embedding-3-small": "embeddingSmall",
276
+ "openai:text-embedding-3-large": "embeddingLarge",
277
+ // Anthropic Models - Anthropic specific
278
+ "anthropic:claude-opus-4-6": "claudeOpus4",
279
+ "anthropic:claude-opus-4-5": "claudeOpus4",
280
+ "anthropic:claude-opus-4-20250514": "claudeOpus4",
281
+ "anthropic:claude-opus-4-20250501": "claudeOpus4",
282
+ "anthropic:claude-sonnet-4-6": "claudeSonnet4",
283
+ "anthropic:claude-sonnet-4-5": "claudeSonnet4",
284
+ "anthropic:claude-sonnet-4-20250514": "claudeSonnet4",
285
+ "anthropic:claude-sonnet-4-20250501": "claudeSonnet4",
286
+ "anthropic:claude-haiku-4-5": "claudeHaiku4",
287
+ "anthropic:claude-haiku-4-20250514": "claudeHaiku4",
288
+ "anthropic:claude-haiku-4-20250501": "claudeHaiku4",
289
+ "anthropic:claude-3-7-sonnet-20250511": "claude37Sonnet",
290
+ "anthropic:claude-3-7-sonnet-20250219": "claude37Sonnet",
291
+ "anthropic:claude-3-5-sonnet-20241022": "claude35Sonnet",
292
+ "anthropic:claude-3-5-sonnet-20240620": "claude35Sonnet",
293
+ "anthropic:claude-3-5-sonnet-latest": "claude35Sonnet",
294
+ "anthropic:claude-3-5-haiku-20241022": "claude35Haiku",
295
+ "anthropic:claude-3-5-haiku-latest": "claude35Haiku",
296
+ "anthropic:claude-3-opus-20240229": "claude3Opus",
297
+ "anthropic:claude-3-opus-latest": "claude3Opus",
298
+ "anthropic:claude-3-sonnet-20240229": "claude3Sonnet",
299
+ "anthropic:claude-3-sonnet-latest": "claude3Sonnet",
300
+ "anthropic:claude-3-haiku-20240307": "claude3Haiku",
301
+ "anthropic:claude-3-haiku-latest": "claude3Haiku",
302
+ // Meshy 3D generation — text tier is textured (preview + refine); image is single-step
303
+ "meshy:meshy-4": "meshy4TextTexturedTier",
304
+ "meshy:meshy-4-preview": "meshy4TextPreviewTier",
305
+ "meshy:meshy-4-image": "meshy4ImageTier",
306
+ "meshy:meshy-3-turbo": "meshy3TurboTextTexturedTier",
307
+ "meshy:meshy-3-turbo-preview": "meshy3TurboTextPreviewTier",
308
+ "meshy:meshy-3-turbo-image": "meshy3TurboImageTier",
309
+ // Rodin 3D generation
310
+ "rodin:rodin-gen-1": "rodinGen1Tier",
311
+ "rodin:rodin-gen-1-turbo": "rodinGen1TurboTier",
312
+ "rodin:rodin-sketch": "rodinSketchTier"
313
+ };
314
+ import { createLogger } from "@nodetool-ai/config";
315
+ const log = createLogger("nodetool.runtime.cost");
316
+ export class CostCalculator {
317
+ /**
318
+ * Get the pricing tier for a model ID scoped by provider.
319
+ *
320
+ * @param modelId - The model identifier
321
+ * @param provider - Provider name (e.g., "openai", "anthropic")
322
+ * @returns The pricing tier name, or null if not found
323
+ */
324
+ static getTier(modelId, provider) {
325
+ const modelLower = modelId.toLowerCase();
326
+ const providerLower = provider.toLowerCase();
327
+ // Direct lookup with "provider:model" key
328
+ const providerKey = `${providerLower}:${modelLower}`;
329
+ if (providerKey in MODEL_TO_TIER) {
330
+ return MODEL_TO_TIER[providerKey];
331
+ }
332
+ // Try prefix match with provider key - sort by model length descending
333
+ // Only look at keys that match the provider
334
+ const providerPrefix = `${providerLower}:`;
335
+ const providerKeys = Object.keys(MODEL_TO_TIER).filter((key) => key.startsWith(providerPrefix));
336
+ // Sort by model portion length descending (longest prefix first)
337
+ providerKeys.sort((a, b) => b.substring(providerPrefix.length).length -
338
+ a.substring(providerPrefix.length).length);
339
+ for (const key of providerKeys) {
340
+ const modelPart = key.substring(providerPrefix.length);
341
+ if (modelLower.startsWith(modelPart)) {
342
+ return MODEL_TO_TIER[key];
343
+ }
344
+ }
345
+ return null;
346
+ }
347
+ /**
348
+ * Calculate cost in credits for an API call.
349
+ *
350
+ * @param modelId - The model identifier
351
+ * @param usage - Usage information from the API response
352
+ * @param provider - Provider name for pricing lookup
353
+ * @returns Cost in credits (1 credit = $0.01 USD)
354
+ */
355
+ static calculate(modelId, usage, provider) {
356
+ const tierName = CostCalculator.getTier(modelId, provider);
357
+ if (tierName === null) {
358
+ log.warn(`No pricing tier found for model: ${modelId} (provider: ${provider})`);
359
+ return 0.0;
360
+ }
361
+ const tier = PRICING_TIERS[tierName];
362
+ if (tier === undefined) {
363
+ log.warn(`Pricing tier '${tierName}' not defined`);
364
+ return 0.0;
365
+ }
366
+ return CostCalculator._calculateForTier(tier, usage);
367
+ }
368
+ /**
369
+ * Calculate cost based on tier type.
370
+ */
371
+ static _calculateForTier(tier, usage) {
372
+ const inputTokens = usage.inputTokens ?? 0;
373
+ const outputTokens = usage.outputTokens ?? 0;
374
+ const cachedTokens = usage.cachedTokens ?? 0;
375
+ const inputCharacters = usage.inputCharacters ?? 0;
376
+ const durationSeconds = usage.durationSeconds ?? 0;
377
+ const imageCount = usage.imageCount ?? 0;
378
+ const videoSeconds = usage.videoSeconds ?? 0;
379
+ if (tier.costType === CostType.TOKEN_BASED) {
380
+ let inputCost;
381
+ let cachedCost;
382
+ if (cachedTokens > 0 && (tier.cachedPer1kTokens ?? 0) > 0) {
383
+ const nonCachedInput = Math.max(0, inputTokens - cachedTokens);
384
+ inputCost = (nonCachedInput / 1000) * (tier.inputPer1kTokens ?? 0);
385
+ cachedCost = (cachedTokens / 1000) * (tier.cachedPer1kTokens ?? 0);
386
+ }
387
+ else {
388
+ inputCost = (inputTokens / 1000) * (tier.inputPer1kTokens ?? 0);
389
+ cachedCost = 0.0;
390
+ }
391
+ const outputCost = (outputTokens / 1000) * (tier.outputPer1kTokens ?? 0);
392
+ return inputCost + outputCost + cachedCost;
393
+ }
394
+ else if (tier.costType === CostType.EMBEDDING) {
395
+ return (inputTokens / 1000) * (tier.inputPer1kTokens ?? 0);
396
+ }
397
+ else if (tier.costType === CostType.CHARACTER_BASED) {
398
+ return (inputCharacters / 1000) * (tier.per1kChars ?? 0);
399
+ }
400
+ else if (tier.costType === CostType.DURATION_BASED) {
401
+ const durationMinutes = durationSeconds / 60.0;
402
+ return durationMinutes * (tier.perMinute ?? 0);
403
+ }
404
+ else if (tier.costType === CostType.IMAGE_BASED) {
405
+ return imageCount * (tier.perImage ?? 0);
406
+ }
407
+ else if (tier.costType === CostType.VIDEO_BASED) {
408
+ return videoSeconds * (tier.perSecondVideo ?? 0);
409
+ }
410
+ else if (tier.costType === CostType.TASK_BASED) {
411
+ const taskCount = usage.taskCount ?? 1;
412
+ return taskCount * (tier.perTask ?? 0);
413
+ }
414
+ return 0.0;
415
+ }
416
+ }
417
+ // Convenience functions
418
+ /**
419
+ * Calculate chat completion cost.
420
+ */
421
+ export function calculateChatCost(modelId, inputTokens, outputTokens, cachedTokens = 0, provider = "openai") {
422
+ const usage = { inputTokens, outputTokens, cachedTokens };
423
+ return CostCalculator.calculate(modelId, usage, provider);
424
+ }
425
+ /**
426
+ * Calculate embedding cost.
427
+ */
428
+ export function calculateEmbeddingCost(modelId, inputTokens, provider = "openai") {
429
+ const usage = { inputTokens };
430
+ return CostCalculator.calculate(modelId, usage, provider);
431
+ }
432
+ /**
433
+ * Calculate TTS cost.
434
+ */
435
+ export function calculateSpeechCost(modelId, inputChars, provider = "openai") {
436
+ const usage = { inputCharacters: inputChars };
437
+ return CostCalculator.calculate(modelId, usage, provider);
438
+ }
439
+ /**
440
+ * Calculate ASR/Whisper cost.
441
+ */
442
+ export function calculateWhisperCost(modelId, durationSeconds, provider = "openai") {
443
+ const usage = { durationSeconds };
444
+ return CostCalculator.calculate(modelId, usage, provider);
445
+ }
446
+ /**
447
+ * Calculate 3D model generation cost.
448
+ * Pass `taskCount` > 1 only if multiple tasks were submitted (rare).
449
+ */
450
+ export function calculateModel3DCost(modelId, provider, taskCount = 1) {
451
+ const usage = { taskCount };
452
+ return CostCalculator.calculate(modelId, usage, provider);
453
+ }
454
+ /**
455
+ * Calculate image generation cost.
456
+ */
457
+ export function calculateImageCost(modelId, imageCount = 1, quality = "medium", provider = "openai") {
458
+ // Adjust tier based on quality for gpt-image models
459
+ if (modelId.toLowerCase().includes("gpt-image") && !modelId.includes("1.5")) {
460
+ const qualityMap = {
461
+ low: "imageGptLow",
462
+ medium: "imageGptMedium",
463
+ high: "imageGptHigh"
464
+ };
465
+ const tierOverride = qualityMap[quality.toLowerCase()] ?? "imageGptMedium";
466
+ const tier = PRICING_TIERS[tierOverride];
467
+ if (tier) {
468
+ const usage = { imageCount };
469
+ return CostCalculator["_calculateForTier"](tier, usage);
470
+ }
471
+ }
472
+ const usage = { imageCount };
473
+ return CostCalculator.calculate(modelId, usage, provider);
474
+ }
475
+ //# sourceMappingURL=cost-calculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-calculator.js","sourceRoot":"","sources":["../../src/providers/cost-calculator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import OpenAI from "openai";
2
+ import { OpenAIProvider } from "./openai-provider.js";
3
+ import type { LanguageModel } from "./types.js";
4
+ interface DeepSeekProviderOptions {
5
+ client?: OpenAI;
6
+ clientFactory?: (apiKey: string) => OpenAI;
7
+ fetchFn?: typeof fetch;
8
+ }
9
+ /**
10
+ * DeepSeek provider. Uses the OpenAI SDK against DeepSeek's
11
+ * OpenAI-compatible endpoint at https://api.deepseek.com/v1.
12
+ * Covers DeepSeek-V3 chat and DeepSeek-R1 reasoning models.
13
+ */
14
+ export declare class DeepSeekProvider extends OpenAIProvider {
15
+ static requiredSecrets(): string[];
16
+ private _deepseekFetch;
17
+ constructor(secrets: {
18
+ DEEPSEEK_API_KEY?: string;
19
+ }, options?: DeepSeekProviderOptions);
20
+ getContainerEnv(): Record<string, string>;
21
+ hasToolSupport(_model: string): Promise<boolean>;
22
+ getAvailableLanguageModels(): Promise<LanguageModel[]>;
23
+ }
24
+ export {};
25
+ //# sourceMappingURL=deepseek-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepseek-provider.d.ts","sourceRoot":"","sources":["../../src/providers/deepseek-provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,UAAU,uBAAuB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AAED;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,cAAc;WAClC,eAAe,IAAI,MAAM,EAAE;IAI3C,OAAO,CAAC,cAAc,CAAe;gBAGnC,OAAO,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,EACtC,OAAO,GAAE,uBAA4B;IA4B9B,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAInC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhD,0BAA0B,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;CA6BtE"}
@@ -0,0 +1,58 @@
1
+ import OpenAI from "openai";
2
+ import { OpenAIProvider } from "./openai-provider.js";
3
+ const DEEPSEEK_BASE_URL = "https://api.deepseek.com/v1";
4
+ /**
5
+ * DeepSeek provider. Uses the OpenAI SDK against DeepSeek's
6
+ * OpenAI-compatible endpoint at https://api.deepseek.com/v1.
7
+ * Covers DeepSeek-V3 chat and DeepSeek-R1 reasoning models.
8
+ */
9
+ export class DeepSeekProvider extends OpenAIProvider {
10
+ static requiredSecrets() {
11
+ return ["DEEPSEEK_API_KEY"];
12
+ }
13
+ _deepseekFetch;
14
+ constructor(secrets, options = {}) {
15
+ const apiKey = secrets.DEEPSEEK_API_KEY;
16
+ if (!apiKey) {
17
+ throw new Error("DEEPSEEK_API_KEY is required");
18
+ }
19
+ const fetchFn = options.fetchFn ?? globalThis.fetch.bind(globalThis);
20
+ super({ OPENAI_API_KEY: apiKey }, {
21
+ client: options.client,
22
+ clientFactory: options.clientFactory ??
23
+ ((key) => new OpenAI({
24
+ apiKey: key,
25
+ baseURL: DEEPSEEK_BASE_URL
26
+ })),
27
+ fetchFn
28
+ });
29
+ this.provider = "deepseek";
30
+ this._deepseekFetch = fetchFn;
31
+ }
32
+ getContainerEnv() {
33
+ return { DEEPSEEK_API_KEY: this.apiKey };
34
+ }
35
+ async hasToolSupport(_model) {
36
+ return true;
37
+ }
38
+ async getAvailableLanguageModels() {
39
+ const response = await this._deepseekFetch(`${DEEPSEEK_BASE_URL}/models`, {
40
+ headers: {
41
+ Authorization: `Bearer ${this.apiKey}`
42
+ }
43
+ });
44
+ if (!response.ok) {
45
+ return [];
46
+ }
47
+ const payload = (await response.json());
48
+ const rows = payload.data ?? [];
49
+ return rows
50
+ .filter((row) => typeof row.id === "string" && row.id.length > 0)
51
+ .map((row) => ({
52
+ id: row.id,
53
+ name: row.name ?? row.id,
54
+ provider: "deepseek"
55
+ }));
56
+ }
57
+ }
58
+ //# sourceMappingURL=deepseek-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepseek-provider.js","sourceRoot":"","sources":["../../src/providers/deepseek-provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,MAAM,iBAAiB,GAAG,6BAA6B,CAAC;AAQxD;;;;GAIG;AACH,MAAM,OAAO,gBAAiB,SAAQ,cAAc;IAClD,MAAM,CAAU,eAAe;QAC7B,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC9B,CAAC;IAEO,cAAc,CAAe;IAErC,YACE,OAAsC,EACtC,UAAmC,EAAE;QAErC,MAAM,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACxC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAErE,KAAK,CACH,EAAE,cAAc,EAAE,MAAM,EAAE,EAC1B;YACE,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,aAAa,EACX,OAAO,CAAC,aAAa;gBACrB,CAAC,CAAC,GAAG,EAAE,EAAE,CACP,IAAI,MAAM,CAAC;oBACT,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,iBAAiB;iBAC3B,CAAC,CAAC;YACP,OAAO;SACR,CACF,CAAC;QAED,IAA6B,CAAC,QAAQ,GAAG,UAAU,CAAC;QACrD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;IAChC,CAAC;IAEQ,eAAe;QACtB,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IAC3C,CAAC;IAEQ,KAAK,CAAC,cAAc,CAAC,MAAc;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAEQ,KAAK,CAAC,0BAA0B;QACvC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CACxC,GAAG,iBAAiB,SAAS,EAC7B;YACE,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;aACvC;SACF,CACF,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAErC,CAAC;QACF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;QAChC,OAAO,IAAI;aACR,MAAM,CACL,CAAC,GAAG,EAAwC,EAAE,CAC5C,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAClD;aACA,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACb,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE;YACxB,QAAQ,EAAE,UAAU;SACrB,CAAC,CAAC,CAAC;IACR,CAAC;CACF"}
@@ -0,0 +1,52 @@
1
+ import { BaseProvider } from "./base-provider.js";
2
+ import type { LanguageModel, Message, ProviderStreamItem, ProviderTool, ToolCall } from "./types.js";
3
+ type CustomResponseFn = (messages: Message[], model: string) => string | ToolCall[];
4
+ export interface FakeProviderOptions {
5
+ textResponse?: string;
6
+ toolCalls?: ToolCall[];
7
+ shouldStream?: boolean;
8
+ chunkSize?: number;
9
+ customResponseFn?: CustomResponseFn;
10
+ }
11
+ export declare class FakeProvider extends BaseProvider {
12
+ textResponse: string;
13
+ toolCalls: ToolCall[];
14
+ shouldStream: boolean;
15
+ chunkSize: number;
16
+ customResponseFn: CustomResponseFn | null;
17
+ callCount: number;
18
+ lastMessages: Message[] | null;
19
+ lastModel: string | null;
20
+ lastTools: ProviderTool[];
21
+ constructor(options?: FakeProviderOptions);
22
+ private getResponse;
23
+ resetCallCount(): void;
24
+ getAvailableLanguageModels(): Promise<LanguageModel[]>;
25
+ generateMessage(args: {
26
+ messages: Message[];
27
+ model: string;
28
+ tools?: ProviderTool[];
29
+ maxTokens?: number;
30
+ temperature?: number;
31
+ topP?: number;
32
+ presencePenalty?: number;
33
+ frequencyPenalty?: number;
34
+ }): Promise<Message>;
35
+ generateMessages(args: {
36
+ messages: Message[];
37
+ model: string;
38
+ tools?: ProviderTool[];
39
+ maxTokens?: number;
40
+ temperature?: number;
41
+ topP?: number;
42
+ presencePenalty?: number;
43
+ frequencyPenalty?: number;
44
+ audio?: Record<string, unknown>;
45
+ }): AsyncGenerator<ProviderStreamItem>;
46
+ }
47
+ export declare function createFakeToolCall(name: string, args?: Record<string, unknown>, callId?: string): ToolCall;
48
+ export declare function createSimpleFakeProvider(responseText?: string): FakeProvider;
49
+ export declare function createStreamingFakeProvider(responseText?: string, chunkSize?: number): FakeProvider;
50
+ export declare function createToolCallingFakeProvider(toolCalls: ToolCall[]): FakeProvider;
51
+ export {};
52
+ //# sourceMappingURL=fake-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fake-provider.d.ts","sourceRoot":"","sources":["../../src/providers/fake-provider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EACV,aAAa,EACb,OAAO,EAEP,kBAAkB,EAClB,YAAY,EACZ,QAAQ,EACT,MAAM,YAAY,CAAC;AAEpB,KAAK,gBAAgB,GAAG,CACtB,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,MAAM,KACV,MAAM,GAAG,QAAQ,EAAE,CAAC;AAEzB,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,qBAAa,YAAa,SAAQ,YAAY;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAE1C,SAAS,SAAK;IACd,YAAY,EAAE,OAAO,EAAE,GAAG,IAAI,CAAQ;IACtC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IAChC,SAAS,EAAE,YAAY,EAAE,CAAM;gBAEnB,OAAO,GAAE,mBAAwB;IAU7C,OAAO,CAAC,WAAW;IAUnB,cAAc,IAAI,IAAI;IAIP,0BAA0B,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAQ/D,eAAe,CAAC,IAAI,EAAE;QAC1B,QAAQ,EAAE,OAAO,EAAE,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,GAAG,OAAO,CAAC,OAAO,CAAC;IAeb,gBAAgB,CAAC,IAAI,EAAE;QAC5B,QAAQ,EAAE,OAAO,EAAE,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACjC,GAAG,cAAc,CAAC,kBAAkB,CAAC;CAmCvC;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,MAAM,CAAC,EAAE,MAAM,GACd,QAAQ,CAMV;AAED,wBAAgB,wBAAwB,CACtC,YAAY,SAAkB,GAC7B,YAAY,CAEd;AAED,wBAAgB,2BAA2B,CACzC,YAAY,SAAsC,EAClD,SAAS,SAAI,GACZ,YAAY,CAMd;AAED,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,QAAQ,EAAE,GACpB,YAAY,CAEd"}