@futdevpro/fsm-dynamo 1.15.9 → 1.15.10
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/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.
|
|
3
|
+
"version": "01.15.10",
|
|
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",
|