bundledRemoteModelsCatalog top-level property
Bundled fallback catalog — ships in-process so the picker still
works when the remote URL is down (the user just reported "только
одна m3 захардкожена" because the GitHub Pages site at fa1.dev
didn't ship the catalog JSON yet). The remote fetch is the source
of truth; this is the offline seed. The catalog contains ONLY
metadata the chat endpoint doesn't publish (context windows, media
slots) and the chat ids the picker falls back on when /v1/models
is unreachable. Keep it data-shaped (a single JSON literal) so the
remote catalog can replace it 1:1 the day fa1.dev ships.
The MiniMax model ids below were extracted from
https://platform.minimax.io/docs/llms.txt (the docs index file
fetched 2026-08-28): each entry is the literal model value the
provider accepts in the matching endpoint's POST body. Image uses
/v1/image_generation; video uses /v2/video_generation
(MiniMax-H3); music uses /v1/music_generation (music-3.0/
music-2.6); TTS uses /v1/t2a_v2 (speech-2.8-hd etc). ASR
names are kept as legacy placeholders — no doc was shipped in
this fetch, so the slot is empty until the remote catalog (or
another doc fetch) fills it in.
Implementation
final RemoteModelsCatalog bundledRemoteModelsCatalog =
RemoteModelsCatalog.fromJson(const {
'providers': {
'minimax': {
'contextWindows': {
'MiniMax-M3': 1000000,
'MiniMax-M2.7': 204800,
'MiniMax-M2': 204800,
'MiniMax-M1': 128000,
},
'pricing': {
// MiniMax's published flat per-Mtok rates (M2 launch pricing).
// Models without a documented flat rate stay absent — the
// picker renders `—` rather than a fabricated number.
'MiniMax-M2': {'input': 0.30, 'output': 1.20},
},
'media': {
'imageGeneration': ['image-01', 'image-01-live'],
'videoGeneration': ['MiniMax-H3'],
'musicGeneration': ['music-3.0', 'music-2.6'],
'speech': ['speech-2.8-hd', 'speech-2.6-hd'],
'transcription': <String>[],
},
},
},
});