Bug Fixes and Style Updates (#643)

This commit is contained in:
Gabriel Luiz Freitas Almeida 2023-07-13 18:53:23 +00:00 • committed by GitHub
commit 5e8ac59a83
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 42 additions and 19 deletions

View file

@ -60,7 +60,7 @@ class Graph:
# the toolkit node # the toolkit node
self._build_node_params() self._build_node_params()
# remove invalid nodes # remove invalid nodes
self._remove_invalid_nodes() self._validate_nodes()
def _build_node_params(self) -> None: def _build_node_params(self) -> None:
"""Identifies and handles the LLM node within the graph.""" """Identifies and handles the LLM node within the graph."""
@ -75,14 +75,13 @@ class Graph:
if isinstance(node, ToolkitVertex): if isinstance(node, ToolkitVertex):
node.params["llm"] = llm_node node.params["llm"] = llm_node
def _remove_invalid_nodes(self) -> None: def _validate_nodes(self) -> None:
"""Removes invalid nodes from the graph.""" """Check that all nodes have edges"""
self.nodes = [ for node in self.nodes:
node if not self._validate_node(node):
for node in self.nodes raise ValueError(
if self._validate_node(node) f"{node.vertex_type} is not connected to any other components"
or (len(self.nodes) == 1 and len(self.edges) == 0) )
]
def _validate_node(self, node: Vertex) -> bool: def _validate_node(self, node: Vertex) -> bool:
"""Validates a node.""" """Validates a node."""

View file

@ -11,6 +11,12 @@ import { buildInputs, buildTweaks } from "./utils";
*/ */
export const MAX_LENGTH_TO_SCROLL_TOOLTIP = 200; export const MAX_LENGTH_TO_SCROLL_TOOLTIP = 200;
/**
* Number maximum of components to scroll on tooltips
* @constant
*/
export const MAX_WORDS_HIGHLIGHT = 79;
/** /**
* The base text for subtitle of Export Dialog (Toolbar) * The base text for subtitle of Export Dialog (Toolbar)
* @constant * @constant

View file

@ -195,7 +195,7 @@ export function TabsProvider({ children }: { children: ReactNode }) {
if (!flow.data || !flow.data.edges) return; if (!flow.data || !flow.data.edges) return;
flow.data.edges.forEach((edge) => { flow.data.edges.forEach((edge) => {
edge.className = ""; edge.className = "";
edge.style = { stroke: "#555555" }; edge.style = { stroke: "#555" };
}); });
} }
@ -472,7 +472,7 @@ export function TabsProvider({ children }: { children: ReactNode }) {
sourceHandle, sourceHandle,
targetHandle, targetHandle,
id, id,
style: { stroke: "inherit" }, style: { stroke: "#555" },
className: className:
targetHandle.split("|")[0] === "Text" targetHandle.split("|")[0] === "Text"
? "stroke-gray-800 " ? "stroke-gray-800 "

View file

@ -116,6 +116,9 @@
--status-blue: #2563eb; --status-blue: #2563eb;
--connection: #555; --connection: #555;
--chat-bot-icon: #235d70;
--chat-user-icon: #4f3d6e;
}} }}
@layer base { @layer base {
@ -652,10 +655,10 @@ The cursor: default; property value restores the browser's default cursor style
@apply flex items-center justify-between px-4 py-1.5 @apply flex items-center justify-between px-4 py-1.5
} }
.code-block-modal-span { .code-block-modal-span {
@apply text-xs lowercase text-background @apply text-xs lowercase text-muted-foreground
} }
.code-block-modal-button { .code-block-modal-button {
@apply flex items-center gap-1.5 rounded bg-none p-1 text-xs text-background @apply flex items-center gap-1.5 rounded bg-none p-1 text-xs text-muted-foreground
} }
.chat-message-modal { .chat-message-modal {
@ -930,7 +933,11 @@ The cursor: default; property value restores the browser's default cursor style
@apply bg-white text-primary @apply bg-white text-primary
} }
.code-highlight{ .code-highlight{
@apply block px-3 py-2 w-full h-full text-sm outline-0 border-0 break-all overflow-y-hidden @apply block px-3 py-2 w-full max-h-[64vh] text-sm outline-0 border-0 break-all overflow-y-hidden
}
.code-nohighlight{
@apply block px-3 py-2 w-full max-h-[70vh] text-sm outline-0 border-0 break-all overflow-y-hidden
} }
.form-modal-lockchat { .form-modal-lockchat {
@apply form-input focus:ring-ring focus:border-ring block w-full rounded-md border-border p-4 pr-16 custom-scroll sm:text-sm @apply form-input focus:ring-ring focus:border-ring block w-full rounded-md border-border p-4 pr-16 custom-scroll sm:text-sm

View file

@ -81,7 +81,7 @@ export default function ChatMessage({
remarkPlugins={[remarkGfm, remarkMath]} remarkPlugins={[remarkGfm, remarkMath]}
rehypePlugins={[rehypeMathjax]} rehypePlugins={[rehypeMathjax]}
className="markdown prose inline-block break-words text-primary className="markdown prose inline-block break-words text-primary
dark:prose-invert sm:max-w-[30vw] lg:max-w-[40vw]" dark:prose-invert sm:max-w-[30vw] lg:max-w-[40vw] sm:w-[30vw] lg:w-[40vw]"
components={{ components={{
code: ({ code: ({
node, node,

View file

@ -6,7 +6,7 @@ import { Badge } from "../../components/ui/badge";
import { Button } from "../../components/ui/button"; import { Button } from "../../components/ui/button";
import { DialogTitle } from "../../components/ui/dialog"; import { DialogTitle } from "../../components/ui/dialog";
import { Textarea } from "../../components/ui/textarea"; import { Textarea } from "../../components/ui/textarea";
import { PROMPT_DIALOG_SUBTITLE, TEXT_DIALOG_SUBTITLE } from "../../constants"; import { MAX_WORDS_HIGHLIGHT, PROMPT_DIALOG_SUBTITLE, TEXT_DIALOG_SUBTITLE } from "../../constants";
import { alertContext } from "../../contexts/alertContext"; import { alertContext } from "../../contexts/alertContext";
import { darkContext } from "../../contexts/darkContext"; import { darkContext } from "../../contexts/darkContext";
import { PopUpContext } from "../../contexts/popUpContext"; import { PopUpContext } from "../../contexts/popUpContext";
@ -58,6 +58,8 @@ export default function GenericModal({
closePopUp(); closePopUp();
} }
} }
const divRef = useRef(null);
const divRefPrompt = useRef(null);
function checkVariables(valueToCheck) { function checkVariables(valueToCheck) {
const regex = /\{([^{}]+)\}/g; const regex = /\{([^{}]+)\}/g;
@ -108,7 +110,7 @@ export default function GenericModal({
const TextAreaContentView = () => { const TextAreaContentView = () => {
return ( return (
<SanitizedHTMLWrapper <SanitizedHTMLWrapper
className="code-highlight" className={getClassByNumberLength()}
content={coloredContent} content={coloredContent}
onClick={() => { onClick={() => {
setIsEdit(true); setIsEdit(true);
@ -118,6 +120,15 @@ export default function GenericModal({
); );
}; };
function getClassByNumberLength(){
let sumOfCaracteres: number = 0;
wordsHighlight.forEach(element => {
sumOfCaracteres = sumOfCaracteres + element.replace(/[{}]/g, "").length
});
return sumOfCaracteres > MAX_WORDS_HIGHLIGHT ? "code-highlight" : "code-nohighlight"
}
function validatePrompt(closeModal: boolean) { function validatePrompt(closeModal: boolean) {
postValidatePrompt(field_name, inputValue, nodeClass) postValidatePrompt(field_name, inputValue, nodeClass)
.then((apiReturn) => { .then((apiReturn) => {
@ -189,7 +200,7 @@ export default function GenericModal({
> >
{type === TypeModal.PROMPT && isEdit ? ( {type === TypeModal.PROMPT && isEdit ? (
<Textarea <Textarea
ref={ref} ref={divRefPrompt}
className="form-input h-full w-full rounded-lg custom-scroll focus-visible:ring-1" className="form-input h-full w-full rounded-lg custom-scroll focus-visible:ring-1"
value={inputValue} value={inputValue}
onBlur={() => { onBlur={() => {
@ -223,7 +234,7 @@ export default function GenericModal({
<div className="mb-auto flex-1"> <div className="mb-auto flex-1">
{type === TypeModal.PROMPT && ( {type === TypeModal.PROMPT && (
<div className=" mr-2"> <div className=" mr-2">
<div className="max-h-20 overflow-y-auto custom-scroll"> <div ref={divRef} className="max-h-20 overflow-y-auto custom-scroll">
<div className="flex flex-wrap items-center"> <div className="flex flex-wrap items-center">
<Variable className=" -ml-px mr-1 flex h-4 w-4 text-primary"></Variable> <Variable className=" -ml-px mr-1 flex h-4 w-4 text-primary"></Variable>
<span className="text-md font-semibold text-primary"> <span className="text-md font-semibold text-primary">