mirror of
https://github.com/eliasstepanik/core.git
synced 2026-01-10 23:58:28 +00:00
* feat: remove trigger and run base on bullmq * fix: telemetry and trigger deploymen * feat: add Ollama container and update ingestion status for unchanged documents * feat: add logger to bullmq workers * 1. Remove chat and deep-search from trigger 2. Add ai/sdk for chat UI 3. Added a better model manager * refactor: simplify clustered graph query and add stop conditions for AI responses * fix: streaming * fix: docker docs --------- Co-authored-by: Manoj <saimanoj58@gmail.com>
65 lines
1.9 KiB
TypeScript
65 lines
1.9 KiB
TypeScript
import { EditorContent, useEditor } from "@tiptap/react";
|
|
|
|
import { useEffect, memo } from "react";
|
|
import { cn } from "~/lib/utils";
|
|
import { extensionsForConversation } from "./editor-extensions";
|
|
import { skillExtension } from "../editor/skill-extension";
|
|
import { type UIMessage } from "ai";
|
|
|
|
interface AIConversationItemProps {
|
|
message: UIMessage;
|
|
}
|
|
|
|
function getMessage(message: string) {
|
|
let finalMessage = message.replace("<final_response>", "");
|
|
finalMessage = finalMessage.replace("</final_response>", "");
|
|
finalMessage = finalMessage.replace("<question_response>", "");
|
|
finalMessage = finalMessage.replace("</question_response>", "");
|
|
|
|
return finalMessage;
|
|
}
|
|
|
|
const ConversationItemComponent = ({ message }: AIConversationItemProps) => {
|
|
const isUser = message.role === "user" || false;
|
|
const textPart = message.parts.find((part) => part.type === "text");
|
|
|
|
const editor = useEditor({
|
|
extensions: [...extensionsForConversation, skillExtension],
|
|
editable: false,
|
|
content: textPart ? getMessage(textPart.text) : "",
|
|
});
|
|
|
|
useEffect(() => {
|
|
if (textPart) {
|
|
editor?.commands.setContent(getMessage(textPart.text));
|
|
}
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
}, [message]);
|
|
|
|
if (!message) {
|
|
return null;
|
|
}
|
|
|
|
return (
|
|
<div className={cn("flex gap-2 px-4 pb-2", isUser && "my-4 justify-end")}>
|
|
<div
|
|
className={cn(
|
|
"flex flex-col",
|
|
isUser && "bg-primary/20 max-w-[500px] rounded-md p-3",
|
|
)}
|
|
>
|
|
<EditorContent editor={editor} className="editor-container" />
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
// Memoize to prevent unnecessary re-renders
|
|
export const ConversationItem = memo(
|
|
ConversationItemComponent,
|
|
(prevProps, nextProps) => {
|
|
// Only re-render if the conversation history ID or message changed
|
|
return prevProps.message === nextProps.message;
|
|
},
|
|
);
|