* reorganize folder structure * move folders from merge * fix import issue * run format * update configs
49 lines
1.7 KiB
TypeScript
49 lines
1.7 KiB
TypeScript
import { useEffect, useState } from "react";
|
|
import type { ModelsResponse } from "../../api/queries/useGetModelsQuery";
|
|
|
|
export function useModelSelection(
|
|
modelsData: ModelsResponse | undefined,
|
|
isEmbedding: boolean,
|
|
) {
|
|
const [languageModel, setLanguageModel] = useState("");
|
|
const [embeddingModel, setEmbeddingModel] = useState("");
|
|
|
|
// Update default selections when models are loaded
|
|
useEffect(() => {
|
|
if (modelsData) {
|
|
const defaultLangModel = isEmbedding
|
|
? undefined
|
|
: modelsData.language_models.find((m) => m.default);
|
|
const defaultEmbedModel = isEmbedding
|
|
? modelsData.embedding_models.find((m) => m.default)
|
|
: undefined;
|
|
|
|
// Set language model: prefer default, fallback to first available
|
|
if (!languageModel && !isEmbedding) {
|
|
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 && isEmbedding) {
|
|
if (defaultEmbedModel) {
|
|
setEmbeddingModel(defaultEmbedModel.value);
|
|
} else if (modelsData.embedding_models.length > 0) {
|
|
setEmbeddingModel(modelsData.embedding_models[0].value);
|
|
}
|
|
}
|
|
}
|
|
}, [modelsData, languageModel, embeddingModel, isEmbedding]);
|
|
|
|
return {
|
|
languageModel,
|
|
embeddingModel,
|
|
setLanguageModel: !isEmbedding ? setLanguageModel : undefined,
|
|
setEmbeddingModel: isEmbedding ? setEmbeddingModel : undefined,
|
|
languageModels: modelsData?.language_models || [],
|
|
embeddingModels: modelsData?.embedding_models || [],
|
|
};
|
|
}
|