mirror of
https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web.git
synced 2025-05-22 21:50:16 +09:00
Enhance API and Chat Actions with Improved Provider Handling
- Added logging to `getClientApi` for better debugging of provider input and standardized provider names. - Updated `ChatActions` to handle lowercase provider IDs, converting them to TitleCase for consistency with the ServiceProvider enum. - Implemented defaulting to OpenAI when provider ID is missing and added relevant logging for session updates. - Enhanced logging in `useChatStore` to track API call preparations and provider configurations.
This commit is contained in:
parent
78e8cb31c2
commit
04cbadb197
@ -361,10 +361,45 @@ export function getHeaders(ignoreHeaders: boolean = false) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function getClientApi(provider: ServiceProvider | string): ClientApi {
|
export function getClientApi(provider: ServiceProvider | string): ClientApi {
|
||||||
switch (provider) {
|
console.log(
|
||||||
|
"[getClientApi] Received Provider (raw):",
|
||||||
|
provider,
|
||||||
|
"| Type:",
|
||||||
|
typeof provider,
|
||||||
|
);
|
||||||
|
|
||||||
|
// Standardize the provider name to match Enum case (TitleCase)
|
||||||
|
let standardizedProvider: ServiceProvider | string;
|
||||||
|
if (typeof provider === "string") {
|
||||||
|
// Convert known lowercase versions to their Enum equivalent
|
||||||
|
switch (provider.toLowerCase()) {
|
||||||
|
case "bedrock":
|
||||||
|
standardizedProvider = ServiceProvider.Bedrock;
|
||||||
|
break;
|
||||||
|
case "openai":
|
||||||
|
standardizedProvider = ServiceProvider.OpenAI;
|
||||||
|
break;
|
||||||
|
case "google":
|
||||||
|
standardizedProvider = ServiceProvider.Google;
|
||||||
|
break;
|
||||||
|
// Add other potential lowercase strings if needed
|
||||||
|
default:
|
||||||
|
standardizedProvider = provider; // Keep unknown strings as is
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
standardizedProvider = provider; // Already an Enum value
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log("[getClientApi] Standardized Provider:", standardizedProvider);
|
||||||
|
|
||||||
|
switch (standardizedProvider) {
|
||||||
case ServiceProvider.Google:
|
case ServiceProvider.Google:
|
||||||
|
console.log(
|
||||||
|
"[getClientApi] Returning ClientApi(ModelProvider.GeminiPro)",
|
||||||
|
);
|
||||||
return new ClientApi(ModelProvider.GeminiPro);
|
return new ClientApi(ModelProvider.GeminiPro);
|
||||||
case ServiceProvider.Anthropic:
|
case ServiceProvider.Anthropic:
|
||||||
|
console.log("[getClientApi] Returning ClientApi(ModelProvider.Claude)");
|
||||||
return new ClientApi(ModelProvider.Claude);
|
return new ClientApi(ModelProvider.Claude);
|
||||||
case ServiceProvider.Baidu:
|
case ServiceProvider.Baidu:
|
||||||
return new ClientApi(ModelProvider.Ernie);
|
return new ClientApi(ModelProvider.Ernie);
|
||||||
@ -387,9 +422,15 @@ export function getClientApi(provider: ServiceProvider | string): ClientApi {
|
|||||||
case ServiceProvider.SiliconFlow:
|
case ServiceProvider.SiliconFlow:
|
||||||
return new ClientApi(ModelProvider.SiliconFlow);
|
return new ClientApi(ModelProvider.SiliconFlow);
|
||||||
case ServiceProvider.Bedrock:
|
case ServiceProvider.Bedrock:
|
||||||
case "AWS Bedrock":
|
console.log(
|
||||||
|
"[getClientApi] Returning ClientApi(ModelProvider.Bedrock) for",
|
||||||
|
standardizedProvider,
|
||||||
|
);
|
||||||
return new ClientApi(ModelProvider.Bedrock);
|
return new ClientApi(ModelProvider.Bedrock);
|
||||||
default:
|
default:
|
||||||
|
console.log(
|
||||||
|
`[getClientApi] Provider '${provider}' (Standardized: '${standardizedProvider}') not matched, returning default GPT.`,
|
||||||
|
);
|
||||||
return new ClientApi(ModelProvider.GPT);
|
return new ClientApi(ModelProvider.GPT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -693,22 +693,70 @@ export function ChatActions(props: {
|
|||||||
onClose={() => setShowModelSelector(false)}
|
onClose={() => setShowModelSelector(false)}
|
||||||
onSelection={(s) => {
|
onSelection={(s) => {
|
||||||
if (s.length === 0) return;
|
if (s.length === 0) return;
|
||||||
const [model, providerName] = getModelProvider(s[0]);
|
const selectedValue = s[0];
|
||||||
chatStore.updateTargetSession(session, (session) => {
|
console.log(
|
||||||
session.mask.modelConfig.model = model as ModelType;
|
"[ChatActions] Model selected raw value:",
|
||||||
session.mask.modelConfig.providerName =
|
selectedValue,
|
||||||
providerName as ServiceProvider;
|
);
|
||||||
session.mask.syncGlobalConfig = false;
|
// providerId here will be lowercase, e.g., "bedrock"
|
||||||
});
|
const [model, providerId] = getModelProvider(selectedValue);
|
||||||
if (providerName == "ByteDance") {
|
console.log(
|
||||||
const selectedModel = models.find(
|
"[ChatActions] Parsed model:",
|
||||||
(m) =>
|
model,
|
||||||
m.name == model &&
|
"Provider ID:",
|
||||||
m?.provider?.providerName == providerName,
|
providerId,
|
||||||
);
|
);
|
||||||
showToast(selectedModel?.displayName ?? "");
|
|
||||||
|
// Convert lowercase providerId to TitleCase ServiceProvider enum value
|
||||||
|
let targetProvider: ServiceProvider | undefined;
|
||||||
|
if (providerId) {
|
||||||
|
const upperProvider =
|
||||||
|
providerId.charAt(0).toUpperCase() + providerId.slice(1);
|
||||||
|
if (
|
||||||
|
Object.values(ServiceProvider).includes(
|
||||||
|
upperProvider as ServiceProvider,
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
targetProvider = upperProvider as ServiceProvider;
|
||||||
|
} else {
|
||||||
|
console.error(
|
||||||
|
`[ChatActions] Unknown provider ID: ${providerId}`,
|
||||||
|
);
|
||||||
|
// Handle error or fallback if needed
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
showToast(model);
|
// Handle case where providerId is missing, maybe default to OpenAI?
|
||||||
|
targetProvider = ServiceProvider.OpenAI;
|
||||||
|
console.warn(
|
||||||
|
`[ChatActions] Provider ID missing in ${selectedValue}, defaulting to OpenAI.`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(
|
||||||
|
"[ChatActions] Target ServiceProvider Enum:",
|
||||||
|
targetProvider,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (targetProvider) {
|
||||||
|
// Only update if we found a valid provider
|
||||||
|
chatStore.updateTargetSession(session, (session) => {
|
||||||
|
session.mask.modelConfig.model = model as ModelType;
|
||||||
|
session.mask.modelConfig.providerName = targetProvider; // Use the Enum value
|
||||||
|
session.mask.syncGlobalConfig = false;
|
||||||
|
console.log(
|
||||||
|
"[ChatActions] Updated session modelConfig:",
|
||||||
|
session.mask.modelConfig,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
// Display toast based on provider
|
||||||
|
const toastMessage =
|
||||||
|
targetProvider === ServiceProvider.ByteDance
|
||||||
|
? models.find(
|
||||||
|
(m) =>
|
||||||
|
m.name === model && m?.provider?.id === providerId,
|
||||||
|
)?.displayName ?? model
|
||||||
|
: model;
|
||||||
|
showToast(toastMessage);
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
@ -456,7 +456,26 @@ export const useChatStore = createPersistStore(
|
|||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
const api: ClientApi = getClientApi(modelConfig.providerName);
|
// --- 详细日志 (修正版) ---
|
||||||
|
const providerNameFromConfig = modelConfig.providerName;
|
||||||
|
console.log(
|
||||||
|
"[onUserInput] Preparing API call. Provider from config:",
|
||||||
|
providerNameFromConfig,
|
||||||
|
"| Type:",
|
||||||
|
typeof providerNameFromConfig,
|
||||||
|
"| Is Enum value (Bedrock)?:",
|
||||||
|
providerNameFromConfig === ServiceProvider.Bedrock, // 与枚举比较
|
||||||
|
"| Is 'Bedrock' string?:",
|
||||||
|
providerNameFromConfig === "Bedrock", // 与字符串比较
|
||||||
|
"| Model:",
|
||||||
|
modelConfig.model,
|
||||||
|
);
|
||||||
|
// --- 日志结束 ---
|
||||||
|
|
||||||
|
// 使用从配置中获取的 providerName,并提供默认值
|
||||||
|
const api: ClientApi = getClientApi(
|
||||||
|
providerNameFromConfig ?? ServiceProvider.OpenAI,
|
||||||
|
);
|
||||||
// make request
|
// make request
|
||||||
api.llm.chat({
|
api.llm.chat({
|
||||||
messages: sendMessages,
|
messages: sendMessages,
|
||||||
|
Loading…
Reference in New Issue
Block a user