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).

Stiahnuť plugin


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

  1. Skopírujte adresár pluginu do priečinka plugins v adresári s komunikačnou bránou ERPIO One.
  2. Spustite/ reštartujte ERPIO Gateway tak, aby sa plugin načítal.
  3. 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)

Modely a parametre

Spoločné parametre

ParameterTypPovinnéPopis
@lmsBaseUrlstringÁnoZákladná adresa LM Studio servera, napr. http://localhost:1234. Plugin si doplní /api/v1/....
@lmsApiKeystringNieVoliteľ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)

ParameterTypPovinnéPopis
@lmsModelstringOdporúčanéIdentifikátor modelu, ktorý chcete použiť (napr. ibm/granite-4-micro).
@lmsInputstringNie*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.
@lmsSystemPromptstringNieSystémové pokyny pre model.
@lmsContextLengthintNiePočet tokenov v kontexte; vyššia hodnota vhodná pri integráciách.
@lmsTemperaturedoubleNieKreativita (0–1).
@lmsTopPdoubleNieNucleus sampling.
@lmsTopKintNieVýber z top‑K tokenov.
@lmsRepeatPenaltydoubleNiePenalizácia opakovaní.
@lmsMaxOutputTokensintNieLimit výstupných tokenov.
@lmsReasoningstringNie„off” | „low” | „medium” | „high” | „on” (ak to model podporuje).
@lmsPluginStatefulChatIDstringOdporúčané pri stateful/streamIdentifikátor konverzácie na strane pluginu – vysvetlené nižšie.
@lmsStreamboolNie (default false)Ak true, požiadavka sa vybaví streamovaním (SSE).
@lmResultCmdstringNiePríkaz pre uloženie výsledku, možné použiť parametre s názvami parametrov @NazovStlpcaTabulkySVysledkami
@lmsDefaultQuestionstringNieAk 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/chat je stavový by default – server vracia response_id; pokračovanie konverzácie sa dosiahne poslaním previous_response_id. Možné je aj store=false pre bezstavové správanie.
  • Plugin: parameter @lmsPluginStatefulChatID určuje, že chceme stavový režim na strane pluginu. Plugin si ukladá mapovanie pluginID ↔ last response_id a kompletný log konverzácie (user/assistant) do internej DB. Pri ďalšom kole (s rovnakým @lmsPluginStatefulChatID) plugin automaticky vloží previous_response_id podľa uloženého mapovania.

Ak @lmsPluginStatefulChatID neodošlete, plugin použije store=false (bezstavové) a výsledok vráti ako „ad‑hoc“ tabuľku (bez ukladania do DB).

Streamovanie (SSE)

  • LM Studio: pri stream=true posiela udalosti cez Server‑Sent Events (SSE), napr. message.delta s útržkami textu a finálne chat.end s agregovaným výsledkom.
  • Plugin: ak je @lmsStream = true a 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 IDneposiela novú otázku, ale vráti priebežne nahratý text,
    • po chat.end uloží finálnu odpoveď (vrátane response_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ĺpecTypPopis
lmsPluginStatefulChatIDstringIdentifikátor konverzácie na strane pluginu (môže byť NULL pri stateless).
step_nointPoradie kroku v rámci konverzácie.
rolestring"user" alebo "assistant".
contentstringObsah správy alebo doterajší partial text.
is_partialbooltrue pri priebežnom riadku počas streamovania.
created_dateDateTimeČas vloženia riadku (lokálny čas na gateway).
api_response_idstringresponse_id z LM Studio pri asistentovi (ak existuje).
statusstringrunning/completed/idle podľa stavu.
model_instance_idstringIdentifikátor inštancie modelu (ak LM Studio posiela).

Interné tabuľky (perzistencia) – plugin si spravuje v internej SQLite (gateway):

  • *_LmsConv – mapovanie plugin_chat_idapi_last_response_id + meta (model, baseUrl, stream flag, timestamps). LM Studio vráti response_id, ktorý použijeme pri pokračovaní cez previous_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:

  1. Nájde aktívny stream podľa @lmsPluginStatefulChatID
  2. Zavolá Cancel() na jeho CancellationTokenSource
  3. Zavrie prúd (HTTP stream)
  4. Označí konverzáciu ako neaktívnu
  5. 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

ParameterTypPovinnéPopis
@lmsPluginStatefulChatIDstringÁnoIdentifiká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 GetTable už 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

  1. Najprv sa pokúsi zastaviť akýkoľvek aktívny stream pre dané ID
  2. Odstráni všetky správy konverzácie zo *_LmsMsg
  3. Odstráni záznam konverzácie z *_LmsConv
  4. Odstráni konverzáciu z registru aktívnych streamov
  5. 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

ParameterTypPovinnéPopis
@lmsPluginStatefulChatIDstringÁnoIdentifiká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žívaDopad na LM Studio
StopPreruší 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)
DeleteVymaže celú stavovú konverzáciu na strane pluginuKeď 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 = 0 a updated_date < NOW() - @lmsPurgeDays,
    • zmažú sa ich správy z *_LmsMsg a 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).
  • 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ĺpecTypPopis
typestring"llm" alebo "embedding".
publisherstringVydavateľ modelu.
keystringJedinečný kľúč modelu.
display_namestringNázov modelu pre zobrazenie.
architecturestringArchitektúra (napr. llama, mistral), ak je k dispozícii.
quant_namestringNázov kvantizácie (napr. Q4_K_M), ak je k dispozícii.
quant_bits_per_weightintPočet bitov na váhu (ak je k dispozícii).
size_byteslongVeľkosť súboru modelu v bajtoch.
params_stringstringĽahko čitateľná veľkosť (napr. 7B).
max_context_lengthintMaximálny kontext modelu.
loaded_instances_countintPoč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žije store=false a vráti tabuľku lms_chat s 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_id z DB a pošle ho v poli previous_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ým chat.end neuzavrie 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 @lmsModel alebo načítajte model (JIT alebo manuálne). Zoznam dostupných modelov zistíte cez GET /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=true vracia response_id; pokračovanie prebieha cez previous_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