(null);
@@ -73,6 +72,39 @@ const HomePage = () => {
const navigate = useNavigate();
const { t, lang } = useLang();
+ useEffect(() => {
+ let cancelled = false;
+
+ const loadModels = async () => {
+ const [config, modelsResult] = await Promise.all([
+ getLlmConfig().catch(() => null),
+ getLlmModels().catch(() => null),
+ ]);
+ if (cancelled) return;
+
+ const configuredModel = config?.model?.trim() ?? '';
+ const providerModels = modelsResult?.status === 0 && modelsResult.data
+ ? modelsResult.data.map((item) => item.id || item.name || '').filter(Boolean)
+ : [];
+ const values = Array.from(new Set([
+ ...(configuredModel ? [configuredModel] : []),
+ ...providerModels,
+ ]));
+
+ setModelOptions(values.map((value, index) => ({
+ value,
+ recommended: configuredModel ? value === configuredModel : index === 0,
+ })));
+ setSelectedModel((current) => (current && values.includes(current) ? current : values[0] || ''));
+ };
+
+ void loadModels();
+
+ return () => {
+ cancelled = true;
+ };
+ }, []);
+
/* ─── Mode switch handler ─── */
const handleModeSwitch = useCallback((key: string, btn: HTMLButtonElement) => {
setActiveMode(key);
@@ -124,7 +156,7 @@ const HomePage = () => {
const handlePromptSubmit = () => {
const prompt = inputValue.trim();
- navigate('/ai', { state: prompt ? { prompt, model: selectedModel } : null });
+ navigate('/ai', { state: prompt ? { prompt, ...(selectedModel ? { model: selectedModel } : {}) } : null });
};
return (
@@ -292,8 +324,11 @@ const HomePage = () => {