feat(translator): add built-in translator registry and helpers

- Introduced `builtin` package exposing a default registry and pipeline for built-in translators.
- Added format constants for common schemas (e.g., OpenAI, Gemini, Codex).
- Implemented helper functions for schema translation using format name strings.
- Provided example usage for integration with translator helpers.
This commit is contained in:
Luis Pater
2025-10-30 12:20:46 +08:00
parent 3e7b645346
commit 2f477df97e
4 changed files with 99 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
// Package builtin exposes the built-in translator registrations for SDK users.
package builtin
import (
sdktranslator "github.com/router-for-me/CLIProxyAPI/v6/sdk/translator"
_ "github.com/router-for-me/CLIProxyAPI/v6/internal/translator"
)
// Registry exposes the default registry populated with all built-in translators.
func Registry() *sdktranslator.Registry {
return sdktranslator.Default()
}
// Pipeline returns a pipeline that already contains the built-in translators.
func Pipeline() *sdktranslator.Pipeline {
return sdktranslator.NewPipeline(sdktranslator.Default())
}

11
sdk/translator/formats.go Normal file
View File

@@ -0,0 +1,11 @@
package translator
// Common format identifiers exposed for SDK users.
const (
FormatOpenAI Format = "openai"
FormatOpenAIResponse Format = "openai-response"
FormatClaude Format = "claude"
FormatGemini Format = "gemini"
FormatGeminiCLI Format = "gemini-cli"
FormatCodex Format = "codex"
)

28
sdk/translator/helpers.go Normal file
View File

@@ -0,0 +1,28 @@
package translator
import "context"
// TranslateRequestByFormatName converts a request payload between schemas by their string identifiers.
func TranslateRequestByFormatName(from, to Format, model string, rawJSON []byte, stream bool) []byte {
return TranslateRequest(from, to, model, rawJSON, stream)
}
// HasResponseTransformerByFormatName reports whether a response translator exists between two schemas.
func HasResponseTransformerByFormatName(from, to Format) bool {
return HasResponseTransformer(from, to)
}
// TranslateStreamByFormatName converts streaming responses between schemas by their string identifiers.
func TranslateStreamByFormatName(ctx context.Context, from, to Format, model string, originalRequestRawJSON, requestRawJSON, rawJSON []byte, param *any) []string {
return TranslateStream(ctx, from, to, model, originalRequestRawJSON, requestRawJSON, rawJSON, param)
}
// TranslateNonStreamByFormatName converts non-streaming responses between schemas by their string identifiers.
func TranslateNonStreamByFormatName(ctx context.Context, from, to Format, model string, originalRequestRawJSON, requestRawJSON, rawJSON []byte, param *any) string {
return TranslateNonStream(ctx, from, to, model, originalRequestRawJSON, requestRawJSON, rawJSON, param)
}
// TranslateTokenCountByFormatName converts token counts between schemas by their string identifiers.
func TranslateTokenCountByFormatName(ctx context.Context, from, to Format, count int64, rawJSON []byte) string {
return TranslateTokenCount(ctx, from, to, count, rawJSON)
}