enable model picker for connector screen in UI
This commit is contained in:
parent
3998014561
commit
cf0136623e
1 changed files with 66 additions and 17 deletions
|
|
@ -21,8 +21,16 @@ import {
|
||||||
TooltipTrigger,
|
TooltipTrigger,
|
||||||
} from "@/components/ui/tooltip";
|
} from "@/components/ui/tooltip";
|
||||||
import { ModelSelectItems } from "@/app/settings/helpers/model-select-item";
|
import { ModelSelectItems } from "@/app/settings/helpers/model-select-item";
|
||||||
import { getFallbackModels } from "@/app/settings/helpers/model-helpers";
|
import { getFallbackModels, type ModelProvider } from "@/app/settings/helpers/model-helpers";
|
||||||
import { NumberInput } from "@/components/ui/inputs/number-input";
|
import { NumberInput } from "@/components/ui/inputs/number-input";
|
||||||
|
import { useGetSettingsQuery } from "@/app/api/queries/useGetSettingsQuery";
|
||||||
|
import {
|
||||||
|
useGetOpenAIModelsQuery,
|
||||||
|
useGetOllamaModelsQuery,
|
||||||
|
useGetIBMModelsQuery,
|
||||||
|
} from "@/app/api/queries/useGetModelsQuery";
|
||||||
|
import { useAuth } from "@/contexts/auth-context";
|
||||||
|
import { useEffect } from "react";
|
||||||
|
|
||||||
interface IngestSettingsProps {
|
interface IngestSettingsProps {
|
||||||
isOpen: boolean;
|
isOpen: boolean;
|
||||||
|
|
@ -37,18 +45,65 @@ export const IngestSettings = ({
|
||||||
settings,
|
settings,
|
||||||
onSettingsChange,
|
onSettingsChange,
|
||||||
}: IngestSettingsProps) => {
|
}: IngestSettingsProps) => {
|
||||||
// Default settings
|
const { isAuthenticated, isNoAuthMode } = useAuth();
|
||||||
|
|
||||||
|
// Fetch settings from API to get current embedding model
|
||||||
|
const { data: apiSettings = {} } = useGetSettingsQuery({
|
||||||
|
enabled: isAuthenticated || isNoAuthMode,
|
||||||
|
});
|
||||||
|
|
||||||
|
// Get the current provider from API settings
|
||||||
|
const currentProvider = (apiSettings.provider?.model_provider ||
|
||||||
|
"openai") as ModelProvider;
|
||||||
|
|
||||||
|
// Fetch available models based on provider
|
||||||
|
const { data: openaiModelsData } = useGetOpenAIModelsQuery(undefined, {
|
||||||
|
enabled: (isAuthenticated || isNoAuthMode) && currentProvider === "openai",
|
||||||
|
});
|
||||||
|
|
||||||
|
const { data: ollamaModelsData } = useGetOllamaModelsQuery(undefined, {
|
||||||
|
enabled: (isAuthenticated || isNoAuthMode) && currentProvider === "ollama",
|
||||||
|
});
|
||||||
|
|
||||||
|
const { data: ibmModelsData } = useGetIBMModelsQuery(undefined, {
|
||||||
|
enabled: (isAuthenticated || isNoAuthMode) && currentProvider === "watsonx",
|
||||||
|
});
|
||||||
|
|
||||||
|
// Select the appropriate models data based on provider
|
||||||
|
const modelsData =
|
||||||
|
currentProvider === "openai"
|
||||||
|
? openaiModelsData
|
||||||
|
: currentProvider === "ollama"
|
||||||
|
? ollamaModelsData
|
||||||
|
: currentProvider === "watsonx"
|
||||||
|
? ibmModelsData
|
||||||
|
: openaiModelsData;
|
||||||
|
|
||||||
|
// Get embedding model from API settings
|
||||||
|
const apiEmbeddingModel =
|
||||||
|
apiSettings.knowledge?.embedding_model ||
|
||||||
|
modelsData?.embedding_models?.find((m) => m.default)?.value ||
|
||||||
|
"text-embedding-3-small";
|
||||||
|
|
||||||
|
// Default settings - use API embedding model
|
||||||
const defaultSettings: IngestSettingsType = {
|
const defaultSettings: IngestSettingsType = {
|
||||||
chunkSize: 1000,
|
chunkSize: 1000,
|
||||||
chunkOverlap: 200,
|
chunkOverlap: 200,
|
||||||
ocr: false,
|
ocr: false,
|
||||||
pictureDescriptions: false,
|
pictureDescriptions: false,
|
||||||
embeddingModel: "text-embedding-3-small",
|
embeddingModel: apiEmbeddingModel,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Use provided settings or defaults
|
// Use provided settings or defaults
|
||||||
const currentSettings = settings || defaultSettings;
|
const currentSettings = settings || defaultSettings;
|
||||||
|
|
||||||
|
// Update settings when API embedding model changes
|
||||||
|
useEffect(() => {
|
||||||
|
if (apiEmbeddingModel && (!settings || settings.embeddingModel !== apiEmbeddingModel)) {
|
||||||
|
onSettingsChange?.({ ...currentSettings, embeddingModel: apiEmbeddingModel });
|
||||||
|
}
|
||||||
|
}, [apiEmbeddingModel]);
|
||||||
|
|
||||||
const handleSettingsChange = (newSettings: Partial<IngestSettingsType>) => {
|
const handleSettingsChange = (newSettings: Partial<IngestSettingsType>) => {
|
||||||
const updatedSettings = { ...currentSettings, ...newSettings };
|
const updatedSettings = { ...currentSettings, ...newSettings };
|
||||||
onSettingsChange?.(updatedSettings);
|
onSettingsChange?.(updatedSettings);
|
||||||
|
|
@ -73,38 +128,32 @@ export const IngestSettings = ({
|
||||||
|
|
||||||
<CollapsibleContent className="data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:slide-up-2 data-[state=open]:slide-down-2">
|
<CollapsibleContent className="data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:slide-up-2 data-[state=open]:slide-down-2">
|
||||||
<div className="mt-6">
|
<div className="mt-6">
|
||||||
{/* Embedding model selection - currently disabled */}
|
{/* Embedding model selection */}
|
||||||
<LabelWrapper
|
<LabelWrapper
|
||||||
helperText="Model used for knowledge ingest and retrieval"
|
helperText="Model used for knowledge ingest and retrieval"
|
||||||
id="embedding-model-select"
|
id="embedding-model-select"
|
||||||
label="Embedding model"
|
label="Embedding model"
|
||||||
>
|
>
|
||||||
<Select
|
<Select
|
||||||
// Disabled until API supports multiple embedding models
|
disabled={false}
|
||||||
disabled={true}
|
|
||||||
value={currentSettings.embeddingModel}
|
value={currentSettings.embeddingModel}
|
||||||
onValueChange={() => {}}
|
onValueChange={(value) => handleSettingsChange({ embeddingModel: value })}
|
||||||
>
|
>
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<SelectTrigger disabled id="embedding-model-select">
|
<SelectTrigger id="embedding-model-select">
|
||||||
<SelectValue placeholder="Select an embedding model" />
|
<SelectValue placeholder="Select an embedding model" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
</TooltipTrigger>
|
</TooltipTrigger>
|
||||||
<TooltipContent>
|
<TooltipContent>
|
||||||
Locked to keep embeddings consistent
|
Choose the embedding model for this upload
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
<ModelSelectItems
|
<ModelSelectItems
|
||||||
models={[
|
models={modelsData?.embedding_models}
|
||||||
{
|
fallbackModels={getFallbackModels(currentProvider).embedding}
|
||||||
value: "text-embedding-3-small",
|
provider={currentProvider}
|
||||||
label: "text-embedding-3-small",
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
fallbackModels={getFallbackModels("openai").embedding}
|
|
||||||
provider={"openai"}
|
|
||||||
/>
|
/>
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue