import { BaseProvider, ProviderConfig, GenerateTextOptions, GenerateTextResult } from 'praisonai';
class OllamaProvider extends BaseProvider {
readonly providerId = 'ollama';
private baseUrl: string;
constructor(modelId: string, config?: ProviderConfig) {
super(modelId, config);
this.baseUrl = config?.baseUrl || 'http://localhost:11434';
}
async generateText(options: GenerateTextOptions): Promise<GenerateTextResult> {
const response = await fetch(`${this.baseUrl}/api/generate`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
model: this.modelId,
prompt: options.messages.map(m => m.content).join('\n'),
stream: false
})
});
const data = await response.json();
return {
text: data.response,
usage: {
promptTokens: 0,
completionTokens: 0,
totalTokens: 0
}
};
}
async *streamText(options: StreamTextOptions): AsyncGenerator<StreamChunk> {
// Streaming implementation
}
async generateObject<T>(options: GenerateObjectOptions<T>): Promise<GenerateObjectResult<T>> {
// Object generation implementation
}
formatTools(tools: ToolDefinition[]): any[] {
return tools;
}
formatMessages(messages: Message[]): any[] {
return messages;
}
}
// Register and use
registerProvider('ollama', OllamaProvider);
const provider = createProvider('ollama/llama2');