/** * Hermes Adapter (NousResearch Hermes) * * Integrates NousResearch Hermes models (Hermes-3, Hermes-2, etc.) with the * SwarmOrchestrator. Hermes runs via Ollama, llama.cpp, Together AI, Fireworks, * or any OpenAI-compatible endpoint — BYOC, no hard dependency. * * Usage — Ollama (local): * const adapter = new HermesAdapter(); * adapter.registerAgent('assistant', { * model: 'hermes3', * baseUrl: 'http://localhost:11434/v1', * systemPrompt: 'You are a helpful assistant.', * }); * * Usage — Together AI / Fireworks (hosted): * adapter.registerAgent('reasoner', { * model: 'NousResearch/Hermes-3-Llama-3.1-70B', * baseUrl: 'https://api.together.xyz/v1', * apiKey: process.env.TOGETHER_API_KEY, * }); * * Usage — bring-your-own OpenAI-compatible client: * adapter.registerAgent('coder', { * model: 'hermes3:8b', * client: openaiInstance.chat.completions, * }); * * @module HermesAdapter * @version 1.0.0 */ import { BaseAdapter } from './base-adapter'; import type { AdapterConfig, AdapterCapabilities, AgentPayload, AgentContext, AgentResult } from '../types/agent-adapter'; /** * Minimal interface for an OpenAI-compatible chat completions client. * Pass any SDK instance that implements this — no hard dependency on openai. */ export interface HermesChatClient { create(params: { model: string; messages: Array<{ role: string; content: string; }>; max_tokens?: number; temperature?: number; stop?: string[]; }): Promise<{ choices: Array<{ message?: { content?: string | null; }; text?: string; }>; usage?: { prompt_tokens?: number; completion_tokens?: number; total_tokens?: number; }; }>; } /** Configuration for a registered Hermes agent */ export interface HermesAgentConfig { /** * Model name — Ollama tag or hosted model ID. * Examples: 'hermes3', 'hermes3:8b', 'NousResearch/Hermes-3-Llama-3.1-70B' * Default: 'hermes3' */ model?: string; /** * Base URL for the OpenAI-compatible endpoint. * Default: 'http://localhost:11434/v1' (Ollama local) */ baseUrl?: string; /** * API key — required for hosted providers (Together AI, Fireworks, etc.). * Falls back to HERMES_API_KEY env var. Ollama local needs no key. */ apiKey?: string; /** System-level prompt prepended to every request */ systemPrompt?: string; /** Maximum tokens in the completion (default: 2048) */ maxTokens?: number; /** Sampling temperature, 0–2 (default: 0.7) */ temperature?: number; /** Stop sequences */ stop?: string[]; /** * Bring-your-own OpenAI-compatible chat completions instance. * When supplied, baseUrl / apiKey are ignored. */ client?: HermesChatClient; /** Additional request headers for the built-in fetch transport */ headers?: Record; /** Request timeout in milliseconds (default: 120000) */ timeout?: number; } export declare class HermesAdapter extends BaseAdapter { readonly name = "hermes"; readonly version = "1.0.0"; private agents; get capabilities(): AdapterCapabilities; /** * Register a Hermes agent with the given configuration. * * @param agentId - Unique identifier used to route tasks to this agent * @param config - Model, endpoint, system prompt, and optional BYOC client */ registerAgent(agentId: string, config: HermesAgentConfig): void; executeAgent(agentId: string, payload: AgentPayload, _context: AgentContext): Promise; initialize(config: AdapterConfig): Promise; shutdown(): Promise; } //# sourceMappingURL=hermes-adapter.d.ts.map