109 lines
2.7 KiB
TypeScript
109 lines
2.7 KiB
TypeScript
/**
|
|
* Grok CLI provider implementation for AI SDK v5
|
|
*/
|
|
|
|
import type { LanguageModelV2, ProviderV2 } from '@ai-sdk/provider';
|
|
import { NoSuchModelError } from '@ai-sdk/provider';
|
|
import { GrokCliLanguageModel } from './grok-cli-language-model.js';
|
|
import type { GrokCliModelId, GrokCliSettings } from './types.js';
|
|
|
|
/**
|
|
* Grok CLI provider interface that extends the AI SDK's ProviderV2
|
|
*/
|
|
export interface GrokCliProvider extends ProviderV2 {
|
|
/**
|
|
* Creates a language model instance for the specified model ID.
|
|
* This is a shorthand for calling `languageModel()`.
|
|
*/
|
|
(modelId: GrokCliModelId, settings?: GrokCliSettings): LanguageModelV2;
|
|
|
|
/**
|
|
* Creates a language model instance for text generation.
|
|
*/
|
|
languageModel(
|
|
modelId: GrokCliModelId,
|
|
settings?: GrokCliSettings
|
|
): LanguageModelV2;
|
|
|
|
/**
|
|
* Alias for `languageModel()` to maintain compatibility with AI SDK patterns.
|
|
*/
|
|
chat(modelId: GrokCliModelId, settings?: GrokCliSettings): LanguageModelV2;
|
|
|
|
textEmbeddingModel(modelId: string): never;
|
|
imageModel(modelId: string): never;
|
|
}
|
|
|
|
/**
|
|
* Configuration options for creating a Grok CLI provider instance
|
|
*/
|
|
export interface GrokCliProviderSettings {
|
|
/**
|
|
* Default settings to use for all models created by this provider.
|
|
* Individual model settings will override these defaults.
|
|
*/
|
|
defaultSettings?: GrokCliSettings;
|
|
}
|
|
|
|
/**
|
|
* Creates a Grok CLI provider instance with the specified configuration.
|
|
* The provider can be used to create language models for interacting with Grok models.
|
|
*/
|
|
export function createGrokCli(
|
|
options: GrokCliProviderSettings = {}
|
|
): GrokCliProvider {
|
|
const createModel = (
|
|
modelId: GrokCliModelId,
|
|
settings: GrokCliSettings = {}
|
|
): LanguageModelV2 => {
|
|
const mergedSettings = {
|
|
...options.defaultSettings,
|
|
...settings
|
|
};
|
|
|
|
return new GrokCliLanguageModel({
|
|
id: modelId,
|
|
settings: mergedSettings
|
|
});
|
|
};
|
|
|
|
const provider = function (
|
|
modelId: GrokCliModelId,
|
|
settings?: GrokCliSettings
|
|
) {
|
|
if (new.target) {
|
|
throw new Error(
|
|
'The Grok CLI model function cannot be called with the new keyword.'
|
|
);
|
|
}
|
|
|
|
return createModel(modelId, settings);
|
|
};
|
|
|
|
provider.languageModel = createModel;
|
|
provider.chat = createModel; // Alias for languageModel
|
|
|
|
// Add textEmbeddingModel method that throws NoSuchModelError
|
|
provider.textEmbeddingModel = (modelId: string) => {
|
|
throw new NoSuchModelError({
|
|
modelId,
|
|
modelType: 'textEmbeddingModel'
|
|
});
|
|
};
|
|
|
|
provider.imageModel = (modelId: string) => {
|
|
throw new NoSuchModelError({
|
|
modelId,
|
|
modelType: 'imageModel'
|
|
});
|
|
};
|
|
|
|
return provider as GrokCliProvider;
|
|
}
|
|
|
|
/**
|
|
* Default Grok CLI provider instance.
|
|
* Pre-configured provider for quick usage without custom settings.
|
|
*/
|
|
export const grokCli = createGrokCli();
|