Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
Administrator
/
chatgpt.ai-pro.org
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
3
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
66c9f735
authored
2024-09-16 15:31:35 +0800
by
Bryan Batac
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
- Added Redis
- Modifed the getmodel implementation
1 parent
d6d461cd
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
633 additions
and
52 deletions
client/package-lock.json
client/src/App.js
index.js
package-lock.json
package.json
client/package-lock.json
View file @
66c9f73
...
...
@@ -11,9 +11,11 @@
"@testing-library/jest-dom"
:
"^5.16.5"
,
"@testing-library/react"
:
"^13.4.0"
,
"@testing-library/user-event"
:
"^13.5.0"
,
"js-cookie"
:
"^3.0.5"
,
"react"
:
"^18.2.0"
,
"react-dom"
:
"^18.2.0"
,
"react-scripts"
:
"5.0.1"
,
"serve"
:
"^14.2.1"
,
"web-vitals"
:
"^2.1.4"
},
"devDependencies"
:
{
...
...
@@ -4641,6 +4643,11 @@
"resolved"
:
"https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz"
,
"integrity"
:
"sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="
},
"node_modules/@zeit/schemas"
:
{
"version"
:
"2.36.0"
,
"resolved"
:
"https://registry.npmjs.org/@zeit/schemas/-/schemas-2.36.0.tgz"
,
"integrity"
:
"sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg=="
},
"node_modules/abab"
:
{
"version"
:
"2.0.6"
,
"resolved"
:
"https://registry.npmjs.org/abab/-/abab-2.0.6.tgz"
,
...
...
@@ -4796,6 +4803,14 @@
}
}
},
"node_modules/ansi-align"
:
{
"version"
:
"3.0.1"
,
"resolved"
:
"https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz"
,
"integrity"
:
"sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w=="
,
"dependencies"
:
{
"string-width"
:
"^4.1.0"
}
},
"node_modules/ansi-escapes"
:
{
"version"
:
"4.3.2"
,
"resolved"
:
"https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz"
,
...
...
@@ -4866,6 +4881,25 @@
"node"
:
">= 8"
}
},
"node_modules/arch"
:
{
"version"
:
"2.2.0"
,
"resolved"
:
"https://registry.npmjs.org/arch/-/arch-2.2.0.tgz"
,
"integrity"
:
"sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ=="
,
"funding"
:
[
{
"type"
:
"github"
,
"url"
:
"https://github.com/sponsors/feross"
},
{
"type"
:
"patreon"
,
"url"
:
"https://www.patreon.com/feross"
},
{
"type"
:
"consulting"
,
"url"
:
"https://feross.org/support"
}
]
},
"node_modules/arg"
:
{
"version"
:
"5.0.2"
,
"resolved"
:
"https://registry.npmjs.org/arg/-/arg-5.0.2.tgz"
,
...
...
@@ -5456,6 +5490,128 @@
"resolved"
:
"https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz"
,
"integrity"
:
"sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
},
"node_modules/boxen"
:
{
"version"
:
"7.0.0"
,
"resolved"
:
"https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz"
,
"integrity"
:
"sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg=="
,
"dependencies"
:
{
"ansi-align"
:
"^3.0.1"
,
"camelcase"
:
"^7.0.0"
,
"chalk"
:
"^5.0.1"
,
"cli-boxes"
:
"^3.0.0"
,
"string-width"
:
"^5.1.2"
,
"type-fest"
:
"^2.13.0"
,
"widest-line"
:
"^4.0.1"
,
"wrap-ansi"
:
"^8.0.1"
},
"engines"
:
{
"node"
:
">=14.16"
},
"funding"
:
{
"url"
:
"https://github.com/sponsors/sindresorhus"
}
},
"node_modules/boxen/node_modules/ansi-regex"
:
{
"version"
:
"6.1.0"
,
"resolved"
:
"https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz"
,
"integrity"
:
"sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="
,
"engines"
:
{
"node"
:
">=12"
},
"funding"
:
{
"url"
:
"https://github.com/chalk/ansi-regex?sponsor=1"
}
},
"node_modules/boxen/node_modules/ansi-styles"
:
{
"version"
:
"6.2.1"
,
"resolved"
:
"https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz"
,
"integrity"
:
"sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="
,
"engines"
:
{
"node"
:
">=12"
},
"funding"
:
{
"url"
:
"https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/boxen/node_modules/camelcase"
:
{
"version"
:
"7.0.1"
,
"resolved"
:
"https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz"
,
"integrity"
:
"sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw=="
,
"engines"
:
{
"node"
:
">=14.16"
},
"funding"
:
{
"url"
:
"https://github.com/sponsors/sindresorhus"
}
},
"node_modules/boxen/node_modules/chalk"
:
{
"version"
:
"5.3.0"
,
"resolved"
:
"https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz"
,
"integrity"
:
"sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w=="
,
"engines"
:
{
"node"
:
"^12.17.0 || ^14.13 || >=16.0.0"
},
"funding"
:
{
"url"
:
"https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/boxen/node_modules/string-width"
:
{
"version"
:
"5.1.2"
,
"resolved"
:
"https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz"
,
"integrity"
:
"sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="
,
"dependencies"
:
{
"eastasianwidth"
:
"^0.2.0"
,
"emoji-regex"
:
"^9.2.2"
,
"strip-ansi"
:
"^7.0.1"
},
"engines"
:
{
"node"
:
">=12"
},
"funding"
:
{
"url"
:
"https://github.com/sponsors/sindresorhus"
}
},
"node_modules/boxen/node_modules/strip-ansi"
:
{
"version"
:
"7.1.0"
,
"resolved"
:
"https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz"
,
"integrity"
:
"sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="
,
"dependencies"
:
{
"ansi-regex"
:
"^6.0.1"
},
"engines"
:
{
"node"
:
">=12"
},
"funding"
:
{
"url"
:
"https://github.com/chalk/strip-ansi?sponsor=1"
}
},
"node_modules/boxen/node_modules/type-fest"
:
{
"version"
:
"2.19.0"
,
"resolved"
:
"https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz"
,
"integrity"
:
"sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA=="
,
"engines"
:
{
"node"
:
">=12.20"
},
"funding"
:
{
"url"
:
"https://github.com/sponsors/sindresorhus"
}
},
"node_modules/boxen/node_modules/wrap-ansi"
:
{
"version"
:
"8.1.0"
,
"resolved"
:
"https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz"
,
"integrity"
:
"sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="
,
"dependencies"
:
{
"ansi-styles"
:
"^6.1.0"
,
"string-width"
:
"^5.0.1"
,
"strip-ansi"
:
"^7.0.1"
},
"engines"
:
{
"node"
:
">=12"
},
"funding"
:
{
"url"
:
"https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"node_modules/brace-expansion"
:
{
"version"
:
"1.1.11"
,
"resolved"
:
"https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"
,
...
...
@@ -5639,6 +5795,35 @@
"node"
:
">=8"
}
},
"node_modules/chalk-template"
:
{
"version"
:
"0.4.0"
,
"resolved"
:
"https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz"
,
"integrity"
:
"sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg=="
,
"dependencies"
:
{
"chalk"
:
"^4.1.2"
},
"engines"
:
{
"node"
:
">=12"
},
"funding"
:
{
"url"
:
"https://github.com/chalk/chalk-template?sponsor=1"
}
},
"node_modules/chalk-template/node_modules/chalk"
:
{
"version"
:
"4.1.2"
,
"resolved"
:
"https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"
,
"integrity"
:
"sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="
,
"dependencies"
:
{
"ansi-styles"
:
"^4.1.0"
,
"supports-color"
:
"^7.1.0"
},
"engines"
:
{
"node"
:
">=10"
},
"funding"
:
{
"url"
:
"https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/char-regex"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz"
,
...
...
@@ -5735,6 +5920,33 @@
"node"
:
">=0.10.0"
}
},
"node_modules/cli-boxes"
:
{
"version"
:
"3.0.0"
,
"resolved"
:
"https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz"
,
"integrity"
:
"sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g=="
,
"engines"
:
{
"node"
:
">=10"
},
"funding"
:
{
"url"
:
"https://github.com/sponsors/sindresorhus"
}
},
"node_modules/clipboardy"
:
{
"version"
:
"3.0.0"
,
"resolved"
:
"https://registry.npmjs.org/clipboardy/-/clipboardy-3.0.0.tgz"
,
"integrity"
:
"sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg=="
,
"dependencies"
:
{
"arch"
:
"^2.2.0"
,
"execa"
:
"^5.1.1"
,
"is-wsl"
:
"^2.2.0"
},
"engines"
:
{
"node"
:
"^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding"
:
{
"url"
:
"https://github.com/sponsors/sindresorhus"
}
},
"node_modules/cliui"
:
{
"version"
:
"7.0.4"
,
"resolved"
:
"https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz"
,
...
...
@@ -6501,6 +6713,14 @@
"url"
:
"https://github.com/sponsors/ljharb"
}
},
"node_modules/deep-extend"
:
{
"version"
:
"0.6.0"
,
"resolved"
:
"https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz"
,
"integrity"
:
"sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
,
"engines"
:
{
"node"
:
">=4.0.0"
}
},
"node_modules/deep-is"
:
{
"version"
:
"0.1.4"
,
"resolved"
:
"https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz"
,
...
...
@@ -6818,6 +7038,11 @@
"resolved"
:
"https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz"
,
"integrity"
:
"sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg=="
},
"node_modules/eastasianwidth"
:
{
"version"
:
"0.2.0"
,
"resolved"
:
"https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz"
,
"integrity"
:
"sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
},
"node_modules/ee-first"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz"
,
...
...
@@ -7902,6 +8127,19 @@
"resolved"
:
"https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"
,
"integrity"
:
"sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
},
"node_modules/fast-url-parser"
:
{
"version"
:
"1.1.3"
,
"resolved"
:
"https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz"
,
"integrity"
:
"sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ=="
,
"dependencies"
:
{
"punycode"
:
"^1.3.2"
}
},
"node_modules/fast-url-parser/node_modules/punycode"
:
{
"version"
:
"1.4.1"
,
"resolved"
:
"https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz"
,
"integrity"
:
"sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ=="
},
"node_modules/fastq"
:
{
"version"
:
"1.15.0"
,
"resolved"
:
"https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz"
,
...
...
@@ -9293,6 +9531,17 @@
"url"
:
"https://github.com/sponsors/sindresorhus"
}
},
"node_modules/is-port-reachable"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-4.0.0.tgz"
,
"integrity"
:
"sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig=="
,
"engines"
:
{
"node"
:
"^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding"
:
{
"url"
:
"https://github.com/sponsors/sindresorhus"
}
},
"node_modules/is-potential-custom-element-name"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz"
,
...
...
@@ -11918,6 +12167,14 @@
"node"
:
"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
"node_modules/js-cookie"
:
{
"version"
:
"3.0.5"
,
"resolved"
:
"https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz"
,
"integrity"
:
"sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw=="
,
"engines"
:
{
"node"
:
">=14"
}
},
"node_modules/js-sdsl"
:
{
"version"
:
"4.3.0"
,
"resolved"
:
"https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz"
,
...
...
@@ -12948,6 +13205,11 @@
"node"
:
">=0.10.0"
}
},
"node_modules/path-is-inside"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz"
,
"integrity"
:
"sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w=="
},
"node_modules/path-key"
:
{
"version"
:
"3.1.1"
,
"resolved"
:
"https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz"
,
...
...
@@ -14599,6 +14861,28 @@
"node"
:
">= 0.8"
}
},
"node_modules/rc"
:
{
"version"
:
"1.2.8"
,
"resolved"
:
"https://registry.npmjs.org/rc/-/rc-1.2.8.tgz"
,
"integrity"
:
"sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="
,
"dependencies"
:
{
"deep-extend"
:
"^0.6.0"
,
"ini"
:
"~1.3.0"
,
"minimist"
:
"^1.2.0"
,
"strip-json-comments"
:
"~2.0.1"
},
"bin"
:
{
"rc"
:
"cli.js"
}
},
"node_modules/rc/node_modules/strip-json-comments"
:
{
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz"
,
"integrity"
:
"sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="
,
"engines"
:
{
"node"
:
">=0.10.0"
}
},
"node_modules/react"
:
{
"version"
:
"18.2.0"
,
"resolved"
:
"https://registry.npmjs.org/react/-/react-18.2.0.tgz"
,
...
...
@@ -14928,6 +15212,26 @@
"node"
:
">=4"
}
},
"node_modules/registry-auth-token"
:
{
"version"
:
"3.3.2"
,
"resolved"
:
"https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz"
,
"integrity"
:
"sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ=="
,
"dependencies"
:
{
"rc"
:
"^1.1.6"
,
"safe-buffer"
:
"^5.0.1"
}
},
"node_modules/registry-url"
:
{
"version"
:
"3.1.0"
,
"resolved"
:
"https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz"
,
"integrity"
:
"sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA=="
,
"dependencies"
:
{
"rc"
:
"^1.0.1"
},
"engines"
:
{
"node"
:
">=0.10.0"
}
},
"node_modules/regjsgen"
:
{
"version"
:
"0.7.1"
,
"resolved"
:
"https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz"
,
...
...
@@ -15520,6 +15824,85 @@
"randombytes"
:
"^2.1.0"
}
},
"node_modules/serve"
:
{
"version"
:
"14.2.3"
,
"resolved"
:
"https://registry.npmjs.org/serve/-/serve-14.2.3.tgz"
,
"integrity"
:
"sha512-VqUFMC7K3LDGeGnJM9h56D3XGKb6KGgOw0cVNtA26yYXHCcpxf3xwCTUaQoWlVS7i8Jdh3GjQkOB23qsXyjoyQ=="
,
"dependencies"
:
{
"@zeit/schemas"
:
"2.36.0"
,
"ajv"
:
"8.12.0"
,
"arg"
:
"5.0.2"
,
"boxen"
:
"7.0.0"
,
"chalk"
:
"5.0.1"
,
"chalk-template"
:
"0.4.0"
,
"clipboardy"
:
"3.0.0"
,
"compression"
:
"1.7.4"
,
"is-port-reachable"
:
"4.0.0"
,
"serve-handler"
:
"6.1.5"
,
"update-check"
:
"1.5.4"
},
"bin"
:
{
"serve"
:
"build/main.js"
},
"engines"
:
{
"node"
:
">= 14"
}
},
"node_modules/serve-handler"
:
{
"version"
:
"6.1.5"
,
"resolved"
:
"https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz"
,
"integrity"
:
"sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg=="
,
"dependencies"
:
{
"bytes"
:
"3.0.0"
,
"content-disposition"
:
"0.5.2"
,
"fast-url-parser"
:
"1.1.3"
,
"mime-types"
:
"2.1.18"
,
"minimatch"
:
"3.1.2"
,
"path-is-inside"
:
"1.0.2"
,
"path-to-regexp"
:
"2.2.1"
,
"range-parser"
:
"1.2.0"
}
},
"node_modules/serve-handler/node_modules/content-disposition"
:
{
"version"
:
"0.5.2"
,
"resolved"
:
"https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz"
,
"integrity"
:
"sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA=="
,
"engines"
:
{
"node"
:
">= 0.6"
}
},
"node_modules/serve-handler/node_modules/mime-db"
:
{
"version"
:
"1.33.0"
,
"resolved"
:
"https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz"
,
"integrity"
:
"sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ=="
,
"engines"
:
{
"node"
:
">= 0.6"
}
},
"node_modules/serve-handler/node_modules/mime-types"
:
{
"version"
:
"2.1.18"
,
"resolved"
:
"https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz"
,
"integrity"
:
"sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ=="
,
"dependencies"
:
{
"mime-db"
:
"~1.33.0"
},
"engines"
:
{
"node"
:
">= 0.6"
}
},
"node_modules/serve-handler/node_modules/path-to-regexp"
:
{
"version"
:
"2.2.1"
,
"resolved"
:
"https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz"
,
"integrity"
:
"sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ=="
},
"node_modules/serve-handler/node_modules/range-parser"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz"
,
"integrity"
:
"sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A=="
,
"engines"
:
{
"node"
:
">= 0.6"
}
},
"node_modules/serve-index"
:
{
"version"
:
"1.9.1"
,
"resolved"
:
"https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz"
,
...
...
@@ -15604,6 +15987,17 @@
"node"
:
">= 0.8.0"
}
},
"node_modules/serve/node_modules/chalk"
:
{
"version"
:
"5.0.1"
,
"resolved"
:
"https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz"
,
"integrity"
:
"sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w=="
,
"engines"
:
{
"node"
:
"^12.17.0 || ^14.13 || >=16.0.0"
},
"funding"
:
{
"url"
:
"https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/setprototypeof"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz"
,
...
...
@@ -16638,6 +17032,15 @@
"browserslist"
:
">= 4.21.0"
}
},
"node_modules/update-check"
:
{
"version"
:
"1.5.4"
,
"resolved"
:
"https://registry.npmjs.org/update-check/-/update-check-1.5.4.tgz"
,
"integrity"
:
"sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ=="
,
"dependencies"
:
{
"registry-auth-token"
:
"3.3.2"
,
"registry-url"
:
"3.1.0"
}
},
"node_modules/uri-js"
:
{
"version"
:
"4.4.1"
,
"resolved"
:
"https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz"
,
...
...
@@ -17159,6 +17562,61 @@
"url"
:
"https://github.com/sponsors/ljharb"
}
},
"node_modules/widest-line"
:
{
"version"
:
"4.0.1"
,
"resolved"
:
"https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz"
,
"integrity"
:
"sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig=="
,
"dependencies"
:
{
"string-width"
:
"^5.0.1"
},
"engines"
:
{
"node"
:
">=12"
},
"funding"
:
{
"url"
:
"https://github.com/sponsors/sindresorhus"
}
},
"node_modules/widest-line/node_modules/ansi-regex"
:
{
"version"
:
"6.1.0"
,
"resolved"
:
"https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz"
,
"integrity"
:
"sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="
,
"engines"
:
{
"node"
:
">=12"
},
"funding"
:
{
"url"
:
"https://github.com/chalk/ansi-regex?sponsor=1"
}
},
"node_modules/widest-line/node_modules/string-width"
:
{
"version"
:
"5.1.2"
,
"resolved"
:
"https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz"
,
"integrity"
:
"sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="
,
"dependencies"
:
{
"eastasianwidth"
:
"^0.2.0"
,
"emoji-regex"
:
"^9.2.2"
,
"strip-ansi"
:
"^7.0.1"
},
"engines"
:
{
"node"
:
">=12"
},
"funding"
:
{
"url"
:
"https://github.com/sponsors/sindresorhus"
}
},
"node_modules/widest-line/node_modules/strip-ansi"
:
{
"version"
:
"7.1.0"
,
"resolved"
:
"https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz"
,
"integrity"
:
"sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="
,
"dependencies"
:
{
"ansi-regex"
:
"^6.0.1"
},
"engines"
:
{
"node"
:
">=12"
},
"funding"
:
{
"url"
:
"https://github.com/chalk/strip-ansi?sponsor=1"
}
},
"node_modules/word-wrap"
:
{
"version"
:
"1.2.3"
,
"resolved"
:
"https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz"
,
...
...
client/src/App.js
View file @
66c9f73
...
...
@@ -17,7 +17,6 @@ function App() {
const
[
models
,
setModels
]
=
useState
([]);
const
[
temperature
,
setTemperature
]
=
useState
(
0.7
);
const
GPTTurbo
=
"gpt-3.5-turbo"
;
const
GPTTurbo0301
=
"gpt-3.5-turbo-0301"
;
const
[
currentModel
,
setCurrentModel
]
=
useState
(
GPTTurbo
);
const
[
chatLog
,
setChatLog
]
=
useState
([{
user
:
"gpt"
,
...
...
@@ -79,6 +78,11 @@ function App() {
submitPrompt
();
}
const
getEndpoint
=
(
modelName
)
=>
{
const
model
=
models
.
find
((
m
)
=>
m
.
id
===
modelName
);
return
model
?
model
.
endpoint
:
null
;
};
async
function
submitPrompt
()
{
const
TPLogicRun
=
window
.
TPLogicRun
;
...
...
@@ -112,16 +116,13 @@ function App() {
setChatLog
(
prevChatLog
=>
[...
prevChatLog
,
userMessage
]);
var
messages
=
chatLogNew
.
map
((
message
)
=>
{
if
(
message
.
user
!==
'me'
)
return
message
.
message
}).
join
(
"\n"
)
if
(
currentModel
===
GPTTurbo
||
currentModel
===
GPTTurbo0301
)
{
// "gpt-3.5-turbo"
let
endpoint
=
getEndpoint
(
currentModel
);
if
(
endpoint
===
"openAI"
)
{
let
chatLogTurboNew
=
[...
chatLogTurbo
,
{
role
:
"user"
,
content
:
chatInput
}];
setChatLogTurbo
(
chatLogTurboNew
);
messages
=
JSON
.
stringify
(
chatLogTurboNew
);
}
if
(
currentModel
===
"openchat_3.5"
||
currentModel
===
"zephyr-7B-beta"
||
currentModel
===
"meta-llama/Llama-3-8b-chat-hf"
||
currentModel
===
"google/gemma-2-9b-it"
)
{
// "gpt-3.5-turbo"
if
(
endpoint
===
"Llama"
||
endpoint
===
"Opensource"
)
{
let
chatLogOpenSourceNew
=
[...
chatLogOpenSource
,
{
role
:
"user"
,
content
:
chatInput
}];
setChatLogOpenSource
(
chatLogOpenSourceNew
);
messages
=
JSON
.
stringify
(
chatLogOpenSourceNew
);
...
...
index.js
View file @
66c9f73
...
...
@@ -3,6 +3,7 @@ const express = require('express')
const
bodyParser
=
require
(
'body-parser'
)
const
cookieParser
=
require
(
"cookie-parser"
)
const
cors
=
require
(
'cors'
)
const
{
createClient
}
=
require
(
'redis'
)
require
(
'dotenv'
).
config
()
const
rateLimit
=
require
(
'express-rate-limit'
)
const
fetch
=
require
(
'node-fetch'
);
...
...
@@ -48,6 +49,10 @@ const tiktokenModels = [
'gpt-3.5-turbo-0301'
];
let
client
;
let
filteredModels
=
{};
const
allowedEndpoints
=
[
"openAI"
,
"Opensource"
,
"Llama"
];
// Open AI Configuration
// console.log(process.env.OPENAI_API_ORG)
const
configuration
=
new
Configuration
({
...
...
@@ -85,18 +90,20 @@ app.post('/api', async (req, res) => {
return
;
}
const
{
message
,
currentModel
,
temperature
}
=
req
.
body
;
const
getEndpoint
=
(
modelName
)
=>
{
const
model
=
Object
.
values
(
filteredModels
).
find
(
m
=>
m
.
model
===
modelName
);
return
model
?
model
.
endpoint
:
'Endpoint not found'
;
};
if
(
currentModel
==
"gpt-3.5-turbo"
||
currentModel
==
"gpt-3.5-turbo-0301"
)
{
runGPTTurbo
(
req
,
res
);
const
endpoint
=
getEndpoint
(
currentModel
);
if
(
endpoint
==
"openAI"
)
{
runGPTTurbo
(
req
,
res
);
return
;
}
if
(
currentModel
==
"openchat_3.5"
||
currentModel
==
"zephyr-7B-beta"
||
currentModel
==
"google/gemma-2-9b-it"
||
currentModel
==
"meta-llama/Llama-3-8b-chat-hf"
)
{
if
(
endpoint
==
"Llama"
||
endpoint
==
"Opensource"
)
{
runOpensource
(
req
,
res
);
return
;
}
...
...
@@ -267,18 +274,6 @@ async function runGPTTurbo(req, res) {
}
}
const
get_endpoint_api_url
=
(
currentModel
)
=>
{
const
OPENSOURCE_ENDPOINTS
=
process
.
env
.
OPENSOURCE_ENDPOINTS
;
const
endpoints
=
JSON
.
parse
(
OPENSOURCE_ENDPOINTS
);
const
endpoint_api_url
=
endpoints
?.[
currentModel
];
return
endpoint_api_url
}
const
get_endpoint_api_key
=
(
currentModel
)
=>
{
const
OPENSOURCE_API_KEY
=
process
.
env
.
OPENSOURCE_API_KEY
;
const
api_keys
=
JSON
.
parse
(
OPENSOURCE_API_KEY
);
const
key
=
api_keys
?.[
currentModel
];
return
key
}
async
function
runOpensource
(
req
,
res
)
{
const
{
message
,
currentModel
,
temperature
,
P6XcW47o
:
together_ai_response
=
null
}
=
req
.
body
;
var
input
=
''
;
...
...
@@ -294,9 +289,9 @@ async function runOpensource(req, res) {
try
{
let
error_msg
=
""
;
const
endpoint_api_url
=
get_endpoint_api_url
(
currentModel
)
;
const
api_key
=
get_endpoint_api_key
(
currentModel
)
;
const
response
=
await
axios
.
post
(
endpoint_api_url
+
'/chat/completions'
,
{
const
endpoint_api_url
=
process
.
env
.
OPENSOURCE_ENDPOINTS
;
const
api_key
=
OPENSOURCE_API_KEY
;
const
response
=
await
axios
.
post
(
endpoint_api_url
,
{
model
:
currentModel
,
messages
:
JSON
.
parse
(
message
),
max_tokens
:
2048
,
...
...
@@ -525,31 +520,17 @@ const getClientIP = (req) => {
// Get Models Route
app
.
get
(
'/models'
,
async
(
req
,
res
)
=>
{
const
openai_models
=
process
.
env
.
OPENAI_MODELS
?
JSON
.
parse
(
process
.
env
.
OPENAI_MODELS
)
:
[{
"value"
:
"gpt-3.5-turbo"
,
"label"
:
"GPT-3.5"
}];
const
opensource_models
=
process
.
env
.
OPENSOURCE_MODELS
?
JSON
.
parse
(
process
.
env
.
OPENSOURCE_MODELS
)
:
[];
await
getModels
()
const
models
=
{
data
:
[]
data
:
Object
.
values
(
filteredModels
).
map
((
model
)
=>
({
id
:
model
.
model
,
label
:
model
.
name
,
name
:
model
.
name
,
beta
:
model
.
isBeta
,
endpoint
:
model
.
endpoint
}))
};
openai_models
.
forEach
((
model
)
=>
{
models
.
data
.
push
({
id
:
model
.
value
,
label
:
model
.
label
,
name
:
model
.
label
,
beta
:
false
,
});
})
opensource_models
.
forEach
((
model
)
=>
{
models
.
data
.
push
({
id
:
model
.
value
,
label
:
model
.
label
,
name
:
model
.
label
,
beta
:
true
,
});
})
res
.
json
({
models
})
...
...
@@ -559,3 +540,52 @@ app.get('/models', async (req, res) => {
app
.
listen
(
port
,
()
=>
{
console
.
log
(
`Example app listening at http://localhost:
${
port
}
`
)
});
const
initializeRedisClient
=
()
=>
{
const
newClient
=
createClient
({
socket
:
{
host
:
process
.
env
.
REDIS_HOST
,
port
:
process
.
env
.
REDIS_PORT
,
},
username
:
process
.
env
.
REDIS_USER
,
password
:
process
.
env
.
REDIS_PASS
,
});
newClient
.
on
(
'error'
,
(
err
)
=>
{
console
.
error
(
'Redis error:'
,
err
);
});
return
newClient
;
};
const
fetchAndFilterModels
=
async
(
client
)
=>
{
try
{
await
client
.
select
(
process
.
env
.
REDIS_DB
);
const
models
=
await
client
.
get
(
'model'
);
return
Object
.
entries
(
JSON
.
parse
(
models
))
.
filter
(([
_
,
value
])
=>
allowedEndpoints
.
includes
(
value
.
endpoint
))
.
reduce
((
acc
,
[
key
,
value
])
=>
{
acc
[
key
]
=
value
;
return
acc
;
},
{});
}
catch
(
err
)
{
console
.
error
(
'Error fetching and filtering models:'
,
err
);
throw
err
;
}
};
const
getModels
=
async
()
=>
{
if
(
!
client
)
{
client
=
initializeRedisClient
();
try
{
await
client
.
connect
();
filteredModels
=
await
fetchAndFilterModels
(
client
);
console
.
log
(
'Connected to Redis successfully'
);
}
catch
(
err
)
{
console
.
error
(
'Error connecting to Redis:'
,
err
);
throw
err
;
}
}
};
\ No newline at end of file
...
...
package-lock.json
View file @
66c9f73
...
...
@@ -21,7 +21,61 @@
"js-tiktoken"
:
"1.0.7"
,
"morgan"
:
"^1.10.0"
,
"node-fetch"
:
"^2.7.0"
,
"openai"
:
"^3.2.0"
"openai"
:
"^3.2.0"
,
"redis"
:
"^4.7.0"
}
},
"node_modules/@redis/bloom"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/@redis/bloom/-/bloom-1.2.0.tgz"
,
"integrity"
:
"sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg=="
,
"peerDependencies"
:
{
"@redis/client"
:
"^1.0.0"
}
},
"node_modules/@redis/client"
:
{
"version"
:
"1.6.0"
,
"resolved"
:
"https://registry.npmjs.org/@redis/client/-/client-1.6.0.tgz"
,
"integrity"
:
"sha512-aR0uffYI700OEEH4gYnitAnv3vzVGXCFvYfdpu/CJKvk4pHfLPEy/JSZyrpQ+15WhXe1yJRXLtfQ84s4mEXnPg=="
,
"dependencies"
:
{
"cluster-key-slot"
:
"1.1.2"
,
"generic-pool"
:
"3.9.0"
,
"yallist"
:
"4.0.0"
},
"engines"
:
{
"node"
:
">=14"
}
},
"node_modules/@redis/graph"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/@redis/graph/-/graph-1.1.1.tgz"
,
"integrity"
:
"sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw=="
,
"peerDependencies"
:
{
"@redis/client"
:
"^1.0.0"
}
},
"node_modules/@redis/json"
:
{
"version"
:
"1.0.7"
,
"resolved"
:
"https://registry.npmjs.org/@redis/json/-/json-1.0.7.tgz"
,
"integrity"
:
"sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ=="
,
"peerDependencies"
:
{
"@redis/client"
:
"^1.0.0"
}
},
"node_modules/@redis/search"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/@redis/search/-/search-1.2.0.tgz"
,
"integrity"
:
"sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw=="
,
"peerDependencies"
:
{
"@redis/client"
:
"^1.0.0"
}
},
"node_modules/@redis/time-series"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@redis/time-series/-/time-series-1.1.0.tgz"
,
"integrity"
:
"sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g=="
,
"peerDependencies"
:
{
"@redis/client"
:
"^1.0.0"
}
},
"node_modules/accepts"
:
{
...
...
@@ -145,6 +199,14 @@
"url"
:
"https://github.com/sponsors/ljharb"
}
},
"node_modules/cluster-key-slot"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz"
,
"integrity"
:
"sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA=="
,
"engines"
:
{
"node"
:
">=0.10.0"
}
},
"node_modules/combined-stream"
:
{
"version"
:
"1.0.8"
,
"resolved"
:
"https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz"
,
...
...
@@ -458,6 +520,14 @@
"url"
:
"https://github.com/sponsors/ljharb"
}
},
"node_modules/generic-pool"
:
{
"version"
:
"3.9.0"
,
"resolved"
:
"https://registry.npmjs.org/generic-pool/-/generic-pool-3.9.0.tgz"
,
"integrity"
:
"sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g=="
,
"engines"
:
{
"node"
:
">= 4"
}
},
"node_modules/get-intrinsic"
:
{
"version"
:
"1.2.4"
,
"resolved"
:
"https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz"
,
...
...
@@ -805,6 +875,22 @@
"node"
:
">= 0.8"
}
},
"node_modules/redis"
:
{
"version"
:
"4.7.0"
,
"resolved"
:
"https://registry.npmjs.org/redis/-/redis-4.7.0.tgz"
,
"integrity"
:
"sha512-zvmkHEAdGMn+hMRXuMBtu4Vo5P6rHQjLoHftu+lBqq8ZTA3RCVC/WzD790bkKKiNFp7d5/9PcSD19fJyyRvOdQ=="
,
"workspaces"
:
[
"./packages/*"
],
"dependencies"
:
{
"@redis/bloom"
:
"1.2.0"
,
"@redis/client"
:
"1.6.0"
,
"@redis/graph"
:
"1.1.1"
,
"@redis/json"
:
"1.0.7"
,
"@redis/search"
:
"1.2.0"
,
"@redis/time-series"
:
"1.1.0"
}
},
"node_modules/safe-buffer"
:
{
"version"
:
"5.2.1"
,
"resolved"
:
"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz"
,
...
...
@@ -979,6 +1065,11 @@
"tr46"
:
"~0.0.3"
,
"webidl-conversions"
:
"^3.0.0"
}
},
"node_modules/yallist"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz"
,
"integrity"
:
"sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
}
}
}
...
...
package.json
View file @
66c9f73
...
...
@@ -22,6 +22,7 @@
"js-tiktoken"
:
"1.0.7"
,
"morgan"
:
"^1.10.0"
,
"node-fetch"
:
"^2.7.0"
,
"openai"
:
"^3.2.0"
"openai"
:
"^3.2.0"
,
"redis"
:
"^4.7.0"
}
}
...
...
Write
Preview
Styling with
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment