62 lines
2.5 KiB
Markdown
62 lines
2.5 KiB
Markdown
# 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) | — |
|