Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/en_US/release_notes_9_14.rst
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,5 @@ Bug fixes

| `Issue #9279 <https://github.com/pgadmin-org/pgadmin4/issues/9279>`_ - Fixed an issue where OAuth2 authentication fails with 'object has no attribute' if OAUTH2_AUTO_CREATE_USER is False.
| `Issue #9392 <https://github.com/pgadmin-org/pgadmin4/issues/9392>`_ - Ensure that the Geometry Viewer refreshes when re-running queries or switching geometry columns, preventing stale data from being displayed.
| `Issue #9694 <https://github.com/pgadmin-org/pgadmin4/issues/9694>`_ - Fixed an issue where AI Reports are grayed out after setting an API key by auto-selecting the default provider.
| `Issue #9721 <https://github.com/pgadmin-org/pgadmin4/issues/9721>`_ - Fixed an issue where permissions page is not completely accessible on full scroll.
44 changes: 44 additions & 0 deletions web/pgadmin/preferences/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,18 @@ def save():
"""
pref_data = get_data()

# Check once whether the user is explicitly setting default_provider
# in this save, so auto-selection doesn't override their choice.
_provider_map = {
'anthropic_api_key_file': 'anthropic',
'openai_api_key_file': 'openai',
'ollama_api_url': 'ollama',
'docker_api_url': 'docker',
}
explicit_provider_choice = any(
item.get('name') == 'default_provider' for item in pref_data
)

for data in pref_data:
if data['name'] in ['vw_edt_tab_title_placeholder',
'qt_tab_title_placeholder',
Expand All @@ -243,6 +255,16 @@ def save():
if data['name'] == 'save_app_state' and not data['value']:
delete_tool_data()

# Auto-select the default LLM provider when an API key/URL is
# configured and no provider has been selected yet.
if res and not explicit_provider_choice and \
data['name'] in _provider_map and data['value']:
ai_module = Preferences.module('ai')
if ai_module:
dp_pref = ai_module.preference('default_provider')
if dp_pref and not dp_pref.get():
dp_pref.set(_provider_map[data['name']])

if not res:
return internal_server_error(errormsg=msg)

Expand Down Expand Up @@ -309,6 +331,18 @@ def update():
pref_data = get_data()
pref_data = json.loads(pref_data['pref_data'])

# Check once whether the user is explicitly setting default_provider
# in this save, so auto-selection doesn't override their choice.
_provider_map = {
'anthropic_api_key_file': 'anthropic',
'openai_api_key_file': 'openai',
'ollama_api_url': 'ollama',
'docker_api_url': 'docker',
}
explicit_provider_choice = any(
item.get('name') == 'default_provider' for item in pref_data
)

for data in pref_data:
if data['name'] in ['vw_edt_tab_title_placeholder',
'qt_tab_title_placeholder',
Expand All @@ -321,6 +355,16 @@ def update():
# set user preferences
pref.set(data['value'])

# Auto-select the default LLM provider when an API key/URL is
# configured and no provider has been selected yet.
if not explicit_provider_choice and \
data['name'] in _provider_map and data['value']:
ai_module = Preferences.module('ai')
if ai_module:
dp_pref = ai_module.preference('default_provider')
if dp_pref and not dp_pref.get():
dp_pref.set(_provider_map[data['name']])

return make_json_response(
data={'data': 'Success'},
status=200
Expand Down
Loading