`
- }
- ${
- item.role == "assistant"
- ? markdown.render(item.content)
- : item.content
- }
-
- ${
- item.role == "user"
- ? `
`
- : ''
- }
+ for (item of conversation.items) {
+ message_box.innerHTML += `
+
+
+ ${item.role == "assistant" ? gpt_image : user_image}
+ ${item.role == "assistant"
+ ? ``
+ : ``
+ }
- `;
- }
+ ${item.role == "user"
+ ? `
`
+ : `
`
+ }
+ ${item.role == "assistant"
+ ? markdown.render(item.content)
+ : item.content
+ }
+
+ ${item.role == "user"
+ ? `
`
+ : ''
+ }
+
+ `;
+ // console.log(message_box.innerHTML)
+ }
- document.querySelectorAll(`code`).forEach((el) => {
- hljs.highlightElement(el);
- });
+ document.querySelectorAll(`code`).forEach((el) => {
+ hljs.highlightElement(el);
+ });
- message_box.scrollTo({ top: message_box.scrollHeight, behavior: "smooth" });
+ message_box.scrollTo({ top: message_box.scrollHeight, behavior: "smooth" });
- setTimeout(() => {
- message_box.scrollTop = message_box.scrollHeight;
- }, 500);
+ setTimeout(() => {
+ message_box.scrollTop = message_box.scrollHeight;
+ }, 500);
};
const get_conversation = async (conversation_id) => {
- let conversation = await JSON.parse(
- localStorage.getItem(`conversation:${conversation_id}`)
- );
- let result = conversation.items.slice(-4)
- for (var i = 0; i < result.length; i++) {
- delete result[i].token;
- console.log(result[i]);
- console.log(result[i]);
- }
- return result;
+ let conversation = await JSON.parse(
+ localStorage.getItem(`conversation:${conversation_id}`)
+ );
+ let result = conversation.items.slice(-4)
+ for (var i = 0; i < result.length; i++) {
+ delete result[i].token;
+ console.log(result[i]);
+ console.log(result[i]);
+ }
+ return result;
};
-const add_conversation = async (conversation_id, title) => {
- if (localStorage.getItem(`conversation:${conversation_id}`) == null) {
- localStorage.setItem(
- `conversation:${conversation_id}`,
- JSON.stringify({
- id: conversation_id,
- title: title,
- items: [],
- })
- );
- }
+const add_conversation = async (conversation_id, content) => {
+ if (content.length > 17) {
+ title = content.substring(0, 17) + '..'
+ } else {
+ title = content + ' '.repeat(19 - content.length)
+ }
+
+ if (localStorage.getItem(`conversation:${conversation_id}`) == null) {
+ localStorage.setItem(
+ `conversation:${conversation_id}`,
+ JSON.stringify({
+ id: conversation_id,
+ title: title,
+ items: [],
+ })
+ );
+ }
};
const add_message = async (conversation_id, role, content, token) => {
- before_adding = JSON.parse(
- localStorage.getItem(`conversation:${conversation_id}`)
- );
+ before_adding = JSON.parse(
+ localStorage.getItem(`conversation:${conversation_id}`)
+ );
- before_adding.items.push({
- role: role,
- content: content,
- token: token,
- });
+ before_adding.items.push({
+ role: role,
+ content: content,
+ token: token,
+ });
- localStorage.setItem(
- `conversation:${conversation_id}`,
- JSON.stringify(before_adding)
- ); // update conversation
+ localStorage.setItem(
+ `conversation:${conversation_id}`,
+ JSON.stringify(before_adding)
+ ); // update conversation
};
const load_conversations = async (limit, offset, loader) => {
- //console.log(loader);
- //if (loader === undefined) box_conversations.appendChild(spinner);
-
- let conversations = [];
- for (let i = 0; i < localStorage.length; i++) {
- if (localStorage.key(i).startsWith("conversation:")) {
- let conversation = localStorage.getItem(localStorage.key(i));
- conversations.push(JSON.parse(conversation));
+ let conversations = [];
+ for (let i = 0; i < localStorage.length; i++) {
+ if (localStorage.key(i).startsWith("conversation:")) {
+ let conversation = localStorage.getItem(localStorage.key(i));
+ conversations.push(JSON.parse(conversation));
+ }
}
- }
- //if (loader === undefined) spinner.parentNode.removeChild(spinner)
- await clear_conversations();
+ await clear_conversations();
- for (conversation of conversations) {
- box_conversations.innerHTML += `
-
-
-
- ${conversation.title}
-
-
-
-
-
- `;
- }
+ for (conversation of conversations) {
+ box_conversations.innerHTML += `
+
+
+
+ ${conversation.title}
+
+
+
+
+
+ `;
+ }
- document.querySelectorAll(`code`).forEach((el) => {
- hljs.highlightElement(el);
- });
+ document.querySelectorAll(`code`).forEach((el) => {
+ hljs.highlightElement(el);
+ });
};
document.getElementById(`cancelButton`).addEventListener(`click`, async () => {
- window.controller.abort();
- console.log(`aborted ${window.conversation_id}`);
+ window.controller.abort();
+ console.log(`aborted ${window.conversation_id}`);
});
-function h2a(str1) {
- var hex = str1.toString();
- var str = "";
-
- for (var n = 0; n < hex.length; n += 2) {
- str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));
- }
-
- return str;
-}
-
const uuid = () => {
- return `xxxxxxxx-xxxx-4xxx-yxxx-${Date.now().toString(16)}`.replace(
- /[xy]/g,
- function (c) {
- var r = (Math.random() * 16) | 0,
- v = c == "x" ? r : (r & 0x3) | 0x8;
- return v.toString(16);
- }
- );
+ return `xxxxxxxx-xxxx-4xxx-yxxx-${Date.now().toString(16)}`.replace(
+ /[xy]/g,
+ function (c) {
+ var r = (Math.random() * 16) | 0,
+ v = c == "x" ? r : (r & 0x3) | 0x8;
+ return v.toString(16);
+ }
+ );
};
const message_id = () => {
- random_bytes = (Math.floor(Math.random() * 1338377565) + 2956589730).toString(
- 2
- );
- unix = Math.floor(Date.now() / 1000).toString(2);
+ random_bytes = (Math.floor(Math.random() * 1338377565) + 2956589730).toString(
+ 2
+ );
+ unix = Math.floor(Date.now() / 1000).toString(2);
- return BigInt(`0b${unix}${random_bytes}`).toString();
-};
-
-window.onload = async () => {
- load_settings_localstorage();
-
- conversations = 0;
- for (let i = 0; i < localStorage.length; i++) {
- if (localStorage.key(i).startsWith("conversation:")) {
- conversations += 1;
- }
- }
-
- if (conversations == 0) localStorage.clear();
-
- await setTimeout(() => {
- load_conversations(20, 0);
- }, 1);
-
- if (!window.location.href.endsWith(`#`)) {
- if (/{{chat_path}}\/.+/.test(window.location.href)) {
- await load_conversation(window.conversation_id);
- }
- }
-
-message_input.addEventListener(`keydown`, async (evt) => {
- if (prompt_lock) return;
- if (evt.keyCode === 13 && !evt.shiftKey) {
- evt.preventDefault();
- console.log('pressed enter');
- await handle_ask();
- } else {
- message_input.style.removeProperty("height");
- message_input.style.height = message_input.scrollHeight + 4 + "px";
- }
- });
-
- send_button.addEventListener(`click`, async () => {
- console.log("clicked send");
- if (prompt_lock) return;
- await handle_ask();
- });
-
- register_settings_localstorage();
+ return BigInt(`0b${unix}${random_bytes}`).toString();
};
document.querySelector(".mobile-sidebar").addEventListener("click", (event) => {
- const sidebar = document.querySelector(".conversations");
+ const sidebar = document.querySelector(".conversations");
- if (sidebar.classList.contains("shown")) {
- sidebar.classList.remove("shown");
- event.target.classList.remove("rotated");
- } else {
- sidebar.classList.add("shown");
- event.target.classList.add("rotated");
- }
+ if (sidebar.classList.contains("shown")) {
+ sidebar.classList.remove("shown");
+ event.target.classList.remove("rotated");
+ } else {
+ sidebar.classList.add("shown");
+ event.target.classList.add("rotated");
+ }
- window.scrollTo(0, 0);
+ window.scrollTo(0, 0);
});
const register_settings_localstorage = async () => {
- settings_ids = ["switch", "model", "jailbreak"];
- settings_elements = settings_ids.map((id) => document.getElementById(id));
- settings_elements.map((element) =>
- element.addEventListener(`change`, async (event) => {
- switch (event.target.type) {
- case "checkbox":
- localStorage.setItem(event.target.id, event.target.checked);
- break;
- case "select-one":
- localStorage.setItem(event.target.id, event.target.selectedIndex);
- break;
- default:
- console.warn("Unresolved element type");
- }
- })
- );
+ settings_ids = ["switch", "model", "jailbreak"];
+ settings_elements = settings_ids.map((id) => document.getElementById(id));
+ settings_elements.map((element) =>
+ element.addEventListener(`change`, async (event) => {
+ switch (event.target.type) {
+ case "checkbox":
+ localStorage.setItem(event.target.id, event.target.checked);
+ break;
+ case "select-one":
+ localStorage.setItem(event.target.id, event.target.selectedIndex);
+ break;
+ default:
+ console.warn("Unresolved element type");
+ }
+ })
+ );
};
const load_settings_localstorage = async () => {
- settings_ids = ["switch", "model", "jailbreak"];
- settings_elements = settings_ids.map((id) => document.getElementById(id));
- settings_elements.map((element) => {
- if (localStorage.getItem(element.id)) {
- switch (element.type) {
- case "checkbox":
- element.checked = localStorage.getItem(element.id) === "true";
- break;
- case "select-one":
- element.selectedIndex = parseInt(localStorage.getItem(element.id));
- break;
- default:
- console.warn("Unresolved element type");
- }
- }
- });
+ settings_ids = ["switch", "model", "jailbreak"];
+ settings_elements = settings_ids.map((id) => document.getElementById(id));
+ settings_elements.map((element) => {
+ if (localStorage.getItem(element.id)) {
+ switch (element.type) {
+ case "checkbox":
+ element.checked = localStorage.getItem(element.id) === "true";
+ break;
+ case "select-one":
+ element.selectedIndex = parseInt(localStorage.getItem(element.id));
+ break;
+ default:
+ console.warn("Unresolved element type");
+ }
+ }
+ });
};
+const say_hello = async () => {
+ tokens = [`Hello`, `!`, ` How`, ` can`, ` I`, ` assist`, ` you`, ` today`, `?`]
+
+ message_box.innerHTML += `
+
+
+ ${gpt_image}
+
+
+
+
+
+ `;
+
+ content = ``
+ to_modify = document.querySelector(`.welcome-message`);
+ for (token of tokens) {
+ await new Promise(resolve => setTimeout(resolve, (Math.random() * (100 - 200) + 100)))
+ content += token;
+ to_modify.innerHTML = markdown.render(content);
+ }
+}
+
// Theme storage for recurring viewers
const storeTheme = function (theme) {
- localStorage.setItem("theme", theme);
+ localStorage.setItem("theme", theme);
};
// set theme when visitor returns
const setTheme = function () {
- const activeTheme = localStorage.getItem("theme");
- colorThemes.forEach((themeOption) => {
- if (themeOption.id === activeTheme) {
- themeOption.checked = true;
- }
- });
- // fallback for no :has() support
- document.documentElement.className = activeTheme;
+ const activeTheme = localStorage.getItem("theme");
+ colorThemes.forEach((themeOption) => {
+ if (themeOption.id === activeTheme) {
+ themeOption.checked = true;
+ }
+ });
+ // fallback for no :has() support
+ document.documentElement.className = activeTheme;
};
colorThemes.forEach((themeOption) => {
- themeOption.addEventListener("click", () => {
- storeTheme(themeOption.id);
- // fallback for no :has() support
- document.documentElement.className = themeOption.id;
- });
+ themeOption.addEventListener("click", () => {
+ storeTheme(themeOption.id);
+ // fallback for no :has() support
+ document.documentElement.className = themeOption.id;
+ });
});
-function deleteMessage(token) {
- const messageDivUser = document.getElementById(`user_${token}`)
- const messageDivGpt = document.getElementById(`gpt_${token}`)
- if (messageDivUser) messageDivUser.parentNode.remove();
- if (messageDivGpt) messageDivGpt.parentNode.remove();
- const conversation = JSON.parse(localStorage.getItem(`conversation:${window.conversation_id}`));
- conversation.items = conversation.items.filter(item => item.token !== token);
- localStorage.setItem(`conversation:${window.conversation_id}`, JSON.stringify(conversation));
-
- const messages = document.getElementsByClassName("message");
- if (messages.length === 0) {
- delete_conversation(window.conversation_id);
- };
+function resizeTextarea(textarea) {
+ textarea.style.height = '80px';
+ textarea.style.height = Math.min(textarea.scrollHeight, 200) + 'px';
}
-document.onload = setTheme();
+window.onload = async () => {
+ load_settings_localstorage();
+ setTheme();
+
+ conversations = 0;
+ for (let i = 0; i < localStorage.length; i++) {
+ if (localStorage.key(i).startsWith("conversation:")) {
+ conversations += 1;
+ }
+ }
+
+ if (conversations == 0) localStorage.clear();
+
+ await setTimeout(() => {
+ load_conversations(20, 0);
+ }, 1);
+
+ if (!window.location.href.endsWith(`#`)) {
+ if (/{{chat_path}}\/.+/.test(window.location.href)) {
+ await load_conversation(window.conversation_id);
+ }
+ }
+
+ // await load_models();
+ await say_hello()
+
+ message_input.addEventListener(`keydown`, async (evt) => {
+ if (prompt_lock) return;
+ if (evt.keyCode === 13 && !evt.shiftKey) {
+ evt.preventDefault();
+ console.log("pressed enter");
+ await handle_ask();
+ } else {
+ message_input.style.removeProperty("height");
+ message_input.style.height = message_input.scrollHeight + "px";
+ }
+ });
+
+ send_button.addEventListener(`click`, async () => {
+ console.log("clicked send");
+ if (prompt_lock) return;
+ await handle_ask();
+ });
+
+ register_settings_localstorage();
+};
+
+const observer = new MutationObserver((mutationsList) => {
+ for (const mutation of mutationsList) {
+ if (mutation.type === 'attributes' && mutation.attributeName === 'style') {
+ const height = message_input.offsetHeight;
+
+ let heightValues = {
+ 81: "20px",
+ 82: "20px",
+ 100: "30px",
+ 119: "39px",
+ 138: "49px",
+ 150: "55px"
+ }
+
+ send_button.style.top = heightValues[height] || '';
+ }
+ }
+});
+
+observer.observe(message_input, { attributes: true });
+
+function deleteMessage(token) {
+ console.log(token)
+ const messageDivUser = document.getElementById(`user_${token}`)
+ const messageDivGpt = document.getElementById(`gpt_${token}`)
+ if (messageDivUser) messageDivUser.parentNode.remove();
+ if (messageDivGpt) messageDivGpt.parentNode.remove();
+ const conversation = JSON.parse(localStorage.getItem(`conversation:${window.conversation_id}`));
+ console.log(conversation)
+ conversation.items = conversation.items.filter(item => item.token !== token);
+ console.log(conversation)
+ localStorage.setItem(`conversation:${window.conversation_id}`, JSON.stringify(conversation));
+
+ const messages = document.getElementsByClassName("message");
+ if (messages.length === 0) {
+ delete_conversation(window.conversation_id);
+ };
+}
diff --git a/chatgpt_microservice/include/free_gpt.h b/chatgpt_microservice/include/free_gpt.h
index a167d3d..fc4f1c1 100644
--- a/chatgpt_microservice/include/free_gpt.h
+++ b/chatgpt_microservice/include/free_gpt.h
@@ -38,6 +38,7 @@ public:
boost::asio::awaitable
geekGpt(std::shared_ptr, nlohmann::json);
boost::asio::awaitable chatGptAi(std::shared_ptr, nlohmann::json);
boost::asio::awaitable fakeGpt(std::shared_ptr, nlohmann::json);
+ boost::asio::awaitable vercel(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 164dfa6..28a0e59 100644
--- a/chatgpt_microservice/src/free_gpt.cpp
+++ b/chatgpt_microservice/src/free_gpt.cpp
@@ -3042,3 +3042,121 @@ boost::asio::awaitable FreeGpt::fakeGpt(std::shared_ptr ch, nlohm
co_return;
}
}
+
+boost::asio::awaitable FreeGpt::vercel(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();
+
+ auto create_random_number = [] {
+ std::random_device rd;
+ std::mt19937 mt(rd());
+ std::uniform_int_distribution distribution(99, 999);
+ int random_number = distribution(mt);
+ return random_number;
+ };
+ constexpr std::string_view user_agent_str{
+ R"(Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.{}.{} Safari/537.36)"};
+
+ std::unordered_multimap headers{
+ {"Accept", "*/*"},
+ {"authority", "sdk.vercel.ai"},
+ {"content-type", "application/json"},
+ {"referer", "https://sdk.vercel.ai/"},
+ {"origin", "https://sdk.vercel.ai"},
+ {"sec-ch-ua", R"("Google Chrome";v="117", "Not;A=Brand";v="8", "Chromium";v="117")"},
+ {"sec-ch-ua-mobile", R"(?0)"},
+ {"sec-ch-ua-platform", R"("macOS")"},
+ {"cache-control", "no-cache"},
+ {"pragma", "no-cache"},
+ };
+ headers.emplace("user-agent", std::format(user_agent_str, create_random_number(), create_random_number()));
+
+ std::string recv;
+ Curl curl;
+ auto ret = curl.setUrl("https://sdk.vercel.ai/openai.jpeg")
+ .setProxy(m_cfg.http_proxy)
+ .setRecvHeadersCallback([](std::string) { return; })
+ .setRecvBodyCallback([&](std::string str) mutable {
+ recv.append(str);
+ return;
+ })
+ .clearHeaders()
+ .setHttpHeaders(headers)
+ .perform();
+ if (ret.has_value()) {
+ SPDLOG_ERROR("https://sdk.vercel.ai/openai.jpeg: [{}]", 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;
+ }
+ nlohmann::json request;
+ request["data"] = std::move(recv);
+ recv.clear();
+ auto vercel_rsp = callZeus(std::format("{}/vercel", m_cfg.zeus), request.dump());
+ if (!vercel_rsp.has_value()) {
+ SPDLOG_ERROR("callZeus vercel error: {}", vercel_rsp.error());
+ co_await boost::asio::post(boost::asio::bind_executor(ch->get_executor(), boost::asio::use_awaitable));
+ ch->try_send(err, vercel_rsp.error());
+ co_return;
+ }
+
+ headers.erase("custom-encoding");
+ headers.erase("user-agent");
+ headers.emplace("custom-encoding", vercel_rsp.value()["data"]);
+ headers.emplace("user-agent", std::format(user_agent_str, create_random_number(), create_random_number()));
+
+ for (int i = 0; i < 20; i++) {
+ auto ret =
+ curl.setUrl("https://sdk.vercel.ai/api/generate")
+ .setProxy(m_cfg.http_proxy)
+ .setRecvHeadersCallback([](std::string) { return; })
+ .setRecvBodyCallback([&](std::string str) mutable {
+ if (str == "Internal Server Error" || str == "Rate limit exceeded") {
+ SPDLOG_WARN("vercel: [{}]", str);
+ return;
+ }
+ boost::asio::post(ch->get_executor(), [=, str = std::move(str)] { ch->try_send(err, str); });
+ return;
+ })
+ .setBody([&] {
+ constexpr std::string_view json_str = R"({
+ "model":"openai:gpt-3.5-turbo",
+ "messages":[
+ {
+ "role":"user",
+ "content":"hello"
+ }
+ ],
+ "playgroundId":"403bce4c-7eb6-47b0-b1b5-0cb6b2469f70",
+ "chatIndex":0,
+ "temperature":0.7,
+ "maximumLength":4096,
+ "topP":1,
+ "topK":1,
+ "presencePenalty":1,
+ "frequencyPenalty":1,
+ "stopSequences":[]
+ })";
+ nlohmann::json request = nlohmann::json::parse(json_str, nullptr, false);
+ request["messages"] = getConversationJson(json);
+ request["playgroundId"] = createUuidString();
+ SPDLOG_INFO("request: [{}]", request.dump(2));
+ return request.dump();
+ }())
+ .clearHeaders()
+ .setHttpHeaders(headers)
+ .perform();
+ if (ret.has_value()) {
+ SPDLOG_WARN("https://sdk.vercel.ai/api/generate: [{}]", ret.value());
+ co_await timeout(std::chrono::seconds(2));
+ continue;
+ }
+ co_return;
+ }
+ co_await boost::asio::post(boost::asio::bind_executor(ch->get_executor(), boost::asio::use_awaitable));
+ ch->try_send(err, "call sdk.vercel.ai error");
+ co_return;
+}
diff --git a/chatgpt_microservice/src/main.cpp b/chatgpt_microservice/src/main.cpp
index 1642fbd..27f7336 100644
--- a/chatgpt_microservice/src/main.cpp
+++ b/chatgpt_microservice/src/main.cpp
@@ -353,6 +353,7 @@ int main(int argc, char** argv) {
ADD_METHOD("llama2", FreeGpt::llama2);
ADD_METHOD("gpt-3.5-turbo-stream-chatGptAi", FreeGpt::chatGptAi);
ADD_METHOD("gpt-3.5-turbo-stream-FakeGpt", FreeGpt::fakeGpt);
+ ADD_METHOD("gpt-3.5-turbo-stream-Vercel", FreeGpt::vercel);
SPDLOG_INFO("active provider:");
for (auto& [provider, _] : gpt_function)
diff --git a/chatgpt_microservice/tools/requirements.txt b/chatgpt_microservice/tools/requirements.txt
index 2f97ffe..407ae70 100644
--- a/chatgpt_microservice/tools/requirements.txt
+++ b/chatgpt_microservice/tools/requirements.txt
@@ -2,3 +2,4 @@ Flask==3.0.0
PyExecJS==1.5.1
selenium==4.14.0
Werkzeug==3.0.0
+requests==2.31.0
diff --git a/chatgpt_microservice/tools/zeus.py b/chatgpt_microservice/tools/zeus.py
index 5fbd28b..121c691 100644
--- a/chatgpt_microservice/tools/zeus.py
+++ b/chatgpt_microservice/tools/zeus.py
@@ -1,3 +1,4 @@
+import base64
import json
import os
import threading
@@ -5,7 +6,7 @@ import time
import traceback
import execjs
-from flask import Flask
+from flask import Flask, request
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from werkzeug.serving import ThreadedWSGIServer
@@ -55,6 +56,26 @@ return o.toString()
return json.dumps(dict)
+# curl -X POST -d '{}' -H "Content-Type: application/json" http://127.0.0.1:8860/vercel
+@app.route("/vercel", methods=["POST"])
+def get_anti_bot_token():
+ request_body = json.loads(request.data)
+ raw_data = json.loads(base64.b64decode(request_body["data"], validate=True))
+
+ js_script = """const globalThis={marker:"mark"};String.prototype.fontcolor=function(){return `${this}`};
+ return (%s)(%s)""" % (
+ raw_data["c"],
+ raw_data["a"],
+ )
+
+ raw_token = json.dumps(
+ {"r": execjs.compile(js_script).call(""), "t": raw_data["t"]},
+ separators=(",", ":"),
+ )
+ dict = {"data": base64.b64encode(raw_token.encode("utf-16le")).decode()}
+ return json.dumps(dict)
+
+
if __name__ == "__main__":
thread = threading.Thread(target=deepai_refresh)
thread.start()