relayconvert

package
v1.0.0-rc.21 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 11, 2026 License: AGPL-3.0 Imports: 17 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ConverterNone                        = "none"
	ConverterClaudeMessagesToOpenAIChat  = "anthropic_messages_to_openai_chat_completions"
	ConverterOpenAIChatToClaudeMessages  = "openai_chat_completions_to_anthropic_messages"
	ConverterOpenAIChatToOpenAIResponses = "openai_chat_completions_to_openai_responses"
	ConverterOpenAIResponsesToOpenAIChat = "openai_responses_to_openai_chat_completions"
	ConverterOpenAIResponsesToGemini     = "openai_responses_to_gemini_generate_content"
	ConverterGeminiContentToOpenAIChat   = "gemini_generate_content_to_openai_chat_completions"
	ConverterOpenAIChatToGeminiContent   = "openai_chat_completions_to_gemini_generate_content"
)
View Source
const (
	ResponseConverterOAIChatToOAIResponses   = "oai_chat_to_oai_responses_resp"
	ResponseConverterOAIResponsesToOAIChat   = "oai_responses_to_oai_chat_resp"
	ResponseConverterOAIChatToClaudeMessages = "oai_chat_to_claude_messages_resp"
	ResponseConverterOAIChatToGeminiChat     = "oai_chat_to_gemini_chat_resp"
	ResponseConverterClaudeMessagesToOAIChat = "claude_messages_to_oai_chat_resp"
	ResponseConverterGeminiChatToOAIChat     = "gemini_chat_to_oai_chat_resp"
)

Variables

This section is empty.

Functions

func ApplyGeminiThinkingConfig

func ApplyGeminiThinkingConfig(geminiRequest *dto.GeminiChatRequest, info *relaycommon.RelayInfo, oaiRequest ...dto.GeneralOpenAIRequest)

func BuildMessageDeltaPatchUsage

func BuildMessageDeltaPatchUsage(claudeResponse *dto.ClaudeResponse, claudeInfo *ClaudeResponseInfo) *dto.ClaudeUsage

func ChatCompletionsRequestToResponsesRequest

func ChatCompletionsRequestToResponsesRequest(req *dto.GeneralOpenAIRequest) (*dto.OpenAIResponsesRequest, error)

func ChatCompletionsResponseToResponsesResponse

func ChatCompletionsResponseToResponsesResponse(resp *dto.OpenAITextResponse, id string) (*dto.OpenAIResponsesResponse, *dto.Usage, error)

func ClaudeMessagesRequestToOpenAIChat

func ClaudeMessagesRequestToOpenAIChat(claudeRequest dto.ClaudeRequest, info *relaycommon.RelayInfo) (*dto.GeneralOpenAIRequest, error)

func ExtractOutputTextFromResponses

func ExtractOutputTextFromResponses(resp *dto.OpenAIResponsesResponse) string

func ExtractReasoningTextFromResponses

func ExtractReasoningTextFromResponses(resp *dto.OpenAIResponsesResponse) string

func FormatClaudeResponseInfo

func FormatClaudeResponseInfo(claudeResponse *dto.ClaudeResponse, oaiResponse *dto.ChatCompletionsStreamResponse, claudeInfo *ClaudeResponseInfo) bool

func GeminiGenerateContentRequestToOpenAIChat

func GeminiGenerateContentRequestToOpenAIChat(geminiRequest *dto.GeminiChatRequest, info *relaycommon.RelayInfo) (*dto.GeneralOpenAIRequest, error)

func NormalizeCacheCreationSplit

func NormalizeCacheCreationSplit(totalTokens int, tokens5m int, tokens1h int) (int, int)

func OpenAIChatRequestToClaudeMessages

func OpenAIChatRequestToClaudeMessages(c *gin.Context, textRequest dto.GeneralOpenAIRequest) (*dto.ClaudeRequest, error)

func OpenAIChatRequestToGeminiGenerateContent

func OpenAIChatRequestToGeminiGenerateContent(c *gin.Context, textRequest dto.GeneralOpenAIRequest, info *relaycommon.RelayInfo) (*dto.GeminiChatRequest, error)

func OpenAIResponsesRequestToClaudeMessages

func OpenAIResponsesRequestToClaudeMessages(c *gin.Context, req *dto.OpenAIResponsesRequest) (*dto.ClaudeRequest, error)

func OpenAIResponsesRequestToGeminiChat

func OpenAIResponsesRequestToGeminiChat(c *gin.Context, req *dto.OpenAIResponsesRequest, info *relaycommon.RelayInfo) (*dto.GeminiChatRequest, error)

func PatchClaudeMessageDeltaUsageData

func PatchClaudeMessageDeltaUsageData(data string, usage *dto.ClaudeUsage) string

func ResponseClaude2OpenAI

func ResponseClaude2OpenAI(claudeResponse *dto.ClaudeResponse) *dto.OpenAITextResponse

func ResponseGeminiChat2OpenAI

func ResponseGeminiChat2OpenAI(id string, created int64, response *dto.GeminiChatResponse) *dto.OpenAITextResponse

func ResponseOpenAI2Claude

func ResponseOpenAI2Claude(openAIResponse *dto.OpenAITextResponse, info *relaycommon.RelayInfo) *dto.ClaudeResponse

func ResponseOpenAI2Gemini

func ResponseOpenAI2Gemini(openAIResponse *dto.OpenAITextResponse, info *relaycommon.RelayInfo) *dto.GeminiChatResponse

func ResponsesFinishReasonFromStatus

func ResponsesFinishReasonFromStatus(resp *dto.OpenAIResponsesResponse) (string, bool)

func ResponsesRequestToChatCompletionsRequest

func ResponsesRequestToChatCompletionsRequest(req *dto.OpenAIResponsesRequest) (*dto.GeneralOpenAIRequest, error)

func ResponsesResponseToChatCompletionsResponse

func ResponsesResponseToChatCompletionsResponse(resp *dto.OpenAIResponsesResponse, id string) (*dto.OpenAITextResponse, *dto.Usage, error)

func ResponsesStatusFromChatFinishReason

func ResponsesStatusFromChatFinishReason(finishReason string) (string, *dto.IncompleteDetails)

func SetMediaResolver

func SetMediaResolver(resolver MediaResolver)

func ShouldChatCompletionsUseResponsesGlobal

func ShouldChatCompletionsUseResponsesGlobal(channelID int, channelType int, model string) bool

func ShouldChatCompletionsUseResponsesPolicy

func ShouldChatCompletionsUseResponsesPolicy(policy model_setting.ChatCompletionsToResponsesPolicy, channelID int, channelType int, model string) bool

func StopReasonClaudeToOpenAI

func StopReasonClaudeToOpenAI(reason string) string

func StreamResponseClaude2OpenAI

func StreamResponseClaude2OpenAI(claudeResponse *dto.ClaudeResponse) *dto.ChatCompletionsStreamResponse

func StreamResponseGeminiChat2OpenAI

func StreamResponseGeminiChat2OpenAI(geminiResponse *dto.GeminiChatResponse) (*dto.ChatCompletionsStreamResponse, bool)

func StreamResponseOpenAI2Claude

func StreamResponseOpenAI2Claude(openAIResponse *dto.ChatCompletionsStreamResponse, info *relaycommon.RelayInfo) []*dto.ClaudeResponse

func StreamResponseOpenAI2Gemini

func StreamResponseOpenAI2Gemini(openAIResponse *dto.ChatCompletionsStreamResponse, info *relaycommon.RelayInfo) *dto.GeminiChatResponse

func UsageFromChatUsage

func UsageFromChatUsage(src *dto.Usage) *dto.Usage

func UsageFromClaudeAPIUsage

func UsageFromClaudeAPIUsage(usage *dto.ClaudeUsage) *dto.Usage

func UsageFromClaudeUsage

func UsageFromClaudeUsage(usage *dto.Usage) *dto.Usage

func UsageFromGeminiMetadata

func UsageFromGeminiMetadata(metadata *dto.GeminiUsageMetadata, fallbackPromptTokens int) *dto.Usage

func UsageFromResponsesUsage

func UsageFromResponsesUsage(src *dto.Usage) *dto.Usage

Types

type ChatToResponsesStreamState

type ChatToResponsesStreamState = oaichat.ChatToResponsesStreamState

func NewChatToResponsesStreamState

func NewChatToResponsesStreamState(id string, model string) *ChatToResponsesStreamState

type ClaudeResponseInfo

type ClaudeResponseInfo = claudemessages.ClaudeResponseInfo

type MediaResolver

type MediaResolver = relaymedia.MediaResolver

type RequestConverterFunc

type RequestConverterFunc func(c *gin.Context, info *relaycommon.RelayInfo, request any) (any, error)

type RequestConverterQuality

type RequestConverterQuality string
const (
	RequestConverterQualityGood        RequestConverterQuality = "good"
	RequestConverterQualityFair        RequestConverterQuality = "fair"
	RequestConverterQualityDiscouraged RequestConverterQuality = "discouraged"
)

type RequestConverterSpec

type RequestConverterSpec struct {
	ID             string
	From           types.RelayFormat
	To             types.RelayFormat
	Quality        RequestConverterQuality
	Convert        RequestConverterFunc
	StepConverters []string
}

func LookupRequestConverter

func LookupRequestConverter(converter string) (RequestConverterSpec, bool)

type RequestResult

type RequestResult struct {
	Value     any
	From      types.RelayFormat
	To        types.RelayFormat
	Converter string
	Quality   RequestConverterQuality
	Steps     []RequestStep
}

func ConvertRequest

func ConvertRequest(c *gin.Context, info *relaycommon.RelayInfo, target types.RelayFormat, request any) (*RequestResult, error)

func ConvertRequestByID

func ConvertRequestByID(c *gin.Context, info *relaycommon.RelayInfo, converter string, request any) (*RequestResult, error)

func ConvertRequestVia

func ConvertRequestVia(c *gin.Context, info *relaycommon.RelayInfo, request any, path ...types.RelayFormat) (*RequestResult, error)

type RequestStep

type RequestStep struct {
	Converter string
	From      types.RelayFormat
	To        types.RelayFormat
}

type ResponseConverterFunc

type ResponseConverterFunc func(c *gin.Context, info *relaycommon.RelayInfo, response any) (any, *dto.Usage, error)

type ResponseConverterQuality

type ResponseConverterQuality string
const (
	ResponseConverterQualityGood        ResponseConverterQuality = "good"
	ResponseConverterQualityFair        ResponseConverterQuality = "fair"
	ResponseConverterQualityDiscouraged ResponseConverterQuality = "discouraged"
)

type ResponseConverterSpec

type ResponseConverterSpec struct {
	ID                 string
	From               types.RelayFormat
	To                 types.RelayFormat
	Quality            ResponseConverterQuality
	Convert            ResponseConverterFunc
	ConvertStream      ResponseStreamConverterFunc
	NewStreamState     ResponseStreamStateFactory
	ConvertStreamChunk ResponseStreamChunkConverterFunc
	FinalizeStream     ResponseStreamFinalizerFunc
	StepConverters     []string
}

func LookupResponseConverter

func LookupResponseConverter(converter string) (ResponseConverterSpec, bool)

type ResponseResult

type ResponseResult struct {
	Value     any
	Usage     *dto.Usage
	From      types.RelayFormat
	To        types.RelayFormat
	Converter string
	Quality   ResponseConverterQuality
	Steps     []ResponseStep
	Stream    bool
}

func ConvertResponse

func ConvertResponse(c *gin.Context, info *relaycommon.RelayInfo, target types.RelayFormat, response any) (*ResponseResult, error)

func ConvertResponseByID

func ConvertResponseByID(c *gin.Context, info *relaycommon.RelayInfo, converter string, response any) (*ResponseResult, error)

func ConvertStreamResponse

func ConvertStreamResponse(c *gin.Context, info *relaycommon.RelayInfo, target types.RelayFormat, response any) (*ResponseResult, error)

func ConvertStreamResponseChunk

func ConvertStreamResponseChunk(c *gin.Context, info *relaycommon.RelayInfo, state *ResponseStreamState, response any) ([]ResponseResult, error)

func FinalizeStreamResponse

func FinalizeStreamResponse(c *gin.Context, info *relaycommon.RelayInfo, state *ResponseStreamState) ([]ResponseResult, error)

type ResponseStep

type ResponseStep struct {
	Converter string
	From      types.RelayFormat
	To        types.RelayFormat
}

type ResponseStreamChunkConverterFunc

type ResponseStreamChunkConverterFunc func(c *gin.Context, info *relaycommon.RelayInfo, response any, state any) ([]any, *dto.Usage, error)

type ResponseStreamConverterFunc

type ResponseStreamConverterFunc func(c *gin.Context, info *relaycommon.RelayInfo, response any) (any, *dto.Usage, error)

type ResponseStreamFinalizerFunc

type ResponseStreamFinalizerFunc func(c *gin.Context, info *relaycommon.RelayInfo, state any) ([]any, *dto.Usage, error)

type ResponseStreamOptions

type ResponseStreamOptions struct {
	ID           string
	Model        string
	Created      int64
	IncludeUsage bool
}

type ResponseStreamState

type ResponseStreamState struct {
	From      types.RelayFormat
	To        types.RelayFormat
	Converter string
	Quality   ResponseConverterQuality
	Steps     []ResponseStep
	// contains filtered or unexported fields
}

func NewResponseStreamState

func NewResponseStreamState(from types.RelayFormat, target types.RelayFormat, options ResponseStreamOptions) (*ResponseStreamState, error)

func NewResponseStreamStateByID

func NewResponseStreamStateByID(converter string, options ResponseStreamOptions) (*ResponseStreamState, error)

func (*ResponseStreamState) SetUsage

func (s *ResponseStreamState) SetUsage(usage *dto.Usage)

func (*ResponseStreamState) Usage

func (s *ResponseStreamState) Usage() *dto.Usage

func (*ResponseStreamState) UsageText

func (s *ResponseStreamState) UsageText() string

type ResponseStreamStateFactory

type ResponseStreamStateFactory func(options ResponseStreamOptions) any

type ResponsesBufferedAccumulator

type ResponsesBufferedAccumulator = oairesponses.ResponsesBufferedAccumulator

func NewResponsesBufferedAccumulator

func NewResponsesBufferedAccumulator() *ResponsesBufferedAccumulator

type ResponsesToChatStreamState

type ResponsesToChatStreamState = oairesponses.ResponsesToChatStreamState

func NewResponsesToChatStreamState

func NewResponsesToChatStreamState(model string, includeUsage bool) *ResponsesToChatStreamState

type TextConverterQuality

type TextConverterQuality string
const (
	TextConverterQualityGood        TextConverterQuality = "good"
	TextConverterQualityFair        TextConverterQuality = "fair"
	TextConverterQualityDiscouraged TextConverterQuality = "discouraged"
)

type TextConverterSpec

type TextConverterSpec struct {
	ID      string
	From    types.RelayFormat
	To      types.RelayFormat
	Quality TextConverterQuality
	Req     TextRequestSide
	Resp    TextResponseSide
}

func LookupTextConverter

func LookupTextConverter(converter string) (TextConverterSpec, bool)

type TextRequestSide

type TextRequestSide struct {
	Convert        RequestConverterFunc
	StepConverters []string
}

type TextResponseSide

type TextResponseSide struct {
	Convert            ResponseConverterFunc
	ConvertStream      ResponseStreamConverterFunc
	NewStreamState     ResponseStreamStateFactory
	ConvertStreamChunk ResponseStreamChunkConverterFunc
	FinalizeStream     ResponseStreamFinalizerFunc
	StepConverters     []string
	Aliases            []string
}

Directories

Path Synopsis
internal

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL