({ config, imageGenConfig, onSave, onClose })
| 1230 | onSave: (_config: LLMConfig, _igConfig: ImageGenConfig | null) => void; |
| 1231 | onClose: () => void; |
| 1232 | }> = ({ config, imageGenConfig, onSave, onClose }) => { |
| 1233 | // LLM settings |
| 1234 | const [provider, setProvider] = useState<LLMProvider>(config?.provider || 'minimax'); |
| 1235 | const [apiKey, setApiKey] = useState(config?.apiKey || ''); |
| 1236 | const [baseUrl, setBaseUrl] = useState( |
| 1237 | config?.baseUrl || getDefaultProviderConfig('minimax').baseUrl, |
| 1238 | ); |
| 1239 | const [model, setModel] = useState(config?.model || getDefaultProviderConfig('minimax').model); |
| 1240 | const [customHeaders, setCustomHeaders] = useState(config?.customHeaders || ''); |
| 1241 | const [manualModelMode, setManualModelMode] = useState(false); |
| 1242 | |
| 1243 | const isPresetModel = PROVIDER_MODELS[provider]?.includes(model) ?? false; |
| 1244 | const showDropdown = !manualModelMode && isPresetModel; |
| 1245 | |
| 1246 | // Image gen settings |
| 1247 | const [igProvider, setIgProvider] = useState<ImageGenProvider>( |
| 1248 | imageGenConfig?.provider || 'gemini', |
| 1249 | ); |
| 1250 | const [igApiKey, setIgApiKey] = useState(imageGenConfig?.apiKey || ''); |
| 1251 | const [igBaseUrl, setIgBaseUrl] = useState( |
| 1252 | imageGenConfig?.baseUrl || getDefaultImageGenConfig('gemini').baseUrl, |
| 1253 | ); |
| 1254 | const [igModel, setIgModel] = useState( |
| 1255 | imageGenConfig?.model || getDefaultImageGenConfig('gemini').model, |
| 1256 | ); |
| 1257 | const [igCustomHeaders, setIgCustomHeaders] = useState(imageGenConfig?.customHeaders || ''); |
| 1258 | |
| 1259 | const handleProviderChange = (p: LLMProvider) => { |
| 1260 | setProvider(p); |
| 1261 | const defaults = getDefaultProviderConfig(p); |
| 1262 | setBaseUrl(defaults.baseUrl); |
| 1263 | setModel(defaults.model); |
| 1264 | setManualModelMode(false); |
| 1265 | }; |
| 1266 | |
| 1267 | const handleModelChange = (newModel: string) => { |
| 1268 | setModel(newModel); |
| 1269 | setManualModelMode(false); |
| 1270 | }; |
| 1271 | |
| 1272 | const handleIgProviderChange = (p: ImageGenProvider) => { |
| 1273 | setIgProvider(p); |
| 1274 | const defaults = getDefaultImageGenConfig(p); |
| 1275 | setIgBaseUrl(defaults.baseUrl); |
| 1276 | setIgModel(defaults.model); |
| 1277 | }; |
| 1278 | |
| 1279 | return ( |
| 1280 | <div className={styles.overlay} data-testid="settings-overlay"> |
| 1281 | <div className={styles.settingsModal} data-testid="settings-modal"> |
| 1282 | <div className={styles.settingsTitle}>LLM Settings</div> |
| 1283 | |
| 1284 | <div className={styles.field}> |
| 1285 | <label className={styles.label}>Provider</label> |
| 1286 | <select |
| 1287 | className={styles.select} |
| 1288 | value={provider} |
| 1289 | onChange={(e) => handleProviderChange(e.target.value as LLMProvider)} |
nothing calls this directly
no test coverage detected