@@ -8,21 +8,21 @@ import { InputError } from './types.js'
88
99export abstract class BaseHandler < T extends LLMChatModel > {
1010 opts : ConfigOptions
11- protected models : readonly T [ ]
12- protected supportsJSON : readonly T [ ]
13- protected supportsImages : readonly T [ ]
14- protected supportsToolCalls : readonly T [ ]
11+ protected models : readonly T [ ] | boolean
12+ protected supportsJSON : readonly T [ ] | boolean
13+ protected supportsImages : readonly T [ ] | boolean
14+ protected supportsToolCalls : readonly T [ ] | boolean
1515 protected supportsN : readonly T [ ] | boolean
16- protected supportsStreamingMessages : readonly T [ ]
16+ protected supportsStreamingMessages : readonly T [ ] | boolean
1717
1818 constructor (
1919 opts : ConfigOptions ,
20- models : readonly T [ ] ,
21- supportsJSON : readonly T [ ] ,
22- supportsImages : readonly T [ ] ,
23- supportsToolCalls : readonly T [ ] ,
20+ models : readonly T [ ] | boolean ,
21+ supportsJSON : readonly T [ ] | boolean ,
22+ supportsImages : readonly T [ ] | boolean ,
23+ supportsToolCalls : readonly T [ ] | boolean ,
2424 suportsN : readonly T [ ] | boolean ,
25- supportsStreamingMessages : readonly T [ ]
25+ supportsStreamingMessages : readonly T [ ] | boolean
2626 ) {
2727 this . opts = opts
2828 this . models = models
@@ -38,6 +38,10 @@ export abstract class BaseHandler<T extends LLMChatModel> {
3838 ) : Promise < CompletionResponse | StreamCompletionResponse >
3939
4040 protected validateInputs ( body : CompletionParams ) : void {
41+ // We remove the provider key from the body just in case the provider does validation which errors due to it.
42+ // This can only occur on OpenAI compatible providers, but we do it for all providers for consistency.
43+ delete ( body as any ) . provider
44+
4145 if ( ! this . isSupportedModel ( body . model ) ) {
4246 throw new InputError ( `Invalid 'model' field: ${ body . model } .` )
4347 }
@@ -149,8 +153,8 @@ export abstract class BaseHandler<T extends LLMChatModel> {
149153
150154 // We make this public so that we can mock it in tests, which is fine because the `BaseHandler`
151155 // class isn't exposed to the user.
152- public isSupportedModel ( model : LLMChatModel ) : model is T {
153- return this . models . includes ( model as T )
156+ public isSupportedModel ( model : string ) : model is T {
157+ return this . isSupportedFeature ( this . models , model as T )
154158 }
155159
156160 protected supportsJSONMode ( model : T ) : boolean {
0 commit comments