UNPKG

contextual-agent-sdk

Version:

SDK for building AI agents with seamless voice-text context switching

117 lines 3.86 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.OllamaProvider = void 0; const BaseLLMProvider_1 = require("./BaseLLMProvider"); class OllamaProvider extends BaseLLMProvider_1.BaseLLMProvider { type = 'ollama'; name = 'Ollama'; config; constructor(config) { super(); this.config = config; } supportsTools() { return false; } supportsStreaming() { return false; } async generateResponse(options) { const host = this.config.host || 'http://localhost:11434'; try { const prompt = this.buildPrompt(options.messages); const response = await fetch(`${host}/api/generate`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ model: options.model || this.config.model || 'llama2', prompt: prompt, options: { temperature: options.temperature ?? this.config.defaultOptions?.temperature ?? 0.7, num_predict: options.maxTokens ?? this.config.defaultOptions?.maxTokens ?? 500, stop: options.stop ?? this.config.defaultOptions?.stop }, stream: false }) }); if (!response.ok) { const errorData = await response.text(); throw new Error(`Ollama API error: ${response.status} ${errorData}`); } const data = await response.json(); if (!data.response) { throw new Error('No response content from Ollama'); } return { content: data.response, finishReason: data.done ? 'stop' : undefined, usage: { promptTokens: data.prompt_eval_count || 0, completionTokens: data.eval_count || 0, totalTokens: (data.prompt_eval_count || 0) + (data.eval_count || 0) } }; } catch (error) { throw new Error(`Ollama API error: ${error.message}`); } } buildPrompt(messages) { let prompt = ''; for (const message of messages) { if (message.role === 'system') { prompt += `System: ${message.content}\n\n`; } else if (message.role === 'user') { prompt += `Human: ${message.content}\n\n`; } else if (message.role === 'assistant') { prompt += `Assistant: ${message.content}\n\n`; } } prompt += 'Assistant: '; return prompt; } getMaxTokens() { const model = this.config.model || 'llama2'; if (model.includes('llama2:70b')) return 4096; if (model.includes('llama2:13b')) return 4096; if (model.includes('codellama:34b')) return 8192; if (model.includes('codellama:13b')) return 4096; if (model.includes('mistral')) return 8192; if (model.includes('mixtral')) return 32768; return 2048; } async isAvailable() { return true; } isConfigured() { return true; } getSupportedModels() { return [ 'llama2', 'llama2:13b', 'llama2:70b', 'codellama', 'codellama:13b', 'codellama:34b', 'mistral', 'mixtral', 'neural-chat', 'starling-lm', 'phi', 'orca-mini' ]; } } exports.OllamaProvider = OllamaProvider; //# sourceMappingURL=OllamaProvider.js.map