Skip to content

Commit 59add14

Browse files
committed
fix: refine baseURL handling and simplify model endpoint construction logic
1 parent ad52e21 commit 59add14

File tree

2 files changed

+24
-18
lines changed

2 files changed

+24
-18
lines changed

packages/shared-model/src/index.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -173,15 +173,21 @@ export abstract class SharedProvider<TProvider extends UnionProvider = any, TMod
173173
throw new Error("无法获取在线模型列表:缺少 baseURL 配置");
174174
}
175175

176-
// 拼接模型列表路径:baseURL 此时应该已经包含了版本号(如 /v1 或 /v4)
177-
const url = `${baseURL}/models`;
176+
// 智能补全 /v1:如果 baseURL 不以 /v{数字} 结尾,且不是以 models 结尾,则尝试补全
177+
// 这样可以保持基类的独立性,不依赖于子类的预处理
178+
let url = baseURL;
179+
if (!/\/v\d+$/.test(baseURL) && !baseURL.endsWith("/models")) {
180+
url += "/v1/models";
181+
} else if (!baseURL.endsWith("/models")) {
182+
url += "/models";
183+
}
178184

179185
const response = await this.fetch(url, {
180186
method: "GET",
181187
headers: { Authorization: `Bearer ${this.config.apiKey}` },
182188
});
183189
if (!response.ok) {
184-
throw new Error(`获取在线模型列表失败,状态码:${response.status}`);
190+
throw new Error(`获取在线模型列表失败,状态码:${response.status},URL:${url}`);
185191
}
186192
const data = await response.json();
187193
return data.data.map((item: any) => item.id) as string[];

plugins/provider-openai/src/index.ts

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -42,22 +42,22 @@ export const Config: Schema<Config> = Schema.object({
4242
class OpenAIProvider extends SharedProvider<any, ModelConfig> {
4343
constructor(name: string, provider: any, config: Config, runtime?: { fetch?: any; proxy?: string }) {
4444
const processedConfig = { ...config };
45-
if (processedConfig.baseURL) {
46-
let baseURL = processedConfig.baseURL.trim();
47-
if (baseURL.endsWith("/")) {
48-
baseURL = baseURL.slice(0, -1);
49-
}
50-
// 如果不以版本号(如 /v1, /v4)结尾,则补上 /v1
51-
if (!/\/v\d+$/.test(baseURL)) {
52-
baseURL += "/v1";
53-
}
54-
if (!baseURL) {
55-
throw new Error("无效的 baseURL:标准化处理后值为空。");
56-
}
57-
processedConfig.baseURL = baseURL;
58-
} else {
59-
throw new Error("无效的 baseURL:值为空。");
45+
let baseURL = (processedConfig.baseURL || "").trim();
46+
47+
if (!baseURL || baseURL.replace(/\/+$/, "") === "") {
48+
throw new Error("无效的 baseURL:值为空或仅包含斜杠。");
49+
}
50+
51+
// 移除末尾斜杠
52+
baseURL = baseURL.replace(/\/+$/, "");
53+
54+
// 如果不以版本号(如 /v1, /v4)结尾,则补上 /v1
55+
if (!/\/v\d+$/.test(baseURL)) {
56+
baseURL += "/v1";
6057
}
58+
59+
processedConfig.baseURL = baseURL;
60+
6161
super(name, provider, processedConfig, runtime);
6262
}
6363
}

0 commit comments

Comments
 (0)