1- import { createOpenAICompatible } from '@ai-sdk/openai-compatible'
1+ import { createOpenAICompatible , OpenAICompatibleChatLanguageModel } from '@ai-sdk/openai-compatible'
2+ import { LanguageModelV1 } from 'ai'
23
34import { invariant } from '@/lib/command/invariant.js'
4- import { Config } from '@/lib/common/types.js'
55import { Defaults } from '@/lib/llm/defaults.js'
66import { LlmProvider , LlmService } from '@/lib/llm/services/llm-service.js'
77
@@ -14,12 +14,10 @@ type LmStudioModelsResponse = {
1414 object : string
1515}
1616
17- export class LmStudio implements LlmService {
17+ export class LmStudio extends LlmService {
1818 private modelIds ! : string [ ]
1919 private provider ! : LlmProvider
2020
21- constructor ( private config : Config ) { }
22-
2321 async getAvailableModelIds ( ) : Promise < string [ ] > {
2422 invariant ( this . config . llmSettings ?. provider === 'lmstudio' , 'internal_error' )
2523
@@ -32,6 +30,30 @@ export class LmStudio implements LlmService {
3230 return this . modelIds
3331 }
3432
33+ async getModel ( ) : Promise < LanguageModelV1 > {
34+ const llmSettings = this . config . llmSettings
35+ invariant ( llmSettings ?. provider === 'lmstudio' , 'internal_error' )
36+
37+ const models = await this . getAvailableModelIds ( )
38+
39+ invariant ( models . length > 0 , 'llm:no_models_found' )
40+
41+ return new OpenAICompatibleChatLanguageModel (
42+ models [ 0 ] ,
43+ { } ,
44+ {
45+ defaultObjectGenerationMode : 'json' ,
46+ headers : ( ) => ( { } ) ,
47+ provider : `lmstudio.chat` ,
48+ supportsStructuredOutputs : true ,
49+ url : ( { path} ) => {
50+ const url = new URL ( `${ llmSettings . url ?? Defaults . llmSettings . lmstudio . url } /v1${ path } ` )
51+ return url . toString ( )
52+ } ,
53+ } ,
54+ )
55+ }
56+
3557 async getProvider ( ) : Promise < LlmProvider > {
3658 invariant ( this . config . llmSettings ?. provider === 'lmstudio' , 'internal_error' )
3759
0 commit comments