Mercurial
annotate react_games/src/current.tsx @ 71:75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
| author | June Park <parkjune1995@gmail.com> |
|---|---|
| date | Sun, 28 Dec 2025 20:34:22 -0800 |
| parents | 829623189a57 |
| children |
| rev | line source |
|---|---|
|
47
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
1 import { CSSProperties, useReducer, useState, useRef, useEffect } from "react"; |
|
37
fb9bcd3145cb
[ReactGames] Few games I made using react just to practice few things.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2 import ReactDOM from "react-dom/client"; |
|
fb9bcd3145cb
[ReactGames] Few games I made using react just to practice few things.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3 |
| 44 | 4 /** |
|
47
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
5 * CONFIGURATION |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
6 * Replace this with your actual API key or fetch it from an environment variable. |
| 44 | 7 */ |
|
47
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
8 const OPENAI_API_KEY = "YOUR_OPENAI_API_KEY_HERE"; |
| 44 | 9 |
|
47
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
10 interface ChatStyle { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
11 mainContainer: CSSProperties; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
12 sideBar: CSSProperties; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
13 sideBarItem: CSSProperties; // Added for hover/layout |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
14 mainChat: CSSProperties; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
15 mainMessage: CSSProperties; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
16 messageBubble: CSSProperties; // Added for styling messages |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
17 inputBar: CSSProperties; |
|
37
fb9bcd3145cb
[ReactGames] Few games I made using react just to practice few things.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
18 } |
|
fb9bcd3145cb
[ReactGames] Few games I made using react just to practice few things.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
19 |
|
47
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
20 const STYLES: ChatStyle = { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
21 mainContainer: { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
22 display: "flex", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
23 backgroundColor: "#1e1e1e", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
24 color: "white", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
25 fontFamily: "sans-serif", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
26 height: "100vh", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
27 margin: 0, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
28 }, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
29 sideBar: { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
30 width: "250px", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
31 height: "100vh", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
32 overflowY: "auto", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
33 backgroundColor: "#000000", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
34 borderRight: "1px solid #333", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
35 padding: "1rem", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
36 }, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
37 sideBarItem: { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
38 padding: "10px", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
39 cursor: "pointer", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
40 backgroundColor: "#333", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
41 marginBottom: "5px", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
42 borderRadius: "5px", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
43 whiteSpace: "nowrap", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
44 overflow: "hidden", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
45 textOverflow: "ellipsis", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
46 }, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
47 mainChat: { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
48 flex: 1, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
49 display: "flex", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
50 flexDirection: "column", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
51 backgroundColor: "#343541", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
52 height: "100vh", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
53 }, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
54 mainMessage: { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
55 flex: 1, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
56 padding: "20px", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
57 overflowY: "auto", |
| 44 | 58 display: "flex", |
| 59 flexDirection: "column", | |
|
47
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
60 gap: "15px", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
61 }, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
62 messageBubble: { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
63 padding: "15px", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
64 borderRadius: "8px", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
65 lineHeight: "1.5", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
66 maxWidth: "800px", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
67 margin: "0 auto", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
68 width: "100%", |
| 44 | 69 }, |
|
47
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
70 inputBar: { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
71 width: "100%", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
72 height: "100px", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
73 padding: "15px", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
74 backgroundColor: "#40414f", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
75 color: "white", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
76 border: "none", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
77 borderTop: "1px solid #555", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
78 fontSize: "16px", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
79 resize: "none", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
80 outline: "none", |
| 44 | 81 }, |
|
47
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
82 }; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
83 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
84 type Chat = { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
85 id: string; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
86 title: string; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
87 createdAt: number; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
88 }; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
89 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
90 type ChatHistory = Chat[]; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
91 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
92 type Message = { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
93 id: string; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
94 role: 'user' | 'assistant'; // Changed from 'author' to match OpenAI spec usually |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
95 content: string; // Changed from 'message' to 'content' |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
96 createdAt: number; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
97 }; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
98 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
99 type MainPage = { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
100 activeChatId: string | null; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
101 chatHistory: ChatHistory; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
102 currentMessages: Message[]; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
103 allChats: Record<string, Message[]>; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
104 sendMessageStatus: 'idle' | 'inProgress' | 'failed' | 'success'; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
105 }; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
106 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
107 // Expanded Actions |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
108 type MainPageAction = |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
109 | { type: 'select_chat'; payload: { chatId: string } } |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
110 | { type: 'user_message_sent'; payload: { content: string; newChatId?: string } } |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
111 | { type: 'api_response_received'; payload: { content: string } } |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
112 | { type: 'api_error'; payload: { error: string } }; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
113 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
114 function mainPageDispatch(state: MainPage, action: MainPageAction): MainPage { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
115 switch (action.type) { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
116 case 'select_chat': { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
117 const { chatId } = action.payload; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
118 return { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
119 ...state, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
120 activeChatId: chatId, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
121 currentMessages: state.allChats[chatId] || [], |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
122 sendMessageStatus: 'idle', |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
123 }; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
124 } |
| 44 | 125 |
|
47
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
126 case 'user_message_sent': { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
127 const { content, newChatId } = action.payload; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
128 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
129 const newMessage: Message = { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
130 id: Date.now().toString(), |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
131 role: 'user', |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
132 content: content, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
133 createdAt: Date.now(), |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
134 }; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
135 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
136 // If we are starting a brand new chat (no active ID) |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
137 if (newChatId && !state.activeChatId) { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
138 const newChatMetadata: Chat = { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
139 id: newChatId, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
140 title: content.substring(0, 30) + (content.length > 30 ? "..." : ""), |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
141 createdAt: Date.now() |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
142 }; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
143 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
144 return { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
145 ...state, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
146 activeChatId: newChatId, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
147 sendMessageStatus: 'inProgress', |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
148 chatHistory: [newChatMetadata, ...state.chatHistory], |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
149 currentMessages: [newMessage], |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
150 allChats: { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
151 ...state.allChats, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
152 [newChatId]: [newMessage] |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
153 } |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
154 }; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
155 } |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
156 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
157 const chatId = state.activeChatId!; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
158 const updatedMessages = [...state.currentMessages, newMessage]; |
|
37
fb9bcd3145cb
[ReactGames] Few games I made using react just to practice few things.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
159 |
|
47
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
160 return { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
161 ...state, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
162 sendMessageStatus: 'inProgress', |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
163 currentMessages: updatedMessages, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
164 allChats: { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
165 ...state.allChats, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
166 [chatId]: updatedMessages |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
167 } |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
168 }; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
169 } |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
170 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
171 case 'api_response_received': { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
172 if (!state.activeChatId) return state; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
173 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
174 const newMsg: Message = { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
175 id: Date.now().toString(), |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
176 role: 'assistant', |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
177 content: action.payload.content, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
178 createdAt: Date.now() |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
179 }; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
180 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
181 const updatedMessages = [...state.currentMessages, newMsg]; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
182 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
183 return { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
184 ...state, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
185 sendMessageStatus: 'success', |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
186 currentMessages: updatedMessages, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
187 allChats: { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
188 ...state.allChats, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
189 [state.activeChatId]: updatedMessages |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
190 } |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
191 }; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
192 } |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
193 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
194 case 'api_error': { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
195 return { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
196 ...state, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
197 sendMessageStatus: 'failed' |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
198 }; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
199 } |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
200 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
201 default: |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
202 return state; |
| 44 | 203 } |
|
37
fb9bcd3145cb
[ReactGames] Few games I made using react just to practice few things.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
204 } |
| 44 | 205 |
|
47
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
206 const initialMainPage: MainPage = { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
207 activeChatId: null, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
208 chatHistory: [], |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
209 currentMessages: [], |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
210 allChats: {}, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
211 sendMessageStatus: 'idle' |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
212 }; |
| 44 | 213 |
| 214 | |
|
47
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
215 async function fetchOpenAICompletion(messages: Message[]) { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
216 const apiMessages = messages.map(m => ({ |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
217 role: m.role, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
218 content: m.content |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
219 })); |
|
37
fb9bcd3145cb
[ReactGames] Few games I made using react just to practice few things.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
220 |
|
47
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
221 try { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
222 const response = await fetch("https://api.openai.com/v1/chat/completions", { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
223 method: "POST", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
224 headers: { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
225 "Content-Type": "application/json", |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
226 "Authorization": `Bearer ${OPENAI_API_KEY}` |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
227 }, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
228 body: JSON.stringify({ |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
229 model: "gpt-3.5-turbo", // or gpt-4 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
230 messages: apiMessages, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
231 }) |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
232 }); |
|
37
fb9bcd3145cb
[ReactGames] Few games I made using react just to practice few things.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
233 |
|
47
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
234 if (!response.ok) { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
235 throw new Error(`API Error: ${response.statusText}`); |
| 44 | 236 } |
|
47
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
237 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
238 const data = await response.json(); |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
239 return data.choices[0].message.content; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
240 } catch (error) { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
241 console.error(error); |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
242 throw error; |
| 44 | 243 } |
|
37
fb9bcd3145cb
[ReactGames] Few games I made using react just to practice few things.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
244 } |
|
fb9bcd3145cb
[ReactGames] Few games I made using react just to practice few things.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
245 |
| 44 | 246 function Current() { |
|
47
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
247 const [state, dispatch] = useReducer(mainPageDispatch, initialMainPage); |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
248 const [inputValue, setInputValue] = useState(""); |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
249 const messagesEndRef = useRef<HTMLDivElement>(null); |
|
37
fb9bcd3145cb
[ReactGames] Few games I made using react just to practice few things.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
250 |
|
47
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
251 // Auto-scroll to bottom when messages change |
| 44 | 252 useEffect(() => { |
|
47
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
253 messagesEndRef.current?.scrollIntoView({ behavior: "smooth" }); |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
254 }, [state.currentMessages]); |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
255 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
256 const handleSendMessage = async () => { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
257 if (!inputValue.trim()) return; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
258 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
259 // 1. Determine if this is a new chat or existing |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
260 const isNewChat = !state.activeChatId; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
261 const currentChatId = state.activeChatId || crypto.randomUUID(); // Generate ID for new chat |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
262 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
263 const textToSend = inputValue; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
264 setInputValue(""); // Clear input immediately |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
265 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
266 // 2. Dispatch User Message (Optimistic UI) |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
267 dispatch({ |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
268 type: 'user_message_sent', |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
269 payload: { content: textToSend, newChatId: isNewChat ? currentChatId : undefined } |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
270 }); |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
271 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
272 try { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
273 // 3. Prepare context (include previous messages + new one) |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
274 // Note: We reconstruct the array here because state update is async and might not be ready |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
275 const contextMessages: Message[] = [ |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
276 ...(isNewChat ? [] : state.currentMessages), |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
277 { id: 'temp', role: 'user', content: textToSend, createdAt: Date.now() } |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
278 ]; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
279 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
280 // 4. Call API |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
281 const aiResponse = await fetchOpenAICompletion(contextMessages); |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
282 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
283 // 5. Dispatch Success |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
284 dispatch({ type: 'api_response_received', payload: { content: aiResponse } }); |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
285 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
286 } catch (error) { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
287 dispatch({ type: 'api_error', payload: { error: 'Failed to fetch' } }); |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
288 alert("Failed to connect to OpenAI. Check API Key."); |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
289 } |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
290 }; |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
291 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
292 const handleKeyDown = (e: React.KeyboardEvent) => { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
293 if (e.key === 'Enter' && !e.shiftKey) { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
294 e.preventDefault(); |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
295 handleSendMessage(); |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
296 } |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
297 }; |
| 44 | 298 |
| 299 return ( | |
|
47
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
300 <div style={STYLES.mainContainer}> |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
301 {/* Sidebar */} |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
302 <div style={STYLES.sideBar}> |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
303 <h3 style={{color: '#ececf1', marginBottom: '20px'}}>History</h3> |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
304 <div |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
305 style={{...STYLES.sideBarItem, border: '1px dashed #555'}} |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
306 onClick={() => { |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
307 // Reset to empty view for a new chat |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
308 // We can achieve this by setting activeChatId to null locally if we wanted |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
309 // But for this simple reducer, we can just reload the page or add a 'reset' action. |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
310 // For now, let's just allow clicking existing ones. |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
311 window.location.reload(); |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
312 }} |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
313 > |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
314 + New Chat |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
315 </div> |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
316 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
317 {state.chatHistory.map((hist) => ( |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
318 <div |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
319 key={hist.id} |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
320 style={{ |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
321 ...STYLES.sideBarItem, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
322 backgroundColor: state.activeChatId === hist.id ? '#555' : '#333' |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
323 }} |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
324 onClick={() => dispatch({ type: 'select_chat', payload: { chatId: hist.id } })} |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
325 > |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
326 {hist.title} |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
327 </div> |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
328 ))} |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
329 </div> |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
330 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
331 {/* Main Chat Area */} |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
332 <div style={STYLES.mainChat}> |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
333 <div style={STYLES.mainMessage}> |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
334 {state.currentMessages.length === 0 && ( |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
335 <div style={{color: '#666', textAlign: 'center', marginTop: '40%'}}> |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
336 Send a message to start... |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
337 </div> |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
338 )} |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
339 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
340 {state.currentMessages.map((msg) => ( |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
341 <div |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
342 key={msg.id} |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
343 style={{ |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
344 ...STYLES.messageBubble, |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
345 backgroundColor: msg.role === 'assistant' ? '#444654' : 'transparent' |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
346 }} |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
347 > |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
348 <strong style={{color: msg.role === 'assistant' ? '#10a37f' : '#ececf1'}}> |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
349 {msg.role === 'assistant' ? 'AI' : 'You'}: |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
350 </strong> |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
351 <div style={{whiteSpace: 'pre-wrap', marginTop: '5px'}}>{msg.content}</div> |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
352 </div> |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
353 ))} |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
354 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
355 {state.sendMessageStatus === 'inProgress' && ( |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
356 <div style={{...STYLES.messageBubble, color: '#888'}}>AI is typing...</div> |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
357 )} |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
358 <div ref={messagesEndRef} /> |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
359 </div> |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
360 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
361 {/* Input Area */} |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
362 <textarea |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
363 style={STYLES.inputBar} |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
364 placeholder="Send a message..." |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
365 value={inputValue} |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
366 onChange={(e) => setInputValue(e.target.value)} |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
367 onKeyDown={handleKeyDown} |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
368 disabled={state.sendMessageStatus === 'inProgress'} |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
369 /> |
| 44 | 370 </div> |
| 371 </div> | |
| 372 ); | |
| 373 } | |
|
37
fb9bcd3145cb
[ReactGames] Few games I made using react just to practice few things.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
374 |
|
fb9bcd3145cb
[ReactGames] Few games I made using react just to practice few things.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
375 ReactDOM.createRoot(document.getElementById("root")!).render(<Current />); |
|
47
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
376 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
377 |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
378 https://www.linkedin.com/in/drakewong/ |
|
829623189a57
[Gara] Android commit. Bazelfied it.
MrJuneJune <me@mrjunejune.com>
parents:
44
diff
changeset
|
379 https://www.linkedin.com/in/dmitry-manannikov/ |