fix(synthetic): update pricing, add minimax-m2.1/gpt-oss meta (#165)

Amolith created

* fix(synthetic): update k2.5 pricing

* fix(synthetic): enable reasoning for gpt-oss-120b

* fix(synthetic): add minimax-m2.1 override

Synthetic stopped self-hosting MiniMax M2.1 and are now proxying it
through Fireworks. Proxied models don't include the supported_features
metadata, so we need overrides for tools and reasoning support.

Change summary

cmd/synthetic/main.go                     |  7 ++++-
internal/providers/configs/synthetic.json | 26 +++++++++++++++---------
2 files changed, 21 insertions(+), 12 deletions(-)

Detailed changes

cmd/synthetic/main.go 🔗

@@ -104,7 +104,7 @@ func applyModelOverrides(model *Model) {
 	case strings.HasPrefix(model.ID, "hf:Qwen/Qwen3"):
 		model.SupportedFeatures = []string{"tools"}
 
-	// Has correct metadata already, but the Kimi-K2 matcher (next) would
+	// Has correct metadata already, but the following k2 matchers would
 	// override it to omit reasoning
 	case strings.HasPrefix(model.ID, "hf:moonshotai/Kimi-K2-Thinking"):
 		model.SupportedFeatures = []string{"tools", "reasoning"}
@@ -119,7 +119,10 @@ func applyModelOverrides(model *Model) {
 		model.SupportedFeatures = []string{"tools"}
 
 	case strings.HasPrefix(model.ID, "hf:openai/gpt-oss"):
-		model.SupportedFeatures = []string{"tools"}
+		model.SupportedFeatures = []string{"tools", "reasoning"}
+
+	case strings.HasPrefix(model.ID, "hf:MiniMaxAI/MiniMax-M2.1"):
+		model.SupportedFeatures = []string{"tools", "reasoning"}
 	}
 }
 

internal/providers/configs/synthetic.json 🔗

@@ -163,12 +163,12 @@
     {
       "id": "hf:moonshotai/Kimi-K2.5",
       "name": "Kimi K2.5",
-      "cost_per_1m_in": 1.2,
-      "cost_per_1m_out": 1.2,
-      "cost_per_1m_in_cached": 1.2,
-      "cost_per_1m_out_cached": 1.2,
+      "cost_per_1m_in": 0.55,
+      "cost_per_1m_out": 2.1900000000000004,
+      "cost_per_1m_in_cached": 0.55,
+      "cost_per_1m_out_cached": 0.55,
       "context_window": 262144,
-      "default_max_tokens": 26214,
+      "default_max_tokens": 32768,
       "can_reason": true,
       "reasoning_levels": [
         "low",
@@ -195,10 +195,10 @@
     {
       "id": "hf:MiniMaxAI/MiniMax-M2.1",
       "name": "MiniMax M2.1",
-      "cost_per_1m_in": 0.55,
-      "cost_per_1m_out": 2.1900000000000004,
-      "cost_per_1m_in_cached": 0.55,
-      "cost_per_1m_out_cached": 0.55,
+      "cost_per_1m_in": 0.3,
+      "cost_per_1m_out": 1.2,
+      "cost_per_1m_in_cached": 0.3,
+      "cost_per_1m_out_cached": 0.3,
       "context_window": 196608,
       "default_max_tokens": 19660,
       "can_reason": true,
@@ -284,7 +284,13 @@
       "cost_per_1m_out_cached": 0.09999999999999999,
       "context_window": 131072,
       "default_max_tokens": 13107,
-      "can_reason": false,
+      "can_reason": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
       "supports_attachments": false,
       "options": {}
     }