n2r-dev / README.md
cacodex's picture
Upload 17 files
c0139c7 verified
metadata
title: NVIDIA NIM 响应网关
sdk: docker
app_port: 7860
pinned: false

NVIDIA NIM 响应网关

这是一个面向公开使用的 NVIDIA NIM 兼容网关,同时支持 OpenAI /v1/responses 和 Anthropic /v1/messages 风格请求。

它不在本地保存任何用户的 NIM API Key。用户调用本项目时,需要自己通过请求头携带 NIM Key,网关只负责协议转换、性能优化、聚合统计和官方模型目录展示。

主要能力

  • 将 NVIDIA 官方 POST /v1/chat/completions 转换为 OpenAI 风格的 POST /v1/responses
  • 将 NVIDIA 官方 POST /v1/chat/completions 转换为 Anthropic 风格的 POST /v1/messages
  • 支持 tool calling / function calling
  • 支持 Anthropic tools / tool_choice / tool_result 以及 Claude Code 常见的客户端工具调用形态
  • 支持 function_call_output 回灌
  • 支持 previous_response_id 对话续写
  • /v1/responses/v1/responses/{response_id} 使用用户自带的 NIM Key 做鉴权与上游转发
  • /v1/messages 使用用户自带的 NIM Key 做鉴权与上游转发,并支持 Anthropic SSE 风格流式事件
  • /v1/models 直接返回来自 NVIDIA 官方 /v1/models 的同步结果,保持 OpenAI 风格结构
  • / 为白色主题的模型健康度页面,按 10 分钟成功率矩阵展示 MODEL_LIST 中的模型
  • /model_list 为独立的白色主题官方模型列表页面,支持按提供商筛选模型
  • 模型提供商卡片为固定高度,避免模型较多时卡片过长
  • 使用共享 HTTP 连接池、SQLite WAL 和异步线程化落库来增强高并发场景下的转发性能

用户如何调用

对于 POST /v1/responsesPOST /v1/messages,请通过下面任意一种方式传入你自己的 NVIDIA NIM Key:

  • Authorization: Bearer <你的 NIM Key>
  • X-API-Key: <你的 NIM Key>

网关不会把原始 Key 持久化到数据库中,只会在内存中用于当前请求,并对响应链路使用 Key 哈希做隔离。

官方模型目录同步

项目会定时从官方接口拉取模型列表:

https://integrate.api.nvidia.com/v1/models

同步后的模型目录同时用于:

  • GET /v1/models
  • GET /models
  • GET /api/catalog

页面与接口

页面:

  • GET /:模型健康度页面
  • GET /model_list:官方模型列表页面

前端数据接口:

  • GET /api/dashboard
  • GET /api/catalog

兼容接口:

  • POST /v1/responses
  • POST /v1/messages
  • GET /v1/responses/{response_id}
  • GET /v1/models
  • GET /models

环境变量

  • NVIDIA_API_BASE:默认 https://integrate.api.nvidia.com/v1
  • MODEL_LIST:健康度页面监控模型列表,逗号分隔
  • MODEL_SYNC_INTERVAL_MINUTES:官方模型目录同步周期,默认 30
  • PUBLIC_HISTORY_BUCKETS:健康页展示最近多少个 10 分钟时间片,默认 6
  • REQUEST_TIMEOUT_SECONDS:上游请求超时,默认 90
  • MAX_UPSTREAM_CONNECTIONS:共享连接池最大连接数,默认 512
  • MAX_KEEPALIVE_CONNECTIONS:共享连接池最大 keep-alive 连接数,默认 128
  • DATABASE_PATH:默认 ./data.sqlite3

本地验证

我已经完成两层本地联调:

  1. Mock 联调:

    • 通过 scripts/local_smoke_test.py 验证了协议转换、官方模型同步、用户 Key 鉴权、previous_response_id、tool call、健康页数据接口、模型页数据接口和两个独立页面路由。
  2. 真实上游联调:

    • 通过 scripts/live_e2e_validation.py 使用提供的测试 NIM Key,真实调用了 NVIDIA 官方模型目录和实际模型响应。
    • 实测结果:live_gateway_ok,并成功通过 z-ai/glm5 得到 OK

部署到 Hugging Face Space

  1. 新建 Hugging Face Space,SDK 选择 Docker
  2. hf_space 目录内的内容作为 Space 根目录上传
  3. 按需配置 MODEL_LIST 等环境变量
  4. 启动后即可直接公开使用

参考资料