diff --git a/bot_microservice/constants.py b/bot_microservice/constants.py index e10a681..f00651e 100644 --- a/bot_microservice/constants.py +++ b/bot_microservice/constants.py @@ -41,7 +41,6 @@ class ChatGptModelsEnum(StrEnum): gpt_3_5_turbo_stream_openai = "gpt-3.5-turbo-stream-openai" gpt_4_ChatgptAi = "gpt-4-ChatgptAi" gpt_3_5_turbo_weWordle = "gpt-3.5-turbo-weWordle" - gpt_3_5_turbo_stream_DeepAi = "gpt-3.5-turbo-stream-DeepAi" gpt_3_5_turbo_stream_yqcloud = "gpt-3.5-turbo-stream-yqcloud" gpt_OpenAssistant_stream_HuggingChat = "gpt-OpenAssistant-stream-HuggingChat" gpt_4_turbo_stream_you = "gpt-4-turbo-stream-you" @@ -56,6 +55,7 @@ class ChatGptModelsEnum(StrEnum): gpt_3_5_turbo_stream_ChatAnywhere = "gpt-3.5-turbo-stream-ChatAnywhere" gpt_3_5_turbo_ChatgptNext = "gpt-3.5-turbo-ChatgptNext" gpt_3_5_turbo_stream_gptTalkRu = "gpt-3.5-turbo--stream-gptTalkRu" + Llama_2_70b_chat_hf_stream_DeepInfra = "Llama-2-70b-chat-hf-stream-DeepInfra" llama2 = "llama2" gpt_3_5_turbo_stream_Berlin = "gpt-3.5-turbo-stream-Berlin" gpt_4_ChatGpt4Online = "gpt-4-ChatGpt4Online" diff --git a/chatgpt_microservice/deprecated/free_gpt.cpp b/chatgpt_microservice/deprecated/free_gpt.cpp index 4a38906..7cad2ff 100644 --- a/chatgpt_microservice/deprecated/free_gpt.cpp +++ b/chatgpt_microservice/deprecated/free_gpt.cpp @@ -1833,4 +1833,63 @@ boost::asio::awaitable FreeGpt::chatBase(std::shared_ptr ch, nloh co_return; } co_return; -} \ No newline at end of file +} + +boost::asio::awaitable FreeGpt::deepAi(std::shared_ptr ch, nlohmann::json json) { + co_await boost::asio::post(boost::asio::bind_executor(*m_thread_pool_ptr, boost::asio::use_awaitable)); + ScopeExit _exit{[=] { boost::asio::post(ch->get_executor(), [=] { ch->close(); }); }}; + + boost::system::error_code err{}; + auto prompt = json.at("meta").at("content").at("parts").at(0).at("content").get(); + + std::string user_agent{ + R"(Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36)"}; + + std::random_device rd; + std::mt19937 mt(rd()); + std::uniform_int_distribution dist(0, 100000000); + uint64_t part1{dist(mt)}; + auto part2 = md5(user_agent + md5(user_agent + md5(std::format("{}{}x", user_agent, part1)))); + auto api_key = std::format("tryit-{}-{}", part1, part2); + + constexpr char CRLF[] = "\r\n"; + static std::string MULTI_PART_BOUNDARY = "9bc627aea4f77e150e6057f78036e73f"; + + auto content_type_str = std::format("multipart/form-data; boundary={}", MULTI_PART_BOUNDARY); + SPDLOG_INFO("content_type_str: {}", content_type_str); + auto api_key_str = std::format("api-key: {}", api_key); + + std::unordered_multimap headers{ + {"Content-Type", content_type_str}, + {"api-key", api_key}, + }; + auto ret = Curl() + .setUrl("https://api.deepai.org/save_chat_session") + .setProxy(m_cfg.http_proxy) + .setRecvHeadersCallback([&](std::string) {}) + .setRecvBodyCallback([&](std::string str) { + boost::asio::post(ch->get_executor(), [=] { ch->try_send(err, str); }); + return; + }) + .setBody([&] { + nlohmann::json request_json{{{"role", "user"}, {"content", std::move(prompt)}}}; + std::ostringstream payload; + payload << "--" << MULTI_PART_BOUNDARY << CRLF + << R"(Content-Disposition: form-data; name="chat_style")" << CRLF << CRLF << "chat" + << CRLF << "--" << MULTI_PART_BOUNDARY << CRLF + << R"(Content-Disposition: form-data; name="chatHistory")" << CRLF << CRLF + << request_json.dump() << CRLF << "--" << MULTI_PART_BOUNDARY << "--" << CRLF; + SPDLOG_INFO("{}", payload.str()); + auto str = payload.str(); + return str; + }()) + .clearHeaders() + .setHttpHeaders(headers) + .perform(); + if (ret.has_value()) { + SPDLOG_ERROR("{}", ret.value()); + co_await boost::asio::post(boost::asio::bind_executor(ch->get_executor(), boost::asio::use_awaitable)); + ch->try_send(err, ret.value()); + } + co_return; +} diff --git a/chatgpt_microservice/include/free_gpt.h b/chatgpt_microservice/include/free_gpt.h index 537b802..d81c9fb 100644 --- a/chatgpt_microservice/include/free_gpt.h +++ b/chatgpt_microservice/include/free_gpt.h @@ -18,7 +18,6 @@ public: FreeGpt(Config&); - boost::asio::awaitable deepAi(std::shared_ptr, nlohmann::json); boost::asio::awaitable openAi(std::shared_ptr, nlohmann::json); boost::asio::awaitable yqcloud(std::shared_ptr, nlohmann::json); boost::asio::awaitable huggingChat(std::shared_ptr, nlohmann::json); @@ -39,6 +38,7 @@ public: boost::asio::awaitable chatAnywhere(std::shared_ptr, nlohmann::json); boost::asio::awaitable chatGptNext(std::shared_ptr, nlohmann::json); boost::asio::awaitable gptTalkru(std::shared_ptr, nlohmann::json); + boost::asio::awaitable deepInfra(std::shared_ptr, nlohmann::json); private: boost::asio::awaitable, std::string>> diff --git a/chatgpt_microservice/src/free_gpt.cpp b/chatgpt_microservice/src/free_gpt.cpp index 1a0d8b1..94258dc 100644 --- a/chatgpt_microservice/src/free_gpt.cpp +++ b/chatgpt_microservice/src/free_gpt.cpp @@ -542,65 +542,6 @@ FreeGpt::createHttpClient(boost::asio::ssl::context& ctx, std::string_view host, co_return stream_; } -boost::asio::awaitable FreeGpt::deepAi(std::shared_ptr ch, nlohmann::json json) { - co_await boost::asio::post(boost::asio::bind_executor(*m_thread_pool_ptr, boost::asio::use_awaitable)); - ScopeExit _exit{[=] { boost::asio::post(ch->get_executor(), [=] { ch->close(); }); }}; - - boost::system::error_code err{}; - auto prompt = json.at("meta").at("content").at("parts").at(0).at("content").get(); - - std::string user_agent{ - R"(Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36)"}; - - std::random_device rd; - std::mt19937 mt(rd()); - std::uniform_int_distribution dist(0, 100000000); - uint64_t part1{dist(mt)}; - auto part2 = md5(user_agent + md5(user_agent + md5(std::format("{}{}x", user_agent, part1)))); - auto api_key = std::format("tryit-{}-{}", part1, part2); - - constexpr char CRLF[] = "\r\n"; - static std::string MULTI_PART_BOUNDARY = "9bc627aea4f77e150e6057f78036e73f"; - - auto content_type_str = std::format("multipart/form-data; boundary={}", MULTI_PART_BOUNDARY); - SPDLOG_INFO("content_type_str: {}", content_type_str); - auto api_key_str = std::format("api-key: {}", api_key); - - std::unordered_multimap headers{ - {"Content-Type", content_type_str}, - {"api-key", api_key}, - }; - auto ret = Curl() - .setUrl("https://api.deepai.org/hacking_is_a_crime") - .setProxy(m_cfg.http_proxy) - .setRecvHeadersCallback([&](std::string) {}) - .setRecvBodyCallback([&](std::string str) { - boost::asio::post(ch->get_executor(), [=] { ch->try_send(err, str); }); - return; - }) - .setBody([&] { - nlohmann::json request_json{{{"role", "user"}, {"content", std::move(prompt)}}}; - std::ostringstream payload; - payload << "--" << MULTI_PART_BOUNDARY << CRLF - << R"(Content-Disposition: form-data; name="chat_style")" << CRLF << CRLF << "chat" - << CRLF << "--" << MULTI_PART_BOUNDARY << CRLF - << R"(Content-Disposition: form-data; name="chatHistory")" << CRLF << CRLF - << request_json.dump() << CRLF << "--" << MULTI_PART_BOUNDARY << "--" << CRLF; - SPDLOG_INFO("{}", payload.str()); - auto str = payload.str(); - return str; - }()) - .clearHeaders() - .setHttpHeaders(headers) - .perform(); - if (ret.has_value()) { - SPDLOG_ERROR("{}", ret.value()); - co_await boost::asio::post(boost::asio::bind_executor(ch->get_executor(), boost::asio::use_awaitable)); - ch->try_send(err, ret.value()); - } - co_return; -} - boost::asio::awaitable FreeGpt::openAi(std::shared_ptr ch, nlohmann::json json) { boost::system::error_code err{}; ScopeExit auto_exit{[&] { ch->close(); }}; @@ -1834,6 +1775,7 @@ create_client: request.set("Cookie", cookie); request.set(boost::beast::http::field::user_agent, user_agent); request.set("Content-Type", "application/json"); + request.set("X-Wp-Nonce", j["restNonce"]); constexpr std::string_view json_str = R"({ "botId":"chatbot-9vy3t5", @@ -2267,12 +2209,12 @@ boost::asio::awaitable FreeGpt::aivvm(std::shared_ptr ch, nlohman boost::system::error_code err{}; ScopeExit auto_exit{[&] { ch->close(); }}; - using Tuple = std::tuple, std::string>; + using Tuple = std::tuple, std::string, std::string>; static moodycamel::ConcurrentQueue cookie_queue; Tuple item; bool found{false}; if (cookie_queue.try_dequeue(item)) { - auto& [time_point, cookie] = item; + auto& [time_point, cookie, _] = item; if (std::chrono::system_clock::now() - time_point < std::chrono::minutes(120)) found = true; } @@ -2290,6 +2232,7 @@ boost::asio::awaitable FreeGpt::aivvm(std::shared_ptr ch, nlohman {"cmd", "request.get"}, {"url", "https://chat.aivvm.com/zh"}, {"maxTimeout", 60000}, + {"session_ttl_minutes", 60}, }; return data.dump(); }()) @@ -2328,26 +2271,24 @@ boost::asio::awaitable FreeGpt::aivvm(std::shared_ptr ch, nlohman co_await ch->async_send(err, "not found cookie", use_nothrow_awaitable); co_return; } + std::string user_agent = rsp["solution"].at("userAgent"); auto cookie_str = std::format("cf_clearance={}", (*it)["value"].get()); // std::cout << rsp["solution"]["userAgent"].get() << std::endl; - item = std::make_tuple(std::chrono::system_clock::now(), std::move(cookie_str)); + item = std::make_tuple(std::chrono::system_clock::now(), std::move(cookie_str), user_agent); } SPDLOG_INFO("cookie: {}", std::get<1>(item)); bool return_flag{true}; ScopeExit auto_free([&] mutable { if (!return_flag) return; - auto& [time_point, cookie] = item; + auto& [time_point, cookie, _] = item; if (std::chrono::system_clock::now() - time_point < std::chrono::minutes(120)) cookie_queue.enqueue(std::move(item)); }); - + auto user_agent = std::get<2>(item); constexpr std::string_view host = "chat.aivvm.com"; constexpr std::string_view port = "443"; - constexpr std::string_view user_agent{ - R"(Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36)"}; - boost::asio::ssl::context ctx1(boost::asio::ssl::context::tls); ctx1.set_verify_mode(boost::asio::ssl::verify_none); @@ -2663,3 +2604,80 @@ boost::asio::awaitable FreeGpt::gptTalkru(std::shared_ptr ch, nlo } co_return; } + +boost::asio::awaitable FreeGpt::deepInfra(std::shared_ptr ch, nlohmann::json json) { + co_await boost::asio::post(boost::asio::bind_executor(*m_thread_pool_ptr, boost::asio::use_awaitable)); + ScopeExit _exit{[=] { boost::asio::post(ch->get_executor(), [=] { ch->close(); }); }}; + + auto prompt = json.at("meta").at("content").at("parts").at(0).at("content").get(); + + boost::system::error_code err{}; + std::unordered_multimap headers{ + {"Accept", "text/event-stream"}, + {"content-type", "application/json"}, + {"Referer", "https://deepinfra.com/"}, + {"Origin", "https://deepinfra.com"}, + {"X-Deepinfra-Source", "web-embed"}, + {"sec-ch-ua", R"("Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24")"}, + {"sec-ch-ua-platform", R"("macOS")"}, + {"sec-ch-ua-mobile", "?0"}, + {"Sec-Fetch-Dest", "empty"}, + {"Sec-Fetch-Mode", "cors"}, + {"Sec-Fetch-Site", "same-site"}, + }; + std::string recv; + auto ret = Curl() + .setUrl("https://api.deepinfra.com/v1/openai/chat/completions") + .setProxy(m_cfg.http_proxy) + .setRecvHeadersCallback([](std::string) { return; }) + .setRecvBodyCallback([&](std::string str) mutable { + recv.append(str); + while (true) { + auto position = recv.find("\n"); + if (position == std::string::npos) + break; + auto msg = recv.substr(0, position + 1); + recv.erase(0, position + 1); + msg.pop_back(); + if (msg.empty() || !msg.contains("content")) + continue; + auto fields = splitString(msg, "data: "); + boost::system::error_code err{}; + nlohmann::json line_json = nlohmann::json::parse(fields.back(), nullptr, false); + if (line_json.is_discarded()) { + SPDLOG_ERROR("json parse error: [{}]", fields.back()); + ch->try_send(err, std::format("json parse error: [{}]", fields.back())); + continue; + } + auto str = line_json["choices"][0]["delta"]["content"].get(); + if (!str.empty()) + ch->try_send(err, str); + } + }) + .setBody([&] { + constexpr std::string_view ask_json_str = R"({ + "model":"meta-llama/Llama-2-70b-chat-hf", + "messages":[ + { + "role":"user", + "content":"hello" + } + ], + "stream":true + })"; + nlohmann::json ask_request = nlohmann::json::parse(ask_json_str, nullptr, false); + ask_request["messages"] = getConversationJson(json); + std::string ask_request_str = ask_request.dump(); + SPDLOG_INFO("request: [{}]", ask_request_str); + return ask_request_str; + }()) + .clearHeaders() + .setHttpHeaders(headers) + .perform(); + if (ret.has_value()) { + SPDLOG_ERROR("{}", ret.value()); + co_await boost::asio::post(boost::asio::bind_executor(ch->get_executor(), boost::asio::use_awaitable)); + ch->try_send(err, ret.value()); + } + co_return; +} diff --git a/chatgpt_microservice/src/main.cpp b/chatgpt_microservice/src/main.cpp index b1e55d0..d8bce4d 100644 --- a/chatgpt_microservice/src/main.cpp +++ b/chatgpt_microservice/src/main.cpp @@ -336,7 +336,6 @@ int main(int, char** argv) { if (!cfg.api_key.empty()) ADD_METHOD("gpt-3.5-turbo-stream-openai", FreeGpt::openAi); - ADD_METHOD("gpt-3.5-turbo-stream-DeepAi", FreeGpt::deepAi); ADD_METHOD("gpt-3.5-turbo-stream-yqcloud", FreeGpt::yqcloud); ADD_METHOD("gpt-OpenAssistant-stream-HuggingChat", FreeGpt::huggingChat) ADD_METHOD("gpt-4-turbo-stream-you", FreeGpt::you); @@ -356,6 +355,7 @@ int main(int, char** argv) { ADD_METHOD("gpt-3.5-turbo-stream-ChatAnywhere", FreeGpt::chatAnywhere); ADD_METHOD("gpt-3.5-turbo-ChatgptNext", FreeGpt::chatGptNext); ADD_METHOD("gpt-3.5-turbo-stream-gptTalkRu", FreeGpt::gptTalkru); + ADD_METHOD("Llama-2-70b-chat-hf-stream-DeepInfra", FreeGpt::deepInfra); SPDLOG_INFO("active provider:"); for (auto& [provider, _] : gpt_function) diff --git a/chatgpt_microservice/tools/zeus.py b/chatgpt_microservice/tools/zeus.py index 121c691..a5d28ed 100644 --- a/chatgpt_microservice/tools/zeus.py +++ b/chatgpt_microservice/tools/zeus.py @@ -1,14 +1,10 @@ import base64 import json import os -import threading -import time -import traceback import execjs from flask import Flask, request from selenium import webdriver -from selenium.webdriver.support.ui import WebDriverWait from werkzeug.serving import ThreadedWSGIServer app = Flask(__name__) @@ -21,20 +17,6 @@ options.add_argument("--disable-gpu") options.add_argument("--disable-dev-shm-usage") -def deepai_refresh(): - while True: - driver = webdriver.Chrome(options=options) - try: - driver.get("https://deepai.org") - WebDriverWait(driver, 15) - cookies = driver.get_cookies() - print(cookies, flush=True) - except Exception: - traceback.print_exc() - driver.quit() - time.sleep(600) - - # curl -X POST -d '{}' -H "Content-Type: application/json" http://127.0.0.1:8860/gptforlove @app.route("/gptforlove", methods=["POST"]) def get_gptforlove_secret(): @@ -77,8 +59,6 @@ def get_anti_bot_token(): if __name__ == "__main__": - thread = threading.Thread(target=deepai_refresh) - thread.start() port = os.getenv("PORT", "8860") ip = os.getenv("IP", "0.0.0.0") print(f"start zeus at {ip}:{port}", flush=True)