agsamantha/node_modules/@langchain/community/dist/utils/ollama.cjs
2024-10-02 15:15:21 -05:00

63 lines
2.5 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.createOllamaChatStream = exports.createOllamaGenerateStream = void 0;
const stream_1 = require("@langchain/core/utils/stream");
async function* createOllamaStream(url, params, options) {
let formattedUrl = url;
if (formattedUrl.startsWith("http://localhost:")) {
// Node 18 has issues with resolving "localhost"
// See https://github.com/node-fetch/node-fetch/issues/1624
formattedUrl = formattedUrl.replace("http://localhost:", "http://127.0.0.1:");
}
const response = await fetch(formattedUrl, {
method: "POST",
body: JSON.stringify(params),
headers: {
"Content-Type": "application/json",
...options.headers,
},
signal: options.signal,
});
if (!response.ok) {
let error;
const responseText = await response.text();
try {
const json = JSON.parse(responseText);
error = new Error(`Ollama call failed with status code ${response.status}: ${json.error}`);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (e) {
error = new Error(`Ollama call failed with status code ${response.status}: ${responseText}`);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
error.response = response;
throw error;
}
if (!response.body) {
throw new Error("Could not begin Ollama stream. Please check the given URL and try again.");
}
const stream = stream_1.IterableReadableStream.fromReadableStream(response.body);
const decoder = new TextDecoder();
let extra = "";
for await (const chunk of stream) {
const decoded = extra + decoder.decode(chunk);
const lines = decoded.split("\n");
extra = lines.pop() || "";
for (const line of lines) {
try {
yield JSON.parse(line);
}
catch (e) {
console.warn(`Received a non-JSON parseable chunk: ${line}`);
}
}
}
}
async function* createOllamaGenerateStream(baseUrl, params, options) {
yield* createOllamaStream(`${baseUrl}/api/generate`, params, options);
}
exports.createOllamaGenerateStream = createOllamaGenerateStream;
async function* createOllamaChatStream(baseUrl, params, options) {
yield* createOllamaStream(`${baseUrl}/api/chat`, params, options);
}
exports.createOllamaChatStream = createOllamaChatStream;