Files
opantoantro/docs/wiki/BifrostTransform.md

3.4 KiB
Raw Permalink Blame History

BifrostTransform

Özet: Anthropic Messages API formatı ile OpenAI Chat Completions formatı arasında çift yönlü dönüşüm yapan katman (internal/transform/anthropic_bifrost.go:74). "Bifrost" (İskandinav mitolojisindeki köprü) adı, two-way dönüşümü simgeler.

Kütüphaneler: Go encoding/json, strings

Bağlantılar: AnthropicHandler, Index

Struct'lar

Anthropic Format (Giriş/Çıkış)

Struct Alanlar
AnthropicRequest Model, MaxTokens, Messages []AnthropicMessage, System, Stream
AnthropicMessage Role, Content
AnthropicResponse ID, Type, Role, Content []AnthropicContent, Model, StopReason, StopSequence
AnthropicContent Type, Text

OpenAI / Bifrost Format (Ara Katman)

Struct Alanlar
BifrostRequest Model, Messages []BifrostMessage, MaxTokens, Stream
BifrostMessage Role, Content
BifrostResponse ID, Object, Created, Model, Choices[{Message{Role,Content}, FinishReason, Index}]

Dönüşüm Detayları

Anthropic → OpenAI (AnthropicToBifrost())

Anthropic Request                     OpenAI Request
─────────────────                     ─────────────
model: "claude-3-5-sonnet"     →     model: "Anthropic/claude-3-5-sonnet"
system: "Be helpful"           →     messages: [{role:"system", ...}, ...]
messages: [{role, content}]    →     messages: [{role, content}]
max_tokens: 1024               →     max_tokens: 1024
stream: true                   →     stream: true

OpenAI → Anthropic (BifrostToAnthropic())

OpenAI Response                       Anthropic Response
───────────────                       ─────────────────
id: "chatcmpl-xxx"             →     id: "chatcmpl-xxx"
choices[].message.content      →     content: [{type:"text", text:"..."}]
choices[].finish_reason        →     stop_reason: "stop"/"end_turn"
model                          →     model (same)

Model Prefix Tahmini (guessProvider())

Model içerir Prefix Örnek
deepseek DeepSeek/ deepseek-v4DeepSeek/deepseek-v4
gpt, openai OpenAI/ gpt-4OpenAI/gpt-4
claude, anthropic Anthropic/ claude-3Anthropic/claude-3
gemini Google/ gemini-proGoogle/gemini-pro
diğer DeepSeek/ (varsayılan)

SSE Streaming Transformer (StreamTransformer)

OpenAI SSE chunk'larını Anthropic SSE event'lerine dönüştürür (TransformChunk()):

OpenAI SSE Chunk                    Anthropic SSE Events
─────────────────                    ─────────────────────
id + model var →                    message_start (ilk chunk'ta)
delta.content →                     content_block_start + content_block_delta
finish_reason →                     content_block_stop + message_delta + message_stop
[DONE] →                            (finish() zaten çağrıldıysa no-op)

Buffer: 4MB scanner buffer (handlers/anthropic.go) — Claude Code tool çağrılarında büyük chunk'lar için. Hata yönetimi: Scanner/write/flush hataları [ANTHROPIC] prefix'iyle loglanır.