@sogni-ai/sogni-client 4.2.0-alpha.21 → 4.2.0-alpha.22

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 (170) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/CLAUDE.md +7 -0
  3. package/README.md +45 -25
  4. package/dist/Chat/ChatTools.js +30 -16
  5. package/dist/Chat/ChatTools.js.map +1 -1
  6. package/dist/Chat/hostedToolValidation.generated.d.ts +46 -0
  7. package/dist/Chat/hostedToolValidation.generated.js +306 -0
  8. package/dist/Chat/hostedToolValidation.generated.js.map +1 -0
  9. package/dist/Chat/index.d.ts +41 -1
  10. package/dist/Chat/index.js +166 -2
  11. package/dist/Chat/index.js.map +1 -1
  12. package/dist/Chat/modelRouting.d.ts +8 -26
  13. package/dist/Chat/modelRouting.js +11 -106
  14. package/dist/Chat/modelRouting.js.map +1 -1
  15. package/dist/Chat/sogniHostedTools.generated.json +1285 -283
  16. package/dist/Chat/tools.d.ts +52 -3
  17. package/dist/Chat/tools.js +80 -27
  18. package/dist/Chat/tools.js.map +1 -1
  19. package/dist/Chat/types.d.ts +119 -3
  20. package/dist/CreativeWorkflows/index.d.ts +1 -7
  21. package/dist/CreativeWorkflows/index.js +23 -21
  22. package/dist/CreativeWorkflows/index.js.map +1 -1
  23. package/dist/CreativeWorkflows/types.d.ts +27 -33
  24. package/dist/index.d.ts +19 -4
  25. package/dist/index.js +1 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/lib/Cache.js +6 -1
  28. package/dist/lib/Cache.js.map +1 -1
  29. package/dist-esm/Account/CurrentAccount.js +59 -0
  30. package/dist-esm/Account/CurrentAccount.js.map +1 -0
  31. package/dist-esm/Account/index.js +543 -0
  32. package/dist-esm/Account/index.js.map +1 -0
  33. package/dist-esm/Account/types.js +2 -0
  34. package/dist-esm/Account/types.js.map +1 -0
  35. package/dist-esm/ApiClient/WebSocketClient/BrowserWebSocketClient/ChannelCoordinator.js +327 -0
  36. package/dist-esm/ApiClient/WebSocketClient/BrowserWebSocketClient/ChannelCoordinator.js.map +1 -0
  37. package/dist-esm/ApiClient/WebSocketClient/BrowserWebSocketClient/index.js +222 -0
  38. package/dist-esm/ApiClient/WebSocketClient/BrowserWebSocketClient/index.js.map +1 -0
  39. package/dist-esm/ApiClient/WebSocketClient/ErrorCode.js +15 -0
  40. package/dist-esm/ApiClient/WebSocketClient/ErrorCode.js.map +1 -0
  41. package/dist-esm/ApiClient/WebSocketClient/eventSubscriptions.js +35 -0
  42. package/dist-esm/ApiClient/WebSocketClient/eventSubscriptions.js.map +1 -0
  43. package/dist-esm/ApiClient/WebSocketClient/events.js +2 -0
  44. package/dist-esm/ApiClient/WebSocketClient/events.js.map +1 -0
  45. package/dist-esm/ApiClient/WebSocketClient/index.js +221 -0
  46. package/dist-esm/ApiClient/WebSocketClient/index.js.map +1 -0
  47. package/dist-esm/ApiClient/WebSocketClient/messages.js +2 -0
  48. package/dist-esm/ApiClient/WebSocketClient/messages.js.map +1 -0
  49. package/dist-esm/ApiClient/WebSocketClient/types.js +2 -0
  50. package/dist-esm/ApiClient/WebSocketClient/types.js.map +1 -0
  51. package/dist-esm/ApiClient/events.js +2 -0
  52. package/dist-esm/ApiClient/events.js.map +1 -0
  53. package/dist-esm/ApiClient/index.js +120 -0
  54. package/dist-esm/ApiClient/index.js.map +1 -0
  55. package/dist-esm/ApiGroup.js +10 -0
  56. package/dist-esm/ApiGroup.js.map +1 -0
  57. package/dist-esm/Chat/ChatStream.js +181 -0
  58. package/dist-esm/Chat/ChatStream.js.map +1 -0
  59. package/dist-esm/Chat/ChatTools.js +562 -0
  60. package/dist-esm/Chat/ChatTools.js.map +1 -0
  61. package/dist-esm/Chat/hostedToolValidation.generated.js +301 -0
  62. package/dist-esm/Chat/hostedToolValidation.generated.js.map +1 -0
  63. package/dist-esm/Chat/index.js +598 -0
  64. package/dist-esm/Chat/index.js.map +1 -0
  65. package/dist-esm/Chat/modelRouting.js +326 -0
  66. package/dist-esm/Chat/modelRouting.js.map +1 -0
  67. package/dist-esm/Chat/sogniHostedTools.generated.json +1531 -0
  68. package/dist-esm/Chat/tools.js +149 -0
  69. package/dist-esm/Chat/tools.js.map +1 -0
  70. package/dist-esm/Chat/types.js +2 -0
  71. package/dist-esm/Chat/types.js.map +1 -0
  72. package/dist-esm/CreativeWorkflows/index.js +256 -0
  73. package/dist-esm/CreativeWorkflows/index.js.map +1 -0
  74. package/dist-esm/CreativeWorkflows/types.js +2 -0
  75. package/dist-esm/CreativeWorkflows/types.js.map +1 -0
  76. package/dist-esm/Projects/Job.js +391 -0
  77. package/dist-esm/Projects/Job.js.map +1 -0
  78. package/dist-esm/Projects/Project.js +295 -0
  79. package/dist-esm/Projects/Project.js.map +1 -0
  80. package/dist-esm/Projects/createJobRequestMessage.js +528 -0
  81. package/dist-esm/Projects/createJobRequestMessage.js.map +1 -0
  82. package/dist-esm/Projects/index.js +1309 -0
  83. package/dist-esm/Projects/index.js.map +1 -0
  84. package/dist-esm/Projects/types/ComfySamplerParams.js +2 -0
  85. package/dist-esm/Projects/types/ComfySamplerParams.js.map +1 -0
  86. package/dist-esm/Projects/types/ControlNetParams.js +2 -0
  87. package/dist-esm/Projects/types/ControlNetParams.js.map +1 -0
  88. package/dist-esm/Projects/types/EstimationResponse.js +2 -0
  89. package/dist-esm/Projects/types/EstimationResponse.js.map +1 -0
  90. package/dist-esm/Projects/types/ModelOptions.js +89 -0
  91. package/dist-esm/Projects/types/ModelOptions.js.map +1 -0
  92. package/dist-esm/Projects/types/ModelTiersRaw.js +13 -0
  93. package/dist-esm/Projects/types/ModelTiersRaw.js.map +1 -0
  94. package/dist-esm/Projects/types/RawProject.js +2 -0
  95. package/dist-esm/Projects/types/RawProject.js.map +1 -0
  96. package/dist-esm/Projects/types/events.js +2 -0
  97. package/dist-esm/Projects/types/events.js.map +1 -0
  98. package/dist-esm/Projects/types/index.js +10 -0
  99. package/dist-esm/Projects/types/index.js.map +1 -0
  100. package/dist-esm/Projects/utils/index.js +229 -0
  101. package/dist-esm/Projects/utils/index.js.map +1 -0
  102. package/dist-esm/Projects/utils/samplers.js +36 -0
  103. package/dist-esm/Projects/utils/samplers.js.map +1 -0
  104. package/dist-esm/Projects/utils/scheduler.js +27 -0
  105. package/dist-esm/Projects/utils/scheduler.js.map +1 -0
  106. package/dist-esm/Stats/index.js +20 -0
  107. package/dist-esm/Stats/index.js.map +1 -0
  108. package/dist-esm/Stats/types.js +2 -0
  109. package/dist-esm/Stats/types.js.map +1 -0
  110. package/dist-esm/events.js +2 -0
  111. package/dist-esm/events.js.map +1 -0
  112. package/dist-esm/index.js +144 -0
  113. package/dist-esm/index.js.map +1 -0
  114. package/dist-esm/lib/AuthManager/ApiKeyAuthManager.js +58 -0
  115. package/dist-esm/lib/AuthManager/ApiKeyAuthManager.js.map +1 -0
  116. package/dist-esm/lib/AuthManager/AuthManagerBase.js +9 -0
  117. package/dist-esm/lib/AuthManager/AuthManagerBase.js.map +1 -0
  118. package/dist-esm/lib/AuthManager/CookieAuthManager.js +48 -0
  119. package/dist-esm/lib/AuthManager/CookieAuthManager.js.map +1 -0
  120. package/dist-esm/lib/AuthManager/TokenAuthManager.js +186 -0
  121. package/dist-esm/lib/AuthManager/TokenAuthManager.js.map +1 -0
  122. package/dist-esm/lib/AuthManager/index.js +5 -0
  123. package/dist-esm/lib/AuthManager/index.js.map +1 -0
  124. package/dist-esm/lib/Cache.js +32 -0
  125. package/dist-esm/lib/Cache.js.map +1 -0
  126. package/dist-esm/lib/DataEntity.js +30 -0
  127. package/dist-esm/lib/DataEntity.js.map +1 -0
  128. package/dist-esm/lib/DefaultLogger.js +32 -0
  129. package/dist-esm/lib/DefaultLogger.js.map +1 -0
  130. package/dist-esm/lib/EIP712Helper.js +37 -0
  131. package/dist-esm/lib/EIP712Helper.js.map +1 -0
  132. package/dist-esm/lib/RestClient.js +90 -0
  133. package/dist-esm/lib/RestClient.js.map +1 -0
  134. package/dist-esm/lib/TypedEventEmitter.js +68 -0
  135. package/dist-esm/lib/TypedEventEmitter.js.map +1 -0
  136. package/dist-esm/lib/base64.js +18 -0
  137. package/dist-esm/lib/base64.js.map +1 -0
  138. package/dist-esm/lib/getUUID.js +7 -0
  139. package/dist-esm/lib/getUUID.js.map +1 -0
  140. package/dist-esm/lib/isNodejs.js +3 -0
  141. package/dist-esm/lib/isNodejs.js.map +1 -0
  142. package/dist-esm/lib/mediaValidation.js +277 -0
  143. package/dist-esm/lib/mediaValidation.js.map +1 -0
  144. package/dist-esm/lib/utils/index.js +30 -0
  145. package/dist-esm/lib/utils/index.js.map +1 -0
  146. package/dist-esm/lib/validation.js +138 -0
  147. package/dist-esm/lib/validation.js.map +1 -0
  148. package/dist-esm/package.json +3 -0
  149. package/dist-esm/types/ErrorData.js +2 -0
  150. package/dist-esm/types/ErrorData.js.map +1 -0
  151. package/dist-esm/types/json.js +2 -0
  152. package/dist-esm/types/json.js.map +1 -0
  153. package/dist-esm/types/token.js +2 -0
  154. package/dist-esm/types/token.js.map +1 -0
  155. package/dist-esm/version.js +3 -0
  156. package/dist-esm/version.js.map +1 -0
  157. package/llms-full.txt +11 -20
  158. package/llms.txt +9 -18
  159. package/package.json +21 -5
  160. package/src/Chat/ChatTools.ts +36 -16
  161. package/src/Chat/hostedToolValidation.generated.ts +453 -0
  162. package/src/Chat/index.ts +198 -3
  163. package/src/Chat/modelRouting.ts +26 -150
  164. package/src/Chat/sogniHostedTools.generated.json +1285 -283
  165. package/src/Chat/tools.ts +106 -41
  166. package/src/Chat/types.ts +131 -3
  167. package/src/CreativeWorkflows/index.ts +22 -41
  168. package/src/CreativeWorkflows/types.ts +69 -42
  169. package/src/index.ts +33 -12
  170. package/src/lib/Cache.ts +8 -1
@@ -0,0 +1,598 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
11
+ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
12
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
13
+ var g = generator.apply(thisArg, _arguments || []), i, q = [];
14
+ return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
15
+ function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
16
+ function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
17
+ function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
18
+ function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
19
+ function fulfill(value) { resume("next", value); }
20
+ function reject(value) { resume("throw", value); }
21
+ function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
22
+ };
23
+ import ApiGroup from '../ApiGroup';
24
+ import ChatStream from './ChatStream';
25
+ import ChatToolsApi from './ChatTools';
26
+ import getUUID from '../lib/getUUID';
27
+ import { parseInlineMediaDataUri } from '../lib/mediaValidation';
28
+ const MAX_VISION_IMAGE_COUNT = 20;
29
+ const MAX_VISION_IMAGE_BYTES = 10 * 1024 * 1024;
30
+ const MAX_VISION_IMAGE_LONGEST_SIDE = 1024;
31
+ function normalizeVisionImageDataUri(input) {
32
+ parseInlineMediaDataUri(input, 'image', {
33
+ maxBytes: MAX_VISION_IMAGE_BYTES,
34
+ maxImageLongestSide: MAX_VISION_IMAGE_LONGEST_SIDE
35
+ });
36
+ return input.trim();
37
+ }
38
+ function normalizeVisionMessages(messages) {
39
+ let imageCount = 0;
40
+ return messages.map((msg) => {
41
+ if (!Array.isArray(msg.content)) {
42
+ return msg;
43
+ }
44
+ return Object.assign(Object.assign({}, msg), { content: msg.content.map((part) => {
45
+ if (part.type !== 'image_url') {
46
+ return part;
47
+ }
48
+ imageCount += 1;
49
+ if (imageCount > MAX_VISION_IMAGE_COUNT) {
50
+ throw new Error(`A maximum of ${MAX_VISION_IMAGE_COUNT} vision images is allowed per request`);
51
+ }
52
+ return {
53
+ type: 'image_url',
54
+ image_url: Object.assign({ url: normalizeVisionImageDataUri(part.image_url.url) }, (part.image_url.detail && { detail: part.image_url.detail }))
55
+ };
56
+ }) });
57
+ });
58
+ }
59
+ /**
60
+ * Chat API for LLM text generation via the Sogni Supernet.
61
+ *
62
+ * Provides OpenAI-compatible chat completion interface using Sogni's
63
+ * decentralized LLM worker network.
64
+ *
65
+ * Usage:
66
+ * ```typescript
67
+ * // Streaming
68
+ * const stream = await sogni.chat.completions.create({
69
+ * model: 'qwen3.6-35b-a3b-gguf-iq4xs',
70
+ * messages: [{ role: 'user', content: 'Hello!' }],
71
+ * stream: true,
72
+ * });
73
+ * for await (const chunk of stream) {
74
+ * process.stdout.write(chunk.content);
75
+ * }
76
+ *
77
+ * // Non-streaming
78
+ * const result = await sogni.chat.completions.create({
79
+ * model: 'qwen3.6-35b-a3b-gguf-iq4xs',
80
+ * messages: [{ role: 'user', content: 'Hello!' }],
81
+ * });
82
+ * console.log(result.content);
83
+ * ```
84
+ */
85
+ class ChatApi extends ApiGroup {
86
+ constructor(config, projects) {
87
+ super(config);
88
+ this.activeStreams = new Map();
89
+ this.availableLLMModels = {};
90
+ // Bind the socket events — use llmJobResult/llmJobError to avoid conflicting with ProjectsApi handlers
91
+ this.client.socket.on('jobTokens', this.handleJobTokens.bind(this));
92
+ this.client.socket.on('llmJobResult', this.handleJobResult.bind(this));
93
+ this.client.socket.on('llmJobError', this.handleJobError.bind(this));
94
+ this.client.socket.on('jobState', this.handleJobState.bind(this));
95
+ this.client.socket.on('swarmLLMModels', this.handleSwarmLLMModels.bind(this));
96
+ // Set up the completions namespace (mimics OpenAI SDK structure)
97
+ this.completions = {
98
+ create: this.createCompletion.bind(this)
99
+ };
100
+ this.hosted = {
101
+ create: this.createHostedCompletion.bind(this)
102
+ };
103
+ this.runs = {
104
+ create: this.createChatRun.bind(this),
105
+ get: this.getChatRun.bind(this),
106
+ cancel: this.cancelChatRun.bind(this),
107
+ streamEvents: this.streamChatRunEvents.bind(this)
108
+ };
109
+ // Set up the tools API (requires ProjectsApi for media generation).
110
+ // When ProjectsApi is not provided, tool execution methods will throw at runtime.
111
+ this.tools = new ChatToolsApi(projects);
112
+ }
113
+ /** Available LLM models and their worker counts */
114
+ get models() {
115
+ return Object.assign({}, this.availableLLMModels);
116
+ }
117
+ /**
118
+ * Wait for available LLM models to be received from the network.
119
+ * Resolves immediately if models are already available.
120
+ * @param timeout - timeout in milliseconds until the promise is rejected (default: 10000)
121
+ */
122
+ waitForModels(timeout = 10000) {
123
+ if (Object.keys(this.availableLLMModels).length > 0) {
124
+ return Promise.resolve(Object.assign({}, this.availableLLMModels));
125
+ }
126
+ return new Promise((resolve, reject) => {
127
+ let settled = false;
128
+ const timeoutId = setTimeout(() => {
129
+ if (!settled) {
130
+ settled = true;
131
+ this.off('modelsUpdated', handler);
132
+ reject(new Error('Timeout waiting for LLM models'));
133
+ }
134
+ }, timeout);
135
+ const handler = (models) => {
136
+ if (Object.keys(models).length > 0 && !settled) {
137
+ settled = true;
138
+ clearTimeout(timeoutId);
139
+ this.off('modelsUpdated', handler);
140
+ resolve(models);
141
+ }
142
+ };
143
+ this.on('modelsUpdated', handler);
144
+ });
145
+ }
146
+ /**
147
+ * Estimate the cost of a chat completion request before submitting it.
148
+ *
149
+ * Uses the same token estimation formula as the server:
150
+ * input tokens ≈ ceil(JSON.stringify(messages).length / 4)
151
+ *
152
+ * @example
153
+ * ```typescript
154
+ * const estimate = await sogni.chat.estimateCost({
155
+ * model: 'qwen3.6-35b-a3b-gguf-iq4xs',
156
+ * messages: [{ role: 'user', content: 'Hello!' }],
157
+ * think: true,
158
+ * taskProfile: 'reasoning',
159
+ * });
160
+ * console.log(`Estimated cost: ${estimate.costInToken.toFixed(6)}`);
161
+ * ```
162
+ */
163
+ estimateCost(params) {
164
+ return __awaiter(this, void 0, void 0, function* () {
165
+ const normalizedMessages = normalizeVisionMessages(params.messages);
166
+ const tokenType = params.tokenType || 'sogni';
167
+ const inputTokens = Math.ceil(JSON.stringify(this.stripImageDataForEstimation(normalizedMessages)).length / 4);
168
+ const maxOutputTokens = this.resolveEstimatedMaxOutputTokens(params);
169
+ const pathParams = [tokenType, params.model, inputTokens, maxOutputTokens];
170
+ const path = pathParams.map((p) => encodeURIComponent(p)).join('/');
171
+ const r = yield this.client.socket.get(`/api/v1/job-llm/estimate/${path}`);
172
+ return {
173
+ costInUSD: r.quote.costInUSD,
174
+ costInSogni: r.quote.costInSogni,
175
+ costInSpark: r.quote.costInSpark,
176
+ costInToken: r.quote.costInToken,
177
+ inputTokens: r.quote.inputTokens,
178
+ outputTokens: r.quote.outputTokens
179
+ };
180
+ });
181
+ }
182
+ resolveEstimatedMaxOutputTokens(params) {
183
+ var _a, _b;
184
+ if (typeof params.max_tokens === 'number' && Number.isFinite(params.max_tokens)) {
185
+ return params.max_tokens;
186
+ }
187
+ const modelInfo = this.availableLLMModels[params.model];
188
+ const defaultFromModel = (_a = modelInfo === null || modelInfo === void 0 ? void 0 : modelInfo.maxOutputTokens) === null || _a === void 0 ? void 0 : _a.default;
189
+ const thinkingComplexDefault = (_b = modelInfo === null || modelInfo === void 0 ? void 0 : modelInfo.maxOutputTokens) === null || _b === void 0 ? void 0 : _b.thinkingComplexDefault;
190
+ const isComplexThinking = params.think === true &&
191
+ (params.taskProfile === 'coding' || params.taskProfile === 'reasoning');
192
+ if (isComplexThinking &&
193
+ typeof thinkingComplexDefault === 'number' &&
194
+ Number.isFinite(thinkingComplexDefault)) {
195
+ return thinkingComplexDefault;
196
+ }
197
+ if (typeof defaultFromModel === 'number' && Number.isFinite(defaultFromModel)) {
198
+ return defaultFromModel;
199
+ }
200
+ return 4096;
201
+ }
202
+ handleSwarmLLMModels(data) {
203
+ const models = {};
204
+ for (const [modelId, value] of Object.entries(data)) {
205
+ if (typeof value === 'number') {
206
+ // Legacy format: { modelId: workerCount }
207
+ models[modelId] = { workers: value };
208
+ }
209
+ else {
210
+ models[modelId] = value;
211
+ }
212
+ }
213
+ this.availableLLMModels = models;
214
+ this.emit('modelsUpdated', this.availableLLMModels);
215
+ }
216
+ /**
217
+ * Strip base64 image data from messages before token estimation.
218
+ * Prevents megabytes of base64 data from inflating the JSON.stringify().length / 4 calculation.
219
+ */
220
+ stripImageDataForEstimation(messages) {
221
+ return messages.map((msg) => {
222
+ if (!Array.isArray(msg.content))
223
+ return msg;
224
+ return Object.assign(Object.assign({}, msg), { content: msg.content.map((part) => {
225
+ if (part.type === 'image_url') {
226
+ return {
227
+ type: 'image_url',
228
+ image_url: Object.assign({ url: '[image]' }, (part.image_url.detail && { detail: part.image_url.detail }))
229
+ };
230
+ }
231
+ return part;
232
+ }) });
233
+ });
234
+ }
235
+ /**
236
+ * Build `chat_template_kwargs` from the `think` parameter.
237
+ * Returns `undefined` when `think` is omitted (server defaults apply).
238
+ */
239
+ buildChatTemplateKwargs(think) {
240
+ if (think === undefined)
241
+ return undefined;
242
+ return { enable_thinking: think };
243
+ }
244
+ normalizeSogniToolsMode(value) {
245
+ return typeof value === 'string' && value.trim().toLowerCase() === 'rich'
246
+ ? 'creative-tools'
247
+ : value;
248
+ }
249
+ createCompletion(params) {
250
+ return __awaiter(this, void 0, void 0, function* () {
251
+ // Handle autoExecuteTools (non-streaming only)
252
+ if (params.autoExecuteTools) {
253
+ if (params.stream) {
254
+ throw new Error('autoExecuteTools is not supported with stream: true. ' +
255
+ 'Use chat.tools.executeAll() manually in your streaming loop instead.');
256
+ }
257
+ return this.createCompletionWithAutoTools(params);
258
+ }
259
+ return this.createSingleCompletion(params);
260
+ });
261
+ }
262
+ createHostedCompletion(params) {
263
+ return __awaiter(this, void 0, void 0, function* () {
264
+ var _a, _b, _c, _d, _e, _f, _g;
265
+ if (params.stream) {
266
+ throw new Error('chat.hosted.create currently supports non-streaming requests only.');
267
+ }
268
+ const normalizedMessages = normalizeVisionMessages(params.messages);
269
+ const chatTemplateKwargs = (_a = params.chat_template_kwargs) !== null && _a !== void 0 ? _a : this.buildChatTemplateKwargs(params.think);
270
+ return this.client.rest.post('/v1/chat/completions', Object.assign(Object.assign({ model: params.model, messages: normalizedMessages, app_source: (_c = (_b = params.app_source) !== null && _b !== void 0 ? _b : params.appSource) !== null && _c !== void 0 ? _c : this.client.appSource, max_tokens: params.max_tokens, temperature: params.temperature, top_p: params.top_p, top_k: params.top_k, min_p: params.min_p, repetition_penalty: params.repetition_penalty, frequency_penalty: params.frequency_penalty, presence_penalty: params.presence_penalty, stop: params.stop, token_type: (_d = params.token_type) !== null && _d !== void 0 ? _d : params.tokenType, tools: params.tools, tool_choice: params.tool_choice, sogni_tools: this.normalizeSogniToolsMode(params.sogni_tools), sogni_tool_execution: params.sogni_tool_execution, task_profile: (_e = params.task_profile) !== null && _e !== void 0 ? _e : params.taskProfile, media_references: (_f = params.media_references) !== null && _f !== void 0 ? _f : params.mediaReferences, api_media_references: (_g = params.api_media_references) !== null && _g !== void 0 ? _g : params.apiMediaReferences }, (chatTemplateKwargs && { chat_template_kwargs: chatTemplateKwargs })), (params.response_format && { response_format: params.response_format })), { timeoutMs: 300000 });
271
+ });
272
+ }
273
+ chatRunFetch(path_1) {
274
+ return __awaiter(this, arguments, void 0, function* (path, options = {}) {
275
+ const url = new URL(path, this.client.rest.baseUrl).toString();
276
+ const authenticated = yield this.client.auth.authenticateRequest(options);
277
+ return fetch(url, authenticated);
278
+ });
279
+ }
280
+ chatRunJson(path_1) {
281
+ return __awaiter(this, arguments, void 0, function* (path, options = {}) {
282
+ const response = yield this.chatRunFetch(path, options);
283
+ if (!response.ok) {
284
+ const text = yield response.text();
285
+ let payload;
286
+ try {
287
+ payload = text ? JSON.parse(text) : undefined;
288
+ }
289
+ catch (_a) {
290
+ payload = { message: text };
291
+ }
292
+ const message = (payload && typeof payload.message === 'string' && payload.message) ||
293
+ response.statusText ||
294
+ `Chat run request failed with status ${response.status}`;
295
+ const err = new Error(message);
296
+ err.status = response.status;
297
+ throw err;
298
+ }
299
+ return (yield response.json());
300
+ });
301
+ }
302
+ /**
303
+ * Submit a durable hosted chat run. Returns the persisted run record;
304
+ * the executor drives the LLM/tool loop server-side.
305
+ */
306
+ createChatRun(params) {
307
+ return __awaiter(this, void 0, void 0, function* () {
308
+ const body = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ messages: params.messages }, (params.tools ? { tools: params.tools } : {})), (params.toolChoice !== undefined ? { tool_choice: params.toolChoice } : {})), (params.model ? { model: params.model } : {})), (params.sampling ? { sampling: params.sampling } : {})), (params.mediaReferences ? { media_references: params.mediaReferences } : {})), (params.mediaContext ? { media_context: params.mediaContext } : {})), (params.maxEstimatedCapacityUnits !== undefined
309
+ ? { max_estimated_capacity_units: params.maxEstimatedCapacityUnits }
310
+ : {})), (params.confirmCost !== undefined ? { confirm_cost: params.confirmCost } : {})), (params.sessionId ? { session_id: params.sessionId } : {})), (params.clientMessageId ? { client_message_id: params.clientMessageId } : {})), (params.tokenType ? { token_type: params.tokenType } : {})), (params.appSource ? { app_source: params.appSource } : {}));
311
+ const headers = { 'Content-Type': 'application/json' };
312
+ if (params.idempotencyKey)
313
+ headers['Idempotency-Key'] = params.idempotencyKey;
314
+ const response = yield this.chatRunJson('/v1/chat/runs', {
315
+ method: 'POST',
316
+ headers,
317
+ body: JSON.stringify(body)
318
+ });
319
+ return response.data.run;
320
+ });
321
+ }
322
+ /** Read a persisted chat run record. */
323
+ getChatRun(runId) {
324
+ return __awaiter(this, void 0, void 0, function* () {
325
+ const response = yield this.chatRunJson(`/v1/chat/runs/${encodeURIComponent(runId)}`);
326
+ return response.data.run;
327
+ });
328
+ }
329
+ /** Cancel an in-flight chat run. */
330
+ cancelChatRun(runId, reason) {
331
+ return __awaiter(this, void 0, void 0, function* () {
332
+ const response = yield this.chatRunJson(`/v1/chat/runs/${encodeURIComponent(runId)}/cancel`, {
333
+ method: 'POST',
334
+ headers: { 'Content-Type': 'application/json' },
335
+ body: JSON.stringify(reason ? { reason } : {})
336
+ });
337
+ return response.data.run;
338
+ });
339
+ }
340
+ /**
341
+ * SSE iterator over chat-run events. Honors `Last-Event-ID` for replay.
342
+ * Yields events as `ChatRunEvent`. Caller is responsible for breaking
343
+ * the loop when they see a terminal `run_*` event type they care about.
344
+ */
345
+ streamChatRunEvents(runId_1) {
346
+ return __asyncGenerator(this, arguments, function* streamChatRunEvents_1(runId, options = {}) {
347
+ const headers = { Accept: 'text/event-stream' };
348
+ if (options.lastEventId !== undefined && Number.isFinite(options.lastEventId)) {
349
+ headers['Last-Event-ID'] = String(options.lastEventId);
350
+ }
351
+ const response = yield __await(this.chatRunFetch(`/v1/chat/runs/${encodeURIComponent(runId)}/events/stream`, { headers, signal: options.signal }));
352
+ if (!response.ok || !response.body) {
353
+ throw new Error(`Chat run event stream failed with status ${response.status}`);
354
+ }
355
+ const reader = response.body.getReader();
356
+ const decoder = new TextDecoder();
357
+ let buffer = '';
358
+ const findFrameBoundary = (source) => {
359
+ const lf = source.indexOf('\n\n');
360
+ const crlf = source.indexOf('\r\n\r\n');
361
+ if (lf === -1 && crlf === -1)
362
+ return null;
363
+ if (lf === -1)
364
+ return { index: crlf, length: 4 };
365
+ if (crlf === -1 || lf < crlf)
366
+ return { index: lf, length: 2 };
367
+ return { index: crlf, length: 4 };
368
+ };
369
+ const yieldFrame = (frame) => {
370
+ if (!frame.trim() || frame.startsWith(':'))
371
+ return null;
372
+ let eventName = 'message';
373
+ let data = '';
374
+ for (const rawLine of frame.split(/\r?\n/)) {
375
+ if (rawLine.startsWith('event:'))
376
+ eventName = rawLine.slice(6).trim();
377
+ else if (rawLine.startsWith('data:'))
378
+ data += (data ? '\n' : '') + rawLine.slice(5).trim();
379
+ }
380
+ if (eventName === 'run_status' || !data)
381
+ return null;
382
+ try {
383
+ return JSON.parse(data);
384
+ }
385
+ catch (_a) {
386
+ return null;
387
+ }
388
+ };
389
+ try {
390
+ while (true) {
391
+ const { value, done } = yield __await(reader.read());
392
+ if (done) {
393
+ const remaining = buffer.trim();
394
+ if (remaining) {
395
+ const parsed = yieldFrame(remaining);
396
+ if (parsed)
397
+ yield yield __await(parsed);
398
+ }
399
+ return yield __await(void 0);
400
+ }
401
+ buffer += decoder.decode(value, { stream: true });
402
+ let boundary = findFrameBoundary(buffer);
403
+ while (boundary !== null) {
404
+ const frame = buffer.slice(0, boundary.index);
405
+ buffer = buffer.slice(boundary.index + boundary.length);
406
+ boundary = findFrameBoundary(buffer);
407
+ const parsed = yieldFrame(frame);
408
+ if (parsed)
409
+ yield yield __await(parsed);
410
+ }
411
+ }
412
+ }
413
+ finally {
414
+ reader.releaseLock();
415
+ }
416
+ });
417
+ }
418
+ /**
419
+ * Send a single chat completion request (no auto tool execution).
420
+ */
421
+ createSingleCompletion(params) {
422
+ return __awaiter(this, void 0, void 0, function* () {
423
+ const jobID = getUUID();
424
+ const normalizedMessages = normalizeVisionMessages(params.messages);
425
+ // Build chat_template_kwargs from think parameter
426
+ const chatTemplateKwargs = this.buildChatTemplateKwargs(params.think);
427
+ const request = Object.assign(Object.assign({ jobID, type: 'llm', model: params.model, messages: normalizedMessages, appSource: params.appSource || this.client.appSource, max_tokens: params.max_tokens, temperature: params.temperature, top_p: params.top_p, top_k: params.top_k, min_p: params.min_p, stream: params.stream, repetition_penalty: params.repetition_penalty, frequency_penalty: params.frequency_penalty, presence_penalty: params.presence_penalty, stop: params.stop, tokenType: params.tokenType, tools: params.tools, tool_choice: params.tool_choice, sogni_tools: this.normalizeSogniToolsMode(params.sogni_tools), sogni_tool_execution: params.sogni_tool_execution, taskProfile: params.taskProfile }, (chatTemplateKwargs && { chat_template_kwargs: chatTemplateKwargs })), (params.response_format && { response_format: params.response_format }));
428
+ const stream = new ChatStream(jobID);
429
+ this.activeStreams.set(jobID, stream);
430
+ // Send the job request via socket
431
+ yield this.client.socket.send('llmJobRequest', request);
432
+ if (params.stream) {
433
+ return stream;
434
+ }
435
+ // Non-streaming: wait for completion and return the full result
436
+ return new Promise((resolve, reject) => {
437
+ const cleanup = () => {
438
+ clearInterval(interval);
439
+ clearTimeout(timeout);
440
+ errorOff();
441
+ this.activeStreams.delete(jobID);
442
+ };
443
+ const timeout = setTimeout(() => {
444
+ cleanup();
445
+ reject(new Error(`Chat completion timed out after 300s (jobID: ${jobID})`));
446
+ }, 300000);
447
+ // Poll for completion (the stream will be completed by socket events)
448
+ const interval = setInterval(() => {
449
+ if (stream.finalResult) {
450
+ cleanup();
451
+ resolve(stream.finalResult);
452
+ }
453
+ }, 50);
454
+ // Also listen for the error case
455
+ const errorOff = this.on('error', (err) => {
456
+ if (err.jobID === jobID) {
457
+ cleanup();
458
+ reject(new Error(`${err.error}: ${err.message}`));
459
+ }
460
+ });
461
+ });
462
+ });
463
+ }
464
+ /**
465
+ * Multi-round auto tool execution loop (non-streaming).
466
+ * Sends completion, executes tool calls, feeds results back, repeats.
467
+ */
468
+ createCompletionWithAutoTools(params) {
469
+ return __awaiter(this, void 0, void 0, function* () {
470
+ var _a;
471
+ const maxRounds = params.maxToolRounds || 5;
472
+ const toolHistory = [];
473
+ let messages = [...params.messages];
474
+ for (let round = 0; round < maxRounds; round++) {
475
+ const result = (yield this.createSingleCompletion(Object.assign(Object.assign({}, params), { messages, stream: false, autoExecuteTools: false })));
476
+ // If model didn't request tools, return final result
477
+ if (result.finishReason !== 'tool_calls' || !((_a = result.tool_calls) === null || _a === void 0 ? void 0 : _a.length)) {
478
+ if (toolHistory.length > 0) {
479
+ result.toolHistory = toolHistory;
480
+ }
481
+ return result;
482
+ }
483
+ // Execute tool calls
484
+ const toolResults = yield this.tools.executeAll(result.tool_calls, {
485
+ tokenType: params.tokenType,
486
+ onToolCall: params.onToolCall,
487
+ onToolProgress: params.onToolProgress
488
+ });
489
+ // Record history
490
+ toolHistory.push({
491
+ round,
492
+ toolCalls: result.tool_calls,
493
+ toolResults
494
+ });
495
+ // Build messages for next round
496
+ messages = [
497
+ ...messages,
498
+ {
499
+ role: 'assistant',
500
+ content: result.content || null,
501
+ tool_calls: result.tool_calls
502
+ },
503
+ ...result.tool_calls.map((tc, i) => ({
504
+ role: 'tool',
505
+ content: toolResults[i].content,
506
+ tool_call_id: tc.id,
507
+ name: tc.function.name
508
+ }))
509
+ ];
510
+ }
511
+ throw new Error(`Max tool calling rounds (${maxRounds}) exceeded`);
512
+ });
513
+ }
514
+ handleJobTokens(data) {
515
+ const stream = this.activeStreams.get(data.jobID);
516
+ if (!stream)
517
+ return;
518
+ const chunk = {
519
+ jobID: data.jobID,
520
+ content: data.content || '',
521
+ role: data.role,
522
+ finishReason: data.finishReason,
523
+ usage: data.usage,
524
+ tool_calls: data.tool_calls
525
+ };
526
+ stream._pushChunk(chunk);
527
+ this.emit('token', chunk);
528
+ }
529
+ handleJobResult(data) {
530
+ const stream = this.activeStreams.get(data.jobID);
531
+ if (!stream)
532
+ return;
533
+ // Update worker name from result if available (may contain proper username/nftTokenId)
534
+ if (data.workerName) {
535
+ stream._setWorkerName(data.workerName);
536
+ }
537
+ // Capture actual cost breakdown from server settlement
538
+ if (data.cost) {
539
+ stream._setCost(data.cost);
540
+ }
541
+ stream._complete(data.timeTaken || 0, data.usage);
542
+ if (stream.finalResult) {
543
+ this.emit('completed', stream.finalResult);
544
+ }
545
+ // Clean up from activeStreams — finalResult is computed from stream state, not the map entry
546
+ this.activeStreams.delete(data.jobID);
547
+ }
548
+ handleJobState(data) {
549
+ const stream = this.activeStreams.get(data.jobID);
550
+ if (!stream)
551
+ return;
552
+ // Track worker name on the stream for inclusion in finalResult
553
+ if (data.workerName) {
554
+ stream._setWorkerName(data.workerName);
555
+ }
556
+ // Emit jobState event for consumers
557
+ this.emit('jobState', {
558
+ jobID: data.jobID,
559
+ type: data.type,
560
+ workerName: data.workerName,
561
+ queuePosition: data.queuePosition,
562
+ modelId: data.modelId,
563
+ estimatedCost: data.estimatedCost
564
+ });
565
+ if (data.type === 'pending') {
566
+ this.client.logger.debug(`Chat job ${data.jobID} pending authorization`);
567
+ }
568
+ else if (data.type === 'queued') {
569
+ this.client.logger.debug(`Chat job ${data.jobID} queued`);
570
+ }
571
+ else if (data.type === 'assigned') {
572
+ this.client.logger.debug(`Chat job ${data.jobID} assigned to worker`);
573
+ }
574
+ else if (data.type === 'jobStarted') {
575
+ this.client.logger.debug(`Chat job ${data.jobID} started on worker`);
576
+ }
577
+ }
578
+ handleJobError(data) {
579
+ const stream = this.activeStreams.get(data.jobID);
580
+ if (!stream)
581
+ return;
582
+ // Capture worker name if available (worker may have been assigned before error)
583
+ if (data.workerName) {
584
+ stream._setWorkerName(data.workerName);
585
+ }
586
+ const errorMsg = data.error_message || String(data.error);
587
+ stream._fail(new Error(errorMsg));
588
+ this.activeStreams.delete(data.jobID);
589
+ this.emit('error', {
590
+ jobID: data.jobID,
591
+ error: String(data.error),
592
+ message: errorMsg,
593
+ workerName: data.workerName
594
+ });
595
+ }
596
+ }
597
+ export default ChatApi;
598
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Chat/index.ts"],"names":[],"mappings":"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"}