# @memberjunction/ai-ollama
MemberJunction AI provider for Ollama, enabling integration with locally-hosted open-source models. This package provides both LLM and embedding capabilities through Ollama's local inference server.
## Architecture
```mermaid
graph TD
A["OllamaLLM
(Provider)"] -->|extends| B["BaseLLM
(@memberjunction/ai)"]
C["OllamaEmbeddings
(Provider)"] -->|extends| D["BaseEmbeddings
(@memberjunction/ai)"]
A -->|wraps| E["Ollama Client
(ollama SDK)"]
C -->|wraps| E
E -->|connects to| F["Ollama Server
(localhost:11434)"]
F -->|runs| G["Local Models
(Llama, Mistral, etc.)"]
B -->|registered via| H["@RegisterClass"]
D -->|registered via| H
style A fill:#7c5295,stroke:#563a6b,color:#fff
style C fill:#7c5295,stroke:#563a6b,color:#fff
style B fill:#2d6a9f,stroke:#1a4971,color:#fff
style D fill:#2d6a9f,stroke:#1a4971,color:#fff
style E fill:#2d8659,stroke:#1a5c3a,color:#fff
style F fill:#2d8659,stroke:#1a5c3a,color:#fff
style G fill:#b8762f,stroke:#8a5722,color:#fff
style H fill:#b8762f,stroke:#8a5722,color:#fff
```
## Features
- **Local Model Hosting**: Run AI models locally via Ollama without cloud dependencies
- **Chat Completions**: Full conversational AI with any Ollama-hosted model
- **Embeddings**: Local text embeddings through Ollama's embedding API
- **Streaming**: Real-time response streaming
- **Multimodal Support**: Image input support for vision-capable models
- **Privacy**: All data stays on your local infrastructure
- **No API Key Required**: Connects to local Ollama server
- **Configurable Endpoint**: Support for custom host configuration
## Installation
```bash
npm install @memberjunction/ai-ollama
```
## Usage
### Chat Completion
```typescript
import { OllamaLLM } from '@memberjunction/ai-ollama';
const llm = new OllamaLLM('not-used'); // API key not needed for local
const result = await llm.ChatCompletion({
model: 'llama3.1',
messages: [
{ role: 'system', content: 'You are a helpful assistant.' },
{ role: 'user', content: 'Explain how Ollama works.' }
],
temperature: 0.7
});
if (result.success) {
console.log(result.data.choices[0].message.content);
}
```
### Streaming
```typescript
const result = await llm.ChatCompletion({
model: 'llama3.1',
messages: [{ role: 'user', content: 'Write a short story.' }],
streaming: true,
streamingCallbacks: {
OnContent: (content) => process.stdout.write(content),
OnComplete: () => console.log('\nDone!')
}
});
```
### Embeddings
```typescript
import { OllamaEmbeddings } from '@memberjunction/ai-ollama';
const embedder = new OllamaEmbeddings('not-used');
const result = await embedder.EmbedText({
text: 'Sample text for embedding',
model: 'nomic-embed-text'
});
console.log(`Dimensions: ${result.vector.length}`);
```
## Prerequisites
1. Install [Ollama](https://ollama.ai/)
2. Pull a model: `ollama pull llama3.1`
3. Ollama server starts automatically on port 11434
## Configuration
The default endpoint is `http://localhost:11434`. Configure via `SetAdditionalSettings` for custom hosts.
## Supported Features
| Feature | Supported | Notes |
|---------|-----------|-------|
| stopSequences | Yes | Custom stop sequences |
| assistantPrefill | Yes | Pre-seed the assistant's response ([guide](../../Prompts/PREFILL_AND_STOP_SEQUENCES.md)) |
| streaming | Yes | Real-time streaming |
## Class Registration
- `OllamaLLM` -- Registered via `@RegisterClass(BaseLLM, 'OllamaLLM')`
- `OllamaEmbeddings` -- Registered via `@RegisterClass(BaseEmbeddings, 'OllamaEmbeddings')`
## Dependencies
- `@memberjunction/ai` - Core AI abstractions
- `@memberjunction/global` - Class registration
- `ollama` - Official Ollama SDK