Ollama JavaScript library https://ollama.com
Find a file
2026-09-28 17:57:42 -07:00
.github/workflows Update publish.yaml 2025-10-30 13:02:49 -07:00
examples feat: add System One API support (#300) 2026-09-28 17:57:42 -07:00
src feat: add System One API support (#300) 2026-09-28 17:57:42 -07:00
test feat: add System One API support (#300) 2026-09-28 17:57:42 -07:00
.eslintignore Add basic project files. 2023-09-13 14:37:29 +12:00
.eslintrc.cjs refactor: replace jest with vitest (#173) 2025-01-02 15:09:37 -08:00
.gitignore add jsDocs (#88) 2024-05-10 14:59:45 -07:00
.npmignore remove duplicate line in .npmignore (#254) 2025-10-22 21:43:30 -07:00
.prettierrc.json add prettier config 2024-01-21 17:27:48 -05:00
LICENSE Change license to MIT. 2023-11-20 09:02:41 +13:00
package-lock.json Revert "fix: regenerate package-lock.json with complete @swc/core platform entries (#257)" 2025-10-30 13:02:08 -07:00
package.json ci: pin older version of vitest for node 16 compatibility (#200) 2025-01-28 10:52:43 -08:00
README.md feat: add System One API support (#300) 2026-09-28 17:57:42 -07:00
tsconfig.json fix: errors in browser.ts (#58) 2024-03-14 17:47:44 -04:00

Ollama JavaScript Library

The Ollama JavaScript library provides the easiest way to integrate your JavaScript project with Ollama.

Getting Started

npm i ollama

Usage

import ollama from 'ollama'

const response = await ollama.chat({
  model: 'llama3.1',
  messages: [{ role: 'user', content: 'Why is the sky blue?' }],
})
console.log(response.message.content)

Browser Usage

To use the library without node, import the browser module.

import ollama from 'ollama/browser'

Streaming responses

Response streaming can be enabled by setting stream: true, modifying function calls to return an AsyncGenerator where each part is an object in the stream.

import ollama from 'ollama'

const message = { role: 'user', content: 'Why is the sky blue?' }
const response = await ollama.chat({
  model: 'llama3.1',
  messages: [message],
  stream: true,
})
for await (const part of response) {
  process.stdout.write(part.message.content)
}

Cloud Models

Run larger models by offloading to Ollama’s cloud while keeping your local workflow.

You can see models currently available on Ollama's cloud here.

Run via local Ollama

  1. Sign in (one-time):
ollama signin
  1. Pull a cloud model:
ollama pull gpt-oss:120b-cloud
  1. Use as usual (offloads automatically):
import { Ollama } from 'ollama'

const ollama = new Ollama()
const response = await ollama.chat({
  model: 'gpt-oss:120b-cloud',
  messages: [{ role: 'user', content: 'Explain quantum computing' }],
  stream: true,
})
for await (const part of response) {
  process.stdout.write(part.message.content)
}

Cloud API (ollama.com)

Access cloud models directly by pointing the client at https://ollama.com.

  1. Create an API key, then set the OLLAMA_API_KEY environment variable:
export OLLAMA_API_KEY=your_api_key
  1. Generate a response via the cloud API:
import { Ollama } from 'ollama'

const ollama = new Ollama({
  host: 'https://ollama.com',
  headers: { Authorization: 'Bearer ' + process.env.OLLAMA_API_KEY },
})

const response = await ollama.chat({
  model: 'gpt-oss:120b',
  messages: [{ role: 'user', content: 'Explain quantum computing' }],
  stream: true,
})

for await (const part of response) {
  process.stdout.write(part.message.content)
}

API

The Ollama JavaScript library's API is designed around the Ollama REST API

chat

ollama.chat(request)
  • request <Object>: The request object containing chat parameters.

    • model <string> The name of the model to use for the chat.
    • messages <Message[]>: Array of message objects representing the chat history.
      • role <string>: The role of the message sender ('user', 'system', or 'assistant').
      • content <string>: The content of the message.
      • images <Uint8Array[] | string[]>: (Optional) Images to be included in the message, either as Uint8Array or base64 encoded strings.
      • tool_name <string>: (Optional) Add the name of the tool that was executed to inform the model of the result
    • format <string>: (Optional) Set the expected format of the response (json).
    • stream <boolean>: (Optional) When true an AsyncGenerator is returned.
    • think <boolean | "high" | "medium" | "low">: (Optional) Enable model thinking. Use true/false or specify a level. Requires model support.
    • logprobs <boolean>: (Optional) Return log probabilities for tokens. Requires model support.
    • top_logprobs <number>: (Optional) Number of top log probabilities to return per token when logprobs is enabled.
    • keep_alive <string | number>: (Optional) How long to keep the model loaded. A number (seconds) or a string with a duration unit suffix ("300ms", "1.5h", "2h45m", etc.)
    • tools <Tool[]>: (Optional) A list of tool calls the model may make.
    • options <Options>: (Optional) Options to configure the runtime.
  • Returns: <ChatResponse>

generate

ollama.generate(request)
  • request <Object>: The request object containing generate parameters.
    • model <string> The name of the model to use for the chat.
    • prompt <string>: The prompt to send to the model.
    • suffix <string>: (Optional) Suffix is the text that comes after the inserted text.
    • system <string>: (Optional) Override the model system prompt.
    • template <string>: (Optional) Override the model template.
    • raw <boolean>: (Optional) Bypass the prompt template and pass the prompt directly to the model.
    • images <Uint8Array[] | string[]>: (Optional) Images to be included, either as Uint8Array or base64 encoded strings.
    • format <string>: (Optional) Set the expected format of the response (json).
    • stream <boolean>: (Optional) When true an AsyncGenerator is returned.
    • think <boolean | "high" | "medium" | "low">: (Optional) Enable model thinking. Use true/false or specify a level. Requires model support.
    • logprobs <boolean>: (Optional) Return log probabilities for tokens. Requires model support.
    • top_logprobs <number>: (Optional) Number of top log probabilities to return per token when logprobs is enabled.
    • keep_alive <string | number>: (Optional) How long to keep the model loaded. A number (seconds) or a string with a duration unit suffix ("300ms", "1.5h", "2h45m", etc.)
    • width <number>: (Optional, Experimental) Width of the generated image in pixels. For image generation models only.
    • height <number>: (Optional, Experimental) Height of the generated image in pixels. For image generation models only.
    • steps <number>: (Optional, Experimental) Number of diffusion steps. For image generation models only.
    • options <Options>: (Optional) Options to configure the runtime.
  • Returns: <GenerateResponse>

pull

ollama.pull(request)
  • request <Object>: The request object containing pull parameters.
    • model <string> The name of the model to pull.
    • insecure <boolean>: (Optional) Pull from servers whose identity cannot be verified.
    • stream <boolean>: (Optional) When true an AsyncGenerator is returned.
  • Returns: <ProgressResponse>

push

ollama.push(request)
  • request <Object>: The request object containing push parameters.
    • model <string> The name of the model to push.
    • insecure <boolean>: (Optional) Push to servers whose identity cannot be verified.
    • stream <boolean>: (Optional) When true an AsyncGenerator is returned.
  • Returns: <ProgressResponse>

create

ollama.create(request)
  • request <Object>: The request object containing create parameters.
    • model <string> The name of the model to create.
    • from <string>: The base model to derive from.
    • stream <boolean>: (Optional) When true an AsyncGenerator is returned.
    • quantize <string>: Quanization precision level (q8_0, q4_K_M, etc.).
    • template <string>: (Optional) The prompt template to use with the model.
    • license <string|string[]>: (Optional) The license(s) associated with the model.
    • system <string>: (Optional) The system prompt for the model.
    • parameters <Record<string, unknown>>: (Optional) Additional model parameters as key-value pairs.
    • messages <Message[]>: (Optional) Initial chat messages for the model.
    • adapters <Record<string, string>>: (Optional) A key-value map of LoRA adapter configurations.
  • Returns: <ProgressResponse>

Note: The files parameter is not currently supported in ollama-js.

delete

ollama.delete(request)
  • request <Object>: The request object containing delete parameters.
    • model <string> The name of the model to delete.
  • Returns: <StatusResponse>

copy

ollama.copy(request)
  • request <Object>: The request object containing copy parameters.
    • source <string> The name of the model to copy from.
    • destination <string> The name of the model to copy to.
  • Returns: <StatusResponse>

list

ollama.list()
  • Returns: <ListResponse>

show

ollama.show(request)
  • request <Object>: The request object containing show parameters.
    • model <string> The name of the model to show.
    • system <string>: (Optional) Override the model system prompt returned.
    • template <string>: (Optional) Override the model template returned.
    • options <Options>: (Optional) Options to configure the runtime.
  • Returns: <ShowResponse>

embed

ollama.embed(request)
  • request <Object>: The request object containing embedding parameters.
    • model <string> The name of the model used to generate the embeddings.
    • input <string> | <string[]>: The input used to generate the embeddings.
    • truncate <boolean>: (Optional) Truncate the input to fit the maximum context length supported by the model.
    • keep_alive <string | number>: (Optional) How long to keep the model loaded. A number (seconds) or a string with a duration unit suffix ("300ms", "1.5h", "2h45m", etc.)
    • options <Options>: (Optional) Options to configure the runtime.
  • Returns: <EmbedResponse>
ollama.webSearch(request)
  • request <Object>: The search request parameters.
    • query <string>: The search query string.
    • max_results <number>: (Optional) Maximum results to return (default 5, max 10).
  • Returns: <SearchResponse>

web fetch

ollama.webFetch(request)
  • request <Object>: The fetch request parameters.
    • url <string>: The URL to fetch.
  • Returns: <FetchResponse>

ps

ollama.ps()
  • Returns: <ListResponse>

version

ollama.version()
  • Returns: <VersionResponse>

abort

ollama.abort()

This method will abort all streamed generations currently running with the client instance. If there is a need to manage streams with timeouts, it is recommended to have one Ollama client per stream.

All asynchronous threads listening to streams (typically the for await (const part of response)) will throw an AbortError exception. See examples/abort/abort-all-requests.ts for an example.

systemone

import ollama from 'ollama'

const response = await ollama.systemone({
  model: 'nimble',
  state: 'Our checkout has returned 500 errors since 9am.',
  questions: {
    team: {
      type: 'choice',
      instructions: 'Which team should handle this ticket?',
      criteria: { billing: 'Payments and refunds', technical: 'Software errors' },
    },
  },
})
console.log(response.answers.team)

System One uses POST /v1/systemone and requires Ollama v0.35.0 or later with a compatible local model such as nimble. It returns one JSON response; streaming and cloud models are not supported.

state and question instructions accept text, JSON objects, or arrays. Questions are evaluated in their supplied order:

  • choice: 2–26 option keys mapped to descriptions; null uses the key as its description.
  • noul: probability of true, with optional {"false": "No", "true": "Yes"} descriptions.
  • score: 2–26 descriptions ordered lowest to highest; returns a potentially fractional, zero-based score.

Responses contain model, answers, and usage.input_tokens / usage.output_tokens. Confidence measures probability concentration, not calibrated correctness. Token usage comes from the server; output tokens are not necessarily zero. Optional keep_alive accepts seconds or a duration string. Requests use the client's existing host, headers, and HTTP error handling. The server validates its body and model context limits without truncating input.

Available on the default client and new Ollama() from both ollama and ollama/browser. Both entry points export SystemOneRequest, SystemOneResponse, and the question/answer types. Browser requests follow the server's normal CORS rules. See the combined question example.

Custom client

A custom client can be created with the following fields:

  • host <string>: (Optional) The Ollama host address. Default: "http://127.0.0.1:11434".
  • fetch <Object>: (Optional) The fetch library used to make requests to the Ollama host.
  • headers <Object>: (Optional) Custom headers to include with every request.
import { Ollama } from 'ollama'

const ollama = new Ollama({ host: 'http://127.0.0.1:11434' })
const response = await ollama.chat({
  model: 'llama3.1',
  messages: [{ role: 'user', content: 'Why is the sky blue?' }],
})

Custom Headers

You can set custom headers that will be included with every request:

import { Ollama } from 'ollama'

const ollama = new Ollama({
  host: 'http://127.0.0.1:11434',
  headers: {
    Authorization: 'Bearer <api key>',
    'X-Custom-Header': 'custom-value',
    'User-Agent': 'MyApp/1.0',
  },
})

Building

To build the project files run:

npm run build