matt HOFFNER commited on
Commit
36355a5
β€’
1 Parent(s): a942b58
package-lock.json CHANGED
@@ -15,8 +15,6 @@
15
  "@types/react": "18.2.6",
16
  "@types/react-dom": "18.2.4",
17
  "@xenova/transformers": "^2.1.1",
18
- "chromadb": "^1.5.2",
19
- "cohere-ai": "^5.1.0",
20
  "dexie": "^3.2.4",
21
  "eslint": "8.40.0",
22
  "eslint-config-next": "13.4.2",
@@ -1691,6 +1689,20 @@
1691
  "url": "https://github.com/chalk/ansi-styles?sponsor=1"
1692
  }
1693
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1694
  "node_modules/aproba": {
1695
  "version": "2.0.0",
1696
  "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
@@ -2207,6 +2219,47 @@
2207
  "url": "https://github.com/chalk/chalk?sponsor=1"
2208
  }
2209
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2210
  "node_modules/chownr": {
2211
  "version": "1.1.4",
2212
  "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
@@ -2215,7 +2268,9 @@
2215
  "node_modules/chromadb": {
2216
  "version": "1.5.2",
2217
  "resolved": "https://registry.npmjs.org/chromadb/-/chromadb-1.5.2.tgz",
2218
- "integrity": "sha512-x/rOD7Oo1RiYA+vPK+Ma7CliCHlx26OjUt5J7Z9HZ5Ud1qDrPlvctBycK9Il3zqza96yeUoPQ7gCXHVKNoyvRQ=="
 
 
2219
  },
2220
  "node_modules/client-only": {
2221
  "version": "0.0.1",
@@ -2225,7 +2280,9 @@
2225
  "node_modules/cohere-ai": {
2226
  "version": "5.1.0",
2227
  "resolved": "https://registry.npmjs.org/cohere-ai/-/cohere-ai-5.1.0.tgz",
2228
- "integrity": "sha512-7q3z3w6GSoPxQqRL9G6QTaQ0e513auVE1JlNDnqnoFEXGtDbkVfaTOliR5qrMoK//74Csb0NW669evqngwPx3g=="
 
 
2229
  },
2230
  "node_modules/color": {
2231
  "version": "4.2.3",
@@ -3875,6 +3932,13 @@
3875
  "node": ">= 4"
3876
  }
3877
  },
 
 
 
 
 
 
 
3878
  "node_modules/import-fresh": {
3879
  "version": "3.3.0",
3880
  "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
@@ -3979,6 +4043,19 @@
3979
  "url": "https://github.com/sponsors/ljharb"
3980
  }
3981
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
3982
  "node_modules/is-boolean-object": {
3983
  "version": "1.1.2",
3984
  "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
@@ -5075,6 +5152,16 @@
5075
  "node": ">=6"
5076
  }
5077
  },
 
 
 
 
 
 
 
 
 
 
5078
  "node_modules/normalize-range": {
5079
  "version": "0.1.2",
5080
  "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
@@ -5818,6 +5905,19 @@
5818
  "node": ">= 6"
5819
  }
5820
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
5821
  "node_modules/regenerator-runtime": {
5822
  "version": "0.13.11",
5823
  "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
@@ -6129,6 +6229,24 @@
6129
  "url": "https://github.com/sponsors/ljharb"
6130
  }
6131
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6132
  "node_modules/scheduler": {
6133
  "version": "0.23.0",
6134
  "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
 
15
  "@types/react": "18.2.6",
16
  "@types/react-dom": "18.2.4",
17
  "@xenova/transformers": "^2.1.1",
 
 
18
  "dexie": "^3.2.4",
19
  "eslint": "8.40.0",
20
  "eslint-config-next": "13.4.2",
 
1689
  "url": "https://github.com/chalk/ansi-styles?sponsor=1"
1690
  }
1691
  },
1692
+ "node_modules/anymatch": {
1693
+ "version": "3.1.3",
1694
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
1695
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
1696
+ "optional": true,
1697
+ "peer": true,
1698
+ "dependencies": {
1699
+ "normalize-path": "^3.0.0",
1700
+ "picomatch": "^2.0.4"
1701
+ },
1702
+ "engines": {
1703
+ "node": ">= 8"
1704
+ }
1705
+ },
1706
  "node_modules/aproba": {
1707
  "version": "2.0.0",
1708
  "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
 
2219
  "url": "https://github.com/chalk/chalk?sponsor=1"
2220
  }
2221
  },
2222
+ "node_modules/chokidar": {
2223
+ "version": "3.5.3",
2224
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
2225
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
2226
+ "funding": [
2227
+ {
2228
+ "type": "individual",
2229
+ "url": "https://paulmillr.com/funding/"
2230
+ }
2231
+ ],
2232
+ "optional": true,
2233
+ "peer": true,
2234
+ "dependencies": {
2235
+ "anymatch": "~3.1.2",
2236
+ "braces": "~3.0.2",
2237
+ "glob-parent": "~5.1.2",
2238
+ "is-binary-path": "~2.1.0",
2239
+ "is-glob": "~4.0.1",
2240
+ "normalize-path": "~3.0.0",
2241
+ "readdirp": "~3.6.0"
2242
+ },
2243
+ "engines": {
2244
+ "node": ">= 8.10.0"
2245
+ },
2246
+ "optionalDependencies": {
2247
+ "fsevents": "~2.3.2"
2248
+ }
2249
+ },
2250
+ "node_modules/chokidar/node_modules/glob-parent": {
2251
+ "version": "5.1.2",
2252
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
2253
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
2254
+ "optional": true,
2255
+ "peer": true,
2256
+ "dependencies": {
2257
+ "is-glob": "^4.0.1"
2258
+ },
2259
+ "engines": {
2260
+ "node": ">= 6"
2261
+ }
2262
+ },
2263
  "node_modules/chownr": {
2264
  "version": "1.1.4",
2265
  "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
 
2268
  "node_modules/chromadb": {
2269
  "version": "1.5.2",
2270
  "resolved": "https://registry.npmjs.org/chromadb/-/chromadb-1.5.2.tgz",
2271
+ "integrity": "sha512-x/rOD7Oo1RiYA+vPK+Ma7CliCHlx26OjUt5J7Z9HZ5Ud1qDrPlvctBycK9Il3zqza96yeUoPQ7gCXHVKNoyvRQ==",
2272
+ "optional": true,
2273
+ "peer": true
2274
  },
2275
  "node_modules/client-only": {
2276
  "version": "0.0.1",
 
2280
  "node_modules/cohere-ai": {
2281
  "version": "5.1.0",
2282
  "resolved": "https://registry.npmjs.org/cohere-ai/-/cohere-ai-5.1.0.tgz",
2283
+ "integrity": "sha512-7q3z3w6GSoPxQqRL9G6QTaQ0e513auVE1JlNDnqnoFEXGtDbkVfaTOliR5qrMoK//74Csb0NW669evqngwPx3g==",
2284
+ "optional": true,
2285
+ "peer": true
2286
  },
2287
  "node_modules/color": {
2288
  "version": "4.2.3",
 
3932
  "node": ">= 4"
3933
  }
3934
  },
3935
+ "node_modules/immutable": {
3936
+ "version": "4.3.0",
3937
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz",
3938
+ "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==",
3939
+ "optional": true,
3940
+ "peer": true
3941
+ },
3942
  "node_modules/import-fresh": {
3943
  "version": "3.3.0",
3944
  "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
 
4043
  "url": "https://github.com/sponsors/ljharb"
4044
  }
4045
  },
4046
+ "node_modules/is-binary-path": {
4047
+ "version": "2.1.0",
4048
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
4049
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
4050
+ "optional": true,
4051
+ "peer": true,
4052
+ "dependencies": {
4053
+ "binary-extensions": "^2.0.0"
4054
+ },
4055
+ "engines": {
4056
+ "node": ">=8"
4057
+ }
4058
+ },
4059
  "node_modules/is-boolean-object": {
4060
  "version": "1.1.2",
4061
  "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
 
5152
  "node": ">=6"
5153
  }
5154
  },
5155
+ "node_modules/normalize-path": {
5156
+ "version": "3.0.0",
5157
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
5158
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
5159
+ "optional": true,
5160
+ "peer": true,
5161
+ "engines": {
5162
+ "node": ">=0.10.0"
5163
+ }
5164
+ },
5165
  "node_modules/normalize-range": {
5166
  "version": "0.1.2",
5167
  "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
 
5905
  "node": ">= 6"
5906
  }
5907
  },
5908
+ "node_modules/readdirp": {
5909
+ "version": "3.6.0",
5910
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
5911
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
5912
+ "optional": true,
5913
+ "peer": true,
5914
+ "dependencies": {
5915
+ "picomatch": "^2.2.1"
5916
+ },
5917
+ "engines": {
5918
+ "node": ">=8.10.0"
5919
+ }
5920
+ },
5921
  "node_modules/regenerator-runtime": {
5922
  "version": "0.13.11",
5923
  "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
 
6229
  "url": "https://github.com/sponsors/ljharb"
6230
  }
6231
  },
6232
+ "node_modules/sass": {
6233
+ "version": "1.63.3",
6234
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.3.tgz",
6235
+ "integrity": "sha512-ySdXN+DVpfwq49jG1+hmtDslYqpS7SkOR5GpF6o2bmb1RL/xS+wvPmegMvMywyfsmAV6p7TgwXYGrCZIFFbAHg==",
6236
+ "optional": true,
6237
+ "peer": true,
6238
+ "dependencies": {
6239
+ "chokidar": ">=3.0.0 <4.0.0",
6240
+ "immutable": "^4.0.0",
6241
+ "source-map-js": ">=0.6.2 <2.0.0"
6242
+ },
6243
+ "bin": {
6244
+ "sass": "sass.js"
6245
+ },
6246
+ "engines": {
6247
+ "node": ">=14.0.0"
6248
+ }
6249
+ },
6250
  "node_modules/scheduler": {
6251
  "version": "0.23.0",
6252
  "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
src/components/ChatWindow.jsx CHANGED
@@ -6,7 +6,8 @@ import {FileLoader} from './FileLoader';
6
  import Loader from "./Loader";
7
  import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter';
8
  import { XenovaTransformersEmbeddings } from '../embed/hf';
9
- import { MemoryVectorStore } from "langchain/vectorstores/memory";
 
10
  import {
11
  Button,
12
  TextInput,
@@ -117,7 +118,7 @@ function ChatWindow({
117
  {isReady && (
118
  <div>
119
  <form onSubmit={handleSubmit}>
120
- <div className="flex">
121
  <TextInput
122
  value={userInput}
123
  placeholder="Say something..."
@@ -135,15 +136,15 @@ function ChatWindow({
135
  </div>
136
 
137
  <div className="flex justify-start m-2">
138
- <div>
139
  <div>
140
  <Button
141
  onClick={handleSubmit}
142
  className="submit"
143
- style={{ height: "65px", width: "65px", float: "right" }}
144
  >
145
  <Image
146
- src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAiCAYAAABIiGl0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDQ2MCwgMjAyMC8wNS8xMi0xNjowNDoxNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjIgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjU3MUQ1NTRFMTdFQTExRUM5MDA1OTZFMzQ1Q0E2MTMxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjU3MUQ1NTRGMTdFQTExRUM5MDA1OTZFMzQ1Q0E2MTMxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NTcxRDU1NEMxN0VBMTFFQzkwMDU5NkUzNDVDQTYxMzEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NTcxRDU1NEQxN0VBMTFFQzkwMDU5NkUzNDVDQTYxMzEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz53k5gpAAACU0lEQVR42sRWAZKDIAyETn9k3wRv0jfBm7xsIEwuAtZee43DDKhhk+wadPu+u6sjpbQvy7Kv67q/4o/xklMIgUEBjjkC+TgwAB251WxbAFezv9MmLsaIzaZGmTkC8Nu2odTwwVruO9x/PB4IgN872+9yiTFgwrO2K9k/JSQBtEDCtTV5d8b9gT8BwRyOKMoSSERr+MWtmA3GZl8rdAD2jD4wcJ9ddgTK65xpFTPz2tY0wDG4HezB71jub+6CLXRhE55XYUFoMIirZwDEQABaxJwxOe2yoVYx7sEhpMCgW9yG2ZGiWxCTCvKeXLGZsMARD+IY/Ooh6hYTlYuqsa7i6nI/5BhVQPmQrXBb612+21i+Z8yttUoZLehqDoHRDChTh+FyAWwbb7lwmguHAnBWevhUofnbiZqKA2W3PcqIPjJwWIqwsBFArEakm1ngFuS0H8uVCi/qOz68rzpW41zrQDWbfucSUAhqNZeIrAcuQKpjteai2uuxc4kjK5a6VAOrqtbgs3aos9fHp33/mGVaf4PWtscBpdDuj1qhPlDMp+e6wBxlvQAgoBKpBMfgqczPfgAk6+khISUWHnsOwiGp/fT0efpYlE3PfmX++q/11On0Sbu5L9nXgO/tfPR+V/9h/p0gsrfe924eYM5r/dIoKH2/F7B9Xr9rfyg1QOEsn5cNarBZ95n163LcycJLZDooE/nwj/mSuGYltKfY21QNIMtrL/LKv7PVeBlYAHu8qGeaz9O0rd8hCVM6vfAT7nqV8WY+qpzvAf+b+VHZ3t1ErP0IMAAwT6EpM/krMwAAAABJRU5ErkJggg=="
147
  alt="Send Message"
148
  style={{
149
  filter:
@@ -170,7 +171,7 @@ function ChatWindow({
170
  marginTop: "2px",
171
  }}
172
  ></div>
173
- </div>
174
  </div>
175
  </div>
176
  )}
 
6
  import Loader from "./Loader";
7
  import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter';
8
  import { XenovaTransformersEmbeddings } from '../embed/hf';
9
+ import { MemoryVectorStore } from "langchain/vectorstores/memory";
10
+
11
  import {
12
  Button,
13
  TextInput,
 
118
  {isReady && (
119
  <div>
120
  <form onSubmit={handleSubmit}>
121
+ <div className="flex" style={{ color: 'white', textarea: { color: 'white' } }}>
122
  <TextInput
123
  value={userInput}
124
  placeholder="Say something..."
 
136
  </div>
137
 
138
  <div className="flex justify-start m-2">
139
+
140
  <div>
141
  <Button
142
  onClick={handleSubmit}
143
  className="submit"
144
+ style={{ backgroundColor: "black", height: "65px", width: "65px", float: "right" }}
145
  >
146
  <Image
147
+ src="data:image/png;base64,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"
148
  alt="Send Message"
149
  style={{
150
  filter:
 
171
  marginTop: "2px",
172
  }}
173
  ></div>
174
+
175
  </div>
176
  </div>
177
  )}
src/components/Loader.jsx CHANGED
@@ -25,37 +25,24 @@ const Loader = () => {
25
  <div
26
  style={{
27
  display: "flex",
28
- alignItems: "center",
29
  flexDirection: "column",
30
  gap: "10px",
31
  fontSize: "24px",
32
- textAlign: "center",
33
- fontFamily: "\"Comic Sans MS\", cursive, sans-serif;"
34
  }}
35
  >
36
- <div className="lg:hidden">
37
- <h1 className="p-1">
38
- <b>πŸ’Ž web-llm-embed πŸ“„</b>
39
  </h1>
40
- <p className="p-1">
41
- Proof of concept using Transformers.js embeddings in a WebGPU powered LLM chat.
42
- </p>
43
- <p className="p-1">
44
- No data is sent to the server. Conversations are cached in local
45
- storage.
46
- </p>
47
- <p className="p-1">
48
- WebGPU is only supported in Desktop Google Chrome 113
49
- </p>
50
- <p className="p-1">
51
- Powered by Apache TVM and MLC Relax Runtime.
52
- </p>
53
- <p className="p-1">
54
- Model is Vicuna 7b trained by LMSys.
55
- </p>
56
  </div>
57
  <div>
58
- This will download the model (~4GB) and may take a few minutes. After the
59
  first time, it will be cached.
60
  </div>
61
 
 
25
  <div
26
  style={{
27
  display: "flex",
28
+ alignItems: "left",
29
  flexDirection: "column",
30
  gap: "10px",
31
  fontSize: "24px",
32
+ textAlign: "left",
33
+ fontFamily: "Arial"
34
  }}
35
  >
36
+ <div>
37
+ <h1 className="p-1">
38
+ <b>web-llm-embed</b>
39
  </h1>
40
+ <div>
41
+ πŸ’Ž Edge based document chat. No data is sent to the server. Model is Vicuna 7b trained by LMSys.
42
+ </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  </div>
44
  <div>
45
+ πŸ“„ This will download the model (~4GB) and may take a few minutes. After the
46
  first time, it will be cached.
47
  </div>
48
 
src/components/MessageList.jsx CHANGED
@@ -1,6 +1,5 @@
1
  import useLLM from "@react-llm/headless";
2
  import { useEffect, useRef } from "react";
3
- import { ScrollView } from "react95";
4
 
5
  function MessageList({
6
  screenName = "endlessbox5",
@@ -21,31 +20,33 @@ function MessageList({
21
  }, [conversation, messages.length]);
22
 
23
  return (
24
- <ScrollView style={{ height: "65vh" }} className="w-full">
25
  <div className="p-2 leading-6 w-full min-h-full">
26
  {conversation?.messages.map((m) => (
27
  <div key={m.id} style={{ display: "flex" }}>
28
  <div
29
  style={{
30
- padding: "2px",
31
- borderRadius: "5px",
 
 
32
  }}
33
  >
34
  <span
35
  style={{
36
  fontWeight: "bold",
37
- color: m.role === userRoleName ? "blue" : "red",
38
  }}
39
  >
40
- {m.role === userRoleName ? screenName : assistantScreenName}
41
  </span>
42
- : {m.text}
43
  </div>
44
  </div>
45
  ))}
46
  <div ref={scrollRef}></div>
47
  </div>
48
- </ScrollView>
49
  );
50
  }
51
 
 
1
  import useLLM from "@react-llm/headless";
2
  import { useEffect, useRef } from "react";
 
3
 
4
  function MessageList({
5
  screenName = "endlessbox5",
 
20
  }, [conversation, messages.length]);
21
 
22
  return (
23
+ <div style={{ height: "65vh" }} className="w-full">
24
  <div className="p-2 leading-6 w-full min-h-full">
25
  {conversation?.messages.map((m) => (
26
  <div key={m.id} style={{ display: "flex" }}>
27
  <div
28
  style={{
29
+ padding: "12px",
30
+ margin: "5px",
31
+ borderRadius: "15px",
32
+ backgroundColor: m.role === userRoleName ? "green": "#333333"
33
  }}
34
  >
35
  <span
36
  style={{
37
  fontWeight: "bold",
38
+ color: m.role === userRoleName ? "white" : "#999999",
39
  }}
40
  >
41
+ {m.role === userRoleName ? `` : `${assistantScreenName}: `}
42
  </span>
43
+ {m.text}
44
  </div>
45
  </div>
46
  ))}
47
  <div ref={scrollRef}></div>
48
  </div>
49
+ </div>
50
  );
51
  }
52
 
src/pages/_app.tsx CHANGED
@@ -1,5 +1,6 @@
1
  import Head from "next/head";
2
  import { AppProps } from "next/app";
 
3
 
4
  export interface MyAppProps extends AppProps {
5
  emotionCache?: any;
 
1
  import Head from "next/head";
2
  import { AppProps } from "next/app";
3
+ import '../styles.css'
4
 
5
  export interface MyAppProps extends AppProps {
6
  emotionCache?: any;
src/styles.css ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ body {
2
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
3
+ background-color: black;
4
+ color: white;
5
+ }
6
+
7
+ textarea {
8
+ color: white;
9
+ }