Skip to content

feat: add MiniMax provider support#2527

Open
Rutetid wants to merge 5 commits intoarchestra-ai:mainfrom
Rutetid:feat/added-minimax-provider
Open

feat: add MiniMax provider support#2527
Rutetid wants to merge 5 commits intoarchestra-ai:mainfrom
Rutetid:feat/added-minimax-provider

Conversation

@Rutetid
Copy link
Contributor

@Rutetid Rutetid commented Jan 29, 2026

[Provider] Add MiniMax Support

Closes #1855
/claim #1855

Summary

This PR adds complete support for MiniMax AI

Changes

Backend Integration

Core Implementation:

  • Adapter (backend/src/routes/proxy/adapterV2/minimax.ts)

    • OpenAI-compatible request/response adapter with MiniMax-specific extensions
    • Streaming support with SSE parsing
    • Token estimation using tiktoken (MiniMax streaming returns usage: null)
    • Reasoning content extraction from reasoning_details array
    • Tool call handling and formatting
    • TOON compression for tool results
    • Model optimization support
    • Custom error handling for MiniMax's unique error format
  • Type Definitions (backend/src/types/llm-providers/minimax/ - 4 files)

    • Complete Zod schemas for API types (api.ts, messages.ts, tools.ts, index.ts)
    • Message, tool, and request/response schemas
    • Extended schema for reasoning_details thinking content
    • Stream chunk type allows role: "" (empty string) - MiniMax quirk
    • OpenAI-compatible format with MiniMax extensions
  • Routes (backend/src/routes/proxy/routesv2/minimax.ts)

    • HTTP proxy endpoints with agent support
    • Chat completions (streaming and non-streaming)
    • Error handling and validation
    • Workaround for missing /v1/models endpoint - uses hardcoded model list
  • Database Migration (backend/src/database/migrations/0131_add_minimax_token_prices.sql)

    • Token pricing for all MiniMax models
    • MiniMax-M2: $0.30 input / $1.20 output per million tokens
    • MiniMax-M2.1: $0.30 input / $1.20 output per million tokens
    • MiniMax-M2.1-lightning: $0.30 input / $2.40 output per million tokens
  • Models Dev Client Integration (backend/src/clients/models-dev-client.ts)

    • Added minimax provider mapping for automatic price sync

Frontend Integration

  • Interaction Handler (frontend/src/lib/llmProviders/minimax.ts)

    • Message parsing and rendering
    • Reasoning content display (thinking)
    • Tool call display
    • Token usage calculation
    • Stop reason handling
  • UI Components

    • Model selector integration
    • API key form with MiniMax branding
    • Provider display name
    • Chat interface support

Key MiniMax Differences

1. No Models Endpoint

MiniMax doesn't provide a /v1/models endpoint. We use a hardcoded list:

  • MiniMax-M2
  • MiniMax-M2.1
  • MiniMax-M2.1-lightning (fastest)

2. Streaming Usage Data

Problem: MiniMax streaming API returns "usage": null in all chunks (no token counts)
Solution: Implemented token estimation using tiktoken that:

  • Counts input tokens from request messages
  • Counts output tokens from accumulated text, reasoning, and tool calls
  • Runs automatically at stream end to ensure interactions are logged

3. Reasoning Details

MiniMax supports extended thinking with reasoning_details array:

  • Enable with extra_body: { reasoning_split: true }
  • Returns thinking process separate from main content
  • Adapter extracts reasoning deltas and accumulates full text

4. Stream Chunk Role Field

MiniMax sends "role": "" (empty string) in some stream chunks instead of "role": "assistant". Type schema updated to allow both.

Streaming Support

  • Non-streaming responses: Fully supported with native usage data
  • Streaming responses: Fully supported with SSE + token estimation

Feature Completeness

LLM Proxy ✅

Feature Status Notes
Tool invocation ✅ Supported Full tool call format conversion
Tool persistence ✅ Supported Tool calls maintained across conversation
Token/cost limits ✅ Supported Enforced per-request limits
Model optimization ✅ Supported Can switch to cheaper models
Tool results compression ✅ Supported TOON compression implemented
Dual LLM verification ✅ Supported Works with optimization rules
Metrics and observability ✅ Supported Full Prometheus metrics integration
Token estimation ✅ Supported Automatic for streaming (usage is null)

Chat ✅

Feature Status Notes
Chat conversations ✅ Works Full message history support
Model listing ✅ Works Hardcoded model list (no API endpoint)
Model selection ✅ Works Dropdown with all available models
Streaming responses ✅ Works Real-time SSE streaming
Reasoning content ✅ Works Displays thinking process separately
Error handling ✅ Works MiniMax-specific error codes handled
API key management ✅ Works Personal/team/org-wide key hierarchy
Conversation titles ✅ Works Auto-generation using fast model
Token tracking ✅ Works Estimated tokens logged to interactions

Testing Infrastructure

  • E2E Test Coverage (5 test suites)
    • Tool invocation policies (tool-invocation.spec.ts)
    • Tool persistence (tool-persistence.spec.ts)
    • Tool result compression (tool-result-compression.spec.ts)
    • Model optimization (model-optimization.spec.ts)
    • Token cost limits (token-cost-limits.spec.ts)
  • WireMock Stubs (13 mapping files in helm/e2e-tests/mappings/)
    • Model listing
    • Chat completions with various scenarios
    • Tool invocation test cases
    • Compression and optimization scenarios
    • Cost limit testing
  • CI Configuration (.github/values-ci.yaml)

API Key Instructions

Obtaining an API Key

Visit MiniMax Platform and generate an API key (a minimum of $25 recharge is required to use the API)

Demo Video

minimax.mp4

Testing Done

  • ✅ Chat conversation with MiniMax-M2.1-lightning
  • ✅ Verified streaming response with curl to actual API
  • ✅ Verified non-streaming response with curl to actual API
  • ✅ Token estimation accuracy verified (input/output/reasoning tokens)
  • ✅ Conversation title generation works
  • ✅ Interactions logged with cost data
  • ✅ Model listing shows all MiniMax models
  • pnpm lint passes
  • pnpm type-check passes

Documentation

Updated platform-supported-llm-providers.md

Copilot AI review requested due to automatic review settings January 29, 2026 22:35
@algora-pbc algora-pbc bot mentioned this pull request Jan 29, 2026
2 tasks
@London-Cat
Copy link
Collaborator

London-Cat commented Jan 29, 2026

📊 Reputation Summary

User Rep Pull Requests Activity Assigned Core Reactions
joeyorlando ⚡ 2089 85✅ 3🔄 12❌ 100 issues, 50 comments 7
Rutetid ⚡ 48 2✅ 1🔄 1❌ 0 issues, 17 comments 1 +1👍

How is the score calculated? Read about it in the Reputation Bot repository 🤖

@Rutetid
Copy link
Contributor Author

Rutetid commented Jan 29, 2026

Hey, I’ve got the MiniMax provider working, but I’m hitting a wall with the logs , it’s sometimes not showing up in the logs no matter what I try. Also, I noticed /profiles is gone, is that part of some shift? Would love some quick guidance on how to fix these issues!

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds end-to-end MiniMax provider support across the proxy, chat UI, typed schemas/OpenAPI, pricing, and e2e tests.

Changes:

  • Introduces MiniMax proxy routes + v2 adapter (streaming, tool calls, token estimation, error mapping).
  • Adds MiniMax provider types/schemas and propagates the provider through shared constants, API client types, and OpenAPI.
  • Adds chat UI integration, pricing migration, CI config, and e2e tests + WireMock mappings.

Reviewed changes

Copilot reviewed 60 out of 62 changed files in this pull request and generated 9 comments.

Show a summary per file
File Description
platform/shared/routes.ts Adds MiniMax route IDs for proxy endpoints.
platform/shared/model-constants.ts Registers minimax provider, display name, and model marker patterns.
platform/shared/hey-api/clients/api/types.gen.ts Adds generated MiniMax request/response types and extends provider unions.
platform/shared/hey-api/clients/api/sdk.gen.ts Adds generated SDK methods for MiniMax chat completions endpoints.
platform/shared/hey-api/clients/api/index.ts Re-exports MiniMax SDK functions and types.
platform/shared/chat-error.ts Adds MiniMax error type constants.
platform/helm/e2e-tests/mappings/minimax-tool-persistence.json WireMock stub for tool persistence scenario.
platform/helm/e2e-tests/mappings/minimax-token-cost-limit-test.json WireMock stub for token/cost limits scenario.
platform/helm/e2e-tests/mappings/minimax-models-list.json WireMock stub for model listing (used by tests).
platform/helm/e2e-tests/mappings/minimax-model-optimization-with-tools.json WireMock stub for optimization with tools.
platform/helm/e2e-tests/mappings/minimax-model-optimization-short.json WireMock stub for optimization short prompt scenario.
platform/helm/e2e-tests/mappings/minimax-model-optimization-no-tools.json WireMock stub for optimization without tools.
platform/helm/e2e-tests/mappings/minimax-model-optimization-long.json WireMock stub for optimization long prompt scenario.
platform/helm/e2e-tests/mappings/minimax-model-optimization-disabled.json WireMock stub for optimization disabled scenario.
platform/helm/e2e-tests/mappings/minimax-compression-enabled.json WireMock stub for TOON compression enabled scenario.
platform/helm/e2e-tests/mappings/minimax-compression-disabled.json WireMock stub for TOON compression disabled scenario.
platform/helm/e2e-tests/mappings/minimax-blocks-tool-untrusted-data.json WireMock stub for tool invocation policy blocking scenario.
platform/helm/e2e-tests/mappings/minimax-allows-regular-after-archestra.json WireMock stub for mixed tool call sequence scenario.
platform/helm/e2e-tests/mappings/minimax-allows-archestra-untrusted-context.json WireMock stub for untrusted context ordering scenario.
platform/frontend/src/lib/llmProviders/minimax.ts Adds UI interaction mapper for MiniMax interactions.
platform/frontend/src/lib/interaction.utils.ts Wires MiniMax interaction type into dynamic interaction handling.
platform/frontend/src/components/proxy-connection-instructions.tsx Adds MiniMax proxy connection instructions (base URL + label).
platform/frontend/src/components/chat/model-selector.tsx Adds MiniMax logo provider mapping for model selector.
platform/frontend/src/components/chat-api-key-form.tsx Adds MiniMax provider config (name/icon/link/placeholder).
platform/e2e-tests/tests/api/llm-proxy/tool-result-compression.spec.ts Includes MiniMax in shared compression test suite.
platform/e2e-tests/tests/api/llm-proxy/tool-persistence.spec.ts Includes MiniMax in shared tool persistence test suite.
platform/e2e-tests/tests/api/llm-proxy/tool-invocation.spec.ts Includes MiniMax in shared tool invocation policy tests.
platform/e2e-tests/tests/api/llm-proxy/token-cost-limits.spec.ts Includes MiniMax in shared token/cost limit tests.
platform/e2e-tests/tests/api/llm-proxy/model-optimization.spec.ts Includes MiniMax in shared model optimization tests.
platform/backend/src/types/llm-providers/minimax/tools.ts Adds Zod schemas for MiniMax tools + tool choice.
platform/backend/src/types/llm-providers/minimax/messages.ts Adds Zod schemas for MiniMax messages/tool calls/reasoning details.
platform/backend/src/types/llm-providers/minimax/index.ts Exposes MiniMax schemas/types including stream chunk typing.
platform/backend/src/types/llm-providers/minimax/api.ts Adds Zod request/response/headers schemas for MiniMax.
platform/backend/src/types/llm-providers/index.ts Exports MiniMax provider types from the provider index.
platform/backend/src/types/interaction.ts Adds MiniMax to interaction request/response unions + discriminated union.
platform/backend/src/types/chat-api-key.ts Allows minimax as a supported chat API key provider.
platform/backend/src/tokenizers/index.ts Selects tokenizer for MiniMax (tiktoken).
platform/backend/src/tokenizers/base.ts Extends ProviderMessage union to include MiniMax message shape.
platform/backend/src/server.ts Registers MiniMax schemas in OpenAPI registry.
platform/backend/src/routes/proxy/utils/cost-optimization.ts Adds MiniMax message typing for cost optimization utilities.
platform/backend/src/routes/proxy/utils/adapters/minimax.ts Adds legacy metrics adapter helper for MiniMax usage extraction.
platform/backend/src/routes/proxy/routesv2/minimax.ts Adds MiniMax unified proxy routes and optional passthrough proxying.
platform/backend/src/routes/proxy/adapterV2/minimax.ts Implements MiniMax v2 adapter: request/response/stream, SSE parsing, token estimation, tool compression, error extraction.
platform/backend/src/routes/proxy/adapterV2/index.ts Exports MiniMax adapter factory.
platform/backend/src/routes/index.ts Registers MiniMax proxy routes in backend routing.
platform/backend/src/routes/features.ts Adds minimaxEnabled flag to feature endpoint response.
platform/backend/src/routes/chat/routes.models.ts Adds MiniMax model fetcher (hardcoded models) and provider api key fallback.
platform/backend/src/routes/chat/routes.chat.ts Adds MiniMax to smart default model selection.
platform/backend/src/routes/chat/errors.ts Adds MiniMax error parsing + error-code mapping.
platform/backend/src/models/optimization-rule.ts Adds MiniMax key to optimization rule provider maps.
platform/backend/src/llm-metrics.ts Adds token reporting for MiniMax responses when usage exists.
platform/backend/src/database/migrations/meta/_journal.json Registers the new MiniMax token price migration.
platform/backend/src/database/migrations/0131_add_minimax_token_prices.sql Adds MiniMax token pricing rows.
platform/backend/src/config.ts Adds MiniMax proxy and chat config knobs (base URLs, API key).
platform/backend/src/clients/models-dev-client.ts Maps models.dev minimax to internal provider and source matching.
platform/backend/src/clients/llm-client.ts Adds MiniMax provider detection, fast model, and model creators (direct + proxied).
platform/backend/src/clients/dual-llm-client.ts Adds a MiniMax dual LLM client using OpenAI SDK compatibility.
docs/pages/platform-supported-llm-providers.md Documents MiniMax provider setup and behavior.
docs/openapi.json Updates generated OpenAPI with MiniMax schemas and endpoints.
.vscode/settings.json Adds VS Code setting for Postman dotenv detection notification.
.github/values-ci.yaml Adds MiniMax env vars for CI/e2e configuration.

@Rutetid
Copy link
Contributor Author

Rutetid commented Jan 29, 2026

Applied all suggestions by copilot!

@joeyorlando
Copy link
Contributor

joeyorlando commented Feb 5, 2026

hi there @Rutetid 👋 I just merged #2610 which simplified a few parts regarding adding a new LLM provider - this introduced a few merge conflicts in your PR, do you mind rebasing off of latest main + addressing merge conflicts? I will review once that is done!

Additionally, can you run pnpm check:ci locally and address any issues + push up? 🙏

@Rutetid Rutetid force-pushed the feat/added-minimax-provider branch from 09fe5c4 to a5a0167 Compare February 5, 2026 14:41
@Rutetid
Copy link
Contributor Author

Rutetid commented Feb 5, 2026

Hi @joeyorlando I've rebased onto the latest main to include the #2610 refactors. I've also confirmed that pnpm check:ci is passing with all tests green. Ready for final review!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we don't need a database migration

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

alright ill remove it

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I removed the migration , and now the values will default to $30 for cheaper models and $50 for others as specified in the file backend/src/default-model-prices.ts

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Provider] Add MiniMax support

3 participants