Skip to content

JosephusZhou/claude-nvidia-proxy

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

claude-nvidia-proxy (Go)

Go https://build.nvidia.com/explore/discover, register an account, and generate an API key. NVIDIA provides two hidden models, moonshotai/kimi-k2.5 z-ai/glm4.7 and minimaxai/minimax-m2.1 Then, configure the config.json file and run the program, ensuring it listens on port 3001.

Expose POST /v1/messages (Anthropic/Claude style), convert to OpenAI Chat Completions, and proxy to NVIDIA (configured via config.json).

Config

Edit config.json:

  • nvidia_url default https://integrate.api.nvidia.com/v1/chat/completions
  • nvidia_key required: used for upstream auth, sent as Authorization: Bearer ...

Do not commit your real nvidia_key.

Env (optional overrides)

  • CONFIG_PATH default config.json (relative to go/)
  • PROVIDER_API_KEY optional: overrides nvidia_key from config
  • UPSTREAM_URL optional: overrides nvidia_url from config
  • SERVER_API_KEY optional: enable inbound auth; accepts Authorization: Bearer ... or x-api-key: ...
  • ADDR default :3001
  • UPSTREAM_TIMEOUT_SECONDS default 300
  • LOG_BODY_MAX_CHARS default 4096 (0 disables body logging)
  • LOG_STREAM_TEXT_PREVIEW_CHARS default 256 (0 disables stream preview logging)

Run

go run .

CLAUDE CODE

use moonshotai/kimi-k2.5 model

export ANTHROPIC_BASE_URL=http://localhost:3001
export ANTHROPIC_AUTH_TOKEN=nvapi-api-key
export ANTHROPIC_DEFAULT_HAIKU_MODEL=moonshotai/kimi-k2.5
export ANTHROPIC_DEFAULT_SONNET_MODEL=moonshotai/kimi-k2.5
export ANTHROPIC_DEFAULT_OPUS_MODEL=moonshotai/kimi-k2.5

use zai/glm4.7 model

export ANTHROPIC_BASE_URL=http://localhost:3001
export ANTHROPIC_AUTH_TOKEN=nvapi-api-key
export ANTHROPIC_DEFAULT_HAIKU_MODEL=z-ai/glm4.7
export ANTHROPIC_DEFAULT_SONNET_MODEL=z-ai/glm4.7
export ANTHROPIC_DEFAULT_OPUS_MODEL=z-ai/glm4.7

claude

use zai/glm4.7 model

export ANTHROPIC_BASE_URL=http://localhost:3001
export ANTHROPIC_AUTH_TOKEN=nvapi-api-key
export ANTHROPIC_DEFAULT_HAIKU_MODEL=minimaxai/minimax-m2.1
export ANTHROPIC_DEFAULT_SONNET_MODEL=minimaxai/minimax-m2.1
export ANTHROPIC_DEFAULT_OPUS_MODEL=minimaxai/minimax-m2.1

claude

API

POST /v1/messages

  • Inbound auth:
    • If SERVER_API_KEY is set, you must send Authorization: Bearer <SERVER_API_KEY> (or x-api-key: <SERVER_API_KEY>).
  • Upstream auth:
    • Always sends Authorization: Bearer <nvidia_key> to NVIDIA.

Example (non-stream):

curl -sS http://127.0.0.1:3001/v1/messages \
  -H 'Content-Type: application/json' \
  -d '{
    "model":"z-ai/glm4.7",
    "max_tokens":256,
    "messages":[{"role":"user","content":"hello"}]
  }'

Example (stream):

curl -N http://127.0.0.1:3001/v1/messages \
  -H 'Content-Type: application/json' \
  -d '{
    "model":"z-ai/glm4.7",
    "max_tokens":256,
    "stream":true,
    "messages":[{"role":"user","content":"hello"}]
  }'

Build

This project uses only Go stdlib (no external deps). If your environment blocks the default Go build cache path, set:

export GOCACHE=/tmp/go-build-cache
export GOMODCACHE=/tmp/gomodcache

Linux (amd64):

mkdir -p dist
GOOS=linux GOARCH=amd64 go build -trimpath -ldflags "-s -w" -o dist/claude-nvidia-proxy_linux_amd64 .

Windows (amd64):

mkdir -p dist
GOOS=windows GOARCH=amd64 go build -trimpath -ldflags "-s -w" -o dist/claude-nvidia-proxy_windows_amd64.exe .

macOS:

# 在 macOS 机器上直接编译
go build -trimpath -ldflags "-s -w" -o claude-nvidia-proxy .

# 编译 macOS universal 二进制文件
# 编译各架构
GOOS=darwin GOARCH=amd64 go build -trimpath -ldflags "-s -w" -o dist/claude-nvidia-proxy_x86_64 .
GOOS=darwin GOARCH=arm64 go build -trimpath -ldflags "-s -w" -o dist/claude-nvidia-proxy_arm64 .

# 合并成统一二进制
lipo -create dist/claude-nvidia-proxy_x86_64 dist/claude-nvidia-proxy_arm64 -output dist/claude-nvidia-proxy_universal

macOS 开机启动 + 后台运行

  1. 把二进制放到 /usr/local/bin
sudo cp claude-nvidia-proxy /usr/local/bin/
sudo chmod +x /usr/local/bin/claude-nvidia-proxy
  1. 测试二进制运行是否正常
CONFIG_PATH=/path/to/config.json /usr/local/bin/claude-nvidia-proxy
  1. 创建 LaunchAgent plist
mkdir -p ~/Library/LaunchAgents
vi ~/Library/LaunchAgents/com.xxx.claude-nvidia-proxy.plist
  • 完整 plist 示例(直接可用, 环境变量配置文件路径修改为本机正确路径)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
 "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <!-- 唯一标识 -->
    <key>Label</key>
    <string>com.xxx.claude-nvidia-proxy</string>

    <!-- 程序和参数 -->
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/claude-nvidia-proxy</string>
    </array>

    <!-- 环境变量 -->
    <key>EnvironmentVariables</key>
    <dict>
        <key>CONFIG_PATH</key>
        <string>/absolute/path/to/config.json</string>
    </dict>

    <!-- 登录后立即启动 -->
    <key>RunAtLoad</key>
    <true/>

    <!-- 崩溃/退出后自动重启 -->
    <key>KeepAlive</key>
    <true/>

    <!-- 工作目录(可选,但强烈推荐) -->
    <key>WorkingDirectory</key>
    <string>/usr/local/bin</string>

    <!-- 日志 -->
    <key>StandardOutPath</key>
    <string>/tmp/claude-nvidia-proxy.out.log</string>
    <key>StandardErrorPath</key>
    <string>/tmp/claude-nvidia-proxy.err.log</string>
</dict>
</plist>
  1. 加载并启动服务
launchctl load ~/Library/LaunchAgents/com.xxx.claude-nvidia-proxy.plist
# 立即启动(不用重新登录)
launchctl start com.xxx.claude-nvidia-proxy
# 检查是否运行
launchctl list | grep claude

# 停止
launchctl stop com.xxx.claude-nvidia-proxy

# 卸载(不再自启)
launchctl unload ~/Library/LaunchAgents/com.xxx.claude-nvidia-proxy.plist

# 修改配置后重新加载
launchctl unload ~/Library/LaunchAgents/com.xxx.claude-nvidia-proxy.plist
launchctl load ~/Library/LaunchAgents/com.xxx.claude-nvidia-proxy.plist

macos一键脚本

chmod +x macos-install.sh
sudo ./macos-install.sh

API

POST /v1/messages

  • Inbound auth:
    • If SERVER_API_KEY is set, you must send Authorization: Bearer <SERVER_API_KEY> (or x-api-key: <SERVER_API_KEY>).
  • Upstream auth:
    • Always sends Authorization: Bearer <nvidia_key> to NVIDIA.

Example (non-stream):

curl -sS http://127.0.0.1:3001/v1/messages \
  -H 'Content-Type: application/json' \
  -d '{
    "model":"z-ai/glm4.7",
    "max_tokens":256,
    "messages":[{"role":"user","content":"hello"}]
  }'

Example (stream):

curl -N http://127.0.0.1:3001/v1/messages \
  -H 'Content-Type: application/json' \
  -d '{
    "model":"z-ai/glm4.7",
    "max_tokens":256,
    "stream":true,
    "messages":[{"role":"user","content":"hello"}]
  }'

Notes / Limitations

  • Streaming conversion supports delta.content text and delta.tool_calls tool-use blocks; other Anthropic blocks are not fully implemented.
  • Logs show forwarded request bodies; keep LOG_BODY_MAX_CHARS small and avoid secrets in prompts.

About

an Nvidia proxy for claude code

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Go 88.3%
  • Shell 11.7%