@itphx/synth-core 0.3.0 → 0.4.4

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 (187) hide show
  1. package/dist/auth/local.d.ts +14 -0
  2. package/dist/auth/local.d.ts.map +1 -1
  3. package/dist/auth/local.js +63 -11
  4. package/dist/auth/local.js.map +1 -1
  5. package/dist/auth/local.test.js +59 -0
  6. package/dist/auth/local.test.js.map +1 -1
  7. package/dist/events/bus.d.ts +7 -0
  8. package/dist/events/bus.d.ts.map +1 -1
  9. package/dist/events/bus.js +26 -3
  10. package/dist/events/bus.js.map +1 -1
  11. package/dist/events/bus.test.js +46 -0
  12. package/dist/events/bus.test.js.map +1 -1
  13. package/dist/index.d.ts +3 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +2 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/main.js +247 -8
  18. package/dist/main.js.map +1 -1
  19. package/dist/providers/index.d.ts +1 -0
  20. package/dist/providers/index.d.ts.map +1 -1
  21. package/dist/providers/index.js +4 -0
  22. package/dist/providers/index.js.map +1 -1
  23. package/dist/providers/remote.d.ts +60 -0
  24. package/dist/providers/remote.d.ts.map +1 -0
  25. package/dist/providers/remote.js +394 -0
  26. package/dist/providers/remote.js.map +1 -0
  27. package/dist/providers/remote.test.d.ts +2 -0
  28. package/dist/providers/remote.test.d.ts.map +1 -0
  29. package/dist/providers/remote.test.js +258 -0
  30. package/dist/providers/remote.test.js.map +1 -0
  31. package/dist/remote/aggregate.d.ts +43 -0
  32. package/dist/remote/aggregate.d.ts.map +1 -0
  33. package/dist/remote/aggregate.js +84 -0
  34. package/dist/remote/aggregate.js.map +1 -0
  35. package/dist/remote/aggregate.test.d.ts +2 -0
  36. package/dist/remote/aggregate.test.d.ts.map +1 -0
  37. package/dist/remote/aggregate.test.js +120 -0
  38. package/dist/remote/aggregate.test.js.map +1 -0
  39. package/dist/remote/client.d.ts +142 -0
  40. package/dist/remote/client.d.ts.map +1 -0
  41. package/dist/remote/client.js +290 -0
  42. package/dist/remote/client.js.map +1 -0
  43. package/dist/remote/client.test.d.ts +2 -0
  44. package/dist/remote/client.test.d.ts.map +1 -0
  45. package/dist/remote/client.test.js +176 -0
  46. package/dist/remote/client.test.js.map +1 -0
  47. package/dist/remote/connection.d.ts +66 -0
  48. package/dist/remote/connection.d.ts.map +1 -0
  49. package/dist/remote/connection.js +298 -0
  50. package/dist/remote/connection.js.map +1 -0
  51. package/dist/remote/connection.test.d.ts +2 -0
  52. package/dist/remote/connection.test.d.ts.map +1 -0
  53. package/dist/remote/connection.test.js +323 -0
  54. package/dist/remote/connection.test.js.map +1 -0
  55. package/dist/remote/credentials.d.ts +13 -0
  56. package/dist/remote/credentials.d.ts.map +1 -0
  57. package/dist/remote/credentials.js +81 -0
  58. package/dist/remote/credentials.js.map +1 -0
  59. package/dist/remote/credentials.test.d.ts +2 -0
  60. package/dist/remote/credentials.test.d.ts.map +1 -0
  61. package/dist/remote/credentials.test.js +69 -0
  62. package/dist/remote/credentials.test.js.map +1 -0
  63. package/dist/remote/device-flow.d.ts +72 -0
  64. package/dist/remote/device-flow.d.ts.map +1 -0
  65. package/dist/remote/device-flow.js +229 -0
  66. package/dist/remote/device-flow.js.map +1 -0
  67. package/dist/remote/device-flow.test.d.ts +2 -0
  68. package/dist/remote/device-flow.test.d.ts.map +1 -0
  69. package/dist/remote/device-flow.test.js +103 -0
  70. package/dist/remote/device-flow.test.js.map +1 -0
  71. package/dist/remote/event-bridge.d.ts +46 -0
  72. package/dist/remote/event-bridge.d.ts.map +1 -0
  73. package/dist/remote/event-bridge.js +218 -0
  74. package/dist/remote/event-bridge.js.map +1 -0
  75. package/dist/remote/event-bridge.test.d.ts +2 -0
  76. package/dist/remote/event-bridge.test.d.ts.map +1 -0
  77. package/dist/remote/event-bridge.test.js +240 -0
  78. package/dist/remote/event-bridge.test.js.map +1 -0
  79. package/dist/remote/index.d.ts +19 -0
  80. package/dist/remote/index.d.ts.map +1 -0
  81. package/dist/remote/index.js +11 -0
  82. package/dist/remote/index.js.map +1 -0
  83. package/dist/remote/session.d.ts +72 -0
  84. package/dist/remote/session.d.ts.map +1 -0
  85. package/dist/remote/session.js +248 -0
  86. package/dist/remote/session.js.map +1 -0
  87. package/dist/remote/session.test.d.ts +2 -0
  88. package/dist/remote/session.test.d.ts.map +1 -0
  89. package/dist/remote/session.test.js +482 -0
  90. package/dist/remote/session.test.js.map +1 -0
  91. package/dist/remote/transfer.d.ts +75 -0
  92. package/dist/remote/transfer.d.ts.map +1 -0
  93. package/dist/remote/transfer.js +491 -0
  94. package/dist/remote/transfer.js.map +1 -0
  95. package/dist/remote/transfer.test.d.ts +2 -0
  96. package/dist/remote/transfer.test.d.ts.map +1 -0
  97. package/dist/remote/transfer.test.js +416 -0
  98. package/dist/remote/transfer.test.js.map +1 -0
  99. package/dist/remote/types.d.ts +28 -0
  100. package/dist/remote/types.d.ts.map +1 -0
  101. package/dist/remote/types.js +10 -0
  102. package/dist/remote/types.js.map +1 -0
  103. package/dist/server/app.d.ts +62 -1
  104. package/dist/server/app.d.ts.map +1 -1
  105. package/dist/server/app.js +364 -20
  106. package/dist/server/app.js.map +1 -1
  107. package/dist/server/app.proxy.test.d.ts +2 -0
  108. package/dist/server/app.proxy.test.d.ts.map +1 -0
  109. package/dist/server/app.proxy.test.js +193 -0
  110. package/dist/server/app.proxy.test.js.map +1 -0
  111. package/dist/server/app.remote.test.d.ts +2 -0
  112. package/dist/server/app.remote.test.d.ts.map +1 -0
  113. package/dist/server/app.remote.test.js +674 -0
  114. package/dist/server/app.remote.test.js.map +1 -0
  115. package/dist/server/proxy.d.ts +14 -0
  116. package/dist/server/proxy.d.ts.map +1 -0
  117. package/dist/server/proxy.js +93 -0
  118. package/dist/server/proxy.js.map +1 -0
  119. package/dist/server/routes/auth.d.ts +26 -2
  120. package/dist/server/routes/auth.d.ts.map +1 -1
  121. package/dist/server/routes/auth.js +269 -36
  122. package/dist/server/routes/auth.js.map +1 -1
  123. package/dist/server/routes/auth.test.d.ts +2 -0
  124. package/dist/server/routes/auth.test.d.ts.map +1 -0
  125. package/dist/server/routes/auth.test.js +466 -0
  126. package/dist/server/routes/auth.test.js.map +1 -0
  127. package/dist/server/routes/fs.d.ts +2 -1
  128. package/dist/server/routes/fs.d.ts.map +1 -1
  129. package/dist/server/routes/fs.js +159 -5
  130. package/dist/server/routes/fs.js.map +1 -1
  131. package/dist/server/routes/hybrid.d.ts +32 -0
  132. package/dist/server/routes/hybrid.d.ts.map +1 -0
  133. package/dist/server/routes/hybrid.js +21 -0
  134. package/dist/server/routes/hybrid.js.map +1 -0
  135. package/dist/server/routes/hybrid.test.d.ts +2 -0
  136. package/dist/server/routes/hybrid.test.d.ts.map +1 -0
  137. package/dist/server/routes/hybrid.test.js +454 -0
  138. package/dist/server/routes/hybrid.test.js.map +1 -0
  139. package/dist/server/routes/messages.d.ts +2 -1
  140. package/dist/server/routes/messages.d.ts.map +1 -1
  141. package/dist/server/routes/messages.js +104 -1
  142. package/dist/server/routes/messages.js.map +1 -1
  143. package/dist/server/routes/models.cache.test.d.ts +2 -0
  144. package/dist/server/routes/models.cache.test.d.ts.map +1 -0
  145. package/dist/server/routes/models.cache.test.js +59 -0
  146. package/dist/server/routes/models.cache.test.js.map +1 -0
  147. package/dist/server/routes/models.d.ts +9 -1
  148. package/dist/server/routes/models.d.ts.map +1 -1
  149. package/dist/server/routes/models.js +35 -2
  150. package/dist/server/routes/models.js.map +1 -1
  151. package/dist/server/routes/models.remote.test.d.ts +2 -0
  152. package/dist/server/routes/models.remote.test.d.ts.map +1 -0
  153. package/dist/server/routes/models.remote.test.js +101 -0
  154. package/dist/server/routes/models.remote.test.js.map +1 -0
  155. package/dist/server/routes/project-transfer.d.ts +16 -0
  156. package/dist/server/routes/project-transfer.d.ts.map +1 -0
  157. package/dist/server/routes/project-transfer.js +141 -0
  158. package/dist/server/routes/project-transfer.js.map +1 -0
  159. package/dist/server/routes/project-transfer.test.d.ts +2 -0
  160. package/dist/server/routes/project-transfer.test.d.ts.map +1 -0
  161. package/dist/server/routes/project-transfer.test.js +199 -0
  162. package/dist/server/routes/project-transfer.test.js.map +1 -0
  163. package/dist/server/routes/projects.d.ts +2 -1
  164. package/dist/server/routes/projects.d.ts.map +1 -1
  165. package/dist/server/routes/projects.js +101 -5
  166. package/dist/server/routes/projects.js.map +1 -1
  167. package/dist/server/routes/providers.d.ts +1 -1
  168. package/dist/server/routes/providers.d.ts.map +1 -1
  169. package/dist/server/routes/providers.js +3 -1
  170. package/dist/server/routes/providers.js.map +1 -1
  171. package/dist/server/routes/providers.test.d.ts +2 -0
  172. package/dist/server/routes/providers.test.d.ts.map +1 -0
  173. package/dist/server/routes/providers.test.js +58 -0
  174. package/dist/server/routes/providers.test.js.map +1 -0
  175. package/dist/server/routes/queue.d.ts +2 -1
  176. package/dist/server/routes/queue.d.ts.map +1 -1
  177. package/dist/server/routes/queue.js +89 -1
  178. package/dist/server/routes/queue.js.map +1 -1
  179. package/dist/server/routes/sessions.d.ts +8 -1
  180. package/dist/server/routes/sessions.d.ts.map +1 -1
  181. package/dist/server/routes/sessions.js +202 -9
  182. package/dist/server/routes/sessions.js.map +1 -1
  183. package/dist/server/serialize.d.ts +2 -0
  184. package/dist/server/serialize.d.ts.map +1 -1
  185. package/dist/server/serialize.js +2 -0
  186. package/dist/server/serialize.js.map +1 -1
  187. package/package.json +6 -2
@@ -0,0 +1,394 @@
1
+ // RemoteProvider — виртуальный LLM-провайдер гибридного режима (Часть 6).
2
+ // Локальный core ходит за LLM через серверный /api/v2/llm/chat/completions
3
+ // (LLM Proxy backend, OpenAI-совместимый): все LLM-запросы проходят централизованно
4
+ // через backend (gateway AD-036 применяется на сервере).
5
+ //
6
+ // Токен берётся из:
7
+ // 1. this.getToken (конструктор) — обычно RemoteSession.getToken (авто-refresh);
8
+ // 2. реестра setRemoteTokenProvider (для провайдеров, созданных через ProviderFactory);
9
+ // 3. this.apiKey как последний fallback.
10
+ // Если токена нет — ProviderError (оркестратор не ретраит бесконечно).
11
+ import { BaseProvider } from './base.js';
12
+ import { ProviderError, ContextLengthExceededError, RateLimitError } from './exceptions.js';
13
+ import { info } from '../logger.js';
14
+ /** Путь LLM Proxy на backend. */
15
+ const LLM_PROXY_PATH = '/api/v2/llm/chat/completions';
16
+ /**
17
+ * Реестр поставщиков токена для RemoteProvider, созданных через ProviderFactory
18
+ * (фабрика не передаёт getToken). Заполняется при инъекции remote-провайдера
19
+ * в createStandaloneApp; живёт in-memory, в store не пишется.
20
+ */
21
+ const REMOTE_TOKEN_PROVIDERS = new Map();
22
+ /** Зарегистрировать поставщика токена для RemoteProvider по имени провайдера. */
23
+ export function setRemoteTokenProvider(name, getToken) {
24
+ REMOTE_TOKEN_PROVIDERS.set(name.toLowerCase(), getToken);
25
+ }
26
+ /** Удалить поставщика токена (при отключении remote-провайдера). */
27
+ export function removeRemoteTokenProvider(name) {
28
+ REMOTE_TOKEN_PROVIDERS.delete(name.toLowerCase());
29
+ }
30
+ /** Сброс реестра (для тестов). */
31
+ export function clearRemoteTokenProviders() {
32
+ REMOTE_TOKEN_PROVIDERS.clear();
33
+ }
34
+ function lookupRemoteTokenProvider(name) {
35
+ return REMOTE_TOKEN_PROVIDERS.get(name.toLowerCase());
36
+ }
37
+ export class RemoteProvider extends BaseProvider {
38
+ _getToken;
39
+ /** Имя серверного провайдера для тела LLM Proxy (по умолчанию — локальное name). */
40
+ _providerName;
41
+ constructor(opts) {
42
+ super({
43
+ url: opts.url,
44
+ apiKey: opts.apiKey,
45
+ model: opts.model,
46
+ timeout: opts.timeout,
47
+ temperature: opts.temperature,
48
+ maxTokens: opts.maxTokens,
49
+ name: opts.name ?? 'synth-remote',
50
+ type: opts.type ?? 'remote',
51
+ });
52
+ this._getToken = opts.getToken;
53
+ this._providerName = opts.provider ?? opts.name;
54
+ }
55
+ getProviderName() {
56
+ return this.name;
57
+ }
58
+ async chat(messages, systemPrompt, tools, _stream, debugCollector) {
59
+ info('REMOTE', `чат: model=${this.model}, сообщений=${messages.length}`);
60
+ const resp = await this._request(messages, systemPrompt, tools, false);
61
+ const data = (await resp.json());
62
+ debugCollector?.captureApiResponse(data);
63
+ debugCollector?.captureRawModelResponse(JSON.stringify(data));
64
+ return this._parseResponse(data);
65
+ }
66
+ async *chatAsync(messages, systemPrompt, tools, debugCollector, cancellationToken) {
67
+ info('REMOTE', `чатAsync: model=${this.model}, сообщений=${messages.length}`);
68
+ let accumulatedContent = '';
69
+ let accumulatedReasoning = '';
70
+ let accumulatedUsage = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };
71
+ const accumulatedToolCalls = [];
72
+ const controller = new AbortController();
73
+ // Таймаут — на установление соединения и получение заголовков ответа
74
+ // (backend проксирует заголовки сразу). Как только стрим пошёл, таймер
75
+ // снимается, дальше стрим длится сколько нужно.
76
+ const timer = setTimeout(() => controller.abort(), this.timeout * 1000);
77
+ // Кнопка «Стоп»: отмена пользователя немедленно прерывает fetch/reader.read().
78
+ if (cancellationToken) {
79
+ const originalCancel = cancellationToken.cancel.bind(cancellationToken);
80
+ cancellationToken.cancel = () => {
81
+ originalCancel();
82
+ controller.abort();
83
+ };
84
+ }
85
+ let resp;
86
+ try {
87
+ resp = await this._request(messages, systemPrompt, tools, true, controller.signal);
88
+ }
89
+ catch (e) {
90
+ // Отмена пользователя — молча завершаем генератор.
91
+ if (cancellationToken?.cancelled)
92
+ return;
93
+ // Таймаут/обрыв до начала стрима: AbortError от нашего таймера.
94
+ if (e instanceof Error && e.name === 'AbortError') {
95
+ throw new ProviderError(`Таймаут удалённого LLM-провайдера (${this.timeout}с)`, this.name);
96
+ }
97
+ throw e;
98
+ }
99
+ finally {
100
+ clearTimeout(timer);
101
+ }
102
+ if (!resp.body) {
103
+ throw new ProviderError('Нет тела ответа от удалённого LLM-провайдера', this.name);
104
+ }
105
+ const reader = resp.body.getReader();
106
+ const decoder = new TextDecoder();
107
+ let buffer = '';
108
+ try {
109
+ while (true) {
110
+ if (cancellationToken?.cancelled) {
111
+ reader.cancel();
112
+ break;
113
+ }
114
+ const { done, value } = await reader.read();
115
+ if (done)
116
+ break;
117
+ buffer += decoder.decode(value, { stream: true });
118
+ const lines = buffer.split('\n');
119
+ buffer = lines.pop() || '';
120
+ for (const line of lines) {
121
+ const trimmed = line.trim();
122
+ if (!trimmed || !trimmed.startsWith('data:'))
123
+ continue;
124
+ const dataStr = trimmed.slice(5).trim();
125
+ if (dataStr === '[DONE]')
126
+ break;
127
+ try {
128
+ const chunkData = JSON.parse(dataStr);
129
+ debugCollector?.captureRawModelResponse(dataStr);
130
+ // Ошибка провайдера в середине стрима: backend шлёт
131
+ // data: {error:{code,message}} и закрывает поток.
132
+ if (chunkData.error && typeof chunkData.error === 'object') {
133
+ const err = chunkData.error;
134
+ throw this.mapError(502, String(err.code ?? ''), String(err.message ?? 'Ошибка удалённого LLM-провайдера'));
135
+ }
136
+ const choices = chunkData.choices;
137
+ const delta = choices?.[0]?.delta;
138
+ if (delta) {
139
+ if (delta.reasoning_content && typeof delta.reasoning_content === 'string') {
140
+ if (delta.reasoning_content === '.' || delta.reasoning_content === '.\n')
141
+ continue;
142
+ accumulatedReasoning += delta.reasoning_content;
143
+ yield {
144
+ content: '',
145
+ isFinal: false,
146
+ usage: accumulatedUsage,
147
+ reasoning: accumulatedReasoning,
148
+ };
149
+ }
150
+ if (delta.content && typeof delta.content === 'string') {
151
+ accumulatedContent += delta.content;
152
+ yield {
153
+ content: delta.content,
154
+ isFinal: false,
155
+ usage: accumulatedUsage,
156
+ reasoning: accumulatedReasoning || undefined,
157
+ };
158
+ }
159
+ if (delta.tool_calls) {
160
+ for (const tc of delta.tool_calls) {
161
+ const tcIndex = tc.index;
162
+ const func = tc.function;
163
+ const existing = accumulatedToolCalls.find((t) => t.index === tcIndex);
164
+ if (existing) {
165
+ const ef = existing.function;
166
+ if (func?.name)
167
+ ef.name = func.name;
168
+ ef.arguments = String(ef.arguments || '') + String(func?.arguments || '');
169
+ }
170
+ else {
171
+ accumulatedToolCalls.push({
172
+ index: tcIndex,
173
+ id: tc.id,
174
+ type: 'function',
175
+ function: {
176
+ name: func?.name || '',
177
+ arguments: func?.arguments || '',
178
+ },
179
+ });
180
+ }
181
+ }
182
+ }
183
+ }
184
+ if (chunkData.usage) {
185
+ accumulatedUsage = this._parseUsage(chunkData.usage);
186
+ }
187
+ }
188
+ catch (e) {
189
+ // Ошибки классификации (ProviderError и т.п.) пробрасываем наружу —
190
+ // иначе генератор «успешно» завершится с пустым ответом.
191
+ if (e instanceof ProviderError || e instanceof ContextLengthExceededError || e instanceof RateLimitError) {
192
+ throw e;
193
+ }
194
+ // Невалидный JSON — пропускаем строку.
195
+ continue;
196
+ }
197
+ }
198
+ }
199
+ }
200
+ catch (e) {
201
+ // Ошибки чтения стрима (обрыв/AbortError) пробрасываем наружу.
202
+ // При пользовательской отмене молча выходим.
203
+ if (!cancellationToken?.cancelled) {
204
+ throw e;
205
+ }
206
+ }
207
+ finally {
208
+ reader.releaseLock();
209
+ }
210
+ if (!cancellationToken?.cancelled) {
211
+ debugCollector?.captureApiResponse({
212
+ usage: accumulatedUsage,
213
+ model: this.model,
214
+ tool_calls: accumulatedToolCalls.length ? accumulatedToolCalls : undefined,
215
+ });
216
+ yield {
217
+ content: accumulatedContent || '',
218
+ isFinal: true,
219
+ usage: accumulatedUsage,
220
+ toolCalls: accumulatedToolCalls.length ? accumulatedToolCalls : undefined,
221
+ reasoning: accumulatedReasoning || undefined,
222
+ model: this.model,
223
+ };
224
+ }
225
+ }
226
+ /**
227
+ * Маппинг ошибок LLM Proxy (backend) на исключения ядра.
228
+ * Ошибки: { error: { code, message } }, статусы 400/404/429/401/502.
229
+ */
230
+ mapError(status, code, message) {
231
+ const codeLower = (code || '').toLowerCase();
232
+ const text = (message || '').toLowerCase();
233
+ if (status === 404 || codeLower === 'model_not_found') {
234
+ return new ProviderError(`Модель не найдена на удалённом сервере: ${message ?? `HTTP ${status}`}`, this.name);
235
+ }
236
+ if (status === 429 || codeLower === 'rate_limited') {
237
+ return new RateLimitError(message || undefined);
238
+ }
239
+ if (status === 400 || codeLower === 'context_length_exceeded' || text.includes('context length')) {
240
+ return new ContextLengthExceededError(message || undefined);
241
+ }
242
+ if (status === 401 || codeLower === 'unauthorized') {
243
+ return new ProviderError('Не авторизован на удалённом сервере (токен истёк?)', this.name);
244
+ }
245
+ return new ProviderError(message || `Удалённый LLM-провайдер вернул ошибку HTTP ${status}`, this.name);
246
+ }
247
+ /** Модели подтягиваются через models-роут backend — список не нужен. */
248
+ async listModels() {
249
+ return [];
250
+ }
251
+ /**
252
+ * POST /api/v2/llm/chat/completions (OpenAI-совместимый).
253
+ * Возвращает raw Response: для chat() — JSON, для chatAsync() — SSE-стрим.
254
+ */
255
+ async _request(messages, systemPrompt, tools, stream, signal) {
256
+ const token = await this._resolveToken();
257
+ const base = this.url.replace(/\/api\/v2\/?$/, '').replace(/\/+$/, '');
258
+ const url = `${base}${LLM_PROXY_PATH}`;
259
+ const body = this._buildBody(messages, systemPrompt, tools, stream);
260
+ const controller = new AbortController();
261
+ const timer = setTimeout(() => controller.abort(), this.timeout * 1000);
262
+ const effectiveSignal = signal ?? controller.signal;
263
+ try {
264
+ const resp = await fetch(url, {
265
+ method: 'POST',
266
+ headers: {
267
+ Authorization: `Bearer ${token}`,
268
+ 'Content-Type': 'application/json',
269
+ },
270
+ body: JSON.stringify(body),
271
+ signal: effectiveSignal,
272
+ });
273
+ if (!resp.ok) {
274
+ const errorBody = (await resp.json().catch(() => null));
275
+ const code = errorBody?.error?.code;
276
+ const message = errorBody?.error?.message ?? `HTTP ${resp.status}`;
277
+ throw this.mapError(resp.status, code, message);
278
+ }
279
+ return resp;
280
+ }
281
+ catch (err) {
282
+ // Таймаут нашего таймера (когда сигнал не передан извне).
283
+ if (err instanceof Error && err.name === 'AbortError' && !signal?.aborted) {
284
+ throw new ProviderError(`Таймаут удалённого LLM-провайдера (${this.timeout}с)`, this.name);
285
+ }
286
+ throw err;
287
+ }
288
+ finally {
289
+ clearTimeout(timer);
290
+ }
291
+ }
292
+ async _resolveToken() {
293
+ let token = null;
294
+ if (this._getToken) {
295
+ token = await this._getToken();
296
+ }
297
+ else {
298
+ const registered = lookupRemoteTokenProvider(this.name);
299
+ token = registered ? await registered() : (this.apiKey || null);
300
+ }
301
+ if (!token) {
302
+ throw new ProviderError('Нет токена для удалённого LLM-провайдера', this.name);
303
+ }
304
+ return token;
305
+ }
306
+ _buildBody(messages, systemPrompt, tools, stream) {
307
+ const body = {
308
+ model: this.model,
309
+ messages: this._formatMessages(messages, systemPrompt),
310
+ temperature: this.temperature,
311
+ };
312
+ if (stream)
313
+ body.stream = true;
314
+ if (tools?.length)
315
+ body.tools = tools;
316
+ if (this.maxTokens && this.maxTokens > 0)
317
+ body.max_tokens = this.maxTokens;
318
+ // Явный провайдер: backend исполняет своего провайдера с этим именем
319
+ // (см. chatCompletionsSchema.provider в routes/llm.ts backend).
320
+ if (this._providerName)
321
+ body.provider = this._providerName;
322
+ return body;
323
+ }
324
+ /**
325
+ * OpenAI-формат сообщений для LLM Proxy. В отличие от OpenAIProvider здесь
326
+ * content — всегда строка (схема backend chatCompletionsSchema требует string).
327
+ */
328
+ _formatMessages(messages, systemPrompt) {
329
+ const formatted = [];
330
+ if (systemPrompt) {
331
+ formatted.push({ role: 'system', content: systemPrompt });
332
+ }
333
+ for (const msg of messages) {
334
+ if (msg.disabled)
335
+ continue;
336
+ if (msg.role === 'info' || msg.role === 'model')
337
+ continue;
338
+ const entry = {
339
+ role: msg.role,
340
+ content: msg.content,
341
+ };
342
+ if (msg.toolUse) {
343
+ // Нормализация function.arguments: объект → JSON-строка (как в OpenAIProvider).
344
+ entry.tool_calls = msg.toolUse.map((tc) => {
345
+ const fn = tc.function;
346
+ if (!fn || typeof fn.arguments !== 'object' || fn.arguments === null)
347
+ return tc;
348
+ try {
349
+ return {
350
+ ...tc,
351
+ function: { ...fn, arguments: JSON.stringify(fn.arguments) },
352
+ };
353
+ }
354
+ catch {
355
+ return tc;
356
+ }
357
+ });
358
+ }
359
+ if (msg.toolCallId)
360
+ entry.tool_call_id = msg.toolCallId;
361
+ if (msg.role === 'assistant' && msg.reasoning) {
362
+ entry.reasoning_content = msg.reasoning;
363
+ }
364
+ formatted.push(entry);
365
+ }
366
+ return formatted;
367
+ }
368
+ _parseResponse(data) {
369
+ const choices = data.choices;
370
+ const message = choices?.[0]?.message;
371
+ const content = String(message?.content ?? '');
372
+ const toolCalls = message?.tool_calls;
373
+ const reasoning = message?.reasoning_content;
374
+ return {
375
+ content,
376
+ model: this.model,
377
+ usage: this._parseUsage(data.usage),
378
+ toolCalls,
379
+ reasoning: reasoning || undefined,
380
+ };
381
+ }
382
+ _parseUsage(usage) {
383
+ if (!usage)
384
+ return { inputTokens: 0, outputTokens: 0, totalTokens: 0 };
385
+ const details = usage.completion_tokens_details;
386
+ return {
387
+ inputTokens: usage.prompt_tokens || 0,
388
+ outputTokens: usage.completion_tokens || 0,
389
+ totalTokens: usage.total_tokens || 0,
390
+ reasoningTokens: details?.reasoning_tokens || 0,
391
+ };
392
+ }
393
+ }
394
+ //# sourceMappingURL=remote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote.js","sourceRoot":"","sources":["../../src/providers/remote.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=remote.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote.test.d.ts","sourceRoot":"","sources":["../../src/providers/remote.test.ts"],"names":[],"mappings":""}