mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-10-26 01:34:51 +08:00
fix(hermes): prefill MiniMax provider keys that don't collide with Hermes built-ins (#8538)
Hermes routes model.provider `minimax` to its built-in provider and ignores a same-named custom_provider, so no request is sent. The MiniMax presets now prefill cc-switch-minimax / cc-switch-minimax-en, and MiniMax-M3.1-Flash declares supports_vision so images go to the main request.
This commit is contained in:
1 parent
734c4831dd
commit
0bbbb534fc
4 files changed
+58
-8
No files matched your search
@@ -2291,7 +2291,7 @@ function ProviderFormFull({
|
||||
const preset = entry.preset as HermesProviderPreset;
|
||||
const config = preset.settingsConfig;
|
||||
|
||||
hermesForm.resetHermesState(config);
|
||||
hermesForm.resetHermesState(config, preset.providerKey);
|
||||
|
||||
form.reset({
|
||||
name: preset.nameKey ? t(preset.nameKey) : preset.name,
|
||||
|
||||
@@ -44,7 +44,10 @@ export interface HermesFormState {
|
||||
handleHermesApiModeChange: (mode: HermesApiMode) => void;
|
||||
handleHermesModelsChange: (models: HermesModel[]) => void;
|
||||
handleHermesRateLimitDelayChange: (delay: number | undefined) => void;
|
||||
resetHermesState: (config?: Partial<HermesProviderSettingsConfig>) => void;
|
||||
resetHermesState: (
|
||||
config?: Partial<HermesProviderSettingsConfig>,
|
||||
providerKey?: string,
|
||||
) => void;
|
||||
}
|
||||
|
||||
function parseHermesField<T>(
|
||||
@@ -195,8 +198,8 @@ export function useHermesFormState({
|
||||
);
|
||||
|
||||
const resetHermesState = useCallback(
|
||||
(config?: Partial<HermesProviderSettingsConfig>) => {
|
||||
setHermesProviderKey("");
|
||||
(config?: Partial<HermesProviderSettingsConfig>, providerKey?: string) => {
|
||||
setHermesProviderKey(providerKey ?? "");
|
||||
setHermesBaseUrl(config?.base_url || "");
|
||||
setHermesApiKey(config?.api_key || "");
|
||||
setHermesApiMode(config?.api_mode ?? HERMES_DEFAULT_API_MODE);
|
||||
|
||||
@@ -121,6 +121,12 @@ export interface HermesProviderPreset extends PresetFamilyFields {
|
||||
isCustomTemplate?: boolean;
|
||||
/** Optional top-level `model:` defaults written on switch. */
|
||||
suggestedDefaults?: HermesSuggestedDefaults;
|
||||
/**
|
||||
* Provider key prefilled when the preset is picked. Set it when the obvious
|
||||
* name is a Hermes built-in provider id (e.g. `minimax`): Hermes routes
|
||||
* `model.provider` to the built-in, ignoring a same-named custom_provider.
|
||||
*/
|
||||
providerKey?: string;
|
||||
}
|
||||
|
||||
export interface HermesProviderSettingsConfig {
|
||||
@@ -2334,8 +2340,10 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
|
||||
regionKey: "cn",
|
||||
websiteUrl: "https://platform.minimax.cn",
|
||||
apiKeyUrl: "https://platform.minimax.cn/subscribe/token-plan",
|
||||
// `minimax` / `minimax-cn` are Hermes built-ins that shadow custom_providers
|
||||
providerKey: "cc-switch-minimax",
|
||||
settingsConfig: {
|
||||
name: "minimax",
|
||||
name: "cc-switch-minimax",
|
||||
base_url: "https://api.minimax.cn/v1",
|
||||
api_key: "",
|
||||
api_mode: "chat_completions",
|
||||
@@ -2343,6 +2351,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
|
||||
{
|
||||
id: "MiniMax-M3.1-Flash",
|
||||
name: "MiniMax M3.1 Flash",
|
||||
supports_vision: true,
|
||||
},
|
||||
{ id: "MiniMax-M3", name: "MiniMax M3" },
|
||||
],
|
||||
@@ -2354,7 +2363,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
|
||||
icon: "minimax",
|
||||
iconColor: "#FF6B6B",
|
||||
suggestedDefaults: {
|
||||
model: { default: "MiniMax-M3.1-Flash", provider: "minimax" },
|
||||
model: { default: "MiniMax-M3.1-Flash", provider: "cc-switch-minimax" },
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -2363,8 +2372,9 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
|
||||
regionKey: "intl",
|
||||
websiteUrl: "https://platform.minimax.io",
|
||||
apiKeyUrl: "https://platform.minimax.io/subscribe/coding-plan",
|
||||
providerKey: "cc-switch-minimax-en",
|
||||
settingsConfig: {
|
||||
name: "minimax_en",
|
||||
name: "cc-switch-minimax-en",
|
||||
base_url: "https://api.minimax.io/v1",
|
||||
api_key: "",
|
||||
api_mode: "chat_completions",
|
||||
@@ -2372,6 +2382,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
|
||||
{
|
||||
id: "MiniMax-M3.1-Flash",
|
||||
name: "MiniMax M3.1 Flash",
|
||||
supports_vision: true,
|
||||
},
|
||||
{ id: "MiniMax-M3", name: "MiniMax M3" },
|
||||
],
|
||||
@@ -2383,7 +2394,10 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
|
||||
icon: "minimax",
|
||||
iconColor: "#FF6B6B",
|
||||
suggestedDefaults: {
|
||||
model: { default: "MiniMax-M3.1-Flash", provider: "minimax_en" },
|
||||
model: {
|
||||
default: "MiniMax-M3.1-Flash",
|
||||
provider: "cc-switch-minimax-en",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { hermesProviderPresets } from "@/config/hermesProviderPresets";
|
||||
|
||||
// Hermes routes `model.provider` to a built-in provider when the name is a
|
||||
// canonical built-in id, ignoring a same-named custom_provider.
|
||||
const HERMES_BUILTIN_MINIMAX_IDS = ["minimax", "minimax-cn", "minimax-oauth"];
|
||||
|
||||
describe("Hermes MiniMax presets", () => {
|
||||
it.each(["MiniMax", "MiniMax en"])(
|
||||
"%s prefills a provider key that no Hermes built-in shadows",
|
||||
(name) => {
|
||||
const preset = hermesProviderPresets.find((p) => p.name === name);
|
||||
expect(preset).toBeDefined();
|
||||
|
||||
const key = preset!.providerKey;
|
||||
expect(key).toMatch(/^[a-z0-9]+(-[a-z0-9]+)*$/);
|
||||
expect(HERMES_BUILTIN_MINIMAX_IDS).not.toContain(key);
|
||||
expect(preset!.settingsConfig.name).toBe(key);
|
||||
expect(preset!.suggestedDefaults?.model.provider).toBe(key);
|
||||
},
|
||||
);
|
||||
|
||||
it.each(["MiniMax", "MiniMax en"])(
|
||||
"%s declares image input for MiniMax-M3.1-Flash",
|
||||
(name) => {
|
||||
const preset = hermesProviderPresets.find((p) => p.name === name);
|
||||
const flash = preset!.settingsConfig.models?.find(
|
||||
(m) => m.id === "MiniMax-M3.1-Flash",
|
||||
);
|
||||
expect(flash?.supports_vision).toBe(true);
|
||||
},
|
||||
);
|
||||
});
|
||||
Reference in new issue
Block a user