fix: fetch agent config only on page load and refresh
This commit is contained in:
1 parent
a72994d479
commit
3140d205cc
2 files changed
+23
-14
No files matched your search
@@ -573,7 +573,7 @@ struct AgentConfigActionResult {
|
||||
conflict_files: Vec<String>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Serialize)]
|
||||
#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Serialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
struct AgentModelOption {
|
||||
name: String,
|
||||
@@ -1594,6 +1594,7 @@ async fn apply_agent_config(
|
||||
gui_config_state: tauri::State<'_, GuiConfigState>,
|
||||
client: String,
|
||||
model: String,
|
||||
models: Vec<AgentModelOption>,
|
||||
oauth_configuration: bool,
|
||||
) -> Result<AgentConfigActionResult, String> {
|
||||
let client = AgentClient::parse(&client)?;
|
||||
@@ -1604,10 +1605,9 @@ async fn apply_agent_config(
|
||||
let config = gui_config_state.snapshot()?;
|
||||
let api_key = effective_agent_api_key(&config);
|
||||
validate_agent_can_enable(client, &home, config.port, api_key)?;
|
||||
let available_models = fetch_agent_models(config.port, api_key).await?;
|
||||
let model = resolve_available_agent_model(&available_models, &validate_agent_model(&model)?)?;
|
||||
let model = resolve_available_agent_model(&models, &validate_agent_model(&model)?)?;
|
||||
let codex_models = if client == AgentClient::Codex {
|
||||
Some(fetch_codex_model_catalog_specs(&config, &available_models).await)
|
||||
Some(fetch_codex_model_catalog_specs(&config, &models).await)
|
||||
} else {
|
||||
None
|
||||
};
|
||||
@@ -1621,7 +1621,7 @@ async fn apply_agent_config(
|
||||
api_key,
|
||||
&model,
|
||||
AgentConfigurationOptions {
|
||||
models: &available_models,
|
||||
models: &models,
|
||||
codex_models: codex_models.as_deref(),
|
||||
oauth_configuration,
|
||||
},
|
||||
@@ -1634,6 +1634,7 @@ async fn reset_agent_config_to_default(
|
||||
gui_config_state: tauri::State<'_, GuiConfigState>,
|
||||
client: String,
|
||||
model: String,
|
||||
models: Vec<AgentModelOption>,
|
||||
oauth_configuration: bool,
|
||||
) -> Result<AgentConfigActionResult, String> {
|
||||
let client = AgentClient::parse(&client)?;
|
||||
@@ -1644,10 +1645,9 @@ async fn reset_agent_config_to_default(
|
||||
let config = gui_config_state.snapshot()?;
|
||||
let api_key = effective_agent_api_key(&config);
|
||||
validate_agent_can_enable(client, &home, config.port, api_key)?;
|
||||
let available_models = fetch_agent_models(config.port, api_key).await?;
|
||||
let model = resolve_available_agent_model(&available_models, &validate_agent_model(&model)?)?;
|
||||
let model = resolve_available_agent_model(&models, &validate_agent_model(&model)?)?;
|
||||
let codex_models = if client == AgentClient::Codex {
|
||||
Some(fetch_codex_model_catalog_specs(&config, &available_models).await)
|
||||
Some(fetch_codex_model_catalog_specs(&config, &models).await)
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
@@ -511,6 +511,7 @@ export function AgentsPage() {
|
||||
const [closeAppNotice, setCloseAppNotice] = useState('');
|
||||
const [closeAppConfirmOpen, setCloseAppConfirmOpen] = useState(false);
|
||||
const [oauthConfiguration, setOauthConfiguration] = useState(false);
|
||||
const autoLoadedModelClientRef = useRef<AgentClientId | null>(null);
|
||||
|
||||
const loadStatuses = useCallback(async (forceRefresh = false) => {
|
||||
const command = forceRefresh
|
||||
@@ -543,21 +544,27 @@ export function AgentsPage() {
|
||||
setLoading(true);
|
||||
setDetectionError('');
|
||||
try {
|
||||
await Promise.all([loadStatuses(true), loadModels()]);
|
||||
await loadStatuses(true);
|
||||
} catch (requestError) {
|
||||
setDetectionError(String(requestError));
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
}, [loadModels, loadStatuses]);
|
||||
}, [loadStatuses]);
|
||||
|
||||
useEffect(() => {
|
||||
setLoading(true);
|
||||
setDetectionError('');
|
||||
void Promise.all([loadStatuses(), loadModels()])
|
||||
void loadStatuses()
|
||||
.catch((requestError) => setDetectionError(String(requestError)))
|
||||
.finally(() => setLoading(false));
|
||||
}, [loadModels, loadStatuses]);
|
||||
}, [loadStatuses]);
|
||||
|
||||
useEffect(() => {
|
||||
if (autoLoadedModelClientRef.current === selected) return;
|
||||
autoLoadedModelClientRef.current = selected;
|
||||
void loadModels();
|
||||
}, [loadModels, selected]);
|
||||
|
||||
useEffect(() => {
|
||||
let disposed = false;
|
||||
@@ -565,7 +572,7 @@ export function AgentsPage() {
|
||||
void listen('config-files-changed', () => {
|
||||
if (disposed) return;
|
||||
setDetectionError('');
|
||||
void Promise.all([loadStatuses(true), loadModels()]).catch((requestError) => {
|
||||
void loadStatuses(true).catch((requestError) => {
|
||||
if (!disposed) setDetectionError(String(requestError));
|
||||
});
|
||||
}).then((unlisten) => {
|
||||
@@ -576,7 +583,7 @@ export function AgentsPage() {
|
||||
disposed = true;
|
||||
stop?.();
|
||||
};
|
||||
}, [loadModels, loadStatuses]);
|
||||
}, [loadStatuses]);
|
||||
|
||||
useEffect(() => {
|
||||
writeSelectedAgentClient(selected);
|
||||
@@ -724,6 +731,7 @@ export function AgentsPage() {
|
||||
await invoke<AgentConfigActionResult>('apply_agent_config', {
|
||||
client: selected,
|
||||
model,
|
||||
models,
|
||||
oauthConfiguration,
|
||||
});
|
||||
await reloadStatusesAfterAction();
|
||||
@@ -743,6 +751,7 @@ export function AgentsPage() {
|
||||
await invoke<AgentConfigActionResult>('reset_agent_config_to_default', {
|
||||
client: selected,
|
||||
model,
|
||||
models,
|
||||
oauthConfiguration,
|
||||
});
|
||||
setDefaultConfirmOpen(false);
|
||||
|
||||
Reference in new issue
Block a user