Files
ci/src/backends/ollama-base.ts
T
Jon Chery a8b50f5109
CI / build-and-test (push) Has been cancelled
Publish to npm / publish (push) Has been cancelled
feat(ci): v0.9.0 — Distribution & Expansion milestone complete
---ci---
project: ci
phase: 6
milestone: v0.9
status: complete
artifacts:
  tags: [v0.9.0]
decisions:
  - id: D-047
    decision: v0.9 theme = Distribution & Expansion
    rationale: npm publish + OpenAI/Anthropic backends + agent flesh + parallel execution
    confidence: 0.92
  - id: D-049
    decision: Feature milestone — patch tags v0.8.1-v0.8.6 then v0.9.0
    rationale: OpenAI backend, agent flesh, npm publish all feat
    confidence: 0.95
  - id: D-059
    decision: Rename OllamaBaseBackend to LLMBaseBackend + thin OllamaBaseBackend subclass
    rationale: 15 of 17 methods backend-agnostic
    confidence: 0.92
  - id: D-060
    decision: OpenAI/Anthropic backends use native fetch() not SDK packages
    rationale: No dependency bloat; fetch native in Node 18+
    confidence: 0.85
  - id: D-066
    decision: Concurrency limiter internal (no p-limit dependency)
    rationale: 15 lines; avoids dependency for trivial feature
    confidence: 0.90
  - id: D-067
    decision: Promise.allSettled for review agents at orchestrator lines 373-400
    rationale: Current sequential loop replaced with parallel execution
    confidence: 0.88
requirements:
  covered: [PUBLISH-01, PUBLISH-02, PUBLISH-03, PUBLISH-04, OPENAI-01, OPENAI-02, OPENAI-03, OPENAI-04, OPENAI-05, FLESH-01, FLESH-02, FLESH-03, FLESH-04, FLESH-05, ANTHROPIC-01, ANTHROPIC-02, FLESH-06, FLESH-07, NPM-01, NPM-02, PARALLEL-01, PARALLEL-02, PARALLEL-03, INTEG-01, INTEG-02, INTEG-03, INTEG-04, INTEG-05]
---/ci---

6 phases, 28 tasks, 4077 net lines added, 57 test suites, 527 tests, zero stub agents
2026-05-30 02:19:44 +00:00

38 lines
1.3 KiB
TypeScript

import { LLMBaseBackend, ChatMessage, ChatCompletionResponse } from "./llm-base.js";
import { LLMBackendConfig } from "./types.js";
import { ModelProfile } from "../types/config.js";
import { ToolRegistry } from "./tool-registry.js";
export abstract class OllamaBaseBackend extends LLMBaseBackend {
constructor(config: LLMBackendConfig | undefined) {
super(config || { base_url: "http://localhost:11434", model_profile: "balanced" });
}
protected modelProfileToModel(profile: ModelProfile, availableModels: string[]): string {
if (availableModels.length === 0) return "llama3.1";
const sorted = [...availableModels].sort((a, b) => a.length - b.length);
switch (profile) {
case "speed":
return sorted[0];
case "quality":
return sorted[sorted.length - 1];
case "balanced":
default:
return sorted[Math.floor(sorted.length / 2)] || sorted[0];
}
}
protected async fetchAvailableModels(): Promise<string[]> {
try {
const response = await fetch(`${this.config.base_url}/api/tags`);
if (!response.ok) return [];
const data = await response.json() as { models?: Array<{ name: string }> };
return (data.models || []).map((m) => m.name);
} catch {
return [];
}
}
}
export { ChatMessage as OllamaMessage, ChatCompletionResponse as OllamaChatResponse };