@@ -14,6 +14,7 @@ def _base_urls() -> dict[str, str]:
1414 return {
1515 "anthropic" : f"{ WS } /ai-gateway/anthropic/v1" ,
1616 "gemini" : f"{ WS } /ai-gateway/gemini/v1beta" ,
17+ "oss" : f"{ WS } /ai-gateway/mlflow/v1" ,
1718 }
1819
1920
@@ -48,6 +49,20 @@ def test_gemini_provider_added_when_models_present(self):
4849 overlay , _ = opencode .render_overlay ("gemini-2" , "tok" , _base_urls (), models )
4950 assert "databricks-google" in overlay ["provider" ]
5051
52+ def test_oss_provider_added_when_models_present (self ):
53+ models = {"oss" : ["system.ai.kimi-k2-7-code" ]}
54+ overlay , _ = opencode .render_overlay (
55+ "system.ai.kimi-k2-7-code" , "tok" , _base_urls (), models
56+ )
57+ assert "databricks-oss" in overlay ["provider" ]
58+
59+ def test_oss_provider_uses_ai_sdk_openai_package (self ):
60+ models = {"oss" : ["system.ai.kimi-k2-7-code" ]}
61+ overlay , _ = opencode .render_overlay (
62+ "system.ai.kimi-k2-7-code" , "tok" , _base_urls (), models
63+ )
64+ assert overlay ["provider" ]["databricks-oss" ]["npm" ] == "@ai-sdk/openai"
65+
5166 def test_both_providers_when_both_present (self ):
5267 models = {"anthropic" : ["claude-sonnet" ], "gemini" : ["gemini-2" ]}
5368 overlay , _ = opencode .render_overlay ("claude-sonnet" , "tok" , _base_urls (), models )
@@ -70,6 +85,14 @@ def test_gemini_base_url(self):
7085 options = overlay ["provider" ]["databricks-google" ]["options" ]
7186 assert options ["baseURL" ] == f"{ WS } /ai-gateway/gemini/v1beta"
7287
88+ def test_oss_base_url (self ):
89+ models = {"oss" : ["system.ai.kimi-k2-7-code" ]}
90+ overlay , _ = opencode .render_overlay (
91+ "system.ai.kimi-k2-7-code" , "tok" , _base_urls (), models
92+ )
93+ options = overlay ["provider" ]["databricks-oss" ]["options" ]
94+ assert options ["baseURL" ] == f"{ WS } /ai-gateway/mlflow/v1"
95+
7396 def test_token_in_api_key (self ):
7497 models = {"anthropic" : ["claude-sonnet" ]}
7598 overlay , _ = opencode .render_overlay ("claude-sonnet" , "mytoken" , _base_urls (), models )
@@ -134,6 +157,11 @@ def test_managed_keys_include_gemini_provider(self):
134157 _ , keys = opencode .render_overlay ("gemini-2" , "tok" , _base_urls (), models )
135158 assert ["provider" , "databricks-google" ] in keys
136159
160+ def test_managed_keys_include_oss_provider (self ):
161+ models = {"oss" : ["system.ai.kimi-k2-7-code" ]}
162+ _ , keys = opencode .render_overlay ("system.ai.kimi-k2-7-code" , "tok" , _base_urls (), models )
163+ assert ["provider" , "databricks-oss" ] in keys
164+
137165 def test_anthropic_models_listed (self ):
138166 models = {"anthropic" : ["claude-sonnet" , "claude-haiku" ]}
139167 overlay , _ = opencode .render_overlay ("claude-sonnet" , "tok" , _base_urls (), models )
@@ -151,6 +179,13 @@ def test_prefixes_gemini_model_with_provider_id(self):
151179 overlay , _ = opencode .render_overlay ("gemini-2" , "tok" , _base_urls (), models )
152180 assert overlay ["model" ] == "databricks-google/gemini-2"
153181
182+ def test_prefixes_oss_model_with_provider_id (self ):
183+ models = {"oss" : ["system.ai.kimi-k2-7-code" ]}
184+ overlay , _ = opencode .render_overlay (
185+ "system.ai.kimi-k2-7-code" , "tok" , _base_urls (), models
186+ )
187+ assert overlay ["model" ] == "databricks-oss/system.ai.kimi-k2-7-code"
188+
154189
155190class TestMcpServerConfig :
156191 def test_builds_remote_server_entry_with_oauth_token_env_header (self ):
@@ -268,6 +303,16 @@ def test_falls_back_to_gemini(self):
268303 state = {"opencode_models" : {"anthropic" : [], "gemini" : ["gemini-2" ]}}
269304 assert opencode .default_model (state ) == "gemini-2"
270305
306+ def test_falls_back_to_oss (self ):
307+ state = {
308+ "opencode_models" : {
309+ "anthropic" : [],
310+ "gemini" : [],
311+ "oss" : ["system.ai.kimi-k2-7-code" ],
312+ }
313+ }
314+ assert opencode .default_model (state ) == "system.ai.kimi-k2-7-code"
315+
271316 def test_returns_none_when_empty (self ):
272317 assert opencode .default_model ({}) is None
273318 assert opencode .default_model ({"opencode_models" : {}}) is None
0 commit comments