Skip to content

Nvidia NIM OpenAI-kompatible API + Kimi K2 Integration (ANTHROPIC_BASE_URL Hack) #20

@DJT24

Description

@DJT24

Nvidia NIM + Kimi K2 mit OpenAI-kompatiblem Protokoll betreiben

Dieses Dokument fasst alle technischen Details zusammen, die benötigt werden, um diesen Claude-Code-Fork mit der Nvidia NIM API (OpenAI-kompatibel) und dem Modell moonshotai/kimi-k2 zu betreiben.


Analyse des Repos

Das Projekt ist der dekompilierte Quellcode von Claude Code (Anthropic CLI). Es nutzt intern:

  • @anthropic-ai/sdk für API-Calls (src/utils/api.ts)
  • Modellkonfiguration über globalConfig (src/utils/config.ts)
  • API-Key aus ANTHROPIC_API_KEY Env-Variable
  • API-Base-URL über ANTHROPIC_BASE_URL Env-Variable (offiziell vom Anthropic SDK unterstützt)

Kimi K2 auf Nvidia NIM

Nvidia NIM Endpoint für Kimi K2

Base URL:  https://integrate.api.nvidia.com/v1
Model:     moonshotai/kimi-k2
API Key:   nvapi-xxxxxxxxxxxxxxxxxxxx  (von build.nvidia.com)

Protokoll

Nvidia NIM verwendet das OpenAI-kompatible API-Protokoll (/v1/chat/completions).

Das Anthropic SDK unterstützt offiziell die Weiterleitung an OpenAI-kompatible Endpoints über:

ANTHROPIC_BASE_URL=https://integrate.api.nvidia.com/v1

Achtung: Diese Option funktioniert nur mit einem spezialisierten Reverse-Proxy/Adapter, da das Anthropic SDK intern das Anthropic-Nachrichtenformat sendet, nicht OpenAI-Format.


Lösung: Lokaler OpenAI→Anthropic Adapter

Da das Claude Code CLI das Anthropic Messages API Format erwartet, aber Nvidia NIM nur OpenAI Chat Completions liefert, braucht man einen lokalen Proxy.

Option A: litellm als lokaler Proxy (empfohlen)

pip install litellm
litellm --model nvidia_nim/moonshotai/kimi-k2 \
        --api_key nvapi-DEIN_KEY \
        --port 8080

Dann das CLI starten:

export ANTHROPIC_BASE_URL=http://localhost:8080
export ANTHROPIC_API_KEY=nvapi-DEIN_NVIDIA_KEY
export CLAUDE_MODEL=moonshotai/kimi-k2

Option B: openai-anthropic-proxy (Node.js)

npx openai-anthropic-proxy --port 8080 --upstream https://integrate.api.nvidia.com/v1 --key nvapi-DEIN_KEY

Dann:

export ANTHROPIC_BASE_URL=http://localhost:8080
export ANTHROPIC_API_KEY=dummy

Relevante Env-Variablen für dieses Projekt

Variable Wert Beschreibung
ANTHROPIC_API_KEY nvapi-xxxx Nvidia NIM API Key (oder dummy wenn Proxy Key übernimmt)
ANTHROPIC_BASE_URL http://localhost:8080 Lokaler Proxy (litellm oder openai-anthropic-proxy)
CLAUDE_MODEL moonshotai/kimi-k2 Modell-Override (falls in config.ts unterstützt)
ANTHROPIC_SMALL_FAST_MODEL moonshotai/kimi-k2 Small model override

Direkte Konfiguration in src/utils/config.ts

In der Konfig-Datei gibt es ein model-Feld in GlobalConfig. Dieses kann geändert werden:

// In getDefaultModel() oder wo das Standardmodell gesetzt wird:
return process.env.CLAUDE_MODEL ?? 'moonshotai/kimi-k2'

Die API-URL kommt aus dem Anthropic SDK, das ANTHROPIC_BASE_URL direkt ausliest.


Nvidia NIM API Key besorgen

  1. Gehe zu https://build.nvidia.com
  2. Account erstellen / einloggen
  3. Unter "API Keys" → neuen Key erstellen
  4. Key beginnt mit nvapi-
  5. Free-Tier: 1000 Credits (ausreichend für Tests)

Kimi K2 Modell-Seite auf NIM:

https://build.nvidia.com/moonshotai/kimi-k2


Direkter cURL-Test (zum Verifizieren)

curl https://integrate.api.nvidia.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer nvapi-DEIN_KEY" \
  -d '{
    "model": "moonshotai/kimi-k2",
    "messages": [{"role": "user", "content": "Hello!"}],
    "max_tokens": 100
  }'

Vollständiger Start-Workflow

# 1. Lokalen Proxy starten (Terminal 1)
litellm --model nvidia_nim/moonshotai/kimi-k2 \
        --api_key nvapi-DEIN_NVIDIA_API_KEY \
        --port 8080

# 2. Claude Code mit Nvidia NIM starten (Terminal 2)
export ANTHROPIC_BASE_URL=http://localhost:8080
export ANTHROPIC_API_KEY=nvapi-DEIN_NVIDIA_API_KEY
bun run start

Issue erstellt zur Dokumentation der Nvidia NIM / Kimi K2 Integration.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions