@acosmi/sdk-ts 2.8.0 → 2.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/README.md +63 -0
- package/dist/browser/index.mjs +47 -8
- package/dist/browser/index.mjs.map +1 -1
- package/dist/index.mjs +47 -8
- package/dist/index.mjs.map +1 -1
- package/dist/node/adapters/anthropic.cjs.map +1 -1
- package/dist/node/adapters/anthropic.d.cts +1 -1
- package/dist/node/adapters/anthropic.d.ts +1 -1
- package/dist/node/adapters/anthropic.mjs.map +1 -1
- package/dist/node/adapters/openai.cjs.map +1 -1
- package/dist/node/adapters/openai.d.cts +2 -2
- package/dist/node/adapters/openai.d.ts +2 -2
- package/dist/node/adapters/openai.mjs.map +1 -1
- package/dist/node/{index-BrbgHn0E.d.cts → index-CsDRFZIj.d.cts} +99 -1
- package/dist/node/{index-BrbgHn0E.d.ts → index-CsDRFZIj.d.ts} +99 -1
- package/dist/node/index.cjs +47 -8
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.d.cts +41 -10
- package/dist/node/index.d.ts +41 -10
- package/dist/node/index.mjs +47 -8
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/{openai-DoPpzZmv.d.ts → openai-BdpEzATI.d.ts} +1 -1
- package/dist/node/{openai-CeM2k04b.d.cts → openai-Z2NDbHhT.d.cts} +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,31 @@ All notable changes to `@acosmi/sdk-ts` will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [2.10.0] - 2026-06-20 — 多模态向量 / 重排序 (qwen3-vl-embedding / qwen3-vl-rerank)
|
|
9
|
+
|
|
10
|
+
向量与重排序端点扩展为**多模态**(text / image / **video**),对接 DashScope `qwen3-vl-embedding`(多模态向量端点)与 `qwen3-vl-rerank`(原生 rerank 端点 + 多模态 content)。面向自建搜索引擎的图文 / 视频检索场景。计费口径不变(`total_tokens` 套 input 费率),上游模型名仍由管理员后台自填,不在 SDK / 网关硬编码。
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **`EmbeddingRequest.contents`** — 多模态向量输入:`MultimodalContent[]`(`{ text?, image?, video? }`)。与 `input`(文本线路)二选一;多模态托管模型用 `contents`。同时新增可选 `output_type` / `fps` / `enable_fusion` 参数。
|
|
15
|
+
- **`RerankRequest` 多态 query / documents** — `query: RerankQuery`(`string | { text?, image? }`),`documents: RerankDocument[]`(`(string | { text?, image?, video? })[]`);新增可选 `fps`(多模态视频文档抽帧率)。文本调用完全向后兼容(仍可传 `string` / `string[]`)。
|
|
16
|
+
- **类型** — `MultimodalContent` / `RerankQuery` / `RerankDocument`。
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- **`EmbeddingRequest.input` 改为可选**(`input?: string | string[]`)——多模态线路改用 `contents`。文本调用方无需改动(仍可只传 `input`)。
|
|
21
|
+
|
|
22
|
+
## [2.9.0] - 2026-06-20 — 向量 (Embedding) + 重排序 (Rerank) 端点 + listModels 全集模式
|
|
23
|
+
|
|
24
|
+
托管模型网关新增向量与重排序两类模型(上游接阿里云百炼 DashScope),SDK 订阅会员可经现有会员计费体系(Hold→Settle→Release,按 `total_tokens` 套 input 费率)直接调用。具体上游模型名(`text-embedding-v4` / `gte-rerank-v2` / `qwen3-rerank` 等)由管理员在托管模型后台自填,不在 SDK / 网关硬编码。
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
|
|
28
|
+
- **`client.embeddings(modelID, req)`** — 向量(同步,`POST /managed-models/:id/embeddings`):请求 `{ input: string | string[], dimensions?, encoding_format? }`,响应为 OpenAI `/v1/embeddings` 标准格式(`{ object, model, data: [{ embedding }], usage }`,网关直通无包装)。仅 `capabilities.supports_embedding=true` 的模型可用。
|
|
29
|
+
- **`client.rerank(modelID, req)`** — 重排序(同步,`POST /managed-models/:id/rerank`):统一扁平契约 `{ query, documents[], top_n?, return_documents?, instruct? }`,响应 `{ results: [{ index, relevance_score, document? }], usage, model }`(网关已把上游原生嵌套 / OpenAI 兼容扁平两线路归一化)。仅 `capabilities.supports_rerank=true` 的模型可用。
|
|
30
|
+
- **类型** — `EmbeddingRequest`/`EmbeddingData`/`EmbeddingResponse`/`RerankRequest`/`RerankResult`/`RerankResponse`。
|
|
31
|
+
- **`listModels` / `listModelsWithStatus` 新增 `opts.includeLocked`** — `true` 时请求 `/managed-models?picker=1` 全集模式:网关把越档模型作为 `Locked=true` 补回返全集,供 C 端选择器展示「付费订阅区」+ 置灰升级引导。缺省行为不变(只返有桶模型,向后兼容)。全集模式不写 `modelCache`,避免 locked 模型混入可用模型集。
|
|
32
|
+
|
|
8
33
|
## [2.7.0] - 2026-06-11 — 远控管理面补齐 + BYOK 密钥客户端 + Chat Bridge CRUD(Phase 7B)
|
|
9
34
|
|
|
10
35
|
补齐远控核心交互之外的全部管理面(此前下游 CrabCode 只能裸 fetch),新增 BYO 模型密钥客户端,落地 chat-bridge integration/credential 管理面 CRUD——云端控制台与下游调用的是同一组端点同一份租户隔离数据,天然互通。全部方法逐字段对齐 nexus-v4 handler 真实 wire 形状(契约 §12/§14/§18 附录 A)。
|
package/README.md
CHANGED
|
@@ -175,6 +175,68 @@ console.log(res.videoUrl); // VideoTaskResponse: taskId / status / videoUrl / er
|
|
|
175
175
|
|
|
176
176
|
> 字段是网关**通用契约**;某厂商支持哪些取值由上游模型决定(如万相尺寸 `宽*高` 星号格式由网关代转)。网关适配范围:OpenAI 兼容图片 + 火山引擎(即梦/豆包)视频 + DashScope 通义万相(wanx)原生异步任务(图片+视频)。
|
|
177
177
|
|
|
178
|
+
## 向量 / 重排序(托管模型网关,v2.9+)
|
|
179
|
+
|
|
180
|
+
向量(embedding)与重排序(rerank)走与 chat 同一套**会员计费**(Hold→Settle→Release,按 `total_tokens` 套 input 费率),上游接阿里云百炼 DashScope。仅 `capabilities.supports_embedding` / `supports_rerank` 的托管模型可用;具体上游模型名由管理员在后台自填。
|
|
181
|
+
|
|
182
|
+
### 向量(同步)
|
|
183
|
+
|
|
184
|
+
`embeddings` 一次调用拿向量,响应即 OpenAI `/v1/embeddings` 标准格式。
|
|
185
|
+
|
|
186
|
+
```ts
|
|
187
|
+
const models = await client.listModels();
|
|
188
|
+
const embModel = models.find((m) => m.capabilities?.supports_embedding);
|
|
189
|
+
|
|
190
|
+
const resp = await client.embeddings(embModel!.id, {
|
|
191
|
+
input: ['第一段文本', '第二段文本'], // string 或 string[]
|
|
192
|
+
dimensions: 1024, // 可选
|
|
193
|
+
});
|
|
194
|
+
console.log(resp.data[0].embedding); // number[]
|
|
195
|
+
console.log(resp.usage.total_tokens);
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### 重排序(同步)
|
|
199
|
+
|
|
200
|
+
`rerank` 传入 query + 候选文档,返回按相关性排序的下标与得分。
|
|
201
|
+
|
|
202
|
+
```ts
|
|
203
|
+
const rerankModel = models.find((m) => m.capabilities?.supports_rerank);
|
|
204
|
+
|
|
205
|
+
const resp = await client.rerank(rerankModel!.id, {
|
|
206
|
+
query: '什么是文本排序模型',
|
|
207
|
+
documents: ['文档A', '文档B', '文档C'],
|
|
208
|
+
top_n: 3, // 可选
|
|
209
|
+
return_documents: true, // 可选:结果内回传文档原文
|
|
210
|
+
});
|
|
211
|
+
for (const r of resp.results) {
|
|
212
|
+
console.log(r.index, r.relevance_score, r.document);
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
> 重排序对外是**统一扁平契约**;网关内部按模型绑定的线路(DashScope 原生嵌套 `gte-rerank-v2` / OpenAI 兼容扁平 `qwen3-rerank`)自动转换并归一化响应,SDK 侧无需关心。
|
|
217
|
+
|
|
218
|
+
### 多模态向量 / 重排序(v2.10+,text / image / video)
|
|
219
|
+
|
|
220
|
+
对接 DashScope `qwen3-vl-embedding`(多模态向量)与 `qwen3-vl-rerank`(多模态重排序)。向量用 `contents` 取代 `input`;重排序的 `query` / `documents` 接受多模态对象(`{ text? , image?, video? }`)。适用于自建搜索引擎的图文 / 视频检索。
|
|
221
|
+
|
|
222
|
+
```ts
|
|
223
|
+
// 多模态向量:图 / 视频 / 文本混合
|
|
224
|
+
const emb = await client.embeddings(mmEmbModel!.id, {
|
|
225
|
+
contents: [{ text: '一只橘猫' }, { image: 'https://…/cat.png' }, { video: 'https://…/clip.mp4' }],
|
|
226
|
+
output_type: 'dense', // 可选
|
|
227
|
+
fps: 2, // 可选:视频抽帧率
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
// 多模态重排序:query 与候选可为多模态对象,也可混入纯文本字符串
|
|
231
|
+
const rr = await client.rerank(mmRerankModel!.id, {
|
|
232
|
+
query: { text: '红色跑车' },
|
|
233
|
+
documents: [{ image: 'https://…/car.png' }, { video: 'https://…/road.mp4' }, '一段描述文字'],
|
|
234
|
+
fps: 1.5, // 可选
|
|
235
|
+
});
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
> 文本调用完全向后兼容:`input` / 字符串 `query` / 字符串 `documents` 行为不变。多模态托管模型须由管理员在后台勾选对应能力位与输入模态(text/image/video)。
|
|
239
|
+
|
|
178
240
|
## 双格式红线(设计核心)
|
|
179
241
|
|
|
180
242
|
SDK 同时提供 **Anthropic + OpenAI 两条 endpoint**,**等地位**,对应两个不同下游产品。
|
|
@@ -508,6 +570,7 @@ const client = new Client({ serverURL: process.env.ACOSMI_SERVER_URL!, store: ne
|
|
|
508
570
|
| **Client 构造** | `new Client(cfg)`(同步),`Client.create(cfg)`(async;预加载已有 TokenStore) |
|
|
509
571
|
| **Chat** | `chat`, `chatStream`, `chatStreamWithUsage`, `chatMessages`, `chatMessagesStream`, `buildChatRequest` |
|
|
510
572
|
| **图片 / 视频生成**(v2.2.0+) | `generateImage`(同步), `generateVideo`(建异步任务), `pollVideoTask`(轮询);仅 `capabilities.supports_image_generation` / `supports_video_generation` 模型可用 |
|
|
573
|
+
| **向量 / 重排序**(v2.9.0+) | `embeddings`(同步), `rerank`(同步);仅 `capabilities.supports_embedding` / `supports_rerank` 模型可用 |
|
|
511
574
|
| **Agent Runs** | `agentRuns.create`, `agentRuns.stream`, `agentRuns.run`, `agentRuns.cancel`, `agentRuns.get`, `agentRuns.listArtifacts`, `agentRuns.downloadArtifact`, `agentRuns.submitLocalToolResult`, `agentRuns.runWithLocalTools` |
|
|
512
575
|
| **Agent Runs — 远程控制**(v2.1) | `agentRuns.createRemoteRun`, `agentRuns.streamRemoteControl`;helper:`parseRemoteControlEvent`, `isTerminalRemoteEvent`;scope:`remoteControlScopes()` / `ScopeRemoteControl`(不进 `allScopes()`) |
|
|
513
576
|
| **Chat Bridge**(v2.1 · types-only) | 无 client 方法(Phase 7B 后端落地);导出类型守卫 `isPlatform`, `isRegion`, `isIntegrationStatus`, `isChannelInboundEvent`, `asCredentialRef` |
|
package/dist/browser/index.mjs
CHANGED
|
@@ -2206,9 +2206,16 @@ var Client = class _Client {
|
|
|
2206
2206
|
fetchImpl;
|
|
2207
2207
|
/** 互斥锁 (TS 用 Promise chain 替代 sync.Mutex) */
|
|
2208
2208
|
mu = Promise.resolve();
|
|
2209
|
-
/**
|
|
2209
|
+
/**
|
|
2210
|
+
* WebSocket 状态 (实际方法由 ws.ts mixin 维护)。
|
|
2211
|
+
* @internal — 实现细节: 跨模块 (ws.ts mixin) 需可见故为 public, 但非消费者 API,
|
|
2212
|
+
* 消费者用 connect/subscribe 等高层方法; 引用的 WSState 不进公开文档。
|
|
2213
|
+
*/
|
|
2210
2214
|
ws = null;
|
|
2211
|
-
/**
|
|
2215
|
+
/**
|
|
2216
|
+
* v0.15.1: token 就绪等待机制 — login 成功后 resolve, 等待方解除阻塞。
|
|
2217
|
+
* @internal — 内部同步原语 (Deferred), 非消费者 API。
|
|
2218
|
+
*/
|
|
2212
2219
|
tokenReady = newDeferred();
|
|
2213
2220
|
/** Login 进行中 — 等待方需等而非 fail-fast */
|
|
2214
2221
|
loginInFlight = false;
|
|
@@ -2679,8 +2686,8 @@ var Client = class _Client {
|
|
|
2679
2686
|
* V30 二轮审计 D-P1-2: 此方法不返回 entitlement-filter-status header.
|
|
2680
2687
|
* UI 想根据 fallback 状态显示降级提示, 请改调 listModelsWithStatus.
|
|
2681
2688
|
*/
|
|
2682
|
-
async listModels(signal) {
|
|
2683
|
-
const r = await this.listModelsWithStatus(signal);
|
|
2689
|
+
async listModels(signal, opts) {
|
|
2690
|
+
const r = await this.listModelsWithStatus(signal, opts);
|
|
2684
2691
|
return r.models;
|
|
2685
2692
|
}
|
|
2686
2693
|
/**
|
|
@@ -2693,16 +2700,20 @@ var Client = class _Client {
|
|
|
2693
2700
|
* - status === 'disabled-by-flag' → 不显示余量 (运维灰度中)
|
|
2694
2701
|
* - status === '' (Unknown) → 老 nexus, 按老 v0.17 行为 (不显示 BucketInfo)
|
|
2695
2702
|
*/
|
|
2696
|
-
async listModelsWithStatus(signal) {
|
|
2703
|
+
async listModelsWithStatus(signal, opts) {
|
|
2704
|
+
const includeLocked = opts?.includeLocked === true;
|
|
2705
|
+
const path = includeLocked ? "/managed-models?picker=1" : "/managed-models";
|
|
2697
2706
|
const { result, headers } = await this.doJSONFull(
|
|
2698
2707
|
"GET",
|
|
2699
|
-
|
|
2708
|
+
path,
|
|
2700
2709
|
null,
|
|
2701
2710
|
signal
|
|
2702
2711
|
);
|
|
2703
2712
|
const normalized = normalizeInputModalities(result.data);
|
|
2704
|
-
|
|
2705
|
-
|
|
2713
|
+
if (!includeLocked) {
|
|
2714
|
+
this.modelCache = normalized;
|
|
2715
|
+
this.modelCacheTimeMs = Date.now();
|
|
2716
|
+
}
|
|
2706
2717
|
let status = "";
|
|
2707
2718
|
if (headers) {
|
|
2708
2719
|
const h = headers.get("X-Entitlement-Filter-Status");
|
|
@@ -2897,6 +2908,34 @@ var Client = class _Client {
|
|
|
2897
2908
|
const { result } = await this.doJSONFullRaw("GET", endpoint, null, signal);
|
|
2898
2909
|
return this.unwrapAPIResponse(result);
|
|
2899
2910
|
}
|
|
2911
|
+
/**
|
|
2912
|
+
* 向量 (同步)。POST /managed-models/:id/embeddings
|
|
2913
|
+
*
|
|
2914
|
+
* 仅 capabilities.supports_embedding=true 的托管模型可用 (上游接 DashScope)。
|
|
2915
|
+
* 响应为 OpenAI /v1/embeddings 标准格式 (网关直通, 无 response.Success 包装)。
|
|
2916
|
+
*
|
|
2917
|
+
* @param modelID 向量托管模型 ID
|
|
2918
|
+
*/
|
|
2919
|
+
async embeddings(modelID, req, signal) {
|
|
2920
|
+
const endpoint = `/managed-models/${encodeURIComponent(modelID)}/embeddings`;
|
|
2921
|
+
const { result } = await this.doJSONFullRaw("POST", endpoint, req, signal, CHAT_REQUEST_TIMEOUT_MS);
|
|
2922
|
+
return JSON.parse(new TextDecoder().decode(result));
|
|
2923
|
+
}
|
|
2924
|
+
/**
|
|
2925
|
+
* 重排序 (同步)。POST /managed-models/:id/rerank
|
|
2926
|
+
*
|
|
2927
|
+
* 仅 capabilities.supports_rerank=true 的托管模型可用 (上游接 DashScope)。
|
|
2928
|
+
* 统一扁平契约: { query, documents[], top_n?, return_documents?, instruct? };
|
|
2929
|
+
* 响应 { results: [{ index, relevance_score, document? }], usage, model }
|
|
2930
|
+
* (网关已把上游原生/OpenAI 兼容两线路归一化, 无 response.Success 包装)。
|
|
2931
|
+
*
|
|
2932
|
+
* @param modelID 重排序托管模型 ID
|
|
2933
|
+
*/
|
|
2934
|
+
async rerank(modelID, req, signal) {
|
|
2935
|
+
const endpoint = `/managed-models/${encodeURIComponent(modelID)}/rerank`;
|
|
2936
|
+
const { result } = await this.doJSONFullRaw("POST", endpoint, req, signal, CHAT_REQUEST_TIMEOUT_MS);
|
|
2937
|
+
return JSON.parse(new TextDecoder().decode(result));
|
|
2938
|
+
}
|
|
2900
2939
|
/**
|
|
2901
2940
|
* Anthropic 原生格式同步聊天
|
|
2902
2941
|
* v0.5.0: 根据 provider 自动路由
|