Files
opantoantro/docs/wiki/BifrostTransform.md
T
Beyhan Ogur a408821410 first commit
2026-05-11 15:08:50 +03:00

62 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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) | — |