@futdevpro/fsm-dynamo 1.15.9 → 1.15.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.
package/.husky/pre-commit CHANGED
@@ -1 +1,2 @@
1
+ dc sync-fdp-deps --patch-only --stage
1
2
  dc bump-version
package/README.md CHANGED
@@ -234,6 +234,9 @@ const config = {
234
234
  };
235
235
  ```
236
236
 
237
+ **See also:**
238
+ - [OpenAI-compatible providers how-to (LM Studio / Ollama / vLLM / LocalAI)](__documentations/2026-05-17-oai-compatible-providers-howto.md) — `DyFM_OAI_ClientOptions.baseURL`-override mintázattal lokál és self-hosted LLM-ek
239
+
237
240
  ### 3. Data Handler Module
238
241
 
239
242
  **Import:** `@futdevpro/fsm-dynamo/data-handler`
@@ -0,0 +1,282 @@
1
+ # 2026-05-17 — OpenAI-compatible providers (Hunglish how-to)
2
+
3
+ **Spec:** `__agent/feature-requests/FR-005-oai-compat-provider-docs.md` (workspace root)
4
+ **Scope:** docs-only, LOW priority. Nincs API-változás.
5
+
6
+ ---
7
+
8
+ ## Mire jó ez?
9
+
10
+ A `DyFM_OAI_ClientOptions.baseURL` mező (`fsm-dynamo/_modules/ai/_modules/open-ai/_models/oai-client-options.interface.ts:25`) lehetővé teszi **tetszőleges OpenAI-API-kompatibilis endpoint** használatát az `openai` npm SDK-n keresztül — anélkül, hogy a Dynamo OAI service-eket (`DyFM_OAI_Settings`, downstream `DyNTS_OAI_Embedding_ControlService` / `DyNTS_OAI_LLM_ServiceBase`) bármi módon kellene módosítani.
11
+
12
+ Tipikus use-case-ek:
13
+ - **Lokál fejlesztés**: `OPENAI_API_KEY` nélkül, lokál LLM-mel (LM Studio, Ollama)
14
+ - **Self-hosted production**: vLLM / LocalAI klaszter saját infrán
15
+ - **Cost-control**: nyílt-súlyú modellek (Llama, Mistral, Qwen) drága API helyett
16
+
17
+ A `baseURL`-override `openai` SDK-natív feature — Dynamo csak átadja a config-ot (`oai-llm.service-base.ts:91-98`):
18
+
19
+ ```typescript
20
+ this.openai = new OpenAI(
21
+ set?.config ?? {
22
+ organization: DyNTS_global_settings.env_settings.openAi.organization,
23
+ apiKey: DyNTS_global_settings.env_settings.openAi.apiKey,
24
+ project: DyNTS_global_settings.env_settings.openAi.project,
25
+ }
26
+ );
27
+ ```
28
+
29
+ → ha a `set.config.baseURL` ki van töltve, az SDK arra megy. Minden más változatlan.
30
+
31
+ ---
32
+
33
+ ## Általános minta
34
+
35
+ ```typescript
36
+ import { DyFM_OAI_Settings, DyFM_OAI_CallSettings } from '@futdevpro/fsm-dynamo/ai/open-ai';
37
+ import { DyNTS_OAI_LLM_ChatServiceBase } from '@futdevpro/dynamo-nts/ai/open-ai';
38
+
39
+ const settings: DyFM_OAI_Settings = new DyFM_OAI_Settings({
40
+ config: {
41
+ baseURL: 'http://<provider-host>:<port>/v1',
42
+ apiKey: '<placeholder-or-real>',
43
+ },
44
+ defaultSettings: new DyFM_OAI_CallSettings({
45
+ useModel: '<provider-specific-model-id>',
46
+ }),
47
+ });
48
+
49
+ // Use with any Dynamo OAI service:
50
+ class MyChat extends DyNTS_OAI_LLM_ChatServiceBase {}
51
+ const chat: MyChat = new MyChat(settings);
52
+ ```
53
+
54
+ A kulcs: `config.baseURL` + `config.apiKey` + `defaultSettings.useModel`. A többi mező (organization, project) lokál provider-eknél figyelmen kívül marad.
55
+
56
+ ---
57
+
58
+ ## Provider-szekciók
59
+
60
+ ### 1. LM Studio — desktop GUI lokál LLM-hez
61
+
62
+ [LM Studio](https://lmstudio.ai) Mac/Windows/Linux desktop app, beépített OAI-compat szerverrel. Default port: `1234`.
63
+
64
+ **Beállítás**:
65
+ 1. LM Studio-ban betölteni egy modellt (pl. `nomic-embed-text-v1.5` embedding-hez, `llama-3.2-3b-instruct` chat-hez)
66
+ 2. "Local Server" tab → "Start Server"
67
+
68
+ **Code**:
69
+ ```typescript
70
+ const lmStudio: DyFM_OAI_Settings = new DyFM_OAI_Settings({
71
+ config: {
72
+ baseURL: 'http://localhost:1234/v1',
73
+ apiKey: 'lm-studio', // tetszőleges placeholder — LM Studio ignorálja
74
+ },
75
+ defaultSettings: new DyFM_OAI_CallSettings({
76
+ useModel: 'nomic-embed-text-v1.5', // ahogy a Local Server megjeleníti
77
+ }),
78
+ });
79
+ ```
80
+
81
+ **Tipikus jellemzők**:
82
+ - ✅ GUI a modell-letöltéshez (HuggingFace integráció)
83
+ - ✅ Streaming chat completion support
84
+ - ⚠️ Embedding limit: a UI-n külön kell betölteni embedding modellt
85
+ - ❌ Multi-tenant / production-flow nem támogatott
86
+
87
+ ---
88
+
89
+ ### 2. Ollama — CLI-driven lokál LLM (OAI-compat layer ≥ v0.1.14)
90
+
91
+ [Ollama](https://ollama.com) parancssoros LLM-runner, OAI-compat layerrel. Default port: `11434`.
92
+
93
+ **Beállítás**:
94
+ ```bash
95
+ ollama pull llama3.2:3b
96
+ ollama pull nomic-embed-text
97
+ ollama serve # vagy ha service-ként fut, már megy
98
+ ```
99
+
100
+ **Code**:
101
+ ```typescript
102
+ const ollama: DyFM_OAI_Settings = new DyFM_OAI_Settings({
103
+ config: {
104
+ baseURL: 'http://localhost:11434/v1',
105
+ apiKey: 'ollama', // szintén placeholder — Ollama nem ellenőrzi
106
+ },
107
+ defaultSettings: new DyFM_OAI_CallSettings({
108
+ useModel: 'nomic-embed-text',
109
+ }),
110
+ });
111
+ ```
112
+
113
+ **Tipikus jellemzők**:
114
+ - ✅ Multi-modell support (`ollama pull <name>` → azonnal elérhető endpointon)
115
+ - ✅ Embedding endpoint OAI-compat formában működik (v0.1.14+ óta)
116
+ - ✅ Streaming chat completion OK
117
+ - ⚠️ `function_call` / `tools` API csak részben támogatott a tool-aware modelleknél (Llama-3 family OK; small instruct modellek may not)
118
+ - ⚠️ Context-window provider-szintű limit (általában 2048-8192 tokens default-tal — `OLLAMA_NUM_CTX` env-var)
119
+
120
+ ---
121
+
122
+ ### 3. vLLM — production-grade GPU inference server
123
+
124
+ [vLLM](https://docs.vllm.ai) Python alapú, batched + PagedAttention GPU-inference. OAI-compatible REST endpoint beépítve. Default port: `8000`.
125
+
126
+ **Beállítás**:
127
+ ```bash
128
+ pip install vllm
129
+ python -m vllm.entrypoints.openai.api_server \
130
+ --model meta-llama/Meta-Llama-3-8B-Instruct \
131
+ --port 8000 \
132
+ --api-key local-secret-token
133
+ ```
134
+
135
+ **Code**:
136
+ ```typescript
137
+ const vllm: DyFM_OAI_Settings = new DyFM_OAI_Settings({
138
+ config: {
139
+ baseURL: 'http://gpu-server:8000/v1',
140
+ apiKey: process.env.VLLM_API_KEY ?? 'local-secret-token', // ha --api-key beállítva
141
+ },
142
+ defaultSettings: new DyFM_OAI_CallSettings({
143
+ useModel: 'meta-llama/Meta-Llama-3-8B-Instruct', // a `--model` érték
144
+ }),
145
+ });
146
+ ```
147
+
148
+ **Tipikus jellemzők**:
149
+ - ✅ Magas throughput (batched inference) — production scaling
150
+ - ✅ Tool-calling support latest verziókban
151
+ - ✅ Streaming OK
152
+ - ⚠️ Egyszerre **egy** modell van memóriában (több modell = több instance)
153
+ - ⚠️ Embedding endpoint NEM all modellnél — csak ha a model dedikált embedding (pl. `intfloat/e5-mistral-7b-instruct`)
154
+ - ⚠️ GPU-szintű mem-management — OOM-ra dob, ha context-len túl nagy
155
+
156
+ ---
157
+
158
+ ### 4. LocalAI — REST-only multi-model platform
159
+
160
+ [LocalAI](https://localai.io) Go-alapú, multi-backend (llama.cpp, whisper.cpp, stable-diffusion) REST szerver. OAI-compatible chat + embedding endpointokkal. Default port: `8080`.
161
+
162
+ **Beállítás**:
163
+ ```bash
164
+ docker run -p 8080:8080 \
165
+ -v $PWD/models:/build/models \
166
+ localai/localai:latest
167
+ ```
168
+
169
+ Modellt vagy `models.yaml`-ban vagy runtime-on (`POST /models/apply`) lehet hozzáadni.
170
+
171
+ **Code**:
172
+ ```typescript
173
+ const localai: DyFM_OAI_Settings = new DyFM_OAI_Settings({
174
+ config: {
175
+ baseURL: 'http://localai:8080/v1',
176
+ apiKey: 'sk-local', // placeholder
177
+ },
178
+ defaultSettings: new DyFM_OAI_CallSettings({
179
+ useModel: 'gpt-4', // LocalAI alias → konfigban mapped a tényleges modellre
180
+ }),
181
+ });
182
+ ```
183
+
184
+ **Tipikus jellemzők**:
185
+ - ✅ Egyszerre több modell loadolva — modell-aliasok
186
+ - ✅ Multi-backend (LLM + Whisper transcribe + image-gen ugyanazon szerverről)
187
+ - ✅ Streaming OK
188
+ - ⚠️ A modell-aliasok kézi konfig kérdése — a `useModel` ID-nek pontosan match-elnie kell a `models.yaml`-ban definiálttal
189
+ - ⚠️ Lassabb felpörgés gpu-acceleration nélkül (CPU-fallback default)
190
+
191
+ ---
192
+
193
+ ## Embedding modellek — provider-specifikus
194
+
195
+ Az embedding-modell nevének **pontos egyezést** kell mutatnia a provider által regisztrált name-mel. Példák:
196
+
197
+ | Provider | Embedding model ID | Megjegyzés |
198
+ |---|---|---|
199
+ | OpenAI (cloud) | `text-embedding-3-small`, `text-embedding-3-large` | Default |
200
+ | LM Studio | `nomic-embed-text-v1.5`, `BAAI/bge-large-en-v1.5` | A betöltött modell ID-jét a Local Server tab írja ki |
201
+ | Ollama | `nomic-embed-text`, `mxbai-embed-large` | `ollama list` mutatja |
202
+ | vLLM | `intfloat/e5-mistral-7b-instruct` | Csak ha az indítási `--model` embedding-képes |
203
+ | LocalAI | `text-embedding-ada-002` (aliasként) | A `models.yaml`-ban definiált alias |
204
+
205
+ A `DyNTS_OAI_Embedding_ControlService` API-szintjén nem érzékeli a különbséget — a `useModel` field határoz meg mindent.
206
+
207
+ ---
208
+
209
+ ## Caveats — amire figyelni kell
210
+
211
+ ### Rate limits
212
+ - **OpenAI**: tier-szintű, API-doc-ban
213
+ - **LM Studio / Ollama / LocalAI**: nincs natív rate-limit — single-user dev tool
214
+ - **vLLM**: konfigurálható (`--max-num-seqs` flag), default kvázi-unlimited
215
+
216
+ ### Max tokens / context window
217
+ A `DyFM_OAI_CallSettings.maxTokens` provider-szintű limit alá kell hogy essen, különben az SDK 400/422-t kap:
218
+
219
+ | Provider | Default context-window | Override |
220
+ |---|---|---|
221
+ | OpenAI gpt-4o | 128K | API tier-függő |
222
+ | LM Studio | a betöltött modell native context-je | UI slider |
223
+ | Ollama | 2048 (legacy default!) → `num_ctx` paraméter | `OLLAMA_NUM_CTX` env-var vagy `Modelfile` `PARAMETER num_ctx` |
224
+ | vLLM | a modell native context-je | `--max-model-len` flag |
225
+ | LocalAI | `models.yaml` `context_size` field | per-model konfig |
226
+
227
+ ### Error-handling különbségek
228
+ - **OpenAI**: standard 400/401/403/429/500 + structured error body
229
+ - **Lokál providerek**: gyakran **404 a modell-name-re** (ha rosszul ID-zed), **timeout** (modell-loadolás közben), **OOM** (vLLM)
230
+ - **Ollama-specifikus**: ha a modell még nem `ollama pull`-olt, az endpoint csendben várakozik a pull-ig (lassú first-call)
231
+ - **LocalAI**: model-name mismatch → 422-t dob OAI-szerű error-body-val
232
+
233
+ ### Function-calling / tool-use
234
+ - **OpenAI**: teljes function-calling support
235
+ - **Ollama**: model-függő — Llama-3.1+ és Mistral tool-aware modellek igen, kicsi instruct modellek nem
236
+ - **vLLM**: support latest (v0.6+), de chat-template-mappel paraméterezni kell
237
+ - **LM Studio / LocalAI**: parciális, model-függő
238
+
239
+ ### Streaming
240
+ Mind a 4 provider támogat OAI-compat SSE streaming-et, **de**:
241
+ - Ollama legacy verziók (< v0.1.20) `stream: false`-cal stabilabb
242
+ - LocalAI streaming-rate alacsonyabb mint a token-emission
243
+
244
+ ---
245
+
246
+ ## Quick recipe — Dynamo-szintű váltás dev → cloud
247
+
248
+ ```typescript
249
+ const isDev: boolean = process.env.NODE_ENV === 'development';
250
+
251
+ const aiSettings: DyFM_OAI_Settings = new DyFM_OAI_Settings({
252
+ config: isDev
253
+ ? {
254
+ baseURL: 'http://localhost:11434/v1', // Ollama
255
+ apiKey: 'dev',
256
+ }
257
+ : {
258
+ apiKey: process.env.OPENAI_API_KEY,
259
+ organization: process.env.OPENAI_ORG_ID,
260
+ },
261
+ defaultSettings: new DyFM_OAI_CallSettings({
262
+ useModel: isDev ? 'llama3.2:3b' : 'gpt-4o',
263
+ }),
264
+ });
265
+ ```
266
+
267
+ A Dynamo OAI service-ek mindkét beállítással ugyanúgy működnek.
268
+
269
+ ---
270
+
271
+ ## Hivatkozott source-fájlok
272
+
273
+ | Fájl | Mit ad |
274
+ |---|---|
275
+ | `fsm-dynamo/src/_modules/ai/_modules/open-ai/_models/oai-client-options.interface.ts` | `DyFM_OAI_ClientOptions.baseURL` mező |
276
+ | `fsm-dynamo/src/_modules/ai/_modules/open-ai/_models/oai-settings.control-model.ts` | `DyFM_OAI_Settings` wrapper |
277
+ | `dynamo-nts/src/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.ts` | OpenAI SDK instantiation (config átadás) |
278
+ | `dynamo-nts/src/_modules/ai/_modules/open-ai/_services/oai-embedding.control-service.ts` | Embedding endpoint usage |
279
+
280
+ ## Backward compatibility
281
+
282
+ A `baseURL` mező mindig is létezett az OpenAI SDK-ban — a Dynamo egyetlen változtatása ehhez a docs-ot tisztázza, nem feature.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@futdevpro/fsm-dynamo",
3
- "version": "01.15.9",
3
+ "version": "01.15.11",
4
4
  "description": "Full Stack Model Collection for Dynamic (NodeJS-Typescript) Framework called Dynamo, by Future Development Ltd.",
5
5
  "DyBu_settings": {
6
6
  "packageType": "full-stack-package",
@@ -247,7 +247,7 @@
247
247
  "uuid": "11.1.0"
248
248
  },
249
249
  "devDependencies": {
250
- "@futdevpro/dynamo-eslint": "1.15.7",
250
+ "@futdevpro/dynamo-eslint": "1.15.9",
251
251
  "@types/jasmine": "~4.3.5",
252
252
  "@typescript-eslint/eslint-plugin": "^8.41.0",
253
253
  "@typescript-eslint/parser": "^8.41.0",