Skip to content

Commit 37558cd

Browse files
Update completion model fields immediately on save (#1137)
* fix completion fields and add unit test * pre-commit * fix install in CI * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent 3a8016a commit 37558cd

File tree

2 files changed

+38
-15
lines changed

2 files changed

+38
-15
lines changed

packages/jupyter-ai/jupyter_ai/config_manager.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -442,10 +442,10 @@ def em_provider_params(self):
442442
@property
443443
def completions_lm_provider_params(self):
444444
return self._provider_params(
445-
"completions_model_provider_id", self._lm_providers
445+
"completions_model_provider_id", self._lm_providers, completions=True
446446
)
447447

448-
def _provider_params(self, key, listing):
448+
def _provider_params(self, key, listing, completions: bool = False):
449449
# read config
450450
config = self._read_config()
451451

@@ -457,7 +457,10 @@ def _provider_params(self, key, listing):
457457
model_id = model_uid.split(":", 1)[1]
458458

459459
# get config fields (e.g. base API URL, etc.)
460-
fields = config.fields.get(model_uid, {})
460+
if completions:
461+
fields = config.completions_fields.get(model_uid, {})
462+
else:
463+
fields = config.fields.get(model_uid, {})
461464

462465
# get authn fields
463466
_, Provider = get_em_provider(model_uid, listing)

packages/jupyter-ai/jupyter_ai/tests/test_config_manager.py

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -194,20 +194,35 @@ def configure_to_openai(cm: ConfigManager):
194194
return LM_GID, EM_GID, LM_LID, EM_LID, API_PARAMS
195195

196196

197-
def configure_with_fields(cm: ConfigManager):
197+
def configure_with_fields(cm: ConfigManager, completions: bool = False):
198198
"""
199-
Configures the ConfigManager with fields and API keys.
199+
Default behavior: Configures the ConfigManager with fields and API keys.
200200
Returns the expected result of `cm.lm_provider_params`.
201+
202+
If `completions` is set to `True`, this configures the ConfigManager with
203+
completion model fields, and returns the expected result of
204+
`cm.completions_lm_provider_params`.
201205
"""
202-
req = UpdateConfigRequest(
203-
model_provider_id="openai-chat:gpt-4o",
204-
api_keys={"OPENAI_API_KEY": "foobar"},
205-
fields={
206-
"openai-chat:gpt-4o": {
207-
"openai_api_base": "https://example.com",
208-
}
209-
},
210-
)
206+
if completions:
207+
req = UpdateConfigRequest(
208+
completions_model_provider_id="openai-chat:gpt-4o",
209+
api_keys={"OPENAI_API_KEY": "foobar"},
210+
completions_fields={
211+
"openai-chat:gpt-4o": {
212+
"openai_api_base": "https://example.com",
213+
}
214+
},
215+
)
216+
else:
217+
req = UpdateConfigRequest(
218+
model_provider_id="openai-chat:gpt-4o",
219+
api_keys={"OPENAI_API_KEY": "foobar"},
220+
fields={
221+
"openai-chat:gpt-4o": {
222+
"openai_api_base": "https://example.com",
223+
}
224+
},
225+
)
211226
cm.update_config(req)
212227
return {
213228
"model_id": "gpt-4o",
@@ -445,7 +460,7 @@ def test_handle_bad_provider_ids(cm_with_bad_provider_ids):
445460
assert config_desc.embeddings_provider_id is None
446461

447462

448-
def test_config_manager_returns_fields(cm):
463+
def test_returns_chat_model_fields(cm):
449464
"""
450465
Asserts that `ConfigManager.lm_provider_params` returns model fields set by
451466
the user.
@@ -454,6 +469,11 @@ def test_config_manager_returns_fields(cm):
454469
assert cm.lm_provider_params == expected_model_args
455470

456471

472+
def test_returns_completion_model_fields(cm):
473+
expected_model_args = configure_with_fields(cm, completions=True)
474+
assert cm.completions_lm_provider_params == expected_model_args
475+
476+
457477
def test_config_manager_does_not_write_to_defaults(
458478
config_file_with_model_fields, schema_path
459479
):

0 commit comments

Comments
 (0)