@qjp88995/provider-client 0.1.1 → 0.3.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/dist/direct-resolver.d.ts.map +1 -1
- package/dist/direct-resolver.js +2 -0
- package/dist/direct-resolver.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/justone/client.d.ts +101 -0
- package/dist/justone/client.d.ts.map +1 -0
- package/dist/justone/client.js +272 -0
- package/dist/justone/client.js.map +1 -0
- package/dist/justone/endpoint-spec.d.ts +49 -0
- package/dist/justone/endpoint-spec.d.ts.map +1 -0
- package/dist/justone/endpoint-spec.js +2 -0
- package/dist/justone/endpoint-spec.js.map +1 -0
- package/dist/justone/endpoints.generated.d.ts +7927 -0
- package/dist/justone/endpoints.generated.d.ts.map +1 -0
- package/dist/justone/endpoints.generated.js +8508 -0
- package/dist/justone/endpoints.generated.js.map +1 -0
- package/dist/justone/errors.d.ts +52 -0
- package/dist/justone/errors.d.ts.map +1 -0
- package/dist/justone/errors.js +73 -0
- package/dist/justone/errors.js.map +1 -0
- package/dist/justone/index.d.ts +8 -0
- package/dist/justone/index.d.ts.map +1 -0
- package/dist/justone/index.js +7 -0
- package/dist/justone/index.js.map +1 -0
- package/dist/justone/params.d.ts +17 -0
- package/dist/justone/params.d.ts.map +1 -0
- package/dist/justone/params.js +72 -0
- package/dist/justone/params.js.map +1 -0
- package/dist/justone/pricing.d.ts +6 -0
- package/dist/justone/pricing.d.ts.map +1 -0
- package/dist/justone/pricing.generated.d.ts +303 -0
- package/dist/justone/pricing.generated.d.ts.map +1 -0
- package/dist/justone/pricing.generated.js +305 -0
- package/dist/justone/pricing.generated.js.map +1 -0
- package/dist/justone/pricing.js +11 -0
- package/dist/justone/pricing.js.map +1 -0
- package/dist/media/bibigpt.adapter.d.ts +43 -0
- package/dist/media/bibigpt.adapter.d.ts.map +1 -0
- package/dist/media/bibigpt.adapter.js +302 -0
- package/dist/media/bibigpt.adapter.js.map +1 -0
- package/dist/media/http.d.ts +21 -0
- package/dist/media/http.d.ts.map +1 -0
- package/dist/media/http.js +39 -0
- package/dist/media/http.js.map +1 -0
- package/dist/media/index.d.ts +44 -0
- package/dist/media/index.d.ts.map +1 -0
- package/dist/media/index.js +47 -0
- package/dist/media/index.js.map +1 -0
- package/dist/media/types.d.ts +207 -0
- package/dist/media/types.d.ts.map +1 -0
- package/dist/media/types.js +21 -0
- package/dist/media/types.js.map +1 -0
- package/dist/media/zhipu-parser-package.d.ts +37 -0
- package/dist/media/zhipu-parser-package.d.ts.map +1 -0
- package/dist/media/zhipu-parser-package.js +108 -0
- package/dist/media/zhipu-parser-package.js.map +1 -0
- package/dist/media/zhipu.adapter.d.ts +37 -0
- package/dist/media/zhipu.adapter.d.ts.map +1 -0
- package/dist/media/zhipu.adapter.js +361 -0
- package/dist/media/zhipu.adapter.js.map +1 -0
- package/dist/provider-client.d.ts +65 -0
- package/dist/provider-client.d.ts.map +1 -1
- package/dist/provider-client.js +151 -0
- package/dist/provider-client.js.map +1 -1
- package/dist/types.d.ts +15 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +16 -1
- package/dist/types.js.map +1 -1
- package/dist/web-search/deepseek.adapter.d.ts +19 -0
- package/dist/web-search/deepseek.adapter.d.ts.map +1 -0
- package/dist/web-search/deepseek.adapter.js +82 -0
- package/dist/web-search/deepseek.adapter.js.map +1 -0
- package/dist/web-search/http.d.ts +28 -0
- package/dist/web-search/http.d.ts.map +1 -0
- package/dist/web-search/http.js +95 -0
- package/dist/web-search/http.js.map +1 -0
- package/dist/web-search/index.d.ts +27 -0
- package/dist/web-search/index.d.ts.map +1 -0
- package/dist/web-search/index.js +36 -0
- package/dist/web-search/index.js.map +1 -0
- package/dist/web-search/minimax.adapter.d.ts +13 -0
- package/dist/web-search/minimax.adapter.d.ts.map +1 -0
- package/dist/web-search/minimax.adapter.js +82 -0
- package/dist/web-search/minimax.adapter.js.map +1 -0
- package/dist/web-search/moonshotai.adapter.d.ts +19 -0
- package/dist/web-search/moonshotai.adapter.d.ts.map +1 -0
- package/dist/web-search/moonshotai.adapter.js +151 -0
- package/dist/web-search/moonshotai.adapter.js.map +1 -0
- package/dist/web-search/types.d.ts +120 -0
- package/dist/web-search/types.d.ts.map +1 -0
- package/dist/web-search/types.js +60 -0
- package/dist/web-search/types.js.map +1 -0
- package/dist/web-search/zhipu.adapter.d.ts +14 -0
- package/dist/web-search/zhipu.adapter.d.ts.map +1 -0
- package/dist/web-search/zhipu.adapter.js +98 -0
- package/dist/web-search/zhipu.adapter.js.map +1 -0
- package/package.json +4 -3
- package/src/direct-resolver.ts +2 -0
- package/src/index.ts +104 -0
- package/src/justone/client.ts +462 -0
- package/src/justone/endpoint-spec.ts +66 -0
- package/src/justone/endpoints.generated.ts +9258 -0
- package/src/justone/errors.ts +97 -0
- package/src/justone/index.ts +34 -0
- package/src/justone/params.ts +91 -0
- package/src/justone/pricing.generated.ts +308 -0
- package/src/justone/pricing.ts +11 -0
- package/src/media/bibigpt.adapter.ts +372 -0
- package/src/media/http.ts +43 -0
- package/src/media/index.ts +114 -0
- package/src/media/types.ts +233 -0
- package/src/media/zhipu-parser-package.ts +149 -0
- package/src/media/zhipu.adapter.ts +510 -0
- package/src/provider-client.ts +268 -1
- package/src/types.ts +23 -2
- package/src/web-search/deepseek.adapter.ts +149 -0
- package/src/web-search/http.ts +108 -0
- package/src/web-search/index.ts +70 -0
- package/src/web-search/minimax.adapter.ts +148 -0
- package/src/web-search/moonshotai.adapter.ts +228 -0
- package/src/web-search/types.ts +172 -0
- package/src/web-search/zhipu.adapter.ts +184 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { clip, codeOf, joinUrl, parseJson, postJson } from './http.js';
|
|
2
|
+
import { recencySince, utcDate, WebSearchUpstreamError, } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Kimi 工具网关(<https://platform.kimi.com/docs/api/tools-search>):搜索基础版 `/search`、
|
|
5
|
+
* 专业版 `/search_pro`、网页抓取 `/fetch`。与对话 API 同一把 Bearer key;`web-search` 端点的根是
|
|
6
|
+
* `https://api.moonshot.cn/v1/tools`(国际站 `api.moonshot.ai`,两站账号与 key 不通用,在中心是两家厂商)。
|
|
7
|
+
* 专业版与抓取的文档只列了国内站,国际站沿用同一组路径。
|
|
8
|
+
*
|
|
9
|
+
* **不是 Formula 的 `moonshot/web-search`**:那个回 `encrypted_output`,只有 Kimi 模型读得了。
|
|
10
|
+
*/
|
|
11
|
+
/** 文档:两档的 `limit` 都是 1–20。工具层允许到 50,超出的压到上限而不是让上游 400。 */
|
|
12
|
+
const MAX_LIMIT = 20;
|
|
13
|
+
/**
|
|
14
|
+
* 基础版没有时间 / 域名过滤字段,给了就报回 `ignored`——文档没说认 `site:` 之类的操作符,
|
|
15
|
+
* 拼进查询是在猜。专业版有 `sites` 与 `time_window`,两项都施加。`include_content` 不开:
|
|
16
|
+
* 会把每条结果的全文塞回来,体量没有上限。
|
|
17
|
+
*/
|
|
18
|
+
export class MoonshotaiWebSearchAdapter {
|
|
19
|
+
now;
|
|
20
|
+
kind = 'moonshotai';
|
|
21
|
+
constructor(now = () => new Date()) {
|
|
22
|
+
this.now = now;
|
|
23
|
+
}
|
|
24
|
+
traits(settings) {
|
|
25
|
+
return {
|
|
26
|
+
readsPages: true,
|
|
27
|
+
maxResults: MAX_LIMIT,
|
|
28
|
+
filters: settings.searchTier === 'pro' ? ['recency', 'domain'] : [],
|
|
29
|
+
linksOftenMissing: false,
|
|
30
|
+
// 抓取的正文里图片是占位符(``),模型得知道那不是它能看的图。
|
|
31
|
+
pageImagesArePlaceholders: true,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
async search(conn, settings, input, signal) {
|
|
35
|
+
const pro = settings.searchTier === 'pro';
|
|
36
|
+
const label = pro ? 'kimi search_pro' : 'kimi search';
|
|
37
|
+
const body = {
|
|
38
|
+
text_query: input.query,
|
|
39
|
+
...(input.count !== undefined
|
|
40
|
+
? { limit: Math.min(input.count, MAX_LIMIT) }
|
|
41
|
+
: {}),
|
|
42
|
+
...(pro && input.domain ? { sites: [input.domain] } : {}),
|
|
43
|
+
...(pro && input.recency
|
|
44
|
+
? {
|
|
45
|
+
time_window: {
|
|
46
|
+
start: recencySince(input.recency, this.now()),
|
|
47
|
+
end: utcDate(this.now()),
|
|
48
|
+
},
|
|
49
|
+
}
|
|
50
|
+
: {}),
|
|
51
|
+
};
|
|
52
|
+
const res = await postJson(label, joinUrl(conn.baseUrl, pro ? 'search_pro' : 'search'), conn, body, signal);
|
|
53
|
+
if (!res.ok)
|
|
54
|
+
throw upstreamError(label, res.status, res.text);
|
|
55
|
+
const data = parseJson(label, res.text);
|
|
56
|
+
const items = (data.search_results ?? []).map(r => ({
|
|
57
|
+
title: r.title ?? '',
|
|
58
|
+
link: r.url ?? '',
|
|
59
|
+
content: r.snippet || bestChunk(r.chunks) || '',
|
|
60
|
+
media: r.site_name || null,
|
|
61
|
+
publishDate: r.date || null,
|
|
62
|
+
}));
|
|
63
|
+
const ignored = pro
|
|
64
|
+
? []
|
|
65
|
+
: [
|
|
66
|
+
...(input.recency ? ['recency'] : []),
|
|
67
|
+
...(input.domain ? ['domain'] : []),
|
|
68
|
+
];
|
|
69
|
+
return {
|
|
70
|
+
engine: pro ? 'kimi-pro' : 'kimi',
|
|
71
|
+
items,
|
|
72
|
+
...(ignored.length ? { ignored } : {}),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
async readPage(conn, _settings, input, signal) {
|
|
76
|
+
const label = 'kimi fetch';
|
|
77
|
+
const res = await postJson(label, joinUrl(conn.baseUrl, 'fetch'), conn, { url: input.url }, signal);
|
|
78
|
+
if (!res.ok) {
|
|
79
|
+
const err = errorBodyOf(res.text);
|
|
80
|
+
// 「读到了但没有可提取的正文」不是故障(也不计费):交给工具层说「正文为空」,
|
|
81
|
+
// 别让模型当成链接坏了去重试。
|
|
82
|
+
if (res.status === 404 && err.type === 'markdown_not_found') {
|
|
83
|
+
return { url: input.url, title: null, description: null, content: '' };
|
|
84
|
+
}
|
|
85
|
+
throw upstreamError(label, res.status, res.text);
|
|
86
|
+
}
|
|
87
|
+
const data = parseJson(label, res.text);
|
|
88
|
+
if (typeof data.markdown !== 'string') {
|
|
89
|
+
throw new WebSearchUpstreamError('kimi fetch 响应缺少 markdown');
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
url: data.url || input.url,
|
|
93
|
+
title: data.title || null,
|
|
94
|
+
description: null,
|
|
95
|
+
content: data.markdown,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/** 专业版的摘要偶尔为空,退回得分最高的正文片段。 */
|
|
100
|
+
function bestChunk(chunks) {
|
|
101
|
+
let best;
|
|
102
|
+
for (const c of chunks ?? []) {
|
|
103
|
+
if (!c.text)
|
|
104
|
+
continue;
|
|
105
|
+
if (!best || (c.score ?? 0) > (best.score ?? 0))
|
|
106
|
+
best = c;
|
|
107
|
+
}
|
|
108
|
+
return best?.text;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* 错误体是 `{error: {message, type, code?}}`,判别靠 `type`(`rate_limited` /
|
|
112
|
+
* `upstream_failed` …);401 / 403 没有错误体(抓取的 403 `security_risk` 有)。
|
|
113
|
+
*/
|
|
114
|
+
function upstreamError(label, status, text) {
|
|
115
|
+
const err = errorBodyOf(text);
|
|
116
|
+
const detail = err.message ?? clip(text);
|
|
117
|
+
const hint = (err.type ? TYPE_HINTS[err.type] : undefined) ?? STATUS_HINTS[status];
|
|
118
|
+
return new WebSearchUpstreamError(`${label} ${status}${hint ? `(${hint})` : ''}${detail ? `: ${detail}` : ''}`, {
|
|
119
|
+
code: err.type ?? err.code,
|
|
120
|
+
// 文档:429(限流 / 限流服务不可用)、500、502、504 稍后重试;400 / 403 改请求才有用。
|
|
121
|
+
retryable: status >= 500 || status === 429,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
function errorBodyOf(text) {
|
|
125
|
+
try {
|
|
126
|
+
const body = JSON.parse(text);
|
|
127
|
+
return {
|
|
128
|
+
type: codeOf(body.error?.type),
|
|
129
|
+
code: codeOf(body.error?.code),
|
|
130
|
+
message: typeof body.error?.message === 'string'
|
|
131
|
+
? body.error.message
|
|
132
|
+
: undefined,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return { type: undefined, code: undefined, message: undefined };
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/** 文档里有确定含义的状态码,带进错误文案让模型 / 运营不必去查。 */
|
|
140
|
+
const STATUS_HINTS = {
|
|
141
|
+
401: 'API key 无效,或与所选站点不匹配',
|
|
142
|
+
403: '账户未激活或已停用',
|
|
143
|
+
429: '超过频率或并发上限',
|
|
144
|
+
504: '超时,搜索就换个更短的关键词,读网页就稍后再试',
|
|
145
|
+
};
|
|
146
|
+
/** 同一个状态码含义不止一种时按 `type` 区分(抓取的 403 不是账户问题)。 */
|
|
147
|
+
const TYPE_HINTS = {
|
|
148
|
+
security_risk: '这个网址被 Kimi 的安全策略拦下,换一个网址,重试没用',
|
|
149
|
+
invalid_url: '网址不合法,只支持 http / https',
|
|
150
|
+
};
|
|
151
|
+
//# sourceMappingURL=moonshotai.adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moonshotai.adapter.js","sourceRoot":"","sources":["../../src/web-search/moonshotai.adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import type { VendorFetch } from '../vendors/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* 联网搜索 / 读网页的厂商适配(从 agent-base `web-search/adapters` 搬来)。适配器只管「这家的请求长什么样、
|
|
4
|
+
* 响应怎么翻、哪些失败值得重试」;给模型看的工具说明是 APP 的事,适配器只交出事实(`WebSearchTraits`)。
|
|
5
|
+
*/
|
|
6
|
+
/** 时效过滤取值(缺省 = 不限时间)。各适配器自己翻成上游的写法。 */
|
|
7
|
+
export declare const WEB_SEARCH_RECENCIES: readonly ["oneDay", "oneWeek", "oneMonth", "oneYear"];
|
|
8
|
+
export type WebSearchRecency = (typeof WEB_SEARCH_RECENCIES)[number];
|
|
9
|
+
/** 「最近一段时间」的起始日期(UTC,YYYY-MM-DD)——上游只收日期的家(DeepSeek、Kimi 专业版)共用。 */
|
|
10
|
+
export declare function recencySince(recency: WebSearchRecency, now: Date): string;
|
|
11
|
+
/** UTC 日期 YYYY-MM-DD。 */
|
|
12
|
+
export declare function utcDate(d: Date): string;
|
|
13
|
+
export interface WebSearchInput {
|
|
14
|
+
query: string;
|
|
15
|
+
count?: number;
|
|
16
|
+
recency?: WebSearchRecency;
|
|
17
|
+
domain?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface WebSearchItem {
|
|
20
|
+
title: string;
|
|
21
|
+
link: string;
|
|
22
|
+
/** 搜索引擎给的摘要,不是网页全文。 */
|
|
23
|
+
content: string;
|
|
24
|
+
/** 来源站点 / 媒体名(常为空)。 */
|
|
25
|
+
media: string | null;
|
|
26
|
+
publishDate: string | null;
|
|
27
|
+
}
|
|
28
|
+
/** 搜索的两项过滤。不是每家都支持(Kimi 基础版、MiniMax 都没有),不支持的由适配器报回 `ignored`。 */
|
|
29
|
+
export declare const WEB_SEARCH_FILTERS: readonly ["recency", "domain"];
|
|
30
|
+
export type WebSearchFilter = (typeof WEB_SEARCH_FILTERS)[number];
|
|
31
|
+
export interface WebSearchOutcome {
|
|
32
|
+
/** 「用的是哪个引擎」(智谱是档位名,其余是服务名)。 */
|
|
33
|
+
engine: string;
|
|
34
|
+
items: WebSearchItem[];
|
|
35
|
+
/**
|
|
36
|
+
* 调用方给了、这家却没法施加的过滤(缺省 = 都施加了)。调用方据此说破,别让模型以为
|
|
37
|
+
* 结果已经按时间 / 域名筛过。
|
|
38
|
+
*/
|
|
39
|
+
ignored?: readonly WebSearchFilter[];
|
|
40
|
+
}
|
|
41
|
+
export interface WebPageOutcome {
|
|
42
|
+
url: string;
|
|
43
|
+
title: string | null;
|
|
44
|
+
description: string | null;
|
|
45
|
+
/** markdown 正文。可能为空串(纯脚本渲染 / 反爬页面、Kimi 的「没有可提取的正文」),由调用方解释。 */
|
|
46
|
+
content: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 调一次上游要的东西:这家 `web-search` 端点的根地址与出站 fetch。中心模式下 fetch 是中心的透传 fetch、
|
|
50
|
+
* 不带 key(中心注入);直连模式给 `apiKey`,适配器以 Bearer 发出。
|
|
51
|
+
*/
|
|
52
|
+
export interface WebSearchConnection {
|
|
53
|
+
baseUrl: string;
|
|
54
|
+
fetch: VendorFetch;
|
|
55
|
+
apiKey?: string;
|
|
56
|
+
}
|
|
57
|
+
/** 智谱的搜索档位(`search_engine`)。 */
|
|
58
|
+
export declare const ZHIPU_SEARCH_ENGINES: readonly ["search_std", "search_pro", "search_pro_sogou", "search_pro_quark"];
|
|
59
|
+
export type ZhipuSearchEngine = (typeof ZHIPU_SEARCH_ENGINES)[number];
|
|
60
|
+
/** Kimi 搜索:基础版 `/search`、专业版 `/search_pro`。 */
|
|
61
|
+
export declare const KIMI_SEARCH_TIERS: readonly ["basic", "pro"];
|
|
62
|
+
export type KimiSearchTier = (typeof KIMI_SEARCH_TIERS)[number];
|
|
63
|
+
/**
|
|
64
|
+
* 各家的设置(APP 存、调用时传;缺省值见各适配器)。**站点(国内 / 海外)不是设置**:两站账号与 key 不通用,
|
|
65
|
+
* 在中心是两家厂商,地址取自各自的 `web-search` 端点。
|
|
66
|
+
*/
|
|
67
|
+
export interface WebSearchSettingsByKind {
|
|
68
|
+
deepseek: Record<string, never>;
|
|
69
|
+
moonshotai: {
|
|
70
|
+
searchTier?: KimiSearchTier;
|
|
71
|
+
};
|
|
72
|
+
minimax: Record<string, never>;
|
|
73
|
+
zhipu: {
|
|
74
|
+
searchEngine?: ZhipuSearchEngine;
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
export type WebSearchKind = keyof WebSearchSettingsByKind;
|
|
78
|
+
export declare const WEB_SEARCH_KINDS: readonly ["deepseek", "moonshotai", "minimax", "zhipu"];
|
|
79
|
+
export type WebSearchSettings<K extends WebSearchKind = WebSearchKind> = WebSearchSettingsByKind[K];
|
|
80
|
+
/**
|
|
81
|
+
* 这家(在这组设置下)的能力事实,给调用方写工具说明用。只依赖设置,不依赖「现在」——写进工具表的东西
|
|
82
|
+
* 相邻两轮必须一样。
|
|
83
|
+
*/
|
|
84
|
+
export interface WebSearchTraits {
|
|
85
|
+
/** 有读网页接口(MiniMax 没有)。 */
|
|
86
|
+
readsPages: boolean;
|
|
87
|
+
/** 一次最多返回几条;null = 没有比调用方更紧的上限。 */
|
|
88
|
+
maxResults: number | null;
|
|
89
|
+
/** 真能施加的过滤;不在里面的给了也会报回 `ignored`。 */
|
|
90
|
+
filters: readonly WebSearchFilter[];
|
|
91
|
+
/** 结果常不带链接(智谱 search_std,真机探针 2026-08-31):「把链接交给读网页」常走不通。 */
|
|
92
|
+
linksOftenMissing: boolean;
|
|
93
|
+
/** 读网页的正文里图片只以 `` 占位(Kimi),看不到图片内容。 */
|
|
94
|
+
pageImagesArePlaceholders: boolean;
|
|
95
|
+
}
|
|
96
|
+
export interface WebSearchAdapter<K extends WebSearchKind> {
|
|
97
|
+
readonly kind: K;
|
|
98
|
+
traits(settings: WebSearchSettings<K>): WebSearchTraits;
|
|
99
|
+
search(conn: WebSearchConnection, settings: WebSearchSettings<K>, input: WebSearchInput, signal: AbortSignal): Promise<WebSearchOutcome>;
|
|
100
|
+
/** 没有读网页接口的家(MiniMax)不实现,`traits().readsPages` 同步写 false(spec 钉着)。 */
|
|
101
|
+
readPage?(conn: WebSearchConnection, settings: WebSearchSettings<K>, input: {
|
|
102
|
+
url: string;
|
|
103
|
+
}, signal: AbortSignal): Promise<WebPageOutcome>;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* 联网服务的上游失败(非 2xx / 网络错误 / 响应体不成形 / 2xx 里的业务错误)。中心自己报的错(没有可用 key、
|
|
107
|
+
* 接入方不许用这家……)不是这个,是 `ProviderClientError`。
|
|
108
|
+
*/
|
|
109
|
+
export declare class WebSearchUpstreamError extends Error {
|
|
110
|
+
readonly name = "WebSearchUpstreamError";
|
|
111
|
+
/** 上游业务错误码(智谱的 '1701' 并发超限、DeepSeek 的 error.code、Kimi 的 error.type),没有就是 null。 */
|
|
112
|
+
readonly code: string | null;
|
|
113
|
+
/** 这次失败值不值得重试。判据收在各适配器的抛出处,调用方只读这个标志,不解析消息文本。 */
|
|
114
|
+
readonly retryable: boolean;
|
|
115
|
+
constructor(reason: string, opts?: {
|
|
116
|
+
code?: string;
|
|
117
|
+
retryable?: boolean;
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/web-search/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 联网搜索 / 读网页的厂商适配(从 agent-base `web-search/adapters` 搬来)。适配器只管「这家的请求长什么样、
|
|
3
|
+
* 响应怎么翻、哪些失败值得重试」;给模型看的工具说明是 APP 的事,适配器只交出事实(`WebSearchTraits`)。
|
|
4
|
+
*/
|
|
5
|
+
/** 时效过滤取值(缺省 = 不限时间)。各适配器自己翻成上游的写法。 */
|
|
6
|
+
export const WEB_SEARCH_RECENCIES = [
|
|
7
|
+
'oneDay',
|
|
8
|
+
'oneWeek',
|
|
9
|
+
'oneMonth',
|
|
10
|
+
'oneYear',
|
|
11
|
+
];
|
|
12
|
+
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
13
|
+
const RECENCY_DAYS = {
|
|
14
|
+
oneDay: 1,
|
|
15
|
+
oneWeek: 7,
|
|
16
|
+
oneMonth: 30,
|
|
17
|
+
oneYear: 365,
|
|
18
|
+
};
|
|
19
|
+
/** 「最近一段时间」的起始日期(UTC,YYYY-MM-DD)——上游只收日期的家(DeepSeek、Kimi 专业版)共用。 */
|
|
20
|
+
export function recencySince(recency, now) {
|
|
21
|
+
return utcDate(new Date(now.getTime() - RECENCY_DAYS[recency] * DAY_MS));
|
|
22
|
+
}
|
|
23
|
+
/** UTC 日期 YYYY-MM-DD。 */
|
|
24
|
+
export function utcDate(d) {
|
|
25
|
+
return d.toISOString().slice(0, 10);
|
|
26
|
+
}
|
|
27
|
+
/** 搜索的两项过滤。不是每家都支持(Kimi 基础版、MiniMax 都没有),不支持的由适配器报回 `ignored`。 */
|
|
28
|
+
export const WEB_SEARCH_FILTERS = ['recency', 'domain'];
|
|
29
|
+
/** 智谱的搜索档位(`search_engine`)。 */
|
|
30
|
+
export const ZHIPU_SEARCH_ENGINES = [
|
|
31
|
+
'search_std',
|
|
32
|
+
'search_pro',
|
|
33
|
+
'search_pro_sogou',
|
|
34
|
+
'search_pro_quark',
|
|
35
|
+
];
|
|
36
|
+
/** Kimi 搜索:基础版 `/search`、专业版 `/search_pro`。 */
|
|
37
|
+
export const KIMI_SEARCH_TIERS = ['basic', 'pro'];
|
|
38
|
+
export const WEB_SEARCH_KINDS = [
|
|
39
|
+
'deepseek',
|
|
40
|
+
'moonshotai',
|
|
41
|
+
'minimax',
|
|
42
|
+
'zhipu',
|
|
43
|
+
];
|
|
44
|
+
/**
|
|
45
|
+
* 联网服务的上游失败(非 2xx / 网络错误 / 响应体不成形 / 2xx 里的业务错误)。中心自己报的错(没有可用 key、
|
|
46
|
+
* 接入方不许用这家……)不是这个,是 `ProviderClientError`。
|
|
47
|
+
*/
|
|
48
|
+
export class WebSearchUpstreamError extends Error {
|
|
49
|
+
name = 'WebSearchUpstreamError';
|
|
50
|
+
/** 上游业务错误码(智谱的 '1701' 并发超限、DeepSeek 的 error.code、Kimi 的 error.type),没有就是 null。 */
|
|
51
|
+
code;
|
|
52
|
+
/** 这次失败值不值得重试。判据收在各适配器的抛出处,调用方只读这个标志,不解析消息文本。 */
|
|
53
|
+
retryable;
|
|
54
|
+
constructor(reason, opts = {}) {
|
|
55
|
+
super(reason);
|
|
56
|
+
this.code = opts.code ?? null;
|
|
57
|
+
this.retryable = opts.retryable ?? false;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/web-search/types.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,uCAAuC;AACvC,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,QAAQ;IACR,SAAS;IACT,UAAU;IACV,SAAS;CACD,CAAC;AAGX,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACnC,MAAM,YAAY,GAA+C;IAC/D,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE,GAAG;CACb,CAAC;AAEF,oEAAoE;AACpE,MAAM,UAAU,YAAY,CAAC,OAAyB,EAAE,GAAS;IAC/D,OAAO,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,yBAAyB;AACzB,MAAM,UAAU,OAAO,CAAC,CAAO;IAC7B,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC;AAmBD,kEAAkE;AAClE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAU,CAAC;AAgCjE,gCAAgC;AAChC,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,YAAY;IACZ,YAAY;IACZ,kBAAkB;IAClB,kBAAkB;CACV,CAAC;AAGX,+CAA+C;AAC/C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,KAAK,CAAU,CAAC;AAc3D,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,UAAU;IACV,YAAY;IACZ,SAAS;IACT,OAAO;CACoC,CAAC;AAuC9C;;;GAGG;AACH,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC7B,IAAI,GAAG,wBAAwB,CAAC;IAClD,kFAAkF;IACzE,IAAI,CAAgB;IAC7B,iDAAiD;IACxC,SAAS,CAAU;IAE5B,YACE,MAAc,EACd,OAA+C,EAAE;QAEjD,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;IAC3C,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type WebPageOutcome, type WebSearchAdapter, type WebSearchConnection, type WebSearchInput, type WebSearchOutcome, type WebSearchSettings, type WebSearchTraits } from './types.js';
|
|
2
|
+
type Settings = WebSearchSettings<'zhipu'>;
|
|
3
|
+
/** 智谱「工具 API」:联网搜索(web_search)+ 网页阅读(reader)。 */
|
|
4
|
+
export declare class ZhipuWebSearchAdapter implements WebSearchAdapter<'zhipu'> {
|
|
5
|
+
readonly kind: "zhipu";
|
|
6
|
+
traits(settings: Settings): WebSearchTraits;
|
|
7
|
+
search(conn: WebSearchConnection, settings: Settings, input: WebSearchInput, signal: AbortSignal): Promise<WebSearchOutcome>;
|
|
8
|
+
readPage(conn: WebSearchConnection, _settings: Settings, input: {
|
|
9
|
+
url: string;
|
|
10
|
+
}, signal: AbortSignal): Promise<WebPageOutcome>;
|
|
11
|
+
private post;
|
|
12
|
+
}
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=zhipu.adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zhipu.adapter.d.ts","sourceRoot":"","sources":["../../src/web-search/zhipu.adapter.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EAGrB,MAAM,YAAY,CAAC;AAgCpB,KAAK,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAE3C,iDAAiD;AACjD,qBAAa,qBAAsB,YAAW,gBAAgB,CAAC,OAAO,CAAC;IACrE,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IAEjC,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,eAAe;IAYrC,MAAM,CACV,IAAI,EAAE,mBAAmB,EACzB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,gBAAgB,CAAC;IAkCtB,QAAQ,CACZ,IAAI,EAAE,mBAAmB,EACzB,SAAS,EAAE,QAAQ,EACnB,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,EACtB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,cAAc,CAAC;YA6BZ,IAAI;CA0CnB"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { clip, codeOf, joinUrl, parseErrorBody, parseJson, postJson, } from './http.js';
|
|
2
|
+
import { WebSearchUpstreamError, } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* 智谱工具 API 的根取自这家的 `web-search` 端点(`https://open.bigmodel.cn/api/paas/v4`),下挂 `/web_search`、`/reader`。
|
|
5
|
+
* 不从对话端点推:chat 根是 `/api/paas/v4`、responses 根是 `/api/v1`,从哪条推都是猜。
|
|
6
|
+
*/
|
|
7
|
+
/** 不设档位时用高阶版(agent-base 的缺省)。 */
|
|
8
|
+
const DEFAULT_ENGINE = 'search_pro';
|
|
9
|
+
/** reader 让智谱侧抓取页面的预算(秒)——上游参数,不是本地超时。 */
|
|
10
|
+
const READER_FETCH_TIMEOUT_SECONDS = 20;
|
|
11
|
+
/** 智谱「工具 API」:联网搜索(web_search)+ 网页阅读(reader)。 */
|
|
12
|
+
export class ZhipuWebSearchAdapter {
|
|
13
|
+
kind = 'zhipu';
|
|
14
|
+
traits(settings) {
|
|
15
|
+
return {
|
|
16
|
+
readsPages: true,
|
|
17
|
+
maxResults: null,
|
|
18
|
+
filters: ['recency', 'domain'],
|
|
19
|
+
// 真机探针(2026-08-31):search_std 常返回空 link,「把链接交给读网页」就走不通。
|
|
20
|
+
linksOftenMissing: (settings.searchEngine ?? DEFAULT_ENGINE) === 'search_std',
|
|
21
|
+
pageImagesArePlaceholders: false,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
async search(conn, settings, input, signal) {
|
|
25
|
+
const engine = settings.searchEngine ?? DEFAULT_ENGINE;
|
|
26
|
+
const body = {
|
|
27
|
+
search_query: input.query,
|
|
28
|
+
search_engine: engine,
|
|
29
|
+
// 意图识别用不上:调用方(模型)自己就是意图层,开了只多花一份钱。
|
|
30
|
+
search_intent: false,
|
|
31
|
+
...(input.count !== undefined ? { count: input.count } : {}),
|
|
32
|
+
...(input.recency ? { search_recency_filter: input.recency } : {}),
|
|
33
|
+
...(input.domain ? { search_domain_filter: input.domain } : {}),
|
|
34
|
+
};
|
|
35
|
+
let data;
|
|
36
|
+
try {
|
|
37
|
+
data = await this.post('web_search', conn, body, signal);
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
// 1703 = 搜索引擎没返回有效数据。这是「零结果」不是「上游坏了」——报成
|
|
41
|
+
// 错误会让模型把一次正常的空搜索当成故障去重试,而它该做的是换关键词。
|
|
42
|
+
if (err instanceof WebSearchUpstreamError && err.code === '1703') {
|
|
43
|
+
return { engine, items: [] };
|
|
44
|
+
}
|
|
45
|
+
throw err;
|
|
46
|
+
}
|
|
47
|
+
const items = (data.search_result ?? []).map(r => ({
|
|
48
|
+
title: r.title ?? '',
|
|
49
|
+
link: r.link ?? '',
|
|
50
|
+
content: r.content ?? '',
|
|
51
|
+
media: r.media || null,
|
|
52
|
+
publishDate: r.publish_date || null,
|
|
53
|
+
}));
|
|
54
|
+
return { engine, items };
|
|
55
|
+
}
|
|
56
|
+
async readPage(conn, _settings, input, signal) {
|
|
57
|
+
const data = await this.post('reader', conn, {
|
|
58
|
+
url: input.url,
|
|
59
|
+
return_format: 'markdown',
|
|
60
|
+
// 剥掉图片:远程图片链接模型看不了(ViewImage 只读工作空间),留着
|
|
61
|
+
// 只是往上下文里灌一堆没用的长 URL。
|
|
62
|
+
retain_images: false,
|
|
63
|
+
timeout: READER_FETCH_TIMEOUT_SECONDS,
|
|
64
|
+
}, signal);
|
|
65
|
+
const r = data.reader_result;
|
|
66
|
+
if (!r || typeof r.content !== 'string') {
|
|
67
|
+
throw new WebSearchUpstreamError('zhipu reader 响应缺少 reader_result.content');
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
url: r.url || input.url,
|
|
71
|
+
title: r.title || null,
|
|
72
|
+
description: r.description || null,
|
|
73
|
+
content: r.content,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
async post(path, conn, body, signal) {
|
|
77
|
+
const label = `zhipu ${path}`;
|
|
78
|
+
const res = await postJson(label, joinUrl(conn.baseUrl, path), conn, body, signal);
|
|
79
|
+
if (!res.ok) {
|
|
80
|
+
const parsed = parseErrorBody(res.text);
|
|
81
|
+
const detail = parsed.message ?? clip(res.text);
|
|
82
|
+
throw new WebSearchUpstreamError(`${label} ${res.status}${detail ? `: ${detail}` : ''}`, {
|
|
83
|
+
code: parsed.code,
|
|
84
|
+
retryable: res.status >= 500 || res.status === 429 || parsed.code === '1701',
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
const json = parseJson(label, res.text);
|
|
88
|
+
// 智谱部分接口会用 200 + error 体报业务错误,别把它当成功往下传。
|
|
89
|
+
const errBody = json
|
|
90
|
+
.error;
|
|
91
|
+
if (errBody) {
|
|
92
|
+
const code = codeOf(errBody.code);
|
|
93
|
+
throw new WebSearchUpstreamError(`${label} 业务错误${code ? ` ${code}` : ''}:${typeof errBody.message === 'string' ? errBody.message : clip(res.text)}`, { code, retryable: code === '1701' });
|
|
94
|
+
}
|
|
95
|
+
return json;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=zhipu.adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zhipu.adapter.js","sourceRoot":"","sources":["../../src/web-search/zhipu.adapter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qjp88995/provider-client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Client for the provider center: vendor adapters for the AI SDK, model resolution through the center's catalog and passthrough proxy, and a direct mode for local development.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"type": "module",
|
|
@@ -33,7 +33,9 @@
|
|
|
33
33
|
"@ai-sdk/google": "^4.0.104",
|
|
34
34
|
"@ai-sdk/moonshotai": "^3.0.76",
|
|
35
35
|
"@ai-sdk/openai": "^4.0.101",
|
|
36
|
-
"@ai-sdk/openai-compatible": "^3.0.77"
|
|
36
|
+
"@ai-sdk/openai-compatible": "^3.0.77",
|
|
37
|
+
"fflate": "^0.8.3",
|
|
38
|
+
"zod": "^4.4.3"
|
|
37
39
|
},
|
|
38
40
|
"peerDependencies": {
|
|
39
41
|
"ai": "^7.0.150"
|
|
@@ -43,7 +45,6 @@
|
|
|
43
45
|
"ai": "^7.0.150",
|
|
44
46
|
"typescript": "^5.9.3",
|
|
45
47
|
"vitest": "^4.1.10",
|
|
46
|
-
"zod": "^4.4.3",
|
|
47
48
|
"@pc/shared": "0.1.0"
|
|
48
49
|
},
|
|
49
50
|
"scripts": {
|
package/src/direct-resolver.ts
CHANGED
package/src/index.ts
CHANGED
|
@@ -9,6 +9,75 @@ export {
|
|
|
9
9
|
ProviderClientError,
|
|
10
10
|
type ProviderClientErrorCode,
|
|
11
11
|
} from './errors.js';
|
|
12
|
+
export {
|
|
13
|
+
classifyCode,
|
|
14
|
+
createJustOne,
|
|
15
|
+
type JustOne,
|
|
16
|
+
JUSTONE_BASE_URL,
|
|
17
|
+
JUSTONE_ENDPOINTS,
|
|
18
|
+
JUSTONE_FAILURE_KINDS,
|
|
19
|
+
JUSTONE_PRICE_FEN,
|
|
20
|
+
JUSTONE_PRICING_EXPORTED_AT,
|
|
21
|
+
JUSTONE_TIMEOUT_MS,
|
|
22
|
+
type JustOneAttemptRecord,
|
|
23
|
+
type JustOneCallOptions,
|
|
24
|
+
type JustOneConnection,
|
|
25
|
+
type JustOneEndpointKey,
|
|
26
|
+
type JustOneEndpointSpec,
|
|
27
|
+
justOneEndpointSpec,
|
|
28
|
+
type JustOneFailureKind,
|
|
29
|
+
type JustOneOptions,
|
|
30
|
+
type JustOneParams,
|
|
31
|
+
JustOneParamsError,
|
|
32
|
+
type JustOneParamsOf,
|
|
33
|
+
type JustOneParamSpec,
|
|
34
|
+
justOnePriceFen,
|
|
35
|
+
type JustOneResult,
|
|
36
|
+
JustOneUpstreamError,
|
|
37
|
+
type JustOneUpstreamFailureKind,
|
|
38
|
+
type NormalizedParams,
|
|
39
|
+
normalizeParams,
|
|
40
|
+
} from './justone/index.js';
|
|
41
|
+
export {
|
|
42
|
+
type AudioOutcome,
|
|
43
|
+
type AudioRequest,
|
|
44
|
+
BibiGptApiError,
|
|
45
|
+
BibiGptNetworkError,
|
|
46
|
+
buildPolishPrompt,
|
|
47
|
+
type CacheKeyOpts,
|
|
48
|
+
createMedia,
|
|
49
|
+
type CreateMediaInput,
|
|
50
|
+
directMediaConnection,
|
|
51
|
+
type FileOutcome,
|
|
52
|
+
type FileRequest,
|
|
53
|
+
isMediaKind,
|
|
54
|
+
localizeSummaryHeadings,
|
|
55
|
+
MEDIA_ADAPTERS,
|
|
56
|
+
MEDIA_CAPABILITIES,
|
|
57
|
+
MEDIA_KINDS,
|
|
58
|
+
type MediaAdapter,
|
|
59
|
+
type MediaCapability,
|
|
60
|
+
type MediaConnection,
|
|
61
|
+
type MediaInput,
|
|
62
|
+
type MediaKind,
|
|
63
|
+
type MediaService,
|
|
64
|
+
type MediaSettings,
|
|
65
|
+
type MediaSettingsByKind,
|
|
66
|
+
MediaUpstreamError,
|
|
67
|
+
pageFromExpertName,
|
|
68
|
+
type ParsedImage,
|
|
69
|
+
parseParserPackage,
|
|
70
|
+
type TokenUsage,
|
|
71
|
+
type UploadLimitHint,
|
|
72
|
+
type VideoLinkChapter,
|
|
73
|
+
type VideoLinkOutcome,
|
|
74
|
+
type VideoLinkRequest,
|
|
75
|
+
type VideoLinkSubtitle,
|
|
76
|
+
ZHIPU_AUDIO_MAX_BYTES,
|
|
77
|
+
ZHIPU_FILE_TOOL_TYPES,
|
|
78
|
+
ZHIPU_MIME_TO_EXT,
|
|
79
|
+
type ZhipuFileToolType,
|
|
80
|
+
} from './media/index.js';
|
|
12
81
|
export {
|
|
13
82
|
type ModelFileStore,
|
|
14
83
|
type ModelHandle,
|
|
@@ -18,8 +87,12 @@ export {
|
|
|
18
87
|
type UploadedFile,
|
|
19
88
|
} from './model-handle.js';
|
|
20
89
|
export {
|
|
90
|
+
type FetchForOptions,
|
|
91
|
+
type JustOneClientOptions,
|
|
92
|
+
type MediaOptions,
|
|
21
93
|
ProviderClient,
|
|
22
94
|
type ProviderClientOptions,
|
|
95
|
+
type WebSearchOptions,
|
|
23
96
|
} from './provider-client.js';
|
|
24
97
|
export { toProviderClientError } from './to-error.js';
|
|
25
98
|
export {
|
|
@@ -29,6 +102,8 @@ export {
|
|
|
29
102
|
type CatalogVendor,
|
|
30
103
|
CENTER_ERROR_CODES,
|
|
31
104
|
type CenterErrorCode,
|
|
105
|
+
ENDPOINT_PROTOCOLS,
|
|
106
|
+
type EndpointProtocol,
|
|
32
107
|
LLM_CAPABILITIES,
|
|
33
108
|
LLM_PROTOCOLS,
|
|
34
109
|
type LlmCapability,
|
|
@@ -38,7 +113,9 @@ export {
|
|
|
38
113
|
PROXY_ROUTE_PREFIX,
|
|
39
114
|
REASONING_EFFORTS,
|
|
40
115
|
type ReasoningEffort,
|
|
116
|
+
VENDOR_CATEGORIES,
|
|
41
117
|
VENDOR_KINDS,
|
|
118
|
+
type VendorCategory,
|
|
42
119
|
type VendorKind,
|
|
43
120
|
} from './types.js';
|
|
44
121
|
export {
|
|
@@ -52,3 +129,30 @@ export {
|
|
|
52
129
|
VENDOR_ADAPTERS,
|
|
53
130
|
type VendorFetch,
|
|
54
131
|
} from './vendors/index.js';
|
|
132
|
+
export {
|
|
133
|
+
createWebSearch,
|
|
134
|
+
type CreateWebSearchInput,
|
|
135
|
+
isWebSearchKind,
|
|
136
|
+
KIMI_SEARCH_TIERS,
|
|
137
|
+
type KimiSearchTier,
|
|
138
|
+
WEB_SEARCH_ADAPTERS,
|
|
139
|
+
WEB_SEARCH_FILTERS,
|
|
140
|
+
WEB_SEARCH_KINDS,
|
|
141
|
+
WEB_SEARCH_RECENCIES,
|
|
142
|
+
type WebPageOutcome,
|
|
143
|
+
type WebSearch,
|
|
144
|
+
type WebSearchAdapter,
|
|
145
|
+
type WebSearchConnection,
|
|
146
|
+
type WebSearchFilter,
|
|
147
|
+
type WebSearchInput,
|
|
148
|
+
type WebSearchItem,
|
|
149
|
+
type WebSearchKind,
|
|
150
|
+
type WebSearchOutcome,
|
|
151
|
+
type WebSearchRecency,
|
|
152
|
+
type WebSearchSettings,
|
|
153
|
+
type WebSearchSettingsByKind,
|
|
154
|
+
type WebSearchTraits,
|
|
155
|
+
WebSearchUpstreamError,
|
|
156
|
+
ZHIPU_SEARCH_ENGINES,
|
|
157
|
+
type ZhipuSearchEngine,
|
|
158
|
+
} from './web-search/index.js';
|