bundledRemoteModelsCatalog top-level property

RemoteModelsCatalog bundledRemoteModelsCatalog
final

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>[],
          },
        },
      },
    });