colorized think with ANSI to HTML

This commit is contained in:
anovazzi1 2023-04-03 18:39:55 -03:00
commit 6e3f8a89b4
5 changed files with 24 additions and 7 deletions

View file

@ -66,9 +66,7 @@ def process_graph(data_graph: Dict[str, Any]):
logger.debug("Saved langchain object to cache") logger.debug("Saved langchain object to cache")
return { return {
"result": str(result), "result": str(result),
"thought": re.sub( "thought": thought.strip()
r"\x1b\[([0-9,A-Z]{1,2}(;[0-9,A-Z]{1,2})?)?[m|K]", "", thought
).strip(),
} }

View file

@ -22,6 +22,7 @@
"@types/react": "^18.0.27", "@types/react": "^18.0.27",
"@types/react-dom": "^18.0.10", "@types/react-dom": "^18.0.10",
"ace-builds": "^1.16.0", "ace-builds": "^1.16.0",
"ansi-to-html": "^0.7.2",
"axios": "^1.3.2", "axios": "^1.3.2",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"react": "^18.2.0", "react": "^18.2.0",
@ -5315,6 +5316,20 @@
"node": ">=4" "node": ">=4"
} }
}, },
"node_modules/ansi-to-html": {
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.7.2.tgz",
"integrity": "sha512-v6MqmEpNlxF+POuyhKkidusCHWWkaLcGRURzivcU3I9tv7k4JVhFcnukrM5Rlk2rUywdZuzYAZ+kbZqWCnfN3g==",
"dependencies": {
"entities": "^2.2.0"
},
"bin": {
"ansi-to-html": "bin/ansi-to-html"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/anymatch": { "node_modules/anymatch": {
"version": "3.1.3", "version": "3.1.3",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",

View file

@ -17,6 +17,7 @@
"@types/react": "^18.0.27", "@types/react": "^18.0.27",
"@types/react-dom": "^18.0.10", "@types/react-dom": "^18.0.10",
"ace-builds": "^1.16.0", "ace-builds": "^1.16.0",
"ansi-to-html": "^0.7.2",
"axios": "^1.3.2", "axios": "^1.3.2",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"react": "^18.2.0", "react": "^18.2.0",
@ -58,5 +59,5 @@
"last 1 safari version" "last 1 safari version"
] ]
}, },
"proxy": "http://backend:7860" "proxy": "http://localhost:7860"
} }

View file

@ -2,6 +2,8 @@ import { ChatBubbleLeftEllipsisIcon, ChatBubbleOvalLeftEllipsisIcon, PlusSmallIc
import { useState } from "react"; import { useState } from "react";
import { ChatMessageType } from "../../../types/chat"; import { ChatMessageType } from "../../../types/chat";
import { nodeColors } from "../../../utils"; import { nodeColors } from "../../../utils";
var Convert = require('ansi-to-html');
var convert = new Convert({newline:true});
export default function ChatMessage({ chat }: { chat: ChatMessageType }) { export default function ChatMessage({ chat }: { chat: ChatMessageType }) {
const [hidden, setHidden] = useState(true); const [hidden, setHidden] = useState(true);
@ -27,7 +29,7 @@ export default function ChatMessage({ chat }: { chat: ChatMessageType }) {
style={{ backgroundColor: nodeColors["thought"] }} style={{ backgroundColor: nodeColors["thought"] }}
className=" text-start inline-block w-full pb-3 pt-3 px-5 cursor-pointer" className=" text-start inline-block w-full pb-3 pt-3 px-5 cursor-pointer"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: chat.thought.replace(/\n/g, "<br />"), __html: convert.toHtml(chat.thought)
}} }}
></div> ></div>
)} )}

View file

@ -13,6 +13,7 @@ import { TabsContext } from "../../contexts/tabsContext";
import { ChatType } from "../../types/chat"; import { ChatType } from "../../types/chat";
import ChatMessage from "./chatMessage"; import ChatMessage from "./chatMessage";
const _ = require("lodash"); const _ = require("lodash");
export default function Chat({ flow, reactFlowInstance }: ChatType) { export default function Chat({ flow, reactFlowInstance }: ChatType) {
@ -99,7 +100,7 @@ export default function Chat({ flow, reactFlowInstance }: ChatType) {
sendAll({ ...reactFlowInstance.toObject(), message, chatHistory,name:flow.name,description:flow.description}) sendAll({ ...reactFlowInstance.toObject(), message, chatHistory,name:flow.name,description:flow.description})
.then((r) => { .then((r) => {
addChatHistory(r.data.result, false, r.data.thought); addChatHistory(r.data.result, false,r.data.thought);
setLockChat(false); setLockChat(false);
}) })
.catch((error) => { .catch((error) => {