From daec521854b66fdd382f728f49bb0cb4c4048d6c Mon Sep 17 00:00:00 2001 From: Bruce MacDonald Date: Wed, 31 Jul 2024 17:40:16 -0700 Subject: [PATCH] enable ollama-js use in an environment without whatwg - use dynamic import to allow setting fetch without whatwg-fetch being present --- src/browser.ts | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/browser.ts b/src/browser.ts index 40ba369..c66d530 100644 --- a/src/browser.ts +++ b/src/browser.ts @@ -1,6 +1,5 @@ import * as utils from './utils.js' import { AbortableAsyncIterator, parseJSON, post } from './utils.js' -import 'whatwg-fetch' import type { ChatRequest, @@ -39,9 +38,24 @@ export class Ollama { this.config.host = utils.formatHost(config?.host ?? 'http://127.0.0.1:11434') } - this.fetch = fetch - if (config?.fetch != null) { - this.fetch = config.fetch + this.fetch = config?.fetch || this.getFetch(); + } + + private getFetch(): Fetch { + if (typeof window !== 'undefined' && window.fetch) { + return window.fetch.bind(window); + } + + if (typeof global !== 'undefined' && global.fetch) { + return global.fetch; + } + + try { + // Use dynamic import for Node.js environments + return require('node-fetch'); + } catch (error) { + console.error('Failed to import node-fetch:', error); + throw new Error('Fetch is not available. Please provide a fetch implementation in the config.'); } }