# ์ด์šฉ์•ˆ๋‚ด ๐ŸŒ **Languages:** ๐Ÿ‡บ๐Ÿ‡ธ [English](../../USER_GUIDE.md) | ๐Ÿ‡ง๐Ÿ‡ท [Portuguรชs (Brasil)](../pt-BR/USER_GUIDE.md) | ๐Ÿ‡ช๐Ÿ‡ธ [Espaรฑol](../es/USER_GUIDE.md) | ๐Ÿ‡ซ๐Ÿ‡ท [Franรงais](../fr/USER_GUIDE.md) | ๐Ÿ‡ฎ๐Ÿ‡น [Italiano](../it/USER_GUIDE.md) | ๐Ÿ‡ท๐Ÿ‡บ [ะ ัƒััะบะธะน](../ru/USER_GUIDE.md) | ๐Ÿ‡จ๐Ÿ‡ณ [ไธญๆ–‡ (็ฎ€ไฝ“)](../zh-CN/USER_GUIDE.md) | ๐Ÿ‡ฉ๐Ÿ‡ช [Deutsch](../de/USER_GUIDE.md) | ๐Ÿ‡ฎ๐Ÿ‡ณ [เคนเคฟเคจเฅเคฆเฅ€](../in/USER_GUIDE.md) | ๐Ÿ‡น๐Ÿ‡ญ [เน„เธ—เธข](../th/USER_GUIDE.md) | ๐Ÿ‡บ๐Ÿ‡ฆ [ะฃะบั€ะฐั—ะฝััŒะบะฐ](../uk-UA/USER_GUIDE.md) | ๐Ÿ‡ธ๐Ÿ‡ฆ [ุงู„ุนุฑุจูŠุฉ](../ar/USER_GUIDE.md) | ๐Ÿ‡ฏ๐Ÿ‡ต [ๆ—ฅๆœฌ่ชž](../ja/USER_GUIDE.md) | ๐Ÿ‡ป๐Ÿ‡ณ [Tiแบฟng Viแป‡t](../vi/USER_GUIDE.md) | ๐Ÿ‡ง๐Ÿ‡ฌ [ะ‘ัŠะปะณะฐั€ัะบะธ](../bg/USER_GUIDE.md) | ๐Ÿ‡ฉ๐Ÿ‡ฐ [Dansk](../da/USER_GUIDE.md) | ๐Ÿ‡ซ๐Ÿ‡ฎ [Suomi](../fi/USER_GUIDE.md) | ๐Ÿ‡ฎ๐Ÿ‡ฑ [ืขื‘ืจื™ืช](../he/USER_GUIDE.md) | ๐Ÿ‡ญ๐Ÿ‡บ [Magyar](../hu/USER_GUIDE.md) | ๐Ÿ‡ฎ๐Ÿ‡ฉ [Bahasa Indonesia](../id/USER_GUIDE.md) | ๐Ÿ‡ฐ๐Ÿ‡ท [ํ•œ๊ตญ์–ด](../ko/USER_GUIDE.md) | ๐Ÿ‡ฒ๐Ÿ‡พ [Bahasa Melayu](../ms/USER_GUIDE.md) | ๐Ÿ‡ณ๐Ÿ‡ฑ [Nederlands](../nl/USER_GUIDE.md) | ๐Ÿ‡ณ๐Ÿ‡ด [Norsk](../no/USER_GUIDE.md) | ๐Ÿ‡ต๐Ÿ‡น [Portuguรชs (Portugal)](../pt/USER_GUIDE.md) | ๐Ÿ‡ท๐Ÿ‡ด [Romรขnฤƒ](../ro/USER_GUIDE.md) | ๐Ÿ‡ต๐Ÿ‡ฑ [Polski](../pl/USER_GUIDE.md) | ๐Ÿ‡ธ๐Ÿ‡ฐ [Slovenฤina](../sk/USER_GUIDE.md) | ๐Ÿ‡ธ๐Ÿ‡ช [Svenska](../sv/USER_GUIDE.md) | ๐Ÿ‡ต๐Ÿ‡ญ [Filipino](../phi/USER_GUIDE.md) ๊ณต๊ธ‰์ž ๊ตฌ์„ฑ, ์ฝค๋ณด ์ƒ์„ฑ, CLI ๋„๊ตฌ ํ†ตํ•ฉ ๋ฐ OmniRoute ๋ฐฐํฌ์— ๋Œ€ํ•œ ์ „์ฒด ๊ฐ€์ด๋“œ์ž…๋‹ˆ๋‹ค. --- ## ๋ชฉ์ฐจ - [Pricing at a Glance](#-pricing-at-a-glance) - [Use Cases](#-use-cases) - [Provider Setup](#-provider-setup) - [CLI Integration](#-cli-integration) - [Deployment](#-deployment) - [Available Models](#-available-models) - [Advanced Features](#-advanced-features) --- ## ๐Ÿ’ฐ ๊ฐ€๊ฒฉ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ | ๊ณ„์ธต | ๊ณต๊ธ‰์ž | ๋น„์šฉ | ํ• ๋‹น๋Ÿ‰ ์žฌ์„ค์ • | ์ตœ๊ณ ์˜ ๋Œ€์ƒ | | ------------- | ------------------- | ------------------ | --------------- | ----------------- | | **๐Ÿ’ณ ๊ตฌ๋…** | ํด๋กœ๋“œ ์ฝ”๋“œ (Pro) | $20/์›” | 5์‹œ๊ฐ„ + ๋งค์ฃผ | ์ด๋ฏธ ๊ตฌ๋… ์ค‘ | | | ์ฝ”๋ฑ์Šค(ํ”Œ๋Ÿฌ์Šค/ํ”„๋กœ) | $20-200/์›” | 5์‹œ๊ฐ„ + ๋งค์ฃผ | OpenAI ์‚ฌ์šฉ์ž | | | ์ œ๋ฏธ๋‹ˆ CLI | **๋ฌด๋ฃŒ** | 180K/์›” + 1K/์ผ | ๋ชจ๋“  ์‚ฌ๋žŒ! | | | GitHub ๋ถ€์กฐ์ข…์‚ฌ | $10-19/์›” | ์›”๊ฐ„ | GitHub ์‚ฌ์šฉ์ž | | **๐Ÿ”‘ API ํ‚ค** | ๋”ฅ์‹œํฌ | ์‚ฌ์šฉ๋Ÿ‰์— ๋”ฐ๋ผ ์ง€๋ถˆ | ์—†์Œ | ์ €๋ ดํ•œ ์ถ”๋ก  | | | ๊ทธ๋กœํฌ | ์‚ฌ์šฉ๋Ÿ‰์— ๋”ฐ๋ผ ์ง€๋ถˆ | ์—†์Œ | ์ดˆ๊ณ ์† ์ถ”๋ก  | | | xAI(๊ทธ๋ก) | ์‚ฌ์šฉ๋Ÿ‰์— ๋”ฐ๋ผ ์ง€๋ถˆ | ์—†์Œ | Grok 4 ์ถ”๋ก  | | | ๋ฏธ์ŠคํŠธ๋ž„ | ์‚ฌ์šฉ๋Ÿ‰์— ๋”ฐ๋ผ ์ง€๋ถˆ | ์—†์Œ | EU ์ฃผ์ตœ ๋ชจ๋ธ | | | ๋‹นํ˜น๊ฐ | ์‚ฌ์šฉ๋Ÿ‰์— ๋”ฐ๋ผ ์ง€๋ถˆ | ์—†์Œ | ๊ฒ€์ƒ‰ ์ฆ๊ฐ• | | | ํ•จ๊ป˜ํ•˜๋Š” AI | ์‚ฌ์šฉ๋Ÿ‰์— ๋”ฐ๋ผ ์ง€๋ถˆ | ์—†์Œ | ์˜คํ”ˆ ์†Œ์Šค ๋ชจ๋ธ | | | ๋ถˆ๊ฝƒ๋†€์ด AI | ์‚ฌ์šฉ๋Ÿ‰์— ๋”ฐ๋ผ ์ง€๋ถˆ | ์—†์Œ | ๋น ๋ฅธ FLUX ์ด๋ฏธ์ง€ | | | ๋Œ€๋‡Œ | ์‚ฌ์šฉ๋Ÿ‰์— ๋”ฐ๋ผ ์ง€๋ถˆ | ์—†์Œ | ์›จ์ดํผ ๊ทœ๋ชจ ์†๋„ | | | ์ฝ”ํžˆ์–ด | ์‚ฌ์šฉ๋Ÿ‰์— ๋”ฐ๋ผ ์ง€๋ถˆ | ์—†์Œ | ์ปค๋งจ๋“œ R+ RAG | | | ์—”๋น„๋””์•„ NIM | ์‚ฌ์šฉ๋Ÿ‰์— ๋”ฐ๋ผ ์ง€๋ถˆ | ์—†์Œ | ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋ชจ๋ธ | | **๐Ÿ’ฐ ์ €๋ ดํ•œ** | GLM-4.7 | $0.6/1M | ๋งค์ผ ์˜ค์ „ 10์‹œ | ์˜ˆ์‚ฐ ๋ฐฑ์—… | | | ๋ฏธ๋‹ˆ๋งฅ์Šค M2.1 | $0.2/1M | 5์‹œ๊ฐ„ ๋กค๋ง | ๊ฐ€์žฅ ์ €๋ ดํ•œ ์˜ต์…˜ | | | ํ‚ค๋ฏธ K2 | $9/์›” ์ •์•ก | 1000๋งŒ ํ† ํฐ/์›” | ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋น„์šฉ | | **๐Ÿ†“ ๋ฌด๋ฃŒ** | ์•„์ดํ”Œ๋กœ์šฐ | $0 | ๋ฌด์ œํ•œ | 8๊ฐœ ๋ชจ๋ธ ๋ฌด๋ฃŒ | | | ํ€€ | $0 | ๋ฌด์ œํ•œ | 3๊ฐœ ๋ชจ๋ธ ๋ฌด๋ฃŒ | | | ํ‚ค๋กœ | $0 | ๋ฌด์ œํ•œ | ํด๋กœ๋“œ ํ”„๋ฆฌ | **๐Ÿ’ก ์ „๋ฌธ๊ฐ€ ํŒ:** Gemini CLI(์›” 180K ๋ฌด๋ฃŒ) + iFlow(๋ฌด์ œํ•œ ๋ฌด๋ฃŒ) ์ฝค๋ณด = ๋น„์šฉ $0๋กœ ์‹œ์ž‘ํ•˜์„ธ์š”! --- ## ๐ŸŽฏ ์‚ฌ์šฉ ์‚ฌ๋ก€ ### ์‚ฌ๋ก€ 1: "Claude Pro๋ฅผ ๊ตฌ๋…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค." **๋ฌธ์ œ:** ํ• ๋‹น๋Ÿ‰์€ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ๋งŒ๋ฃŒ๋˜๋ฉฐ, ์ฝ”๋”ฉ ์ž‘์—…์ด ๋งŽ์€ ๋™์•ˆ ์†๋„ ์ œํ•œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ``` Combo: "maximize-claude" 1. cc/claude-opus-4-6 (use subscription fully) 2. glm/glm-4.7 (cheap backup when quota out) 3. if/kimi-k2-thinking (free emergency fallback) Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total vs. $20 + hitting limits = frustration ``` ### ์‚ฌ๋ก€ 2: "๋น„์šฉ์ด 0์ด๊ธธ ์›ํ•ฉ๋‹ˆ๋‹ค" **๋ฌธ์ œ:** ๊ตฌ๋…๋ฃŒ๋ฅผ ๊ฐ๋‹นํ•  ์ˆ˜ ์—†๊ณ  ์•ˆ์ •์ ์ธ AI ์ฝ”๋”ฉ์ด ํ•„์š”ํ•จ ``` Combo: "free-forever" 1. gc/gemini-3-flash (180K free/month) 2. if/kimi-k2-thinking (unlimited free) 3. qw/qwen3-coder-plus (unlimited free) Monthly cost: $0 Quality: Production-ready models ``` ### ์‚ฌ๋ก€ 3: "์ค‘๋‹จ ์—†์ด ์—ฐ์ค‘๋ฌดํœด ์ฝ”๋”ฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค." **๋ฌธ์ œ:** ๋งˆ๊ฐ์ผ, ๊ฐ€๋™ ์ค‘์ง€ ์‹œ๊ฐ„์„ ๊ฐ๋‹นํ•  ์ˆ˜ ์—†์Œ ``` Combo: "always-on" 1. cc/claude-opus-4-6 (best quality) 2. cx/gpt-5.2-codex (second subscription) 3. glm/glm-4.7 (cheap, resets daily) 4. minimax/MiniMax-M2.1 (cheapest, 5h reset) 5. if/kimi-k2-thinking (free unlimited) Result: 5 layers of fallback = zero downtime Monthly cost: $20-200 (subscriptions) + $10-20 (backup) ``` ### ์‚ฌ๋ก€ 4: "OpenClaw์—์„œ ๋ฌด๋ฃŒ AI๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค" **๋ฌธ์ œ:** ๋ฉ”์‹œ์ง• ์•ฑ์— AI ๋„์šฐ๋ฏธ๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ ์™„์ „ ๋ฌด๋ฃŒ์ž…๋‹ˆ๋‹ค. ``` Combo: "openclaw-free" 1. if/glm-4.7 (unlimited free) 2. if/minimax-m2.1 (unlimited free) 3. if/kimi-k2-thinking (unlimited free) Monthly cost: $0 Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... ``` --- ## ๐Ÿ“– ๊ณต๊ธ‰์ž ์„ค์ • ### ๐Ÿ” ๊ตฌ๋… ์ œ๊ณต์—…์ฒด #### ํด๋กœ๋“œ ์ฝ”๋“œ(Pro/Max) ```bash Dashboard โ†’ Providers โ†’ Connect Claude Code โ†’ OAuth login โ†’ Auto token refresh โ†’ 5-hour + weekly quota tracking Models: cc/claude-opus-4-6 cc/claude-sonnet-4-5-20250929 cc/claude-haiku-4-5-20251001 ``` **ํ”„๋กœ ํŒ:** ๋ณต์žกํ•œ ์ž‘์—…์—๋Š” Opus๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์†๋„๋ฅผ ๋†’์ด๋ ค๋ฉด Sonnet์„ ์‚ฌ์šฉํ•˜์„ธ์š”. OmniRoute๋Š” ๋ชจ๋ธ๋‹น ํ• ๋‹น๋Ÿ‰์„ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค! #### OpenAI ์ฝ”๋ฑ์Šค(Plus/Pro) ```bash Dashboard โ†’ Providers โ†’ Connect Codex โ†’ OAuth login (port 1455) โ†’ 5-hour + weekly reset Models: cx/gpt-5.2-codex cx/gpt-5.1-codex-max ``` #### Gemini CLI(์›” 180K ๋ฌด๋ฃŒ!) ```bash Dashboard โ†’ Providers โ†’ Connect Gemini CLI โ†’ Google OAuth โ†’ 180K completions/month + 1K/day Models: gc/gemini-3-flash-preview gc/gemini-2.5-pro ``` **์ตœ๊ณ ์˜ ๊ฐ€์น˜:** ์—„์ฒญ๋‚œ ๋ฌด๋ฃŒ ๋“ฑ๊ธ‰! ์œ ๋ฃŒ ๋“ฑ๊ธ‰ ์ด์ „์— ์‚ฌ์šฉํ•˜์„ธ์š”. #### GitHub ์ฝ”ํŒŒ์ผ๋Ÿฟ ```bash Dashboard โ†’ Providers โ†’ Connect GitHub โ†’ OAuth via GitHub โ†’ Monthly reset (1st of month) Models: gh/gpt-5 gh/claude-4.5-sonnet gh/gemini-3-pro ``` ### ๐Ÿ’ฐ ์ €๋ ดํ•œ ๊ณต๊ธ‰์ž #### GLM-4.7 (์ผ์ผ ์žฌ์„ค์ •, $0.6/1M) 1. ๊ฐ€์ž…: [Zhipu AI](https://open.bigmodel.cn/) 2. Coding Plan์—์„œ API Key ๋ฐ›๊ธฐ 3. ๋Œ€์‹œ๋ณด๋“œ โ†’ API ํ‚ค ์ถ”๊ฐ€: ๊ณต๊ธ‰์ž: `glm`, API ํ‚ค: `your-key` **์‚ฌ์šฉ:** `glm/glm-4.7` โ€” **ํ”„๋กœ ํŒ:** ์ฝ”๋”ฉ ๊ณ„ํš์€ 1/7 ๋น„์šฉ์œผ๋กœ 3๋ฐฐ ํ• ๋‹น๋Ÿ‰์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค! ๋งค์ผ ์˜ค์ „ 10์‹œ์— ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค. #### MiniMax M2.1(5์‹œ๊ฐ„ ์žฌ์„ค์ •, $0.20/1M) 1. ๊ฐ€์ž…: [MiniMax](https://www.minimax.io/) 2. API ํ‚ค ๋ฐ›๊ธฐ โ†’ ๋Œ€์‹œ๋ณด๋“œ โ†’ API ํ‚ค ์ถ”๊ฐ€ **์‚ฌ์šฉ:** `minimax/MiniMax-M2.1` โ€” **ํ”„๋กœ ํŒ:** ๊ธด ์ปจํ…์ŠคํŠธ(1M ํ† ํฐ)์— ๋Œ€ํ•œ ๊ฐ€์žฅ ์ €๋ ดํ•œ ์˜ต์…˜! #### Kimi K2($9/์›” ์ •์•ก) 1. ๊ตฌ๋…: [Moonshot AI](https://platform.moonshot.ai/) 2. API ํ‚ค ๋ฐ›๊ธฐ โ†’ ๋Œ€์‹œ๋ณด๋“œ โ†’ API ํ‚ค ์ถ”๊ฐ€ **์‚ฌ์šฉ:** `kimi/kimi-latest` โ€” **ํ”„๋กœ ํŒ:** 1,000๋งŒ ํ† ํฐ์— ๋Œ€ํ•ด ์›” $9 ๊ณ ์ • = ์œ ํšจ ๋น„์šฉ $0.90/1M! ### ๐Ÿ†“ ๋ฌด๋ฃŒ ์ œ๊ณต์—…์ฒด #### iFlow(8๊ฐœ ๋ฌด๋ฃŒ ๋ชจ๋ธ) ```bash Dashboard โ†’ Connect iFlow โ†’ OAuth login โ†’ Unlimited usage Models: if/kimi-k2-thinking, if/qwen3-coder-plus, if/glm-4.7, if/minimax-m2, if/deepseek-r1 ``` #### Qwen(3๊ฐœ ๋ฌด๋ฃŒ ๋ชจ๋ธ) ```bash Dashboard โ†’ Connect Qwen โ†’ Device code auth โ†’ Unlimited usage Models: qw/qwen3-coder-plus, qw/qwen3-coder-flash ``` #### ํ‚ค๋กœ(ํด๋กœ๋“œ ํ”„๋ฆฌ) ```bash Dashboard โ†’ Connect Kiro โ†’ AWS Builder ID or Google/GitHub โ†’ Unlimited Models: kr/claude-sonnet-4.5, kr/claude-haiku-4.5 ``` --- ## ๐ŸŽจ ์ฝค๋ณด ### ์˜ˆ์‹œ 1: ๊ตฌ๋… ์ตœ๋Œ€ํ™” โ†’ ์ €๋ ดํ•œ ๋ฐฑ์—… ``` Dashboard โ†’ Combos โ†’ Create New Name: premium-coding Models: 1. cc/claude-opus-4-6 (Subscription primary) 2. glm/glm-4.7 (Cheap backup, $0.6/1M) 3. minimax/MiniMax-M2.1 (Cheapest fallback, $0.20/1M) Use in CLI: premium-coding ``` ### ์˜ˆ์‹œ 2: ๋ฌด๋ฃŒ ์ „์šฉ(๋น„์šฉ ์—†์Œ) ``` Name: free-combo Models: 1. gc/gemini-3-flash-preview (180K free/month) 2. if/kimi-k2-thinking (unlimited) 3. qw/qwen3-coder-plus (unlimited) Cost: $0 forever! ``` --- ## ๐Ÿ”ง CLI ํ†ตํ•ฉ ### ์ปค์„œ IDE ``` Settings โ†’ Models โ†’ Advanced: OpenAI API Base URL: http://localhost:20128/v1 OpenAI API Key: [from omniroute dashboard] Model: cc/claude-opus-4-6 ``` ### ํด๋กœ๋“œ ์ฝ”๋“œ `~/.claude/config.json` ํŽธ์ง‘: ```json { "anthropic_api_base": "http://localhost:20128/v1", "anthropic_api_key": "your-omniroute-api-key" } ``` ### ์ฝ”๋ฑ์Šค CLI ```bash export OPENAI_BASE_URL="http://localhost:20128" export OPENAI_API_KEY="your-omniroute-api-key" codex "your prompt" ``` ### ์˜คํ”ˆํด๋กœ `~/.openclaw/openclaw.json` ํŽธ์ง‘: ```json { "agents": { "defaults": { "model": { "primary": "omniroute/if/glm-4.7" } } }, "models": { "providers": { "omniroute": { "baseUrl": "http://localhost:20128/v1", "apiKey": "your-omniroute-api-key", "api": "openai-completions", "models": [{ "id": "if/glm-4.7", "name": "glm-4.7" }] } } } } ``` **๋˜๋Š” ๋Œ€์‹œ๋ณด๋“œ ์‚ฌ์šฉ:** CLI ๋„๊ตฌ โ†’ OpenClaw โ†’ ์ž๋™ ๊ตฌ์„ฑ ### ํด๋ผ์ธ / ๊ณ„์† / RooCode ``` Provider: OpenAI Compatible Base URL: http://localhost:20128/v1 API Key: [from dashboard] Model: cc/claude-opus-4-6 ``` --- ## ๐Ÿš€ ๋ฐฐํฌ ### VPS ๋ฐฐํฌ ```bash git clone https://github.com/diegosouzapw/OmniRoute.git cd OmniRoute && npm install && npm run build export JWT_SECRET="your-secure-secret-change-this" export INITIAL_PASSWORD="your-password" export DATA_DIR="/var/lib/omniroute" export PORT="20128" export HOSTNAME="0.0.0.0" export NODE_ENV="production" export NEXT_PUBLIC_BASE_URL="http://localhost:20128" export API_KEY_SECRET="endpoint-proxy-api-key-secret" npm run start # Or: pm2 start npm --name omniroute -- start ``` ### ๋„์ปค ```bash # Build image (default = runner-cli with codex/claude/droid preinstalled) docker build -t omniroute:cli . # Portable mode (recommended) docker run -d --name omniroute -p 20128:20128 --env-file ./.env -v omniroute-data:/app/data omniroute:cli ``` CLI ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ ํ˜ธ์ŠคํŠธ ํ†ตํ•ฉ ๋ชจ๋“œ์˜ ๊ฒฝ์šฐ ๊ธฐ๋ณธ ๋ฌธ์„œ์˜ Docker ์„น์…˜์„ ์ฐธ์กฐํ•˜์„ธ์š”. ### ํ™˜๊ฒฝ ๋ณ€์ˆ˜ | ๋ณ€์ˆ˜ | ๊ธฐ๋ณธ๊ฐ’ | ์„ค๋ช… | | --------------------- | ------------------------------------ | ----------------------------------------------- | | `JWT_SECRET` | `omniroute-default-secret-change-me` | JWT ์„œ๋ช… ๋น„๋ฐ€(**ํ”„๋กœ๋•์…˜ ๋ณ€๊ฒฝ**) | | `INITIAL_PASSWORD` | `123456` | ์ฒซ ๋ฒˆ์งธ ๋กœ๊ทธ์ธ ๋น„๋ฐ€๋ฒˆํ˜ธ | | `DATA_DIR` | `~/.omniroute` | ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ(db, ์‚ฌ์šฉ๋Ÿ‰, ๋กœ๊ทธ) | | `PORT` | ํ”„๋ ˆ์ž„์›Œํฌ ๊ธฐ๋ณธ๊ฐ’ | ์„œ๋น„์Šค ํฌํŠธ(์˜ˆ์‹œ์—์„œ๋Š” `20128`) | | `HOSTNAME` | ํ”„๋ ˆ์ž„์›Œํฌ ๊ธฐ๋ณธ๊ฐ’ | ํ˜ธ์ŠคํŠธ ๋ฐ”์ธ๋”ฉ(Docker์˜ ๊ธฐ๋ณธ๊ฐ’์€ `0.0.0.0`) | | `NODE_ENV` | ๋Ÿฐํƒ€์ž„ ๊ธฐ๋ณธ๊ฐ’ | ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด `production` ์„ค์ • | | `BASE_URL` | `http://localhost:20128` | ์„œ๋ฒ„์ธก ๋‚ด๋ถ€ ๊ธฐ๋ณธ URL | | `CLOUD_URL` | `https://omniroute.dev` | ํด๋ผ์šฐ๋“œ ๋™๊ธฐํ™” ์—”๋“œํฌ์ธํŠธ ๊ธฐ๋ณธ URL | | `API_KEY_SECRET` | `endpoint-proxy-api-key-secret` | ์ƒ์„ฑ๋œ API ํ‚ค์— ๋Œ€ํ•œ HMAC ๋น„๋ฐ€ | | `REQUIRE_API_KEY` | `false` | `/v1/*`์— Bearer API ํ‚ค ์ ์šฉ | | `ENABLE_REQUEST_LOGS` | `false` | ์š”์ฒญ/์‘๋‹ต ๋กœ๊ทธ ํ™œ์„ฑํ™” | | `AUTH_COOKIE_SECURE` | `false` | `Secure` ์ธ์ฆ ์ฟ ํ‚ค ๊ฐ•์ œ(HTTPS ์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ ๋’ค) | ์ „์ฒด ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ฐธ์กฐ๋Š” [README](../README.md)์„ ์ฐธ์กฐํ•˜์„ธ์š”. --- ## ๐Ÿ“Š ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋ธ
์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ชจ๋ธ ๋ณด๊ธฐ **Claude ์ฝ”๋“œ(`cc/`)** โ€” Pro/Max: `cc/claude-opus-4-6`, `cc/claude-sonnet-4-5-20250929`, `cc/claude-haiku-4-5-20251001` **์ฝ”๋ฑ์Šค(`cx/`)** โ€” ํ”Œ๋Ÿฌ์Šค/ํ”„๋กœ: `cx/gpt-5.2-codex`, `cx/gpt-5.1-codex-max` **Gemini CLI(`gc/`)** โ€” ๋ฌด๋ฃŒ: `gc/gemini-3-flash-preview`, `gc/gemini-2.5-pro` **GitHub ๋ถ€์กฐ์ข…์‚ฌ(`gh/`)**: `gh/gpt-5`, `gh/claude-4.5-sonnet` **GLM (`glm/`)** โ€” $0.6/1M: `glm/glm-4.7` **MiniMax(`minimax/`)** โ€” $0.2/1M: `minimax/MiniMax-M2.1` **iFlow(`if/`)** โ€” ๋ฌด๋ฃŒ: `if/kimi-k2-thinking`, `if/qwen3-coder-plus`, `if/deepseek-r1` **Qwen(`qw/`)** โ€” ๋ฌด๋ฃŒ: `qw/qwen3-coder-plus`, `qw/qwen3-coder-flash` **ํ‚ค๋กœ(`kr/`)** โ€” ๋ฌด๋ฃŒ: `kr/claude-sonnet-4.5`, `kr/claude-haiku-4.5` **DeepSeek(`ds/`)**: `ds/deepseek-chat`, `ds/deepseek-reasoner` **๊ทธ๋กœํฌ(`groq/`)**: `groq/llama-3.3-70b-versatile`, `groq/llama-4-maverick-17b-128e-instruct` **xAI(`xai/`)**: `xai/grok-4`, `xai/grok-4-0709-fast-reasoning`, `xai/grok-code-mini` **๋ฏธ์ŠคํŠธ๋ž„(`mistral/`)**: `mistral/mistral-large-2501`, `mistral/codestral-2501` **๋ณต์žก์„ฑ(`pplx/`)**: `pplx/sonar-pro`, `pplx/sonar` **ํ•จ๊ป˜ํ•˜๋Š” AI(`together/`)**: `together/meta-llama/Llama-3.3-70B-Instruct-Turbo` **๋ถˆ๊ฝƒ๋†€์ด AI(`fireworks/`)**: `fireworks/accounts/fireworks/models/deepseek-v3p1` **๋Œ€๋‡Œ(`cerebras/`)**: `cerebras/llama-3.3-70b` **Cohere(`cohere/`)**: `cohere/command-r-plus-08-2024` **NVIDIA NIM(`nvidia/`)**: `nvidia/nvidia/llama-3.3-70b-instruct`
--- ## ๐Ÿงฉ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ ### ๋งž์ถค ๋ชจ๋ธ ์•ฑ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๊ณต๊ธ‰์ž์— ๋ชจ๋ธ ID๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”. ```bash # Via API curl -X POST http://localhost:20128/api/provider-models \ -H "Content-Type: application/json" \ -d '{"provider": "openai", "modelId": "gpt-4.5-preview", "modelName": "GPT-4.5 Preview"}' # List: curl http://localhost:20128/api/provider-models?provider=openai # Remove: curl -X DELETE "http://localhost:20128/api/provider-models?provider=openai&model=gpt-4.5-preview" ``` ๋˜๋Š” ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค: **๊ณต๊ธ‰์ž โ†’ [๊ณต๊ธ‰์ž] โ†’ ์‚ฌ์šฉ์ž ์ •์˜ ๋ชจ๋ธ**. ### ์ „์šฉ ๊ณต๊ธ‰์ž ๊ฒฝ๋กœ ๋ชจ๋ธ ๊ฒ€์ฆ์„ ํ†ตํ•ด ์š”์ฒญ์„ ํŠน์ • ๊ณต๊ธ‰์ž์—๊ฒŒ ์ง์ ‘ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค. ```bash POST http://localhost:20128/v1/providers/openai/chat/completions POST http://localhost:20128/v1/providers/openai/embeddings POST http://localhost:20128/v1/providers/fireworks/images/generations ``` ๊ณต๊ธ‰์ž ์ ‘๋‘์‚ฌ๊ฐ€ ๋ˆ„๋ฝ๋œ ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋ธ์€ `400`์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ### ๋„คํŠธ์›Œํฌ ํ”„๋ก์‹œ ๊ตฌ์„ฑ ```bash # Set global proxy curl -X PUT http://localhost:20128/api/settings/proxy \ -d '{"global": {"type":"http","host":"proxy.example.com","port":"8080"}}' # Per-provider proxy curl -X PUT http://localhost:20128/api/settings/proxy \ -d '{"providers": {"openai": {"type":"socks5","host":"proxy.example.com","port":"1080"}}}' # Test proxy curl -X POST http://localhost:20128/api/settings/proxy/test \ -d '{"proxy":{"type":"socks5","host":"proxy.example.com","port":"1080"}}' ``` **์šฐ์„ ์ˆœ์œ„:** ํ‚ค๋ณ„ โ†’ ์ฝค๋ณด๋ณ„ โ†’ ๊ณต๊ธ‰์ž๋ณ„ โ†’ ๊ธ€๋กœ๋ฒŒ โ†’ ํ™˜๊ฒฝ. ### ๋ชจ๋ธ ์นดํƒˆ๋กœ๊ทธ API ```bash curl http://localhost:20128/api/models/catalog ``` ์œ ํ˜•(`chat`, `embedding`, `image`)์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณต๊ธ‰์ž๋ณ„๋กœ ๊ทธ๋ฃนํ™”๋œ ๋ชจ๋ธ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ### ํด๋ผ์šฐ๋“œ ๋™๊ธฐํ™” - ์—ฌ๋Ÿฌ ์žฅ์น˜์—์„œ ๊ณต๊ธ‰์ž, ์ฝค๋ณด ๋ฐ ์„ค์ •์„ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. - ์‹œ๊ฐ„ ์ดˆ๊ณผ + ๋น ๋ฅธ ์‹คํŒจ๋ฅผ ํ†ตํ•œ ์ž๋™ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋™๊ธฐํ™” - ํ”„๋กœ๋•์…˜์—์„œ๋Š” ์„œ๋ฒ„์ธก `BASE_URL`/`CLOUD_URL`์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ### LLM ๊ฒŒ์ดํŠธ์›จ์ด ์ธํ…”๋ฆฌ์ „์Šค(9๋‹จ๊ณ„) - **์˜๋ฏธ ์ฒด๊ณ„ ์บ์‹œ** โ€” ๋น„์ŠคํŠธ๋ฆฌ๋ฐ, ์˜จ๋„=0 ์‘๋‹ต์„ ์ž๋™ ์บ์‹œํ•ฉ๋‹ˆ๋‹ค(`X-OmniRoute-No-Cache: true`์œผ๋กœ ์šฐํšŒ). - **Idempotency ์š”์ฒญ** โ€” `Idempotency-Key` ๋˜๋Š” `X-Request-Id` ํ—ค๋”๋ฅผ ํ†ตํ•ด 5์ดˆ ์ด๋‚ด์— ์š”์ฒญ์„ ์ค‘๋ณต ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. - **์ง„ํ–‰ ์ƒํ™ฉ ์ถ”์ ** โ€” `X-OmniRoute-Progress: true` ํ—ค๋”๋ฅผ ํ†ตํ•œ SSE `event: progress` ์ด๋ฒคํŠธ ์„ ํƒ --- ### ๋ฒˆ์—ญ๊ฐ€ ๋†€์ดํ„ฐ **๋Œ€์‹œ๋ณด๋“œ โ†’ ๋ฒˆ์—ญ๊ธฐ**๋ฅผ ํ†ตํ•ด ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค. OmniRoute๊ฐ€ ๊ณต๊ธ‰์ž ๊ฐ„ API ์š”์ฒญ์„ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋””๋ฒ„๊น…ํ•˜๊ณ  ์‹œ๊ฐํ™”ํ•ฉ๋‹ˆ๋‹ค. | ๋ชจ๋“œ | ๋ชฉ์  | | ----------------- | ------------------------------------------------------------------------- | | **๋†€์ดํ„ฐ** | ์†Œ์Šค/ํƒ€๊ฒŸ ํ˜•์‹์„ ์„ ํƒํ•˜๊ณ , ์š”์ฒญ์„ ๋ถ™์—ฌ๋„ฃ๊ณ , ๋ฒˆ์—ญ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ฆ‰์‹œ ํ™•์ธํ•˜์„ธ์š” | | **์ฑ„ํŒ… ํ…Œ์Šคํ„ฐ** | ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ  ์ „์ฒด ์š”์ฒญ/์‘๋‹ต ์ฃผ๊ธฐ ๊ฒ€์‚ฌ | | **ํ…Œ์ŠคํŠธ ๋ฒค์น˜** | ์—ฌ๋Ÿฌ ํ˜•์‹ ์กฐํ•ฉ์— ๊ฑธ์ณ ์ผ๊ด„ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋ฒˆ์—ญ ์ •ํ™•์„ฑ ํ™•์ธ | | **๋ผ์ด๋ธŒ ๋ชจ๋‹ˆํ„ฐ** | ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•œ ์š”์ฒญ ํ๋ฆ„์— ๋”ฐ๋ผ ์‹ค์‹œ๊ฐ„ ๋ฒˆ์—ญ ๋ณด๊ธฐ | **์‚ฌ์šฉ ์‚ฌ๋ก€:** - ํŠน์ • ํด๋ผ์ด์–ธํŠธ/๊ณต๊ธ‰์ž ์กฐํ•ฉ์ด ์‹คํŒจํ•˜๋Š” ์ด์œ  ๋””๋ฒ„๊ทธ - ์ƒ๊ฐ ํƒœ๊ทธ, ๋„๊ตฌ ํ˜ธ์ถœ ๋ฐ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ฒˆ์—ญ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. - OpenAI, Claude, Gemini ๋ฐ Responses API ํ˜•์‹ ๊ฐ„์˜ ํ˜•์‹ ์ฐจ์ด ๋น„๊ต --- ### ๋ผ์šฐํŒ… ์ „๋žต **๋Œ€์‹œ๋ณด๋“œ โ†’ ์„ค์ • โ†’ ๋ผ์šฐํŒ…**์„ ํ†ตํ•ด ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. | ์ „๋žต | ์„ค๋ช… | | -------------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------ | | **๋จผ์ € ์ฑ„์šฐ๊ธฐ** | ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ๊ณ„์ •์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ณ„์ •์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์„ ๋•Œ๊นŒ์ง€ ๋ชจ๋“  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. | | **๋ผ์šด๋“œ ๋กœ๋นˆ** | ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ๊ณ ์ • ํ•œ๋„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ๊ณ„์ •์„ ์ˆœํ™˜ํ•ฉ๋‹ˆ๋‹ค(๊ธฐ๋ณธ๊ฐ’: ๊ณ„์ •๋‹น ํ˜ธ์ถœ 3ํšŒ) | | **P2C(๋‘ ๊ฐ€์ง€ ์„ ํƒ์˜ ํž˜)** | 2๊ฐœ์˜ ๋ฌด์ž‘์œ„ ๊ณ„์ •์„ ์„ ํƒํ•˜๊ณ  ๋” ๊ฑด๊ฐ•ํ•œ ๊ณ„์ •์œผ๋กœ ๋ผ์šฐํŒ… โ€” ๊ฑด๊ฐ•์— ๋Œ€ํ•œ ์ธ์‹๊ณผ ๋ถ€ํ•˜์˜ ๊ท ํ˜•์„ ์œ ์ง€ | | **๋žœ๋ค** | Fisher-Yates shuffle | ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์š”์ฒญ์— ๋Œ€ํ•ด ๋ฌด์ž‘์œ„๋กœ ๊ณ„์ •์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. | | **์ตœ์†Œ ์‚ฌ์šฉ** | ๊ฐ€์žฅ ์˜ค๋ž˜๋œ `lastUsedAt` ํƒ€์ž„์Šคํƒฌํ”„๊ฐ€ ์žˆ๋Š” ๊ณ„์ •์œผ๋กœ ๋ผ์šฐํŒ…ํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ์„ ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„์‚ฐ | | **๋น„์šฉ ์ตœ์ ํ™”** | ๊ฐ€์žฅ ๋‚ฎ์€ ๋น„์šฉ์˜ ๊ณต๊ธ‰์ž๋ฅผ ์œ„ํ•ด ์ตœ์ ํ™”ํ•˜์—ฌ ์šฐ์„ ์ˆœ์œ„ ๊ฐ’์ด ๊ฐ€์žฅ ๋‚ฎ์€ ๊ณ„์ •์œผ๋กœ ๋ผ์šฐํŒ… | #### ์™€์ผ๋“œ์นด๋“œ ๋ชจ๋ธ ๋ณ„์นญ ๋ชจ๋ธ ์ด๋ฆ„์„ ๋‹ค์‹œ ๋งคํ•‘ํ•˜๋Š” ์™€์ผ๋“œ์นด๋“œ ํŒจํ„ด์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ``` Pattern: claude-sonnet-* โ†’ Target: cc/claude-sonnet-4-5-20250929 Pattern: gpt-* โ†’ Target: gh/gpt-5.1-codex ``` ์™€์ผ๋“œ์นด๋“œ๋Š” `*`(๋ชจ๋“  ๋ฌธ์ž) ๋ฐ `?`(๋‹จ์ผ ๋ฌธ์ž)์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. #### ๋Œ€์ฒด ์ฒด์ธ ๋ชจ๋“  ์š”์ฒญ์— ์ ์šฉ๋˜๋Š” ์ „์—ญ ๋Œ€์ฒด ์ฒด์ธ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ``` Chain: production-fallback 1. cc/claude-opus-4-6 2. gh/gpt-5.1-codex 3. glm/glm-4.7 ``` --- ### ํƒ„๋ ฅ์„ฑ ๋ฐ ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ **๋Œ€์‹œ๋ณด๋“œ โ†’ ์„ค์ • โ†’ ๋ณต์›๋ ฅ**์„ ํ†ตํ•ด ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. OmniRoute๋Š” ๋‹ค์Œ ๋„ค ๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณต๊ธ‰์ž ์ˆ˜์ค€ ๋ณต์›๋ ฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. 1. **๊ณต๊ธ‰์ž ํ”„๋กœํ•„** โ€” ๋‹ค์Œ์— ๋Œ€ํ•œ ๊ณต๊ธ‰์ž๋ณ„ ๊ตฌ์„ฑ: - ์‹คํŒจ ์ž„๊ณ„๊ฐ’(๊ฐœ๋ฐฉ ์ „ ์‹คํŒจ ํšŸ์ˆ˜) - ์ฟจ๋‹ค์šด ์‹œ๊ฐ„ - ๋น„์œจ ์ œํ•œ ๊ฐ์ง€ ๊ฐ๋„ - ์ง€์ˆ˜ ๋ฐฑ์˜คํ”„ ๋งค๊ฐœ๋ณ€์ˆ˜ 2. **ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ์†๋„ ์ œํ•œ** โ€” ๋Œ€์‹œ๋ณด๋“œ์—์„œ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ ์ˆ˜์ค€ ๊ธฐ๋ณธ๊ฐ’: - **๋ถ„๋‹น ์š”์ฒญ(RPM)** โ€” ๊ณ„์ •๋‹น ๋ถ„๋‹น ์ตœ๋Œ€ ์š”์ฒญ ์ˆ˜ - **์š”์ฒญ ๊ฐ„ ์ตœ์†Œ ์‹œ๊ฐ„** โ€” ์š”์ฒญ ๊ฐ„ ์ตœ์†Œ ๊ฐ„๊ฒฉ(๋ฐ€๋ฆฌ์ดˆ) - **์ตœ๋Œ€ ๋™์‹œ ์š”์ฒญ** โ€” ๊ณ„์ •๋‹น ์ตœ๋Œ€ ๋™์‹œ ์š”์ฒญ - ์ˆ˜์ •ํ•˜๋ ค๋ฉด **์ˆ˜์ •**์„ ํด๋ฆญํ•œ ๋‹ค์Œ **์ €์žฅ** ๋˜๋Š” **์ทจ์†Œ**๋ฅผ ํด๋ฆญํ•˜์„ธ์š”. ๊ฐ’์€ ๋ณต์›๋ ฅ API๋ฅผ ํ†ตํ•ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. 3. **ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ** โ€” ๊ณต๊ธ‰์ž๋ณ„ ์˜ค๋ฅ˜๋ฅผ ์ถ”์ ํ•˜๊ณ  ์ž„๊ณ„๊ฐ’์— ๋„๋‹ฌํ•˜๋ฉด ์ž๋™์œผ๋กœ ํšŒ๋กœ๋ฅผ ์—ฝ๋‹ˆ๋‹ค. - **CLOSED**(์ •์ƒ) โ€” ์š”์ฒญ ํ๋ฆ„์ด ์ •์ƒ์ ์œผ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. - **OPEN** โ€” ๋ฐ˜๋ณต์ ์ธ ์‹คํŒจ ํ›„ ๊ณต๊ธ‰์ž๊ฐ€ ์ผ์‹œ์ ์œผ๋กœ ์ฐจ๋‹จ๋ฉ๋‹ˆ๋‹ค. - **HALF_OPEN** โ€” ๊ณต๊ธ‰์ž๊ฐ€ ๋ณต๊ตฌ๋˜์—ˆ๋Š”์ง€ ํ…Œ์ŠคํŠธ 4. **์ •์ฑ… ๋ฐ ์ž ๊ธด ์‹๋ณ„์ž** - ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ ์ƒํƒœ์™€ ๊ฐ•์ œ ์ž ๊ธˆ ํ•ด์ œ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ์ž ๊ธด ์‹๋ณ„์ž๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. 5. **๋น„์œจ ์ œํ•œ ์ž๋™ ๊ฐ์ง€** โ€” `429` ๋ฐ `Retry-After` ํ—ค๋”๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์—ฌ ๊ณต๊ธ‰์ž ๋น„์œจ ์ œํ•œ์— ๋„๋‹ฌํ•˜๋Š” ๊ฒƒ์„ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. **ํ”„๋กœ ํŒ:** ๊ณต๊ธ‰์ž๊ฐ€ ์ค‘๋‹จ์—์„œ ๋ณต๊ตฌ๋  ๋•Œ **๋ชจ๋‘ ์žฌ์„ค์ •** ๋ฒ„ํŠผ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ์™€ ์ฟจ๋‹ค์šด์„ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. --- ### ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด๋ณด๋‚ด๊ธฐ/๊ฐ€์ ธ์˜ค๊ธฐ **๋Œ€์‹œ๋ณด๋“œ โ†’ ์„ค์ • โ†’ ์‹œ์Šคํ…œ ๋ฐ ์Šคํ† ๋ฆฌ์ง€**์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฑ์—…์„ ๊ด€๋ฆฌํ•˜์„ธ์š”. | ์•ก์…˜ | ์„ค๋ช… | | -------------------------- | ---------------------------------------------------------------------------------------------------------------------- | | **๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด๋ณด๋‚ด๊ธฐ** | ํ˜„์žฌ SQLite ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ `.sqlite` ํŒŒ์ผ๋กœ ๋‹ค์šด๋กœ๋“œ | | **๋ชจ๋‘ ๋‚ด๋ณด๋‚ด๊ธฐ(.tar.gz)** | ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์„ค์ •, ์ฝค๋ณด, ๊ณต๊ธ‰์ž ์—ฐ๊ฒฐ(์ž๊ฒฉ ์ฆ๋ช… ์—†์Œ), API ํ‚ค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ ์ „์ฒด ๋ฐฑ์—… ์•„์นด์ด๋ธŒ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. | | **๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ€์ ธ์˜ค๊ธฐ** | ํ˜„์žฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋Œ€์ฒดํ•˜๋ ค๋ฉด `.sqlite` ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜์„ธ์š”. ๊ฐ€์ ธ์˜ค๊ธฐ ์ „ ๋ฐฑ์—…์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. | ```bash # API: Export database curl -o backup.sqlite http://localhost:20128/api/db-backups/export # API: Export all (full archive) curl -o backup.tar.gz http://localhost:20128/api/db-backups/exportAll # API: Import database curl -X POST http://localhost:20128/api/db-backups/import \ -F "file=@backup.sqlite" ``` **๊ฐ€์ ธ์˜ค๊ธฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ:** ๊ฐ€์ ธ์˜จ ํŒŒ์ผ์€ ๋ฌด๊ฒฐ์„ฑ(SQLite pragma ๊ฒ€์‚ฌ), ํ•„์ˆ˜ ํ…Œ์ด๋ธ”(`provider_connections`, `provider_nodes`, `combos`, `api_keys`) ๋ฐ ํฌ๊ธฐ(์ตœ๋Œ€ 100MB)์— ๋Œ€ํ•ด ์œ ํšจ์„ฑ์ด ๊ฒ€์‚ฌ๋ฉ๋‹ˆ๋‹ค. **์‚ฌ์šฉ ์‚ฌ๋ก€:** - ๋จธ์‹  ๊ฐ„ OmniRoute ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ - ์žฌํ•ด ๋ณต๊ตฌ๋ฅผ ์œ„ํ•œ ์™ธ๋ถ€ ๋ฐฑ์—… ์ƒ์„ฑ - ํŒ€์› ๊ฐ„ ๊ตฌ์„ฑ ๊ณต์œ (๋ชจ๋‘ ๋‚ด๋ณด๋‚ด๊ธฐ โ†’ ์•„์นด์ด๋ธŒ ๊ณต์œ ) --- ### ์„ค์ • ๋Œ€์‹œ๋ณด๋“œ ์„ค์ • ํŽ˜์ด์ง€๋Š” ์‰ฝ๊ฒŒ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก 5๊ฐœ์˜ ํƒญ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. | ํƒญ | ๋‚ด์šฉ | | ---------- | ------------------------------------------------------------------------------ | | **๋ณด์•ˆ** | ๋กœ๊ทธ์ธ/๋น„๋ฐ€๋ฒˆํ˜ธ ์„ค์ •, IP ์•ก์„ธ์Šค ์ œ์–ด, `/models`์— ๋Œ€ํ•œ API ์ธ์ฆ ๋ฐ ๊ณต๊ธ‰์ž ์ฐจ๋‹จ | | **๋ผ์šฐํŒ…** | ๊ธ€๋กœ๋ฒŒ ๋ผ์šฐํŒ… ์ „๋žต(6๊ฐœ ์˜ต์…˜), ์™€์ผ๋“œ์นด๋“œ ๋ชจ๋ธ ๋ณ„์นญ, ํด๋ฐฑ ์ฒด์ธ, ์ฝค๋ณด ๊ธฐ๋ณธ๊ฐ’ | | **ํƒ„๋ ฅ์„ฑ** | ๊ณต๊ธ‰์ž ํ”„๋กœํ•„, ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ์†๋„ ์ œํ•œ, ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ ์ƒํƒœ, ์ •์ฑ… ๋ฐ ์ž ๊ธด ์‹๋ณ„์ž | | **AI** | ์ƒ๊ฐํ•˜๋Š” ์˜ˆ์‚ฐ ๊ตฌ์„ฑ, ๊ธ€๋กœ๋ฒŒ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ์ฃผ์ž…, ํ”„๋กฌํ”„ํŠธ ์บ์‹œ ํ†ต๊ณ„ | | **๊ณ ๊ธ‰** | ๊ธ€๋กœ๋ฒŒ ํ”„๋ก์‹œ ๊ตฌ์„ฑ(HTTP/SOCKS5) | --- ### ๋น„์šฉ ๋ฐ ์˜ˆ์‚ฐ ๊ด€๋ฆฌ **๋Œ€์‹œ๋ณด๋“œ โ†’ ๋น„์šฉ**์„ ํ†ตํ•ด ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค. | ํƒญ | ๋ชฉ์  | | -------- | ----------------------------------------------------------------- | | **์˜ˆ์‚ฐ** | ์ผ๋ณ„/์ฃผ๋ณ„/์›”๋ณ„ ์˜ˆ์‚ฐ ๋ฐ ์‹ค์‹œ๊ฐ„ ์ถ”์ ์„ ํ†ตํ•ด API ํ‚ค๋ณ„ ์ง€์ถœ ํ•œ๋„ ์„ค์ • | | **๊ฐ€๊ฒฉ** | ๋ชจ๋ธ ๊ฐ€๊ฒฉ ํ•ญ๋ชฉ ๋ณด๊ธฐ ๋ฐ ํŽธ์ง‘ - ๊ณต๊ธ‰์ž๋‹น 1K ์ž…๋ ฅ/์ถœ๋ ฅ ํ† ํฐ๋‹น ๋น„์šฉ | ```bash # API: Set a budget curl -X POST http://localhost:20128/api/usage/budget \ -H "Content-Type: application/json" \ -d '{"keyId": "key-123", "limit": 50.00, "period": "monthly"}' # API: Get current budget status curl http://localhost:20128/api/usage/budget ``` **๋น„์šฉ ์ถ”์ :** ๋ชจ๋“  ์š”์ฒญ์€ ํ† ํฐ ์‚ฌ์šฉ๋Ÿ‰์„ ๊ธฐ๋กํ•˜๊ณ  ๊ฐ€๊ฒฉํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„์šฉ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. **๋Œ€์‹œ๋ณด๋“œ โ†’ ์‚ฌ์šฉ๋Ÿ‰**์—์„œ ๊ณต๊ธ‰์ž, ๋ชจ๋ธ, API ํ‚ค๋ณ„ ๋ถ„์„์„ ํ™•์ธํ•˜์„ธ์š”. --- ### ์˜ค๋””์˜ค ์ „์‚ฌ OmniRoute๋Š” OpenAI ํ˜ธํ™˜ ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ†ตํ•ด ์˜ค๋””์˜ค ์ „์‚ฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ```bash POST /v1/audio/transcriptions Authorization: Bearer your-api-key Content-Type: multipart/form-data # Example with curl curl -X POST http://localhost:20128/v1/audio/transcriptions \ -H "Authorization: Bearer your-api-key" \ -F "file=@audio.mp3" \ -F "model=deepgram/nova-3" ``` ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณต๊ธ‰์ž: **Deepgram**(`deepgram/`), **AssemblyAI**(`assemblyai/`). ์ง€์›๋˜๋Š” ์˜ค๋””์˜ค ํ˜•์‹: `mp3`, `wav`, `m4a`, `flac`, `ogg`, `webm`. --- ### ์ฝค๋ณด ๋ฐธ๋Ÿฐ์‹ฑ ์ „๋žต **๋Œ€์‹œ๋ณด๋“œ โ†’ ์ฝค๋ณด โ†’ ์ƒ์„ฑ/ํŽธ์ง‘ โ†’ ์ „๋žต**์—์„œ ์ฝค๋ณด๋ณ„ ๋ฐธ๋Ÿฐ์‹ฑ์„ ๊ตฌ์„ฑํ•˜์„ธ์š”. | ์ „๋žต | ์„ค๋ช… | | -------------------- | ----------------------------------------------------------- | | **๋ผ์šด๋“œ ๋กœ๋นˆ** | ๋ชจ๋ธ์„ ์ˆœ์ฐจ์ ์œผ๋กœ ํšŒ์ „ | | **์šฐ์„ ์ˆœ์œ„** | ํ•ญ์ƒ ์ฒซ ๋ฒˆ์งธ ๋ชจ๋ธ์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ์—๋งŒ ํด๋ฐฑ | | **๋žœ๋ค** | ๊ฐ ์š”์ฒญ์— ๋Œ€ํ•œ ์ฝค๋ณด์—์„œ ๋ฌด์ž‘์œ„ ๋ชจ๋ธ ์„ ํƒ | | **๊ฐ€์ค‘์น˜** | ๋ชจ๋ธ๋ณ„๋กœ ํ• ๋‹น๋œ ๊ฐ€์ค‘์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋น„๋ก€์ ์œผ๋กœ ๋ผ์šฐํŒ… | | **๊ฐ€์žฅ ์ ๊ฒŒ ์‚ฌ์šฉ๋จ** | ์ตœ๊ทผ ์š”์ฒญ์ด ๊ฐ€์žฅ ์ ์€ ๋ชจ๋ธ๋กœ ๋ผ์šฐํŒ…(์ฝค๋ณด ๋ฉ”ํŠธ๋ฆญ ์‚ฌ์šฉ) | | **๋น„์šฉ ์ตœ์ ํ™”** | ๊ฐ€์žฅ ์ €๋ ดํ•œ ๋ชจ๋ธ๋กœ ์—ฐ๊ฒฐ(๊ฐ€๊ฒฉํ‘œ ์‚ฌ์šฉ) | ๊ธ€๋กœ๋ฒŒ ์ฝค๋ณด ๊ธฐ๋ณธ๊ฐ’์€ **๋Œ€์‹œ๋ณด๋“œ โ†’ ์„ค์ • โ†’ ๋ผ์šฐํŒ… โ†’ ์ฝค๋ณด ๊ธฐ๋ณธ๊ฐ’**์—์„œ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. --- ### ๊ฑด๊ฐ• ๋Œ€์‹œ๋ณด๋“œ **๋Œ€์‹œ๋ณด๋“œ โ†’ ๊ฑด๊ฐ•**์„ ํ†ตํ•ด ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค. 6๊ฐœ์˜ ์นด๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ์‹ค์‹œ๊ฐ„ ์‹œ์Šคํ…œ ์ƒํƒœ ๊ฐœ์š”: | ์นด๋“œ | ํ‘œ์‹œ๋˜๋Š” ๋‚ด์šฉ | | ------------------ | ----------------------------------------------- | | **์‹œ์Šคํ…œ ์ƒํƒœ** | ๊ฐ€๋™ ์‹œ๊ฐ„, ๋ฒ„์ „, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰, ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ | | **์ œ๊ณต์ž ๊ฑด๊ฐ•** | ๊ณต๊ธ‰์ž๋ณ„ ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ ์ƒํƒœ(ํ์‡„/๊ฐœ๋ฐฉ/๋ฐ˜๊ฐœ๋ฐฉ) | | **๋น„์œจ ์ œํ•œ** | ๋‚จ์€ ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ๊ณ„์ •๋‹น ํ™œ์„ฑ ์†๋„ ์ œํ•œ ์ฟจ๋‹ค์šด | | **ํ™œ์„ฑ ์ž ๊ธˆ** | ์ž ๊ธˆ ์ •์ฑ…์œผ๋กœ ์ธํ•ด ์ผ์‹œ์ ์œผ๋กœ ์ฐจ๋‹จ๋œ ์ œ๊ณต์—…์ฒด | | **์„œ๋ช… ์บ์‹œ** | ์ค‘๋ณต ์ œ๊ฑฐ ์บ์‹œ ํ†ต๊ณ„(ํ™œ์„ฑ ํ‚ค, ์ ์ค‘๋ฅ ) | | **์ง€์—ฐ ์›๊ฒฉ ์ธก์ •** | ๊ณต๊ธ‰์ž๋ณ„ p50/p95/p99 ๋Œ€๊ธฐ ์‹œ๊ฐ„ ์ง‘๊ณ„ | **ํ”„๋กœ ํŒ:** ์ƒํƒœ ํŽ˜์ด์ง€๋Š” 10์ดˆ๋งˆ๋‹ค ์ž๋™์œผ๋กœ ์ƒˆ๋กœ ๊ณ ์ณ์ง‘๋‹ˆ๋‹ค. ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ ์นด๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋–ค ๊ณต๊ธ‰์ž๊ฐ€ ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ๋Š”์ง€ ์‹๋ณ„ํ•˜์‹ญ์‹œ์˜ค.