2.5 KiB
2.5 KiB
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-v4 → DeepSeek/deepseek-v4 |
gpt, openai |
OpenAI/ |
gpt-4 → OpenAI/gpt-4 |
claude, anthropic |
Anthropic/ |
claude-3 → Anthropic/claude-3 |
gemini |
Google/ |
gemini-pro → Google/gemini-pro |
| diğer | DeepSeek/ (varsayılan) |
— |