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:
AC
2025-04-06 17:03:18 +08:00
parent 78e8cb31c2
commit 04cbadb197
3 changed files with 126 additions and 18 deletions

View File

@@ -693,22 +693,70 @@ export function ChatActions(props: {
onClose={() => setShowModelSelector(false)}
onSelection={(s) => {
if (s.length === 0) return;
const [model, providerName] = getModelProvider(s[0]);
chatStore.updateTargetSession(session, (session) => {
session.mask.modelConfig.model = model as ModelType;
session.mask.modelConfig.providerName =
providerName as ServiceProvider;
session.mask.syncGlobalConfig = false;
});
if (providerName == "ByteDance") {
const selectedModel = models.find(
(m) =>
m.name == model &&
m?.provider?.providerName == providerName,
);
showToast(selectedModel?.displayName ?? "");
const selectedValue = s[0];
console.log(
"[ChatActions] Model selected raw value:",
selectedValue,
);
// providerId here will be lowercase, e.g., "bedrock"
const [model, providerId] = getModelProvider(selectedValue);
console.log(
"[ChatActions] Parsed model:",
model,
"Provider ID:",
providerId,
);
// 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 {
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);
}
}}
/>