diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 9da1906a..27ddd498 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -55,7 +55,7 @@ jobs: uses: docker/metadata-action@v4 with: images: | - ${{ contains(github.ref, 'alpha') && 'justsong/one-api-alpha' || 'justsong/one-api' }} + ${{ contains(github.ref, 'alpha') && 'sagitchu/one-api-alpha' || 'sagitchu/one-api' }} ${{ contains(github.ref, 'alpha') && format('ghcr.io/{0}-alpha', github.repository) || format('ghcr.io/{0}', github.repository) }} - name: Build and push Docker images diff --git a/.github/workflows/sync-upstream.yml b/.github/workflows/sync-upstream.yml new file mode 100644 index 00000000..e58faa0e --- /dev/null +++ b/.github/workflows/sync-upstream.yml @@ -0,0 +1,74 @@ +name: Sync Upstream PRs + +on: + schedule: + - cron: '0 */6 * * *' # 每6小时运行一次 + workflow_dispatch: # 允许手动触发 + +jobs: + sync: + runs-on: ubuntu-latest + permissions: # 添加必要的权限 + pull-requests: write + contents: write + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 # 获取完整历史 + + - name: Sync upstream pull requests + uses: actions/github-script@v6 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const upstream = 'songquanpeng/one-api'; + const [owner, repo] = upstream.split('/'); + + // 获取上游仓库的PR + const pulls = await github.rest.pulls.list({ + owner, + repo, + state: 'open' + }); + + // 为每个PR创建或更新对应的PR + for (const pull of pulls.data) { + try { + const branchName = `upstream-pr-${pull.number}`; + + // 获取PR详细信息 + const prDetails = await github.rest.pulls.get({ + owner, + repo, + pull_number: pull.number + }); + + // 创建新分支 + await exec.exec('git', ['fetch', `https://github.com/${owner}/${repo}.git`, `pull/${pull.number}/head:${branchName}`]); + + // 检查是否已存在相同的PR + const existingPulls = await github.rest.pulls.list({ + owner: context.repo.owner, + repo: context.repo.repo, + head: `${context.repo.owner}:${branchName}`, + }); + + if (existingPulls.data.length === 0) { + // 推送分支 + await exec.exec('git', ['push', 'origin', branchName]); + + // 创建新的PR + await github.rest.pulls.create({ + owner: context.repo.owner, + repo: context.repo.repo, + title: `[Upstream] ${pull.title}`, + body: `Synced from upstream PR: ${pull.html_url}\n\n${pull.body || ''}`, + head: branchName, + base: 'main' // 根据实际情况修改目标分支 + }); + } + } catch (error) { + console.log(`Error processing PR #${pull.number}: ${error.message}`); + } + } diff --git a/README.md b/README.md index bf1891a5..33ffb385 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,7 @@ _✨ 通过标准的 OpenAI API 格式访问所有的大模型,开箱即用 + [x] [Anthropic Claude 系列模型](https://anthropic.com) (支持 AWS Claude) + [x] [Google PaLM2/Gemini 系列模型](https://developers.generativeai.google) + [x] [Mistral 系列模型](https://mistral.ai/) - + [x] [字节跳动豆包大模型](https://console.volcengine.com/ark/region:ark+cn-beijing/model) + + [x] [字节跳动豆包大模型(火山引擎)](https://www.volcengine.com/experience/ark?utm_term=202502dsinvite&ac=DSASUQY5&rc=2QXCA1VI) + [x] [百度文心一言系列模型](https://cloud.baidu.com/doc/WENXINWORKSHOP/index.html) + [x] [阿里通义千问系列模型](https://help.aliyun.com/document_detail/2400395.html) + [x] [讯飞星火认知大模型](https://www.xfyun.cn/doc/spark/Web.html) diff --git a/relay/adaptor/anthropic/constants.go b/relay/adaptor/anthropic/constants.go index b3a05ee8..52976995 100644 --- a/relay/adaptor/anthropic/constants.go +++ b/relay/adaptor/anthropic/constants.go @@ -10,6 +10,7 @@ var ModelList = []string{ "claude-3-5-sonnet-latest", "claude-3-5-sonnet-20240620", "claude-3-5-sonnet-20241022", - "claude-3-7-sonnet-latest", + "claude-3-5-sonnet-latest", "claude-3-7-sonnet-20250219", + "claude-3-7-sonnet-latest", } diff --git a/relay/adaptor/aws/claude/main.go b/relay/adaptor/aws/claude/main.go index c20827b0..d23daffa 100644 --- a/relay/adaptor/aws/claude/main.go +++ b/relay/adaptor/aws/claude/main.go @@ -36,7 +36,6 @@ var AwsModelIDMap = map[string]string{ "claude-3-5-sonnet-20241022": "anthropic.claude-3-5-sonnet-20241022-v2:0", "claude-3-5-sonnet-latest": "anthropic.claude-3-5-sonnet-20241022-v2:0", "claude-3-5-haiku-20241022": "anthropic.claude-3-5-haiku-20241022-v1:0", - "claude-3-7-sonnet-latest": "anthropic.claude-3-7-sonnet-20250219-v1:0", "claude-3-7-sonnet-20250219": "anthropic.claude-3-7-sonnet-20250219-v1:0", } diff --git a/relay/adaptor/openrouter/constants.go b/relay/adaptor/openrouter/constants.go index b12fa65c..c5d2caac 100644 --- a/relay/adaptor/openrouter/constants.go +++ b/relay/adaptor/openrouter/constants.go @@ -1,22 +1,34 @@ package openrouter var ModelList = []string{ - "01-ai/yi-large", - "aetherwiing/mn-starcannon-12b", - "ai21/jamba-1-5-large", - "ai21/jamba-1-5-mini", - "ai21/jamba-instruct", - "aion-labs/aion-1.0", - "aion-labs/aion-1.0-mini", - "aion-labs/aion-rp-llama-3.1-8b", - "allenai/llama-3.1-tulu-3-405b", - "alpindale/goliath-120b", - "alpindale/magnum-72b", - "amazon/nova-lite-v1", - "amazon/nova-micro-v1", - "amazon/nova-pro-v1", - "anthracite-org/magnum-v2-72b", - "anthracite-org/magnum-v4-72b", + "openai/gpt-3.5-turbo", + "openai/gpt-3.5-turbo-0125", + "openai/gpt-3.5-turbo-0613", + "openai/gpt-3.5-turbo-1106", + "openai/gpt-3.5-turbo-16k", + "openai/gpt-3.5-turbo-instruct", + "openai/gpt-4", + "openai/gpt-4-0314", + "openai/gpt-4-1106-preview", + "openai/gpt-4-32k", + "openai/gpt-4-32k-0314", + "openai/gpt-4-turbo", + "openai/gpt-4-turbo-preview", + "openai/gpt-4o", + "openai/chatgpt-4o-latest", + "openai/gpt-4o-2024-05-13", + "openai/gpt-4o-2024-08-06", + "openai/gpt-4o-2024-11-20", + "openai/gpt-4o-mini", + "openai/gpt-4o-mini-2024-07-18", + "openai/gpt-4o:extended", + "openai/o1", + "openai/o1-mini", + "openai/o1-mini-2024-09-12", + "openai/o1-preview", + "openai/o1-preview-2024-09-12", + "openai/o3-mini", + "openai/o3-mini-high", "anthropic/claude-2", "anthropic/claude-2.0", "anthropic/claude-2.0:beta", @@ -37,6 +49,51 @@ var ModelList = []string{ "anthropic/claude-3.5-sonnet-20240620", "anthropic/claude-3.5-sonnet-20240620:beta", "anthropic/claude-3.5-sonnet:beta", + "anthropic/claude-3.7-sonnet:beta", + "anthropic/claude-3.7-sonnet", + "google/gemini-2.0-flash-001", + "google/gemini-2.0-flash-exp:free", + "google/gemini-2.0-flash-lite-preview-02-05:free", + "google/gemini-2.0-flash-thinking-exp-1219:free", + "google/gemini-2.0-flash-thinking-exp:free", + "google/gemini-2.0-pro-exp-02-05:free", + "google/gemini-exp-1206:free", + "google/gemini-flash-1.5", + "google/gemini-flash-1.5-8b", + "google/gemini-flash-1.5-8b-exp", + "google/gemini-pro", + "google/gemini-pro-1.5", + "google/gemini-pro-vision", + "google/gemma-2-27b-it", + "google/gemma-2-9b-it", + "google/gemma-2-9b-it:free", + "google/gemma-7b-it", + "google/learnlm-1.5-pro-experimental:free", + "google/palm-2-chat-bison", + "google/palm-2-chat-bison-32k", + "google/palm-2-codechat-bison", + "google/palm-2-codechat-bison-32k", + "x-ai/grok-2-1212", + "x-ai/grok-2-vision-1212", + "x-ai/grok-beta", + "x-ai/grok-2-mini", + "x-ai/grok-vision-beta", + "01-ai/yi-large", + "aetherwiing/mn-starcannon-12b", + "ai21/jamba-1-5-large", + "ai21/jamba-1-5-mini", + "ai21/jamba-instruct", + "aion-labs/aion-1.0", + "aion-labs/aion-1.0-mini", + "aion-labs/aion-rp-llama-3.1-8b", + "allenai/llama-3.1-tulu-3-405b", + "alpindale/goliath-120b", + "alpindale/magnum-72b", + "amazon/nova-lite-v1", + "amazon/nova-micro-v1", + "amazon/nova-pro-v1", + "anthracite-org/magnum-v2-72b", + "anthracite-org/magnum-v4-72b", "cognitivecomputations/dolphin-mixtral-8x22b", "cognitivecomputations/dolphin-mixtral-8x7b", "cohere/command", @@ -62,28 +119,6 @@ var ModelList = []string{ "eva-unit-01/eva-llama-3.33-70b", "eva-unit-01/eva-qwen-2.5-32b", "eva-unit-01/eva-qwen-2.5-72b", - "google/gemini-2.0-flash-001", - "google/gemini-2.0-flash-exp:free", - "google/gemini-2.0-flash-lite-preview-02-05:free", - "google/gemini-2.0-flash-thinking-exp-1219:free", - "google/gemini-2.0-flash-thinking-exp:free", - "google/gemini-2.0-pro-exp-02-05:free", - "google/gemini-exp-1206:free", - "google/gemini-flash-1.5", - "google/gemini-flash-1.5-8b", - "google/gemini-flash-1.5-8b-exp", - "google/gemini-pro", - "google/gemini-pro-1.5", - "google/gemini-pro-vision", - "google/gemma-2-27b-it", - "google/gemma-2-9b-it", - "google/gemma-2-9b-it:free", - "google/gemma-7b-it", - "google/learnlm-1.5-pro-experimental:free", - "google/palm-2-chat-bison", - "google/palm-2-chat-bison-32k", - "google/palm-2-codechat-bison", - "google/palm-2-codechat-bison-32k", "gryphe/mythomax-l2-13b", "gryphe/mythomax-l2-13b:free", "huggingfaceh4/zephyr-7b-beta:free", @@ -158,37 +193,10 @@ var ModelList = []string{ "nousresearch/nous-hermes-llama2-13b", "nvidia/llama-3.1-nemotron-70b-instruct", "nvidia/llama-3.1-nemotron-70b-instruct:free", - "openai/chatgpt-4o-latest", - "openai/gpt-3.5-turbo", - "openai/gpt-3.5-turbo-0125", - "openai/gpt-3.5-turbo-0613", - "openai/gpt-3.5-turbo-1106", - "openai/gpt-3.5-turbo-16k", - "openai/gpt-3.5-turbo-instruct", - "openai/gpt-4", - "openai/gpt-4-0314", - "openai/gpt-4-1106-preview", - "openai/gpt-4-32k", - "openai/gpt-4-32k-0314", - "openai/gpt-4-turbo", - "openai/gpt-4-turbo-preview", - "openai/gpt-4o", - "openai/gpt-4o-2024-05-13", - "openai/gpt-4o-2024-08-06", - "openai/gpt-4o-2024-11-20", - "openai/gpt-4o-mini", - "openai/gpt-4o-mini-2024-07-18", - "openai/gpt-4o:extended", - "openai/o1", - "openai/o1-mini", - "openai/o1-mini-2024-09-12", - "openai/o1-preview", - "openai/o1-preview-2024-09-12", - "openai/o3-mini", - "openai/o3-mini-high", "openchat/openchat-7b", "openchat/openchat-7b:free", "openrouter/auto", + "perplexity/r1-1776", "perplexity/llama-3.1-sonar-huge-128k-online", "perplexity/llama-3.1-sonar-large-128k-chat", "perplexity/llama-3.1-sonar-large-128k-online", @@ -197,6 +205,10 @@ var ModelList = []string{ "perplexity/sonar", "perplexity/sonar-reasoning", "pygmalionai/mythalion-13b", + "qwen/qwen-max", + "qwen/qwen-plus", + "qwen/qwen-turbo", + "qwen/qwen-vl-plus:free", "qwen/qvq-72b-preview", "qwen/qwen-2-72b-instruct", "qwen/qwen-2-7b-instruct", @@ -206,10 +218,6 @@ var ModelList = []string{ "qwen/qwen-2.5-72b-instruct", "qwen/qwen-2.5-7b-instruct", "qwen/qwen-2.5-coder-32b-instruct", - "qwen/qwen-max", - "qwen/qwen-plus", - "qwen/qwen-turbo", - "qwen/qwen-vl-plus:free", "qwen/qwen2.5-vl-72b-instruct:free", "qwen/qwq-32b-preview", "raifle/sorcererlm-8x22b", @@ -227,9 +235,5 @@ var ModelList = []string{ "undi95/remm-slerp-l2-13b", "undi95/toppy-m-7b", "undi95/toppy-m-7b:free", - "x-ai/grok-2-1212", - "x-ai/grok-2-vision-1212", - "x-ai/grok-beta", - "x-ai/grok-vision-beta", "xwin-lm/xwin-lm-70b", } diff --git a/relay/billing/ratio/model.go b/relay/billing/ratio/model.go index 6ef2a457..4279845b 100644 --- a/relay/billing/ratio/model.go +++ b/relay/billing/ratio/model.go @@ -101,6 +101,8 @@ var ModelRatio = map[string]float64{ "claude-3-7-sonnet-20250219": 3.0 / 1000 * USD, "claude-3-7-sonnet-latest": 3.0 / 1000 * USD, "claude-3-opus-20240229": 15.0 / 1000 * USD, + "claude-3-7-sonnet-20250219": 3.0 / 1000 * USD, + "claude-3-7-sonnet-latest": 3.0 / 1000 * USD, // https://cloud.baidu.com/doc/WENXINWORKSHOP/s/hlrk4akp7 "ERNIE-4.0-8K": 0.120 * RMB, "ERNIE-3.5-8K": 0.012 * RMB,