@@ -7,6 +7,7 @@ import { logStore } from '~/lib/stores/logs';
77
88// Import a default fallback icon
99import DefaultIcon from '/icons/Default.svg' ; // Adjust the path as necessary
10+ import { providerBaseUrlEnvKeys } from '~/utils/constants' ;
1011
1112export default function ProvidersTab ( ) {
1213 const { providers, updateProviderSettings, isLocalModel } = useSettings ( ) ;
@@ -47,60 +48,77 @@ export default function ProvidersTab() {
4748 className = "w-full bg-white dark:bg-bolt-elements-background-depth-4 relative px-2 py-1.5 rounded-md focus:outline-none placeholder-bolt-elements-textTertiary text-bolt-elements-textPrimary dark:text-bolt-elements-textPrimary border border-bolt-elements-borderColor"
4849 />
4950 </ div >
50- { filteredProviders . map ( ( provider ) => (
51- < div
52- key = { provider . name }
53- className = "flex flex-col mb-2 provider-item hover:bg-bolt-elements-bg-depth-3 p-4 rounded-lg border border-bolt-elements-borderColor "
54- >
55- < div className = "flex items-center justify-between mb-2" >
56- < div className = "flex items-center gap-2" >
57- < img
58- src = { `/icons/${ provider . name } .svg` } // Attempt to load the specific icon
59- onError = { ( e ) => {
60- // Fallback to default icon on error
61- e . currentTarget . src = DefaultIcon ;
51+ { filteredProviders . map ( ( provider ) => {
52+ const envBaseUrlKey = providerBaseUrlEnvKeys [ provider . name ] . baseUrlKey ;
53+ const envBaseUrl = envBaseUrlKey ? import . meta. env [ envBaseUrlKey ] : undefined ;
54+
55+ return (
56+ < div
57+ key = { provider . name }
58+ className = "flex flex-col mb-2 provider-item hover:bg-bolt-elements-bg-depth-3 p-4 rounded-lg border border-bolt-elements-borderColor "
59+ >
60+ < div className = "flex items-center justify-between mb-2" >
61+ < div className = "flex items-center gap-2" >
62+ < img
63+ src = { `/icons/${ provider . name } .svg` } // Attempt to load the specific icon
64+ onError = { ( e ) => {
65+ // Fallback to default icon on error
66+ e . currentTarget . src = DefaultIcon ;
67+ } }
68+ alt = { `${ provider . name } icon` }
69+ className = "w-6 h-6 dark:invert"
70+ />
71+ < span className = "text-bolt-elements-textPrimary" > { provider . name } </ span >
72+ </ div >
73+ < Switch
74+ className = "ml-auto"
75+ checked = { provider . settings . enabled }
76+ onCheckedChange = { ( enabled ) => {
77+ updateProviderSettings ( provider . name , { ...provider . settings , enabled } ) ;
78+
79+ if ( enabled ) {
80+ logStore . logProvider ( `Provider ${ provider . name } enabled` , { provider : provider . name } ) ;
81+ } else {
82+ logStore . logProvider ( `Provider ${ provider . name } disabled` , { provider : provider . name } ) ;
83+ }
6284 } }
63- alt = { `${ provider . name } icon` }
64- className = "w-6 h-6 dark:invert"
6585 />
66- < span className = "text-bolt-elements-textPrimary" > { provider . name } </ span >
6786 </ div >
68- < Switch
69- className = "ml-auto"
70- checked = { provider . settings . enabled }
71- onCheckedChange = { ( enabled ) => {
72- updateProviderSettings ( provider . name , { ...provider . settings , enabled } ) ;
87+ { /* Base URL input for configurable providers */ }
88+ { URL_CONFIGURABLE_PROVIDERS . includes ( provider . name ) && provider . settings . enabled && (
89+ < div className = "mt-2" >
90+ { envBaseUrl && (
91+ < label className = "block text-xs text-bolt-elements-textSecondary text-green-300 mb-2" >
92+ Set On (.env) : { envBaseUrl }
93+ </ label >
94+ ) }
95+ < label className = "block text-sm text-bolt-elements-textSecondary mb-2" >
96+ { envBaseUrl ? 'Override Base Url' : 'Base URL ' } :{ ' ' }
97+ </ label >
98+ < input
99+ type = "text"
100+ value = { provider . settings . baseUrl || '' }
101+ onChange = { ( e ) => {
102+ let newBaseUrl : string | undefined = e . target . value ;
103+
104+ if ( newBaseUrl && newBaseUrl . trim ( ) . length === 0 ) {
105+ newBaseUrl = undefined ;
106+ }
73107
74- if ( enabled ) {
75- logStore . logProvider ( `Provider ${ provider . name } enabled` , { provider : provider . name } ) ;
76- } else {
77- logStore . logProvider ( `Provider ${ provider . name } disabled` , { provider : provider . name } ) ;
78- }
79- } }
80- />
108+ updateProviderSettings ( provider . name , { ...provider . settings , baseUrl : newBaseUrl } ) ;
109+ logStore . logProvider ( `Base URL updated for ${ provider . name } ` , {
110+ provider : provider . name ,
111+ baseUrl : newBaseUrl ,
112+ } ) ;
113+ } }
114+ placeholder = { `Enter ${ provider . name } base URL` }
115+ className = "w-full bg-white dark:bg-bolt-elements-background-depth-4 relative px-2 py-1.5 rounded-md focus:outline-none placeholder-bolt-elements-textTertiary text-bolt-elements-textPrimary dark:text-bolt-elements-textPrimary border border-bolt-elements-borderColor"
116+ />
117+ </ div >
118+ ) }
81119 </ div >
82- { /* Base URL input for configurable providers */ }
83- { URL_CONFIGURABLE_PROVIDERS . includes ( provider . name ) && provider . settings . enabled && (
84- < div className = "mt-2" >
85- < label className = "block text-sm text-bolt-elements-textSecondary mb-1" > Base URL:</ label >
86- < input
87- type = "text"
88- value = { provider . settings . baseUrl || '' }
89- onChange = { ( e ) => {
90- const newBaseUrl = e . target . value ;
91- updateProviderSettings ( provider . name , { ...provider . settings , baseUrl : newBaseUrl } ) ;
92- logStore . logProvider ( `Base URL updated for ${ provider . name } ` , {
93- provider : provider . name ,
94- baseUrl : newBaseUrl ,
95- } ) ;
96- } }
97- placeholder = { `Enter ${ provider . name } base URL` }
98- className = "w-full bg-white dark:bg-bolt-elements-background-depth-4 relative px-2 py-1.5 rounded-md focus:outline-none placeholder-bolt-elements-textTertiary text-bolt-elements-textPrimary dark:text-bolt-elements-textPrimary border border-bolt-elements-borderColor"
99- />
100- </ div >
101- ) }
102- </ div >
103- ) ) }
120+ ) ;
121+ } ) }
104122 </ div >
105123 ) ;
106124}
0 commit comments