Plugin e1_ws_ai_lmstudioapi
Plugin aj dokumentácia generované pomocou AI
LM Studio API
e1_ws_ai_lmstudioapi je ERPIO One plugin, ktorý prepája ERPIO One s lokálnym serverom LM Studio cez natívne REST rozhranie v1. Plugin poskytuje:
- Chat: volanie
POST /api/v1/chat– interaktívna komunikácia s LLM, podpora stateful chats a streamovania (SSE). - ListModels: volanie
GET /api/v1/models– prehľad dostupných (nainštalovaných a/alebo načítaných) modelov.
Plugin je vhodný na lokálne, súkromné spracovanie požiadaviek bez odosielania dát do cloudu (LM Studio beží na vašom stroji). Z pohľadu LM Studio je odporúčané používať natívne v1 API na /api/v1/* (stavové chaty, SSE, doplnkové metriky a možnosti).
Požiadavky
- LM Studio nainštalované a spustené s REST serverom (štandardne na
http://localhost:1234). - Model stiahnutý a/alebo načítaný v LM Studio (prípadne zapnuté JIT‑load, podľa konfigurácie LM Studio). Zoznam modelov je k dispozícii cez
GET /api/v1/models. - Voliteľne API token (ak v LM Studio zapnete autentifikáciu). Token sa posiela v hlavičke
Authorization: Bearer <token>.
Poznámka: Dokumentácia LM Studio uvádza, že v1 REST API zahŕňa podporu stavového chatu a streamovania; použité endpointy a ich správanie sú popísané v oficiálnych materiáloch.
Inštalácia a aktivácia
- Skopírujte adresár pluginu do priečinka plugins v adresári s komunikačnou bránou ERPIO One.
- Spustite/ reštartujte ERPIO Gateway tak, aby sa plugin načítal.
- V zoznamoch zdrojov dát uvidíte dva nové modely:
- LM Studio Chat (v1) (SysName:
e1_ws_ai_lmstudioapi_chat) - LM Studio ListModels (v1) (SysName:
e1_ws_ai_lmstudioapi_listmodels)
- LM Studio Chat (v1) (SysName:
Modely a parametre
Spoločné parametre
| Parameter | Typ | Povinné | Popis |
|---|---|---|---|
@lmsBaseUrl | string | Áno | Základná adresa LM Studio servera, napr. http://localhost:1234. Plugin si doplní /api/v1/.... |
@lmsApiKey | string | Nie | Voliteľný API token; použije sa v Authorization: Bearer. |
Model: LM Studio Chat (v1)
Endpoint: POST {baseUrl}/api/v1/chat (natívne v1 API)
Účel: Odošle správu modelu a získa odpoveď. V podporovaných scenároch je chat stavový (LM Studio si udržuje kontext podľa response_id/previous_response_id) a umožňuje streamovanie čiže priebežné doručovanie textu cez SSE.
Parametre (Chat)
| Parameter | Typ | Povinné | Popis |
|---|---|---|---|
@lmsModel | string | Odporúčané | Identifikátor modelu, ktorý chcete použiť (napr. ibm/granite-4-micro). |
@lmsInput | string | Nie* | Vstup používateľa (otázka). Ak chýba, plugin pri stavovom ID vráti doterajšiu konverzáciu; bez ID vráti len schému. |
@lmsSystemPrompt | string | Nie | Systémové pokyny pre model. |
@lmsContextLength | int | Nie | Počet tokenov v kontexte; vyššia hodnota vhodná pri integráciách. |
@lmsTemperature | double | Nie | Kreativita (0–1). |
@lmsTopP | double | Nie | Nucleus sampling. |
@lmsTopK | int | Nie | Výber z top‑K tokenov. |
@lmsRepeatPenalty | double | Nie | Penalizácia opakovaní. |
@lmsMaxOutputTokens | int | Nie | Limit výstupných tokenov. |
@lmsReasoning | string | Nie | „off” | „low” | „medium” | „high” | „on” (ak to model podporuje). |
@lmsPluginStatefulChatID | string | Odporúčané pri stateful/stream | Identifikátor konverzácie na strane pluginu – vysvetlené nižšie. |
@lmsStream | bool | Nie (default false) | Ak true, požiadavka sa vybaví streamovaním (SSE). |
@lmResultCmd | string | Nie | Príkaz pre uloženie výsledku, možné použiť parametre s názvami parametrov @NazovStlpcaTabulkySVysledkami |
@lmsDefaultQuestion | string | Nie | Ak príde požiadavka bez vstupu @lmsInput (prázdny reťazec), datasouce nevolá LM Studio a vráti riadok (role=assistant) s textom z @lmsDefaultQuestion. Vhodné na zobrazenie návrhu otázky/„hintu“ v UI pre prázdny chat. |
* Pre úplne prvé načítanie bez vstupu a bez ID plugin vráti iba schému.
Stavové konverzácie (stateful)
- LM Studio:
/api/v1/chatje stavový by default – server vraciaresponse_id; pokračovanie konverzácie sa dosiahne poslanímprevious_response_id. Možné je ajstore=falsepre bezstavové správanie. - Plugin: parameter
@lmsPluginStatefulChatIDurčuje, že chceme stavový režim na strane pluginu. Plugin si ukladá mapovaniepluginID ↔ last response_ida kompletný log konverzácie (user/assistant) do internej DB. Pri ďalšom kole (s rovnakým@lmsPluginStatefulChatID) plugin automaticky vložíprevious_response_idpodľa uloženého mapovania.
Ak
@lmsPluginStatefulChatIDneodošlete, plugin použijestore=false(bezstavové) a výsledok vráti ako „ad‑hoc“ tabuľku (bez ukladania do DB).
Streamovanie (SSE)
- LM Studio: pri
stream=trueposiela udalosti cez Server‑Sent Events (SSE), napr.message.deltas útržkami textu a finálnechat.ends agregovaným výsledkom. - Plugin: ak je
@lmsStream = truea je zadaný@lmsPluginStatefulChatID, plugin spustí interný „worker“ pre stream a:- na prvé GetTable spustí požiadavku a okamžite vráti tabuľku s doterajším stavom (môže byť prázdna alebo obsahovať prvé partial kúsky),
- na ďalšie GetTable s tým istým ID už neposiela novú otázku, ale vráti priebežne nahratý text,
- po
chat.enduloží finálnu odpoveď (vrátaneresponse_id) do DB a označí stream ako dokončený.
- Prečo ID pri streame: hoci LM Studio ID nevyžaduje, plugin ho používa na rozlíšenie viacerých súbežných streamov a aby vedel, ktorú rozpracovanú odpoveď má pri ďalšom refreshi vrátiť.
Odporúčanie: pri streamovaní vždy odosielajte
@lmsPluginStatefulChatID. Bez ID by plugin nevedel priradiť priebežný výstup k ďalším refreshom.
Štruktúra dát a výstupné tabuľky
Chat – lms_chat
Tabuľka vždy reprezentuje celú konverzáciu, ktorú má plugin k dispozícii, + prípadný partial riadok počas streamu.
| Stĺpec | Typ | Popis |
|---|---|---|
lmsPluginStatefulChatID | string | Identifikátor konverzácie na strane pluginu (môže byť NULL pri stateless). |
step_no | int | Poradie kroku v rámci konverzácie. |
role | string | "user" alebo "assistant". |
content | string | Obsah správy alebo doterajší partial text. |
is_partial | bool | true pri priebežnom riadku počas streamovania. |
created_date | DateTime | Čas vloženia riadku (lokálny čas na gateway). |
api_response_id | string | response_id z LM Studio pri asistentovi (ak existuje). |
status | string | running/completed/idle podľa stavu. |
model_instance_id | string | Identifikátor inštancie modelu (ak LM Studio posiela). |
Interné tabuľky (perzistencia) – plugin si spravuje v internej SQLite (gateway):
*_LmsConv– mapovanieplugin_chat_id↔api_last_response_id+ meta (model, baseUrl, stream flag, timestamps). LM Studio vrátiresponse_id, ktorý použijeme pri pokračovaní cezprevious_response_id.*_LmsMsg– úplný log správ (user/assistant), aby vedel plugin vždy vrátiť celú históriu.
Akcie:
Plugin e1_ws_ai_lmstudioapi podporuje dve manažovacie akcie nad stavovým chatom:
- Stop – okamžité prerušenie prebiehajúcej generácie (streamovania) odpovede
- Delete – úplné zrušenie stavového chatu na strane pluginu (cache + DB)
Tieto akcie fungujú iba v prípade, že sa používa stavový režim, t. j. keď je uvedený parameter @lmsPluginStatefulChatID.
Akcia Stop
Účel
Akcia Stop slúži na okamžité prerušenie prebiehajúcej odpovede modelu v prípade, že:
- generovanie trvá pridlho,
- používateľ si želá zmeniť zadanie,
- alebo chce zastaviť stream ešte pred dokončením.
Ako funguje
Pri streamovaní (@lmsStream = true) LM Studio posiela dáta cez Server-Sent Events (SSE).
SSE sa prerušuje na strane klienta tým, že sa ukončí HTTP spojenie. Toto je aj oficiálne správanie SSE – prerušenie sa realizuje zatvorením prúdu, nie volaním serverového endpointu.
LM Studio API neposkytuje vlastný „cancel“ endpoint; prerušenie sa rieši zatvorením spojenia.
Plugin preto pri akcii Stop:
- Nájde aktívny stream podľa
@lmsPluginStatefulChatID - Zavolá
Cancel()na jehoCancellationTokenSource - Zavrie prúd (HTTP stream)
- Označí konverzáciu ako neaktívnu
- Pošle prázdnu tabuľku ako výsledok akcie
Po najbližšom GetTable už klient dostane stav „completed“ alebo „idle“ s doposiaľ vygenerovaným textom.
Parametre
| Parameter | Typ | Povinné | Popis |
|---|---|---|---|
@lmsPluginStatefulChatID | string | Áno | Identifikátor aktívnej konverzácie, ktorej generovanie sa má zastaviť. |
Výstup
- Vráti sa prázdna tabuľka (ERPIO štandard pre akcie).
- Nasledujúci
GetTableuž poskytne posledný dostupný stav konverzácie.
Akcia Delete
Účel
Akcia Delete slúži na:
- odstránenie celej stavovej konverzácie (histórie aj metadát),
- ukončenie prípadného aktívneho streamu,
- vymazanie pomocných záznamov z internej SQLite (
*_LmsConv,*_LmsMsg).
Ako funguje
- Najprv sa pokúsi zastaviť akýkoľvek aktívny stream pre dané ID
- Odstráni všetky správy konverzácie zo
*_LmsMsg - Odstráni záznam konverzácie z
*_LmsConv - Odstráni konverzáciu z registru aktívnych streamov
- Vráti prázdnu tabuľku
Dôležité obmedzenie (LM Studio API)
LM Studio nemá žiadny REST endpoint, ktorý by umožnil „zmazať“ serverovú konverzáciu alebo jej kontext.
Štandardné /api/v1/chat endpointy majú síce vstavanú stavovosť (response_id, previous_response_id), ale neexistuje delete operácia.
To znamená, že:
- Delete vymaže plugin‑side stav,
- ďalší dotaz jednoducho nepošle
previous_response_id, - tým sa prirodzene otvorí úplne nová vetva konverzácie na strane LM Studia.
Parametre
| Parameter | Typ | Povinné | Popis |
|---|---|---|---|
@lmsPluginStatefulChatID | string | Áno | Identifikátor konverzácie, ktorú chceš zrušiť. |
Výstup
- Vráti sa prázdna tabuľka.
- Pri ďalšom použití rovnakého ID už nebude k dispozícii žiadna história (plugin-side je odstránená), a server začne novú konverzáciu, keďže sa neposiela
previous_response_id.
Súhrn rozdielov
| Akcia | Čo robí | Kedy sa používa | Dopad na LM Studio |
|---|---|---|---|
| Stop | Preruší prebiehajúce streamovanie (zruší HTTP SSE spojenie) | Keď chceš okamžite prerušiť generovanie | Žiadny špeciálny API zásah, iba ukončenie spojenia (SSE) |
| Delete | Vymaže celú stavovú konverzáciu na strane pluginu | Keď sa má konverzácia od začiatku „resetnúť“ | LM Studio nemá delete endpoint → kontext sa začne „nanovo“ |
Krátka ukážka použitia v ERPIO One
Stop
- Poslaný parameter:
@lmsPluginStatefulChatID = "chat-123"
- Akcia:
Stop
- Výsledok:
- stream okamžite ukončený
- prázdna tabuľka
- ďalší GetTable ukáže posledný stav
Delete
- Poslaný parameter:
@lmsPluginStatefulChatID = "chat-123"
- Akcia:
Delete
- Výsledok:
- história zmazaná
- stream zrušený
- ďalší dotaz je „fresh start“
Akcia PurgeByAge
- Popis: zmaže neaktívne konverzácie staršie než určený počet dní (vrátane ich správ).
- Parametre:
@lmsPurgeDays(povinné, celé číslo > 0). - Správanie:
- vyberú sa konverzácie s
is_active = 0aupdated_date < NOW() - @lmsPurgeDays, - zmažú sa ich správy z
*_LmsMsga následne záznamy z*_LmsConv, - voliteľne sa môže spúšťať
PRAGMA optimize/VACUUM(odporúčame spúšťať len občas, kvôli výkonnosti).
- vyberú sa konverzácie s
- Bezpečnosť: akcia nezasahuje aktívne vlákna.
Model: LM Studio ListModels (v1)
Endpoint: GET {baseUrl}/api/v1/models
Účel: Vráti zoznam modelov viditeľných pre server LM Studio (LLM aj embeddingové modely), vrátane metadát (publisher, display name, kvantizácia, veľkosť, max context, práve načítané inštancie a pod.).
Parametre: používa iba spoločné @lmsBaseUrl, @lmsApiKey.
ListModels – lms_models
| Stĺpec | Typ | Popis |
|---|---|---|
type | string | "llm" alebo "embedding". |
publisher | string | Vydavateľ modelu. |
key | string | Jedinečný kľúč modelu. |
display_name | string | Názov modelu pre zobrazenie. |
architecture | string | Architektúra (napr. llama, mistral), ak je k dispozícii. |
quant_name | string | Názov kvantizácie (napr. Q4_K_M), ak je k dispozícii. |
quant_bits_per_weight | int | Počet bitov na váhu (ak je k dispozícii). |
size_bytes | long | Veľkosť súboru modelu v bajtoch. |
params_string | string | Ľahko čitateľná veľkosť (napr. 7B). |
max_context_length | int | Maximálny kontext modelu. |
loaded_instances_count | int | Počet aktuálne načítaných inštancií modelu. |
Príklady použitia
1) Jednoduchý (stateless) chat – bez ID a bez streamu
@lmsBaseUrl = http://localhost:1234@lmsModel = ibm/granite-4-micro@lmsInput = "Napíš krátke haiku o východe slnka."- Bez
@lmsPluginStatefulChatID→ plugin použijestore=falsea vráti tabuľkulms_chats dvomi riadkami (user + assistant).
2) Stateful chat – pokračovanie konverzácie
@lmsPluginStatefulChatID = "demo-001"@lmsInput = "Pripomeň, ako sme sa dohodli."- Plugin si načíta
last response_idz DB a pošle ho v poliprevious_response_id. LM Studio tak pokračuje v konverzácii bez toho, aby ste posielali celú históriu.
3) Streamovanie (SSE) – priebežný výstup
@lmsPluginStatefulChatID = "demo-002"@lmsInput = "Popíš podrobne, uveď príklad kódu."@lmsStream = true- Prvé GetTable spustí stream; ďalšie GetTable s tým istým ID vracajú „partial“ obsah z eventov
message.delta, až kýmchat.endneuzavrie odpoveď.
4) Zoznam modelov
@lmsBaseUrl = http://localhost:1234- Model ListModels (v1) vráti tabuľku
lms_models.
Chybové stavy a ladenie
- HTTP 4xx/5xx z LM Studio – plugin vráti chybu s textom odpovede (napr. „model je nenačítaný“, „invalid request“).
- Stream sa neskončil / predčasne ukončil – skontrolujte, či ďalšie GetTable používajú identické
@lmsPluginStatefulChatID. Skúste reštartovať stream (znovu poslať input) alebo pozrieť logy LM Studio. - Autentifikácia – ak máte v LM Studio zapnuté API tokeny, nezabudnite na
@lmsApiKey; inak sa vráti 401. - Model – ak LM Studio nepozná model alebo nie je k dispozícii, upravte
@lmsModelalebo načítajte model (JIT alebo manuálne). Zoznam dostupných modelov zistíte cezGET /api/v1/models.
Bezpečnosť a sieť
- LM Studio server štandardne beží na
http://localhost:1234. Ak vystavujete server mimo localhost, postupujte podľa odporúčaní LM Studio (autentifikácia tokenom, prípadne sieťové obmedzenia). - Plugin neposiela dáta mimo zadané
@lmsBaseUrl.
Obmedzenia a poznámky
- Streamovanie bez ID: LM Studio síce nevyžaduje identifikátor, ale plugin ho používa na zosúladenie viacerých refreshov s jedným prebiehajúcim streamom. Preto je pri streamovaní odporúčané posielať
@lmsPluginStatefulChatID. - Stateful: na strane LM Studio je chat stavový a pri
store=truevraciaresponse_id; pokračovanie prebieha cezprevious_response_id. Plugin tento mechanizmus abstrahuje parametrom@lmsPluginStatefulChatID. - Ostatné v1 endpointy (load/unload/download) momentálne plugin neimplementuje.
FAQ
Musím poslať @lmsPluginStatefulChatID?
Nie pre jednorazové, bezstavové volanie. Áno/odporúčané pri stavovom režime a najmä pri streamovaní, aby GetTable vedel vracať priebežný stav tej istej rozpracovanej odpovede. (LM Studio samotné identifikátor nevyžaduje.)
Podporuje plugin system_prompt, context_length, sampling parametre?
Áno, sú mapované na zodpovedajúce polia /api/v1/chat.
Ako zistím, ktoré modely sú k dispozícii?
Použite model ListModels (volá GET /api/v1/models) a zobrazte tabuľku lms_models.
Je možné zrušiť bežiaci stream?
Plugin je navrhnutý tak, aby na pozadí spravoval aktívne streamy na základe @lmsPluginStatefulChatID. V prípade záujmu vieme doplniť akciu „CancelStream“ (rozšírenie).
Referencie
- LM Studio v1 REST API – prehľad / endpoints: LM Studio API /api/v1/*
- Stateful chats (store / response_id / previous_response_id): Stateful Chats
- Chat endpoint (telemetry, polia, systémové pokyny, sampling, context): Chat with a model – /api/v1/chat
- Streaming events (SSE) – zoznam eventov a formát: Streaming events – /api/v1/chat (stream=true)
- List Models – /api/v1/models: List your models
- Rýchly štart a API tokeny: Get up and running with the LM Studio API