55 lines
1.3 KiB
TypeScript
55 lines
1.3 KiB
TypeScript
import { generateId, loadApiKey } from '../spec';
|
|
import { MistralChatLanguageModel } from './mistral-chat-language-model';
|
|
import {
|
|
MistralChatModelId,
|
|
MistralChatSettings,
|
|
} from './mistral-chat-settings';
|
|
|
|
/**
|
|
* Mistral provider.
|
|
*/
|
|
export class Mistral {
|
|
readonly baseUrl?: string;
|
|
readonly apiKey?: string;
|
|
|
|
private readonly generateId: () => string;
|
|
|
|
constructor(
|
|
options: {
|
|
baseUrl?: string;
|
|
apiKey?: string;
|
|
generateId?: () => string;
|
|
} = {},
|
|
) {
|
|
this.baseUrl = options.baseUrl;
|
|
this.apiKey = options.apiKey;
|
|
this.generateId = options.generateId ?? generateId;
|
|
}
|
|
|
|
private get baseConfig() {
|
|
return {
|
|
baseUrl: this.baseUrl ?? 'https://api.mistral.ai/v1',
|
|
headers: () => ({
|
|
Authorization: `Bearer ${loadApiKey({
|
|
apiKey: this.apiKey,
|
|
environmentVariableName: 'MISTRAL_API_KEY',
|
|
description: 'Mistral',
|
|
})}`,
|
|
}),
|
|
};
|
|
}
|
|
|
|
chat(modelId: MistralChatModelId, settings: MistralChatSettings = {}) {
|
|
return new MistralChatLanguageModel(modelId, settings, {
|
|
provider: 'mistral.chat',
|
|
...this.baseConfig,
|
|
generateId: this.generateId,
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Default Mistral provider instance.
|
|
*/
|
|
export const mistral = new Mistral();
|