From c993022c5176c1a957ff389458cbd0e86bbcf816 Mon Sep 17 00:00:00 2001 From: dingyi Date: Sat, 12 Sep 2026 17:22:47 +0800 Subject: [PATCH] feat(adapter-openai-like): support additional request headers (#1035) --- packages/adapter-openai-like/src/index.ts | 4 ++++ .../src/locales/en-US.schema.yml | 5 ++++ .../src/locales/zh-CN.schema.yml | 5 ++++ packages/adapter-openai-like/src/requester.ts | 23 ++++++++++--------- 4 files changed, 26 insertions(+), 11 deletions(-) diff --git a/packages/adapter-openai-like/src/index.ts b/packages/adapter-openai-like/src/index.ts index a960313f8..e462159a6 100644 --- a/packages/adapter-openai-like/src/index.ts +++ b/packages/adapter-openai-like/src/index.ts @@ -62,6 +62,7 @@ export interface Config extends ChatLunaPlugin.Config { }[] blacklistModels: string[] additionCookies: [string, string][] + additionHeaders: [string, string][] maxContextRatio: number temperature: number presencePenalty: number @@ -122,6 +123,9 @@ export const Config: Schema = Schema.intersect([ .role('table'), additionCookies: Schema.array( Schema.tuple([Schema.string(), Schema.string()]) + ).default([]), + additionHeaders: Schema.array( + Schema.tuple([Schema.string(), Schema.string()]) ).default([]) }), Schema.object({ diff --git a/packages/adapter-openai-like/src/locales/en-US.schema.yml b/packages/adapter-openai-like/src/locales/en-US.schema.yml index 22f31944b..d083ffbbf 100644 --- a/packages/adapter-openai-like/src/locales/en-US.schema.yml +++ b/packages/adapter-openai-like/src/locales/en-US.schema.yml @@ -31,6 +31,11 @@ $inner: - 'Cookie name' - 'Cookie value' $desc: 'Additional cookies' + additionHeaders: + $inner: + - 'Header name' + - 'Header value' + $desc: 'Additional request headers' - $desc: 'Model Parameters' maxContextRatio: 'Maximum context usage ratio (0-1). Controls the maximum percentage of model context window available for use. For example, 0.35 means at most 35% of the model context can be used.' diff --git a/packages/adapter-openai-like/src/locales/zh-CN.schema.yml b/packages/adapter-openai-like/src/locales/zh-CN.schema.yml index 17bed2c9a..8b6b17107 100644 --- a/packages/adapter-openai-like/src/locales/zh-CN.schema.yml +++ b/packages/adapter-openai-like/src/locales/zh-CN.schema.yml @@ -31,6 +31,11 @@ $inner: - Cookie 名称 - Cookie 值 $desc: 设置额外的 Cookie。 + additionHeaders: + $inner: + - Header 名称 + - Header 值 + $desc: 设置额外的请求头。 - $desc: 模型设置 maxContextRatio: 最大上下文使用比例(0~1),控制可用的模型上下文窗口大小的最大百分比。例如 0.35 表示最多使用模型上下文的 35%。 diff --git a/packages/adapter-openai-like/src/requester.ts b/packages/adapter-openai-like/src/requester.ts index 1b5c46283..d6786a9ce 100644 --- a/packages/adapter-openai-like/src/requester.ts +++ b/packages/adapter-openai-like/src/requester.ts @@ -272,18 +272,19 @@ export class OpenAIRequester } public buildHeaders() { - const result = { - Authorization: `Bearer ${this._config.value.apiKey}`, - 'Content-Type': 'application/json', - 'HTTP-Referer': 'https://github.com/ChatLunaLab/chatluna', // Optional. Site URL for rankings on openrouter.ai. - 'X-Title': 'ChatLuna' // Optional. Site title for rankings on openrouter.ai. - } + const result = Object.assign( + Object.fromEntries(this._pluginConfig.additionHeaders), + { + Authorization: `Bearer ${this._config.value.apiKey}`, + 'Content-Type': 'application/json', + 'HTTP-Referer': 'https://github.com/ChatLunaLab/chatluna', // Optional. Site URL for rankings on openrouter.ai. + 'X-Title': 'ChatLuna' // Optional. Site title for rankings on openrouter.ai. + } + ) - if (Object.keys(this._pluginConfig.additionCookies).length > 0) { - result['Cookie'] = Object.keys(this._pluginConfig.additionCookies) - .map((key) => { - return `${key}=${this._pluginConfig.additionCookies[key]}` - }) + if (this._pluginConfig.additionCookies.length > 0) { + result.Cookie = this._pluginConfig.additionCookies + .map(([key, value]) => `${key}=${value}`) .join('; ') }