UNPKG

@nanocollective/nanocoder

Version:

A local-first CLI coding agent that brings the power of agentic coding tools like Claude Code and Gemini CLI to local models or controlled APIs like OpenRouter

52 lines 1.74 kB
/** * Detects if an error indicates the model doesn't support tool calling * * This is used to automatically retry requests without tools when a model * rejects tool definitions (common with some local models like deepseek-r1 via Ollama) */ export function isToolSupportError(error) { if (!(error instanceof Error)) { return false; } const message = error.message.toLowerCase(); // Pattern 1: 400 Bad Request with tool-related messages if (message.includes('400') && message.includes('bad request')) { const toolPatterns = [ /tool/i, /function/i, /invalid.*parameter/i, /unexpected.*field/i, /unrecognized/i, ]; for (const pattern of toolPatterns) { if (pattern.test(message)) { return true; } } } // Pattern 2: Direct mentions of tool/function not supported const directPatterns = [ /tool.*not.*support/i, /function.*not.*support/i, /tool.*unsupported/i, /function.*unsupported/i, /invalid.*tool/i, /invalid.*function/i, /tool.*parameter.*invalid/i, /function.*parameter.*invalid/i, ]; for (const pattern of directPatterns) { if (pattern.test(message)) { return true; } } // Pattern 3: Ollama-specific error messages // Ollama may return errors like: "invalid character 't' looking for beginning of value" // when it encounters the 'tools' field in JSON if (message.includes('invalid character') && message.includes('after top-level value')) { return true; } return false; } //# sourceMappingURL=tool-error-detector.js.map