@7n/llm-lib 2.10.1 → 2.11.0
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.
- package/CHANGELOG.md +6 -0
- package/lib/batch.mjs +25 -15
- package/lib/docs/batch.md +29 -11
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.11.0] - 2026-07-27
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- `submitBatch` тепер обирає між клієнтською емуляцією і справжнім `/v1/batches` litellm batch-adapter-а (`backend: 'auto'|'emulated'|'openai-batches'`) — автоматично вмикається, коли резолвлений провайдер `litellm` і адаптер відповідає на capability-пробу.
|
|
8
|
+
|
|
3
9
|
## [2.10.1] - 2026-07-27
|
|
4
10
|
|
|
5
11
|
### Fixed
|
package/lib/batch.mjs
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Тип 2b (OpenAI-сумісний API, batch) —
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
2
|
+
* Тип 2b (OpenAI-сумісний API, batch) — `submitBatch` обирає між клієнтською
|
|
3
|
+
* емуляцією (v1, чанкований конкурентний прогін через Тип 2a
|
|
4
|
+
* `llm_lib::local_cloud`) і справжнім `/v1/batches` litellm batch-adapter-а
|
|
5
|
+
* (спека `docs/specs/2026-07-27-batch-local-avg-real-batches.md`), під тим
|
|
6
|
+
* самим інтерфейсом `submit → progress → results` для обох. Вибір —
|
|
7
|
+
* `backend` (дефолт `'auto'`: реальний Batch API лише коли резолвлений
|
|
8
|
+
* провайдер `litellm` і кешована мережева проба адаптера пройшла; локальний
|
|
9
|
+
* omlx завжди йде емуляцією).
|
|
7
10
|
*
|
|
8
|
-
* Тонкий JS-клієнт до Rust-крейта `llm_lib::batch`
|
|
9
|
-
* in-process (`llm-lib/crates/llm-lib-napi`) — жодного
|
|
10
|
-
* тут (анти-приклад, якого це узагальнює:
|
|
11
|
-
* переклади проти omlx вручну, з
|
|
11
|
+
* Тонкий JS-клієнт до Rust-крейта `llm_lib::batch`/`llm_lib::remote_batch`
|
|
12
|
+
* через napi FFI in-process (`llm-lib/crates/llm-lib-napi`) — жодного
|
|
13
|
+
* власного чанкінгу чи HTTP тут (анти-приклад, якого це узагальнює:
|
|
14
|
+
* `mlmail/use-summary.js` чанкує переклади проти omlx вручну, з
|
|
15
|
+
* вистражданими лімітами).
|
|
12
16
|
*/
|
|
13
17
|
import { loadNative } from './internal/native.mjs'
|
|
14
18
|
|
|
@@ -23,9 +27,9 @@ import { loadNative } from './internal/native.mjs'
|
|
|
23
27
|
*/
|
|
24
28
|
|
|
25
29
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
30
|
+
* Batch-виклик Типу 2b. `modelSpecOrTier` — той самий контракт, що й у
|
|
31
|
+
* [`oneShotLocalCloud`] з `local-cloud.mjs`: явний `"provider/model-id"`
|
|
32
|
+
* або абстрактний тир (`min`/`avg`/`max`).
|
|
29
33
|
* @param {string} modelSpecOrTier `"provider/model-id"` або `'min'|'avg'|'max'`
|
|
30
34
|
* @param {BatchItem[]} items вхідні items (`customId` — унікальний у межах виклику)
|
|
31
35
|
* @param {{
|
|
@@ -33,6 +37,9 @@ import { loadNative } from './internal/native.mjs'
|
|
|
33
37
|
* system?: string,
|
|
34
38
|
* chunkSize?: number,
|
|
35
39
|
* concurrency?: number,
|
|
40
|
+
* backend?: 'emulated' | 'openai-batches' | 'auto',
|
|
41
|
+
* pollIntervalMs?: number,
|
|
42
|
+
* pollTimeoutMs?: number,
|
|
36
43
|
* onProgress?: (completed: number, total: number) => void,
|
|
37
44
|
* native?: {
|
|
38
45
|
* submitBatch: (
|
|
@@ -43,13 +50,13 @@ import { loadNative } from './internal/native.mjs'
|
|
|
43
50
|
* onProgress?: (completed: number, total: number) => void
|
|
44
51
|
* ) => Promise<BatchResult[]>
|
|
45
52
|
* }
|
|
46
|
-
* }} [options] конфіг локальних провайдерів, ліміти
|
|
53
|
+
* }} [options] конфіг локальних провайдерів, ліміти чанка/конкурентності/бекенда/опитування, progress-колбек, інжект `native` для тестів
|
|
47
54
|
* @returns {Promise<BatchResult[]>} результати в тому самому порядку, що й вхідні `items`
|
|
48
55
|
*/
|
|
49
56
|
export function submitBatch(
|
|
50
57
|
modelSpecOrTier,
|
|
51
58
|
items,
|
|
52
|
-
{ localProviders, system, chunkSize, concurrency, onProgress, native } = {}
|
|
59
|
+
{ localProviders, system, chunkSize, concurrency, backend, pollIntervalMs, pollTimeoutMs, onProgress, native } = {}
|
|
53
60
|
) {
|
|
54
61
|
const nativeImpl = native ?? loadNative()
|
|
55
62
|
return nativeImpl.submitBatch(
|
|
@@ -65,7 +72,10 @@ export function submitBatch(
|
|
|
65
72
|
},
|
|
66
73
|
{
|
|
67
74
|
chunkSize: chunkSize ?? undefined,
|
|
68
|
-
concurrency: concurrency ?? undefined
|
|
75
|
+
concurrency: concurrency ?? undefined,
|
|
76
|
+
backend: backend ?? undefined,
|
|
77
|
+
pollIntervalMs: pollIntervalMs ?? undefined,
|
|
78
|
+
pollTimeoutMs: pollTimeoutMs ?? undefined
|
|
69
79
|
},
|
|
70
80
|
onProgress ?? undefined
|
|
71
81
|
)
|
package/lib/docs/batch.md
CHANGED
|
@@ -3,7 +3,7 @@ type: JS Module
|
|
|
3
3
|
title: batch.mjs
|
|
4
4
|
resource: llm-lib/lib/batch.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: 5e13af10
|
|
7
7
|
model: openai-codex/gpt-5.4-mini
|
|
8
8
|
tier: cloud-min
|
|
9
9
|
score: 100
|
|
@@ -12,22 +12,40 @@ docgen:
|
|
|
12
12
|
|
|
13
13
|
## Огляд
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Тип 2b (OpenAI-сумісний API, batch) — `submitBatch` обирає між клієнтською
|
|
16
|
+
емуляцією (v1, чанкований конкурентний прогін через Тип 2a
|
|
17
|
+
`llm_lib::local_cloud`) і справжнім `/v1/batches` litellm batch-adapter-а
|
|
18
|
+
(спека `docs/specs/2026-07-27-batch-local-avg-real-batches.md`), під тим
|
|
19
|
+
самим інтерфейсом `submit → progress → results` для обох. Вибір —
|
|
20
|
+
`backend` (дефолт `'auto'`: реальний Batch API лише коли резолвлений
|
|
21
|
+
провайдер `litellm` і кешована мережева проба адаптера пройшла; локальний
|
|
22
|
+
omlx завжди йде емуляцією).
|
|
23
|
+
|
|
24
|
+
Тонкий JS-клієнт до Rust-крейта `llm_lib::batch`/`llm_lib::remote_batch`
|
|
25
|
+
через napi FFI in-process (`llm-lib/crates/llm-lib-napi`) — жодного
|
|
26
|
+
власного чанкінгу чи HTTP тут (анти-приклад, якого це узагальнює:
|
|
27
|
+
`mlmail/use-summary.js` чанкує переклади проти omlx вручну, з
|
|
28
|
+
вистражданими лімітами).
|
|
16
29
|
|
|
17
30
|
## Поведінка
|
|
18
31
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
32
|
+
submitBatch повертає результати в тому ж порядку, що й вхідні items; для кожного item результат містить або `ok`, або `error`.
|
|
33
|
+
|
|
34
|
+
Для кожного item `customId` має бути унікальним у межах одного виклику; конфлікт ідентифікаторів лишається на стороні викликача.
|
|
35
|
+
|
|
36
|
+
За помилок виконання batch у відповіді зберігається один результат на кожен вхідний item, тож користувацький контракт не зводиться до часткової втрати елементів.
|
|
37
|
+
|
|
38
|
+
`onProgress`, якщо заданий, отримує агрегований прогрес виконання для всього набору items.
|
|
25
39
|
|
|
26
40
|
## Публічний API
|
|
27
41
|
|
|
28
|
-
- submitBatch —
|
|
29
|
-
|
|
30
|
-
|
|
42
|
+
- submitBatch — Batch-виклик Типу 2b. `modelSpecOrTier` — той самий контракт, що й у
|
|
43
|
+
[`oneShotLocalCloud`] з `local-cloud.mjs`: явний `"provider/model-id"`
|
|
44
|
+
або абстрактний тир (`min`/`avg`/`max`).
|
|
45
|
+
|
|
46
|
+
## Сценарії використання
|
|
47
|
+
|
|
48
|
+
- `llm-lib/tests/batch.test.mjs` (submitBatch) — делегує modelSpecOrTier/items у native.submitBatch і віддає його результат; явний; кожен item нормалізується до {customId, prompt, system}, навіть без власного system; localProviders/system/chunkSize/concurrency прокидаються в options/config; onProgress прокидається останнім аргументом; ще 2
|
|
31
49
|
|
|
32
50
|
## Гарантії поведінки
|
|
33
51
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@7n/llm-lib",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.11.0",
|
|
4
4
|
"description": "Тонкий шар роботи з LLM (локальні omlx + хмарні провайдери) поверх pi: model tiers, one-shot, agentic-раннери, write-guard, trace, telemetry, prompt-budget",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"nitra",
|
|
@@ -56,8 +56,8 @@
|
|
|
56
56
|
"access": "public"
|
|
57
57
|
},
|
|
58
58
|
"optionalDependencies": {
|
|
59
|
-
"@7n/llm-lib-darwin-arm64": "2.
|
|
60
|
-
"@7n/llm-lib-linux-x64": "2.
|
|
59
|
+
"@7n/llm-lib-darwin-arm64": "2.11.0",
|
|
60
|
+
"@7n/llm-lib-linux-x64": "2.11.0"
|
|
61
61
|
},
|
|
62
62
|
"peerDependencies": {
|
|
63
63
|
"@earendil-works/pi-ai": "~0.80.10",
|