From 412eb9ef92cfcb35e810b47430c47621f9950556 Mon Sep 17 00:00:00 2001 From: pacnpal <183241239+pacnpal@users.noreply.github.com> Date: Mon, 3 Feb 2025 10:42:35 -0500 Subject: [PATCH] feat: enhance API with new model configurations and type guards for improved handling --- src/shared/api.ts | 159 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 159 insertions(+) diff --git a/src/shared/api.ts b/src/shared/api.ts index 704e7f3..3d71307 100644 --- a/src/shared/api.ts +++ b/src/shared/api.ts @@ -114,3 +114,162 @@ export const azureAiModelInfoSaneDefaults: ModelInfo = { outputPrice: 0, description: "Azure AI Model Inference allows you to deploy and use any model through Azure's inference service.", } + +// Message content types +export interface MessageContent { + type: "text" | "image" | "function_call" | "tool_use" | "tool_result" | "video" + id?: string + tool_use_id?: string + text?: string + image_url?: string + function_call?: { + name: string + arguments: string + } + content?: Array<{ type?: string; text: string }> + output?: + | string + | Array<{ + type?: string + text?: string + image?: { format: string; source: { bytes: Uint8Array } } + [key: string]: any + }> + input?: Record + name?: string + source?: { + data: string | Uint8Array + media_type: string + bytes?: Uint8Array + uri?: string + format?: string + } + s3Location?: { + uri: string + bucketOwner: string + } +} + +// Type guard for checking if an object has a 'type' property +export function hasType(obj: any): obj is { type: string } { + return obj && typeof obj === "object" && "type" in obj +} + +// Type guard for checking if an object has a 'text' property +export function hasText(obj: any): obj is { text: string } { + return obj && typeof obj === "object" && "text" in obj +} + +// OpenAI Native +export type OpenAiNativeModelId = string +export const openAiNativeModels: { [key in OpenAiNativeModelId]: ModelInfo } = { + "gpt-4-turbo-preview": { + contextWindow: 128000, + supportsImages: true, + supportsComputerUse: true, + supportsPromptCache: false, + }, +} +export const openAiNativeDefaultModelId: OpenAiNativeModelId = "gpt-4-turbo-preview" + +// Anthropic +export type AnthropicModelId = string +export const anthropicModels: { [key in AnthropicModelId]: ModelInfo } = { + "claude-3-opus-20240229": { + contextWindow: 200000, + supportsImages: true, + supportsComputerUse: true, + supportsPromptCache: false, + }, +} +export const anthropicDefaultModelId: AnthropicModelId = "claude-3-opus-20240229" + +// Bedrock +export type BedrockModelId = string +export const bedrockModels: { [key in BedrockModelId]: ModelInfo } = { + "anthropic.claude-3-sonnet-20240229-v1:0": { + contextWindow: 200000, + supportsImages: true, + supportsComputerUse: true, + supportsPromptCache: false, + }, +} +export const bedrockDefaultModelId: BedrockModelId = "anthropic.claude-3-sonnet-20240229-v1:0" + +// DeepSeek +export const deepSeekModels: { [key: string]: ModelInfo } = { + "deepseek-coder": { + contextWindow: 32768, + supportsImages: false, + supportsComputerUse: true, + supportsPromptCache: false, + }, +} +export const deepSeekDefaultModelId = "deepseek-coder" + +// Gemini +export type GeminiModelId = string +export const geminiModels: { [key in GeminiModelId]: ModelInfo } = { + "gemini-pro": { + contextWindow: 32768, + supportsImages: false, + supportsComputerUse: true, + supportsPromptCache: false, + }, +} +export const geminiDefaultModelId: GeminiModelId = "gemini-pro" + +// Glama +export const glamaDefaultModelId = "glama-base" +export const glamaDefaultModelInfo: ModelInfo = { + contextWindow: 4096, + supportsImages: false, + supportsComputerUse: true, + supportsPromptCache: false, +} + +// OpenRouter +export const openRouterDefaultModelId = "openai/gpt-4-turbo-preview" +export const openRouterDefaultModelInfo: ModelInfo = { + contextWindow: 128000, + supportsImages: true, + supportsComputerUse: true, + supportsPromptCache: false, +} + +// Default model info for OpenAI-compatible endpoints +export const openAiModelInfoSaneDefaults: ModelInfo = { + contextWindow: 4096, + supportsImages: false, + supportsComputerUse: true, + supportsPromptCache: false, +} + +// Vertex +export type VertexModelId = string +export const vertexModels: { [key in VertexModelId]: ModelInfo } = {} +export const vertexDefaultModelId: VertexModelId = "gemini-pro" + +// Mistral +export type MistralModelId = string +export const mistralModels: { [key in MistralModelId]: ModelInfo } = { + "mistral-large-latest": { + contextWindow: 32768, + supportsImages: false, + supportsComputerUse: true, + supportsPromptCache: false, + }, +} +export const mistralDefaultModelId: MistralModelId = "mistral-large-latest" + +// Unbound +export type UnboundModelId = string +export const unboundModels: { [key in UnboundModelId]: ModelInfo } = { + "unbound-default": { + contextWindow: 32768, + supportsImages: false, + supportsComputerUse: true, + supportsPromptCache: false, + }, +} +export const unboundDefaultModelId: UnboundModelId = "unbound-default"