Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
692e8d6
fix(web): restore admin unbinding for built-in providers (#6987)
zcxads666 Aug 29, 2026
ac381ac
fix(billing): 修复时间规则恒真表达式导致倍率全天生效 (#6934)
zcxads666 Aug 29, 2026
7037ac1
fix(docker): add relaykit go.mod to dev build context (#7072)
VladKabiak Aug 29, 2026
eb48396
feat(task): replace built-in task adaptors with a sandboxed JS plugin…
Calcium-Ion Aug 29, 2026
0f2a207
fix(relay): 请求参数校验错误返回 HTTP 400 (#6774)
ax2 Aug 29, 2026
98d50d5
fix(web): recheck setup status after page reload (#6968)
seefs001 Aug 29, 2026
b80d633
feat(auth): encrypt password login transport
Calcium-Ion Aug 29, 2026
8454082
feat(chat): add AQBot preset (#7079)
Licoy Aug 29, 2026
918427d
feat(auth): make password encryption opt-in #6743
Calcium-Ion Aug 29, 2026
6c22550
feat(task): resolve channel-mapped aliases and case variants for plug…
Calcium-Ion Aug 30, 2026
66031a0
fix(model): disable PostgreSQL prepared statements for pooler compati…
Calcium-Ion Aug 30, 2026
0bee5d4
fix(ali): honor image response format (#5513) (#7048)
PuppetKL Aug 30, 2026
dc4732c
feat(web): factory task plugins update only with the system
Calcium-Ion Aug 30, 2026
b5b94bc
fix(subscription): 无有效订阅时前端如实显示「仅用订阅」偏好 (#6222) (#7086)
CR-Yun Aug 30, 2026
1751f43
fix(sqlite): enable WAL + working busy timeout + _txlock=immediate to…
LinineTy Aug 30, 2026
6eb6f35
fix(model): return string from JSON column Valuers for pg simple prot…
Calcium-Ion Aug 30, 2026
b518d00
fix(relay): bound the wait for upstream response headers (fixes unbou…
txgo Aug 30, 2026
7415871
fix initialize database
Calcium-Ion Aug 30, 2026
69a41ee
fix(model): drop leftover prefill_groups unique constraints before Au…
seefs001 Aug 30, 2026
2bf0820
Revert "fix(model): drop leftover prefill_groups unique constraints b…
Calcium-Ion Aug 30, 2026
2b6f1df
fix(model): drop leftover prefill_groups unique constraints before Au…
Calcium-Ion Aug 30, 2026
8c8c415
fix(log): preserve quota in usage statistics (#7108)
jimmyleocn Aug 31, 2026
27ff6a8
fix(model): migrate legacy token key constraints
Calcium-Ion Aug 31, 2026
67a0585
fix(docs): correct Video API links across localized READMEs (#7116)
To3akaRin Aug 31, 2026
b7017c2
fix(model): do not treat no-op system task state writes as lock loss …
seefs001 Sep 1, 2026
0ed497f
feat(relay): hosted-tool conversion fidelity, reasoning normalization…
Calcium-Ion Sep 1, 2026
bbd9744
fix(relay): follow-up billing integrity and conversion completions (#…
Calcium-Ion Sep 3, 2026
aece11d
feat(plugin): add MiniMax-H3 /v2 video generation to the hailuo task …
NebulaMao Sep 3, 2026
d8ca0ed
chore: let owners use human PR templates
Calcium-Ion Sep 3, 2026
73afad5
fix(plugin): account for MiniMax-H3 input media usage (#7171)
Calcium-Ion Sep 3, 2026
057f71c
fix(logs): isolate privileged metadata
Calcium-Ion Sep 3, 2026
219c9e0
优化匿名冷启动与公开内容接口的重复回源请求 (#7166)
CreatorEdition Sep 3, 2026
9f506dd
refactor(logs): simplify LogOther projection and dedupe sensitive keys
Calcium-Ion Sep 3, 2026
9df450f
feat(task): give polling hooks a real query context, host HTTP classi…
Calcium-Ion Sep 3, 2026
36dbbf0
fix: keep ETag valid across different JSON packages
Calcium-Ion Sep 3, 2026
8f5ab8e
fix(ci): resolve release version from trigger tag
Calcium-Ion Sep 3, 2026
32c2619
fix(task): explain 503 when a plugin-claimed model has no channel
Calcium-Ion Sep 3, 2026
3a9f41e
fix: temp disable /messages/count_tokens
Calcium-Ion Sep 4, 2026
7c044d7
feat(relay): explicit @ model modifiers and canonical billing identity
Calcium-Ion Sep 4, 2026
6b659fd
fix(relay): preserve reasoning effort without implicit remapping
Calcium-Ion Sep 5, 2026
d580353
docs: require expression pricing and consolidated tests
Calcium-Ion Sep 5, 2026
eb99ab1
feat(billing): add built-in expression pricing for gpt-6-astra
Calcium-Ion Sep 5, 2026
5170564
chore: merge upstream QuantumNous/new-api eb99ab1b (48 commits)
lonely-4 Sep 5, 2026
7fc07dd
Merge remote-tracking branch 'origin/main' into sync/upstream-20260906
lonely-4 Sep 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
10 changes: 10 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,20 @@
# 任务和功能配置
# 更新任务启用
# UPDATE_TASK=true
# 异步任务硬超时(分钟),按提交时间计算,超时未完成的任务标记失败并退款;0 表示禁用
# TASK_TIMEOUT_MINUTES=1440
# 异步任务连续轮询失败阈值(上游 429/5xx/401/403、网络错误、无法识别的响应),达到后任务标记失败并退款;正常轮询成功一次即归零
# TASK_POLL_MAX_FAILURES=20

# 对话超时设置
# 所有请求超时时间,单位秒,默认为0,表示不限制
# RELAY_TIMEOUT=0
# Relay HTTP 客户端空闲连接超时时间,单位秒,默认跟随 Go 标准库,设置为0表示不限制
# RELAY_IDLE_CONN_TIMEOUT=90
# 等待上游返回响应头的超时时间,单位秒,默认 1800,设置为 0 表示不限制。
# 仅约束「等待响应头」这一段;响应头返回之后的流式传输不受影响。
# 注意:非流式请求通常要等上游生成完毕才会返回响应头,因此该值需留足余量。
# RELAY_RESPONSE_HEADER_TIMEOUT=1800
# 流模式无响应超时时间,单位秒,如果出现空补全可以尝试改为更大值
# STREAMING_TIMEOUT=300

Expand All @@ -79,6 +87,8 @@

# 会话密钥
# SESSION_SECRET=random_string
# 登录密码请求体 RSA-OAEP 加密;默认关闭,且不能替代 HTTPS
# PASSWORD_LOGIN_ENCRYPTION_ENABLED=true
# false/未配置:本地 HTTP 模式,关闭 refresh/logout OriginGuard,且不得设置 TRUSTED_URL;兼容本地开发代理。
# true:启用 Secure Refresh Cookie 和严格 OriginGuard,必须同时列出全部可信 HTTPS Origin。
# SESSION_COOKIE_TRUSTED_URL 多项用英文逗号分隔;不支持通配符、路径或域名后缀匹配。
Expand Down
24 changes: 18 additions & 6 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,12 @@ jobs:
fetch-depth: 0
- name: Determine Version
run: |
VERSION=$(git describe --tags)
echo "VERSION=$VERSION" >> $GITHUB_ENV
if [[ "$GITHUB_REF" == refs/tags/* ]]; then
VERSION=${GITHUB_REF#refs/tags/}
else
VERSION=$(git describe --tags --match 'v[0-9]*')
fi
echo "VERSION=$VERSION" >> "$GITHUB_ENV"
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0
with:
bun-version: '1.4.0'
Expand Down Expand Up @@ -73,8 +77,12 @@ jobs:
fetch-depth: 0
- name: Determine Version
run: |
VERSION=$(git describe --tags)
echo "VERSION=$VERSION" >> $GITHUB_ENV
if [[ "$GITHUB_REF" == refs/tags/* ]]; then
VERSION=${GITHUB_REF#refs/tags/}
else
VERSION=$(git describe --tags --match 'v[0-9]*')
fi
echo "VERSION=$VERSION" >> "$GITHUB_ENV"
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0
with:
bun-version: '1.4.0'
Expand Down Expand Up @@ -121,8 +129,12 @@ jobs:
fetch-depth: 0
- name: Determine Version
run: |
VERSION=$(git describe --tags)
echo "VERSION=$VERSION" >> $GITHUB_ENV
if [[ "$GITHUB_REF" == refs/tags/* ]]; then
VERSION=${GITHUB_REF#refs/tags/}
else
VERSION=$(git describe --tags --match 'v[0-9]*')
fi
echo "VERSION=$VERSION" >> "$GITHUB_ENV"
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0
with:
bun-version: '1.4.0'
Expand Down
7 changes: 5 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
.idea
.review
.vscode
.zed
.history
Expand All @@ -7,6 +8,8 @@ upload
*.db
build
*.db-journal
*.db-shm
*.db-wal
logs
web/dist
web/node_modules
Expand All @@ -20,7 +23,7 @@ tiktoken_cache
.gocache
.gomodcache/
.cache
plans
.plans
.claude
.cursor

Expand All @@ -37,7 +40,7 @@ skills-lock.json

# Local-only live probes and scratch test workspaces.
.local-tests/
service/relayconvert/chat_responses_live_local_test.go
relaykit/relayconvert/chat_responses_live_local_test.go
service/openaicompat/chat_responses_live_local_test.go
go.work
go.work.sum
11 changes: 10 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,11 @@ Do NOT directly import or call `encoding/json` in business code. `json.RawMessag

**Database compatibility:** All database code MUST work with SQLite, MySQL >= 5.7.8, and PostgreSQL >= 9.6 simultaneously.

- Any change that can affect database behavior MUST be verified before the work is considered complete. This includes ORM/database-driver dependency changes, connection/DSN/protocol or prepared-statement configuration, models and GORM tags, migrations and `AutoMigrate`, constraints and indexes, `Scanner`/`Valuer`/serializer behavior, raw SQL, transactions, and row locking.
- Required database verification MUST exercise real SQLite, MySQL, and PostgreSQL instances. Unit tests, mocks, a successful build, code inspection, or testing only one dialect are not substitutes. Use at least one supported version of each engine; changes that depend on version-specific behavior must also cover the minimum supported version.
- Treat GORM core and its database dialect/driver packages as a compatible version set. Any change to one of them requires checking upstream compatibility and running the complete three-database verification matrix; do not upgrade only the core package and infer that existing drivers remain compatible.
- Schema or migration changes MUST be tested both on a fresh database and by upgrading a representative database created by the latest released version. Run startup/migration at least twice to prove idempotency, and verify that existing data, indexes, constraints, and uniqueness guarantees are preserved. Cover the separately configured log database when the affected path is shared with or used by it.
- Record the exact database versions, commands, and results in the final handoff or pull request. If any required database verification cannot be run, report the blocker explicitly and do not claim the change is database-compatible or complete.
- Prefer GORM methods (`Create`, `Find`, `Where`, `Updates`, etc.) over raw SQL.
- Let GORM handle primary key generation; do not use `AUTO_INCREMENT` or `SERIAL` directly.
- Standard `SELECT ... FOR UPDATE` row locks built with GORM query methods in `model/` MUST use `lockForUpdate(tx)`. Do not use the legacy GORM v1 pattern `tx.Set("gorm:query_option", "FOR UPDATE")`, because GORM v2 silently ignores it and no lock is acquired. Do not duplicate `clause.Locking{Strength: "UPDATE"}` at call sites; the shared helper emits `FOR UPDATE` for MySQL/PostgreSQL and skips it for SQLite, where the syntax is unsupported. Dialect-specific locking with different semantics (for example, a MySQL next-key/gap lock) may use raw SQL only behind explicit database-type branches with valid fallbacks for every supported database.
Expand All @@ -102,6 +107,8 @@ Do NOT directly import or call `encoding/json` in business code. `json.RawMessag

**Billing expression system:** When working on tiered/dynamic billing (expression-based pricing), MUST read `pkg/billingexpr/expr.md` first. It documents the design philosophy, expression language, full architecture, token normalization rules, quota conversion, and expression versioning. All billing expression changes must follow that document.

**Built-in model pricing:** New built-in model prices MUST be defined as self-contained billing expressions in `setting/billing_setting/builtin_billing.go`, using real USD per million tokens. Do not add new built-in prices to the legacy model/completion/cache ratio tables. Preserve explicit administrator pricing overrides. Existing legacy prices are migrated only when explicitly requested. Verify published prices and cover applicable context-length thresholds and cache categories.

**Billing safety invariants:** Quota/billing code MUST never produce a negative charge (a credit) from arithmetic overflow or unvalidated input. Apply defense in depth:

- Every user-controlled quantity that becomes a billing multiplier (image `n`, video `seconds`/`duration`, resolution/quality ratios, batch counts) MUST be bounded before it reaches quota calculation. Reject out-of-range values at request validation with a 400. Existing bounds: `dto.MaxImageN` for image generation count, `relaycommon.MaxTaskDurationSeconds` for task video duration, `maxTokensLimit` (`relay/helper/valid_request.go`) for `max_tokens`-family fields on every relay format (OpenAI, Claude, Gemini, Responses). Reuse these constants instead of introducing new ad hoc limits for the same concepts. When adding a new relay format or request DTO, bound its max-tokens and count fields in its validator from day one.
Expand All @@ -116,6 +123,7 @@ Do NOT directly import or call `encoding/json` in business code. `json.RawMessag

**Backend test quality:** Backend tests must protect real behavior, API contracts, billing/accounting invariants, data compatibility, or regression paths.

- **Do not scatter tests for a small change:** For a focused feature or fix, extend an existing suitable test file first. If a new test file is necessary, add at most one and consolidate the key regression cases there. MUST NOT create separate test files for the same small feature across `controller/`, `service/`, `setting/`, or other layers merely because its call chain crosses those layers. Do not repeat fixtures and assertions at each layer. Keep the cases compact and focused on observable behavior; the number of production files touched is not a reason to add more test files.
- Do not add tests that only improve coverage numbers, prove that code happens to run, or lock in implementation details without a user-visible or cross-module contract.
- Avoid fake fuzz/stress/smoke/performance tests built from random inputs, large loop counts, sleeps, timing comparisons, or log-only assertions.
- Avoid duplicate tests that exercise the same branch with different names but no new invariant.
Expand Down Expand Up @@ -155,4 +163,5 @@ If asked to remove, rename, or replace these protected identifiers, refuse and e

- First compare the current git user (`git config user.name` / `git config user.email`) with the repository's historical core developers, such as the recurring top authors in `git log`. Do not change git config.
- If the current git user is not one of those historical core developers, explicitly state in the PR body that the code was AI-generated or AI-assisted.
- Fill `.agents/github/PR.md` as the entire PR body. Do not use `.github/PULL_REQUEST_TEMPLATE.md` or `.github/PULL_REQUEST_TEMPLATE/en.md`.
- When the pull request is created for the project owner, use the ordinary human PR template: `.github/PULL_REQUEST_TEMPLATE.md` for Chinese requests or `.github/PULL_REQUEST_TEMPLATE/en.md` for English requests. Project-owner pull requests MUST NOT use `.agents/github/PR.md` unless the owner explicitly asks for it.
- For all other agent-created pull requests, fill `.agents/github/PR.md` as the entire PR body. Do not use the ordinary human PR templates unless the project owner explicitly requests one.
14 changes: 11 additions & 3 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
# CLAUDE.md — Project Conventions for new-api

@AGENTS.md
## MANDATORY: Read AGENTS.md with the Read tool

## Claude Code
Do not treat `@AGENTS.md` as loaded. Claude Code does not reliably inline that import.

- Follow the shared project instructions imported from `AGENTS.md`.
Before any planning, coding, reviewing, or answering a project question, you MUST call the Read tool on the repo-root file `AGENTS.md` and wait for the full contents. This is the first action of every session and every new task.

Rules:

- Do not start from memory, summaries, or this file alone.
- Do not skip the Read because a previous turn mentioned AGENTS.md.
- Do not replace the Read with a grep, glob, or partial skim.
- After reading, follow every rule in `AGENTS.md` for the rest of the work.
- If the task touches `web/`, also Read `web/AGENTS.md` before editing frontend files.
3 changes: 3 additions & 0 deletions Dockerfile.dev
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ ENV GOEXPERIMENT=greenteagc
WORKDIR /build

ADD go.mod go.sum ./
# relaykit is a local submodule referenced via replace; its go.mod must be
# present for go mod download to resolve the main module graph.
ADD relaykit/go.mod ./relaykit/go.mod
RUN go mod download

COPY . .
Expand Down
2 changes: 1 addition & 1 deletion README.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,7 @@ docker run --name new-api -d --restart always \
- [Response Interface (Responses)](https://docs.newapi.pro/en/docs/api/ai-model/chat/openai/create-response)
- [Image Interface (Image)](https://docs.newapi.pro/en/docs/api/ai-model/images/openai/v1-images-generations--post)
- [Audio Interface (Audio)](https://docs.newapi.pro/en/docs/api/ai-model/audio/openai/create-transcription)
- [Video Interface (Video)](https://docs.newapi.pro/en/docs/api/ai-model/videos/create-video-generation)
- [Video Interface (Video)](https://docs.newapi.pro/en/docs/api/ai-model/videos/sora/createvideo)
- [Embedding Interface (Embeddings)](https://docs.newapi.pro/en/docs/api/ai-model/embeddings/create-embedding)
- [Rerank Interface (Rerank)](https://docs.newapi.pro/en/docs/api/ai-model/rerank/create-rerank)
- [Realtime Conversation (Realtime)](https://docs.newapi.pro/en/docs/api/ai-model/realtime/create-realtime-session)
Expand Down
2 changes: 1 addition & 1 deletion README.fr.md
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,7 @@ docker run --name new-api -d --restart always \
- [Interface de réponse (Responses)](https://docs.newapi.pro/en/docs/api/ai-model/chat/openai/createresponse)
- [Interface d'image (Image)](https://docs.newapi.pro/en/docs/api/ai-model/images/openai/post-v1-images-generations)
- [Interface audio (Audio)](https://docs.newapi.pro/en/docs/api/ai-model/audio/openai/create-transcription)
- [Interface vidéo (Video)](https://docs.newapi.pro/en/docs/api/ai-model/audio/openai/createspeech)
- [Interface vidéo (Video)](https://docs.newapi.pro/en/docs/api/ai-model/videos/sora/createvideo)
- [Interface d'incorporation (Embeddings)](https://docs.newapi.pro/en/docs/api/ai-model/embeddings/createembedding)
- [Interface de rerank (Rerank)](https://docs.newapi.pro/en/docs/api/ai-model/rerank/creatererank)
- [Conversation en temps réel (Realtime)](https://docs.newapi.pro/en/docs/api/ai-model/realtime/createrealtimesession)
Expand Down
2 changes: 1 addition & 1 deletion README.ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,7 @@ docker run --name new-api -d --restart always \
- [レスポンスインターフェース (Responses)](https://docs.newapi.pro/ja/docs/api/ai-model/chat/openai/createresponse)
- [イメージインターフェース (Image)](https://docs.newapi.pro/ja/docs/api/ai-model/images/openai/post-v1-images-generations)
- [オーディオインターフェース (Audio)](https://docs.newapi.pro/ja/docs/api/ai-model/audio/openai/create-transcription)
- [ビデオインターフェース (Video)](https://docs.newapi.pro/ja/docs/api/ai-model/audio/openai/createspeech)
- [ビデオインターフェース (Video)](https://docs.newapi.pro/ja/docs/api/ai-model/videos/sora/createvideo)
- [エンベッドインターフェース (Embeddings)](https://docs.newapi.pro/ja/docs/api/ai-model/embeddings/createembedding)
- [再ランク付けインターフェース (Rerank)](https://docs.newapi.pro/ja/docs/api/ai-model/rerank/creatererank)
- [リアルタイム対話インターフェース (Realtime)](https://docs.newapi.pro/ja/docs/api/ai-model/realtime/createrealtimesession)
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,7 @@ docker run --name new-api -d --restart always \
- [Response Interface (Responses)](https://docs.newapi.pro/en/docs/api/ai-model/chat/openai/createresponse)
- [Image Interface (Image)](https://docs.newapi.pro/en/docs/api/ai-model/images/openai/post-v1-images-generations)
- [Audio Interface (Audio)](https://docs.newapi.pro/en/docs/api/ai-model/audio/openai/create-transcription)
- [Video Interface (Video)](https://docs.newapi.pro/en/docs/api/ai-model/audio/openai/createspeech)
- [Video Interface (Video)](https://docs.newapi.pro/en/docs/api/ai-model/videos/sora/createvideo)
- [Embedding Interface (Embeddings)](https://docs.newapi.pro/en/docs/api/ai-model/embeddings/createembedding)
- [Rerank Interface (Rerank)](https://docs.newapi.pro/en/docs/api/ai-model/rerank/creatererank)
- [Realtime Conversation (Realtime)](https://docs.newapi.pro/en/docs/api/ai-model/realtime/createrealtimesession)
Expand Down Expand Up @@ -328,6 +328,7 @@ docker run --name new-api -d --restart always \
| `SQL_DSN` | Database connection string | - |
| `REDIS_CONN_STRING` | Redis connection string | - |
| `RELAY_IDLE_CONN_TIMEOUT` | Idle keep-alive timeout for relay HTTP clients, seconds. Defaults to Go standard library behavior; set `0` to disable | `90` |
| `RELAY_RESPONSE_HEADER_TIMEOUT` | How long the relay waits for upstream **response headers**, seconds; set `0` to disable. Only bounds the header wait -- streaming after the headers arrive is unaffected. Note that non-streaming upstreams usually send headers only once generation finishes, so leave headroom | `1800` |
| `STREAMING_TIMEOUT` | Streaming timeout (seconds) | `300` |
| `STREAM_SCANNER_MAX_BUFFER_MB` | Max per-line buffer (MB) for the stream scanner; increase when upstream sends huge image/base64 payloads | `64` |
| `MAX_REQUEST_BODY_MB` | Max request body size (MB, counted **after decompression**; prevents huge requests/zip bombs from exhausting memory). Exceeding it returns `413` | `32` |
Expand Down
2 changes: 1 addition & 1 deletion README.zh_CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,7 @@ docker run --name new-api -d --restart always \
- [响应接口 (Responses)](https://docs.newapi.pro/zh/docs/api/ai-model/chat/openai/createresponse)
- [图像接口 (Image)](https://docs.newapi.pro/zh/docs/api/ai-model/images/openai/post-v1-images-generations)
- [音频接口 (Audio)](https://docs.newapi.pro/zh/docs/api/ai-model/audio/openai/create-transcription)
- [视频接口 (Video)](https://docs.newapi.pro/zh/docs/api/ai-model/audio/openai/createspeech)
- [视频接口 (Video)](https://docs.newapi.pro/zh/docs/api/ai-model/videos/sora/createvideo)
- [嵌入接口 (Embeddings)](https://docs.newapi.pro/zh/docs/api/ai-model/embeddings/createembedding)
- [重排序接口 (Rerank)](https://docs.newapi.pro/zh/docs/api/ai-model/rerank/creatererank)
- [实时对话 (Realtime)](https://docs.newapi.pro/zh/docs/api/ai-model/realtime/createrealtimesession)
Expand Down
2 changes: 1 addition & 1 deletion README.zh_TW.md
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,7 @@ docker run --name new-api -d --restart always \
- [響應接口 (Responses)](https://docs.newapi.pro/zh/docs/api/ai-model/chat/openai/createresponse)
- [圖像接口 (Image)](https://docs.newapi.pro/zh/docs/api/ai-model/images/openai/post-v1-images-generations)
- [音訊接口 (Audio)](https://docs.newapi.pro/zh/docs/api/ai-model/audio/openai/create-transcription)
- [影片接口 (Video)](https://docs.newapi.pro/zh/docs/api/ai-model/audio/openai/createspeech)
- [影片接口 (Video)](https://docs.newapi.pro/zh/docs/api/ai-model/videos/sora/createvideo)
- [嵌入接口 (Embeddings)](https://docs.newapi.pro/zh/docs/api/ai-model/embeddings/createembedding)
- [重排序接口 (Rerank)](https://docs.newapi.pro/zh/docs/api/ai-model/rerank/creatererank)
- [即時對話 (Realtime)](https://docs.newapi.pro/zh/docs/api/ai-model/realtime/createrealtimesession)
Expand Down
Loading
Loading