mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-08-28 05:27:24 +00:00
125 lines
3.2 KiB
TypeScript
125 lines
3.2 KiB
TypeScript
import { Anthropic } from "@anthropic-ai/sdk"
|
|
|
|
import type { ProviderSettings, ModelInfo } from "@roo-code/types"
|
|
|
|
import { ApiStream } from "./transform/stream"
|
|
|
|
import {
|
|
GlamaHandler,
|
|
AnthropicHandler,
|
|
AwsBedrockHandler,
|
|
OpenRouterHandler,
|
|
VertexHandler,
|
|
AnthropicVertexHandler,
|
|
OpenAiHandler,
|
|
OllamaHandler,
|
|
LmStudioHandler,
|
|
GeminiHandler,
|
|
OpenAiNativeHandler,
|
|
DeepSeekHandler,
|
|
MoonshotHandler,
|
|
MistralHandler,
|
|
VsCodeLmHandler,
|
|
UnboundHandler,
|
|
RequestyHandler,
|
|
HumanRelayHandler,
|
|
FakeAIHandler,
|
|
XAIHandler,
|
|
GroqHandler,
|
|
HuggingFaceHandler,
|
|
ChutesHandler,
|
|
LiteLLMHandler,
|
|
ClaudeCodeHandler,
|
|
WatsonxAIHandler,
|
|
} from "./providers"
|
|
|
|
export interface SingleCompletionHandler {
|
|
completePrompt(prompt: string): Promise<string>
|
|
}
|
|
|
|
export interface ApiHandlerCreateMessageMetadata {
|
|
mode?: string
|
|
taskId: string
|
|
}
|
|
|
|
export interface ApiHandler {
|
|
createMessage(
|
|
systemPrompt: string,
|
|
messages: Anthropic.Messages.MessageParam[],
|
|
metadata?: ApiHandlerCreateMessageMetadata,
|
|
): ApiStream
|
|
|
|
getModel(): { id: string; info: ModelInfo }
|
|
|
|
/**
|
|
* Counts tokens for content blocks
|
|
* All providers extend BaseProvider which provides a default tiktoken implementation,
|
|
* but they can override this to use their native token counting endpoints
|
|
*
|
|
* @param content The content to count tokens for
|
|
* @returns A promise resolving to the token count
|
|
*/
|
|
countTokens(content: Array<Anthropic.Messages.ContentBlockParam>): Promise<number>
|
|
}
|
|
|
|
export function buildApiHandler(configuration: ProviderSettings): ApiHandler {
|
|
const { apiProvider, ...options } = configuration
|
|
|
|
switch (apiProvider) {
|
|
case "anthropic":
|
|
return new AnthropicHandler(options)
|
|
case "claude-code":
|
|
return new ClaudeCodeHandler(options)
|
|
case "glama":
|
|
return new GlamaHandler(options)
|
|
case "openrouter":
|
|
return new OpenRouterHandler(options)
|
|
case "bedrock":
|
|
return new AwsBedrockHandler(options)
|
|
case "vertex":
|
|
return options.apiModelId?.startsWith("claude")
|
|
? new AnthropicVertexHandler(options)
|
|
: new VertexHandler(options)
|
|
case "openai":
|
|
return new OpenAiHandler(options)
|
|
case "ollama":
|
|
return new OllamaHandler(options)
|
|
case "lmstudio":
|
|
return new LmStudioHandler(options)
|
|
case "gemini":
|
|
return new GeminiHandler(options)
|
|
case "openai-native":
|
|
return new OpenAiNativeHandler(options)
|
|
case "deepseek":
|
|
return new DeepSeekHandler(options)
|
|
case "moonshot":
|
|
return new MoonshotHandler(options)
|
|
case "vscode-lm":
|
|
return new VsCodeLmHandler(options)
|
|
case "mistral":
|
|
return new MistralHandler(options)
|
|
case "unbound":
|
|
return new UnboundHandler(options)
|
|
case "requesty":
|
|
return new RequestyHandler(options)
|
|
case "human-relay":
|
|
return new HumanRelayHandler()
|
|
case "fake-ai":
|
|
return new FakeAIHandler(options)
|
|
case "xai":
|
|
return new XAIHandler(options)
|
|
case "groq":
|
|
return new GroqHandler(options)
|
|
case "huggingface":
|
|
return new HuggingFaceHandler(options)
|
|
case "chutes":
|
|
return new ChutesHandler(options)
|
|
case "litellm":
|
|
return new LiteLLMHandler(options)
|
|
case "watsonx":
|
|
return new WatsonxAIHandler(options)
|
|
default:
|
|
apiProvider satisfies "gemini-cli" | undefined
|
|
return new AnthropicHandler(options)
|
|
}
|
|
}
|