allow users to deselect reranking (#2243)

This commit is contained in:
pablodanswer 2024-08-30 15:40:54 -07:00 committed by GitHub
parent 4181124e7a
commit df31cac1f1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 224 additions and 201 deletions

View File

@ -25,7 +25,6 @@ const AdvancedFormPage = forwardRef<FormikProps<any>, AdvancedFormPageProps>(
<Form>
<div key="prune_freq">
<NumberInput
showNeverIfZero
description={`
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.
@ -42,7 +41,6 @@ const AdvancedFormPage = forwardRef<FormikProps<any>, AdvancedFormPageProps>(
<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."
value={refreshFreq}
showNeverIfZero
label="Refresh Frequency (minutes)"
name="refreshFreq"
/>

View File

@ -86,7 +86,6 @@ const DynamicConnectionForm: FC<DynamicConnectionFormProps> = ({
optional={field.optional}
description={field.description}
name={field.name}
showNeverIfZero
/>
) : field.type === "checkbox" ? (
<AdminBooleanFormField

View File

@ -37,211 +37,237 @@ const RerankingDetailsForm = forwardRef<
const [isApiKeyModalOpen, setIsApiKeyModalOpen] = useState(false);
return (
<div className="p-2 rounded-lg max-w-4xl mx-auto">
<h2 className="text-2xl font-bold mb-4 text-text-800">
Post-processing
</h2>
<div className="text-sm mr-auto mb-6 divide-x-2 flex">
{originalRerankingDetails.rerank_model_name && (
<button
onClick={() => setModelTab(null)}
className={`mx-2 p-2 font-bold ${
!modelTab
? "rounded bg-background-900 text-text-100 underline"
: " 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
innerRef={ref}
initialValues={currentRerankingDetails}
validationSchema={Yup.object().shape({
rerank_model_name: Yup.string().nullable(),
rerank_provider_type: Yup.mixed<RerankerProvider>()
.nullable()
.oneOf(Object.values(RerankerProvider))
.optional(),
api_key: Yup.string().nullable(),
num_rerank: Yup.number().min(1, "Must be at least 1"),
})}
onSubmit={async (_, { setSubmitting }) => {
setSubmitting(false);
}}
enableReinitialize={true}
>
{({ values, setFieldValue }) => {
const resetRerankingValues = () => {
setRerankingDetails({
...values,
rerank_provider_type: null!,
rerank_model_name: null,
});
setFieldValue("rerank_provider_type", null);
setFieldValue("rerank_model_name", null);
setFieldValue("rerank_api_key", null);
};
<div className="px-2">
<button
onClick={() => setModelTab("open")}
className={` mx-2 p-2 font-bold ${
modelTab == "open"
? "rounded bg-background-900 text-text-100 underline"
: "hover:underline bg-background-100"
}`}
>
Self-hosted
</button>
</div>
</div>
return (
<div className="p-2 rounded-lg max-w-4xl mx-auto">
<h2 className="text-2xl font-bold mb-4 text-text-800">
Post-processing
</h2>
<div className="text-sm mr-auto mb-6 divide-x-2 flex">
{originalRerankingDetails.rerank_model_name && (
<button
onClick={() => setModelTab(null)}
className={`mx-2 p-2 font-bold ${
!modelTab
? "rounded bg-background-900 text-text-100 underline"
: " 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
innerRef={ref}
initialValues={currentRerankingDetails}
validationSchema={Yup.object().shape({
rerank_model_name: Yup.string().nullable(),
provider_type: Yup.mixed<RerankerProvider>()
.nullable()
.oneOf(Object.values(RerankerProvider))
.optional(),
rerank_api_key: Yup.string().nullable(),
num_rerank: Yup.number().min(1, "Must be at least 1"),
})}
onSubmit={async (_, { setSubmitting }) => {
setSubmitting(false);
}}
enableReinitialize={true}
>
{({ 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="px-2">
<button
onClick={() => setModelTab("open")}
className={` mx-2 p-2 font-bold ${
modelTab == "open"
? "rounded bg-background-900 text-text-100 underline"
: "hover:underline bg-background-100"
}`}
>
Self-hosted
</button>
</div>
{values.rerank_model_name && (
<div className="px-2">
<button
onClick={() => resetRerankingValues()}
className="mx-2 p-2 font-bold rounded bg-background-100 text-text-900 hover:underline"
>
<div className="flex items-center justify-between mb-3">
<div className="flex items-center">
{card.rerank_provider_type ===
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>
);
})}
Remove Reranking
</button>
</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("rerank_api_key", value);
}}
type="password"
label="Cohere API Key"
name="rerank_api_key"
/>
<div className="mt-4 flex justify-between">
<Button
<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={() => {
Object.keys(originalRerankingDetails).forEach(
(key) => {
setFieldValue(
key,
originalRerankingDetails[
key as keyof RerankingDetails
]
);
}
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
);
setIsApiKeyModalOpen(false);
setFieldValue("rerank_model_name", card.modelName);
}}
color="red"
size="xs"
>
Abandon
</Button>
<Button
onClick={() => setIsApiKeyModalOpen(false)}
color="blue"
size="xs"
>
Update
</Button>
<div className="flex items-center justify-between mb-3">
<div className="flex items-center">
{card.rerank_provider_type ===
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>
{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>
</Modal>
)}
</Form>
)}
</Formik>
</div>
</Modal>
)}
</Form>
</div>
);
}}
</Formik>
);
}
);

View File

@ -173,7 +173,7 @@ export function ProviderCreationModal({
</a>
</Text>
<div className="flex flex-col gap-y-2">
<div className="flex w-full flex-col gap-y-2">
{useFileUpload ? (
<>
<Label>Upload JSON File</Label>

View File

@ -415,10 +415,10 @@ export default function EmbeddingForm() {
<>
<Card>
<AdvancedEmbeddingFormPage
updateNumRerank={(value: number) =>
updateNumRerank={(newNumRerank: number) =>
setRerankingDetails({
...rerankingDetails,
num_rerank: value,
num_rerank: newNumRerank,
})
}
numRerank={rerankingDetails.num_rerank}