65 lines
1.7 KiB
TypeScript
65 lines
1.7 KiB
TypeScript
import {AiTool} from "./tool-types";
|
|
import {AiProvider} from "../model/ai-provider";
|
|
import {getTools} from "./tools/registry";
|
|
|
|
export type AiProviderName = "ollama" | "openai" | "gemini" | "mistral";
|
|
|
|
export function getOllamaTools(): AiTool[] {
|
|
return getTools();
|
|
}
|
|
|
|
export function getOpenAITools(): AiTool[] {
|
|
return getTools().map(tool => ({
|
|
type: "function",
|
|
function: tool.function,
|
|
}));
|
|
}
|
|
|
|
export function getOpenAIResponsesTools(): any[] {
|
|
return getTools().map(tool => ({
|
|
type: "function",
|
|
name: tool.function.name,
|
|
description: tool.function.description,
|
|
parameters: tool.function.parameters,
|
|
strict: false,
|
|
}));
|
|
}
|
|
|
|
export function getMistralTools(): AiTool[] {
|
|
return getTools().map(tool => ({
|
|
type: "function",
|
|
function: tool.function,
|
|
}));
|
|
}
|
|
|
|
export type GeminiTool = {
|
|
functionDeclarations: Array<{
|
|
name: string;
|
|
description?: string;
|
|
parametersJsonSchema?: unknown;
|
|
}>;
|
|
}
|
|
|
|
export function getGeminiTools(): GeminiTool[] {
|
|
const functionDeclarations = getTools().map(tool => ({
|
|
name: tool.function.name,
|
|
description: tool.function.description,
|
|
parametersJsonSchema: tool.function.parameters,
|
|
}));
|
|
|
|
return functionDeclarations.length ? [{functionDeclarations}] : [];
|
|
}
|
|
|
|
export function getProviderTools(provider: AiProvider): AiTool[] {
|
|
switch (provider) {
|
|
case AiProvider.OLLAMA:
|
|
return getOllamaTools();
|
|
case AiProvider.GEMINI:
|
|
return getTools();
|
|
case AiProvider.MISTRAL:
|
|
return getMistralTools();
|
|
case AiProvider.OPENAI:
|
|
return getOpenAITools();
|
|
}
|
|
}
|