Merge pull request #4903 from ConnectAI-E/fix-claude-get-headers
Fix claude get headers
This commit is contained in:
commit
501f8b028b
|
@ -162,14 +162,17 @@ export function getHeaders() {
|
||||||
const modelConfig = useChatStore.getState().currentSession().mask.modelConfig;
|
const modelConfig = useChatStore.getState().currentSession().mask.modelConfig;
|
||||||
const isGoogle = modelConfig.model.startsWith("gemini");
|
const isGoogle = modelConfig.model.startsWith("gemini");
|
||||||
const isAzure = accessStore.provider === ServiceProvider.Azure;
|
const isAzure = accessStore.provider === ServiceProvider.Azure;
|
||||||
const authHeader = isAzure ? "api-key" : "Authorization";
|
const isAnthropic = accessStore.provider === ServiceProvider.Anthropic;
|
||||||
|
const authHeader = isAzure ? "api-key" : isAnthropic ? 'x-api-key' : "Authorization";
|
||||||
const apiKey = isGoogle
|
const apiKey = isGoogle
|
||||||
? accessStore.googleApiKey
|
? accessStore.googleApiKey
|
||||||
: isAzure
|
: isAzure
|
||||||
? accessStore.azureApiKey
|
? accessStore.azureApiKey
|
||||||
|
: isAnthropic
|
||||||
|
? accessStore.anthropicApiKey
|
||||||
: accessStore.openaiApiKey;
|
: accessStore.openaiApiKey;
|
||||||
const clientConfig = getClientConfig();
|
const clientConfig = getClientConfig();
|
||||||
const makeBearer = (s: string) => `${isAzure ? "" : "Bearer "}${s.trim()}`;
|
const makeBearer = (s: string) => `${isAzure || isAnthropic ? "" : "Bearer "}${s.trim()}`;
|
||||||
const validString = (x: string) => x && x.length > 0;
|
const validString = (x: string) => x && x.length > 0;
|
||||||
|
|
||||||
// when using google api in app, not set auth header
|
// when using google api in app, not set auth header
|
||||||
|
@ -181,7 +184,8 @@ export function getHeaders() {
|
||||||
accessStore.enabledAccessControl() &&
|
accessStore.enabledAccessControl() &&
|
||||||
validString(accessStore.accessCode)
|
validString(accessStore.accessCode)
|
||||||
) {
|
) {
|
||||||
headers[authHeader] = makeBearer(
|
// access_code must send with header named `Authorization`, will using in auth middleware.
|
||||||
|
headers['Authorization'] = makeBearer(
|
||||||
ACCESS_CODE_PREFIX + accessStore.accessCode,
|
ACCESS_CODE_PREFIX + accessStore.accessCode,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { ACCESS_CODE_PREFIX, Anthropic, ApiPath } from "@/app/constant";
|
import { ACCESS_CODE_PREFIX, Anthropic, ApiPath } from "@/app/constant";
|
||||||
import { ChatOptions, LLMApi, MultimodalContent } from "../api";
|
import { ChatOptions, getHeaders, LLMApi, MultimodalContent, } from "../api";
|
||||||
import { useAccessStore, useAppConfig, useChatStore } from "@/app/store";
|
import { useAccessStore, useAppConfig, useChatStore } from "@/app/store";
|
||||||
import { getClientConfig } from "@/app/config/client";
|
import { getClientConfig } from "@/app/config/client";
|
||||||
import { DEFAULT_API_HOST } from "@/app/constant";
|
import { DEFAULT_API_HOST } from "@/app/constant";
|
||||||
|
@ -190,11 +190,10 @@ export class ClaudeApi implements LLMApi {
|
||||||
body: JSON.stringify(requestBody),
|
body: JSON.stringify(requestBody),
|
||||||
signal: controller.signal,
|
signal: controller.signal,
|
||||||
headers: {
|
headers: {
|
||||||
"Content-Type": "application/json",
|
...getHeaders(), // get common headers
|
||||||
Accept: "application/json",
|
|
||||||
"x-api-key": accessStore.anthropicApiKey,
|
|
||||||
"anthropic-version": accessStore.anthropicApiVersion,
|
"anthropic-version": accessStore.anthropicApiVersion,
|
||||||
Authorization: getAuthKey(accessStore.anthropicApiKey),
|
// do not send `anthropicApiKey` in browser!!!
|
||||||
|
// Authorization: getAuthKey(accessStore.anthropicApiKey),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -389,27 +388,3 @@ function trimEnd(s: string, end = " ") {
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
function bearer(value: string) {
|
|
||||||
return `Bearer ${value.trim()}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getAuthKey(apiKey = "") {
|
|
||||||
const accessStore = useAccessStore.getState();
|
|
||||||
const isApp = !!getClientConfig()?.isApp;
|
|
||||||
let authKey = "";
|
|
||||||
|
|
||||||
if (apiKey) {
|
|
||||||
// use user's api key first
|
|
||||||
authKey = bearer(apiKey);
|
|
||||||
} else if (
|
|
||||||
accessStore.enabledAccessControl() &&
|
|
||||||
!isApp &&
|
|
||||||
!!accessStore.accessCode
|
|
||||||
) {
|
|
||||||
// or use access code
|
|
||||||
authKey = bearer(ACCESS_CODE_PREFIX + accessStore.accessCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
return authKey;
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue