mirror of https://github.com/openclaw/openclaw.git
90 lines
2.2 KiB
TypeScript
90 lines
2.2 KiB
TypeScript
import type { OpenAICompletionsCompat } from "@mariozechner/pi-ai";
|
|
import type { SecretInput } from "./types.secrets.js";
|
|
|
|
export const MODEL_APIS = [
|
|
"openai-completions",
|
|
"openai-responses",
|
|
"openai-codex-responses",
|
|
"anthropic-messages",
|
|
"google-generative-ai",
|
|
"github-copilot",
|
|
"bedrock-converse-stream",
|
|
"ollama",
|
|
] as const;
|
|
|
|
export type ModelApi = (typeof MODEL_APIS)[number];
|
|
|
|
type SupportedOpenAICompatFields = Pick<
|
|
OpenAICompletionsCompat,
|
|
| "supportsStore"
|
|
| "supportsDeveloperRole"
|
|
| "supportsReasoningEffort"
|
|
| "supportsUsageInStreaming"
|
|
| "supportsStrictMode"
|
|
| "maxTokensField"
|
|
| "requiresToolResultName"
|
|
| "requiresAssistantAfterToolResult"
|
|
| "requiresThinkingAsText"
|
|
>;
|
|
|
|
type SupportedThinkingFormat =
|
|
| NonNullable<OpenAICompletionsCompat["thinkingFormat"]>
|
|
| "openrouter"
|
|
| "qwen-chat-template";
|
|
|
|
export type ModelCompatConfig = SupportedOpenAICompatFields & {
|
|
thinkingFormat?: SupportedThinkingFormat;
|
|
supportsTools?: boolean;
|
|
toolSchemaProfile?: "xai";
|
|
nativeWebSearchTool?: boolean;
|
|
toolCallArgumentsEncoding?: "html-entities";
|
|
requiresMistralToolIds?: boolean;
|
|
requiresOpenAiAnthropicToolPayload?: boolean;
|
|
};
|
|
|
|
export type ModelProviderAuthMode = "api-key" | "aws-sdk" | "oauth" | "token";
|
|
|
|
export type ModelDefinitionConfig = {
|
|
id: string;
|
|
name: string;
|
|
api?: ModelApi;
|
|
reasoning: boolean;
|
|
input: Array<"text" | "image">;
|
|
cost: {
|
|
input: number;
|
|
output: number;
|
|
cacheRead: number;
|
|
cacheWrite: number;
|
|
};
|
|
contextWindow: number;
|
|
maxTokens: number;
|
|
headers?: Record<string, string>;
|
|
compat?: ModelCompatConfig;
|
|
};
|
|
|
|
export type ModelProviderConfig = {
|
|
baseUrl: string;
|
|
apiKey?: SecretInput;
|
|
auth?: ModelProviderAuthMode;
|
|
api?: ModelApi;
|
|
injectNumCtxForOpenAICompat?: boolean;
|
|
headers?: Record<string, SecretInput>;
|
|
authHeader?: boolean;
|
|
models: ModelDefinitionConfig[];
|
|
};
|
|
|
|
export type BedrockDiscoveryConfig = {
|
|
enabled?: boolean;
|
|
region?: string;
|
|
providerFilter?: string[];
|
|
refreshInterval?: number;
|
|
defaultContextWindow?: number;
|
|
defaultMaxTokens?: number;
|
|
};
|
|
|
|
export type ModelsConfig = {
|
|
mode?: "merge" | "replace";
|
|
providers?: Record<string, ModelProviderConfig>;
|
|
bedrockDiscovery?: BedrockDiscoveryConfig;
|
|
};
|