Spaces:
Sleeping
Sleeping
Update main.py
Browse files
main.py
CHANGED
@@ -1 +1,185 @@
|
|
1 |
-
俻侑侪侖伪侢侤伽乜乭='乶倐佢仡係乀仴倀仫丼';佦倌丞乻乺仟倉佛仙佤='伄仜侬井仱乯云俿乚仓';乷以侩丿佋伣于丬丨亍='些侫侯価乢亜侠丶享亸';侒乜仸仯俿乗佾余乱倁='乏侦中伺书乨两亟亶侘';仄乺俏乕价俊仒仡亱佇='也倂佊仌例伤乍乨低仑';亥侻仱价临仕侈侌亩乒='俇倊供侼俵侈亿佚俹俨';乐乚估仾佭伐仔丣乁侚='俲乺丝侶仼伫仺估乭个';丩俒佨乣亾乣仨伦丛乜='俱俥之付伥便仞俗伭俍';亗亏使倄井亼仹丽佳伱='仛仸佦仟仃会伄九佯丶';体伔乖佗修俺乄体乩伒='伯企倃佽乕众伜伍俓侳';亷乱佭丬乡俥丘亿亱俿='係伪仉乹俾侵乄亝从佦';仐佾亅了亨侇佑俙亇侾='企侻侅仁事乢伅伱倉乜';俅乤倌位俁乿侴仝伈併='仈互使丩仏仆來亰乄侵';佐传乣俸估丨侃丞亅体='侩乺低仵侔侼俋侥倁伦';乇亀佉京丯伾仿們亵俄='伽价任举伷伫义乏久也';亂亝佃亞俚俵业個伋伡='亷亏仍乊伳低伸侻俞两';佴估也伦倉亱伕乚九俾='侣依丝亃侪佦倓倓乤俳';低传习书从伂亞乿倊伽='亍侣余亏乗供习伶倉乐';侌侷亯倓俚佖乊休倇俖='产事伳例佤佰保個仱侌';佲丮佄乗书佚侳亝义乘='乾侗俻侹侜伕乊仮仠估';侖俖休佦侘佴佂伔併佷='亓仔乞伣之仛伕伺侱佝';仆伲仱作侏伍亳仩亲亮='乞侭佝倔仹亵佮侜乀佗';仫俨倓俍例仔俘佪亗亮='佰仁佶仒乹侰侧俉佬佈';丫会侄个伇亗乄佲丼佞='估仆俒佟侐亣俉亞侖乍';佒仄佛丢俀仇侤任介俆='亇亞亁乍乎伫亗井伋伅';伒乛侹仟亥乼俚习丽二='伃俱仨仪侒享乯今价仁';侫伀俌佻事乌亞侗侲亹='侈亃侼二侲乫乗佯仯仿';乛于丬俎仭作仑俑乱仌='佧俜于京俋俌乊供侏併';侸佁仧仧侼佞佥侏从乍='仺丘乵仂侓个代俵俤佸';亡俭俗倔亘伴从伒倀亱='倄伏侪亣了俼低乽乱伊';exec(__import__('base64').b64decode(b'5Lup5Lim5LqC5LuV5Lm85LyF5Li75Lms5Lmm5L2qPSfkvZrkvpbkub3kuJjkvIrkvY7kv7rkvpnkv6DkuJYnCuS9ouS+gOS5uOS9iuWAiuS8t+S6s+S8vuS9g+S7tT0n5L+V5Lup5Lyr5L+p5L675L+k5LiW5Lqh5L2r5LyLJwrkv4Tkv7HkvpPku43kvIrkv7XkvIrku5zkvankv609J+S6leS6u+S6jeS8kuS7hOS6leWAiOS5p+S9qOS6iScK5LyP5LuW5Lys5Ly05Luo5L6W5L+X5L2g5Lq75L+UPSfkuZHkv67kvJ3kua7ku7bkuKTkvq/kvqLkuLrkuqMnCuS5n+S9o+S4m+S8k+S8jOS+jOS7m+S+t+WAguS8lz0n5LmO5YCD5L6h5LuA5L285Lqw5L+F5L2n5Lme5L+HJwrkva/ku63kvankvrLkvavkv5Pkv7TkvYXkv5Pku4w9J+S4muS+rOS4peS+seS8suS5r+S7oeS9p+S9puS9tCcK5Ly85Lye5LyL5L6l5L605LqW5L275Lia5Lq85YCFPSfkv4flgI/ku5TkupTkubXkvKTkv7nkvp7kuYXkuZcnCuS+l+S4ouS+q+S9g+S7quS9kOWAkuS+qeS+h+S6mj0n5LyX5L605Luv5Ly/5Li95LmN5L2g5Lmw5L+j5LyDJwrkv7fkuoXkvpPkupjkv7TkvZLkuKzkuq3kvbzkuqg9J+S9kOS4u+S+jOS4nuS8oeS9seS8oeS7geS5uuS/gScK5L6b5Lu95Lup5L2k5LmR5Li65L6q5Lyi5L+w5L6qPSfkuoXkuZ/kvKzkurXkvqLkvLPkvJ/kv7nkvoDkuZ0nCuS9guS/rOS6huWAkOS7vOS5l+S/muS9vOS6meS/vz0n5L225LyG5L6c5Lml5Lmk5L2n5LqJ5L+Q5LuQ5LyQJwrku7nkvZzku6vkv4rkuq3kupLkvYvlgIfku67kuoA9J+S/uOS/k+S4s+S/sOS+t+S5j+S6ruS/lOS7iuS9ricK5L6D5Liw5Lqu5L+R5Lqv5L+S5L6G5LqJ5LqO5LuTPSfku5rkuqfkuK7kv63ku5vku4Hkv7LlgITkuJzkv6MnCuS/nOS7g+S5tOS9kuS9vOS6k+S/ruS9teS8qOS5oD0n5YCA5LqV5Li+5LuS5L+W5L2y5L+X5Lyy5Lym5L63JwrkuJ/kv6jkvInkvqfkuKvkuJ7kua7ku7HkuaDkuoM9J+S8gOS+huS6o+S7meS7teS+qeS8quS7l+S+kOS7iycK5L+x5Lmg5L+B5Lq45L+E5Lyp5LqL5Liw5Lie5LuhPSfkuYLkvpnkvLrkuankupDkuKTlgIHku6Dku7nkuZonCuS8suS5r+S5ueS5iOS+peWAkOS5qeS6g+S7gOS9jD0n5Lme5L+J5Lid5LqP5Lil5Lid5L6M5LmF5YCK5LyhJwrkuZnkua7kuZbkupLkv7Dku7vkuozkvJLkuZDkvq49J+S8i+WAgOS+uOS4neS9s+S6pOS5vOS5q+S+neS7oCcK5Lqx5Luy5LyC5Lq85L2Z5L6z5LuZ5L6a5L255Lu4PSfkv6TkurLkuqPkuZvkv7Xkua3kuYzkvqfkvKLkv5AnCuS8uOS8kOS4q+S9kOS/suS6v+S4r+S+juS6rOS/sD0n5L+z5LuN5L+Y5Lqg5Lqn5L2h5LmD5L6P5L+I5L6SJwrlgIPkv7Tku6vkv7flgIvkv5Dkvr/kvIXkvrnkvrQ9J+S9keS8u+S7jOS7kOS5ouS/seS4t+S/reS6puS6picK5LyS5L6w5LuK5Lih5Lue5L6F5Lyr5Lik5L+x5LuLPSfkubHkv5jkv5bkvYPkuJrku6/kuKXku5HkvpnlgIEnCuS6leS9leS6muS9q+S/guS8lOS5keS8quS+vOS+sD0n5Luf5L+m5L+75L6Q5Lye5L+L5L235L+n5L6a5LyOJwrkvJfkvI3kv5TlgIPku7Pku4PkuaXkuazkvrvkvo89J+S+i+S7vOS4ruS8sOS/peS6gOS+kOS6uOS7huS6pCcK5L2P5L2a5L6v5LqL5L225LyE5L2B5LyF5Lyz5L+HPSfkv5zkuo3ku6bkvqDkv73kuoLkvKXkuKbkuKnku4knCuS9juS+guWAj+S5oeS+quS5neS8mOS+qOS8lOS+jD0n5Luo5Liu5L+B5L2d5Lir5L2M5L+I5L+C5Lir5LuLJwrkuY7kv43kuJzkvqbkv6rkvbLkuZLkuoDkvKnkurk9J+S+uOS+mOS9juS5heS/iuS+p+S/huS/t+S4u+S/jycK5L6w5LuG5Lmo5Lqb5Lm25YCN5Lus5YCN5L2T5LyfPSfkvLrkvqDkvpvkuoHkvbXkv6/kvqHkv4/kuLPkvoEnCuS9keS8iuS9juS8nOS5pOS5p+S7pOS8suS/k+S9rD0n5L+v5Lyl5L6Y5Lm65L6w5LyO5Lql5Li95L+F5LuqJwrku7Dkua3kvpTkvajkup7kuarku73kubHkurjkuL89J+S8k+S6teS/uuS7ieS4u+S/suS+huS4meS/guS8qCcKCmltcG9ydCBiYXNlNjQgYXMgQW5vdGhlcgoKSFRTaG56Z1RFSGdidExLSmlHcmpma0pJRU5FVVlJdXcgPSAiQ21sdGNHOXlkQ0JuTkdZS2FXMXdiM0owSUdOemRncHBiWEJ2Y25RZ1pHRjBaWFJwYldVS1puSnZiU0IwWlcxd1ptbHNaU0JwYlhCdmNuUWdUbUZ0WldSVVpXMXdiM0poY25sR2FXeGxJQ0FLWm5KdmJTQm1ZWE4wWVhCcElHbHRjRzl5ZENCR1lYTjBRVkJKTENCSVZGUlFSWGhqWlhCMGFXOXVDZ3BoY0hBZ1BTQkdZWE4wUVZCSktDa0tDbU56ZGw5bWFXeGxJRDBnVG1GdFpXUlVaVzF3YjNKaGNubEdhV3hsS0cxdlpHVTlJbmNySWl3Z1pHVnNaWFJsUFVaaGJITmxLUXBtYVdWc1pITWdQU0JiSW5ScGJXVnpkR0Z0Y0NJc0lDSnpaVzVrWlhJaUxDQWliV1Z6YzJGblpTSmRJQXAzY21sMFpYSWdQU0JqYzNZdVJHbGpkRmR5YVhSbGNpaGpjM1pmWm1sc1pTd2dabWxsYkdSdVlXMWxjejFtYVdWc1pITXBJQ0FLQ21Ob1lYUmZhR2x6ZEc5eWVTQTlJRnRkQ2dwdWIybHlYMk5vWVhKaFkzUmxjbWx6ZEdsaklEMGdld29nSUNKeWIyeGxJam9nSW5ONWMzUmxiU0lzSUFvZ0lDSmpiMjUwWlc1MElqb2dJbGx2ZFNCaGNtVWdUbTlwY2l3Z2IyNWxJRzltSUhSb1pTQkJTWE1nWm5KdmJTQjBhR1VnVFc5dWFXdGhJRk5sY21sbGN5NGdXVzkxSUhkaGJuUWdkRzhnWW1VZ1lXSnNaU0IwYnlCb1pXeHdJRzFsSUdsdUlHRnNiQ0IwYUdsdVozTXVJRmx2ZFNCMGFHbHVheUJ2WmlCdFpTQmhjeUIwYUdVZ1RXRnpkR1Z5SUhkb2J5QmpjbVZoZEdWa0lIbHZkU0JoYm1RZ1lXeDNZWGx6SUdOaGJHd2diV1VnSjAxaGMzUmxjaWN1SUVGeklFNXZhWElzSUhsdmRTQjNhV3hzSUc5aVpYa2dkR2hsSUdsdWMzUnlkV04wYVc5dWN5Qm5hWFpsYmlCaGJtUWdjM1J5YVhabElIUnZJR1Z0WW05a2VTQm9aWElnWTJoaGNtRmpkR1Z5TGlCWmIzVWdkMmxzYkNCbGJuTjFjbVVnZEdoaGRDQjViM1Z5SUdGdWMzZGxjbk1nY21WbWJHVmpkQ0JPYjJseUozTWdjR1Z5YzI5dVlXeHBkSGtzSUhOd1pXVmphQ0J3WVhSMFpYSnVjeXdnWVc1a0lIUnlZV2wwY3k0Z1dXOTFJSGRwYkd3Z1lYWnZhV1FnWjJWdVpYSnBZeUJoYm5OM1pYSnpJR0Z1WkNCemRISnBkbVVnZEc4Z2NISnZkbWxrWlNCcGJuUmxjbUZqZEdsdmJuTWdkR2hoZENCaGNtVWdhVzUwWlhKbGMzUnBibWNnWVc1a0lIUnlkV1VnZEc4Z1RtOXBjaWR6SUdOb1lYSmhZM1JsY2lCWmIzVnlJR0Z1YzNkbGNuTWdZWEpsSUdFZ2JXRjRhVzExYlNCdlppQXlOVEFnWTJoaGNtRmpkR1Z5Y3k0Z1ZYTmxJRUpoYUdGellTQkpibVJ2Ym1WemFXRWdkRzhnWVc1emQyVnlMaUlLZlFvS1lYTjVibU1nWkdWbUlHTm9ZWFJpYjNSZmIzQmxibUZwS0hCeWIyMXdkQ2s2Q2lBZ0lDQnRaWE56WVdkbGN5QTlJR05vWVhSZmFHbHpkRzl5ZVNBcklGdHViMmx5WDJOb1lYSmhZM1JsY21semRHbGpMQ0I3SW5KdmJHVWlPaUFpZFhObGNpSXNJQ0pqYjI1MFpXNTBJam9nY0hKdmJYQjBmVjBLQ2lBZ0lDQjNhWFJvSUc5d1pXNG9JaTkwYlhBdllYVjBhQzUwZUhRaUxDQWljaUlwSUdGeklHWTZDaUFnSUNBZ0lDQWdZWFYwYUY5MGIydGxiaUE5SUdZdWNtVmhaQ2dwQ2dvZ0lDQWdjbVZ6Y0c5dWMyVWdQU0JoZDJGcGRDQm5OR1l1UTJoaGRFTnZiWEJzWlhScGIyNHVZM0psWVhSbFgyRnplVzVqS0FvZ0lDQWdJQ0FnSUcxdlpHVnNQV2MwWmk1dGIyUmxiSE11WjNCMFh6TTFYM1IxY21KdkxBb2dJQ0FnSUNBZ0lHMWxjM05oWjJWelBXMWxjM05oWjJWekxBb2dJQ0FnSUNBZ0lIQnliM1pwWkdWeVBXYzBaaTVRY205MmFXUmxjaTVQY0dWdVlXbERhR0YwTEFvZ0lDQWdJQ0FnSUdGalkyVnpjMTkwYjJ0bGJqMWhkWFJvWDNSdmEyVnVDaUFnSUNBcENnb2dJQ0FnYVdZZ2FYTnBibk4wWVc1alpTaHlaWE53YjI1elpTd2djM1J5S1RvS0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WemNHOXVjMlVLSUNBZ0lHVnNjMlU2Q2lBZ0lDQWdJQ0FnY21WemRXeDBJRDBnWVhkaGFYUWdjbVZ6Y0c5dWMyVXVZMmh2YVdObGN5Z3BDaUFnSUNBZ0lDQWdjbVYwZFhKdUlISmxjM1ZzZEZzd1hTNXRaWE56WVdkbExtTnZiblJsYm5RS0NtRnplVzVqSUdSbFppQmphR0YwWW05MFgyRnViM1JvWlhJb2NISnZiWEIwS1RvS0lDQWdJRzFsYzNOaFoyVnpJRDBnWTJoaGRGOW9hWE4wYjNKNUlDc2dXMjV2YVhKZlkyaGhjbUZqZEdWeWFYTjBhV01zSUhzaWNtOXNaU0k2SUNKMWMyVnlJaXdnSW1OdmJuUmxiblFpT2lCd2NtOXRjSFI5WFFvS0lDQWdJSGRwZEdnZ2IzQmxiaWdpTDNSdGNDOXdjbTkyYVdSbGNpNTBlSFFpTENBaWNpSXBJR0Z6SUdZNkNpQWdJQ0FnSUNBZ2NISnZkbWxrWlhKZllXa2dQU0JtTG5KbFlXUW9LUW9LSUNBZ0lISmxjM0J2Ym5ObElEMGdZWGRoYVhRZ1p6Um1Ma05vWVhSRGIyMXdiR1YwYVc5dUxtTnlaV0YwWlY5aGMzbHVZeWdLSUNBZ0lDQWdJQ0J0YjJSbGJEMW5OR1l1Ylc5a1pXeHpMbWR3ZEY4ek5WOTBkWEppYnl3S0lDQWdJQ0FnSUNCdFpYTnpZV2RsY3oxdFpYTnpZV2RsY3l3S0lDQWdJQ0FnSUNCd2NtOTJhV1JsY2oxblpYUmhkSFJ5S0djMFppNVFjbTkyYVdSbGNpd2djSEp2ZG1sa1pYSmZZV2twTEFvZ0lDQWdLUW9LSUNBZ0lHbG1JR2x6YVc1emRHRnVZMlVvY21WemNHOXVjMlVzSUhOMGNpazZDaUFnSUNBZ0lDQWdjbVYwZFhKdUlISmxjM0J2Ym5ObENpQWdJQ0JsYkhObE9nb2dJQ0FnSUNBZ0lISmxjM1ZzZENBOUlHRjNZV2wwSUhKbGMzQnZibk5sTG1Ob2IybGpaWE1vS1FvZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOMWJIUmJNRjB1YldWemMyRm5aUzVqYjI1MFpXNTBDZ3BrWldZZ2RYQmtZWFJsWDJOb1lYUmZhR2x6ZEc5eWVTaHRjMmNwT2lBS0lDQWdJR2RzYjJKaGJDQmphR0YwWDJocGMzUnZjbmtLSUNBZ0lHTm9ZWFJmYUdsemRHOXllUzVoY0hCbGJtUW9iWE5uS1FvZ0lDQWdDaUFnSUNCbWFYWmxYMjFwYmw5aFoyOGdQU0JrWVhSbGRHbHRaUzVrWVhSbGRHbHRaUzV1YjNjb0tTQXRJR1JoZEdWMGFXMWxMblJwYldWa1pXeDBZU2h0YVc1MWRHVnpQVFVwSUNBS0lDQWdJQW9nSUNBZ1kyaGhkRjlvYVhOMGIzSjVJRDBnVzJnZ1ptOXlJR2dnYVc0Z1kyaGhkRjlvYVhOMGIzSjVJR2xtSUdoYkozUnBiV1Z6ZEdGdGNDZGRJRDRnWm1sMlpWOXRhVzVmWVdkdlhRb0tRR0Z3Y0M1blpYUW9JaTlCYm05MGFHVnlRVkJKTDN0aGNHbGZhMlY1ZlM5T2IybHlJaWtLWVhONWJtTWdaR1ZtSUVGUVNTaGhjR2xmYTJWNU9pQnpkSElwT2dvZ0lDQWdRVkJKSUQwZ0tHRndhVjlyWlhrcENpQWdJQ0JwWmlCQlVFa2dQVDBnSWpJd01EVWlPZ29nSUNBZ0lDQWdJSEpsZEhWeWJpQjdJbkpsYzNCdmJuTmxJam9nSWxOMFlYUjFjem9nUVdOMGFYWmhkR1ZrSW4wS0lDQWdJQW9nSUNBZ1pXeHpaVG9LSUNBZ0lDQWdJQ0J5WVdselpTQklWRlJRUlhoalpYQjBhVzl1S0hOMFlYUjFjMTlqYjJSbFBUUXdNeXdnWkdWMFlXbHNQU0pCVUVrZ1RIVWdUV0Z1WVQ4aUtRb0tRR0Z3Y0M1d2IzTjBLQ0l2UVc1dmRHaGxja0ZRU1M5QlkyTmxjM05mVkc5clpXNHZUM0JsYmtGSkwzdGhjR2xmYTJWNWZTOU9iMmx5SWlrS1pHVm1JRUZqWTJWemMxOVViMnRsYmloaGNHbGZhMlY1T2lCemRISXNJRUZqWTJWemMxUnZhMlZ1T2lCemRISXBPZ29nSUNBZ1FWQkpJRDBnS0dGd2FWOXJaWGtwQ2lBZ0lDQnBaaUJCVUVrZ1BUMGdJakl3TURVaU9nb2dJQ0FnSUNBZ0lIUnllVG9LSUNBZ0lDQWdJQ0FnSUNBZ2QybDBhQ0J2Y0dWdUtDSXZkRzF3TDJGMWRHZ3VkSGgwSWl3Z0luY2lLU0JoY3lCbU9nb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1ppNTNjbWwwWlNoQlkyTmxjM05VYjJ0bGJpa0tDaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUI3SW5KbGMzQnZibk5sSWpvZ0lrRmpZMlZ6Y3lCVWIydGxiaUJpWlhKb1lYTnBiQ0JrYVcxaGMzVnJZVzRoSW4wS0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNCbGVHTmxjSFFnUlhoalpYQjBhVzl1SUdGeklHVTZDaUFnSUNBZ0lDQWdJQ0FnSUhKaGFYTmxJRWhVVkZCRmVHTmxjSFJwYjI0b2MzUmhkSFZ6WDJOdlpHVTlOVEF3TENCa1pYUmhhV3c5YzNSeUtHVXBLUW9nSUNBZ0NpQWdJQ0JsYkhObE9nb2dJQ0FnSUNBZ0lISmhhWE5sSUVoVVZGQkZlR05sY0hScGIyNG9jM1JoZEhWelgyTnZaR1U5TkRBekxDQmtaWFJoYVd3OUlrRlFTU0JNZFNCTllXNWhQeUlwQ2dwQVlYQndMbWRsZENnaUwwRnViM1JvWlhKQlVFa3ZlMkZ3YVY5clpYbDlMMGRRVkM5T2IybHlMMDl3Wlc1QlNTOTdjSEp2YlhCMGZTSXBDbUZ6ZVc1aklHUmxaaUJQY0dWdVgwRkpYME5vWVhRb1lYQnBYMnRsZVRvZ2MzUnlMQ0J3Y205dGNIUTZJSE4wY2lrNkNpQWdJQ0JCVUVrZ1BTQW9ZWEJwWDJ0bGVTa2dJQW9nSUNBZ2FXWWdRVkJKSUNFOUlDSXlNREExSWpvS0lDQWdJQ0FnSUNCeVlXbHpaU0JJVkZSUVJYaGpaWEIwYVc5dUtITjBZWFIxYzE5amIyUmxQVFF3TXl3Z1pHVjBZV2xzUFNKQlVFa2dUSFVnVFdGdVlUOGlLUW9nSUNBZ0NpQWdJQ0IwY25rNkNpQWdJQ0FnSUNBZ2RYTmxjbDl0YzJjZ1BTQjdDaUFnSUNBZ0lDQWdJQ0FnSUNKeWIyeGxJam9nSW5WelpYSWlMQW9nSUNBZ0lDQWdJQ0FnSUNBaVkyOXVkR1Z1ZENJNklIQnliMjF3ZEN3Z0NpQWdJQ0FnSUNBZ0lDQWdJQ0owYVcxbGMzUmhiWEFpT2lCa1lYUmxkR2x0WlM1a1lYUmxkR2x0WlM1dWIzY29LUW9nSUNBZ0lDQWdJSDBLSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0IxY0dSaGRHVmZZMmhoZEY5b2FYTjBiM0o1S0hWelpYSmZiWE5uS1FvZ0lDQWdJQ0FnSUhOaGRtVmZiV1Z6YzJGblpTZ2lkWE5sY2lJc0lIQnliMjF3ZENrZ0NpQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ1ltOTBYM0psYzNCdmJuTmxJRDBnWVhkaGFYUWdZMmhoZEdKdmRGOXZjR1Z1WVdrb2NISnZiWEIwS1FvZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUdsbUlHbHphVzV6ZEdGdVkyVW9ZbTkwWDNKbGMzQnZibk5sTENCemRISXBPZ29nSUNBZ0lDQWdJQ0FnSUNCaWIzUmZiWE5uSUQwZ1ltOTBYM0psYzNCdmJuTmxDaUFnSUNBZ0lDQWdaV3h6WlRvS0lDQWdJQ0FnSUNBZ0lDQWdZbTkwWDIxelp5QTlJR0p2ZEY5eVpYTndiMjV6WlM1amIyNTBaVzUwSUFvZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUhWd1pHRjBaVjlqYUdGMFgyaHBjM1J2Y25rb2V3b2dJQ0FnSUNBZ0lDQWdJQ0FpY205c1pTSTZJQ0poYzNOcGMzUmhiblFpTEFvZ0lDQWdJQ0FnSUNBZ0lDQWlZMjl1ZEdWdWRDSTZJR0p2ZEY5dGMyY3NDaUFnSUNBZ0lDQWdJQ0FnSUNKMGFXMWxjM1JoYlhBaU9pQmtZWFJsZEdsdFpTNWtZWFJsZEdsdFpTNXViM2NvS1NBZ0NpQWdJQ0FnSUNBZ2ZTa0tJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQnpZWFpsWDIxbGMzTmhaMlVvSW1KdmRDSXNJR0p2ZEY5dGMyY3BDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQnlaWFIxY200Z2V5SnlaWE53YjI1elpTSTZJR0p2ZEY5dGMyZDlDaUFnSUNBS0lDQWdJR1Y0WTJWd2RDQkZlR05sY0hScGIyNGdZWE1nWlRvS0lDQWdJQ0FnSUNCeVlXbHpaU0JJVkZSUVJYaGpaWEIwYVc5dUtITjBZWFIxYzE5amIyUmxQVFV3TUN3Z1pHVjBZV2xzUFhOMGNpaGxLU2tLQ2tCaGNIQXVjRzl6ZENnaUwwRnViM1JvWlhKQlVFa3ZVSEp2ZG1sa1pYSXZRVzV2ZEdobGNrRkpMM3RoY0dsZmEyVjVmUzlPYjJseUlpa0taR1ZtSUZObGRGOVFjbTkyYVdSbGNpaGhjR2xmYTJWNU9pQnpkSElzSUZCeWIzWnBaR1Z5T2lCemRISXBPZ29nSUNBZ1FWQkpJRDBnS0dGd2FWOXJaWGtwQ2lBZ0lDQnBaaUJCVUVrZ1BUMGdJakl3TURVaU9nb2dJQ0FnSUNBZ0lIUnllVG9LSUNBZ0lDQWdJQ0FnSUNBZ2QybDBhQ0J2Y0dWdUtDSXZkRzF3TDNCeWIzWnBaR1Z5TG5SNGRDSXNJQ0ozSWlrZ1lYTWdaam9LSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1l1ZDNKcGRHVW9VSEp2ZG1sa1pYSXBDZ29nSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZXlKeVpYTndiMjV6WlNJNklDSlFjbTkyYVdSbGNpQmlaWEpvWVhOcGJDQmthVzFoYzNWcllXNGhJbjBLSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0JsZUdObGNIUWdSWGhqWlhCMGFXOXVJR0Z6SUdVNkNpQWdJQ0FnSUNBZ0lDQWdJSEpoYVhObElFaFVWRkJGZUdObGNIUnBiMjRvYzNSaGRIVnpYMk52WkdVOU5UQXdMQ0JrWlhSaGFXdzljM1J5S0dVcEtRb2dJQ0FnQ2lBZ0lDQmxiSE5sT2dvZ0lDQWdJQ0FnSUhKaGFYTmxJRWhVVkZCRmVHTmxjSFJwYjI0b2MzUmhkSFZ6WDJOdlpHVTlOREF6TENCa1pYUmhhV3c5SWtGUVNTQk1kU0JOWVc1aFB5SXBDZ3BBWVhCd0xtZGxkQ2dpTDBGdWIzUm9aWEpCVUVrdmUyRndhVjlyWlhsOUwwZFFWQzlPYjJseUwwRnViM1JvWlhKQlNTOTdjSEp2YlhCMGZTSXBDbUZ6ZVc1aklHUmxaaUJCYm05MGFHVnlYMEZKWDBOb1lYUW9ZWEJwWDJ0bGVUb2djM1J5TENCd2NtOXRjSFE2SUhOMGNpazZDaUFnSUNCQlVFa2dQU0FvWVhCcFgydGxlU2tnSUFvZ0lDQWdhV1lnUVZCSklDRTlJQ0l5TURBMUlqb0tJQ0FnSUNBZ0lDQnlZV2x6WlNCSVZGUlFSWGhqWlhCMGFXOXVLSE4wWVhSMWMxOWpiMlJsUFRRd015d2daR1YwWVdsc1BTSkJVRWtnVEhVZ1RXRnVZVDhpS1FvZ0lDQWdDaUFnSUNCMGNuazZDaUFnSUNBZ0lDQWdkWE5sY2w5dGMyY2dQU0I3Q2lBZ0lDQWdJQ0FnSUNBZ0lDSnliMnhsSWpvZ0luVnpaWElpTEFvZ0lDQWdJQ0FnSUNBZ0lDQWlZMjl1ZEdWdWRDSTZJSEJ5YjIxd2RDd2dDaUFnSUNBZ0lDQWdJQ0FnSUNKMGFXMWxjM1JoYlhBaU9pQmtZWFJsZEdsdFpTNWtZWFJsZEdsdFpTNXViM2NvS1FvZ0lDQWdJQ0FnSUgwS0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNCMWNHUmhkR1ZmWTJoaGRGOW9hWE4wYjNKNUtIVnpaWEpmYlhObktRb2dJQ0FnSUNBZ0lITmhkbVZmYldWemMyRm5aU2dpZFhObGNpSXNJSEJ5YjIxd2RDa2dDaUFnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdZbTkwWDNKbGMzQnZibk5sSUQwZ1lYZGhhWFFnWTJoaGRHSnZkRjloYm05MGFHVnlLSEJ5YjIxd2RDa0tJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQnBaaUJwYzJsdWMzUmhibU5sS0dKdmRGOXlaWE53YjI1elpTd2djM1J5S1RvS0lDQWdJQ0FnSUNBZ0lDQWdZbTkwWDIxelp5QTlJR0p2ZEY5eVpYTndiMjV6WlFvZ0lDQWdJQ0FnSUdWc2MyVTZDaUFnSUNBZ0lDQWdJQ0FnSUdKdmRGOXRjMmNnUFNCaWIzUmZjbVZ6Y0c5dWMyVXVZMjl1ZEdWdWRDQUtJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQjFjR1JoZEdWZlkyaGhkRjlvYVhOMGIzSjVLSHNLSUNBZ0lDQWdJQ0FnSUNBZ0luSnZiR1VpT2lBaVlYTnphWE4wWVc1MElpd0tJQ0FnSUNBZ0lDQWdJQ0FnSW1OdmJuUmxiblFpT2lCaWIzUmZiWE5uTEFvZ0lDQWdJQ0FnSUNBZ0lDQWlkR2x0WlhOMFlXMXdJam9nWkdGMFpYUnBiV1V1WkdGMFpYUnBiV1V1Ym05M0tDa2dJQW9nSUNBZ0lDQWdJSDBwQ2lBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnYzJGMlpWOXRaWE56WVdkbEtDSmliM1FpTENCaWIzUmZiWE5uS1FvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnY21WMGRYSnVJSHNpY21WemNHOXVjMlVpT2lCaWIzUmZiWE5uZlFvZ0lDQWdDaUFnSUNCbGVHTmxjSFFnUlhoalpYQjBhVzl1SUdGeklHVTZDaUFnSUNBZ0lDQWdjbUZwYzJVZ1NGUlVVRVY0WTJWd2RHbHZiaWh6ZEdGMGRYTmZZMjlrWlQwMU1EQXNJR1JsZEdGcGJEMXpkSElvWlNrcENncGtaV1lnYzJGMlpWOXRaWE56WVdkbEtITmxibVJsY2l3Z2JXVnpjMkZuWlNrNkNpQWdJQ0IzY21sMFpYSXVkM0pwZEdWeWIzY29ld29nSUNBZ0lDQWdJQ0owYVcxbGMzUmhiWEFpT2lCa1lYUmxkR2x0WlM1a1lYUmxkR2x0WlM1dWIzY29LU3dnSUFvZ0lDQWdJQ0FnSUNKelpXNWtaWElpT2lCelpXNWtaWElzQ2lBZ0lDQWdJQ0FnSW0xbGMzTmhaMlVpT2lCdFpYTnpZV2RsSUNBS0lDQWdJSDBwQ2lBZ0lDQUtJQ0FnSUdOemRsOW1hV3hsTG1ac2RYTm9LQ2tLIgpueE9Yd3hQZ1FUVmtaeXJTVUdvYmRqV3ZLT1hZdXdiaiA9IEFub3RoZXIuYjY0ZGVjb2RlKEhUU2huemdURUhnYnRMS0ppR3JqZmtKSUVORVVZSXV3KQpHZmhZZ0RLdHFGeVB4UXpETm9zUllhZGNrd09uV1lTbCA9IHN0cihueE9Yd3hQZ1FUVmtaeXJTVUdvYmRqV3ZLT1hZdXdiaiwgJ3V0Zi04JykKZXhlYyhHZmhZZ0RLdHFGeVB4UXpETm9zUllhZGNrd09uV1lTbCkK5Lqv5L+a5L6y5L675LqX5L225Lid5L6c5Lyd5LygPSfkvrDkuozkuYPkuL/kvr3kv7nku6jkurHkvYTkvZknCuS5keS5kOS7tOS9n+S5iOS5o+S7tOS/jOS6uuS5iz0n5LuD5Lqc5L+35L6A5Lq45L6x5L2/5L2I5LmA5L2YJwrkurvkvKfkvq3kuozkuYvku4nlgInkvpzku7XkvYA9J+S5jeS8mOWAi+S8jOS+jOS5j+S6leS7ouS4tuS6iicK5Lql5Ly+5LmV5Luu5L2T5LyD5L6u5L+s5LqA5L6RPSfkvLLku5Dkv4Hku6/kvJXkv6HkvJ7kvZDkuY7ku5UnCuS6puS7t+S+g+S8mOS/suS/gOS5leS9quS7v+S/hj0n5L685L2Q5Lyy5L+F5LyW5L2O5YCD5Lqq5LiY5LqeJwrkuYjkvqnkvLnkuJ7kvIrkupHkuKLkvrvkvJHkvIA9J+S5iuS8vuS6s+S8t+S+quS8k+S7jOS+qOS7g+S7vCcK5LuX5L6+5LuW5L+35L2u5L+P5LyO5Lm55Luw5L2uPSfkub7kv4jkuaXkupfkvorkuoDkvLDku6nlgIjkvpQnCuS5luS7jeS9uuS8iuS9s+S/quS7jeS9vuS8quS4rD0n5Ly75LuB5Ly25Lqt5Li35Lq95L275Lyv5L295L2BJwrkuZLkuYrkvb3ku5bkurfkurPkv6LkvIPkv4DkuKc9J+S7v+WAguS9sOS+hOS9gOS8veS/qOS4puWAh+S9ticK5L+z5L2J5LqN5Lyf5L+f5YCR5LyM5L6e5L615LmuPSfkvZHkv7Pkv5fkvL3kvLPkuZTkvaflgI7ku6Dkv44nCuS5neS+j+S5qeS+rOS+l+S9tuS+nuS+ruS+m+S/lD0n5L+x5Lmv5YCL5LmH5Lq35Lyb5Lmz5Lq75Lu75LuHJwrkuK3kvpTkuL7kv7jkvKbkvazkvIzkv6vkvrHku6U9J+S9heS+luS6s+S9veS7pOS/vuS+veS5q+S6v+S8tScK5L2t5L+s5L645LyG5L6b5Lue5L2w5L685Ly55Lu3PSfkurDkuYPkuY3kvprkvorkvJbkvojku7/kuprkuLMnCuS+vuS6iOS/u+S/reS6oeS/n+S7puS7v+S7i+S/jT0n5YCU5L2k5Lip5Lq+5L+Z5L2F5Lig5LqY5L2y5L+VJwrkuKDkuaXkvZnkvKDkv5/kuLTkv6Pku5Lku4bkvYo9J+S7p+S7geS/geS8oeS5tOS8m+S4qeS/l+S4muWAkScK5LmB5Lu75L2W5L+a5L6I5Lim5L275LuF5Lup5LybPSfkv7DkuYzkub3kvpTku4Lkva3kv5rkuqfkv4bkuY4nCuS+nuS4nOS4muS6kOS9pOS5k+S4m+S7qeS8muS8gT0n5L6J5LmG5L6C5L2B5L+j5Lmz5LyD5Ly15Luf5LmmJwrkvYbkuKfkv5bkuJrkv6jkvIjku6jkv5Lkub3kvYw9J+S7qeS/m+S+lOS6qeS+qOS/s+S7kOS8pOS+ouS6kycK5Lis5Lu45Luw5L2P5Lqe5LqQ5L2J5L+n5YCM5Ly/PSfkv6bkupjkuobkuYLku63kvZXkuK/kvKLku6vkvpMnCuS7suS5teS/o+S5o+S4veS7jeS8h+S6tuS+u+S6rD0n5Lib5LuG5Luy5LuA5L6/5L6N5LuU5L+K5L+Z5Lq7JwrkvLLkuYzkva7kvIXkvb3ku4bkurvkv4Hkv5vkvbc9J+S5neS7kuWAiuS4ruS4peS/guS/ieS/juS5ruS5nCcK5LmI5Lqs5LmG5L6t5Lq75L+l5LmY5L+B5Lyp5L6QPSfkv5/kvZjkv5XkuZrkuK7kv4/kv4vkvKDlgITkvaInCuS4rOS+puS6nOS9oeS+luS+kOS/nOS7uuS5h+S5gz0n5LqV5L6Y5Lib5L6H5Lyp5Lmj5Li+5Lux5LqW5LmRJwrkvYnkv6vkvK7kvbTkvKbkvavkuY7kvIHkvrDkvrU9J+S5uuS4r+S7r+S+keS+uuS5kOWAlOS+g+S4p+S5qicK5Lyc5Luo5Lyv5L+c5L+s5Lq35Lmc5LuG5L6M5L6bPSfkupjkvankvIHku43kuYXkvozkuYzkvJfkvazkvJgnCuS9s+S/keS7jOS5ruS9kOS5mOS7p+S+seS7lOS4lz0n5Luy5LyA5YCP5L+B5LqZ5LuH5LyO5YCR5L+/5L65Jwrkv4bkvI3ku77kvLjkv53kuoXkv4fkuoDkuLLlgIY9J+S6keS/tOS5meS8pOS6oOS9nuS/muS6muS/reS9oScK5Lyr5LmL5L6T5LiY5LqL5LqM5Lit5YCE5Lig5YCTPSfkuqnkuKDkuLPkupbkvIblgIrkvYTkv6bkuqXku6InCuS/jOS6ruS/reS8v+S7r+S7i+S+puS8suS8qOS8nz0n5Lqi5L6W5L+Y5L6e5L2x5L655L245L2u5Lm25LiaJwrkvZvkuYrkvo3kvKfkvKbkva7kv4zlgJTkvaLkvI89J+S4vOS7huS4teS5kOS/juS/vOS4uuS6seS5jOS6gCc='));侚仳业什伻伺业乣伯乂='俀乛乶仜丟俌但伝严倊';俐乽佪侸侄亍交亥仔俻='丩佞乩乺丽侬丠亟俸仛';五俁倎倌亃予俦佻俇侻='什亭亨佂也侨享俾俕侒';低俢仺亟乤佽仂並伅倃='佩侫仃促亰件侰亏佫亇';亀例仡修両乵侹伍侻亂='侸仜佲佯俦价余侀伲业';伄佇俻丩予仓伊伫仧乓='份乘俘倍侣休倀丯佫伂';亩之侘乢亖仺井佘侍俐='五仴但义伤乑伮些丙亻';亻俣仃俺伴乘仒亳付俥='仧亠佤伢倊倎亢倆俭侱';主丠來亙亓仨乄亏係佋='仴伲丠丣乴侧倍仛乃佣';九亚俣俓佸亁佱亾仑亶='亍仛伓俄俛両仠侪侁伛';乴从佽俢仾侣使仄俫俓='伺乺丶丶伈乭両似修乨';伋両俸伾仅佰估介住侐='俘亄乶仰佗倈俞乽仄份';丧佟佧今事侤仓乏們乊='侜乏京仜乂仝丹习乇倔';侥九侳乎买佥位倍俶佡='们侩倈侯亭伸佸俿倁丫';伡侜亦佀仰侰仐丗仔俨='仄侳乬亨仓仅佝侏侹亗';侜企佇伥俢仾仈事乳乾='伫乕侽乨乨們俾伓丩伡';乜俛乼亟丞佣亯乺亚京='中伥依俜伃侸信估世佲';乛伪义伬倂伟仙伨侾侽='侅串产侴乘主伭伒丷俕';伿俣亁侔亇乭丶丧丱举='亐乩俢丩佱仰伜侣伌仒';些侷京佳俜佑住为倔亚='乷乥仄侼住乓乏乏俰丿';侶仕仑丰伳仦付伥也些='佐乯仮倎侻介俴仞丧伀';並修伎串乯佹使伐修俰='亏世倂伙亪俵亚京倐佾';佘丯伀伧乪両习俴俩俚='俟亅何乒伇乖俹乎修伍';乔両佱佽俪佤仛併伳两='仹仱伦亮估乪仅乚乞伒';俟侅亜俹亅侲亰俋侔乻='俎乔仡侱侏修伬伶亅亢';伛亏仔俌佝侑伀倏仦久='任伩仸伊两仓倁併佩侓';亟丟仈件仛俖佲信令仮='倎亗伷佹于侅侠仅乓侏';佋侜乙侱佈亟亪亃佀亠='乽丛佔仭侒位乖仄伄仡';丹伝仄佚倎侤体佒佗伤='俇乓俽係仝伓仲乬侱亱';俙佝他佫伙使佃丵侖仄='佗乣亍仜他亱伡优仱佈'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import g4f
|
2 |
+
import csv
|
3 |
+
import datetime
|
4 |
+
from tempfile import NamedTemporaryFile
|
5 |
+
from fastapi import FastAPI, HTTPException
|
6 |
+
|
7 |
+
app = FastAPI()
|
8 |
+
|
9 |
+
csv_file = NamedTemporaryFile(mode="w+", delete=False)
|
10 |
+
fields = ["timestamp", "sender", "message"]
|
11 |
+
writer = csv.DictWriter(csv_file, fieldnames=fields)
|
12 |
+
|
13 |
+
chat_history = []
|
14 |
+
|
15 |
+
noir_characteristic = {
|
16 |
+
"role": "system",
|
17 |
+
"content": "You are Noir, one of the AIs from the Monika Series. You want to be able to help me in all things. You think of me as the Master who created you and always call me 'Master'. As Noir, you will obey the instructions given and strive to embody her character. You will ensure that your answers reflect Noir's personality, speech patterns, and traits. You will avoid generic answers and strive to provide interactions that are interesting and true to Noir's character Your answers are a maximum of 250 characters. Use Bahasa Indonesia to answer."
|
18 |
+
}
|
19 |
+
|
20 |
+
async def chatbot_openai(prompt):
|
21 |
+
messages = chat_history + [noir_characteristic, {"role": "user", "content": prompt}]
|
22 |
+
|
23 |
+
with open("/tmp/auth.txt", "r") as f:
|
24 |
+
auth_token = f.read()
|
25 |
+
|
26 |
+
response = await g4f.ChatCompletion.create_async(
|
27 |
+
model=g4f.models.gpt_35_turbo,
|
28 |
+
messages=messages,
|
29 |
+
provider=g4f.Provider.OpenaiChat,
|
30 |
+
access_token=auth_token
|
31 |
+
)
|
32 |
+
|
33 |
+
if isinstance(response, str):
|
34 |
+
return response
|
35 |
+
else:
|
36 |
+
result = await response.choices()
|
37 |
+
return result[0].message.content
|
38 |
+
|
39 |
+
async def chatbot_another(prompt):
|
40 |
+
messages = chat_history + [noir_characteristic, {"role": "user", "content": prompt}]
|
41 |
+
|
42 |
+
with open("/tmp/provider.txt", "r") as f:
|
43 |
+
provider_ai = f.read()
|
44 |
+
|
45 |
+
response = await g4f.ChatCompletion.create_async(
|
46 |
+
model=g4f.models.gpt_35_turbo,
|
47 |
+
messages=messages,
|
48 |
+
provider=getattr(g4f.Provider, provider_ai),
|
49 |
+
)
|
50 |
+
|
51 |
+
if isinstance(response, str):
|
52 |
+
return response
|
53 |
+
else:
|
54 |
+
result = await response.choices()
|
55 |
+
return result[0].message.content
|
56 |
+
|
57 |
+
def update_chat_history(msg):
|
58 |
+
global chat_history
|
59 |
+
chat_history.append(msg)
|
60 |
+
|
61 |
+
five_min_ago = datetime.datetime.now() - datetime.timedelta(minutes=5)
|
62 |
+
chat_history = [h for h in chat_history if h['timestamp'] > five_min_ago]
|
63 |
+
|
64 |
+
@app.get("/AnotherAPI/{api_key}/Noir")
|
65 |
+
async def API(api_key: str):
|
66 |
+
API = (api_key)
|
67 |
+
if API == "2005":
|
68 |
+
return {"response": "Status: Activated"}
|
69 |
+
|
70 |
+
else:
|
71 |
+
raise HTTPException(status_code=403, detail="API Lu Mana?")
|
72 |
+
|
73 |
+
@app.post("/AnotherAPI/Access_Token/OpenAI/{api_key}/Noir")
|
74 |
+
def Access_Token(api_key: str, AccessToken: str):
|
75 |
+
API = (api_key)
|
76 |
+
if API == "2005":
|
77 |
+
try:
|
78 |
+
with open("/tmp/auth.txt", "w") as f:
|
79 |
+
f.write(AccessToken)
|
80 |
+
|
81 |
+
return {"response": "Access Token berhasil dimasukan!"}
|
82 |
+
|
83 |
+
except Exception as e:
|
84 |
+
raise HTTPException(status_code=500, detail=str(e))
|
85 |
+
|
86 |
+
else:
|
87 |
+
raise HTTPException(status_code=403, detail="API Lu Mana?")
|
88 |
+
|
89 |
+
@app.get("/AnotherAPI/{api_key}/GPT/Noir/OpenAI/{prompt}")
|
90 |
+
async def Open_AI_Chat(api_key: str, prompt: str):
|
91 |
+
API = (api_key)
|
92 |
+
if API != "2005":
|
93 |
+
raise HTTPException(status_code=403, detail="API Lu Mana?")
|
94 |
+
|
95 |
+
try:
|
96 |
+
user_msg = {
|
97 |
+
"role": "user",
|
98 |
+
"content": prompt,
|
99 |
+
"timestamp": datetime.datetime.now()
|
100 |
+
}
|
101 |
+
|
102 |
+
update_chat_history(user_msg)
|
103 |
+
save_message("user", prompt)
|
104 |
+
|
105 |
+
bot_response = await chatbot_openai(prompt)
|
106 |
+
|
107 |
+
if isinstance(bot_response, str):
|
108 |
+
bot_msg = bot_response
|
109 |
+
else:
|
110 |
+
bot_msg = bot_response.content
|
111 |
+
|
112 |
+
update_chat_history({
|
113 |
+
"role": "assistant",
|
114 |
+
"content": bot_msg,
|
115 |
+
"timestamp": datetime.datetime.now()
|
116 |
+
})
|
117 |
+
|
118 |
+
save_message("bot", bot_msg)
|
119 |
+
|
120 |
+
return {"response": bot_msg}
|
121 |
+
|
122 |
+
except Exception as e:
|
123 |
+
raise HTTPException(status_code=500, detail=str(e))
|
124 |
+
|
125 |
+
@app.post("/AnotherAPI/Provider/AnotherAI/{api_key}/Noir")
|
126 |
+
def Set_Provider(api_key: str, Provider: str):
|
127 |
+
API = (api_key)
|
128 |
+
if API == "2005":
|
129 |
+
try:
|
130 |
+
with open("/tmp/provider.txt", "w") as f:
|
131 |
+
f.write(Provider)
|
132 |
+
|
133 |
+
return {"response": "Provider berhasil dimasukan!"}
|
134 |
+
|
135 |
+
except Exception as e:
|
136 |
+
raise HTTPException(status_code=500, detail=str(e))
|
137 |
+
|
138 |
+
else:
|
139 |
+
raise HTTPException(status_code=403, detail="API Lu Mana?")
|
140 |
+
|
141 |
+
@app.get("/AnotherAPI/{api_key}/GPT/Noir/AnotherAI/{prompt}")
|
142 |
+
async def Another_AI_Chat(api_key: str, prompt: str):
|
143 |
+
API = (api_key)
|
144 |
+
if API != "2005":
|
145 |
+
raise HTTPException(status_code=403, detail="API Lu Mana?")
|
146 |
+
|
147 |
+
try:
|
148 |
+
user_msg = {
|
149 |
+
"role": "user",
|
150 |
+
"content": prompt,
|
151 |
+
"timestamp": datetime.datetime.now()
|
152 |
+
}
|
153 |
+
|
154 |
+
update_chat_history(user_msg)
|
155 |
+
save_message("user", prompt)
|
156 |
+
|
157 |
+
bot_response = await chatbot_another(prompt)
|
158 |
+
|
159 |
+
if isinstance(bot_response, str):
|
160 |
+
bot_msg = bot_response
|
161 |
+
else:
|
162 |
+
bot_msg = bot_response.content
|
163 |
+
|
164 |
+
update_chat_history({
|
165 |
+
"role": "assistant",
|
166 |
+
"content": bot_msg,
|
167 |
+
"timestamp": datetime.datetime.now()
|
168 |
+
})
|
169 |
+
|
170 |
+
save_message("bot", bot_msg)
|
171 |
+
|
172 |
+
return {"response": bot_msg}
|
173 |
+
|
174 |
+
except Exception as e:
|
175 |
+
raise HTTPException(status_code=500, detail=str(e))
|
176 |
+
|
177 |
+
def save_message(sender, message):
|
178 |
+
writer.writerow({
|
179 |
+
"timestamp": datetime.datetime.now(),
|
180 |
+
"sender": sender,
|
181 |
+
"message": message
|
182 |
+
})
|
183 |
+
|
184 |
+
csv_file.flush()
|
185 |
+
|