ai-sdk-ollama
Version:
Vercel AI SDK Provider for Ollama using official ollama-js library
79 lines • 3.34 kB
TypeScript
import { JSONObject, JSONValue, LanguageModelV4Content, LanguageModelV4FinishReason, LanguageModelV4Usage, SharedV4ProviderMetadata, SharedV4Warning } from '@ai-sdk/provider';
import { ChatResponse, Message as OllamaMessage, Tool, ToolCall } from 'ollama';
import { executeReliableToolCalls, type ReliableToolCallResult } from '../utils/tool-calling-reliability.js';
export type GenerateResult = {
content: LanguageModelV4Content[];
finishReason: LanguageModelV4FinishReason;
usage: LanguageModelV4Usage;
providerMetadata?: SharedV4ProviderMetadata;
request?: {
body?: unknown;
};
response?: {
id?: string;
timestamp?: Date;
modelId?: string;
};
warnings: SharedV4Warning[];
};
export interface ParsedToolCall {
toolName: string;
input: Record<string, unknown>;
rawInput: unknown;
}
/**
* Parse Ollama tool calls into a normalized format.
* Uses the ToolCall type from the Ollama library for type safety.
*/
export declare function parseOllamaToolCalls(toolCalls: ToolCall[] | undefined): ParsedToolCall[];
export declare function buildContent(reasoning: string | undefined, includeReasoning: boolean, text: string | undefined, toolCalls: ParsedToolCall[]): LanguageModelV4Content[];
/**
* Response fields shared by every `providerMetadata.ollama` payload. Callers
* add their own keys (reliability details, etc.) on top.
*/
export declare function ollamaResponseDetails(response: ChatResponse): Record<string, JSONValue>;
/**
* Create a LanguageModelV4Usage object from token counts.
* V4 uses structured objects for inputTokens and outputTokens.
*/
export declare function createUsage(inputTokenCount?: number, outputTokenCount?: number, raw?: JSONObject): LanguageModelV4Usage;
/**
* Usage for a model call, summed across the responses that made it up. Token
* counts feed the normalised fields; every Ollama counter and timing is also
* summed onto `usage.raw` so callers can read the provider's own shape.
*/
export declare function aggregateUsage(...responses: ChatResponse[]): LanguageModelV4Usage;
export declare function buildGenerationResult(parameters: {
modelId: string;
messages: OllamaMessage[];
ollamaOptions: Record<string, unknown>;
format?: string | Record<string, unknown>;
ollamaTools?: Tool[];
warnings: SharedV4Warning[];
response: ChatResponse;
followUpResponse?: ChatResponse;
parsedToolCalls: ParsedToolCall[];
completionMethod: ReliableToolCallResult['completionMethod'];
retryCount: number;
errors: string[];
toolResults?: Awaited<ReturnType<typeof executeReliableToolCalls>>;
reliable: boolean;
finalTextOverride?: string;
keep_alive?: string | number;
think?: boolean | 'low' | 'medium' | 'high';
}): GenerateResult;
export declare function buildObjectGenerationResult(parameters: {
modelId: string;
messages: OllamaMessage[];
ollamaOptions: Record<string, unknown>;
format?: string | Record<string, unknown>;
tools?: Tool[];
warnings: SharedV4Warning[];
response: ChatResponse;
text: string;
recoveryMethod: 'natural' | 'retry' | 'fallback' | 'type_fix' | 'text_repair';
retryCount: number;
errors?: string[];
keep_alive?: string | number;
}): GenerateResult;
//# sourceMappingURL=chat-result.d.ts.map