UNPKG

genkitx-ollama

Version:

Genkit AI framework plugin for Ollama APIs.

94 lines 3 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var embeddings_exports = {}; __export(embeddings_exports, { defineOllamaEmbedder: () => defineOllamaEmbedder }); module.exports = __toCommonJS(embeddings_exports); async function toOllamaEmbedRequest(modelName, dimensions, documents, serverAddress, requestHeaders) { const requestPayload = { model: modelName, input: documents.map((doc) => doc.text) }; const extraHeaders = requestHeaders ? typeof requestHeaders === "function" ? await requestHeaders({ serverAddress, model: { name: modelName, dimensions }, embedRequest: requestPayload }) : requestHeaders : {}; const headers = { "Content-Type": "application/json", ...extraHeaders // Add any dynamic headers }; return { url: `${serverAddress}/api/embed`, requestPayload, headers }; } function defineOllamaEmbedder(ai, { name, modelName, dimensions, options }) { return ai.defineEmbedder( { name: `ollama/${name}`, info: { label: "Ollama Embedding - " + name, dimensions, supports: { // TODO: do any ollama models support other modalities? input: ["text"] } } }, async (input, config) => { const serverAddress = config?.serverAddress || options.serverAddress; const { url, requestPayload, headers } = await toOllamaEmbedRequest( modelName, dimensions, input, serverAddress, options.requestHeaders ); const response = await fetch(url, { method: "POST", headers, body: JSON.stringify(requestPayload) }); if (!response.ok) { const errMsg = (await response.json()).error?.message || ""; throw new Error( `Error fetching embedding from Ollama: ${response.statusText}. ${errMsg}` ); } const payload = await response.json(); const embeddings = []; for (const embedding of payload.embeddings) { embeddings.push({ embedding }); } return { embeddings }; } ); } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { defineOllamaEmbedder }); //# sourceMappingURL=embeddings.js.map