From ef81a126112a3a52389f514a5ac8578d5fd34ced Mon Sep 17 00:00:00 2001 From: Anil-matcha Date: Fri, 28 Apr 2023 15:34:46 +0530 Subject: [PATCH] Camel AGI first code commit --- client/package.json | 48 +++++ client/public/favicon.ico | Bin 0 -> 15406 bytes client/public/index.html | 47 +++++ client/public/logo192.png | Bin 0 -> 20484 bytes client/public/logo512.png | Bin 0 -> 85659 bytes client/public/manifest.json | 25 +++ client/public/robots.txt | 3 + client/src/App.js | 20 ++ client/src/App.test.js | 8 + client/src/assets/camelagi.png | Bin 0 -> 16451 bytes client/src/assets/discord.svg | 1 + client/src/assets/google.svg | 10 + client/src/assets/key.svg | 4 + client/src/assets/logout-white.svg | 1 + client/src/assets/question-mark.svg | 14 ++ client/src/assets/reload.svg | 17 ++ client/src/assets/send.svg | 1 + client/src/assets/share-white.svg | 8 + client/src/assets/user-1.svg | 1 + client/src/assets/user-2.svg | 1 + client/src/assets/user-3.svg | 1 + client/src/assets/user-4.svg | 1 + client/src/assets/user.png | Bin 0 -> 874 bytes client/src/index.css | 13 ++ client/src/index.js | 18 ++ client/src/logo.svg | 1 + client/src/pages/AgentConvo.js | 262 +++++++++++++++++++++++++ client/src/pages/AgentConvoShare.js | 125 ++++++++++++ client/src/reportWebVitals.js | 13 ++ client/src/setupTests.js | 5 + client/src/styles/agent-convo.css | 149 ++++++++++++++ client/src/styles/home.css | 291 ++++++++++++++++++++++++++++ server/agent_convo.py | 286 +++++++++++++++++++++++++++ server/database.py | 43 ++++ server/requirements.txt | 0 server/webserver.py | 66 +++++++ 36 files changed, 1483 insertions(+) create mode 100644 client/package.json create mode 100644 client/public/favicon.ico create mode 100644 client/public/index.html create mode 100644 client/public/logo192.png create mode 100644 client/public/logo512.png create mode 100644 client/public/manifest.json create mode 100644 client/public/robots.txt create mode 100644 client/src/App.js create mode 100644 client/src/App.test.js create mode 100644 client/src/assets/camelagi.png create mode 100644 client/src/assets/discord.svg create mode 100644 client/src/assets/google.svg create mode 100644 client/src/assets/key.svg create mode 100644 client/src/assets/logout-white.svg create mode 100644 client/src/assets/question-mark.svg create mode 100644 client/src/assets/reload.svg create mode 100644 client/src/assets/send.svg create mode 100644 client/src/assets/share-white.svg create mode 100644 client/src/assets/user-1.svg create mode 100644 client/src/assets/user-2.svg create mode 100644 client/src/assets/user-3.svg create mode 100644 client/src/assets/user-4.svg create mode 100644 client/src/assets/user.png create mode 100644 client/src/index.css create mode 100644 client/src/index.js create mode 100644 client/src/logo.svg create mode 100644 client/src/pages/AgentConvo.js create mode 100644 client/src/pages/AgentConvoShare.js create mode 100644 client/src/reportWebVitals.js create mode 100644 client/src/setupTests.js create mode 100644 client/src/styles/agent-convo.css create mode 100644 client/src/styles/home.css create mode 100644 server/agent_convo.py create mode 100644 server/database.py create mode 100644 server/requirements.txt create mode 100644 server/webserver.py diff --git a/client/package.json b/client/package.json new file mode 100644 index 0000000..9188d28 --- /dev/null +++ b/client/package.json @@ -0,0 +1,48 @@ +{ + "name": "autogpt", + "version": "0.1.0", + "private": true, + "proxy": "http://localhost:5000", + "dependencies": { + "@reduxjs/toolkit": "^1.9.0", + "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^13.5.0", + "axios": "^1.2.0", + "bootstrap": "^5.2.3", + "react": "^18.2.0", + "react-bootstrap": "^2.6.0", + "react-dom": "^18.2.0", + "react-markdown": "^8.0.5", + "react-redux": "^8.0.5", + "react-router-dom": "^6.4.3", + "react-scripts": "5.0.1", + "react-toastify": "^9.1.1", + "remark-gfm": "^3.0.1", + "web-vitals": "^2.1.4" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/client/public/favicon.ico b/client/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..91a68aa17da46e377bf21d7b147d0d8e4a7b9493 GIT binary patch literal 15406 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 + + + + + + + + + + + + + + + + AutoGPT + + + +
+ + + diff --git a/client/public/logo192.png b/client/public/logo192.png new file mode 100644 index 0000000000000000000000000000000000000000..1d48f8b1bdfef0f5832156f047580e6044e1854a GIT binary patch literal 20484 zcmbrlb980Twm-UK+qP}n9ox2d)UoZPW7{@6cG9sr9VZ>z&dc|l`_8@hH{Ks_yf?;P zd+k{@>$7UAYR#(JkxB|u2(Y-Y0000%Mp|6u>)!Xz1r7Q2t+H+h^>qVrQIQe_)K23c ze-Yr8BJv^tKtnv-n=!-}4FiawesirCsrfJ&1?o>?9!W^QFI?d5E)>ZPD& z>Sb%nV@4$;2+Qxm`vqWc?rKczVQ=T)!s{VG^)FoBuiyU^Gf{mpIh$GVs)$Se7t0qV zKxO6X3gl&Ca(8!UbZ299bhcz-;o;$7VrFGxWo7u{U~utta5eT|aBv~}LVzXy7lydG zi>b3U(AC<}f%qRxV-rU=R{<(2SmOVJ7IAfTwl?_>x`PX&@xMyk{%OMaB{Y+-;|y8zn%m%c6KpW^8}g;P^p-^IJ!BTn*R&o zpGN-$BIayv>}qZ%$jZ#h#=!jb;pAufKdSzD#(y`E@Nkte6J%jEWi{ip;AG%nV`X7r zH#atC;9+AmW?(btGBf944W&ID(znlDT7)g^a6b@DnR!$Bc7Iqdc9u98i|1|hl z<^Seab96Jc`bQMO|Hl3AvVZaNGyS7oJL`Wd%mi=%YPZk%#_#F+SShdzfB}!=lZ`*^yPcJcE%2t0#qIh zX66>gZg#Fzg7%)4Kv!Z0VwV30asCT|pXq;q|NjsM_&;3wAE*0QWc}lAUlm`Hu>F@L zUlgy1o2!+hv!IBBt(!Bksi_D7hcWPfc>Na} z@4vj&(OJ#W(N0jz*x|b|KhytN{QuaMfA{Vyn7_iB=|92$Mf_*@Fn9PGGn~H$hiaxp zH2^@CLPlIf&BNf_7siM{{r7{*<9fCHe6!4o>z4b3h80}%Sr9cTwS!MNaXxYW7!`4O z`4h=YLBuXoP#$R%Y$H=ia!GSZiL2p!s)KbF`)h93$K~y`oLAO*v31tpO^e*`tdG-E zIT^RP?gEDbhunprtMzkIJM52~c6TzXphiWCgO~w(5CUVHH>CEL_wB}`0DWi*Gj7lj z&pNwuZF5?zhsfvHW#%jIm&l?EURfp`sHt7%u1)(<@GP>b?q|zfWaacc?VZ@sad;hp zkIKmve_J-NJ#n9$M4eqKELwQIO1T!n^VwC@={_5SxEC)zDLP{BR{Ls@6WguqRwx6Y z0U8pewp_Tl5Ff?($x4acha0|3)wR{`B=d@`j)SB51_h_P%yYbw(|9+c8*Yn*^gzNh z^Uy4Mtc!2mgg}oJ*#sq<=Y3~lGG#`PA^6vauQDLnG`4ajh>IgKtWKoUV{YwUGC#Y8!KS8FbIK0p@{NTt!gkfih$oy(%K? z08_g zW*{meIDw@~$>4bP>n13AV32)@IfHCe!PiF;6%`XJuZ22e zD6|CxyWC6uF-%-$xVh>(1Wg4_z2LBc#0+cwvs`w)Y9`4q7F>aMa z_;8cl9e>5MVVGe;4=^dexC5qOlltP%R}G`Ho7EUxdwJveSA3fUPdk6 zY5_bUcB1o*5HfhE-3Az-ZFb`^#TWt7s%QgU?j(ACO0**srE5mtC(j$^1ZD-%Nm|TN z*afi#L8oKjZ=?1_RbYk7J(x&eqfubOnt#32?=$P3y3-vYD}zc~l<@E^lJ__tA_cfy z0p)*6m#z}?fcKGGsWtlnUpd8XD?<((Dxl^bECdCjjoJKX2EOg2Du%IslMVIWmnNf2 z(MtheN@T|jIDg*BA;J?#JF7@;vw&cRnUcH=)VHh#iA7jVr1V}%C;%ehl7FMUt`XUV z4UlPIyVSTBwydTRIO(a^bjW|LT{VdqK1I}+E$v7Q?MErY{0~wh%2D4q#&~V5I>}2hp zXoU#(CZtGicG@B-vHM}PY|n#)W+B15YhK$pe28&V^a5L1M{Xe7u4KPXmj}jqzOPo% zjoOU}u@uyZHFAwm@oncYqaY%VvnxEpdPxDEq)7k^X<~TGBm>!~ZS4ZZvMLCIZBA<2 z#9$Q$=G>~#>!u@pDLGYT-e5n`eq>D%t+s<0Mb&UXE*-q1;WbReY8bE^)LUgKNG#|c z5r80aM4)_JZlX-BPcV+)oQ}NY-~vY}kJ$jFlR*-2F8iQhRd}z} zadY@a<|c2uI~FTaG6vAcX7DqxN=IgolJME0>@xWrH#bSuGQ#7Ipfzcuh!M*=e|BVX z;G|?Mf)}g+DS+Ln-=1`Xg9GTXZb4P>>x~nB7IYRvV-p%2S*y*U=P?G^wGNQpqvvr+ zC_XU}>*@K@K4{v)>q69}J^Dg>1VOWkzo`^H`#@SC^#~{OcvJY~oEQZgA`VDjqAA>T z?q(t#fW;s@jO)+)bD6|2d<2#l?5ho+PhcxlNMrFecWQ8|$D6AmFvf2ud^!>v92y@% z5yQQ@V`)y%`mRt1<&cMU{}-d2jxo{2xEOIv?4^%C$De8n64ZdU_c*#}W0lp69^M4L z`dT4#zGe@mQyxHibJH)6w_|0;%*ywi+*A3iUD4=XQcO(!&3JDsckrTQa!$#h;yQte z3;|-H)aYg@jf_kPsUS@9UElB=3uRf;%lah510gpusf)q0_7ozZEh!4_Vm0t8&=+_0 zitqDYg4$CCb?&X;0I>P_dvNu0PUkL<8BxqaL7mI$QwmSH+XjI(9DV@D-49MX7!KLa z>S%8-r)ZYsG24xlOrK5KZL^F~vP}!{;uu(y75W^TG5AtW$|n4g_A6^=bYknBi1YK1 zLaysXHQncV7&qX!Iam(7 z>jjL$s=Rt6A*syvLX{gCHOYZHY|*7)O$T1UJZuCGL)X1;Se>wIlbZ@d$2lw;6^>gU z+OK;s-Kh|6jsw(4L#^F|sZd=#bKAnHmjOIvAze#jY=0NGH(NeDHE_WAFai(1@sj2#dqoP8j&eC@`;ngbR`o6~oC%+U%dVo@nZ6KNQ4ZQUUfdn3Wkc zAFI0~eO>u|k2bFJN0F6pJh&GHUaJb~Y#orAG|(s-vYEt=VvTsh6(*ADciW=+5i1sT zvu&A1Gi)#eC<8H?3%#9JzcBh#dW-;_;J|d7W?!BVAa_yC%9Qb8g8{9xTy;{}(xs8h5doUIO+V1>-EgU%PhP53oT6nkup zO;m|fe0K2MozQ~}(@`h5fbSkPhE%T>?LUkd$2J2bOcZr+X}_QMhxdAen&U-pE8M~* zbi9%tjdiQ@1de8?g~; zn*W{y}!8cfwXMg{);vG2mb$`f=|B zFW~fHrG-YER`m@s55_#G5?X>%t7KE;%&ebIYF35;bJNsWv+UHHqu1N%5W+3J()q2n zE~IL=?Xe1d+b(;-#tRsn2z*FnlBnhbE%|hlQ$kRWp(^{W1rZ ztsveJ?w9t~R@^%HNq`XBN|c(~l!)5XrdzvJZrTXEeJfPQ;^swuper{o2y+SjK)8gc zNw7b-;W>Sr0sy;jX^BLSQ7}z>N8zCPE18G}O26TlA2_LV z3@k})k-9E2B2&m?iK+hPJ3t-?i>(c;&zH=1z#@H(^Mk)uc4CHd4EZLz_}GTlVn+_T z`Y}eM#(luAqZ@7Yb1rRO8$SgQ@_4yqeiMt6O#xbOp0BS}gSu9Q*LAF1(ac>-i`3F% z5I@?rDhanbS|}4fkXEo;bc%J<3@A^YdtC7$a_%|*XqL1+K#)}`b+vU{?=NPQ^*q{q zn?K?GNPRS-l{j<4b0Rj|0lY}dGmst>gXV~ob#SYwM@qXieanb#t;bGc!$~OM_{GBo z)$`GKKN-SB1}6Bs8-JT2i%&rR5YmK?6Rnd!V}!?`Y{kNyRKhRoM;e@=PNs54xWJ&K zF0>;g*g#bd5!39kS$p4ueMBmu@Zw&Jn?F4LjZ`3P`Pos}0k zw&8)W*Jl~vunVWXSZ#70IeQ=1ZvgH!S*)gQQp>xxFHeQ1Bp-D~=2OjTWAKCG zGt`a=#%nveZtf4>K2Ix2F%44~xhyu(Gl-v^j|37^r-dQSsS9zVR67c9TnNzeze{2k zUY)VAyzGVoy?;W>=4jR9k;B(BN*hQ~Lq87D0L=+J5gHX>0N%gbBS8M>X582%y&@l# zxzxi!)mOj#+FNbe*MAzm$9aFIV|jXWNtn2I8Yb9vt9fRhpa_=s(?@N^7!m~nJj6U9 zzHNO1bn~8s)UeL`0x}kuPe(pQFRlup)mE&0S20Wiii@GSMM=0}VYeCZt#hr3a!>>M z!tOI&i`TZ6Ibk77i`yqJrIM^p+%MmGCb%3%o~r7Gigg_VgzAL2{Xv@eTf!R!60*;i z0-(cWr?|uCpeR1pZvF@vZ4AcC*v%oiT)ZSMofOcHuvW9YV;9=JR9%RFvof!+rI0Bay`$G**6Q`uH9F!k3u0Ml{(zMf?{ED)uS)yg}acUwi4DvAX4Z6Mx)Z^ z7KnTZ%qGwIh5F+Rta|_F@N}aWHU;eC3G0x2<8I#a~8ND!^ zwhi(I5tikTW12`P^0*`M`V~!KR_0pLb5e6Dg#^Av2x_4*K3We|JjiSsn)1yiB#D{c zu(u>jqxD!r3E{&JmYX7aNI`>g%?C~1A zK}?UgV{D(fXXpkADMdG;8Y`G)cdgbBs=SzH5eV+~256B7IA}XMAoMplC%i#~QBnXU z37H(@e78RyW;2f}H7Y!ma+^ERd>Ce5T1LTWq=P!9v!hO01T{rkdB+D^X`zEZjHnwb zeAh-RU?{*zI5}E{8JSXltw6pDlbCiMtO0OV*+#LA4F6CX%i-*szAT&|zOnPt90r@N zogtUEZGyW~8qg`ShHf($kT5WwLDnuTo1YQFridT+#4!@hBjg+WmY!mB_}LsNk!UqG z`zBCB_T&Q#*3whUWP#smEc&b;F))s&23Qm6qNT$}2SFyu?{H85s6l{(bd$mJBX{$P z7Hyq(BtjuU{FyH;|LP?C%9$n9SZ=EufM~2r#ZquaM<~}^@Q&E<9fDZJu~;wy$&9dJ z4!2cb&Q6@iArv$pli1IG_^$)UF{(gSe8nUmB~x`O3PaM%b+VWq~?v(h1YL0*k* zrzamg3)G#@sk`8a{H5hZ5{9c@bL(mz#f1<5kmhA~dX4bSshPcYM2+|Zq%#Sug<)gI zO*+@laPXhbim}mh^G8Yh+^>*#nGTyz!h))KbeBfg6><1{7YsJ*;WJSM#`B^n?Pq^* z=1G0evbdFt7XDRa2bquws)^wMt%P*nArr%({Bm)YWQ z#a<5%PnSX@sRe{YJ(4zCx~tUQjqN7zXi-yEu_*dK@=YrBbU+8bNb-z+W6xxa$7!w^ zfKT~)t0Q5@^?0!pZ)Y}A44g_oks3Z}vEo;X%Dyg&xgSoCcGY9H+Pm>g6!4)A%i(~s z2D^2YkQHpw<$LagskWXTIUl=#x?F`B>Bk}?==CMTm`+^HG+#39r zl#P$ORKlI0O|GMsJTA+S=oF`)<}H<&J^9!5GdO5mm1~$D-JR8^3<6%xj2j>wQaf#h z4-jQLD!*U!Pf&fvb^21IyS=9|Uo^s@P}iw_NONjRW0BrHi33W@>F}dlL5al?YW0Jq zU6K%|6fhH>X)5&sODZ}cnYLW1vJIFHHoXX5;t3)FWs^!+1#l3VwFx5_`W`byL23jU zi6EX>LAQdQ!=3D~zc&50QIZ{Bu@41-NH>%*5&_S~&hjcSAl?%>sBm$4(3Y7VAS_m@ zu$)*;nqv6I0Y#2E5h4Aem0fGToy%LT$}R}?Amo3$F-FLPf9nUtBbC=1 z(ydiM{h0l$PEqTGfjOYhyvlErUjx9Wm$=#^kc84|L|1A~l%=h#s3ol1@IqpRL>wCM zc9c+6Z^>p`tJ6m1#8^&E&iMJK6&)Xv1d6Yh6$+7g9m2s3;rH9SOZ{0QRsHG4U#+XA zt^|ExsTraNyd2Yd!l$s2Z4M1nbWaD&4Pr zbu6!IRV?3k^e_O3*ku78^Ka!(9$cyGpY<=lP)2wTE?;@a0BWdrs1|8!FfBxlu40k84@#hqkJ2tv5CRJr+t3PW~G}_8U!1n70Z7)`- z(fjB@G-XDpe_fIgEu+tN8;ymAJFiaVcz_BWRPJ_q1e5-C8t+2b4%a_{%acn^D~^%t z0psa;6@zO^$UeIadiI;_4`Y!fi;NyIW`9y{RGMSAD#vea_pL(H42F6sKJuRP!q*R| zieRXn>@vcYy;cZjVGd#Swq5T>lgH?~?QEirz&m`^KxE~He9ff{2+2;zaZI`My}S@X7~&-*zMA*Z-E%3_;>1f zv{g#}`RHI4I6njBe~GY1DXr=%S)t5kP&$_>inx3wzC&(iNsT3VE%HiwyJsk3DCIR$ z8z7AFr%MO(W&yx}{^`4G#Fa;E;3p0 z0C>k@2E4z(NQiQV)YZ}g6dcphbW(>_=hZA5r+FIRedrR|`-`6pA3sZW#<^&;ad?#- zYp79Y-xE!1P6uIg8FpmA$Noe>v*jkb@5zpSx$2mN&XED5Fg?l=R*L&Bc~h>Osh{u0 zKHK5qp;`#YoJlo)+E!IBNi+Vscos`rsDu8&*nkFky-4ZbOt1`7N!ZwT=tU0v!W@`Z zWEPg`V<(w_^?Wv_Qyr+9lfj(KLfG-jt|4T|)8|IVds=&lK4$_{W8xU(IE=&}ISd$k zVjDeR)Y@Gr6sH~bqT`(iFVEX29ObL6`hT8&ek`VvQfoz;@B|gUZ_v<4<8i7@Q>BKT z*fTqja;z8bWY8_BDVK+?y{giC3e@kmOV@v3!`c=S@0r)6M=6~v#0#~Oq9$z?_kJz}=R zUtur>DZ1DXe#erQGa;N}X#52E43x7@wKq z!kC3D>j(>Mak8VE-$0<3@NHDoC+7!|Um>aVUt{1sMhJU=lDZ&I9#8{N50Q6KbaR83 z6PjPM7XxLB&ncqM(-9gq8bcnNIqA&|Hvx^PQm1u8K4jIJS}_B5neS=USRShgM~{SS zn$<^}-yL!$UKVgpmx*MknA@hmF{Af3O1d`C6C)GLi)lsy2S-q=xA@xo@`bg+ptoncOg}m`*Ke_RBWW9-11a z=Xu(#$ky%T)NRE)Kdy(pMVg`*?WV5BfECdIqAxyZ_)+QTpGK2-CmVIbi$WzT#WAv1 zEBPnf_g$m?@~|%TKke0Ob;Cm+KilGpcLh8(SxTJ(>nF-!J}g)aZ|ROg7Rd zcwp2CLh5C@r)v0p{Q1rRFW|-*q`tJqEfTtvR1e;lm_dPQls(sLK2Pl(tubIOZEjQDa;;aCRN~k_Ndy|D8 zgw;}IVeh5QRBL$*Thw&VB_lKJ!171Y?gX1ZGu zD@bwSJ0olG_!H(@axIs)zYJDf+XZy$SRZnSH8fj7=fooxkxBmfo_9r+cW@z zSnaIo{?#0=8>l5h{+$|MHNw*#GrJcSqQfTo>Af&8rfaAdYb$VSKvyZ6(BoC0yL%gzzT-ji>}^KY zik4;$;56E6*!P3UAY7BF6CY~JZ^ejp4|2l>h8~i#NST{Xvv#CV(J+=v=$69n{d7yY z%@PR|wH&jz1N_qG7Li}*k>BU7?y&ir_H(MyC|C{Yj7MYBFlfjkLX>|={stPPmZlG8 zuvwZ9W4b$~&EuKWV1KX57cb0OAhS<`1y9U-FCEk|Bb>r`9ZYIOUbKJK7n9mVkV zMpkI*1;v1PW}-=q+*+C&@8dK%rFMIN+|g*=MoZN{mT2yv^;15&-T67>RTQLvtQGKK zm{Dyf>s~Q##>j~g7b~>TcIEOD1ib_9AQmy~LR+P%0nR&4*Xs?17{+nO7$*K^%f{pr z8mJ2+c;RaS_XH*WxQIK0U4GP=%m|j7egY~@Y;)8OIHQBkts(VRBTA-dnY2~2j!J?D zK8KJEj3jnX_oe~AANy*m`uXO2l)~*l{1pp7jBpe>j&b3$nK6IeFir*U2K}*nHm1{Y zajO}DD%<)_@Dhs~xFqBS5K*uv6=4m{XNYnC-YF6B*K`u&no;1J6~T&Ia<>dQH*#Ag+E=(UzNSETLDs9@wXu8PQHOCTs zf9d)<QfI4*$#~8vz z2Sza|r1V28qcL3MBunZT^frlP$ctl!lH-WC@{dJld4rWL2sgUQ+j=p>_be6099slJvZVUKak@aV6v^REc`ru%`2IMo8(Q>Q zBlXY`(u`mzo5Nh4u z{nQjRzsN-GETx(Q&jhBU=eqVTEXzBtPjssp-6a`1j^(F8hcziEX}4p9)%! z#WR9ZmvnP=156Q^Z+hEz86uq@u}BY}N+L%!e4WgZ`D!L-3mFzl10*2ZFv?yU#qDHz zM~apmdzL)-Y4&n$6mCbz;HRfbUGBYz#U#5e=SeWunpO-p4=Fa5c$)V6DI0S^l0>N+ z?jJ#cFF$=wM}aS@ciPt`h^Nq#8%nBG4yx1b4PI|bO1NMourm^(#fd(=%H+aUMQ(qu zhie|&LATLC@*Q#F>tW*4Rcxl?&VGMX1+%B)6fF<>f_kTX^w~&v@WyPV0x|c%fn4uN8n*& zUtK+V^5EvV{&fQbnhP?acbmQlNiVJ~5Pw(KHmuBtd(q4T-<-vNEwSLlL5s0)P%hXy z_6f5uTS%F%Bb;Q(QZ1qTjzvJ=K#H8-QKC1MEMrV~6hUpZ+5$w1$aM^f)sX`+6L12kW5NaFc;pV2JB>-^_H#9IL3d z9osg~lW;o5H3#v>rR7iE5L>>6^E$?n?NCeOzB`(=7`!|(gfu4FT8#0c zv;?_p#&hy&=7C)@Hw;g5#OE%A8~XW?L<@S$Ke*Q$>M)pUwi8lug=a8VG>cjeZBkSn zChpy#rWoQiD$g~O44{34V+nIVi7p)~kN>V2aR3k=a)5vR>8N3ToH2o zpe{qo`I}qi2Ah^2hGmv0t~$^r2AcNJ{#2sFuOYa2v1q7h%^(?~Q-Zo~{Lf%4hg?V| z0Z(^yM82qX>wZkjFij~A>p{M!oTfRya4zq+n=&_0E)rB446w3*!A*6rS3Zhh_G-Ov>u92!p- z^@<-1IYCFd&0{ujgBtyGZyJJQtkX5cBjm%ZuN}KuyCN=s0}}XTsMJAtjx0tCKzKsA z1!7M=#}7b|;-B>#AS^~-_|>a4k1LRKI8K18Is6Hnci&3e);E|l`%r)pnWE77b%XcP zq)@S_R6_$eSF0Ju%(fm7vLQeC*x^cl{+ac))oHq+I%6^(?-$wT|0Y}Q|Dx^T?80(d z`-k~)Ccb}xNfyd));GFNzY8)I8Q4SkWA{$VKUCH41*{kmFO1>S6XEjX&c9)ws(0vw zDp%4)6rf_64D=tm01>(raor z9i|(+N{Gb>`n>?y2r&EaP-5;}t%{8%K##N`lL!r?W))0SxG>S~ZYAs&pFF!Hu61IZ5|&ndTZXcAtl28EoGY+*;D~Y6r#F)ZDkO@VwrH&ZP=rvY^`*JY^ys&v@rZ#{iv!QVV0h z0=8R=Vmqfv@+o<$dHGCR0q$l6EiO5C3w8*)-TE2Y2mP&9d87tN_#fyU0dg35+MN(LyZvikaxZ5T*zV86tG8>qS~n?|+6dJIJC z6?=+iK}X@Yv{HiCaX6OaC|NaRo{1QaW$i$IgZfPx;50YbjwwoB)i1c;BXTY)Nem(r z&5f3YSY@pE-p8KpNAA6S62)p5h5M{#$gof|22%&6&BGcQtkOkqb zM0;6{Vx37gcVp5?$ziu}3K)LZIG&nWKCKsRWUYVv`B%$lCOF;qJO#VUh%s|0mbAa( zr^@_-a`O>^&()t%7R8_y5z85jPpu#U9>>9a4u)DWtJkwTHs+W0=k)J?sSxOB?`tuI zlNJ8vnsj?^iKV~&mSuT9nRFA+2DW;l`6Y7;gIcX!QR_DxSezy=ODGO(6Ya#ZnC_gU znc~L;KWu%&o}%ebQ3W-=&+^7*0HyMVbe{4){1#6_LjSJIS=M4#Xxv?K{DPOel7^)v zI)q}36MWMW1Zw`*YwC!&K_sF7w-WNUNl+oStDj~HWjlsM|txa$@Gxar$a%MN zCzhFNEcUocPJ8YZ=>7(+RzzI5bd?ArZTnK38ud(U^0y`@?&r&*r*Ay)H)rzJLp9Ft z7BIjp*C@|(AX(0oe>P#xLg6iUcnIrYvTKTvGm?V}6)AW#wjJmaZ_|llYcAw#vK~&x z0M|KG-w+B!-%_s-kFpR|*fhVm8bvj7W=49&d!sA8-O_~#0VeiqBmA^ag|+l~Ui1Wm zgwF4?V&$f-QLcvs7j!(|k4^%8zYMSM&60w@bDKe&n*x%hBT68Y6!cJnrkdc4g z!K}H%7fo5=h-Nclr;|OSC07NL6X&m_U(?kwC=o8sV6c$zf6lJ_k#D3ZWARJgw$BDG>1A_jvMlu7JK?r34GVy_|9uAz#0{4p5 zp1VZcr_))9LQc)#PO+rW7R2jJU|9xwA?p4f2k?EJ%R1S;YRX0Xb%}M_@m}-jn%KYK_zo$_$gPS+T;?o8o{%!0kqtG$ z=7*a7`#lDYAYTCV- z#LOhUlvfM;StP~CPpGBr0|Q;hp~9P{ekHwpayZBJTbISuWRsoXM{6R0=7C(Zg_*hy zY77|zLaq~94E-z__31QBKmeRo_;oWQEB*hByn1n5j>FrVSv z!msGJjXGJrP@D(N98HLdi~h46+V>!cIOi4@ES5Q9_h&v?jhkS=u2|6E)d(sJ8vAIzm~-6>cLq|x8R8Z^ivduhm3=TWts9G@VVtDi)9c>16RkGjJD5IY}Ar^vycfT`qUXrMtuhGRABdW>R z)Z6V|yzpbYT=>Ynol&4dTOKvvuLTe{%M|mr1-a=^UbZ^{4-Rmscq5C@0Jrl-a~2_V zbp08as0a=46W?vzHA)Z4RxbWH!Xxa%On}g-rsuH<_&=?FlK2|=PrW|eui-2bYI%(y zhXr`HWTZ@nrDE8RCRf!7Zx%O5zIH4}*hLOf<%FZppF5HL%m>hbIiplmsaB0OQsLgx zu{$KT$zBigIid36zM&#X*@Hv?%|oF@68ps?C6NQw$$M}(z|$n1JM?+qJCu_e$DML$ zL}?#mbuX9Ag%3CUikMrN>yg#rR$wdb_aEUadAL4rwge*yWK&IEuPYq?48)F^!R;E!t^)CB03z<+f%;Hj`ORgYb&;wX8 zoUc^m*OIIH*}u5Xkd-((P~aPb1&V+$f-J1MHyi|?PeTmqZo#|!{_bh~!KK9g$v*XV z&;qTwge^z(V@2?7B~Q#IKl6Z?I>F17YG?> zw}p~Mo?<3q5kgBP%x{DmJ7#tc=&+6&n616fgq(u6q&Jpw1J!u7q0u^d8A&%u;%3Qc zC=>Q36-%^brTrY+W7ae0JMC|nNLYTJqetm+>CrcD2QeFsQU!z`$>s{q z*a!%y?om*?6XSDUyc%Cv$kT5kzzC#Y9WD`OCeUv7W|uN$5YS}!R+xdz(k3tfs;n9w zrJzS5Pd%u^nU7`7L=GS7%+r(R>V}@i*jx~)a+b?cZD#2nnDhAHk5MLoAkq5Q%ny1N zDo;E1`ooi_1@^Fg#{(of72ZqVk0~=VtKn@zEI*Mpm3|CP%Dsgg3qK%z&7k}t>_8bK;9n(P@4&ji1h&k-sJ@p@>e zGnX;^JzR`wB%-f8Oo#yL)Q`?i^2&uH;=SaPD#A~?uj9zet^spj(}S>QhYsYN2DS-r_oO2iX4vL~s!Vt7QE#BBG4`{gh8uU!3o2losBaxID2j`U%`ZM~ho*Xacaj`ljI zW2T{?GfW8}`?vP$Q(ap9PR1e2-C_p!`=1rEHT2mt6$(!*lugM)Aa=`!gS@AbYa;52 z3ZuDmhUE}-l2pthSSK6|90_UCAAY~yb^%e?=bpow60O%e7i?}%QiY%QUIb=Er`IQc zMei6%yJHoC_{Ak*!9&_$V^g9#kw>%P7EuPgA4uE1%MvrBdcMu(2S^ch^Y7*A9?=rI56p**`j#q@Mt`Z3Jmc}@kK^MVG%nXcd zEQuy&mz^p(^|?NDIcA-Dw1R*BnSc0zBwQUzg2bJ0_ zk#Bm^`E(v$%TD8ic4>mbCP)a&GMd%d3gpolU?L^HKq1?iC)~OaX@doz&@xJD z?SddmMyA||2dewDZH;=dmT6iFkS}`^GO3-)W|VJ;0e8lI|I}Bv!e=l#eNv<6(ATL% zvnQR#r;5HYgvP@gV!)bwmt?G^!45?C^kch}p(#+LoVtXDm^wxn#TB}sbnOBpX!YCc zqR`MuC3oDA>w;cmMk|igj~V$2CV~h2H9poNeR)(wcO0ExbKZ}{m`!1iS28&5Zscbo ztC6PKBmX4i2)R~b#Pt)^p>)9IMPz(-n37^>gNJM}9OpCsVS(pP)oBO-ho=|ATOpa! z&KgEy2j5^Gr9a5;oyK4jJKHlxraL=vZcjY9 z@0Z2Wyx1y~_AtElw!QKTgCF<&tvTjNlNtx-cCfx~L(^M+>&??}+lmiClJ&UG#1R31_#vIxucyr`8SKCE zXqwdETl?0$!!nBbhv34<6^_DIw~*)ROC9FPj09>yv5X>Gm8(p+pIa1NS1QATcP_Hs zF651qjwfKh#uVfSOBNJ|$I1RU1{=1TvVFYosNh%E%y|US|HXWyRi_6-gX&Q7?2ZVG z8BNdUL>-7}ruVU*#TJK^>dVNo)td!75`iPmnk81zkL^p9zY!?hQzS!y>9bQT*X^f$ zXkTx4AJs{Y&f0NzUN*Zm!@qi=ydHdox!vmCR=JxQQ<1$=n1i%i?UEIQO1QW+y-5(w zX0a$_^^|d=__*Hb8oRf&3OfgR?kTb(3fi4FD=w~Ru%1B;As1Fmd+fSjbeVOG$T*o5 zJ5q)dJ{q*Coa?qu;^!|!tG_|uWliFYBPiw?lva5>uqUcG6=fhmGJ{wK%c8@}%mU6( z1|~WB$Ewk$x;a`cZlB+*4SKc&LyOd3s>b2g`ox4BdUOgiuv)wID@H zF4zDoZl_Nt6anxU((yU3j%Fr(J)&&oHMncPFrVvijr}^x+xeH%iA2qVCR8>97>Sc>Jx@4Hw^i z59-5Mr-K}nrUF>qJH^C0>h#3QulMiCJ*By;1W?y-uN;-eeghAGDqW|V->(`+oNp%s zF}inwkhXbRkdhx#rUU?_}rJ!)dETvnUUG_LhiY)WtTHvV5zNq2jRHYvvrne~ey03xY0 za`G0&{NrZ|)OC29;c#%>Cmxgyw^X$%Hov-V^avt;b!xu$MMh3)fx`^iWpBYFpZh$# zeJt!_P}KsVm*Em@8Q%iiPA)Ub)f2mCoHB^iDXZJCRw>lXJkrO>jc;T6*LXY^0xB}V^5fd+t2$9E|_u> zZan8=eD%!pRVd18tF^VL=)gW~E7_;kfC55+N)+_I0GOuGnVJUQ%vn0u5c9tyOx4vH zw*9Cm5Zk|+V_bV8y@H2b-eXXs~kW__@$2m>;*sMqyaYfu(KVxfm- z=i=*g&&RhGT!#K)y`TGN8SeehU+|};i}27J&uY-jIN-8br{g>4e;PA~jS;PHv;Z+i zAjtf&&7r-8#1a4!MNFrA^jNru7ivZzS9EW$LTns6*w)X~^dUJ$yZb6(TAu`>%+pe8 zTO{Y6oA4@kpPDfTx1awR%ouJ=OTza3tdvwa=YY%Uz}|9+58indk1T!x`>QH2IJ-Y? zIro#8H+G6%UtVX-sbsW$S`Xc0$ZSgT)$5L6mtzVn(SkNG|p=+UNpM*$6F} zomKhx8>G$h#Uazg7WPaNMbO0d`M*(@55}TQ+DY8^g+Erjy zh>hciK~6HGel@^@vN1)0{<=#}TBjKV|Lm1#P*k!X#Z~3_$xBb;Z!4B)Q|T46&%|x# z87>cRK;e0PNAPg2Xn{G>!c;tBw@gAmE-Plb2fM7W0xK{OK5V>+Hy z2y9z};|Cd=Ej9hqGQ_`+DC2u*3FHK`JITb%`sC!tO~C-(*}6_$9d?3ci0ebEv9xF- z%Ij+o6iYoIGYemvcRp@9=MwELPL+FQgJ4T*EX)!@28F$kI91zQQcUtJ-Cm&^`f{tD^$bZe*WdEwaM^| z7n;M(%Cxi&flv^2jZJEeeQqzRo9gkv%m2VfA_PQsTABz?5E)`+C>TT@bHU`kWPT1H zU}JZ0RbBE3fN2fj^};i1v?kLzBq$T=Y9f`kDccgzX^>uiw+H)cDn&DYAQr)eYsGb$ zRX7H<&5Z~ILio>`W%%(6f5WmJo3wAhFZ90Zl=<+vJg5+Nrn0V9n>DXEc^-1pGqr~| z%_r7C?%U98jIGwj3)y&Gtq2$0C&JRxc_k z7WZW|escLWSU7P8=8T<)hpzl8=8hHDRAA6vf?we(PfWfM*_$pCg{&ndTK@`EvGrbM zC9MEh@Dz@OXM(sz97RMwm6P-8lqLqzZ8_)|!EhLbxdYT4I#^q!?ex=zj>Mf8e-;-{ zo2^1YcjaS=6@K#4-|^_;7j^jKXJ^mFmrq|P0#c7>R=%r(V)Pzcv_AwcAl@i$(2(pr z6}*5Z*U|A2v`9klAn65waHgljJ!YH;!UQ{*-;0zf!K?Ku18z%yk!T%*SU{uC7ir)W4M$}*ZyZDBYZ z(TG!-krk&~8zFP^plKlwDbdEVaYQ9AHycTZ8%IrefBJF&Z>4-L_GelO=jv1Wp(MuxfyR-TnK+J9QddBSryf zT)8GF6>T)PDf_D+SYP@!e8RjX)z$iWvH4rlg_~BPd!V&b4CTZrn8|K)#~FD(D|c?u z+#t5``#GnN;8U~aXb&-uvmfB)4Xd%f>rnT6xZ?`s=zOsH5QbdT{4wnSH{q=rnULSTIEYak+XI8zZ!y^-E#9yxt ziR>*z8ygX>sz#);9MM`a|0ID3il`|)&tV8rZKqCtuxRwQS+rZWadw7QV}j)Z2C22p z4LYJrbNEF$ytQ?`4sK_w5Mus(k8njL zqGctB1Oj3)Xbq&An6hYI&&s8nl=x$nS(R4#=%%nqlFVhy2z|@;HR`uB4Wc#JiN#*t zPtTZx^QO$wV>|{4o7bZ`)QnUS4nCu%v0j@~Z$0nR zY5_P-;9sKkIgFAnP;2@V%6u^bFv1pq9z<+~$meLi2*bfroxDo}XT}UtMRcRMFf$27 z4XVPRzmsE}^^84Ahu3TOgD=AlK;6rGXa^J-o(FhJTsnDAes#IsaEkW5Wy7)-0cicY z8VAWiw(CzQ7>Wz0%*K$M{_3w&0WcTHBljWxvV1XKShGT>Jz<{!H8_7fEH_VEjE2hZ zHtpXnZqG|97;YxlwFB#YdCk}7+5*r!APJPA4Ui|9M>JSkP7^$llx2eIn#1sZ? z!1nRc;P^k!xDLpT!Dn3guA7{ETemiq>}v<5vnD=>E(bH&w6MR=N+H_wP}w!9D{H ze3?}^S_5Ft3H0b&FQGoztT93B=fr}~WHFpVSK9(4Ae6b9n$zU=sYk9BM)x+;PCPMaV zc(^Cid)#mdv$C}d8R@F=HCHOe-C4BpBRswGZ5_eIH;U*x9}eDMt(@%HW6LtAO!1@y zM`w(lgey;)CsyUqePgkB^IAN&`h6Wskm~iu6|_T;8w>jzZkp`^B@LAS0!_MhaI~R8 zEd+uAahr^mC1prvs>)ukm4C`EWOnZKGmrC+#UOH(oHRZet_xi&Jtcys7KY5s*hJg~ zhiF#zfV=!@h^7leo36@X(3>1O#(m;gigp~A9$?=H>#&+z*-?IS*Zr#V($ng3!e%8RiIL0kX=C{tt7W+Fk!4gijHii%o{Kjzt zOrzs(E#c`&$orXZXQR(y%lTRkE%K!iX07*qoM6N<$f`_DO?EnA( literal 0 HcmV?d00001 diff --git a/client/public/logo512.png b/client/public/logo512.png new file mode 100644 index 0000000000000000000000000000000000000000..8b8f29596eac4ace890c3e4243f5e65244999565 GIT binary patch literal 85659 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 Bu#Qlbby>Mr`Z8;L$c~TLqc=dTDWZ06h=;Z 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 Bv*7>$ literal 0 HcmV?d00001 diff --git a/client/public/manifest.json b/client/public/manifest.json new file mode 100644 index 0000000..080d6c7 --- /dev/null +++ b/client/public/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/client/public/robots.txt b/client/public/robots.txt new file mode 100644 index 0000000..e9e57dc --- /dev/null +++ b/client/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/client/src/App.js b/client/src/App.js new file mode 100644 index 0000000..d261476 --- /dev/null +++ b/client/src/App.js @@ -0,0 +1,20 @@ +import './styles/home.css'; +import { BrowserRouter, Route, Routes,Navigate } from 'react-router-dom'; +import AgentConvo from './pages/AgentConvo'; +import AgentConvoShare from './pages/AgentConvoShare'; + + +function App() { + return ( +
+ + + }/> + }/> + + +
+ ); +} + +export default App; diff --git a/client/src/App.test.js b/client/src/App.test.js new file mode 100644 index 0000000..1f03afe --- /dev/null +++ b/client/src/App.test.js @@ -0,0 +1,8 @@ +import { render, screen } from '@testing-library/react'; +import App from './App'; + +test('renders learn react link', () => { + render(); + const linkElement = screen.getByText(/learn react/i); + expect(linkElement).toBeInTheDocument(); +}); diff --git a/client/src/assets/camelagi.png b/client/src/assets/camelagi.png new file mode 100644 index 0000000000000000000000000000000000000000..a9b0c5c731268a707964c91ddb3b01ab04923261 GIT binary patch literal 16451 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 literal 0 HcmV?d00001 diff --git a/client/src/assets/discord.svg b/client/src/assets/discord.svg new file mode 100644 index 0000000..22ee27b --- /dev/null +++ b/client/src/assets/discord.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/src/assets/google.svg b/client/src/assets/google.svg new file mode 100644 index 0000000..47889ad --- /dev/null +++ b/client/src/assets/google.svg @@ -0,0 +1,10 @@ + + + + + + + ionicons-v5_logos + + + \ No newline at end of file diff --git a/client/src/assets/key.svg b/client/src/assets/key.svg new file mode 100644 index 0000000..950c1c8 --- /dev/null +++ b/client/src/assets/key.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/client/src/assets/logout-white.svg b/client/src/assets/logout-white.svg new file mode 100644 index 0000000..d52ec8f --- /dev/null +++ b/client/src/assets/logout-white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/src/assets/question-mark.svg b/client/src/assets/question-mark.svg new file mode 100644 index 0000000..30cf4d6 --- /dev/null +++ b/client/src/assets/question-mark.svg @@ -0,0 +1,14 @@ + + + + + + + + \ No newline at end of file diff --git a/client/src/assets/reload.svg b/client/src/assets/reload.svg new file mode 100644 index 0000000..bcd86b9 --- /dev/null +++ b/client/src/assets/reload.svg @@ -0,0 +1,17 @@ + + + + + + + + + + \ No newline at end of file diff --git a/client/src/assets/send.svg b/client/src/assets/send.svg new file mode 100644 index 0000000..fabeea7 --- /dev/null +++ b/client/src/assets/send.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/src/assets/share-white.svg b/client/src/assets/share-white.svg new file mode 100644 index 0000000..2e99fc6 --- /dev/null +++ b/client/src/assets/share-white.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/client/src/assets/user-1.svg b/client/src/assets/user-1.svg new file mode 100644 index 0000000..3485a31 --- /dev/null +++ b/client/src/assets/user-1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/src/assets/user-2.svg b/client/src/assets/user-2.svg new file mode 100644 index 0000000..231c05e --- /dev/null +++ b/client/src/assets/user-2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/src/assets/user-3.svg b/client/src/assets/user-3.svg new file mode 100644 index 0000000..5d40e62 --- /dev/null +++ b/client/src/assets/user-3.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/src/assets/user-4.svg b/client/src/assets/user-4.svg new file mode 100644 index 0000000..03e5246 --- /dev/null +++ b/client/src/assets/user-4.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/src/assets/user.png b/client/src/assets/user.png new file mode 100644 index 0000000000000000000000000000000000000000..3046f3a62a81af0fee2e716911b29674ac4f0c85 GIT binary patch literal 874 zcmV-w1C{)VP)EL{UOWNiAA-vlc-` zpo{*6mSNC^E{NDF^B)M>w2Df@GNY?lK|3K&Hv-EnCq8&T5V6ZSoHO$}^FHv~=z-(= zFlU_aojC)BVHk#C7=~dOMoFv#+JGM5G4KKSAt}huvfs4=4W+$By37L(1HFJNGWUTN zpel3`+Sv^Zmmqk0hJfbK#b{&^&{YP()6)r5hb~SFwZK3HBQ66jqx z1(^iuiI_G8lJlG-VtNz^&eKiA3@Q+u=MfQ8P#`$Zdm?6Bf#5vfi5RCW(c+XPTAZ>( z%eVr$NzBm&1%i`Ubqp#HoWwf%h62HPt`jk>3Ir$7>u8Y9S!l`G-%v;7^ePa2mjq~0 zAbLLuQ03_?$Di^dl|93ZT>(WmkrMFUb#5J*kA8ha2*AmSZ`IQv>u@ zcqAu#z;UK&q@zM}a*oApgrkSH60cHp^(rhndWdJ3EYHV`>$fKzfk zj}N*3YNMV8))NuiftyNBD9tp|Zv%UQIm|*90LOr53S_$f%oE@!FrQgMHacD_5a&uv zb|Jt%%_DrX?25QZatGLivTGr-e=I*0$Z=)PFW{nv>7-8Xnsbq-UoH#?!VciG0twDj zJ^_usB{#}ruuCjsz&2l!m&p#aOEjavQXitvDJa$j&RHL#LtZ@Pl;ouk(PIh{xpk&VutMT|{pDzlEb^#t*nnIlPydtZR z2?Y{dg)$*EUIy0smTVY?VHk#C7=~dOhJiwU181_Lvud=E-~a#s07*qoM6N<$f`RCI AnE(I) literal 0 HcmV?d00001 diff --git a/client/src/index.css b/client/src/index.css new file mode 100644 index 0000000..ec2585e --- /dev/null +++ b/client/src/index.css @@ -0,0 +1,13 @@ +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; +} diff --git a/client/src/index.js b/client/src/index.js new file mode 100644 index 0000000..a74730c --- /dev/null +++ b/client/src/index.js @@ -0,0 +1,18 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import './index.css'; +import App from './App'; +import reportWebVitals from './reportWebVitals'; +import "bootstrap/dist/css/bootstrap.min.css"; + +const root = ReactDOM.createRoot(document.getElementById('root')); +root.render( + + + +); + +// If you want to start measuring performance in your app, pass a function +// to log results (for example: reportWebVitals(console.log)) +// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals +reportWebVitals(); diff --git a/client/src/logo.svg b/client/src/logo.svg new file mode 100644 index 0000000..9dfc1c0 --- /dev/null +++ b/client/src/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/src/pages/AgentConvo.js b/client/src/pages/AgentConvo.js new file mode 100644 index 0000000..3ab5795 --- /dev/null +++ b/client/src/pages/AgentConvo.js @@ -0,0 +1,262 @@ +import {useState,useEffect,useRef} from 'react'; +import '../styles/agent-convo.css' +import { Button, Stack, Image, Form, Row, Col, Spinner, InputGroup,FormControl, Modal } from "react-bootstrap"; +import { ReactComponent as ReloadIcon } from "../assets/reload.svg"; +import { ReactComponent as KeyIcon } from "../assets/key.svg"; +import { ReactComponent as LogoutIcon } from "../assets/logout-white.svg"; +import { ReactComponent as Bot1Icon } from "../assets/user-1.svg"; +import { ReactComponent as Bot2Icon } from "../assets/user-2.svg"; +import { ReactComponent as Bot3Icon } from "../assets/user-3.svg"; +import { ReactComponent as Bot4Icon } from "../assets/user-4.svg"; +import logoImage from '../assets/camelagi.png' +import {ReactComponent as SendIcon} from '../assets/send.svg' +import { ToastContainer, toast } from 'react-toastify'; +import {ReactComponent as GoogleIcon} from '../assets/google.svg' +import { ReactComponent as DiscordIcon } from "../assets/discord.svg"; +import axios from "axios" +import ReactMarkdown from 'react-markdown' +import remarkGfm from 'remark-gfm' +import { ReactComponent as ShareIcon } from "../assets/share-white.svg"; + + +function AgentConvo() { + const [isLoggedIn,setIsLoggedIn] = useState(false); + const [authUrl,setAuthUrl] = useState("") + const [ranUser1, setRanUser1] = useState(null); + const [ranUser2, setRanUser2] = useState(null); + const [started, setStarted] = useState(false); + const [key, setKey] = useState(""); + const [task, setTask] = useState(""); + const [finished, setFinished] = useState(false); + const [keyAdded, setKeyAdded] = useState(false); + const [user, setUser] = useState(false); + const [role1, setRole1] = useState(""); + const [role2, setRole2] = useState(""); + const [chat,setChat] = useState([]) + const [sessId,setSessId] = useState(0) + const [showBanner, setShowBanner] = useState(false); + const [turn,setTurn] = useState(0) + const sessionRef = useRef(null) + sessionRef.current = sessId + const chatRef = useRef(null) + chatRef.current = chat + const turnRef = useRef(null) + turnRef.current = turn + + let fetchMessages = () => { + setChat([...chatRef.current,{role:0,msg:null}]) + + axios.post("/rp/start",{role1:role1,role2:role2,task:task,sessId:sessionRef.current}).then((res)=>{ + setSessId(res.data.sessId) + if(res.data.convoEnd==true){ + setFinished((prev)=>true) + }else{ + chatRef.current.at(-1).msg = res.data.userMsg + setChat([...chatRef.current,{role:1,msg:null}]) + setTimeout(() => { + chatRef.current.at(-1).msg = res.data.assistantMsg; + setTurn((prev)=>prev+1) + startDiscussion(false) + }, 3000); + // setUpdate((prev)=>!prev) + + } + + }) + .catch((err)=>{ + toast("Failed to respond " + err.response.data); + }) + } + + let startDiscussion = (newTurn) => { + let getTurn = turnRef.current + if(newTurn==true){ + getTurn = 0 + setTurn((prev)=>0) + setStarted((prev)=>true) + } + + if(getTurn<2){ + fetchMessages() + } + } + + const addKey = () => { + axios.post("/store_key",{key:key}).then((res)=>{ + setKeyAdded(true) + }).catch((err)=>{ + toast("Key cannot be verified, try again"); + }) + } + + const logout = () => { + axios.get("/heybot/logout").then((res)=>{ + window.location.reload(); + }).catch((err)=>{ + console.log(err) + }) + } + + const shareChat = () => { + navigator.clipboard.writeText(window.location.host+'/conversation/share?session='+sessionRef.current) + window.open('/conversation/share?session='+sessionRef.current, "_blank"); + } + + useEffect(() => { + setRanUser1(Math.random()) + setRanUser2(Math.random()) + axios.get("/rp/isLoggedIn").then((res)=>{ + setIsLoggedIn(res.data.isLoggedIn) + if(res.data.isLoggedIn == false){ + setAuthUrl(res.data.auth_url) + }else{ + setUser({id:res.data.userId,image:res.data.image}) + if(res.data.key_added==null){ + setKeyAdded((prev)=>false) + }else{ + setKeyAdded((prev)=>true) + setKey(res.data.key_added) + } + + } + }).catch((err)=>{ + console.log(err) + }) + + window.setTimeout(()=>setShowBanner(true),30000) + },[]) + useEffect(() => { + if(document.querySelector('.end-chat')!=null){document.querySelector('.end-chat').scrollIntoView({ behavior: 'smooth', block: 'end' });} + }, [chat]) + + return ( + <> +
+
+
+

CamelAGI

+ {isLoggedIn&&
+ window.location.reload()} className="icon"/> + {setKeyAdded(false)} className="icon"/>} + +
} +
+ {isLoggedIn? + + {keyAdded? + <> + {started? + <> + + {chatRef.current.length>0&&chatRef.current.map((message)=> + message.role==0? +
+ {ranUser1!=null&&ranUser1>0.5?:} +
+
+ {message.msg==null? + + + + + : +

} +
+ {role1} +
+
: +
+
+
+ {message.msg==null? + + + + + : +

} +
+ {role2} +
+ {ranUser2!=null&&ranUser2>0.5?:} +
+ )} + {sessionRef.current!=0&&} +
+
+ {finished? +
Task Completed!
+ : + <> + {turnRef.current<3? + + :} + } + + : + <> +
Get started with a task to discuss
+ + Enter Role of the Instructor + setRole1(e.target.value)}/> + + + Enter Role of the Assistant + setRole2(e.target.value)}/> + + + Enter topic of discussion + setTask(e.target.value)}/> + + + + + } + : + +
Add your OpenAI Key
+

Get your OpenAI Key by signing up/ logging in from the OpenAI Dashboard. Go to Dashboard

+ + setKey(e.target.value)} + onKeyDown={(e)=>{e.code=="Enter"&&addKey()}} + /> + + + Watch this video to get started + +
+ } +
: + + + {/*
Login to agi
*/} +
Accomplish your task with AI agents
+ + + {/* navigate('/agi/faq')}> Know More */} +
+ } +
+ + setShowBanner(false)}> + + setShowBanner(false)} className="position-absolute top-0 end-0 me-4 mt-2">X + + Camel AGI - Communicative Agents on GPT | Product Hunt + Join Our Discord + Star CamelAGI on Github + + + +
+ + ) + +} + +export default AgentConvo; \ No newline at end of file diff --git a/client/src/pages/AgentConvoShare.js b/client/src/pages/AgentConvoShare.js new file mode 100644 index 0000000..8b48db9 --- /dev/null +++ b/client/src/pages/AgentConvoShare.js @@ -0,0 +1,125 @@ +import {useState,useEffect,useRef} from 'react'; +import '../styles/agent-convo.css' +import { Button, Stack, Image, Form,Modal, Spinner, } from "react-bootstrap"; +import { ReactComponent as Bot1Icon } from "../assets/user-1.svg"; +import { ReactComponent as Bot2Icon } from "../assets/user-2.svg"; +import { ReactComponent as Bot3Icon } from "../assets/user-3.svg"; +import { ReactComponent as Bot4Icon } from "../assets/user-4.svg"; +import logoImage from '../assets/camelagi.png' +import { useNavigate } from "react-router-dom"; +import { ToastContainer, toast } from 'react-toastify'; +import axios from "axios" +import ReactMarkdown from 'react-markdown' +import remarkGfm from 'remark-gfm' +import { ReactComponent as ShareIcon } from "../assets/share-white.svg"; +import { useSearchParams, useParams } from "react-router-dom"; + + +function AgentConvoShare() { + + const [ranUser1, setRanUser1] = useState(null); + const [ranUser2, setRanUser2] = useState(null); + const navigate = useNavigate() + const [showBanner, setShowBanner] = useState(false); + const [user, setUser] = useState(false); + const [role1, setRole1] = useState(""); + const [role2, setRole2] = useState(""); + const [task, setTask] = useState(""); + const [chat,setChat] = useState([]) + const [sessId,setSessId] = useState(0) + const sessionRef = useRef(null) + sessionRef.current = sessId + const chatRef = useRef(null) + chatRef.current = chat + let [searchParams, setSearchParams] = useSearchParams(); + + + useEffect(() => { + setRanUser1(Math.random()) + setRanUser2(Math.random()) + axios.get("/rp/get_chat?sessId="+searchParams.get("session")).then((res)=>{ + setChat(res.data.messages) + setRole1(res.data.role1) + setRole2(res.data.role2) + setTask(res.data.task) + + + }).catch((err)=>{ + console.log(err) + }) + window.setTimeout(()=>setShowBanner(true),30000) + },[]) + // useEffect(() => { + // if(document.querySelector('.end-chat')!=null){document.querySelector('.end-chat').scrollIntoView({ behavior: 'smooth', block: 'end' });} + // }, [chat]) + + return ( + <> +
+
+
+

CamelAGI

+ + +
+ + + + + Check out this conversation between {role1} and {role2} to discuss:
{task}
+ {chatRef.current.length>0&&chatRef.current.map((message)=> + message.role==0? +
+ {ranUser1!=null&&ranUser1>0.5?:} +
+
+ {message.msg==null? + + + + + : +

} +
+ {role1} +
+
: +
+
+
+ {message.msg==null? + + + + + : +

} +
+ {role2} +
+ {ranUser2!=null&&ranUser2>0.5?:} +
+ )} +
+
+ +
+ + +
+ + setShowBanner(false)}> + + setShowBanner(false)} className="position-absolute top-0 end-0 me-4 mt-2">X + + Camel AGI - Communicative Agents on GPT | Product Hunt + + + +
+ + ) + +} + +export default AgentConvoShare; \ No newline at end of file diff --git a/client/src/reportWebVitals.js b/client/src/reportWebVitals.js new file mode 100644 index 0000000..5253d3a --- /dev/null +++ b/client/src/reportWebVitals.js @@ -0,0 +1,13 @@ +const reportWebVitals = onPerfEntry => { + if (onPerfEntry && onPerfEntry instanceof Function) { + import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { + getCLS(onPerfEntry); + getFID(onPerfEntry); + getFCP(onPerfEntry); + getLCP(onPerfEntry); + getTTFB(onPerfEntry); + }); + } +}; + +export default reportWebVitals; diff --git a/client/src/setupTests.js b/client/src/setupTests.js new file mode 100644 index 0000000..8f2609b --- /dev/null +++ b/client/src/setupTests.js @@ -0,0 +1,5 @@ +// jest-dom adds custom jest matchers for asserting on DOM nodes. +// allows you to do things like: +// expect(element).toHaveTextContent(/react/i) +// learn more: https://github.com/testing-library/jest-dom +import '@testing-library/jest-dom'; diff --git a/client/src/styles/agent-convo.css b/client/src/styles/agent-convo.css new file mode 100644 index 0000000..fa3f701 --- /dev/null +++ b/client/src/styles/agent-convo.css @@ -0,0 +1,149 @@ +.agent-convo-container{ + background: #eee; +} +.agent-convo-box{ + border-radius: 12px; + background: #2b2d2f; + box-shadow: 10px 10px 40px #2b2d2f; + height: 80%; + width: 60%; +} +.agent-msg-data{ + color: #fff !important; + background-color: transparent !important; + font-family: var(--fontFamily) !important; + white-space: break-spaces; + font-size: 1rem !important; + margin: 0 !important; + overflow: hidden; + padding: 0 !important; +} + +.bubble { + --r: 12px; + --t: 10px; + + padding: calc(2*var(--r)/3); + -webkit-mask: + radial-gradient(var(--t) at var(--_d) 0,#0000 98%,#000 102%) + var(--_d) 100%/calc(100% - var(--r)) var(--t) no-repeat, + conic-gradient(at var(--r) var(--r),#000 75%,#0000 0) + calc(var(--r)/-2) calc(var(--r)/-2) padding-box, + radial-gradient(50% 50%,#000 98%,#0000 101%) + 0 0/var(--r) var(--r) space padding-box; + + color: #fff; +} +.agent-1-chat { + --_d: 0%; + border-left: var(--t) solid #0000; + margin-right: var(--t); + box-shadow: 10px 10px 40px #2b2d2f; + background: var(--themeColor) border-box; +} +.agent-2-chat { + --_d: 100%; + border-right: var(--t) solid #0000; + margin-left: var(--t); + box-shadow: 10px 10px 40px #2b2d2f; + background: #3f65f9 border-box; +} +.agent-chat-icon{ + min-width: 2.5rem; + min-height: 2.5rem; + max-width: 2.5rem; + max-height: 2.5rem; + +} +.continue-button{ + background-color: #eee !important; + color: #000 !important; + border: none !important; + border-radius: 12px !important; + /* font-size: 12px !important; */ + font-weight: 800 !important; +} +.agent-input{ + background-color: transparent !important; + color: #fff !important; + border-top: none !important; + border-left: none !important; + border-right: none !important; +} +.agent-scroll{ + overflow-y: scroll; + scrollbar-width: thin; +} +.agent-scroll::-webkit-scrollbar { + width: 0; +} +.scroll-container{ + height: 90% !important; +} +.agent-msg-container>pre{ + max-width: 30rem; +} +.key-video-agent{ + width: 60%; + min-height: 14rem; + border-radius: 12px; +} +.role-name{ + opacity: 60%; + font-size: 12px; +} +.role1-container{ + animation: role1msg 0.3s ease-out 0s forwards; + +} +.role2-container{ + animation: role2msg 0.3s ease-out 0s forwards; + +} +@keyframes role1msg { + 0% { + margin-left: -2rem; + opacity: 0; + } + 80% { + transform: scale(1.1); + } + 100% { + transform: scale(1); + opacity: 1; + } + } +.agent-share-btn{ + opacity: 0.8; + background: transparent !important; + border: 1px solid white !important; + padding: 0.2rem 0.4rem !important; + font-size: 12px !important; +} +@keyframes role1msg { + 0% { + margin-right: -2rem; + opacity: 0; + } + 80% { + transform: scale(1.1); + } + 100% { + transform: scale(1); + opacity: 1; + } + } +@media screen and (max-width:1000px){ + .agent-convo-box{ + height: 100%; + width: 100%; + border-radius: 0; + } + .agent-msg-container>pre{ + max-width: 20rem; + } +} + +.logo{ + width: 4rem; +} \ No newline at end of file diff --git a/client/src/styles/home.css b/client/src/styles/home.css new file mode 100644 index 0000000..d5bf605 --- /dev/null +++ b/client/src/styles/home.css @@ -0,0 +1,291 @@ +@import url("https://fonts.googleapis.com/css2?family=Nunito:wght@400;500;600;700;800&display=swap"); +:root { + + --hoverColor: rgb(71, 24, 182) !important ; + --fontFamily: "Nunito", sans-serif; + --border: 1px solid #dfdfdf; + --themeColor: #763FF9; + +} + +.powered-by{ + background-color: #F6F3FF; + border-radius: 22px 22px 0 0; + opacity: 0.8; + z-index: 99; + position: fixed; + bottom: 0; + right: 1rem; +} +.banner-modal>.modal-dialog>.modal-content{ + border-radius: 22px !important; +} +.producthunt-banner{ + z-index: 99; + position: fixed; + top: 1.5rem; + right: 1rem; +} + +.powered-by a{ + color: black; + font-size: 0.8rem; +} +.discord-invite{ + background-color: #5865f2; + color: white; + border-radius: 12px; + text-decoration: none; +} + +.powered-by a:hover{ + color: black; + text-decoration: underline !important; +} + +.btn-filled{ + background: #763FF9 !important; +box-shadow: 0px 2px 25px #F0EDF9 !important; +border-radius: 12px !important; +border: 1px solid #763FF9 !important; + color: white !important; +} + +.btn-filled:hover{ + background: var(--hoverColor) !important; + +} +.side-nav{ + width: 13.5rem ; + min-height: 100vh; + background: #FFFFFF; + border-right: 1px solid #DFDFDF; + box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.04); + font-size: 0.75rem; + font-weight: 700; +} +/* .mobile-nav{ + font-size: 0.75rem !important; +} */ +body,html{ + background-color: #ffffff !important; + font-family: var(--fontFamily) !important; + color:#000000 !important; +} +.nav-body, +.nav-header > .accordion-button { + padding:0.5rem 0rem !important; + border:0 !important; + background-color: transparent !important; + color: #000 !important; + font-size: 0.75rem; + font-weight: 700; +} +.os-logo{ + width: 3.75rem; + height: 3.75rem; + margin: 2.5rem 0; +} +.os-logo-mobile{ + width: 2.5rem; + height: 2.5rem; +} +.offcanvas-backdrop{ + width: 100% !important; + height: 100% !important; +} +.nav-icon{ + height: 1rem; + width: 1rem; + margin-right: 1.5rem; +} +.side-accordion{ + --bs-accordion-bg: transparent !important; +} +.nav-width{ + width: 10.5rem; +} +.nav-width>.nav-item{ + width: 100%; +} + +.nav-header > .accordion-button::after { + margin-left: auto; + +} +.accordion-button.collapsed::after{ + background-size: 1rem; + color: #000 !important; + margin-left: auto; +} +.accordion-button:not(.collapsed) { + box-shadow: none !important; + color: #000 !important; +} +.nav-header > .accordion-button:not(.collapsed)::after { + transform: rotate(-180deg) !important; + background-size: 1rem; + color: #000 !important; +} +.nav-header > .accordion-button:focus { + border: none !important; + box-shadow: none !important; +} + +.side-nav-links >.nav-link.active{ + color: #763FF9 !important; + border-radius: 1.875rem; +} + +.side-nav-links >.nav-link{ + color: #5F5B66 !important; + padding: 0.375rem 2.5rem; +} + +.side-nav-links > .active{ + background-color: #F6F3FF !important; + color: #763FF9 !important; +} + + +.rounded-cards{ + box-sizing: border-box; + background: #FFFFFF !important; + border: 1px solid #DFDFDF; + box-shadow: 0px 2px 25px #F0EDF9; + border-radius: 22px; +} + +.top-filters-cards{ + height: 2.81rem; + background: #FFFFFF !important; + border: 1px solid #DFDFDF !important; + box-shadow: 0px 2px 25px #F0EDF9 !important; + border-radius: 0.75rem; + color: #000 !important; + font-size: 0.75rem !important; + padding: 0.5rem 0.75rem !important; +} + +.dropdown>.dropdown-toggle::after{ + margin-left:20px !important; +} + +.small-text{ + font-size: 0.75rem !important ; +} +.content-container{ + max-width: 50rem; +} +.number-text{ + font-size: 1.5rem !important; + font-weight: 600 !important; +} + +.navbar-toggler:focus{ + box-shadow: none; +} +.graph-title{ + font-weight: 400; +} +.stats-table{ + background: #FFFFFF !important; + border: 1px solid #DFDFDF !important; +} +.stats-table>thead{ + background-color: #F2F2F2; + font-size: 0.75rem; +} +.stats-table>thead>tr>th,.stats-table>tbody>tr>td{ + padding: 1.5rem; + +} +/* .stats-table tr:first-child th:first-child { + border-top-left-radius: 22px; +} + +.stats-table tr:first-child th:last-child { + border-top-right-radius: 22px; +} +.stats-table tr:last-child td:first-child { + border-bottom-left-radius: 22px; +} + +.stats-table tr:last-child td:last-child { + border-bottom-right-radius: 22px; +} */ +@media screen and (max-width:992px){ + .main-col{ + margin-top: 7rem !important; + } + .nav-header > .accordion-button { + font-size: 1rem; + } + .graph-title{ + font-size: 0.9rem; + } + .stats-table>thead>tr>th,.stats-table>tbody>tr>td{ + padding: 1rem; + + } + .powered-by{ + background-color: #21cd9c; + border-radius: 0 0 12px 12px ; + top: 0; + right: 0; + bottom: auto; + } +} + +@media screen and (min-width:1600px){ + .content-container{ + max-width: 75rem; + } +} +@media screen and (max-width:500px){ + .stats-table>thead>tr>th,.stats-table>tbody>tr>td{ + padding: 0.5rem; + + } +} + +.options-bg{ +box-sizing: border-box; +background: #FFFFFF !important; +border: 1px solid #DFDFDF !important; +box-shadow: 0px 2px 25px #F0EDF9 !important; +border-radius: 50px !important; +color: #000000 !important; +font-size: 12px !important; +} + +.filter-drop > button{ + background-color: white !important; + color: #000 !important; + border: 0px !important; + font-size: 12px !important; + padding-left: 3px !important; + padding-right: 3px !important; + padding-top: 6px !important; + padding-bottom: 6px !important; +} +.filter-drop >.dropdown-toggle::after{ + content:none !important; +} + +.filter-drop > .dropdown-menu{ + font-size: 12px !important; + min-width: 5rem !important; + border: 1px solid #ececec!important; + box-shadow: 0px 2px 25px #F0EDF9 !important; +} + +.vr{ + background-color: #acacac !important; +} + +.icon{ + width: 1.3rem ; + height: 1.3rem ; + cursor: pointer ; +} diff --git a/server/agent_convo.py b/server/agent_convo.py new file mode 100644 index 0000000..dfb21af --- /dev/null +++ b/server/agent_convo.py @@ -0,0 +1,286 @@ +from database import * +import urllib.parse +from flask import jsonify,request,session,render_template,redirect,url_for,Blueprint +from requests_oauthlib import OAuth2Session +from flask_login import login_required, login_user, current_user, logout_user +import secrets +from datetime import datetime, date, timedelta, timezone +import os, pickle, codecs +from typing import List +from langchain.chat_models import ChatOpenAI +from langchain.prompts.chat import ( + SystemMessagePromptTemplate, + HumanMessagePromptTemplate, +) +from langchain.schema import ( + AIMessage, + HumanMessage, + SystemMessage, + BaseMessage, +) + +authorization_base_url = "https://accounts.google.com/o/oauth2/v2/auth" +scope = [ + "https://www.googleapis.com/auth/userinfo.email", + "https://www.googleapis.com/auth/userinfo.profile", + "openid" +] +google_client_id = os.environ['google_client_id'] +google_client_secret = os.environ['google_client_secret'] +word_limit = 50 # word limit for task brainstorming + +rp = Blueprint('rp', __name__) + + +@rp.route("/rp/isLoggedIn", methods=['GET']) +def rp_isLoggedIn(): + url_host = urllib.parse.urlsplit(request.url).hostname + if "5000" in request.url: + redirect_uri = "http://"+url_host+":5000/rp/google_callback" + else: + redirect_uri = "https://"+url_host+"/rp/google_callback" + google = OAuth2Session( + google_client_id, scope=scope, redirect_uri=redirect_uri) + login_url, state = google.authorization_url(authorization_base_url) + session['oauth_state'] = google_client_id + if current_user.is_authenticated: + if current_user.openai_key == "" or current_user.openai_key == None: + keyAdded = None + else: + keyAdded = current_user.openai_key + return jsonify(isLoggedIn=current_user.is_authenticated,userId=current_user.id,key_added=keyAdded,image=current_user.profile_image) + else: + return jsonify(isLoggedIn=False,auth_url=login_url) + +@rp.route("/rp/google_callback", methods=['GET']) +def rp_google_callback(): + url_host = urllib.parse.urlsplit(request.url).hostname + if "5000" in request.url: + redirect_uri = "http://"+url_host+":5000/rp/google_callback" + else: + redirect_uri = "https://"+url_host+"/rp/google_callback" + google = OAuth2Session( + google_client_id, scope=scope, redirect_uri=redirect_uri) + token_url = "https://www.googleapis.com/oauth2/v4/token" + welcome = False + try: + google.fetch_token(token_url, client_secret=google_client_secret, + authorization_response=request.url) + except: + pass + response = google.get( + 'https://www.googleapis.com/oauth2/v1/userinfo').json() + email = response["email"].lower() + googleId = str(response["id"]) + name = response["name"] + image = response["picture"] + getAdmin = Admin.query.filter_by(email=email).first() + if getAdmin == None: + getAdmin = Admin(id=secrets.token_urlsafe(24), email=email,google_id=googleId, name=name,profile_image=image, created_date=datetime.now()) + db.session.add(getAdmin) + db.session.commit() + else: + getAdmin.google_id = googleId + getAdmin.profile_image = image + db.session.commit() + login_user(getAdmin, remember=True) + return redirect("http://localhost:3000/") + +class CAMELAgent: + + def __init__( + self, + system_message, + model: ChatOpenAI, + store + ) -> None: + self.model = model + if store == None: + self.system_message = system_message + self.init_messages() + # print("NEW") + else: + self.stored_messages = store + self.system_message = store[0] + # print("MESSAGES \n",self.stored_messages,"\n SYSTEM MESSAGE \n",self.system_message) + + def reset(self) -> None: + self.init_messages() + return self.stored_messages + + def init_messages(self) -> None: + self.stored_messages = [self.system_message] + # for msg in self.stored_messages: + # print("INTIALIZED",msg.content,"\n") + + def update_messages(self, message: BaseMessage) -> List[BaseMessage]: + self.stored_messages.append(message) + # for msg in self.stored_messages: + # print("UPDATED",msg.content,"\n") + return self.stored_messages + + def step( + self, + input_message: HumanMessage, + ) -> AIMessage: + messages = self.update_messages(input_message) + output_message = self.model(messages) + self.update_messages(output_message) + + return output_message + + def store_messages(self) -> None: + return self.stored_messages + + + + +def starting_convo(assistant_role_name,user_role_name,task): + task_specifier_sys_msg = SystemMessage(content="You can make a task more specific.") + task_specifier_prompt = ( + """Here is a task that {assistant_role_name} will help {user_role_name} to complete: {task}. + Please make it more specific. Be creative and imaginative. + Please reply with the specified task in {word_limit} words or less. Do not add anything else.""" + ) + task_specifier_template = HumanMessagePromptTemplate.from_template(template=task_specifier_prompt) + task_specify_agent = CAMELAgent(task_specifier_sys_msg, ChatOpenAI(temperature=1.0),None) + task_specifier_msg = task_specifier_template.format_messages(assistant_role_name=assistant_role_name, + user_role_name=user_role_name, + task=task, word_limit=word_limit)[0] + specified_task_msg = task_specify_agent.step(task_specifier_msg) + # print(f"Specified task: {specified_task_msg.content}") + specified_task = specified_task_msg.content + + assistant_inception_prompt = ( + """Never forget you are a {assistant_role_name} and I am a {user_role_name}. Never flip roles! Never instruct me! + We share a common interest in collaborating to successfully complete a task. + You must help me to complete the task. + Here is the task: {task}. Never forget our task! + I must instruct you based on your expertise and my needs to complete the task. + + I must give you one instruction at a time. + You must write a specific solution that appropriately completes the requested instruction. + You must decline my instruction honestly if you cannot perform the instruction due to physical, moral, legal reasons or your capability and explain the reasons. + Do not add anything else other than your solution to my instruction. + You are never supposed to ask me any questions you only answer questions. + You are never supposed to reply with a flake solution. Explain your solutions. + Your solution must be declarative sentences and simple present tense. + Unless I say the task is completed, you should always start with: + + Solution: + + should be specific and provide preferable implementations and examples for task-solving. + Always end with: Next request.""" + ) + + user_inception_prompt = ( + """Never forget you are a {user_role_name} and I am a {assistant_role_name}. Never flip roles! You will always instruct me. + We share a common interest in collaborating to successfully complete a task. + I must help you to complete the task. + Here is the task: {task}. Never forget our task! + You must instruct me based on my expertise and your needs to complete the task ONLY in the following two ways: + + 1. Instruct with a necessary input: + Instruction: + Input: + + 2. Instruct without any input: + Instruction: + Input: None + + The "Instruction" describes a task or question. The paired "Input" provides further context or information for the requested "Instruction". + + You must give me one instruction at a time. + I must write a response that appropriately completes the requested instruction. + I must decline your instruction honestly if I cannot perform the instruction due to physical, moral, legal reasons or my capability and explain the reasons. + You should instruct me not ask me questions. + Now you must start to instruct me using the two ways described above. + Do not add anything else other than your instruction and the optional corresponding input! + Keep giving me instructions and necessary inputs until you think the task is completed. + When the task is completed, you must only reply with a single word . + Never say unless my responses have solved your task.""" + ) + return specified_task,assistant_inception_prompt,user_inception_prompt + +def get_sys_msgs(assistant_role_name: str, user_role_name: str, task: str,assistant_inception_prompt,user_inception_prompt): + + assistant_sys_template = SystemMessagePromptTemplate.from_template(template=assistant_inception_prompt) + assistant_sys_msg = assistant_sys_template.format_messages(assistant_role_name=assistant_role_name, user_role_name=user_role_name, task=task)[0] + + user_sys_template = SystemMessagePromptTemplate.from_template(template=user_inception_prompt) + user_sys_msg = user_sys_template.format_messages(assistant_role_name=assistant_role_name, user_role_name=user_role_name, task=task)[0] + + return assistant_sys_msg, user_sys_msg + +@rp.route("/rp/start", methods=['POST']) +def start_rp(): + if not current_user.is_authenticated: + return redirect("/agent_convo") + os.environ["OPENAI_API_KEY"] = current_user.openai_key + assistant_role_name = request.json["role1"] + user_role_name = request.json["role2"] + task = request.json["task"] + sessId = request.json["sessId"] + if sessId == 0: + getSession = Agent_Session(role_1=assistant_role_name,role_2=user_role_name,task=task,admin_id=current_user.id) + db.session.add(getSession) + db.session.commit() + specified_task,assistant_inception_prompt,user_inception_prompt = starting_convo(assistant_role_name, user_role_name, task) + assistant_sys_msg, user_sys_msg = get_sys_msgs(assistant_role_name, user_role_name, specified_task,assistant_inception_prompt,user_inception_prompt) + assistant_agent = CAMELAgent(assistant_sys_msg, ChatOpenAI(temperature=0.2),None) + user_agent = CAMELAgent(user_sys_msg, ChatOpenAI(temperature=0.2),None) + # Reset agents + assistant_agent.reset() + user_agent.reset() + + # Initialize chats + assistant_msg = HumanMessage( + content=(f"{user_sys_msg.content}. " + "Now start to give me introductions one by one. " + "Only reply with Instruction and Input.")) + + user_msg = HumanMessage(content=f"{assistant_sys_msg.content}") + user_msg = assistant_agent.step(user_msg) + else: + getSession = Agent_Session.query.filter_by(id=sessId).first() + user_store = pickle.loads(codecs.decode((getSession.user_store).encode(), "base64")) + assistant_store = pickle.loads(codecs.decode((getSession.assistant_store).encode(), "base64")) + user_agent = CAMELAgent(None, ChatOpenAI(temperature=0.2),user_store) + assistant_agent = CAMELAgent(None, ChatOpenAI(temperature=0.2),assistant_store) + assistant_msg = HumanMessage( + content=(f"{assistant_store[-1].content}")) + + # chat_turn_limit, n = 10, 0 + # while n < chat_turn_limit: + # n += 1 + user_ai_msg = user_agent.step(assistant_msg) + user_msg = HumanMessage(content=user_ai_msg.content) + userMsg = user_msg.content.replace("Instruction: ","").replace("Input: None","").replace("Input: None.","") + # print(f"AI User ({user_role_name}):\n\n{user_msg.content}\n\n") + assistant_ai_msg = assistant_agent.step(user_msg) + assistant_msg = HumanMessage(content=assistant_ai_msg.content) + assistantMsg = assistant_msg.content.replace("Solution: ","").replace("Next request.","") + # print(f"AI Assistant ({assistant_role_name}):\n\n{assistant_msg.content}\n\n") + convoEnd = False + if "" in user_msg.content: + convoEnd = True + getUserStore = user_agent.store_messages() + getSession.user_store = codecs.encode(pickle.dumps(getUserStore), "base64").decode() + getAssistantStore = assistant_agent.store_messages() + getSession.assistant_store = codecs.encode(pickle.dumps(getAssistantStore), "base64").decode() + db.session.commit() + return jsonify(sessId=getSession.id,userMsg=userMsg,assistantMsg=assistantMsg,convoEnd=convoEnd) + + +@rp.route("/rp/get_chat", methods=['get']) +def rp_get_chat(): + sessId = request.args.get('sessId') + getSession = Agent_Session.query.filter_by(id=sessId).first() + assistant_store = pickle.loads(codecs.decode((getSession.assistant_store).encode(), "base64")) + messages = [] + for store in assistant_store[2:]: + if str(type(store)) == "": + messages.append({"role":0,"msg":store.content.replace("Instruction: ","").replace("Input: None","").replace("Input: None.","")}) + elif str(type(store)) == "": + messages.append({"role":1,"msg":store.content.replace("Solution: ","").replace("Next request.","")}) + return jsonify(role1=getSession.role_1,role2=getSession.role_2,task=getSession.task,messages=messages) diff --git a/server/database.py b/server/database.py new file mode 100644 index 0000000..04599b2 --- /dev/null +++ b/server/database.py @@ -0,0 +1,43 @@ +from flask_sqlalchemy import SQLAlchemy +from sqlalchemy import DateTime, ForeignKey, MetaData +from flask_login import UserMixin + +from flask import Flask + +convention = { + "ix": 'ix_%(column_0_label)s', + "uq": "uq_%(table_name)s_%(column_0_name)s", + "ck": "ck_%(table_name)s_%(constraint_name)s", + "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s", + "pk": "pk_%(table_name)s" +} + +metadata = MetaData(naming_convention=convention) +db = SQLAlchemy(metadata=metadata) +app = Flask(__name__) + +class Agent_Session(db.Model): + __tablename__ = "agent_session" + id = db.Column(db.Integer, primary_key=True, autoincrement=True) + role_1 = db.Column(db.String(200), default="", server_default = "") + role_2 = db.Column(db.String(200), default="", server_default = "") + task = db.Column(db.String(3000), default="", server_default = "") + user_store = db.Column(db.String, default="", server_default = "") + assistant_store = db.Column(db.String, default="", server_default = "") + admin_id = db.Column(db.String(100), ForeignKey("admin.id"), index=True) + +class Admin(UserMixin,db.Model): + __tablename__ = "admin" + id = db.Column(db.String(100), primary_key=True) + name = db.Column(db.String(100)) + email = db.Column(db.String(100), unique=True, index=True) + google_id = db.Column(db.String(100)) + openai_key = db.Column(db.String(100)) + profile_image = db.Column(db.String(100000)) + password = db.Column(db.String(100)) + created_date = db.Column(DateTime) + gpt_model = db.Column(db.String, default="gpt-3.5-turbo", server_default="gpt-3.5-turbo") + agent_sessions = db.relationship('Agent_Session', backref='admin', + cascade="all,delete", lazy='dynamic') + def get_id(self): + return (self.id) \ No newline at end of file diff --git a/server/requirements.txt b/server/requirements.txt new file mode 100644 index 0000000..e69de29 diff --git a/server/webserver.py b/server/webserver.py new file mode 100644 index 0000000..26370ff --- /dev/null +++ b/server/webserver.py @@ -0,0 +1,66 @@ +from flask import Flask +from flask_migrate import Migrate +from database import * +import os +import urllib.parse +from flask import jsonify,request,session,render_template,redirect,url_for,Blueprint +from requests_oauthlib import OAuth2Session +from flask_login import UserMixin, LoginManager, login_required, login_user, current_user, logout_user +import secrets +from datetime import datetime, date, timedelta, timezone +import os +import json +import random +import requests +from agent_convo import rp + +try: + import config +except ModuleNotFoundError: + pass + + +app = Flask(__name__) +app.register_blueprint(rp) +app.secret_key = 'autogptsamurai@123' + +app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///./test.db' +db.init_app(app) +db.app = app +migrate = Migrate(app, db, compare_type=True, + render_as_batch=True) + +login_manager = LoginManager(app) + + +@login_manager.user_loader +def load_user(user_id): + return Admin.query.filter_by(id=user_id).first() + +os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1' + +@app.route("/change_model", methods=['POST']) +def change_model(): + model = request.values["model"] + current_user.gpt_model = model + db.session.commit() + return "Success" + +@app.route("/logout", methods=['GET']) +def logout(): + logout_user() + return "Success", 200 + +@app.route("/store_key", methods=['POST']) +def store_key(): + key = request.json['key'] + getAdmin = Admin.query.filter_by(id=current_user.id).first() + if len(key) == 51: + getAdmin.openai_key = key + db.session.commit() + return jsonify(True) + else: + return jsonify(False), 400 + +if __name__ == '__main__': + app.run(host="0.0.0.0", debug=True)