11import { useTranslation } from 'react-i18next'
22import PropTypes from 'prop-types'
3- import { apiModeToModelName , modelNameToDesc } from '../../utils/index.mjs'
3+ import { apiModeToModelName , modelNameToApiMode , modelNameToDesc } from '../../utils/index.mjs'
44import { PencilIcon , TrashIcon } from '@primer/octicons-react'
55import { useState } from 'react'
66import {
@@ -31,6 +31,20 @@ export function ApiModes({ config, updateConfig }) {
3131 const [ editingApiMode , setEditingApiMode ] = useState ( defaultApiMode )
3232 const [ editingIndex , setEditingIndex ] = useState ( - 1 )
3333
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+
3448 const editingComponent = (
3549 < div style = { { display : 'flex' , flexDirection : 'column' , '--spacing' : '4px' } } >
3650 < div style = { { display : 'flex' , gap : '12px' } } >
@@ -47,12 +61,13 @@ export function ApiModes({ config, updateConfig }) {
4761 e . preventDefault ( )
4862 if ( editingIndex === - 1 ) {
4963 updateConfig ( {
50- customApiModes : [ ...config . customApiModes , editingApiMode ] ,
64+ activeApiModes : [ ] ,
65+ customApiModes : [ ...apiModes , editingApiMode ] ,
5166 } )
5267 } else {
53- const customApiModes = [ ...config . customApiModes ]
68+ const customApiModes = [ ...apiModes ]
5469 customApiModes [ editingIndex ] = editingApiMode
55- updateConfig ( { customApiModes } )
70+ updateConfig ( { activeApiModes : [ ] , customApiModes } )
5671 }
5772 setEditing ( false )
5873 } }
@@ -128,7 +143,7 @@ export function ApiModes({ config, updateConfig }) {
128143
129144 return (
130145 < >
131- { config . customApiModes . map (
146+ { apiModes . map (
132147 ( apiMode , index ) =>
133148 apiMode . groupName &&
134149 apiMode . itemName &&
@@ -140,9 +155,9 @@ export function ApiModes({ config, updateConfig }) {
140155 type = "checkbox"
141156 checked = { apiMode . active }
142157 onChange = { ( e ) => {
143- const customApiModes = [ ...config . customApiModes ]
158+ const customApiModes = [ ...apiModes ]
144159 customApiModes [ index ] = { ...apiMode , active : e . target . checked }
145- updateConfig ( { customApiModes } )
160+ updateConfig ( { activeApiModes : [ ] , customApiModes } )
146161 } }
147162 />
148163 { modelNameToDesc ( apiModeToModelName ( apiMode ) , t ) }
@@ -163,9 +178,9 @@ export function ApiModes({ config, updateConfig }) {
163178 style = { { cursor : 'pointer' } }
164179 onClick = { ( e ) => {
165180 e . preventDefault ( )
166- const customApiModes = [ ...config . customApiModes ]
181+ const customApiModes = [ ...apiModes ]
167182 customApiModes . splice ( index , 1 )
168- updateConfig ( { customApiModes } )
183+ updateConfig ( { activeApiModes : [ ] , customApiModes } )
169184 } }
170185 >
171186 < TrashIcon />
0 commit comments