mirror of
https://github.com/danswer-ai/danswer.git
synced 2025-05-30 01:30:21 +02:00
allow users to deselect reranking (#2243)
This commit is contained in:
parent
4181124e7a
commit
df31cac1f1
@ -25,7 +25,6 @@ const AdvancedFormPage = forwardRef<FormikProps<any>, AdvancedFormPageProps>(
|
|||||||
<Form>
|
<Form>
|
||||||
<div key="prune_freq">
|
<div key="prune_freq">
|
||||||
<NumberInput
|
<NumberInput
|
||||||
showNeverIfZero
|
|
||||||
description={`
|
description={`
|
||||||
Checks all documents against the source to delete those that no longer exist.
|
Checks all documents against the source to delete those that no longer exist.
|
||||||
Note: This process checks every document, so be cautious when increasing frequency.
|
Note: This process checks every document, so be cautious when increasing frequency.
|
||||||
@ -42,7 +41,6 @@ const AdvancedFormPage = forwardRef<FormikProps<any>, AdvancedFormPageProps>(
|
|||||||
<NumberInput
|
<NumberInput
|
||||||
description="This is how frequently we pull new documents from the source (in minutes). If you input 0, we will never pull new documents for this connector."
|
description="This is how frequently we pull new documents from the source (in minutes). If you input 0, we will never pull new documents for this connector."
|
||||||
value={refreshFreq}
|
value={refreshFreq}
|
||||||
showNeverIfZero
|
|
||||||
label="Refresh Frequency (minutes)"
|
label="Refresh Frequency (minutes)"
|
||||||
name="refreshFreq"
|
name="refreshFreq"
|
||||||
/>
|
/>
|
||||||
|
@ -86,7 +86,6 @@ const DynamicConnectionForm: FC<DynamicConnectionFormProps> = ({
|
|||||||
optional={field.optional}
|
optional={field.optional}
|
||||||
description={field.description}
|
description={field.description}
|
||||||
name={field.name}
|
name={field.name}
|
||||||
showNeverIfZero
|
|
||||||
/>
|
/>
|
||||||
) : field.type === "checkbox" ? (
|
) : field.type === "checkbox" ? (
|
||||||
<AdminBooleanFormField
|
<AdminBooleanFormField
|
||||||
|
@ -37,211 +37,237 @@ const RerankingDetailsForm = forwardRef<
|
|||||||
const [isApiKeyModalOpen, setIsApiKeyModalOpen] = useState(false);
|
const [isApiKeyModalOpen, setIsApiKeyModalOpen] = useState(false);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="p-2 rounded-lg max-w-4xl mx-auto">
|
<Formik
|
||||||
<h2 className="text-2xl font-bold mb-4 text-text-800">
|
innerRef={ref}
|
||||||
Post-processing
|
initialValues={currentRerankingDetails}
|
||||||
</h2>
|
validationSchema={Yup.object().shape({
|
||||||
<div className="text-sm mr-auto mb-6 divide-x-2 flex">
|
rerank_model_name: Yup.string().nullable(),
|
||||||
{originalRerankingDetails.rerank_model_name && (
|
rerank_provider_type: Yup.mixed<RerankerProvider>()
|
||||||
<button
|
.nullable()
|
||||||
onClick={() => setModelTab(null)}
|
.oneOf(Object.values(RerankerProvider))
|
||||||
className={`mx-2 p-2 font-bold ${
|
.optional(),
|
||||||
!modelTab
|
api_key: Yup.string().nullable(),
|
||||||
? "rounded bg-background-900 text-text-100 underline"
|
num_rerank: Yup.number().min(1, "Must be at least 1"),
|
||||||
: " hover:underline bg-background-100"
|
})}
|
||||||
}`}
|
onSubmit={async (_, { setSubmitting }) => {
|
||||||
>
|
setSubmitting(false);
|
||||||
Current
|
}}
|
||||||
</button>
|
enableReinitialize={true}
|
||||||
)}
|
>
|
||||||
<div
|
{({ values, setFieldValue }) => {
|
||||||
className={`${originalRerankingDetails.rerank_model_name && "px-2 ml-2"}`}
|
const resetRerankingValues = () => {
|
||||||
>
|
setRerankingDetails({
|
||||||
<button
|
...values,
|
||||||
onClick={() => setModelTab("cloud")}
|
rerank_provider_type: null!,
|
||||||
className={`mr-2 p-2 font-bold ${
|
rerank_model_name: null,
|
||||||
modelTab == "cloud"
|
});
|
||||||
? "rounded bg-background-900 text-text-100 underline"
|
setFieldValue("rerank_provider_type", null);
|
||||||
: " hover:underline bg-background-100"
|
setFieldValue("rerank_model_name", null);
|
||||||
}`}
|
setFieldValue("rerank_api_key", null);
|
||||||
>
|
};
|
||||||
Cloud-based
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="px-2">
|
return (
|
||||||
<button
|
<div className="p-2 rounded-lg max-w-4xl mx-auto">
|
||||||
onClick={() => setModelTab("open")}
|
<h2 className="text-2xl font-bold mb-4 text-text-800">
|
||||||
className={` mx-2 p-2 font-bold ${
|
Post-processing
|
||||||
modelTab == "open"
|
</h2>
|
||||||
? "rounded bg-background-900 text-text-100 underline"
|
<div className="text-sm mr-auto mb-6 divide-x-2 flex">
|
||||||
: "hover:underline bg-background-100"
|
{originalRerankingDetails.rerank_model_name && (
|
||||||
}`}
|
<button
|
||||||
>
|
onClick={() => setModelTab(null)}
|
||||||
Self-hosted
|
className={`mx-2 p-2 font-bold ${
|
||||||
</button>
|
!modelTab
|
||||||
</div>
|
? "rounded bg-background-900 text-text-100 underline"
|
||||||
</div>
|
: " hover:underline bg-background-100"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
Current
|
||||||
|
</button>
|
||||||
|
)}
|
||||||
|
<div
|
||||||
|
className={`${originalRerankingDetails.rerank_model_name && "px-2 ml-2"}`}
|
||||||
|
>
|
||||||
|
<button
|
||||||
|
onClick={() => setModelTab("cloud")}
|
||||||
|
className={`mr-2 p-2 font-bold ${
|
||||||
|
modelTab == "cloud"
|
||||||
|
? "rounded bg-background-900 text-text-100 underline"
|
||||||
|
: " hover:underline bg-background-100"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
Cloud-based
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
<Formik
|
<div className="px-2">
|
||||||
innerRef={ref}
|
<button
|
||||||
initialValues={currentRerankingDetails}
|
onClick={() => setModelTab("open")}
|
||||||
validationSchema={Yup.object().shape({
|
className={` mx-2 p-2 font-bold ${
|
||||||
rerank_model_name: Yup.string().nullable(),
|
modelTab == "open"
|
||||||
provider_type: Yup.mixed<RerankerProvider>()
|
? "rounded bg-background-900 text-text-100 underline"
|
||||||
.nullable()
|
: "hover:underline bg-background-100"
|
||||||
.oneOf(Object.values(RerankerProvider))
|
}`}
|
||||||
.optional(),
|
>
|
||||||
rerank_api_key: Yup.string().nullable(),
|
Self-hosted
|
||||||
num_rerank: Yup.number().min(1, "Must be at least 1"),
|
</button>
|
||||||
})}
|
</div>
|
||||||
onSubmit={async (_, { setSubmitting }) => {
|
{values.rerank_model_name && (
|
||||||
setSubmitting(false);
|
<div className="px-2">
|
||||||
}}
|
<button
|
||||||
enableReinitialize={true}
|
onClick={() => resetRerankingValues()}
|
||||||
>
|
className="mx-2 p-2 font-bold rounded bg-background-100 text-text-900 hover:underline"
|
||||||
{({ values, setFieldValue }) => (
|
|
||||||
<Form>
|
|
||||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
||||||
{(modelTab
|
|
||||||
? rerankingModels.filter(
|
|
||||||
(model) => model.cloud == (modelTab == "cloud")
|
|
||||||
)
|
|
||||||
: rerankingModels.filter(
|
|
||||||
(modelCard) =>
|
|
||||||
modelCard.modelName ==
|
|
||||||
originalRerankingDetails.rerank_model_name
|
|
||||||
)
|
|
||||||
).map((card) => {
|
|
||||||
const isSelected =
|
|
||||||
values.rerank_provider_type === card.rerank_provider_type &&
|
|
||||||
values.rerank_model_name === card.modelName;
|
|
||||||
return (
|
|
||||||
<div
|
|
||||||
key={`${card.rerank_provider_type}-${card.modelName}`}
|
|
||||||
className={`p-4 border rounded-lg cursor-pointer transition-all duration-200 ${
|
|
||||||
isSelected
|
|
||||||
? "border-blue-500 bg-blue-50 shadow-md"
|
|
||||||
: "border-gray-200 hover:border-blue-300 hover:shadow-sm"
|
|
||||||
}`}
|
|
||||||
onClick={() => {
|
|
||||||
if (card.rerank_provider_type) {
|
|
||||||
setIsApiKeyModalOpen(true);
|
|
||||||
}
|
|
||||||
setRerankingDetails({
|
|
||||||
...values,
|
|
||||||
rerank_provider_type: card.rerank_provider_type!,
|
|
||||||
rerank_model_name: card.modelName,
|
|
||||||
rerank_api_key: null,
|
|
||||||
});
|
|
||||||
setFieldValue(
|
|
||||||
"rerank_provider_type",
|
|
||||||
card.rerank_provider_type
|
|
||||||
);
|
|
||||||
setFieldValue("rerank_model_name", card.modelName);
|
|
||||||
}}
|
|
||||||
>
|
>
|
||||||
<div className="flex items-center justify-between mb-3">
|
Remove Reranking
|
||||||
<div className="flex items-center">
|
</button>
|
||||||
{card.rerank_provider_type ===
|
</div>
|
||||||
RerankerProvider.COHERE ? (
|
)}
|
||||||
<CohereIcon size={24} className="mr-2" />
|
|
||||||
) : (
|
|
||||||
<MixedBreadIcon size={24} className="mr-2" />
|
|
||||||
)}
|
|
||||||
<h3 className="font-bold text-lg">
|
|
||||||
{card.displayName}
|
|
||||||
</h3>
|
|
||||||
</div>
|
|
||||||
{card.link && (
|
|
||||||
<a
|
|
||||||
href={card.link}
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
onClick={(e) => e.stopPropagation()}
|
|
||||||
className="text-blue-500 hover:text-blue-700 transition-colors duration-200"
|
|
||||||
>
|
|
||||||
<FiExternalLink size={18} />
|
|
||||||
</a>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
<p className="text-sm text-gray-600 mb-2">
|
|
||||||
{card.description}
|
|
||||||
</p>
|
|
||||||
<div className="text-xs text-gray-500">
|
|
||||||
{card.cloud ? "Cloud-based" : "Self-hosted"}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
})}
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{isApiKeyModalOpen && (
|
<Form>
|
||||||
<Modal
|
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||||
onOutsideClick={() => {
|
{(modelTab
|
||||||
Object.keys(originalRerankingDetails).forEach((key) => {
|
? rerankingModels.filter(
|
||||||
setFieldValue(
|
(model) => model.cloud == (modelTab == "cloud")
|
||||||
key,
|
)
|
||||||
originalRerankingDetails[key as keyof RerankingDetails]
|
: rerankingModels.filter(
|
||||||
);
|
(modelCard) =>
|
||||||
});
|
modelCard.modelName ==
|
||||||
|
originalRerankingDetails.rerank_model_name
|
||||||
setIsApiKeyModalOpen(false);
|
)
|
||||||
}}
|
).map((card) => {
|
||||||
width="w-[800px]"
|
const isSelected =
|
||||||
title="API Key Configuration"
|
values.rerank_provider_type ===
|
||||||
>
|
card.rerank_provider_type &&
|
||||||
<div className="w-full px-4">
|
values.rerank_model_name === card.modelName;
|
||||||
<TextFormField
|
return (
|
||||||
placeholder={values.rerank_api_key || undefined}
|
<div
|
||||||
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
|
key={`${card.rerank_provider_type}-${card.modelName}`}
|
||||||
const value = e.target.value;
|
className={`p-4 border rounded-lg cursor-pointer transition-all duration-200 ${
|
||||||
setRerankingDetails({
|
isSelected
|
||||||
...values,
|
? "border-blue-500 bg-blue-50 shadow-md"
|
||||||
rerank_api_key: value,
|
: "border-gray-200 hover:border-blue-300 hover:shadow-sm"
|
||||||
});
|
}`}
|
||||||
setFieldValue("rerank_api_key", value);
|
|
||||||
}}
|
|
||||||
type="password"
|
|
||||||
label="Cohere API Key"
|
|
||||||
name="rerank_api_key"
|
|
||||||
/>
|
|
||||||
<div className="mt-4 flex justify-between">
|
|
||||||
<Button
|
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
Object.keys(originalRerankingDetails).forEach(
|
if (card.rerank_provider_type) {
|
||||||
(key) => {
|
setIsApiKeyModalOpen(true);
|
||||||
setFieldValue(
|
}
|
||||||
key,
|
setRerankingDetails({
|
||||||
originalRerankingDetails[
|
...values,
|
||||||
key as keyof RerankingDetails
|
rerank_provider_type: card.rerank_provider_type!,
|
||||||
]
|
rerank_model_name: card.modelName,
|
||||||
);
|
rerank_api_key: null,
|
||||||
}
|
});
|
||||||
|
setFieldValue(
|
||||||
|
"rerank_provider_type",
|
||||||
|
card.rerank_provider_type
|
||||||
);
|
);
|
||||||
|
setFieldValue("rerank_model_name", card.modelName);
|
||||||
setIsApiKeyModalOpen(false);
|
|
||||||
}}
|
}}
|
||||||
color="red"
|
|
||||||
size="xs"
|
|
||||||
>
|
>
|
||||||
Abandon
|
<div className="flex items-center justify-between mb-3">
|
||||||
</Button>
|
<div className="flex items-center">
|
||||||
<Button
|
{card.rerank_provider_type ===
|
||||||
onClick={() => setIsApiKeyModalOpen(false)}
|
RerankerProvider.COHERE ? (
|
||||||
color="blue"
|
<CohereIcon size={24} className="mr-2" />
|
||||||
size="xs"
|
) : (
|
||||||
>
|
<MixedBreadIcon size={24} className="mr-2" />
|
||||||
Update
|
)}
|
||||||
</Button>
|
<h3 className="font-bold text-lg">
|
||||||
|
{card.displayName}
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
{card.link && (
|
||||||
|
<a
|
||||||
|
href={card.link}
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
onClick={(e) => e.stopPropagation()}
|
||||||
|
className="text-blue-500 hover:text-blue-700 transition-colors duration-200"
|
||||||
|
>
|
||||||
|
<FiExternalLink size={18} />
|
||||||
|
</a>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
<p className="text-sm text-gray-600 mb-2">
|
||||||
|
{card.description}
|
||||||
|
</p>
|
||||||
|
<div className="text-xs text-gray-500">
|
||||||
|
{card.cloud ? "Cloud-based" : "Self-hosted"}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{isApiKeyModalOpen && (
|
||||||
|
<Modal
|
||||||
|
onOutsideClick={() => {
|
||||||
|
Object.keys(originalRerankingDetails).forEach((key) => {
|
||||||
|
setFieldValue(
|
||||||
|
key,
|
||||||
|
originalRerankingDetails[
|
||||||
|
key as keyof RerankingDetails
|
||||||
|
]
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
setIsApiKeyModalOpen(false);
|
||||||
|
}}
|
||||||
|
width="w-[800px]"
|
||||||
|
title="API Key Configuration"
|
||||||
|
>
|
||||||
|
<div className="w-full px-4">
|
||||||
|
<TextFormField
|
||||||
|
placeholder={values.rerank_api_key || undefined}
|
||||||
|
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
|
||||||
|
const value = e.target.value;
|
||||||
|
setRerankingDetails({
|
||||||
|
...values,
|
||||||
|
rerank_api_key: value,
|
||||||
|
});
|
||||||
|
setFieldValue("api_key", value);
|
||||||
|
}}
|
||||||
|
type="password"
|
||||||
|
label="Cohere API Key"
|
||||||
|
name="api_key"
|
||||||
|
/>
|
||||||
|
<div className="mt-4 flex justify-between">
|
||||||
|
<Button
|
||||||
|
onClick={() => {
|
||||||
|
Object.keys(originalRerankingDetails).forEach(
|
||||||
|
(key) => {
|
||||||
|
setFieldValue(
|
||||||
|
key,
|
||||||
|
originalRerankingDetails[
|
||||||
|
key as keyof RerankingDetails
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
setIsApiKeyModalOpen(false);
|
||||||
|
}}
|
||||||
|
color="red"
|
||||||
|
size="xs"
|
||||||
|
>
|
||||||
|
Abandon
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
onClick={() => setIsApiKeyModalOpen(false)}
|
||||||
|
color="blue"
|
||||||
|
size="xs"
|
||||||
|
>
|
||||||
|
Update
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</Modal>
|
||||||
</Modal>
|
)}
|
||||||
)}
|
</Form>
|
||||||
</Form>
|
</div>
|
||||||
)}
|
);
|
||||||
</Formik>
|
}}
|
||||||
</div>
|
</Formik>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -173,7 +173,7 @@ export function ProviderCreationModal({
|
|||||||
</a>
|
</a>
|
||||||
</Text>
|
</Text>
|
||||||
|
|
||||||
<div className="flex flex-col gap-y-2">
|
<div className="flex w-full flex-col gap-y-2">
|
||||||
{useFileUpload ? (
|
{useFileUpload ? (
|
||||||
<>
|
<>
|
||||||
<Label>Upload JSON File</Label>
|
<Label>Upload JSON File</Label>
|
||||||
|
@ -415,10 +415,10 @@ export default function EmbeddingForm() {
|
|||||||
<>
|
<>
|
||||||
<Card>
|
<Card>
|
||||||
<AdvancedEmbeddingFormPage
|
<AdvancedEmbeddingFormPage
|
||||||
updateNumRerank={(value: number) =>
|
updateNumRerank={(newNumRerank: number) =>
|
||||||
setRerankingDetails({
|
setRerankingDetails({
|
||||||
...rerankingDetails,
|
...rerankingDetails,
|
||||||
num_rerank: value,
|
num_rerank: newNumRerank,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
numRerank={rerankingDetails.num_rerank}
|
numRerank={rerankingDetails.num_rerank}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user