release: v2.80.32 - LM Studio SDK resilience & auto-recovery
This commit is contained in:
+18
-3
@@ -7,8 +7,14 @@ export interface ILMStudioClient {
|
||||
listLoaded(): Promise<string[]>;
|
||||
/** Like listLoaded() but caches the result for `ttlMs` to avoid hammering the SDK. */
|
||||
listLoadedCached(ttlMs?: number): Promise<string[]>;
|
||||
/** Resolve a chat-ready handle for an already-loaded (or just-loaded) model. */
|
||||
getModelHandle(modelKey: string): Promise<LLM>;
|
||||
/**
|
||||
* Resolve a chat-ready handle for an already-loaded (or just-loaded) model.
|
||||
*
|
||||
* `options.refresh: true` drops the SDK + WebSocket so any disposed handle
|
||||
* sitting in the SDK's internal handle map is discarded. Use this after a
|
||||
* "Model is disposed!" or "lock() request could not be registered" error.
|
||||
*/
|
||||
getModelHandle(modelKey: string, options?: { refresh?: boolean }): Promise<LLM>;
|
||||
isReachable(): Promise<boolean>;
|
||||
setBaseUrl(httpBaseUrl: string): void;
|
||||
}
|
||||
@@ -111,8 +117,17 @@ export class LMStudioClient implements ILMStudioClient {
|
||||
}
|
||||
}
|
||||
|
||||
async getModelHandle(modelKey: string): Promise<LLM> {
|
||||
async getModelHandle(modelKey: string, options?: { refresh?: boolean }): Promise<LLM> {
|
||||
try {
|
||||
if (options?.refresh) {
|
||||
// Recreate the SDK + WebSocket so the SDK's internal handle
|
||||
// cache is dropped. The next llm.model() call mints a fresh
|
||||
// handle instead of returning the disposed one from the
|
||||
// previous (aborted) prediction.
|
||||
this._sdk = undefined;
|
||||
this._loadedCache = undefined;
|
||||
logInfo('LM Studio SDK handle refresh requested — dropped cached SDK client.', { modelKey });
|
||||
}
|
||||
return await this.getSdk().llm.model(modelKey);
|
||||
} catch (e: any) {
|
||||
const msg = e?.message ?? String(e);
|
||||
|
||||
Reference in New Issue
Block a user