|
import { useState } from "react";
|
|
import { Input } from "@/components/ui/input";
|
|
import { Button } from "@/components/ui/button";
|
|
import { v4 as uuidv4 } from "uuid";
|
|
import {
|
|
useChatInteract,
|
|
useChatMessages,
|
|
IStep,
|
|
} from "@chainlit/react-client";
|
|
|
|
|
|
|
|
export function Playground() {
|
|
const [inputValue, setInputValue] = useState("");
|
|
const { sendMessage } = useChatInteract();
|
|
const { messages } = useChatMessages();
|
|
|
|
const handleSendMessage = () => {
|
|
const content = inputValue.trim();
|
|
if (content) {
|
|
const message: IStep = {
|
|
id: uuidv4(),
|
|
name: "user",
|
|
type: "user_message",
|
|
output: content,
|
|
createdAt: new Date().toISOString(),
|
|
};
|
|
sendMessage(message, []);
|
|
setInputValue("");
|
|
}
|
|
};
|
|
|
|
const renderMessage = (message: IStep) => {
|
|
const dateOptions: Intl.DateTimeFormatOptions = {
|
|
hour: "2-digit",
|
|
minute: "2-digit",
|
|
};
|
|
const date = new Date(message.createdAt).toLocaleTimeString(undefined, dateOptions);
|
|
return (
|
|
<div key={message.id} className="flex items-start space-x-2">
|
|
<div className="w-20 text-sm text-green-500">{message.name}</div>
|
|
<div className="flex-1 border rounded-lg p-2">
|
|
<p className="text-black dark:text-white">{message.output}</p>
|
|
<small className="text-xs text-gray-500">{date}</small>
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
return (
|
|
|
|
<div className="playground-container bg-gray-100 dark:bg-gray-900 flex flex-col" style={{ borderRadius: '10px' }}>
|
|
|
|
<div style={{ backgroundColor: '#d00404', height: '50px' }}>
|
|
{/* Add your content for the red section here */}
|
|
</div>
|
|
|
|
<div className="flex-1 overflow-auto p-6">
|
|
<div className="space-y-4">
|
|
{messages.map((message) => renderMessage(message))}
|
|
</div>
|
|
</div>
|
|
<div className="border-t p-4 bg-white dark:bg-gray-800">
|
|
<div className="flex items-center space-x-2">
|
|
<Input
|
|
autoFocus
|
|
className="flex-1"
|
|
id="message-input"
|
|
placeholder="Type a message"
|
|
value={inputValue}
|
|
onChange={(e) => setInputValue(e.target.value)}
|
|
onKeyUp={(e) => {
|
|
if (e.key === "Enter") {
|
|
handleSendMessage();
|
|
}
|
|
}}
|
|
/>
|
|
<Button onClick={handleSendMessage} type="submit">
|
|
Send
|
|
</Button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
|