Ensure regenerate has dropdown too (#2797)

* ensure regenerate has dropdown too

* ensure applied to all

* nit
This commit is contained in:
pablodanswer
2024-10-15 10:09:13 -07:00
committed by GitHub
parent aa5be37f97
commit da46f61123
3 changed files with 49 additions and 14 deletions

View File

@@ -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}

View File

@@ -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>

View File

@@ -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"} ${