|
1 | | -From 21e829f4a3766c75c0d2f325f9aa188f6c327fcb Mon Sep 17 00:00:00 2001 |
| 1 | +From 3e8f702bd2dca95dee182cd147a2cda413e0c9a6 Mon Sep 17 00:00:00 2001 |
2 | 2 | From: Nikhil Sonti <nikhilsv92@gmail.com> |
3 | 3 | Date: Tue, 5 Aug 2025 17:34:40 -0700 |
4 | | -Subject: [PATCH 3/3] New BrowserOS settings AI page for providers |
| 4 | +Subject: [PATCH] New BrowserOS settings AI page for providers |
5 | 5 |
|
6 | 6 | --- |
7 | 7 | .../api/settings_private/prefs_util.cc | 1 + |
8 | 8 | chrome/browser/prefs/browser_prefs.cc | 12 +- |
9 | | - .../settings/nxtscape_page/nxtscape_page.html | 842 +++++++++--------- |
10 | | - .../settings/nxtscape_page/nxtscape_page.ts | 618 +++++++++---- |
| 9 | + .../settings/nxtscape_page/nxtscape_page.html | 840 +++++++++--------- |
| 10 | + .../settings/nxtscape_page/nxtscape_page.ts | 620 +++++++++---- |
11 | 11 | chrome/common/pref_names.h | 7 + |
12 | 12 | 5 files changed, 905 insertions(+), 575 deletions(-) |
13 | 13 |
|
@@ -47,7 +47,7 @@ index cf120aacb58d3..7cc63f0c20cc4 100644 |
47 | 47 | registry->RegisterStringPref("nxtscape.nxtscape_model", ""); |
48 | 48 |
|
49 | 49 | diff --git a/chrome/browser/resources/settings/nxtscape_page/nxtscape_page.html b/chrome/browser/resources/settings/nxtscape_page/nxtscape_page.html |
50 | | -index 28e18b5f69f95..5370f2e079c7e 100644 |
| 50 | +index 28e18b5f69f95..9a429f31f43a0 100644 |
51 | 51 | --- a/chrome/browser/resources/settings/nxtscape_page/nxtscape_page.html |
52 | 52 | +++ b/chrome/browser/resources/settings/nxtscape_page/nxtscape_page.html |
53 | 53 | @@ -1,13 +1,23 @@ |
@@ -479,7 +479,7 @@ index 28e18b5f69f95..5370f2e079c7e 100644 |
479 | 479 | } |
480 | 480 |
|
481 | 481 | .status-toast.show { |
482 | | -@@ -236,406 +426,236 @@ |
| 482 | +@@ -236,406 +426,234 @@ |
483 | 483 | opacity: 1; |
484 | 484 | } |
485 | 485 |
|
@@ -817,31 +817,29 @@ index 28e18b5f69f95..5370f2e079c7e 100644 |
817 | 817 | + |
818 | 818 | <div class="form-group"> |
819 | 819 | - <label class="form-label" for="anthropicApiKey">API Key</label> |
820 | | -+ <label class="form-label"> |
821 | | -+ API Key <span class="required" hidden$="[[dialogProviderType_ === 'ollama']]">*</span> |
822 | | -+ </label> |
| 820 | ++ <label class="form-label">API Key</label> |
823 | 821 | <input type="password" |
824 | 822 | - id="anthropicApiKey" |
825 | | -- class="form-field" |
| 823 | + class="form-field" |
826 | 824 | - value="[[prefs.nxtscape.anthropic_api_key.value]]" |
827 | 825 | - on-input="onAnthropicApiKeyChange_" |
828 | 826 | - placeholder="Enter your Anthropic API key" |
829 | 827 | - required> |
830 | 828 | - <div class="form-helper">Your Anthropic API key (required)</div> |
831 | | -- </div> |
| 829 | ++ value="{{dialogApiKey_::input}}" |
| 830 | ++ placeholder="Enter your API key (optional for some providers)"> |
| 831 | ++ <div class="form-helper">Your API key is encrypted and stored locally</div> |
| 832 | + </div> |
832 | 833 | - <div class="form-group"> |
833 | 834 | - <label class="form-label" for="anthropicBaseUrl">Base URL (Optional)</label> |
834 | 835 | - <input type="url" |
835 | 836 | - id="anthropicBaseUrl" |
836 | | - class="form-field" |
| 837 | +- class="form-field" |
837 | 838 | - value="[[prefs.nxtscape.anthropic_base_url.value]]" |
838 | 839 | - on-input="onAnthropicBaseUrlChange_" |
839 | 840 | - placeholder="https://api.anthropic.com"> |
840 | 841 | - <div class="form-helper">Override the Anthropic API base URL (leave empty for default)</div> |
841 | | -+ value="{{dialogApiKey_::input}}" |
842 | | -+ placeholder="Enter your API key"> |
843 | | -+ <div class="form-helper">Your API key is encrypted and stored locally</div> |
844 | | - </div> |
| 842 | +- </div> |
845 | 843 | - <div class="form-group"> |
846 | 844 | - <label class="form-label" for="anthropicModel">Model</label> |
847 | 845 | - <select id="anthropicModel" class="form-field" |
@@ -1076,9 +1074,8 @@ index 28e18b5f69f95..5370f2e079c7e 100644 |
1076 | 1074 | \ No newline at end of file |
1077 | 1075 | + <span>Settings saved successfully</span> |
1078 | 1076 | + </div> |
1079 | | -\ No newline at end of file |
1080 | 1077 | diff --git a/chrome/browser/resources/settings/nxtscape_page/nxtscape_page.ts b/chrome/browser/resources/settings/nxtscape_page/nxtscape_page.ts |
1081 | | -index 8c4421ef76e45..9de49d6e658a0 100644 |
| 1078 | +index 8c4421ef76e45..e9bebf5e2236f 100644 |
1082 | 1079 | --- a/chrome/browser/resources/settings/nxtscape_page/nxtscape_page.ts |
1083 | 1080 | +++ b/chrome/browser/resources/settings/nxtscape_page/nxtscape_page.ts |
1084 | 1081 | @@ -14,6 +14,8 @@ import 'chrome://resources/cr_elements/cr_button/cr_button.js'; |
@@ -1175,7 +1172,7 @@ index 8c4421ef76e45..9de49d6e658a0 100644 |
1175 | 1172 | export class SettingsNxtscapePageElement extends SettingsNxtscapePageElementBase { |
1176 | 1173 | static get is() { |
1177 | 1174 | return 'settings-nxtscape-page'; |
1178 | | -@@ -33,222 +113,438 @@ export class SettingsNxtscapePageElement extends SettingsNxtscapePageElementBase |
| 1175 | +@@ -33,222 +113,440 @@ export class SettingsNxtscapePageElement extends SettingsNxtscapePageElementBase |
1179 | 1176 |
|
1180 | 1177 | static get properties() { |
1181 | 1178 | return { |
@@ -1593,11 +1590,13 @@ index 8c4421ef76e45..9de49d6e658a0 100644 |
1593 | 1590 | + return false; |
1594 | 1591 | + } |
1595 | 1592 | + |
1596 | | -+ // API key is optional for Ollama, OpenAI Compatible, and Custom providers |
| 1593 | ++ // API key is optional for all providers, but show warning if missing for certain types |
1597 | 1594 | + const apiKeyOptionalTypes = [ProviderType.OLLAMA, ProviderType.OPENAI_COMPATIBLE, ProviderType.CUSTOM]; |
1598 | | -+ if (!this.dialogApiKey_ || (!this.dialogApiKey_.trim() && !apiKeyOptionalTypes.includes(this.dialogProviderType_))) { |
1599 | | -+ this.showStatusMessage_('API key is required', true); |
1600 | | -+ return false; |
| 1595 | ++ if (!this.dialogApiKey_ || !this.dialogApiKey_.trim()) { |
| 1596 | ++ if (!apiKeyOptionalTypes.includes(this.dialogProviderType_)) { |
| 1597 | ++ // Show warning but don't block |
| 1598 | ++ this.showStatusMessage_('Warning: API key not provided. Provider may not work without it.', false); |
| 1599 | ++ } |
1601 | 1600 | + } |
1602 | 1601 | + |
1603 | 1602 | + if (!this.dialogModelId_ || !this.dialogModelId_.trim()) { |
@@ -1774,7 +1773,7 @@ index 8c4421ef76e45..9de49d6e658a0 100644 |
1774 | 1773 | statusMessage.classList.add('show'); |
1775 | 1774 | setTimeout(() => { |
1776 | 1775 | statusMessage.classList.remove('show'); |
1777 | | -@@ -264,4 +560,4 @@ declare global { |
| 1776 | +@@ -264,4 +562,4 @@ declare global { |
1778 | 1777 | } |
1779 | 1778 |
|
1780 | 1779 | customElements.define( |
|
0 commit comments