contextual-agent-sdk
Version:
SDK for building AI agents with seamless voice-text context switching
117 lines • 3.86 kB
JavaScript
;
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