@7n/llm-lib 2.14.13 → 2.14.15

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 CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.14.15] - 2026-08-04
4
+
5
+ ### Fixed
6
+
7
+ - `cargo fmt` для `crates/llm-lib/src/batch.rs` — два `providers.insert(...)` у тестах local-cloud каскаду лишились неформатованими після додавання нового локального провайдера і валили `cargo fmt --all -- --check` (гейти `Lint Rust` і `rust/check` у `Lint repo-wide`)
8
+
9
+ ## [2.14.14] - 2026-08-03
10
+
11
+ ### Changed
12
+
13
+ - feat(llm-lib): add turbofieldfare local provider (#374); chore(release): синк пінів платформних napi-пакетів @7n/llm-lib
14
+
3
15
  ## [2.14.13] - 2026-08-03
4
16
 
5
17
  ### Changed
@@ -1,35 +1,39 @@
1
1
  /**
2
2
  * Дефолтна мапа local-провайдерів для Rust-крейта `llm_lib::local_cloud`
3
3
  * (той самий `{ prefix: { baseUrl, apiKey } }` конфіг, що приймає
4
- * `oneShotLocalCloud`/`submitBatch`). Обидва зареєстровані провайдери
5
- * (`omlx`, `litellm`) завжди присутні в мапі одночасно — "активність"
6
- * визначається лише тим, чий provider-префікс реально стоїть у
7
- * model-spec (`N_LOCAL_MIN_MODEL` тощо): `LocalCloud::one_shot_with_spec`
8
- * б'є рівно в один клієнт за префіксом spec, тож другий запис у мапі
9
- * ніколи не отримує запиту, поки на нього не вказує жоден spec.
4
+ * `oneShotLocalCloud`/`submitBatch`). Один generic-слот `local-openai`
5
+ * покриває БУДЬ-ЯКИЙ кастомний OpenAI-сумісний сервер (omlx, litellm-проксі,
6
+ * TurboFieldfareServer, майбутні) одним спільним `N_LOCAL_OPENAI_*`-env
7
+ * замість окремої env-пари на кожен сервер.
8
+ *
9
+ * **Свідома відмова від окремих `omlx`/`litellm`-записів (та їхньої
10
+ * можливості діяти одночасно через різні tier-env, напр.
11
+ * `N_LOCAL_MIN_MODEL=omlx/...` + `N_LOCAL_AVG_MODEL=litellm/...`)** —
12
+ * generic-слот залишає активним лише один `baseUrl` за раз, перемикання
13
+ * між серверами — переналаштуванням `N_LOCAL_OPENAI_BASE_URL`. Це свідомий
14
+ * breaking change: model-spec-префікс `"omlx/..."` більше не резолвиться —
15
+ * усі конфіги мають мігрувати на `"local-openai/..."` (nitra/7n-rules#374).
16
+ *
17
+ * **Навмисно не `openai`**: цей рядок — literal cloud-provider prefix, який
18
+ * `local_cloud.rs` (і genai) розпізнають як справжній хмарний OpenAI (напр.
19
+ * `N_CLOUD_MIN_MODEL=openai/gpt-5.4-mini`) — реєстрація `openai` в
20
+ * local-мапі тихо перехопила б такі cloud-виклики на локальний baseUrl.
10
21
  */
11
22
  import { env } from 'node:process'
12
23
 
13
24
  /**
14
25
  * @returns {{
15
- * omlx: { baseUrl: string, apiKey: string|null },
16
- * litellm: { baseUrl: string, apiKey: string|null }
17
- * }} дефолтна мапа локальних провайдерів (override окремих полів через
18
- * `N_OMLX_BASE_URL`/`N_OMLX_API_KEY`/`N_LITELLM_BASE_URL`/`N_LITELLM_API_KEY`;
19
- * для API-ключів приймаються і без префікса `OMLX_API_KEY`/`LITELLM_API_KEY` —
20
- * це власна конвенція самих серверів (omlx-server читає `OMLX_API_KEY` для свого
21
- * auth), тож розробницьке оточення природно експортує саме її; `N_`-префіксовані
22
- * значення мають пріоритет)
26
+ * 'local-openai': { baseUrl: string, apiKey: string|null }
27
+ * }} дефолтна мапа локальних провайдерів (override — через
28
+ * `N_LOCAL_OPENAI_BASE_URL`/`N_LOCAL_OPENAI_API_KEY`; дефолтний `baseUrl`
29
+ * локальний omlx-порт `http://127.0.0.1:8000/v1/`, найбезпечніший
30
+ * zero-config дефолт без мережі, без зовнішньої залежності)
23
31
  */
24
32
  export function defaultLocalProviders() {
25
33
  return {
26
- omlx: {
27
- baseUrl: env.N_OMLX_BASE_URL ?? 'http://127.0.0.1:8000/v1/',
28
- apiKey: env.N_OMLX_API_KEY ?? env.OMLX_API_KEY ?? null
29
- },
30
- litellm: {
31
- baseUrl: env.N_LITELLM_BASE_URL ?? 'https://llm.7n.ai/v1/',
32
- apiKey: env.N_LITELLM_API_KEY ?? env.LITELLM_API_KEY ?? null
34
+ 'local-openai': {
35
+ baseUrl: env.N_LOCAL_OPENAI_BASE_URL ?? 'http://127.0.0.1:8000/v1/',
36
+ apiKey: env.N_LOCAL_OPENAI_API_KEY ?? null
33
37
  }
34
38
  }
35
39
  }
@@ -118,7 +118,7 @@ export function formatModelSpec(model) {
118
118
 
119
119
  /** Провайдери, що вважаються локальними. Override: `N_LLM_LOCAL_PROVIDERS` (кома-список). */
120
120
  const LOCAL_PROVIDERS = new Set(
121
- (env.N_LLM_LOCAL_PROVIDERS ?? 'omlx,litellm')
121
+ (env.N_LLM_LOCAL_PROVIDERS ?? 'local-openai')
122
122
  .split(',')
123
123
  .map(p => p.trim())
124
124
  .filter(Boolean)
@@ -126,8 +126,8 @@ const LOCAL_PROVIDERS = new Set(
126
126
 
127
127
  /**
128
128
  * Чи model-spec вказує на локальну модель: збіг з одним із LOCAL_* тирів
129
- * АБО провайдер з `N_LLM_LOCAL_PROVIDERS` (дефолт `omlx,litellm`). Обидва
130
- * провайдери можуть бути зареєстровані в `localProviders`-конфізі одночасно
129
+ * АБО провайдер з `N_LLM_LOCAL_PROVIDERS` (дефолт `local-openai`).
130
+ * Провайдер може бути зареєстрований в `localProviders`-конфізі одночасно
131
131
  * (див. `local-providers.mjs`) — "активний" завжди рівно один, бо
132
132
  * `LocalCloud` викликає клієнта за провайдер-префіксом фактичного
133
133
  * model-spec, не за наявністю запису в мапі. Використовується
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@7n/llm-lib",
3
- "version": "2.14.13",
3
+ "version": "2.14.15",
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.14.13",
60
- "@7n/llm-lib-linux-x64": "2.14.13"
59
+ "@7n/llm-lib-darwin-arm64": "2.14.15",
60
+ "@7n/llm-lib-linux-x64": "2.14.15"
61
61
  },
62
62
  "peerDependencies": {
63
63
  "@earendil-works/pi-ai": "~0.80.10",