genkitx-ollama
Version:
Genkit AI framework plugin for Ollama APIs.
94 lines • 3 kB
JavaScript
;
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