mirror of
https://github.com/danswer-ai/danswer.git
synced 2025-09-19 03:58:30 +02:00
Ensure regenerate has dropdown too (#2797)
* ensure regenerate has dropdown too * ensure applied to all * nit
This commit is contained in:
@@ -24,6 +24,7 @@ export function RegenerateDropdown({
|
|||||||
side,
|
side,
|
||||||
maxHeight,
|
maxHeight,
|
||||||
alternate,
|
alternate,
|
||||||
|
onDropdownVisibleChange,
|
||||||
}: {
|
}: {
|
||||||
alternate?: string;
|
alternate?: string;
|
||||||
options: StringOrNumberOption[];
|
options: StringOrNumberOption[];
|
||||||
@@ -32,9 +33,15 @@ export function RegenerateDropdown({
|
|||||||
includeDefault?: boolean;
|
includeDefault?: boolean;
|
||||||
side?: "top" | "right" | "bottom" | "left";
|
side?: "top" | "right" | "bottom" | "left";
|
||||||
maxHeight?: string;
|
maxHeight?: string;
|
||||||
|
onDropdownVisibleChange: (isVisible: boolean) => void;
|
||||||
}) {
|
}) {
|
||||||
const [isOpen, setIsOpen] = useState(false);
|
const [isOpen, setIsOpen] = useState(false);
|
||||||
|
|
||||||
|
const toggleDropdownVisible = (isVisible: boolean) => {
|
||||||
|
setIsOpen(isVisible);
|
||||||
|
onDropdownVisibleChange(isVisible);
|
||||||
|
};
|
||||||
|
|
||||||
const Dropdown = (
|
const Dropdown = (
|
||||||
<div
|
<div
|
||||||
className={`
|
className={`
|
||||||
@@ -81,9 +88,9 @@ export function RegenerateDropdown({
|
|||||||
return (
|
return (
|
||||||
<Popover
|
<Popover
|
||||||
open={isOpen}
|
open={isOpen}
|
||||||
onOpenChange={(open) => setIsOpen(open)}
|
onOpenChange={toggleDropdownVisible}
|
||||||
content={
|
content={
|
||||||
<div onClick={() => setIsOpen(!isOpen)}>
|
<div onClick={() => toggleDropdownVisible(!isOpen)}>
|
||||||
{!alternate ? (
|
{!alternate ? (
|
||||||
<Hoverable size={16} icon={StarFeedback as IconType} />
|
<Hoverable size={16} icon={StarFeedback as IconType} />
|
||||||
) : (
|
) : (
|
||||||
@@ -109,11 +116,13 @@ export default function RegenerateOption({
|
|||||||
regenerate,
|
regenerate,
|
||||||
overriddenModel,
|
overriddenModel,
|
||||||
onHoverChange,
|
onHoverChange,
|
||||||
|
onDropdownVisibleChange,
|
||||||
}: {
|
}: {
|
||||||
selectedAssistant: Persona;
|
selectedAssistant: Persona;
|
||||||
regenerate: (modelOverRide: LlmOverride) => Promise<void>;
|
regenerate: (modelOverRide: LlmOverride) => Promise<void>;
|
||||||
overriddenModel?: string;
|
overriddenModel?: string;
|
||||||
onHoverChange: (isHovered: boolean) => void;
|
onHoverChange: (isHovered: boolean) => void;
|
||||||
|
onDropdownVisibleChange: (isVisible: boolean) => void;
|
||||||
}) {
|
}) {
|
||||||
const llmOverrideManager = useLlmOverride();
|
const llmOverrideManager = useLlmOverride();
|
||||||
|
|
||||||
@@ -164,6 +173,7 @@ export default function RegenerateOption({
|
|||||||
onMouseLeave={() => onHoverChange(false)}
|
onMouseLeave={() => onHoverChange(false)}
|
||||||
>
|
>
|
||||||
<RegenerateDropdown
|
<RegenerateDropdown
|
||||||
|
onDropdownVisibleChange={onDropdownVisibleChange}
|
||||||
alternate={overriddenModel}
|
alternate={overriddenModel}
|
||||||
options={llmOptions}
|
options={llmOptions}
|
||||||
selected={currentModelName}
|
selected={currentModelName}
|
||||||
|
@@ -195,6 +195,8 @@ export const AIMessage = ({
|
|||||||
const finalContent = processContent(content as string);
|
const finalContent = processContent(content as string);
|
||||||
|
|
||||||
const [isRegenerateHovered, setIsRegenerateHovered] = useState(false);
|
const [isRegenerateHovered, setIsRegenerateHovered] = useState(false);
|
||||||
|
const [isRegenerateDropdownVisible, setIsRegenerateDropdownVisible] =
|
||||||
|
useState(false);
|
||||||
const { isHovering, trackedElementRef, hoverElementRef } = useMouseTracking();
|
const { isHovering, trackedElementRef, hoverElementRef } = useMouseTracking();
|
||||||
|
|
||||||
const settings = useContext(SettingsContext);
|
const settings = useContext(SettingsContext);
|
||||||
@@ -522,12 +524,22 @@ export const AIMessage = ({
|
|||||||
/>
|
/>
|
||||||
</CustomTooltip>
|
</CustomTooltip>
|
||||||
{regenerate && (
|
{regenerate && (
|
||||||
<RegenerateOption
|
<CustomTooltip
|
||||||
onHoverChange={setIsRegenerateHovered}
|
disabled={isRegenerateDropdownVisible}
|
||||||
selectedAssistant={currentPersona!}
|
showTick
|
||||||
regenerate={regenerate}
|
line
|
||||||
overriddenModel={overriddenModel}
|
content="Regenerate!"
|
||||||
/>
|
>
|
||||||
|
<RegenerateOption
|
||||||
|
onDropdownVisibleChange={
|
||||||
|
setIsRegenerateDropdownVisible
|
||||||
|
}
|
||||||
|
onHoverChange={setIsRegenerateHovered}
|
||||||
|
selectedAssistant={currentPersona!}
|
||||||
|
regenerate={regenerate}
|
||||||
|
overriddenModel={overriddenModel}
|
||||||
|
/>
|
||||||
|
</CustomTooltip>
|
||||||
)}
|
)}
|
||||||
</TooltipGroup>
|
</TooltipGroup>
|
||||||
</div>
|
</div>
|
||||||
@@ -587,12 +599,22 @@ export const AIMessage = ({
|
|||||||
/>
|
/>
|
||||||
</CustomTooltip>
|
</CustomTooltip>
|
||||||
{regenerate && (
|
{regenerate && (
|
||||||
<RegenerateOption
|
<CustomTooltip
|
||||||
selectedAssistant={currentPersona!}
|
disabled={isRegenerateDropdownVisible}
|
||||||
regenerate={regenerate}
|
showTick
|
||||||
overriddenModel={overriddenModel}
|
line
|
||||||
onHoverChange={setIsRegenerateHovered}
|
content="Regenerate!"
|
||||||
/>
|
>
|
||||||
|
<RegenerateOption
|
||||||
|
selectedAssistant={currentPersona!}
|
||||||
|
onDropdownVisibleChange={
|
||||||
|
setIsRegenerateDropdownVisible
|
||||||
|
}
|
||||||
|
regenerate={regenerate}
|
||||||
|
overriddenModel={overriddenModel}
|
||||||
|
onHoverChange={setIsRegenerateHovered}
|
||||||
|
/>
|
||||||
|
</CustomTooltip>
|
||||||
)}
|
)}
|
||||||
</TooltipGroup>
|
</TooltipGroup>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -46,6 +46,7 @@ export const CustomTooltip = ({
|
|||||||
showTick = false,
|
showTick = false,
|
||||||
delay = 500,
|
delay = 500,
|
||||||
position = "bottom",
|
position = "bottom",
|
||||||
|
disabled = false,
|
||||||
}: {
|
}: {
|
||||||
medium?: boolean;
|
medium?: boolean;
|
||||||
content: string | ReactNode;
|
content: string | ReactNode;
|
||||||
@@ -58,6 +59,7 @@ export const CustomTooltip = ({
|
|||||||
wrap?: boolean;
|
wrap?: boolean;
|
||||||
citation?: boolean;
|
citation?: boolean;
|
||||||
position?: "top" | "bottom";
|
position?: "top" | "bottom";
|
||||||
|
disabled?: boolean;
|
||||||
}) => {
|
}) => {
|
||||||
const [isVisible, setIsVisible] = useState(false);
|
const [isVisible, setIsVisible] = useState(false);
|
||||||
const [tooltipPosition, setTooltipPosition] = useState({ top: 0, left: 0 });
|
const [tooltipPosition, setTooltipPosition] = useState({ top: 0, left: 0 });
|
||||||
@@ -119,6 +121,7 @@ export const CustomTooltip = ({
|
|||||||
{children}
|
{children}
|
||||||
</span>
|
</span>
|
||||||
{isVisible &&
|
{isVisible &&
|
||||||
|
!disabled &&
|
||||||
createPortal(
|
createPortal(
|
||||||
<div
|
<div
|
||||||
className={`min-w-8 fixed z-[1000] ${citation ? "max-w-[350px]" : "w-40"} ${
|
className={`min-w-8 fixed z-[1000] ${citation ? "max-w-[350px]" : "w-40"} ${
|
||||||
|
Reference in New Issue
Block a user