/** * Swappable translation helpers for rendering ADK state into native Ollama `/api/chat` requests. * * @module @nhtio/adk/batteries/llm/ollama/helpers * * @remarks * The wire-shape-agnostic helpers (`renderUntrustedContent`, `renderMemories`, * `renderChatCompletionsSystemPrompt`, `toolsToChatCompletionsTools`, …) are shared with the OpenAI * battery via the internal `../chat_common/helpers` submodule and re-exported here under their * original names. Only the Ollama-WIRE-SPECIFIC helpers are defined here: * `renderOllamaTimelineMessage` (flat `content` + base64 `images[]` + `thinking`), * `renderOllamaToolCallResult` (string-only result content), `buildOllamaHistory` (synthetic * `assistant.tool_calls` with object-form `arguments` + `tool`-role messages labelled by * `tool_name`), and `ollamaToolsFromTools` (alias of the shared tool-definition renderer — native * `/api/chat` uses the same function-tool wire shape). * * Native `/api/chat` supports only base64 `images[]`; every non-image modality routes through the * `unsupportedMediaPolicy` fallback (stash text / synthetic description) or throws. */ import { Media } from "../../../common"; import { toolsToChatCompletionsTools } from "../chat_common/helpers"; import type { ChatHelpersCommon } from "../chat_common/types"; import type { OllamaMessage, OllamaTool, OllamaHelpers, ChatCompletionsBucketOrder, UnsupportedMediaPolicy } from "./types"; import type { Tool, ArtifactTool, ToolRegistry, Tokenizable, Memory, Message, Thought, ToolCall, Retrievable, SpooledArtifact } from "../../../common"; export { descriptionToChatCompletionsJsonSchema, defaultDescriptionToChatCompletionsJsonSchema, renderUntrustedContent, defaultRenderUntrustedContent, renderTrustedContent, defaultRenderTrustedContent, renderStandingInstructions, defaultRenderStandingInstructions, renderMemories, defaultRenderMemories, renderRetrievableSafetyDirective, defaultRenderRetrievableSafetyDirective, renderFirstPartyRetrievables, defaultRenderFirstPartyRetrievables, renderThirdPartyPublicRetrievables, defaultRenderThirdPartyPublicRetrievables, renderThirdPartyPrivateRetrievables, defaultRenderThirdPartyPrivateRetrievables, renderRetrievables, defaultRenderRetrievables, renderRetrievableHandleBody, defaultRenderRetrievableHandleBody, renderThought, defaultRenderThought, filterThoughts, defaultFilterThoughts, toolsToChatCompletionsTools, defaultToolsToChatCompletionsTools, renderChatCompletionsSystemPrompt, defaultRenderChatCompletionsSystemPrompt, } from "../chat_common/helpers"; /** * Convert ADK tools to the native Ollama `tools[]` wire. Native `/api/chat` uses the identical * `{ type: 'function', function: { name, description, parameters } }` shape as Chat Completions, so * this is an alias of the shared renderer. */ export declare const ollamaToolsFromTools: (tools: ReadonlyArray, deps: Parameters[1]) => OllamaTool[]; /** Default implementation of {@link OllamaHelpers}-style tool translation; alias of {@link ollamaToolsFromTools}. */ export declare const defaultOllamaToolsFromTools: (tools: ReadonlyArray, deps: Parameters[1]) => OllamaTool[]; /** * Renders a single timeline {@link @nhtio/adk!Message} into a native Ollama message — flattening any * media into the base64 `images[]` array, surfacing reasoning as `thinking`, and wrapping textual * bodies in the appropriate trust envelope. */ export declare const renderOllamaTimelineMessage: (input: { message: Message; selfIdentity: string; unsupportedMediaPolicy: UnsupportedMediaPolicy; warn?: (msg: string) => void; }) => Promise; /** Default timeline-message renderer; alias of {@link renderOllamaTimelineMessage}. */ export declare const defaultRenderOllamaTimelineMessage: (input: { message: Message; selfIdentity: string; unsupportedMediaPolicy: UnsupportedMediaPolicy; warn?: (msg: string) => void; }) => Promise; /** * Render a tool-call result to native Ollama tool-message content (always a string). Media results * are routed through the internal media renderer: images cannot ride on a tool-role message's * `content`, so an image result is replaced with a short text marker (the image bytes are not * re-sent on a tool message); non-image media use the same fallback-text path as elsewhere. */ export declare const renderOllamaToolCallResult: (input: { toolCall: ToolCall; results: Tokenizable | SpooledArtifact | SpooledArtifact[] | Media | Media[]; tool: Tool | ArtifactTool | undefined; renderUntrustedContent: ChatHelpersCommon["renderUntrustedContent"]; renderTrustedContent: ChatHelpersCommon["renderTrustedContent"]; unsupportedMediaPolicy: UnsupportedMediaPolicy; warn?: (msg: string) => void; }) => Promise; /** Default tool-call-result renderer; alias of {@link renderOllamaToolCallResult}. */ export declare const defaultRenderOllamaToolCallResult: (input: { toolCall: ToolCall; results: Tokenizable | SpooledArtifact | SpooledArtifact[] | Media | Media[]; tool: Tool | ArtifactTool | undefined; renderUntrustedContent: ChatHelpersCommon["renderUntrustedContent"]; renderTrustedContent: ChatHelpersCommon["renderTrustedContent"]; unsupportedMediaPolicy: UnsupportedMediaPolicy; warn?: (msg: string) => void; }) => Promise; /** * Assembles the complete native Ollama message history for a dispatch — system prompt and content * buckets, the interleaved timeline of messages/thoughts/tool calls, and the collected opaque * reasoning payloads — by delegating to the injected sub-renderers. */ export declare const buildOllamaHistory: (input: { systemPrompt: Tokenizable; standingInstructions: Iterable; memories: Iterable; retrievables: Iterable; messages: Iterable; thoughts: Iterable; toolCalls: Iterable; tools: ToolRegistry; /** Pre-rendered results keyed by the same live ToolCall instances iterated below. */ renderedToolCallResults: Map; bucketOrder: ChatCompletionsBucketOrder; selfIdentity: string; thoughtSurfacing: "all-self" | "latest-self" | "all"; replayCompatibility: ReadonlyArray; unsupportedMediaPolicy: UnsupportedMediaPolicy; renderOllamaToolCallResult: OllamaHelpers["renderOllamaToolCallResult"]; renderChatCompletionsSystemPrompt: ChatHelpersCommon["renderChatCompletionsSystemPrompt"]; renderStandingInstructions: ChatHelpersCommon["renderStandingInstructions"]; renderMemories: ChatHelpersCommon["renderMemories"]; renderRetrievables: ChatHelpersCommon["renderRetrievables"]; renderRetrievableSafetyDirective: ChatHelpersCommon["renderRetrievableSafetyDirective"]; renderFirstPartyRetrievables: ChatHelpersCommon["renderFirstPartyRetrievables"]; renderThirdPartyPublicRetrievables: ChatHelpersCommon["renderThirdPartyPublicRetrievables"]; renderThirdPartyPrivateRetrievables: ChatHelpersCommon["renderThirdPartyPrivateRetrievables"]; renderRetrievableHandleBody?: ChatHelpersCommon["renderRetrievableHandleBody"]; renderOllamaTimelineMessage: OllamaHelpers["renderOllamaTimelineMessage"]; renderThought: ChatHelpersCommon["renderThought"]; filterThoughts: ChatHelpersCommon["filterThoughts"]; renderUntrustedContent: ChatHelpersCommon["renderUntrustedContent"]; renderTrustedContent: ChatHelpersCommon["renderTrustedContent"]; warn?: (msg: string) => void; }) => Promise<{ messages: OllamaMessage[]; reasoningPayloads: Array<{ id: string; replayCompatibility: string; payload: unknown; }>; }>; /** Default native-history assembler; alias of {@link buildOllamaHistory}. */ export declare const defaultBuildOllamaHistory: (input: { systemPrompt: Tokenizable; standingInstructions: Iterable; memories: Iterable; retrievables: Iterable; messages: Iterable; thoughts: Iterable; toolCalls: Iterable; tools: ToolRegistry; /** Pre-rendered results keyed by the same live ToolCall instances iterated below. */ renderedToolCallResults: Map; bucketOrder: ChatCompletionsBucketOrder; selfIdentity: string; thoughtSurfacing: "all-self" | "latest-self" | "all"; replayCompatibility: ReadonlyArray; unsupportedMediaPolicy: UnsupportedMediaPolicy; renderOllamaToolCallResult: OllamaHelpers["renderOllamaToolCallResult"]; renderChatCompletionsSystemPrompt: ChatHelpersCommon["renderChatCompletionsSystemPrompt"]; renderStandingInstructions: ChatHelpersCommon["renderStandingInstructions"]; renderMemories: ChatHelpersCommon["renderMemories"]; renderRetrievables: ChatHelpersCommon["renderRetrievables"]; renderRetrievableSafetyDirective: ChatHelpersCommon["renderRetrievableSafetyDirective"]; renderFirstPartyRetrievables: ChatHelpersCommon["renderFirstPartyRetrievables"]; renderThirdPartyPublicRetrievables: ChatHelpersCommon["renderThirdPartyPublicRetrievables"]; renderThirdPartyPrivateRetrievables: ChatHelpersCommon["renderThirdPartyPrivateRetrievables"]; renderRetrievableHandleBody?: ChatHelpersCommon["renderRetrievableHandleBody"]; renderOllamaTimelineMessage: OllamaHelpers["renderOllamaTimelineMessage"]; renderThought: ChatHelpersCommon["renderThought"]; filterThoughts: ChatHelpersCommon["filterThoughts"]; renderUntrustedContent: ChatHelpersCommon["renderUntrustedContent"]; renderTrustedContent: ChatHelpersCommon["renderTrustedContent"]; warn?: (msg: string) => void; }) => Promise<{ messages: OllamaMessage[]; reasoningPayloads: Array<{ id: string; replayCompatibility: string; payload: unknown; }>; }>;