tiancheng / README.md
maltose1's picture
Upload 2 files
2a8838f verified
metadata
title: Tenbin OpenAI API Adapter
emoji: 🚀
colorFrom: blue
colorTo: green
sdk: docker
app_port: 8000
license: apache-2.0

Tenbin OpenAI API 适配器 - Hugging Face 部署

这个 Hugging Face Space 部署了一个与 OpenAI API 兼容的 Tenbin 适配器。它通过拉取一个预先构建好的私有 Docker 镜像来运行两个核心服务:

  1. Turnstile-Solver: 自动解决 Cloudflare 验证码的服务 (运行在端口 5000,仅内部访问)。
  2. API 适配器: 将 OpenAI 请求转换为 Tenbin 请求的主服务 (暴露在端口 8000)。

🚀 部署和配置指南

1. 设置仓库 Secrets

为了让 Hugging Face 能够拉取私有的 GitHub Docker 镜像,你必须在你的 Space 的 Settings -> Repository secrets 页面中设置以下两个 secret:

  • DOCKER_USERNAME: 你的 GitHub 用户名 (例如: fuwei99)
  • DOCKER_PASSWORD: 你的 GitHub Personal Access Token (PAT)。
    • 你可以在 GitHub Tokens 页面 创建一个新的 PAT。
    • 创建时,必须授予 read:packages 权限。

2. 添加配置文件

本项目需要三个 JSON 配置文件才能运行。请在你的 Space 仓库的根目录下创建以下文件 (Files and versions -> Add file -> Create a new file):

tenbin.json

存储你的 Tenbin 账户 session_id

[
    {
        "session_id": "your_tenbin_session_id_here"
    }
]

client_api_keys.json

存储允许访问此服务的客户端 API 密钥。

[
    "sk-your-secret-key-1",
    "sk-your-secret-key-2"
]

models.json

模型映射表。你可以使用项目提供的默认版本。

{
    "claude-3-opus": "AnthropicClaude3Opus",
    "claude-3-sonnet": "AnthropicClaude3Sonnet",
    "claude-3-haiku": "AnthropicClaude3Haiku",
    "claude-3.5-sonnet": "AnthropicClaude35Sonnet",
    "claude-3.7-sonnet": "AnthropicClaude37Sonnet",
    "claude-3.7-sonnet-extended": "AnthropicClaude37SonnetExtended",
    "gpt-4o": "OpenAIGPT4o",
    "gpt-4-turbo": "OpenAIGPT4Turbo",
    "gemini-1.5-pro": "GoogleGemini15Pro",
    "gemini-1.5-flash": "GoogleGemini15Flash",
    "llama-3-70b": "MetaLLama370b"
}

3. 等待构建

完成以上步骤后,Hugging Face 会自动使用 Dockerfile 进行构建并启动服务。你可以在 "Logs" 标签页查看启动进度。当看到 API 服务成功启动的日志时,即表示部署完成。

⚙️ API 使用

服务启动后,API 端点是你的 Space URL,例如: https://your-username-your-space-name.hf.space/v1

import openai

client = openai.OpenAI(
    api_key="sk-your-secret-key-1", # 使用你在 client_api_keys.json 中设置的密钥
    base_url="https://your-username-your-space-name.hf.space/v1"
)

response = client.chat.completions.create(
    model="claude-3.7-sonnet",
    messages=[
        {"role": "user", "content": "Hello!"}
    ]
)

print(response.choices[0].message.content)