๐ Setup Guide โ OmniRoute (ํ๊ตญ์ด)
์ค์น ๋ฐฉ๋ฒ
์น์ ์ ๋ชฉ: โ์ค์น ๋ฐฉ๋ฒโnpm (๊ถ์ฅ)
์น์ ์ ๋ชฉ: โnpm (๊ถ์ฅ)โnpm install -g omnirouteomniroute๋์๋ณด๋๋ http://localhost:20128์์ ์ด๋ฆฌ๋ฉฐ API ๊ธฐ๋ณธ URL์ http://localhost:20128/v1์
๋๋ค.
pnpm add -g omniroute@latest --allow-build=better-sqlite3 --allow-build=@swc/coreomniroutepnpm ์ฌ์ฉ์:
better-sqlite3๋ฐ@swc/core์ ๋ค์ดํฐ๋ธ ๋น๋ ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฑํํ๋ ค๋ฉด--allow-buildํ๋๊ทธ๊ฐ ํ์ํฉ๋๋ค. pnpm v11์ ์ ์ญ ์ค์น์์๋pnpm approve-builds -g๋ช ๋ น์ด ์ง์๋์ง ์์ต๋๋ค.
Arch Linux (AUR)
์น์ ์ ๋ชฉ: โArch Linux (AUR)โyay -S omniroute-binsystemctl --user enable --now omniroute.serviceAUR ํจํค์ง๋ OmniRoute๋ฅผ ์ค์นํ๊ณ systemd ์ฌ์ฉ์ ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
์์ค์์ ์ค์น
์น์ ์ ๋ชฉ: โ์์ค์์ ์ค์นโnpm installPORT=20128 DASHBOARD_PORT=20129 NEXT_PUBLIC_BASE_URL=http://localhost:20129 npm run devWindows ์ฐธ๊ณ : ๊ธฐ๋ณธ์ ์ผ๋ก OmniRoute๋ ๊ธฐ์กด
%USERPROFILE%\.omniroute๋๋ ํฐ๋ฆฌ๊ฐ ์์ ๋%APPDATA%\omniroute๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ค๋ฅธ ๋ฐ์ดํฐ ๋๋ ํฐ๋ฆฌ ์์น๋ฅผ ์ ํํ๋ ค๋ฉดDATA_DIR์ ์ค์ ํ์ธ์.
์ฐธ๊ณ :
npm install์ ์ฒ์ ์คํํ ๋.env.example์์.env๋ฅผ ์๋์ผ๋ก ์์ฑํฉ๋๋ค. ์ดํ ์ค์น์์๋ ๊ธฐ์กด.env๋ฅผ ๋ฎ์ด์ฐ์ง ์์ผ๋ฏ๋ก ์ฌ์ฉ์ ์ง์ ์ค์ ์ด ์ ์ง๋ฉ๋๋ค. ๋ค์ ์ด๊ธฐํํ๋ ค๋ฉด ์ฌ์คํํ๊ธฐ ์ ์.env๋ฅผ ์ญ์ ํ์ธ์.
Compose ํ๋กํ๊ณผ Caddy HTTPS๋ฅผ ํฌํจํ ์ ์ฒด Docker ์ค์ ์ Docker ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ฐ์คํฌํฑ ์ฑ (Electron)
์น์ ์ ๋ชฉ: โ๋ฐ์คํฌํฑ ์ฑ (Electron)โOmniRoute๋ Electron 41 + electron-builder 26.10์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋ ๋ฐ์คํฌํฑ ๋ํผ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ ์คํฌ๋ฆฝํธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค(์ํฌ์คํ์ด์ค ๋ฃจํธ).
npm run electron:dev # ํซ ๋ฆฌ๋ก๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์คํฌํฑ ์คํnpm run electron:build # ํ์ฌ OS์ฉ ๋น๋(์๋ ๊ฐ์ง)npm run electron:build:win # Windows ์ค์น ํ๋ก๊ทธ๋จ(NSIS + ํฌํฐ๋ธ)npm run electron:build:mac # macOS(dmg + zip, arm64+x64)npm run electron:build:linux # Linux(AppImage + deb + rpm)npm run electron:smoke:packaged # ํจํค์ง๋ ๋น๋ ์ค๋ชจํฌ ํ
์คํธ๋ฐ์คํฌํฑ ์ค์น ํ๋ก๊ทธ๋จ ๋ฆด๋ฆฌ์ค๋ GitHub Releases์ ์ฒจ๋ถ๋ฉ๋๋ค. ์๋ช
, IPC ๋ธ๋ฆฌ์ง, ๋ฐฐํฌํ ๋ฑ Electron์ ๋ํ ์ ์ฒด ์์ธ ์ค๋ช
์ ELECTRON_GUIDE.md๋ฅผ ์ฐธ์กฐํ์ธ์. (์ถํ ๋จ๊ณ์์ ์์ฑ๋จ).
ํค๋๋ฆฌ์ค ์๋ฒ (CI/์๋ํ)
์น์ ์ ๋ชฉ: โํค๋๋ฆฌ์ค ์๋ฒ (CI/์๋ํ)โ๋ฌด์ธ ์ค์ (Docker, Kubernetes, CI)์ ๊ฒฝ์ฐ ๋ค์์ ์ฌ์ฉํ์ธ์.
omniroute setup --non-interactiveomniroute providers test-batchํ๊ฒฝ ๋ณ์(INITIAL_PASSWORD, OMNIROUTE_WS_BRIDGE_SECRET ๋ฑ)์ ํจ๊ป ์ฌ์ฉํ๋ฉด OmniRoute ์ธ์คํด์ค๋ฅผ ์์ ํ ์คํฌ๋ฆฝํธ ๋ฐฉ์์ผ๋ก ์คํํ ์ ์์ต๋๋ค.
CLI ์ต์
์น์ ์ ๋ชฉ: โCLI ์ต์ โ| ๋ช ๋ น | ์ค๋ช |
|---|---|
omniroute |
์๋ฒ ์์(PORT=20128, ๋์ผํ ํฌํธ์์ API ๋ฐ ๋์๋ณด๋ ์ ๊ณต) |
omniroute setup |
๋น๋ฐ๋ฒํธ ๋ฐ ์ฒซ ๋ฒ์งธ ์ ๊ณต์๋ฅผ ์ํ ์๋ด์ CLI ์จ๋ณด๋ฉ |
omniroute doctor |
์๋ฒ๋ฅผ ์์ํ์ง ์๊ณ ๋ก์ปฌ ์ํ ๊ฒ์ฌ ์คํ |
omniroute providers |
CLI์์ ์ ๊ณต์ ๊ฒ์, ๋ชฉ๋ก ์กฐํ, ๊ฒ์ฆ ๋ฐ ํ ์คํธ |
omniroute config |
CLI ๋๊ตฌ ๊ตฌ์ฑ โ ๊ตฌ์ฑ ๋ชฉ๋ก ์กฐํ, ๊ฐ์ ธ์ค๊ธฐ, ์ค์ ๋ฐ ๊ฒ์ฆ |
omniroute status |
์คํ๋ผ์ธ ์ํ ๋์๋ณด๋ โ ๋ฒ์ , DB, ๋๊ตฌ, ๊ตฌ์ฑ |
omniroute logs |
API์ ์ฌ์ฉ ๋ก๊ทธ ์คํธ๋ฆฌ๋ฐ(--follow ์ง์) |
omniroute update |
OmniRoute ์ ๋ฐ์ดํธ ํ์ธ ๋๋ ์ ์ฉ |
omniroute provider |
์ ๊ณต์ ์ฐ๊ฒฐ ๊ด๋ฆฌ โ ์ถ๊ฐ, ๋ชฉ๋ก ์กฐํ, ์ ๊ฑฐ, ํ ์คํธ, ๊ธฐ๋ณธ๊ฐ ์ค์ |
omniroute --port 3000 |
ํ์ค/API ํฌํธ๋ฅผ 3000์ผ๋ก ์ค์ |
omniroute --mcp |
MCP ์๋ฒ ์์(stdio ์ ์ก ๋ฐฉ์) |
omniroute --no-open |
๋ธ๋ผ์ฐ์ ๋ฅผ ์๋์ผ๋ก ์ด์ง ์์ |
omniroute --help |
๋์๋ง ํ์ |
ํค๋๋ฆฌ์ค ์ค์ ์ ํ๋๊ทธ ๋๋ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํด ์คํฌ๋ฆฝํธ๋ก ์์ฑํ ์ ์์ต๋๋ค.
omniroute setup --non-interactive --password "$OMNIROUTE_PASSWORD"omniroute setup --non-interactive --add-provider --provider openai --api-key "$OPENAI_API_KEY"omniroute setup --non-interactive --add-provider --provider openai --api-key "$OPENAI_API_KEY" --test-provider๋์๋ณด๋๋ฅผ ์ด์ง ์๊ณ ๋ก์ปฌ ์ง๋จ์ ์คํํฉ๋๋ค.
omniroute doctoromniroute doctor --jsonomniroute doctor --no-liveness๋์๋ณด๋๋ฅผ ์ด์ง ์๊ณ SSH ๋๋ ์คํฌ๋ฆฝํธ์์ ์ ๊ณต์๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
omniroute providers availableomniroute providers available --search openaiomniroute providers available --category api-keyomniroute providers listomniroute providers test <id-or-name>omniroute providers test-allomniroute providers validateCLI ๋๊ตฌ ๊ตฌ์ฑ
์น์ ์ ๋ชฉ: โCLI ๋๊ตฌ ๊ตฌ์ฑโ1) ์ ๊ณต์ ์ฒด ์ฐ๊ฒฐ ๋ฐ API ํค ์์ฑ
์น์ ์ ๋ชฉ: โ1) ์ ๊ณต์ ์ฒด ์ฐ๊ฒฐ ๋ฐ API ํค ์์ฑโ- Dashboard โ
Providers๋ฅผ ์ด๊ณ ํ๋ ์ด์์ ์ ๊ณต์ ์ฒด๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค(OAuth ๋๋ API ํค). - Dashboard โ
Endpoints๋ฅผ ์ด๊ณ API ํค๋ฅผ ์์ฑํฉ๋๋ค. - (์ ํ ์ฌํญ) Dashboard โ
Combos๋ฅผ ์ด๊ณ ํด๋ฐฑ ์ฒด์ธ์ ์ค์ ํฉ๋๋ค.
2) ์ฝ๋ฉ ๋๊ตฌ ์ฐ๊ฒฐ
์น์ ์ ๋ชฉ: โ2) ์ฝ๋ฉ ๋๊ตฌ ์ฐ๊ฒฐโ๊ธฐ๋ณธ URL: http://localhost:20128/v1API ํค: [Endpoint ํ์ด์ง์์ ๋ณต์ฌ]๋ชจ๋ธ: if/qwen3.8-max-preview (๋๋ ์์์ ์ ๊ณต์
์ฒด/๋ชจ๋ธ ์ ๋์ฌ)ํธ์ง๊ธฐ์์ Authorization: Bearer ...๋ฅผ ์ ์กํ ์ ์๋ ๊ฒฝ์ฐ์๋ ํ ํฐ์ด ํฌํจ๋ ํธํ์ฑ ๊ธฐ๋ณธ URL์ ๋์ ์ฌ์ฉํฉ๋๋ค.
๊ธฐ๋ณธ URL: http://localhost:20128/api/v1/vscode/YOUR_KEY/๋ชจ๋ธ URL: http://localhost:20128/api/v1/vscode/YOUR_KEY/models์ฑํ
URL: http://localhost:20128/api/v1/vscode/YOUR_KEY/chat/completionsOllama ํ๊ทธ URL: http://localhost:20128/api/v1/vscode/YOUR_KEY/api/tagsClaude Code, Codex CLI, Cursor, Cline, OpenClaw, OpenCode ๋ฐ OpenAI ํธํ SDK์์ ์๋ํฉ๋๋ค.
setup-*๋ก ์๋ ๊ตฌ์ฑ
์น์
์ ๋ชฉ: โsetup-*๋ก ์๋ ๊ตฌ์ฑโ๊ธฐ๋ณธ URL๊ณผ ํค๋ฅผ ์ง์ ๋ถ์ฌ ๋ฃ๋ ๋์ , OmniRoute๊ฐ ์ค์๊ฐ ๋ชจ๋ธ ์นดํ๋ก๊ทธ๋ฅผ ๋ฐํ์ผ๋ก ๊ฐ ๋๊ตฌ์ ์์ฒด ๊ตฌ์ฑ์ ์์ฑํ๋๋ก ํ ์ ์์ต๋๋ค. ๋๊ตฌ๋ณ๋ก ํ๋์ ๋ช ๋ น์ ์ฌ์ฉํฉ๋๋ค.
omniroute setup-codex # ~/.codex/<name>.config.toml ํ๋กํomniroute setup-claude # ~/.claude/profiles/<name>/settings.jsonomniroute setup-opencode # ~/.config/opencode/opencode.json (OpenAI ํธํ)omniroute setup-cline # Cline CLI + VS Code ํ์ฅ ํ๋ก๊ทธ๋จ ์ค์ omniroute setup-kilo # Kilo Codeomniroute setup-continue # ~/.continue/config.yaml (Continue / cn)omniroute setup-cursor # Cursor์ ์ฑ ๋ด ์ค์ ์ ์ฐจ ์ถ๋ ฅomniroute setup-roo # Roo Code ๊ฐ์ ธ์ค๊ธฐ + autoImport ํฌ์ธํฐomniroute setup-crush # ~/.config/crush/crush.jsonomniroute setup-goose # ~/.config/goose/config.yamlomniroute setup-aider # ~/.aider.conf.ymlomniroute setup-qwen # ~/.qwen/settings.json + ~/.qwen/.env๊ฐ ๋ช
๋ น์ ์๊ฒฉ OmniRoute์ ๋ก์ปฌ ๋๊ตฌ๋ฅผ ์ฐ๊ฒฐํ๋๋ก ๊ตฌ์ฑํ๋ --remote <url> --api-key <key>์
๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ํ --dry-run์ ์ง์ํฉ๋๋ค. ์ฌ๋ฐ๋ฅธ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฃผ์
ํ๋ฉด์ ๊ตฌ์ฑ ํ์ผ์ ์ ํ ์์ฑํ์ง ์๊ณ CLI๋ฅผ ์คํํ๋ ค๋ฉด
๋ฒ์ฉ ์คํ ๋ช
๋ น์ธ omniroute run <target>(claude, codex, aider, goose, opencode, qwen, gemini)์ ์ฌ์ฉํฉ๋๋ค.
๊ธฐ์กด ๋๊ตฌ๋ณ ์คํ ๋ช
๋ น์ธ omniroute launch(Claude Code)์
omniroute launch-codex(Codex)๋ ๊ณ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ ์ฒด ํ(๊ฐ ๋ช
๋ น์ด ์์ฑํ๋ ํญ๋ชฉ, ๋ชจ๋ ํ๋๊ทธ, ๋ก์ปฌ๊ณผ ์๊ฒฉ์ ์ฐจ์ด, ๊ธฐ๋ณธ URL์
/v1 ๊ท์น)๋ **CLI ํตํฉ**์ ์ฐธ์กฐํ์ธ์.
๋๊ตฌ๋ณ ์์ธ ๊ตฌ์ฑ(Claude Code, Codex CLI, Cursor, Cline, OpenClaw, Kilo Code, Copilot ๋ฑ)์ ์ ์ฉ **CLI ๋๊ตฌ ๊ฐ์ด๋**๋ฅผ ์ฐธ์กฐํ์ธ์.
ํ๋กํ ์ฝ ์ค์ (MCP + A2A)
์น์ ์ ๋ชฉ: โํ๋กํ ์ฝ ์ค์ (MCP + A2A)โMCP ์ค์ (Model Context Protocol)
์น์ ์ ๋ชฉ: โMCP ์ค์ (Model Context Protocol)โstdio ๋ชจ๋์์ MCP ์ ์ก์ ์์ํฉ๋๋ค.
omniroute --mcp๊ถ์ฅ ๊ฒ์ฆ ์ ์ฐจ:
# 1. MCP ์๋ฒ ์์omniroute --mcp
# 2. MCP ํด๋ผ์ด์ธํธ์์ ๋ค์์ ํธ์ถ:omniroute_get_health # ์์คํ
์ํ๋ฅผ ๋ฐํํด์ผ ํจomniroute_list_combos # ํ์ฑ ์ฝค๋ณด๋ฅผ ๋ฐํํด์ผ ํจ
# 3. ๋๋ ์ ์ฒด E2E ์ ํ๊ตฐ ์คํ:npm run test:protocols:e2eMCP ํด๋ผ์ด์ธํธ ๊ตฌ์ฑ
์น์ ์ ๋ชฉ: โMCP ํด๋ผ์ด์ธํธ ๊ตฌ์ฑโClaude Code:
claude mcp add-server omniroute --type http --url http://localhost:20128/api/mcp/streamCursor / Cline:
MCP ์ค์ ์ ๋ค์์ ์ถ๊ฐํฉ๋๋ค.
{ "mcpServers": { "omniroute": { "command": "omniroute", "args": ["--mcp"], "env": {} } }}์ ์ฒด MCP ๋ฌธ์: MCP ์๋ฒ README โ ๋๊ตฌ 110๊ฐ, IDE ๊ตฌ์ฑ, Python/TS/Go ํด๋ผ์ด์ธํธ.
A2A ์ค์ (Agent-to-Agent Protocol)
์น์ ์ ๋ชฉ: โA2A ์ค์ (Agent-to-Agent Protocol)โAgent Card๋ฅผ ํ์ธํฉ๋๋ค.
curl http://localhost:20128/.well-known/agent.json์์ ์ ์ ์กํฉ๋๋ค.
curl -X POST http://localhost:20128/a2a \ -H 'content-type: application/json' \ -d '{"jsonrpc":"2.0","id":"quickstart","method":"message/send","params":{"skill":"quota-management","messages":[{"role":"user","content":"Give me a short quota summary."}]}}'์ ์ฒด A2A ๋ฌธ์: A2A ์๋ฒ README โ JSON-RPC 2.0, ์คํฌ, ์คํธ๋ฆฌ๋ฐ, ์์ ์๋ช ์ฃผ๊ธฐ.
ํ์์์ ๊ตฌ์ฑ
์น์ ์ ๋ชฉ: โํ์์์ ๊ตฌ์ฑโ๊ธฐ๋ณธ ํ์์์
์น์ ์ ๋ชฉ: โ๊ธฐ๋ณธ ํ์์์โ๋๋ถ๋ถ์ ๋ฐฐํฌ์์๋ ๋ค์ ๋ ๋ณ์๋ง ํ์ํฉ๋๋ค.
| ๋ณ์ | ๊ธฐ๋ณธ๊ฐ | ์ฉ๋ |
|---|---|---|
REQUEST_TIMEOUT_MS |
600000 |
์ ์คํธ๋ฆผ ์๋ต ์์ ํ์์์, ์จ๊ฒจ์ง Undici ํ์์์, TLS ์ง๋ฌธ ์์ฒญ ๋ฐ API ๋ธ๋ฆฌ์ง ์์ฒญ/ํ๋ก์ ํ์์์์ ์ฌ์ฉ๋๋ ๊ณตํต ๊ธฐ์ค๊ฐ |
STREAM_IDLE_TIMEOUT_MS |
REQUEST_TIMEOUT_MS์์ ์์ |
OmniRoute๊ฐ SSE ์คํธ๋ฆผ์ ์ค๋จํ๊ธฐ ์ ๊น์ง ํ์ฉ๋๋ ์คํธ๋ฆฌ๋ฐ ์ฒญํฌ ๊ฐ ์ต๋ ์๊ฐ ๊ฐ๊ฒฉ |
์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ ์ง๋ฉ๋๋ค. ๊ธฐ์กด FETCH_TIMEOUT_MS, API_BRIDGE_PROXY_TIMEOUT_MS ๋ฐ ๊ธฐํ ๊ณ์ธต๋ณ ํ์์์ ๋ณ์๋ ๊ณ์ ์๋ํ๋ฉฐ ๊ณตํต ๊ธฐ์ค๊ฐ๋ณด๋ค ์ฐ์ ์ ์ฉ๋ฉ๋๋ค.
์ ๊ณต์๋ณ ์ฐธ๊ณ ์ฌํญ
์น์ ์ ๋ชฉ: โ์ ๊ณต์๋ณ ์ฐธ๊ณ ์ฌํญโClaude Code ํธํ ์
์คํธ๋ฆผ(anthropic-compatible-cc-*)์ ๊ฒฝ์ฐ, OmniRoute๋ ํ์ธ๋ ๊ฐ์ ธ์ค๊ธฐ ํ์์์์์ ์์๋ฐ์ด๋ X-Stainless-Timeout ํค๋๋ฅผ ๋์ถํ์ฌ ์ ๊ณต์ ์ธก ์ฝ๊ธฐ ํ์์์์ด ํ๊ฒฝ ๊ตฌ์ฑ๊ณผ ์ผ์นํ๋๋ก ์ ์งํฉ๋๋ค.
์๋ ํํฐ Claude Code ํธํ ๋ฆฌ๋ฒ์ค ํ๋ก์์ ๊ฒฝ์ฐ, OmniRoute๋ ๊ธฐ๋ณธ anthropic-beta ์งํฉ์ ๋ณด์์ ์ผ๋ก ์ ์งํ๋ฉฐ, Client Cache Control์ด Auto๋ก ์ค์ ๋์ด ์์ผ๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ์ ๊ณตํ cache_control ๋ง์ปค๋ง ์ ๋ฌํฉ๋๋ค. ์
์คํธ๋ฆผ์์ ํธ์ง๋ Claude ์ฌ๊ณ ์คํธ๋ฆผ์ ๋ช
์์ ์ผ๋ก ์๊ตฌํ๋ ๊ฒฝ์ฐ์๋ง ์ฐ๊ฒฐ๋ณ โEnable redact-thinking betaโ ํ ๊ธ์ ํ์ฑํํ์ธ์.
๊ณ ๊ธ ํ์์์ ์ฌ์ ์
์น์ ์ ๋ชฉ: โ๊ณ ๊ธ ํ์์์ ์ฌ์ ์โ| ๋ณ์ | ๊ธฐ๋ณธ๊ฐ | ์ฉ๋ |
|---|---|---|
FETCH_TIMEOUT_MS |
REQUEST_TIMEOUT_MS์์ ์์ |
์๋ต ํค๋๊ฐ ๋์ฐฉํ ๋๊น์ง ์ฌ์ฉ๋๋ ์ ์คํธ๋ฆผ ์๋ต ์์ ํ์์์ |
FETCH_HEADERS_TIMEOUT_MS |
FETCH_TIMEOUT_MS์์ ์์ |
์ ์คํธ๋ฆผ ์๋ต ํค๋ ์์ ์ ๋ํ Undici ์ ํ ์๊ฐ |
FETCH_BODY_TIMEOUT_MS |
FETCH_TIMEOUT_MS์์ ์์ |
์
์คํธ๋ฆผ ๋ณธ๋ฌธ ์ฒญํฌ ์ฌ์ด์ Undici ์ ํ ์๊ฐ(0์ ๋นํ์ฑํ) |
FETCH_CONNECT_TIMEOUT_MS |
30000 |
Undici TCP ์ฐ๊ฒฐ ํ์์์ |
FETCH_KEEPALIVE_TIMEOUT_MS |
4000 |
Undici ์ ํด keep-alive ์์ผ ํ์์์ |
TLS_CLIENT_TIMEOUT_MS |
FETCH_TIMEOUT_MS์์ ์์ |
wreq-js๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋ TLS ์ง๋ฌธ ์์ฒญ์ ํ์์์ |
API_BRIDGE_PROXY_TIMEOUT_MS |
REQUEST_TIMEOUT_MS์์ ์์ ๋๋ 600000 |
API ํฌํธ์์ ๋์๋ณด๋ ํฌํธ๋ก ์ ๋ฌ๋๋ /v1 ํ๋ก์์ ํ์์์ |
API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS |
max(API_BRIDGE_PROXY_TIMEOUT_MS, 300000) |
API ๋ธ๋ฆฌ์ง ์๋ฒ์ ์์ ์์ฒญ ํ์์์ |
API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS |
60000 |
API ๋ธ๋ฆฌ์ง ์๋ฒ์ ์์ ํค๋ ํ์์์ |
API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS |
5000 |
API ๋ธ๋ฆฌ์ง ์๋ฒ์ keep-alive ํ์์์ |
API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS |
0 |
API ๋ธ๋ฆฌ์ง ์๋ฒ์ ์์ผ ๋นํ์ฑ ํ์์์(0์ ๋นํ์ฑํ) |
์ฐธ๊ณ : ์คํธ๋ฆฌ๋ฐ ์์ฒญ์์
FETCH_TIMEOUT_MS๋ ์ฐ๊ฒฐ ์ค์ ๋ฐ ์ฒซ ๋ฒ์งธ ์ ์คํธ๋ฆผ ์๋ต ๋๊ธฐ ์๊ฐ์๋ง ์ ์ฉ๋ฉ๋๋ค. ์คํธ๋ฆผ์ด ํ์ฑํ๋ ์ดํ OmniRoute๋ ์ค์ ์ค๋จ(STREAM_IDLE_TIMEOUT_MS) ๋๋ Undici ๋ณธ๋ฌธ ๋นํ์ฑ(FETCH_BODY_TIMEOUT_MS)์ด ๋ฐ์ํ ๊ฒฝ์ฐ์๋ง ์คํธ๋ฆผ์ ์ค๋จํฉ๋๋ค.
๋ฆฌ๋ฒ์ค ํ๋ก์ ํธํ์ฑ
์น์ ์ ๋ชฉ: โ๋ฆฌ๋ฒ์ค ํ๋ก์ ํธํ์ฑโNginx, Caddy, Cloudflare ๋๋ ๋ค๋ฅธ ๋ฆฌ๋ฒ์ค ํ๋ก์ ๋ค์์ OmniRoute๋ฅผ ์คํํ๋ ๊ฒฝ์ฐ ํ๋ก์ ํ์์์๋ OmniRoute์ ์คํธ๋ฆผ/๊ฐ์ ธ์ค๊ธฐ ํ์์์๋ณด๋ค ๊ธธ๊ฒ ์ค์ ํด์ผ ํฉ๋๋ค.
ํฌํธ ๋ถ๋ฆฌ ๋ชจ๋
์น์ ์ ๋ชฉ: โํฌํธ ๋ถ๋ฆฌ ๋ชจ๋โ๊ณ ๊ธ ์๋๋ฆฌ์ค(๋ฆฌ๋ฒ์ค ํ๋ก์, ์ปจํ ์ด๋ ๋คํธ์ํน)๋ฅผ ์ํด API์ Dashboard๋ฅผ ๋ณ๋์ ํฌํธ์์ ์คํํฉ๋๋ค.
PORT=20128 DASHBOARD_PORT=20129 omniroute# Dashboard: http://localhost:20129Void Linux (xbps-src) ํ ํ๋ฆฟ
์น์ ์ ๋ชฉ: โVoid Linux (xbps-src) ํ ํ๋ฆฟโVoid Linux ์ฌ์ฉ์๋ xbps-src๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ดํฐ๋ธ ํจํค์ง๋ฅผ ๋น๋ํ ์ ์์ต๋๋ค. ์ด ๋ธ๋ก์ srcpkgs/omniroute/template๋ก ์ ์ฅํ์ธ์.
# 'omniroute'์ฉ ํ
ํ๋ฆฟ ํ์ผpkgname=omnirouteversion=3.8.0revision=1hostmakedepends="nodejs python3 make"depends="openssl"short_desc="์ฌ๋ฌ LLM ์ ๊ณต์๋ฅผ ์ํ ์ค๋งํธ ๋ผ์ฐํ
๊ธฐ๋ฅ์ ๊ฐ์ถ ๋ฒ์ฉ AI ๊ฒ์ดํธ์จ์ด"maintainer="zenobit <zenobit@disroot.org>"license="MIT"homepage="https://github.com/diegosouzapw/OmniRoute"distfiles="https://github.com/diegosouzapw/OmniRoute/archive/refs/tags/v${version}.tar.gz"# ๊ฐ ๋ฆด๋ฆฌ์ค๋ง๋ค ๋ค์ ๋ช
๋ น์ผ๋ก ์ฒดํฌ์ฌ์ ๋ค์ ์์ฑํ์ธ์:# curl -L -o /tmp/omniroute.tar.gz "https://github.com/diegosouzapw/OmniRoute/archive/refs/tags/v${version}.tar.gz" && sha256sum /tmp/omniroute.tar.gzchecksum=PLACEHOLDER_REGENERATE_PER_RELEASEsystem_accounts="_omniroute"omniroute_homedir="/var/lib/omniroute"export NODE_ENV=productionexport npm_config_engine_strict=falseexport npm_config_loglevel=errorexport npm_config_fund=falseexport npm_config_audit=false
do_build() { local _gyp_arch case "$XBPS_TARGET_MACHINE" in aarch64*) _gyp_arch=arm64 ;; armv7*|armv6*) _gyp_arch=arm ;; i686*) _gyp_arch=ia32 ;; *) _gyp_arch=x64 ;; esac
NODE_ENV=development npm ci --ignore-scripts npm run build cp -r .next/static .next/standalone/.next/static [ -d public ] && cp -r public .next/standalone/public || true
local _node_gyp=/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js (cd node_modules/better-sqlite3 && node "$_node_gyp" rebuild --arch="$_gyp_arch")
local _bs3_release=.next/standalone/node_modules/better-sqlite3/build/Release mkdir -p "$_bs3_release" cp node_modules/better-sqlite3/build/Release/better_sqlite3.node "$_bs3_release/"
rm -rf .next/standalone/node_modules/@img
for _mod in pino-abstract-transport split2 process-warning; do cp -r "node_modules/$_mod" .next/standalone/node_modules/ done}
do_check() { npm run test:unit}
do_install() { vmkdir usr/lib/omniroute/.next vcopy .next/standalone/. usr/lib/omniroute/.next/standalone
for _d in \ .next/standalone/.next/server/app/dashboard \ .next/standalone/.next/server/app/dashboard/settings \ .next/standalone/.next/server/app/dashboard/providers; do touch "${DESTDIR}/usr/lib/omniroute/${_d}/.keep" done
cat > "${WRKDIR}/omniroute" <<'EOF'#!/bin/shexport PORT="${PORT:-20128}"export DATA_DIR="${DATA_DIR:-${XDG_DATA_HOME:-${HOME}/.local/share}/omniroute}"export APP_LOG_TO_FILE="${APP_LOG_TO_FILE:-false}"mkdir -p "${DATA_DIR}"exec node /usr/lib/omniroute/.next/standalone/server.js "$@"EOF vbin "${WRKDIR}/omniroute"}
post_install() { vlicense LICENSE}| ๋ช ๋ น | ๋์ |
|---|---|
npm run uninstall |
์์คํ
์ฑ์ ์ ๊ฑฐํ์ง๋ง ~/.omniroute์ DB์ ๊ตฌ์ฑ์ ์ ์งํฉ๋๋ค. |
npm run uninstall:full |
์ฑ์ ์ ๊ฑฐํ๊ณ ๋ชจ๋ ๊ตฌ์ฑ, ํค ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์๊ตฌ์ ์ผ๋ก ์ญ์ ํฉ๋๋ค. |
๋ชจ๋ ์ค์น ๋ฐฉ์์ ๋ํ ์์ธํ ์ ๊ฑฐ ์ง์นจ์ UNINSTALL.md๋ฅผ ์ฐธ์กฐํ์ธ์.
HagiCode
HagiCode๋ ๊ตฌ์กฐํ๋ ์ํฌํ๋ก, ๋ค์ค ์์ด์ ํธ ์คํ, Hero Dungeon ๋ทฐ๋ฅผ ๊ฐ์ถ ์์ด์ ํธ ์ฝ๋ฉ ์์ ๊ณต๊ฐ์ ๋๋ค.
๋ ์ค๋งํธํ๊ณ ๋น ๋ฅด๋ฉฐ ์ฆ๊ฑฐ์ด ์์ด์ ํธ ์ํฌํ๋ก๋ก ์ ์ฉํ ์ํํธ์จ์ด๋ฅผ ๋ง๋์ธ์.

- Smart๊ตฌ์กฐํ๋ ์ํฌํ๋ก๋ ์๋๋ฅผ ์์ด๋์ด๋ถํฐ ๋ฐฐํฌ๊น์ง ์คํ ๊ฐ๋ฅํ ๊ฒฝ๋ก๋ก ๋ฐ๊ฟ๋๋ค.
- Efficient๋ค์ค ์์ด์ ํธ ์ํฌํ๋ก๋ก ์กฐ์ฌ, ๊ตฌํ, ๊ฒํ ๋ฅผ ๋ณ๋ ฌ๋ก ์งํํฉ๋๋ค.
- FunHero Dungeon์ ๊ธด ์ฝ๋ฉ ์ธ์ ์ ์๊ฐ์ ์ด๊ณ ํ์ ์ ์ธ ๊ฒฝํ์ผ๋ก ๋ง๋ญ๋๋ค.