1
1
import { useTranslation } from 'react-i18next'
2
2
import PropTypes from 'prop-types'
3
- import { apiModeToModelName , modelNameToDesc } from '../../utils/index.mjs'
3
+ import { apiModeToModelName , modelNameToApiMode , modelNameToDesc } from '../../utils/index.mjs'
4
4
import { PencilIcon , TrashIcon } from '@primer/octicons-react'
5
5
import { useState } from 'react'
6
6
import {
@@ -31,6 +31,20 @@ export function ApiModes({ config, updateConfig }) {
31
31
const [ editingApiMode , setEditingApiMode ] = useState ( defaultApiMode )
32
32
const [ editingIndex , setEditingIndex ] = useState ( - 1 )
33
33
34
+ const stringApiModes = config . customApiModes . map ( apiModeToModelName )
35
+ const originalApiModes = config . activeApiModes
36
+ . map ( ( modelName ) => {
37
+ // 'customModel' is always active
38
+ if ( stringApiModes . includes ( modelName ) || modelName === 'customModel' ) {
39
+ return
40
+ }
41
+ if ( modelName === 'azureOpenAi' ) modelName += '-' + config . azureDeploymentName
42
+ if ( modelName === 'ollama' ) modelName += '-' + config . ollamaModelName
43
+ return modelNameToApiMode ( modelName )
44
+ } )
45
+ . filter ( ( apiMode ) => apiMode )
46
+ const apiModes = [ ...originalApiModes , ...config . customApiModes ]
47
+
34
48
const editingComponent = (
35
49
< div style = { { display : 'flex' , flexDirection : 'column' , '--spacing' : '4px' } } >
36
50
< div style = { { display : 'flex' , gap : '12px' } } >
@@ -47,12 +61,13 @@ export function ApiModes({ config, updateConfig }) {
47
61
e . preventDefault ( )
48
62
if ( editingIndex === - 1 ) {
49
63
updateConfig ( {
50
- customApiModes : [ ...config . customApiModes , editingApiMode ] ,
64
+ activeApiModes : [ ] ,
65
+ customApiModes : [ ...apiModes , editingApiMode ] ,
51
66
} )
52
67
} else {
53
- const customApiModes = [ ...config . customApiModes ]
68
+ const customApiModes = [ ...apiModes ]
54
69
customApiModes [ editingIndex ] = editingApiMode
55
- updateConfig ( { customApiModes } )
70
+ updateConfig ( { activeApiModes : [ ] , customApiModes } )
56
71
}
57
72
setEditing ( false )
58
73
} }
@@ -128,7 +143,7 @@ export function ApiModes({ config, updateConfig }) {
128
143
129
144
return (
130
145
< >
131
- { config . customApiModes . map (
146
+ { apiModes . map (
132
147
( apiMode , index ) =>
133
148
apiMode . groupName &&
134
149
apiMode . itemName &&
@@ -140,9 +155,9 @@ export function ApiModes({ config, updateConfig }) {
140
155
type = "checkbox"
141
156
checked = { apiMode . active }
142
157
onChange = { ( e ) => {
143
- const customApiModes = [ ...config . customApiModes ]
158
+ const customApiModes = [ ...apiModes ]
144
159
customApiModes [ index ] = { ...apiMode , active : e . target . checked }
145
- updateConfig ( { customApiModes } )
160
+ updateConfig ( { activeApiModes : [ ] , customApiModes } )
146
161
} }
147
162
/>
148
163
{ modelNameToDesc ( apiModeToModelName ( apiMode ) , t ) }
@@ -163,9 +178,9 @@ export function ApiModes({ config, updateConfig }) {
163
178
style = { { cursor : 'pointer' } }
164
179
onClick = { ( e ) => {
165
180
e . preventDefault ( )
166
- const customApiModes = [ ...config . customApiModes ]
181
+ const customApiModes = [ ...apiModes ]
167
182
customApiModes . splice ( index , 1 )
168
- updateConfig ( { customApiModes } )
183
+ updateConfig ( { activeApiModes : [ ] , customApiModes } )
169
184
} }
170
185
>
171
186
< TrashIcon />
0 commit comments