From 5273a11636d24c6ecd2f0edefce8940b3626f577 Mon Sep 17 00:00:00 2001 From: Mohammed Al-Ajmi Date: Tue, 18 Aug 2026 06:08:00 +0300 Subject: [PATCH 1/5] fix: honour PROXY_PORT on both the bind and the dial (#223) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `PROXY_PORT` is documented in `--help` but was read nowhere, so the proxy port was the hardcoded field `cli-proxy.ts:56`. Any process already on :3000 โ€” Docker Desktop, a dev server โ€” broke every proxied provider with no way out. A port fix has two halves, and fixing one is invisible: cli-proxy.ts decides where the proxy LISTENS claudeAgentDirect.ts decides where the SDK DIALS (hardcoded localhost:3000) With only the first, `PROXY_PORT=3991` prints a confident `๐Ÿ”ง Proxy URL: http://localhost:3991` and then fails with `Connection error` โ€” the banner reports the bind, never the dial, so the log argues the fix worked. Measured on one identical command, everything else held constant: cli-proxy.ts only rc=1, no model output, "Connection error" both halves rc=0, model responded, no error The onnx client keeps `ONNX_PROXY_PORT` (default 3001) to match `cli-proxy.ts`'s own `parseInt(process.env.ONNX_PROXY_PORT || '3001')` โ€” collapsing all four onto PROXY_PORT would break the ONNX path. Refs #81, which reported this fix shipping in 2.0.1-alpha.5; both halves are absent from 2.1.2. --- agentic-flow/src/agents/claudeAgentDirect.ts | 8 ++++---- agentic-flow/src/cli-proxy.ts | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/agentic-flow/src/agents/claudeAgentDirect.ts b/agentic-flow/src/agents/claudeAgentDirect.ts index c6f67d241..b4d4a7220 100644 --- a/agentic-flow/src/agents/claudeAgentDirect.ts +++ b/agentic-flow/src/agents/claudeAgentDirect.ts @@ -34,28 +34,28 @@ function getModelForProvider(provider: string): { return { model: envModel || 'gemini-2.0-flash-exp', apiKey: process.env.GOOGLE_GEMINI_API_KEY || '', - baseURL: process.env.GEMINI_PROXY_URL || 'http://localhost:3000' + baseURL: process.env.GEMINI_PROXY_URL || `http://localhost:${process.env.PROXY_PORT || '3000'}` }; case 'requesty': return { model: envModel || 'deepseek/deepseek-chat', apiKey: process.env.REQUESTY_API_KEY || '', - baseURL: process.env.REQUESTY_PROXY_URL || 'http://localhost:3000' + baseURL: process.env.REQUESTY_PROXY_URL || `http://localhost:${process.env.PROXY_PORT || '3000'}` }; case 'openrouter': return { model: envModel || 'deepseek/deepseek-chat', apiKey: process.env.OPENROUTER_API_KEY || '', - baseURL: process.env.OPENROUTER_PROXY_URL || 'http://localhost:3000' + baseURL: process.env.OPENROUTER_PROXY_URL || `http://localhost:${process.env.PROXY_PORT || '3000'}` }; case 'onnx': return { model: 'onnx-local', apiKey: 'local', - baseURL: process.env.ONNX_PROXY_URL || 'http://localhost:3001' + baseURL: process.env.ONNX_PROXY_URL || `http://localhost:${process.env.ONNX_PROXY_PORT || '3001'}` }; case 'anthropic': diff --git a/agentic-flow/src/cli-proxy.ts b/agentic-flow/src/cli-proxy.ts index 5ed20cb56..8855314e9 100644 --- a/agentic-flow/src/cli-proxy.ts +++ b/agentic-flow/src/cli-proxy.ts @@ -53,7 +53,7 @@ const VERSION = packageJson.version; class AgenticFlowCLI { private proxyServer: any = null; - private proxyPort: number = 3000; + private proxyPort: number = parseInt(process.env.PROXY_PORT || '3000', 10); async start() { const options = parseArgs(); From a07574deadc28b5970f05a3b180d66c358421d56 Mon Sep 17 00:00:00 2001 From: Mohammed Al-Ajmi Date: Tue, 18 Aug 2026 06:10:06 +0300 Subject: [PATCH 2/5] feat: add a CLI path for --provider ollama (#224) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `--provider ollama` had no code path in the agent runner. It fell through every provider guard into the `ANTHROPIC_API_KEY is required` branch โ€” an error whose three suggested alternatives never mention ollama, so there was no way to tell the provider was unimplemented rather than misconfigured. The capability was half-present: router.ts constructs an OllamaProvider and router/providers/ollama.ts ships, but src/proxy/ has anthropic-to-{gemini,onnx, openrouter,requesty} and no anthropic-to-ollama, so the CLI had nothing to route to. This needs no new proxy. Ollama exposes an OpenAI-compatible /v1/chat/completions, which is what AnthropicToOpenRouterProxy already speaks, and that class already accepts an openrouterBaseUrl. So startOllamaProxy() reuses it against OLLAMA_HOST/v1 with a placeholder key โ€” Ollama ignores Authorization, and requiring a real key would defeat the point of a local provider. - shouldUseOllama(), matching the existing shouldUseX shape - an early return in shouldUseOpenRouter() so a stray OPENROUTER_API_KEY cannot capture an explicit ollama request via key-based auto-selection - isOllama in the API-key guard, so a keyless local provider is not rejected - ollama listed in --help and in the missing-key error - OLLAMA_HOST / OLLAMA_MODEL honoured, defaulting to http://localhost:11434 and qwen2.5-coder:7b Verified end to end against 2.1.2 with no API key set anywhere: 5/5 exact responses on qwen2.5-coder:7b, and the run is refused correctly when Ollama is down rather than silently falling back to a paid API. Refs #146, which reports the same provider gap in the config wizard. --- agentic-flow/src/cli-proxy.ts | 80 ++++++++++++++++++++++++++++++++++- 1 file changed, 78 insertions(+), 2 deletions(-) diff --git a/agentic-flow/src/cli-proxy.ts b/agentic-flow/src/cli-proxy.ts index 8855314e9..eee196e48 100644 --- a/agentic-flow/src/cli-proxy.ts +++ b/agentic-flow/src/cli-proxy.ts @@ -280,6 +280,7 @@ class AgenticFlowCLI { // Determine which provider to use const useONNX = this.shouldUseONNX(options); + const useOllama = this.shouldUseOllama(options); const useOpenRouter = this.shouldUseOpenRouter(options); const useGemini = this.shouldUseGemini(options); // Requesty temporarily disabled - keep proxy files for future use @@ -308,6 +309,9 @@ class AgenticFlowCLI { } else if (useRequesty) { console.log('๐Ÿš€ Initializing Requesty proxy...'); await this.startRequestyProxy(options.model); + } else if (useOllama) { + console.log('๐Ÿš€ Initializing Ollama local proxy...'); + await this.startOllamaProxy(options.model); } else if (useOpenRouter) { console.log('๐Ÿš€ Initializing OpenRouter proxy...'); await this.startOpenRouterProxy(options.model); @@ -349,6 +353,22 @@ class AgenticFlowCLI { return false; } + private shouldUseOllama(options: any): boolean { + // Use Ollama if: + // 1. Provider is explicitly set to ollama + // 2. PROVIDER env var is set to ollama + // 3. USE_OLLAMA env var is set + if (options.provider === 'ollama' || process.env.PROVIDER === 'ollama') { + return true; + } + + if (process.env.USE_OLLAMA === 'true') { + return true; + } + + return false; + } + private shouldUseGemini(options: any): boolean { // Use Gemini if: // 1. Provider is explicitly set to gemini @@ -395,6 +415,13 @@ class AgenticFlowCLI { } private shouldUseOpenRouter(options: any): boolean { + // Don't use OpenRouter if Ollama is explicitly requested โ€” otherwise a stray + // OPENROUTER_API_KEY in the environment captures the run via the key-based + // auto-selection below. + if (options.provider === 'ollama' || process.env.PROVIDER === 'ollama' || process.env.USE_OLLAMA === 'true') { + return false; + } + // Don't use OpenRouter if ONNX, Gemini, or Requesty is explicitly requested if (options.provider === 'onnx' || process.env.USE_ONNX === 'true' || process.env.PROVIDER === 'onnx') { return false; @@ -432,6 +459,48 @@ class AgenticFlowCLI { return false; } + private async startOllamaProxy(modelOverride?: string): Promise { + // Ollama exposes an OpenAI-compatible /v1/chat/completions, which is exactly + // what AnthropicToOpenRouterProxy speaks โ€” so this needs no new proxy class. + // The key below is a placeholder, not a credential: Ollama ignores + // Authorization entirely, and requiring a real one would defeat the point of + // a local provider. + const host = (process.env.OLLAMA_HOST || 'http://localhost:11434').replace(/\/+$/, ''); + + logger.info('Starting integrated Ollama proxy', { host }); + + const defaultModel = modelOverride || + process.env.OLLAMA_MODEL || + process.env.COMPLETION_MODEL || + 'qwen2.5-coder:7b'; + + const capabilities = detectModelCapabilities(defaultModel); + + const proxy = new AnthropicToOpenRouterProxy({ + openrouterApiKey: 'ollama-local-placeholder', + openrouterBaseUrl: `${host}/v1`, + defaultModel, + capabilities: capabilities + }); + + proxy.start(this.proxyPort); + this.proxyServer = proxy; + + process.env.ANTHROPIC_BASE_URL = `http://localhost:${this.proxyPort}`; + + if (!process.env.ANTHROPIC_API_KEY) { + process.env.ANTHROPIC_API_KEY = 'sk-ant-proxy-dummy-key'; + } + + console.log(`๐Ÿ”— Proxy Mode: Ollama (local, no API key)`); + console.log(`๐Ÿ”ง Proxy URL: http://localhost:${this.proxyPort}`); + console.log(`๐Ÿ”ง Ollama: ${host}/v1`); + console.log(`๐Ÿค– Model: ${defaultModel}\n`); + + // Wait for proxy to be ready + await new Promise(resolve => setTimeout(resolve, 1500)); + } + private async startOpenRouterProxy(modelOverride?: string): Promise { const openrouterKey = process.env.OPENROUTER_API_KEY; @@ -945,13 +1014,16 @@ PERFORMANCE: // Check for API key (unless using ONNX) const isOnnx = options.provider === 'onnx' || process.env.USE_ONNX === 'true' || process.env.PROVIDER === 'onnx'; - if (!isOnnx && !useOpenRouter && !useGemini && !useRequesty && !process.env.ANTHROPIC_API_KEY) { + const isOllama = options.provider === 'ollama' || process.env.USE_OLLAMA === 'true' || process.env.PROVIDER === 'ollama'; + + if (!isOnnx && !isOllama && !useOpenRouter && !useGemini && !useRequesty && !process.env.ANTHROPIC_API_KEY) { console.error('\nโŒ Error: ANTHROPIC_API_KEY is required\n'); console.error('Please set your API key:'); console.error(' export ANTHROPIC_API_KEY=sk-ant-xxxxx\n'); console.error('Or use alternative providers:'); console.error(' --provider openrouter (requires OPENROUTER_API_KEY)'); console.error(' --provider gemini (requires GOOGLE_GEMINI_API_KEY)'); + console.error(' --provider ollama (free local inference via Ollama, no key)'); console.error(' --provider onnx (free local inference)\n'); process.exit(1); } @@ -1014,6 +1086,10 @@ PERFORMANCE: const model = options.model || 'gemini-2.0-flash-exp'; console.log(`๐Ÿ”ง Provider: Google Gemini`); console.log(`๐Ÿ”ง Model: ${model}\n`); + } else if (isOllama) { + const model = options.model || process.env.OLLAMA_MODEL || process.env.COMPLETION_MODEL || 'qwen2.5-coder:7b'; + console.log(`๐Ÿ”ง Provider: Ollama (local, no API key)`); + console.log(`๐Ÿ”ง Model: ${model}\n`); } else if (options.provider === 'onnx' || process.env.USE_ONNX === 'true' || process.env.PROVIDER === 'onnx') { console.log(`๐Ÿ”ง Provider: ONNX Local (Phi-4-mini)`); console.log(`๐Ÿ’พ Free local inference - no API costs`); @@ -1216,7 +1292,7 @@ WORKERS COMMANDS: OPTIONS: --task, -t Task description for agent mode --model, -m Model to use (triggers OpenRouter if contains "/") - --provider, -p Provider to use (anthropic, openrouter, gemini, onnx) + --provider, -p Provider to use (anthropic, openrouter, gemini, onnx, ollama) --stream, -s Enable real-time streaming output --help, -h Show this help message From f0cc1ea777c11fa974d45fe8121039b88ac68b9a Mon Sep 17 00:00:00 2001 From: Mohammed Al-Ajmi Date: Tue, 18 Aug 2026 06:10:23 +0300 Subject: [PATCH 3/5] fix: pass openrouterBaseUrl in the standalone proxy (#225) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `agentic-flow proxy --provider openrouter` built AnthropicToOpenRouterProxy without openrouterBaseUrl, so the standalone proxy could only ever talk to https://openrouter.ai/api/v1. Three construction sites, one inconsistent: cli-proxy.ts startOpenRouterProxy passes it proxy/anthropic-to-openrouter.ts entry passes it cli-proxy.ts runStandaloneProxy did not The constructor already defaults to the public OpenRouter URL when the field is absent, so passing it through is non-breaking. This matters because `proxy` is the documented way to put an Anthropic-shaped endpoint in front of Claude Code or Cursor, and as written it could not target a self-hosted OpenAI-compatible backend (Ollama, vLLM, LM Studio, LiteLLM, an internal gateway) โ€” the main reason to run a local proxy. The workaround was to bypass the CLI and run the proxy module directly, since only its own entrypoint read the variable. Verified against 2.1.2: the startup banner now reports the configured base URL and requests reach it. --- agentic-flow/src/cli-proxy.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/agentic-flow/src/cli-proxy.ts b/agentic-flow/src/cli-proxy.ts index eee196e48..ea8ac8f34 100644 --- a/agentic-flow/src/cli-proxy.ts +++ b/agentic-flow/src/cli-proxy.ts @@ -778,6 +778,7 @@ Get your key at: https://openrouter.ai/keys const { AnthropicToOpenRouterProxy } = await import('./proxy/anthropic-to-openrouter.js'); const proxy = new AnthropicToOpenRouterProxy({ openrouterApiKey: apiKey, + openrouterBaseUrl: process.env.ANTHROPIC_PROXY_BASE_URL, defaultModel: finalModel }); From bb3f2f5ee139ce1b3f2e4f66edc84f6af44e188b Mon Sep 17 00:00:00 2001 From: Mohammed Al-Ajmi Date: Tue, 18 Aug 2026 06:10:46 +0300 Subject: [PATCH 4/5] fix: resolve ONNX model paths outside process.cwd() (#226) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Phi-4-mini download (~4.6GB) used a localPath hardcoded RELATIVE to process.cwd(), with no environment override, so it landed in whatever directory the command ran from. Measured: 915MB in about 60 seconds into a git repository root, untracked and unignored. Consequences: - the same model is re-downloaded once per working directory - a `git add -A` in that repo will stage several GB - no way to point it at a shared cache, and in particular not at ~/.agentic-flow/models, where `embeddings init` already puts its model โ€” the two subsystems disagreed about where models live Paths now resolve to AGENTIC_FLOW_MODEL_DIR, defaulting to ~/.agentic-flow/models, and are exported so the reader can resolve the same path the writer uses (see the following commit). --- agentic-flow/src/utils/model-downloader.ts | 25 ++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/agentic-flow/src/utils/model-downloader.ts b/agentic-flow/src/utils/model-downloader.ts index 406dd8eba..5a75ff738 100644 --- a/agentic-flow/src/utils/model-downloader.ts +++ b/agentic-flow/src/utils/model-downloader.ts @@ -9,6 +9,27 @@ import { dirname, join } from 'path'; import { pipeline } from 'stream/promises'; import { createHash } from 'crypto'; import { readFileSync } from 'fs'; +import { homedir } from 'os'; + +/** + * Where ONNX models live on disk. + * + * These paths were previously relative ('./models/...'), so they resolved + * against process.cwd() and a ~4.6GB download landed in whatever directory the + * command happened to run from โ€” re-downloaded once per working directory, and + * left untracked inside any repository it was invoked in. + * + * Exported so the reader (router/providers/onnx-local.ts) can resolve the same + * path the writer uses; the two previously disagreed (phi-4 vs phi-4-mini). + */ +export const MODEL_ROOT = process.env.AGENTIC_FLOW_MODEL_DIR + || join(homedir(), '.agentic-flow', 'models'); + +export const PHI4_MODEL_PATH = join( + MODEL_ROOT, 'phi-4-mini', 'cpu_and_mobile', 'cpu-int4-rtn-block-32-acc-level-4', 'model.onnx' +); + +export const PHI4_MODEL_DATA_PATH = `${PHI4_MODEL_PATH}.data`; export interface DownloadProgress { downloaded: number; @@ -34,13 +55,13 @@ export class ModelDownloader { private phi4Model: ModelInfo = { repo: 'microsoft/Phi-4-mini-instruct-onnx', filename: 'cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4/model.onnx', - localPath: './models/phi-4-mini/cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4/model.onnx' + localPath: PHI4_MODEL_PATH }; private phi4ModelData: ModelInfo = { repo: 'microsoft/Phi-4-mini-instruct-onnx', filename: 'cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4/model.onnx.data', - localPath: './models/phi-4-mini/cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4/model.onnx.data' + localPath: PHI4_MODEL_DATA_PATH }; /** From 2d2d24a64cf1d19bde91a87053e9159f3bdac0f1 Mon Sep 17 00:00:00 2001 From: Mohammed Al-Ajmi Date: Tue, 18 Aug 2026 06:12:31 +0300 Subject: [PATCH 5/5] fix: reader and writer must resolve the same ONNX model path (#227) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The downloader writes models/phi-4-mini/... while every consumer but one defaulted to models/phi-4/... โ€” no `-mini`. The two can never coincide, so a fully completed ~4.6GB download was not found by the code that needed it. The mismatched default is live on the ordinary CLI path, because no modelPath is supplied unless ONNX_MODEL_PATH is set: cli-proxy.ts new AnthropicToONNXProxy({ modelPath: process.env.ONNX_MODEL_PATH }) anthropic-to-onnx.ts forwards config.modelPath to ONNXLocalProvider onnx-local.ts falls back to ./models/phi-4/... <- never written All six sites now resolve from the single exported PHI4_MODEL_PATH, which also takes them out of process.cwd() (previous commit): router/providers/onnx-local.ts was phi-4 router/providers/onnx-phi4.ts was phi-4 router/router.ts was phi-4 router/test-onnx-local.ts was phi-4 router/test-onnx-benchmark.ts was phi-4 router/providers/onnx-local-optimized.ts was phi-4-mini, but still cwd-relative onnx-local.ts and onnx-local-optimized.ts already imported from model-downloader.js, so this adds no new dependency edge for them. Together with #226 this is what makes `--provider onnx` โ€” the option the missing-API-key error steers users toward โ€” actually usable. --- agentic-flow/src/router/providers/onnx-local-optimized.ts | 4 ++-- agentic-flow/src/router/providers/onnx-local.ts | 4 ++-- agentic-flow/src/router/providers/onnx-phi4.ts | 3 ++- agentic-flow/src/router/router.ts | 3 ++- agentic-flow/src/router/test-onnx-benchmark.ts | 3 ++- agentic-flow/src/router/test-onnx-local.ts | 3 ++- 6 files changed, 12 insertions(+), 8 deletions(-) diff --git a/agentic-flow/src/router/providers/onnx-local-optimized.ts b/agentic-flow/src/router/providers/onnx-local-optimized.ts index 6cf92adc5..6f3ea8e14 100644 --- a/agentic-flow/src/router/providers/onnx-local-optimized.ts +++ b/agentic-flow/src/router/providers/onnx-local-optimized.ts @@ -21,7 +21,7 @@ try { } import { get_encoding } from 'tiktoken'; -import { ensurePhi4Model, ModelDownloader } from '../../utils/model-downloader.js'; +import { ensurePhi4Model, ModelDownloader, PHI4_MODEL_PATH } from '../../utils/model-downloader.js'; import type { ChatParams, ChatResponse, @@ -50,7 +50,7 @@ export class OptimizedONNXProvider extends ONNXLocalProvider { super(config); this.optimizedConfig = { - modelPath: config.modelPath || './models/phi-4-mini/cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4/model.onnx', + modelPath: config.modelPath || PHI4_MODEL_PATH, executionProviders: config.executionProviders || ['cpu'], maxTokens: config.maxTokens || 200, temperature: config.temperature || 0.3, // Lower for code (more deterministic) diff --git a/agentic-flow/src/router/providers/onnx-local.ts b/agentic-flow/src/router/providers/onnx-local.ts index b1499715a..0bcec4b02 100644 --- a/agentic-flow/src/router/providers/onnx-local.ts +++ b/agentic-flow/src/router/providers/onnx-local.ts @@ -19,7 +19,7 @@ try { import * as fs from 'fs'; import * as path from 'path'; import { get_encoding } from 'tiktoken'; -import { ensurePhi4Model, ModelDownloader } from '../../utils/model-downloader.js'; +import { ensurePhi4Model, ModelDownloader, PHI4_MODEL_PATH } from '../../utils/model-downloader.js'; import type { LLMProvider, ChatParams, @@ -51,7 +51,7 @@ export class ONNXLocalProvider implements LLMProvider { constructor(config: ONNXLocalConfig = {}) { this.config = { - modelPath: config.modelPath || './models/phi-4/cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4/model.onnx', + modelPath: config.modelPath || PHI4_MODEL_PATH, executionProviders: config.executionProviders || ['cpu'], maxTokens: config.maxTokens || 100, temperature: config.temperature || 0.7 diff --git a/agentic-flow/src/router/providers/onnx-phi4.ts b/agentic-flow/src/router/providers/onnx-phi4.ts index 916bf87ed..d9ad2528d 100644 --- a/agentic-flow/src/router/providers/onnx-phi4.ts +++ b/agentic-flow/src/router/providers/onnx-phi4.ts @@ -6,6 +6,7 @@ */ import { HfInference } from '@huggingface/inference'; +import { PHI4_MODEL_PATH } from '../../utils/model-downloader.js'; import type { LLMProvider, ChatParams, @@ -33,7 +34,7 @@ export class ONNXPhi4Provider implements LLMProvider { private config: Required; private hf: HfInference; - private modelPath = './models/phi-4/cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4/model.onnx'; + private modelPath = PHI4_MODEL_PATH; constructor(config: ONNXPhi4Config = {}) { this.config = { diff --git a/agentic-flow/src/router/router.ts b/agentic-flow/src/router/router.ts index 8991b3bcd..72ddc2147 100644 --- a/agentic-flow/src/router/router.ts +++ b/agentic-flow/src/router/router.ts @@ -19,6 +19,7 @@ import { AnthropicProvider } from './providers/anthropic.js'; import { ONNXLocalProvider } from './providers/onnx-local.js'; import { GeminiProvider } from './providers/gemini.js'; import { OllamaProvider } from './providers/ollama.js'; +import { PHI4_MODEL_PATH } from '../utils/model-downloader.js'; export class ModelRouter { private config: RouterConfig; @@ -166,7 +167,7 @@ export class ModelRouter { const provider = new ONNXLocalProvider({ modelPath: this.config.providers.onnx.modelPath || - './models/phi-4/cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4/model.onnx', + PHI4_MODEL_PATH, executionProviders: this.config.providers.onnx.executionProviders || ['cpu'], maxTokens: this.config.providers.onnx.maxTokens || 100, temperature: this.config.providers.onnx.temperature || 0.7, diff --git a/agentic-flow/src/router/test-onnx-benchmark.ts b/agentic-flow/src/router/test-onnx-benchmark.ts index 65c02ec67..f71b95111 100644 --- a/agentic-flow/src/router/test-onnx-benchmark.ts +++ b/agentic-flow/src/router/test-onnx-benchmark.ts @@ -5,6 +5,7 @@ */ import { ONNXLocalProvider } from './providers/onnx-local.js'; +import { PHI4_MODEL_PATH } from '../utils/model-downloader.js'; interface BenchmarkResult { test: string; @@ -19,7 +20,7 @@ async function runBenchmark() { console.log('================================================\n'); const provider = new ONNXLocalProvider({ - modelPath: './models/phi-4/cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4/model.onnx', + modelPath: PHI4_MODEL_PATH, executionProviders: ['cpu'], maxTokens: 50, temperature: 0.7 diff --git a/agentic-flow/src/router/test-onnx-local.ts b/agentic-flow/src/router/test-onnx-local.ts index 731bfd84e..095041fe9 100644 --- a/agentic-flow/src/router/test-onnx-local.ts +++ b/agentic-flow/src/router/test-onnx-local.ts @@ -4,13 +4,14 @@ */ import { ONNXLocalProvider } from './providers/onnx-local.js'; +import { PHI4_MODEL_PATH } from '../utils/model-downloader.js'; async function testONNXLocal() { console.log('๐Ÿงช Testing ONNX Local Inference (Phi-4 CPU)\n'); try { const provider = new ONNXLocalProvider({ - modelPath: './models/phi-4/cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4/model.onnx', + modelPath: PHI4_MODEL_PATH, executionProviders: ['cpu'], maxTokens: 50 });