openrag/frontend/src/app/onboarding/hooks/useModelSelection.ts
2025-09-20 12:09:27 -03:00

46 lines
1.5 KiB
TypeScript

import { useState, useEffect } from "react";
import type { ModelsResponse } from "../../api/queries/useGetModelsQuery";
export function useModelSelection(modelsData: ModelsResponse | undefined) {
const [languageModel, setLanguageModel] = useState("");
const [embeddingModel, setEmbeddingModel] = useState("");
// Update default selections when models are loaded
useEffect(() => {
if (modelsData) {
const defaultLangModel = modelsData.language_models.find(
(m) => m.default,
);
const defaultEmbedModel = modelsData.embedding_models.find(
(m) => m.default,
);
// Set language model: prefer default, fallback to first available
if (!languageModel) {
if (defaultLangModel) {
setLanguageModel(defaultLangModel.value);
} else if (modelsData.language_models.length > 0) {
setLanguageModel(modelsData.language_models[0].value);
}
}
// Set embedding model: prefer default, fallback to first available
if (!embeddingModel) {
if (defaultEmbedModel) {
setEmbeddingModel(defaultEmbedModel.value);
} else if (modelsData.embedding_models.length > 0) {
setEmbeddingModel(modelsData.embedding_models[0].value);
}
}
}
}, [modelsData, languageModel, embeddingModel]);
return {
languageModel,
embeddingModel,
setLanguageModel,
setEmbeddingModel,
languageModels: modelsData?.language_models || [],
embeddingModels: modelsData?.embedding_models || [],
};
}