File size: 1,307 Bytes
c9d42cc
cce8120
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19eaf17
cce8120
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
'use client';
"use client";

import { useState } from "react";

const API =
process.env.NEXT_PUBLIC_API_URL ||
"http://127.0.0.1:8000";

export default function ProductionAIChat(){

const [prompt,setPrompt]=useState("");
const [messages,setMessages]=useState([]);

async function send(){

if(!prompt.trim()) return;

const user={
role:"user",
content:prompt
};

setMessages(v=>[...v,user]);

const res=await fetch(API+"/api/workspace/chat/message",{
method:"POST",
headers:{
"Content-Type":"application/json"
},
body:JSON.stringify({
message:prompt
})
});

const data=await res.json();

setMessages(v=>[
...v,
{
role:"assistant",
content:
data.message ||
data.response ||
JSON.stringify(data)
}
]);

setPrompt("");

}

return(

<div className="flex flex-col h-full bg-[#111827]">

<div className="flex-1 overflow-auto p-4 space-y-3">

{messages.map((m,i)=>(

<div
key={i}
className={
m.role==="assistant"
?
"bg-slate-700 rounded p-3"
:
"bg-blue-700 rounded p-3"
}
>

{m.content}

</div>

))}

</div>

<div className="border-t border-slate-700 p-3 flex gap-2">

<input
className="flex-1 rounded bg-slate-900 p-2"
value={prompt}
onChange={e=>setPrompt(e.target.value)}
placeholder="Ask Traveler Dev..."
/>

<button
onClick={send}
className="bg-blue-600 px-4 rounded"
>

Send

</button>

</div>

</div>

);

}