Skip to content

Commit 3aaef1e

Browse files
committed
Allow partial config for eval-server
1 parent e8b37a3 commit 3aaef1e

File tree

2 files changed

+74
-22
lines changed

2 files changed

+74
-22
lines changed

front_end/panels/ai_chat/core/LLMConfigurationManager.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,44 @@ export class LLMConfigurationManager {
219219
this.notifyListeners();
220220
}
221221

222+
/**
223+
* Apply partial configuration updates (merges with existing configuration)
224+
*/
225+
applyPartialConfiguration(partial: Partial<LLMConfig>): void {
226+
const current = this.loadConfiguration();
227+
228+
// Merge configurations, preserving existing values where partial doesn't provide them
229+
const merged: LLMConfig = {
230+
provider: partial.provider ?? current.provider,
231+
mainModel: partial.mainModel ?? current.mainModel,
232+
miniModel: partial.miniModel ?? current.miniModel,
233+
nanoModel: partial.nanoModel ?? current.nanoModel,
234+
apiKey: partial.apiKey ?? current.apiKey,
235+
endpoint: partial.endpoint ?? current.endpoint,
236+
};
237+
238+
logger.info('Applying partial configuration update', {
239+
current: {
240+
provider: current.provider,
241+
mainModel: current.mainModel,
242+
hasApiKey: !!current.apiKey
243+
},
244+
partial: {
245+
provider: partial.provider,
246+
mainModel: partial.mainModel,
247+
hasApiKey: !!partial.apiKey
248+
},
249+
merged: {
250+
provider: merged.provider,
251+
mainModel: merged.mainModel,
252+
hasApiKey: !!merged.apiKey
253+
}
254+
});
255+
256+
// Save the merged configuration
257+
this.saveConfiguration(merged);
258+
}
259+
222260
/**
223261
* Load configuration from localStorage
224262
*/

front_end/panels/ai_chat/evaluation/remote/EvaluationAgent.ts

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import { BUILD_CONFIG } from '../../core/BuildConfig.js';
77
import { WebSocketRPCClient } from '../../common/WebSocketRPCClient.js';
8-
import { LLMConfigurationManager } from '../../core/LLMConfigurationManager.js';
8+
import { LLMConfigurationManager, type LLMConfig } from '../../core/LLMConfigurationManager.js';
99
import { getEvaluationConfig, getEvaluationClientId } from '../../common/EvaluationConfig.js';
1010
import { ToolRegistry, ConfigurableAgentTool } from '../../agent_framework/ConfigurableAgentTool.js';
1111
import { AgentService } from '../../core/AgentService.js';
@@ -1056,24 +1056,35 @@ export class EvaluationAgent {
10561056
// Get configuration manager
10571057
const configManager = LLMConfigurationManager.getInstance();
10581058

1059-
// Load existing configuration for partial updates
1059+
// Store current config for potential rollback
10601060
const currentConfig = configManager.loadConfiguration();
10611061

1062-
// Merge configurations based on partial flag
1063-
const mergedConfig = {
1064-
provider: params.partial ? (params.provider ?? currentConfig.provider) : params.provider,
1065-
apiKey: params.partial ? (params.apiKey ?? currentConfig.apiKey) : params.apiKey,
1066-
endpoint: params.partial ? (params.endpoint ?? currentConfig.endpoint) : params.endpoint,
1067-
mainModel: params.partial ? (params.models?.main ?? currentConfig.mainModel) : params.models.main,
1068-
miniModel: params.partial ? (params.models?.mini ?? currentConfig.miniModel) : params.models?.mini,
1069-
nanoModel: params.partial ? (params.models?.nano ?? currentConfig.nanoModel) : params.models?.nano
1070-
};
1071-
1072-
// Validate the merged configuration
1073-
const validation = configManager.validateConfiguration();
1062+
// Handle configuration update based on partial flag
1063+
if (params.partial) {
1064+
// Use the new partial configuration method
1065+
const partialConfig: Partial<LLMConfig> = {};
1066+
if (params.provider !== undefined) partialConfig.provider = params.provider;
1067+
if (params.apiKey !== undefined) partialConfig.apiKey = params.apiKey;
1068+
if (params.endpoint !== undefined) partialConfig.endpoint = params.endpoint;
1069+
if (params.models?.main !== undefined) partialConfig.mainModel = params.models.main;
1070+
if (params.models?.mini !== undefined) partialConfig.miniModel = params.models.mini;
1071+
if (params.models?.nano !== undefined) partialConfig.nanoModel = params.models.nano;
1072+
1073+
configManager.applyPartialConfiguration(partialConfig);
1074+
} else {
1075+
// Full configuration update
1076+
const fullConfig: LLMConfig = {
1077+
provider: params.provider,
1078+
apiKey: params.apiKey,
1079+
endpoint: params.endpoint,
1080+
mainModel: params.models.main,
1081+
miniModel: params.models?.mini,
1082+
nanoModel: params.models?.nano
1083+
};
1084+
configManager.saveConfiguration(fullConfig);
1085+
}
10741086

1075-
// Check validation after setting the merged config temporarily
1076-
configManager.saveConfiguration(mergedConfig);
1087+
// Validate the saved configuration
10771088
const postSaveValidation = configManager.validateConfiguration();
10781089

10791090
if (!postSaveValidation.isValid) {
@@ -1103,13 +1114,16 @@ export class EvaluationAgent {
11031114
const agentService = AgentService.getInstance();
11041115
await agentService.refreshCredentials();
11051116

1117+
// Get the applied configuration
1118+
const appliedConfiguration = configManager.loadConfiguration();
1119+
11061120
// Prepare response with applied configuration
11071121
const appliedConfig = {
1108-
provider: mergedConfig.provider,
1122+
provider: appliedConfiguration.provider,
11091123
models: {
1110-
main: mergedConfig.mainModel,
1111-
mini: mergedConfig.miniModel || '',
1112-
nano: mergedConfig.nanoModel || ''
1124+
main: appliedConfiguration.mainModel,
1125+
mini: appliedConfiguration.miniModel || '',
1126+
nano: appliedConfiguration.nanoModel || ''
11131127
}
11141128
};
11151129

@@ -1121,8 +1135,8 @@ export class EvaluationAgent {
11211135
}
11221136

11231137
logger.info('LLM configuration applied successfully', {
1124-
provider: mergedConfig.provider,
1125-
mainModel: mergedConfig.mainModel
1138+
provider: appliedConfiguration.provider,
1139+
mainModel: appliedConfiguration.mainModel
11261140
});
11271141

11281142
} catch (error) {

0 commit comments

Comments
 (0)